<?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>168681</bug_id>
          
          <creation_ts>2017-02-21 15:29:36 -0800</creation_ts>
          <short_desc>webkitpy: Move some device management from iOSSimulatorPort to iOSPort class</short_desc>
          <delta_ts>2017-03-01 11:49:21 -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>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jonathan Bedard">jbedard</reporter>
          <assigned_to name="Jonathan Bedard">jbedard</assigned_to>
          <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>glenn</cc>
    
    <cc>lforschler</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1279583</commentid>
    <comment_count>0</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-02-21 15:29:36 -0800</bug_when>
    <thetext>iOS device and iOS simulator ports share some functionality, such as high-level worker number-to-device mapping, test driver name and test runner processes constructor.  Move these shared elements into a base iOSPort class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1279585</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-02-21 15:31:22 -0800</bug_when>
    <thetext>&lt;rdar://problem/30641446&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1279602</commentid>
    <comment_count>2</comment_count>
      <attachid>302325</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-02-21 15:56:33 -0800</bug_when>
    <thetext>Created attachment 302325
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1280901</commentid>
    <comment_count>3</comment_count>
      <attachid>302695</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-02-24 15:36:38 -0800</bug_when>
    <thetext>Created attachment 302695
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281816</commentid>
    <comment_count>4</comment_count>
      <attachid>302695</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-02-28 11:03:58 -0800</bug_when>
    <thetext>Comment on attachment 302695
Patch

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

&gt; Tools/Scripts/webkitpy/port/ios.py:-64
&gt; -    ARCHITECTURES = [&apos;armv7&apos;, &apos;armv7s&apos;, &apos;arm64&apos;]
&gt; -    DEFAULT_ARCHITECTURE = &apos;arm64&apos;
&gt; -    VERSION_FALLBACK_ORDER = [&apos;ios-7&apos;, &apos;ios-8&apos;, &apos;ios-9&apos;, &apos;ios-10&apos;]
&gt; -
&gt; -    @classmethod
&gt; -    def determine_full_port_name(cls, host, options, port_name):
&gt; -        if port_name == cls.port_name:
&gt; -            iphoneos_sdk_version = host.platform.xcode_sdk_version(&apos;iphoneos&apos;)
&gt; -            if not iphoneos_sdk_version:
&gt; -                raise Exception(&quot;Please install the iOS SDK.&quot;)
&gt; -            major_version_number = iphoneos_sdk_version.split(&apos;.&apos;)[0]
&gt; -            port_name = port_name + &apos;-&apos; + major_version_number
&gt; -        return port_name
&gt; -
&gt; -    # Despite their names, these flags do not actually get passed all the way down to webkit-build.
&gt; -    def _build_driver_flags(self):
&gt; -        return [&apos;--sdk&apos;, &apos;iphoneos&apos;] + ([&apos;ARCHS=%s&apos; % self.architecture()] if self.architecture() else [])

This does not seem correct. I suspect this will break iOS EWS for device.

&gt; Tools/Scripts/webkitpy/port/ios.py:46
&gt; +        # Avoid creating/connecting devices just for logging the commandline.

Nit: &quot;connecting&quot; =&gt; &quot;connecting to&quot;

&gt; Tools/Scripts/webkitpy/port/ios.py:78
&gt; +            return self._testing_device(number)

I suggest we add a comment above this line to explain that for simulator this branch implies we are using a dedicated simulator - webkitpy will launch a new Simulator app instead of re-using an open Simulator app instance.

&gt; Tools/Scripts/webkitpy/port/ios_simulator.py:71
&gt; +        self._simulator_group_manager = Simulator(host)

The Simulator class was largely designed as a singleton. If we can avoid holding a local then we should.

&gt; Tools/Scripts/webkitpy/port/ios_simulator.py:72
&gt; +        self._device_map = self._simulator_group_manager.managed_devices

For your consideration, I suggest we define a member function called device_map in the base class and require subclasses to override it. The benefit of this approach is that it prevent an implementer from inadvertently defining a new subclass of iOSPort that does not implement a device mapping. Alternatively, we could keep the code as-is and not define self._device_map in the base class as this would cause Python to raise an exception if a subclass does not override the base class instance variable. I tend to prefer the former approach as it is self-documenting.

&gt; Tools/Scripts/webkitpy/port/ios_simulator.py:78
&gt; +        self._current_device = self._simulator_group_manager.current_device()

Similarly, I suggest we define a base class method that subclasses can override to return the current device. If we find there is much duplication of code in subclasses to create/manage/retrieve from the device mapping we should considering consolidating such management to its own class.

&gt; Tools/Scripts/webkitpy/port/ios_simulator.py:202
&gt; +            self._device_map = self._simulator_group_manager.managed_devices

Is it necessary to do this here? Can the value of self._simulator_group_manager.managed_devices change between when its computed in __init__() and here?

&gt; Tools/Scripts/webkitpy/port/ios_simulator.py:206
&gt; +                self._simulator_group_manager.wait_until_device_is_in_state(device_udid, Simulator.DeviceState.SHUTDOWN)
&gt; +                self._simulator_group_manager.reset_device(device_udid)

The Simulator class was largely designed as a mix of an instance and dumping ground for utility method. I suggest we just access it as the latter here. We should clean this class up.

&gt; Tools/Scripts/webkitpy/port/ios_simulator.py:240
&gt; +            self._simulator_group_manager.wait_until_device_is_booted(self._testing_device(i).udid)

Ditto.

&gt; Tools/Scripts/webkitpy/port/ios_simulator.py:317
&gt; +    def multiple_devices(self):

Maybe using_multiple_devices would be a better name? I do not like this name. I cannot think of a better name at the moment.

&gt; Tools/Scripts/webkitpy/port/ios_simulator.py:324
&gt; +        self._simulator_group_manager.remove_device(number)

The Simulator class was largely designed as a mix of an instance and dumping ground for utility method. I suggest we just access it as the latter here. We should clean this class up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281911</commentid>
    <comment_count>5</comment_count>
      <attachid>302973</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-02-28 13:30:03 -0800</bug_when>
    <thetext>Created attachment 302973
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281915</commentid>
    <comment_count>6</comment_count>
      <attachid>302695</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-02-28 13:31:54 -0800</bug_when>
    <thetext>Comment on attachment 302695
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/port/ios_simulator.py:78
&gt;&gt; +        self._current_device = self._simulator_group_manager.current_device()
&gt; 
&gt; Similarly, I suggest we define a base class method that subclasses can override to return the current device. If we find there is much duplication of code in subclasses to create/manage/retrieve from the device mapping we should considering consolidating such management to its own class.

_current_device is actually computed, this should remain a variable, although _device_map should be a function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1282332</commentid>
    <comment_count>7</comment_count>
      <attachid>302973</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-03-01 10:44:34 -0800</bug_when>
    <thetext>Comment on attachment 302973
Patch

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

&gt; Tools/ChangeLog:7
&gt; +

If you choose to incorporate the device_id_for_worker_number to device_for_worker_number renaming into this patch then please add a remark to the ChangeLog description.

&gt; Tools/Scripts/webkitpy/port/ios.py:41
&gt; +    def _device_map(self):

Maybe a better name for this function would be _device_for_worker_number_map.

&gt; Tools/Scripts/webkitpy/port/ios.py:73
&gt; +        if number is None:
&gt; +            raise RuntimeError(&apos;No worker number given, cannot map devices.&apos;)

From talking with Jonathan in person today, this code is not needed. An instance of SimulatorProcess, which is the only caller of this function, never should pass number := None. We should consider changing SimulatorProcess.__init__() so that the worker number argument does not have a default value to avoid confusion that may lead someone to think that device_for_worker_number() can be passed number := None. This can be done in a separate bug/patch.

&gt; Tools/Scripts/webkitpy/port/ios_device.py:31
&gt; +    port_name = &quot;ios&quot;

Nit: &quot; =&gt; &apos;

&gt; Tools/Scripts/webkitpy/port/ios_simulator.py:-372
&gt; -    # FIXME: This is only exposed so that SimulatorProcess can use it.

We should keep this comment until it is no longer true.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1282350</commentid>
    <comment_count>8</comment_count>
      <attachid>303083</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-03-01 11:08:41 -0800</bug_when>
    <thetext>Created attachment 303083
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1282374</commentid>
    <comment_count>9</comment_count>
      <attachid>303083</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-01 11:49:15 -0800</bug_when>
    <thetext>Comment on attachment 303083
Patch for landing

Clearing flags on attachment: 303083

Committed r213236: &lt;http://trac.webkit.org/changeset/213236&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1282375</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-01 11:49:21 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>302325</attachid>
            <date>2017-02-21 15:56:33 -0800</date>
            <delta_ts>2017-02-24 15:36:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-168681-20170221155347.patch</filename>
            <type>text/plain</type>
            <size>44293</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxMjc3MykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDMyIEBACisyMDE3LTAyLTIxICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogTW92ZSBzb21lIGRldmljZSBtYW5hZ2VtZW50IGZyb20g
aU9TU2ltdWxhdG9yUG9ydCB0byBpT1NQb3J0IGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjg2ODEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9mYWN0b3J5
LnB5OgorICAgICAgICAoUG9ydEZhY3RvcnkpOiBDb3JyZWN0IGltcG9ydCBwYXRoIGZvciBJT1NT
aW11bGF0b3JQb3J0CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weToKKyAg
ICAgICAgKElPU1BvcnQuX19pbml0X18pOiBEZWZpbmUgdmFyaWFibGVzIHNoYXJlZCBiZXR3ZWVu
IGlPUyBwb3J0cy4KKyAgICAgICAgKElPU1BvcnQuZHJpdmVyX2NtZF9saW5lX2Zvcl9sb2dnaW5n
KTogRnJvbSBJT1NTaW11bGF0b3JQb3J0LgorICAgICAgICAoSU9TUG9ydC5kcml2ZXJfbmFtZSk6
IEZyb20gSU9TU2ltdWxhdG9yUG9ydC4KKyAgICAgICAgKElPU1BvcnQubXVsdGlwbGVfZGV2aWNl
cyk6IENoZWNrIGlmIHRoaXMgcG9ydCBzdXBwb3J0cyBtdWx0aXBsZSBkZXZpY2VzLgorICAgICAg
ICAoSU9TUG9ydC5fdGVzdGluZ19kZXZpY2UpOiBNYXAgd29ya2VyIG51bWJlciB0byBkZXZpY2Uu
CisgICAgICAgIChJT1NQb3J0LmRldmljZV9mb3Jfd29ya2VyX251bWJlcik6IENoZWNrIHJldHVy
biBfdGVzdGluZ19kZXZpY2UgaWYgbXVsdGlwbGUgZGV2aWNlcworICAgICAgICBhcmUgc3VwcG9y
dGVkIG9yIHJldHVybiBfY3VycmVudF9kZXZpY2UuIAorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvcG9ydC9pb3Nfc2ltdWxhdG9yLnB5OiBBZGRlZC4KKyAgICAgICAgKElPU1NpbXVsYXRvclBv
cnQpOiBNb3ZlZCBmcm9tIGlvcy5weS4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuX19pbml0
X18pOiBJbmhlcml0IGZyb20gSU9TUG9ydC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvaW9zX3VuaXR0ZXN0LnB5OiBDaGFuZ2UgaW1wb3J0IHBhdGggZm9yIElPU1NpbXVsYXRvclBv
cnQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L3NpbXVsYXRvcl9wcm9jZXNzLnB5
OgorICAgICAgICAoU2ltdWxhdG9yUHJvY2Vzcy5fX2luaXRfXyk6IENhbGwgZmluZF9kZXZpY2Vf
YnlfdWRpZCwgZGV2aWNlX2lkX2Zvcl93b3JrZXJfbnVtYmVyIGhhcyBiZWVuIHJlbW92ZWQuCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS94Y29kZS9zaW11bGF0b3IucHk6CisgICAgICAgIChT
aW11bGF0b3IpOiBNYWtlIF9tYW5hZ2VkX2RldmljZXMgcHVibGljLgorICAgICAgICAoU2ltdWxh
dG9yLmNyZWF0ZV9kZXZpY2UpOiBEaXR0by4KKyAgICAgICAgKFNpbXVsYXRvci5yZW1vdmVfZGV2
aWNlKTogRGl0dG8uCisgICAgICAgIChTaW11bGF0b3IuZGV2aWNlX251bWJlcik6IERpdHRvLgor
CiAyMDE3LTAyLTIxICBKb2huIFdpbGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJlc291cmNlIExvYWQgU3RhdGlzdGljczogQWRkIGFsdGVybmF0ZSBjbGFzc2lmaWNhdGlv
biBtZXRob2QKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9mYWN0b3J5LnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9mYWN0b3J5LnB5CShyZXZp
c2lvbiAyMTI3NDQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZmFjdG9yeS5weQko
d29ya2luZyBjb3B5KQpAQCAtODksNyArODksNyBAQCBjbGFzcyBQb3J0RmFjdG9yeShvYmplY3Qp
OgogICAgIFBPUlRfQ0xBU1NFUyA9ICgKICAgICAgICAgJ2VmbC5FZmxQb3J0JywKICAgICAgICAg
J2d0ay5HdGtQb3J0JywKLSAgICAgICAgJ2lvcy5JT1NTaW11bGF0b3JQb3J0JywKKyAgICAgICAg
J2lvc19zaW11bGF0b3IuSU9TU2ltdWxhdG9yUG9ydCcsCiAgICAgICAgICdpb3MuSU9TUG9ydCcs
CiAgICAgICAgICdtYWMuTWFjUG9ydCcsCiAgICAgICAgICdtb2NrX2RydC5Nb2NrRFJUUG9ydCcs
CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3MucHkJKHJldmlzaW9uIDIxMjc0NCkKKysr
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3MucHkJKHdvcmtpbmcgY29weSkKQEAgLTIw
LDI0ICsyMCwxMSBAQAogIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogIyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCi1p
bXBvcnQgaXRlcnRvb2xzCiBpbXBvcnQgbG9nZ2luZwotaW1wb3J0IG9zCi1pbXBvcnQgcmUKLWlt
cG9ydCBzaHV0aWwKLWltcG9ydCBzdWJwcm9jZXNzCi1pbXBvcnQgdGltZQogCiBmcm9tIHdlYmtp
dHB5LmNvbW1vbi5tZW1vaXplZCBpbXBvcnQgbWVtb2l6ZWQKLWZyb20gd2Via2l0cHkuY29tbW9u
LnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IFNjcmlwdEVycm9yCi1mcm9tIHdlYmtpdHB5LmxheW91
dF90ZXN0cy5tb2RlbHMudGVzdF9jb25maWd1cmF0aW9uIGltcG9ydCBUZXN0Q29uZmlndXJhdGlv
bgotZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBjb25maWcgYXMgcG9ydF9jb25maWcKLWZyb20g
d2Via2l0cHkucG9ydCBpbXBvcnQgZHJpdmVyLCBpbWFnZV9kaWZmCiBmcm9tIHdlYmtpdHB5LnBv
cnQuZGFyd2luIGltcG9ydCBEYXJ3aW5Qb3J0CiBmcm9tIHdlYmtpdHB5LnBvcnQuc2ltdWxhdG9y
X3Byb2Nlc3MgaW1wb3J0IFNpbXVsYXRvclByb2Nlc3MKLWZyb20gd2Via2l0cHkueGNvZGUuc2lt
dWxhdG9yIGltcG9ydCBTaW11bGF0b3IsIFJ1bnRpbWUsIERldmljZVR5cGUKLWZyb20gd2Via2l0
cHkuY29tbW9uLnN5c3RlbS5jcmFzaGxvZ3MgaW1wb3J0IENyYXNoTG9ncwotCiAKIF9sb2cgPSBs
b2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKIApAQCAtNDUsNzIgKzMyLDIyIEBAIF9sb2cgPSBs
b2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKIGNsYXNzIElPU1BvcnQoRGFyd2luUG9ydCk6CiAg
ICAgcG9ydF9uYW1lID0gImlvcyIKIAotICAgIEFSQ0hJVEVDVFVSRVMgPSBbJ2FybXY3JywgJ2Fy
bXY3cycsICdhcm02NCddCi0gICAgREVGQVVMVF9BUkNISVRFQ1RVUkUgPSAnYXJtNjQnCi0gICAg
VkVSU0lPTl9GQUxMQkFDS19PUkRFUiA9IFsnaW9zLTcnLCAnaW9zLTgnLCAnaW9zLTknLCAnaW9z
LTEwJ10KLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBkZXRlcm1pbmVfZnVsbF9wb3J0X25h
bWUoY2xzLCBob3N0LCBvcHRpb25zLCBwb3J0X25hbWUpOgotICAgICAgICBpZiBwb3J0X25hbWUg
PT0gY2xzLnBvcnRfbmFtZToKLSAgICAgICAgICAgIGlwaG9uZW9zX3Nka192ZXJzaW9uID0gaG9z
dC5wbGF0Zm9ybS54Y29kZV9zZGtfdmVyc2lvbignaXBob25lb3MnKQotICAgICAgICAgICAgaWYg
bm90IGlwaG9uZW9zX3Nka192ZXJzaW9uOgotICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlv
bigiUGxlYXNlIGluc3RhbGwgdGhlIGlPUyBTREsuIikKLSAgICAgICAgICAgIG1ham9yX3ZlcnNp
b25fbnVtYmVyID0gaXBob25lb3Nfc2RrX3ZlcnNpb24uc3BsaXQoJy4nKVswXQotICAgICAgICAg
ICAgcG9ydF9uYW1lID0gcG9ydF9uYW1lICsgJy0nICsgbWFqb3JfdmVyc2lvbl9udW1iZXIKLSAg
ICAgICAgcmV0dXJuIHBvcnRfbmFtZQotCi0gICAgIyBEZXNwaXRlIHRoZWlyIG5hbWVzLCB0aGVz
ZSBmbGFncyBkbyBub3QgYWN0dWFsbHkgZ2V0IHBhc3NlZCBhbGwgdGhlIHdheSBkb3duIHRvIHdl
YmtpdC1idWlsZC4KLSAgICBkZWYgX2J1aWxkX2RyaXZlcl9mbGFncyhzZWxmKToKLSAgICAgICAg
cmV0dXJuIFsnLS1zZGsnLCAnaXBob25lb3MnXSArIChbJ0FSQ0hTPSVzJyAlIHNlbGYuYXJjaGl0
ZWN0dXJlKCldIGlmIHNlbGYuYXJjaGl0ZWN0dXJlKCkgZWxzZSBbXSkKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncyk6CisgICAgICAgIHN1cGVyKElPU1Bv
cnQsIHNlbGYpLl9faW5pdF9fKGhvc3QsIHBvcnRfbmFtZSwgKiprd2FyZ3MpCisgICAgICAgIHNl
bGYuX3Rlc3RfcnVubmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBTaW11bGF0b3JQcm9jZXNzCisg
ICAgICAgIHNlbGYuX3ByaW50aW5nX2NtZF9saW5lID0gRmFsc2UKKyAgICAgICAgc2VsZi5fY3Vy
cmVudF9kZXZpY2UgPSBOb25lCisgICAgICAgIHNlbGYuX2RldmljZV9tYXAgPSB7fQogCiAgICAg
ZGVmIG9wZXJhdGluZ19zeXN0ZW0oc2VsZik6CiAgICAgICAgIHJldHVybiAnaW9zJwogCi0KLWNs
YXNzIElPU1NpbXVsYXRvclBvcnQoRGFyd2luUG9ydCk6Ci0gICAgcG9ydF9uYW1lID0gImlvcy1z
aW11bGF0b3IiCi0KLSAgICBGVVRVUkVfVkVSU0lPTiA9ICdmdXR1cmUnCi0gICAgQVJDSElURUNU
VVJFUyA9IFsneDg2XzY0JywgJ3g4NiddCi0gICAgREVGQVVMVF9BUkNISVRFQ1RVUkUgPSAneDg2
XzY0JwotCi0gICAgREVGQVVMVF9ERVZJQ0VfQ0xBU1MgPSAnaXBob25lJwotICAgIENVU1RPTV9E
RVZJQ0VfQ0xBU1NFUyA9IFsnaXBhZCcsICdpcGhvbmU3J10KLSAgICBTREsgPSAnaXBob25lc2lt
dWxhdG9yJwotCi0gICAgU0lNVUxBVE9SX0JVTkRMRV9JRCA9ICdjb20uYXBwbGUuaXBob25lc2lt
dWxhdG9yJwotICAgIFNJTVVMQVRPUl9ESVJFQ1RPUlkgPSAiL3RtcC9XZWJLaXRUZXN0aW5nU2lt
dWxhdG9ycy8iCi0gICAgTFNSRUdJU1RFUl9QQVRIID0gIi9TeXN0ZW0vTGlicmFyeS9GcmFtZXdv
cmtzL0NvcmVTZXJ2aWNlcy5mcmFtZXdvcmsvRnJhbWV3b3Jrcy9MYXVuY2hTZXJ2aWNlcy5mcmFt
ZXdvcmsvVmVyc2lvbnMvQ3VycmVudC9TdXBwb3J0L2xzcmVnaXN0ZXIiCi0gICAgUFJPQ0VTU19D
T1VOVF9FU1RJTUFURV9QRVJfU0lNVUxBVE9SX0lOU1RBTkNFID0gMTAwCi0KLSAgICBERVZJQ0Vf
Q0xBU1NfTUFQID0gewotICAgICAgICAneDg2XzY0JzogewotICAgICAgICAgICAgJ2lwaG9uZSc6
ICdpUGhvbmUgNXMnLAotICAgICAgICAgICAgJ2lwaG9uZTcnOiAnaVBob25lIDcnLAotICAgICAg
ICAgICAgJ2lwYWQnOiAnaVBhZCBBaXInCi0gICAgICAgIH0sCi0gICAgICAgICd4ODYnOiB7Ci0g
ICAgICAgICAgICAnaXBob25lJzogJ2lQaG9uZSA1JywKLSAgICAgICAgICAgICdpcGFkJzogJ2lQ
YWQgUmV0aW5hJwotICAgICAgICB9LAotICAgIH0KLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBo
b3N0LCBwb3J0X25hbWUsICoqa3dhcmdzKToKLSAgICAgICAgRGFyd2luUG9ydC5fX2luaXRfXyhz
ZWxmLCBob3N0LCBwb3J0X25hbWUsICoqa3dhcmdzKQotICAgICAgICBzZWxmLl90ZXN0X3J1bm5l
cl9wcm9jZXNzX2NvbnN0cnVjdG9yID0gU2ltdWxhdG9yUHJvY2VzcwotCi0gICAgICAgIG9wdGlv
bmFsX2RldmljZV9jbGFzcyA9IHNlbGYuZ2V0X29wdGlvbignZGV2aWNlX2NsYXNzJykKKyAgICBk
ZWYgZHJpdmVyX2NtZF9saW5lX2Zvcl9sb2dnaW5nKHNlbGYpOgorICAgICAgICAjIEF2b2lkIGNy
ZWF0aW5nL2Nvbm5lY3RpbmcgZGV2aWNlcyBqdXN0IGZvciBsb2dnaW5nIHRoZSBjb21tYW5kbGlu
ZS4KKyAgICAgICAgc2VsZi5fcHJpbnRpbmdfY21kX2xpbmUgPSBUcnVlCisgICAgICAgIHJlc3Vs
dCA9IHN1cGVyKElPU1BvcnQsIHNlbGYpLmRyaXZlcl9jbWRfbGluZV9mb3JfbG9nZ2luZygpCiAg
ICAgICAgIHNlbGYuX3ByaW50aW5nX2NtZF9saW5lID0gRmFsc2UKLSAgICAgICAgc2VsZi5fZGV2
aWNlX2NsYXNzID0gb3B0aW9uYWxfZGV2aWNlX2NsYXNzIGlmIG9wdGlvbmFsX2RldmljZV9jbGFz
cyBlbHNlIHNlbGYuREVGQVVMVF9ERVZJQ0VfQ0xBU1MKLSAgICAgICAgX2xvZy5kZWJ1ZygnSU9T
U2ltdWxhdG9yUG9ydCBfZGV2aWNlX2NsYXNzIGlzICVzJywgc2VsZi5fZGV2aWNlX2NsYXNzKQot
Ci0gICAgICAgIHNlbGYuX2N1cnJlbnRfZGV2aWNlID0gU2ltdWxhdG9yKGhvc3QpLmN1cnJlbnRf
ZGV2aWNlKCkKLSAgICAgICAgaWYgbm90IHNlbGYuX2N1cnJlbnRfZGV2aWNlOgotICAgICAgICAg
ICAgc2VsZi5zZXRfb3B0aW9uKCdkZWRpY2F0ZWRfc2ltdWxhdG9ycycsIFRydWUpCi0gICAgICAg
IGlmIG5vdCBzZWxmLmdldF9vcHRpb24oJ2RlZGljYXRlZF9zaW11bGF0b3JzJyk6Ci0gICAgICAg
ICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ2NoaWxkX3Byb2Nlc3NlcycpID4gMToKLSAgICAgICAg
ICAgICAgICBfbG9nLndhcm4oJ0Nhbm5vdCBoYXZlIG1vcmUgdGhhbiBvbmUgY2hpbGQgcHJvY2Vz
cyB3aGVuIHVzaW5nIGEgcnVubmluZyBzaW11bGF0b3IuICBTZXR0aW5nIGNoaWxkX3Byb2Nlc3Nl
cyB0byAxLicpCi0gICAgICAgICAgICBzZWxmLnNldF9vcHRpb24oJ2NoaWxkX3Byb2Nlc3Nlcycs
IDEpCisgICAgICAgIHJldHVybiByZXN1bHQKIAogICAgIGRlZiBkcml2ZXJfbmFtZShzZWxmKToK
ICAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCdkcml2ZXJfbmFtZScpOgpAQCAtMTE5LDMxNSAr
NTYsMjQgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKICAgICAgICAgICAg
IHJldHVybiAnV2ViS2l0VGVzdFJ1bm5lckFwcC5hcHAnCiAgICAgICAgIHJldHVybiAnRHVtcFJl
bmRlclRyZWUuYXBwJwogCi0gICAgZGVmIGRyaXZlcl9jbWRfbGluZV9mb3JfbG9nZ2luZyhzZWxm
KToKLSAgICAgICAgIyBBdm9pZCBzcGlubmluZyB1cCBkZXZpY2VzIGp1c3QgZm9yIGxvZ2dpbmcg
dGhlIGNvbW1hbmRsaW5lLgotICAgICAgICBzZWxmLl9wcmludGluZ19jbWRfbGluZSA9IFRydWUK
LSAgICAgICAgcmVzdWx0ID0gc3VwZXIoSU9TU2ltdWxhdG9yUG9ydCwgc2VsZikuZHJpdmVyX2Nt
ZF9saW5lX2Zvcl9sb2dnaW5nKCkKLSAgICAgICAgc2VsZi5fcHJpbnRpbmdfY21kX2xpbmUgPSBG
YWxzZQotICAgICAgICByZXR1cm4gcmVzdWx0Ci0KLSAgICBAcHJvcGVydHkKLSAgICBAbWVtb2l6
ZWQKLSAgICBkZWYgc2ltdWxhdG9yX3J1bnRpbWUoc2VsZik6Ci0gICAgICAgIHJ1bnRpbWVfaWRl
bnRpZmllciA9IHNlbGYuZ2V0X29wdGlvbigncnVudGltZScpCi0gICAgICAgIGlmIHJ1bnRpbWVf
aWRlbnRpZmllcjoKLSAgICAgICAgICAgIHJ1bnRpbWUgPSBSdW50aW1lLmZyb21faWRlbnRpZmll
cihydW50aW1lX2lkZW50aWZpZXIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBydW50aW1l
ID0gUnVudGltZS5mcm9tX3ZlcnNpb25fc3RyaW5nKHNlbGYuaG9zdC5wbGF0Zm9ybS54Y29kZV9z
ZGtfdmVyc2lvbignaXBob25lc2ltdWxhdG9yJykpCi0gICAgICAgIHJldHVybiBydW50aW1lCi0K
LSAgICBkZWYgc2ltdWxhdG9yX2RldmljZV90eXBlKHNlbGYpOgotICAgICAgICBkZXZpY2VfdHlw
ZV9pZGVudGlmaWVyID0gc2VsZi5nZXRfb3B0aW9uKCdkZXZpY2VfdHlwZScpCi0gICAgICAgIGlm
IGRldmljZV90eXBlX2lkZW50aWZpZXI6Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCdzaW11bGF0
b3JfZGV2aWNlX3R5cGUgZm9yIGRldmljZSBpZGVudGlmaWVyICVzJywgZGV2aWNlX3R5cGVfaWRl
bnRpZmllcikKLSAgICAgICAgICAgIGRldmljZV90eXBlID0gRGV2aWNlVHlwZS5mcm9tX2lkZW50
aWZpZXIoZGV2aWNlX3R5cGVfaWRlbnRpZmllcikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAg
IF9sb2cuZGVidWcoJ3NpbXVsYXRvcl9kZXZpY2VfdHlwZSBmb3IgZGV2aWNlICVzJywgc2VsZi5f
ZGV2aWNlX2NsYXNzKQotICAgICAgICAgICAgZGV2aWNlX25hbWUgPSBzZWxmLkRFVklDRV9DTEFT
U19NQVBbc2VsZi5hcmNoaXRlY3R1cmUoKV1bc2VsZi5fZGV2aWNlX2NsYXNzXQotICAgICAgICAg
ICAgaWYgbm90IGRldmljZV9uYW1lOgotICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbign
RmFpbGVkIHRvIGZpbmQgZGV2aWNlIGZvciBhcmNoaXRlY3R1cmUge30gYW5kIGRldmljZSBjbGFz
cyB7fScuZm9ybWF0KHNlbGYuYXJjaGl0ZWN0dXJlKCkpLCBzZWxmLl9kZXZpY2VfY2xhc3MpCi0g
ICAgICAgICAgICBkZXZpY2VfdHlwZSA9IERldmljZVR5cGUuZnJvbV9uYW1lKGRldmljZV9uYW1l
KQotICAgICAgICByZXR1cm4gZGV2aWNlX3R5cGUKLQogICAgIEBtZW1vaXplZAogICAgIGRlZiBj
aGlsZF9wcm9jZXNzZXMoc2VsZik6CiAgICAgICAgIHJldHVybiBpbnQoc2VsZi5nZXRfb3B0aW9u
KCdjaGlsZF9wcm9jZXNzZXMnKSkKIAotICAgIEBtZW1vaXplZAotICAgIGRlZiBkZWZhdWx0X2No
aWxkX3Byb2Nlc3NlcyhzZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIHRoZSBudW1iZXIgb2YgU2lt
dWxhdG9ycyBpbnN0YW5jZXMgdG8gdXNlIGZvciB0aGlzIHBvcnQuIiIiCi0gICAgICAgIGJlc3Rf
Y2hpbGRfcHJvY2Vzc19jb3VudF9mb3JfY3B1ID0gc2VsZi5fZXhlY3V0aXZlLmNwdV9jb3VudCgp
IC8gMgotICAgICAgICBzeXN0ZW1fcHJvY2Vzc19jb3VudF9saW1pdCA9IGludChzdWJwcm9jZXNz
LmNoZWNrX291dHB1dChbInVsaW1pdCIsICItdSJdKS5zdHJpcCgpKQotICAgICAgICBjdXJyZW50
X3Byb2Nlc3NfY291bnQgPSBsZW4oc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyJwcyIsICJhdXgi
XSkuc3RyaXAoKS5zcGxpdCgnXG4nKSkKLSAgICAgICAgX2xvZy5kZWJ1ZygnUHJvY2VzcyBsaW1p
dDogJWQsIGN1cnJlbnQgI3Byb2Nlc3NlczogJWQnICUgKHN5c3RlbV9wcm9jZXNzX2NvdW50X2xp
bWl0LCBjdXJyZW50X3Byb2Nlc3NfY291bnQpKQotICAgICAgICBtYXhpbXVtX3NpbXVsYXRvcl9j
b3VudF9vbl90aGlzX3N5c3RlbSA9IChzeXN0ZW1fcHJvY2Vzc19jb3VudF9saW1pdCAtIGN1cnJl
bnRfcHJvY2Vzc19jb3VudCkgLy8gc2VsZi5QUk9DRVNTX0NPVU5UX0VTVElNQVRFX1BFUl9TSU1V
TEFUT1JfSU5TVEFOQ0UKLSAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIGFsc28gdGFrZSBpbnRv
IGFjY291bnQgdGhlIGF2YWlsYWJsZSBSQU0uCi0KLSAgICAgICAgaWYgKG1heGltdW1fc2ltdWxh
dG9yX2NvdW50X29uX3RoaXNfc3lzdGVtIDwgYmVzdF9jaGlsZF9wcm9jZXNzX2NvdW50X2Zvcl9j
cHUpOgotICAgICAgICAgICAgX2xvZy53YXJuKCJUaGlzIG1hY2hpbmUgY291bGQgc3VwcG9ydCAl
cyBzaW11bGF0b3JzLCBidXQgaXMgb25seSBjb25maWd1cmVkIGZvciAlcy4iCi0gICAgICAgICAg
ICAgICAgJSAoYmVzdF9jaGlsZF9wcm9jZXNzX2NvdW50X2Zvcl9jcHUsIG1heGltdW1fc2ltdWxh
dG9yX2NvdW50X29uX3RoaXNfc3lzdGVtKSkKLSAgICAgICAgICAgIF9sb2cud2FybignUGxlYXNl
IHNlZSA8aHR0cHM6Ly90cmFjLndlYmtpdC5vcmcvd2lraS9JbmNyZWFzaW5nS2VybmVsTGltaXRz
Pi4nKQotCi0gICAgICAgIGlmIG1heGltdW1fc2ltdWxhdG9yX2NvdW50X29uX3RoaXNfc3lzdGVt
ID09IDA6Ci0gICAgICAgICAgICBtYXhpbXVtX3NpbXVsYXRvcl9jb3VudF9vbl90aGlzX3N5c3Rl
bSA9IDEKLQotICAgICAgICByZXR1cm4gbWluKG1heGltdW1fc2ltdWxhdG9yX2NvdW50X29uX3Ro
aXNfc3lzdGVtLCBiZXN0X2NoaWxkX3Byb2Nlc3NfY291bnRfZm9yX2NwdSkKLQotICAgIGRlZiBf
Z2V0X2NyYXNoX2xvZyhzZWxmLCBuYW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFu
LCB0aW1lX2ZuPXRpbWUudGltZSwgc2xlZXBfZm49dGltZS5zbGVlcCwgd2FpdF9mb3JfbG9nPVRy
dWUpOgotICAgICAgICB0aW1lX2ZuID0gdGltZV9mbiBvciB0aW1lLnRpbWUKLSAgICAgICAgc2xl
ZXBfZm4gPSBzbGVlcF9mbiBvciB0aW1lLnNsZWVwCi0KLSAgICAgICAgIyBGSVhNRTogV2Ugc2hv
dWxkIGNvbGxlY3QgdGhlIGFjdHVhbCBjcmFzaCBsb2cgZm9yIER1bXBSZW5kZXJUcmVlLmFwcCBi
ZWNhdXNlIGl0IGluY2x1ZGVzIG1vcmUKLSAgICAgICAgIyBpbmZvcm1hdGlvbiAoZS5nLiBleGNl
cHRpb24gY29kZXMpIHRoYW4gaXMgYXZhaWxhYmxlIGluIHRoZSBzdGFjayB0cmFjZSB3cml0dGVu
IHRvIHN0YW5kYXJkIGVycm9yLgotICAgICAgICBzdGRlcnJfbGluZXMgPSBbXQotICAgICAgICBj
cmFzaGVkX3N1YnByb2Nlc3NfbmFtZV9hbmRfcGlkID0gTm9uZSAgIyBlLmcuICgnRHVtcFJlbmRl
clRyZWUuYXBwJywgMTIzNCkKLSAgICAgICAgZm9yIGxpbmUgaW4gKHN0ZGVyciBvciAnJykuc3Bs
aXRsaW5lcygpOgotICAgICAgICAgICAgaWYgbm90IGNyYXNoZWRfc3VicHJvY2Vzc19uYW1lX2Fu
ZF9waWQ6Ci0gICAgICAgICAgICAgICAgbWF0Y2ggPSBzZWxmLlNVQlBST0NFU1NfQ1JBU0hfUkVH
RVgubWF0Y2gobGluZSkKLSAgICAgICAgICAgICAgICBpZiBtYXRjaDoKLSAgICAgICAgICAgICAg
ICAgICAgY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZCA9IChtYXRjaC5ncm91cCgnc3Vi
cHJvY2Vzc19uYW1lJyksIGludChtYXRjaC5ncm91cCgnc3VicHJvY2Vzc19waWQnKSkpCi0gICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBzdGRlcnJfbGluZXMuYXBwZW5k
KGxpbmUpCi0KLSAgICAgICAgaWYgY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZDoKLSAg
ICAgICAgICAgIHJldHVybiBzZWxmLl9nZXRfY3Jhc2hfbG9nKGNyYXNoZWRfc3VicHJvY2Vzc19u
YW1lX2FuZF9waWRbMF0sIGNyYXNoZWRfc3VicHJvY2Vzc19uYW1lX2FuZF9waWRbMV0sIHN0ZG91
dCwKLSAgICAgICAgICAgICAgICAnXG4nLmpvaW4oc3RkZXJyX2xpbmVzKSwgbmV3ZXJfdGhhbiwg
dGltZV9mbiwgc2xlZXBfZm4sIHdhaXRfZm9yX2xvZykKLQotICAgICAgICAjIEFwcCBjcmFzaGVk
Ci0gICAgICAgIF9sb2cuZGVidWcoJ2xvb2tpbmcgZm9yIGNyYXNoIGxvZyBmb3IgJXM6JXMnICUg
KG5hbWUsIHN0cihwaWQpKSkKLSAgICAgICAgY3Jhc2hfbG9nID0gJycKLSAgICAgICAgY3Jhc2hf
bG9ncyA9IENyYXNoTG9ncyhzZWxmLmhvc3QpCi0gICAgICAgIG5vdyA9IHRpbWVfZm4oKQotICAg
ICAgICBkZWFkbGluZSA9IG5vdyArIDUgKiBpbnQoc2VsZi5nZXRfb3B0aW9uKCdjaGlsZF9wcm9j
ZXNzZXMnLCAxKSkKLSAgICAgICAgd2hpbGUgbm90IGNyYXNoX2xvZyBhbmQgbm93IDw9IGRlYWRs
aW5lOgotICAgICAgICAgICAgY3Jhc2hfbG9nID0gY3Jhc2hfbG9ncy5maW5kX25ld2VzdF9sb2co
bmFtZSwgcGlkLCBpbmNsdWRlX2Vycm9ycz1UcnVlLCBuZXdlcl90aGFuPW5ld2VyX3RoYW4pCi0g
ICAgICAgICAgICBpZiBub3Qgd2FpdF9mb3JfbG9nOgotICAgICAgICAgICAgICAgIGJyZWFrCi0g
ICAgICAgICAgICBpZiBub3QgY3Jhc2hfbG9nIG9yIG5vdCBbbGluZSBmb3IgbGluZSBpbiBjcmFz
aF9sb2cuc3BsaXRsaW5lcygpIGlmIG5vdCBsaW5lLnN0YXJ0c3dpdGgoJ0VSUk9SJyldOgotICAg
ICAgICAgICAgICAgIHNsZWVwX2ZuKDAuMSkKLSAgICAgICAgICAgICAgICBub3cgPSB0aW1lX2Zu
KCkKLQotICAgICAgICBpZiBub3QgY3Jhc2hfbG9nOgotICAgICAgICAgICAgcmV0dXJuIHN0ZGVy
ciwgTm9uZQotICAgICAgICByZXR1cm4gc3RkZXJyLCBjcmFzaF9sb2cKLQotICAgIGRlZiBfYnVp
bGRfZHJpdmVyX2ZsYWdzKHNlbGYpOgotICAgICAgICBhcmNocyA9IFsnQVJDSFM9aTM4NiddIGlm
IHNlbGYuYXJjaGl0ZWN0dXJlKCkgPT0gJ3g4NicgZWxzZSBbXQotICAgICAgICBzZGsgPSBbJy0t
c2RrJywgJ2lwaG9uZXNpbXVsYXRvciddCi0gICAgICAgIHJldHVybiBhcmNocyArIHNkawotCi0g
ICAgZGVmIF9nZW5lcmF0ZV9hbGxfdGVzdF9jb25maWd1cmF0aW9ucyhzZWxmKToKLSAgICAgICAg
Y29uZmlndXJhdGlvbnMgPSBbXQotICAgICAgICBmb3IgYnVpbGRfdHlwZSBpbiBzZWxmLkFMTF9C
VUlMRF9UWVBFUzoKLSAgICAgICAgICAgIGZvciBhcmNoaXRlY3R1cmUgaW4gc2VsZi5BUkNISVRF
Q1RVUkVTOgotICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25zLmFwcGVuZChUZXN0Q29uZmln
dXJhdGlvbih2ZXJzaW9uPXNlbGYuX3ZlcnNpb24sIGFyY2hpdGVjdHVyZT1hcmNoaXRlY3R1cmUs
IGJ1aWxkX3R5cGU9YnVpbGRfdHlwZSkpCi0gICAgICAgIHJldHVybiBjb25maWd1cmF0aW9ucwot
Ci0gICAgZGVmIGRlZmF1bHRfYmFzZWxpbmVfc2VhcmNoX3BhdGgoc2VsZik6Ci0gICAgICAgIGlm
IHNlbGYuZ2V0X29wdGlvbignd2Via2l0X3Rlc3RfcnVubmVyJyk6Ci0gICAgICAgICAgICBmYWxs
YmFja19uYW1lcyA9IFtzZWxmLl93azJfcG9ydF9uYW1lKCldICsgW3NlbGYucG9ydF9uYW1lXSAr
IFsnd2syJ10KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGZhbGxiYWNrX25hbWVzID0gW3Nl
bGYucG9ydF9uYW1lICsgJy13azEnXSArIFtzZWxmLnBvcnRfbmFtZV0KLQotICAgICAgICByZXR1
cm4gbWFwKHNlbGYuX3dlYmtpdF9iYXNlbGluZV9wYXRoLCBmYWxsYmFja19uYW1lcykKLQotICAg
IGRlZiBfc2V0X2RldmljZV9jbGFzcyhzZWxmLCBkZXZpY2VfY2xhc3MpOgotICAgICAgICBzZWxm
Ll9kZXZpY2VfY2xhc3MgPSBkZXZpY2VfY2xhc3MgaWYgZGV2aWNlX2NsYXNzIGVsc2Ugc2VsZi5E
RUZBVUxUX0RFVklDRV9DTEFTUwotCi0gICAgZGVmIF9jcmVhdGVfc2ltdWxhdG9ycyhzZWxmKToK
LSAgICAgICAgaWYgKHNlbGYuZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoKSA8IHNlbGYuY2hpbGRf
cHJvY2Vzc2VzKCkpOgotICAgICAgICAgICAgX2xvZy53YXJuKCdZb3UgaGF2ZSBzcGVjaWZpZWQg
dmVyeSBoaWdoIHZhbHVlKHswfSkgZm9yIC0tY2hpbGQtcHJvY2Vzc2VzJy5mb3JtYXQoc2VsZi5j
aGlsZF9wcm9jZXNzZXMoKSkpCi0gICAgICAgICAgICBfbG9nLndhcm4oJ21heGltdW0gY2hpbGQt
cHJvY2Vzc2VzIHdoaWNoIGNhbiBiZSBzdXBwb3J0ZWQgb24gdGhpcyBzeXN0ZW0gYXJlOiB7MH0n
LmZvcm1hdChzZWxmLmRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKCkpKQotICAgICAgICAgICAgX2xv
Zy53YXJuKCdUaGlzIGlzIHZlcnkgbGlrZWx5IHRvIGZhaWwuJykKLQotICAgICAgICBpZiBzZWxm
Ll91c2luZ19kZWRpY2F0ZWRfc2ltdWxhdG9ycygpOgotICAgICAgICAgICAgc2VsZi5fY3JlYXRl
U2ltdWxhdG9yQXBwcygpCi0KLSAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZShzZWxmLmNoaWxk
X3Byb2Nlc3NlcygpKToKLSAgICAgICAgICAgICAgICBzZWxmLl9jcmVhdGVfZGV2aWNlKGkpCi0K
LSAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZShzZWxmLmNoaWxkX3Byb2Nlc3NlcygpKToKLSAg
ICAgICAgICAgICAgICBkZXZpY2VfdWRpZCA9IHNlbGYuX3Rlc3RpbmdfZGV2aWNlKGkpLnVkaWQK
LSAgICAgICAgICAgICAgICBTaW11bGF0b3Iud2FpdF91bnRpbF9kZXZpY2VfaXNfaW5fc3RhdGUo
ZGV2aWNlX3VkaWQsIFNpbXVsYXRvci5EZXZpY2VTdGF0ZS5TSFVURE9XTikKLSAgICAgICAgICAg
ICAgICBTaW11bGF0b3IucmVzZXRfZGV2aWNlKGRldmljZV91ZGlkKQotICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgYXNzZXJ0KHNlbGYuX2N1cnJlbnRfZGV2aWNlKQotICAgICAgICAgICAgaWYg
c2VsZi5fY3VycmVudF9kZXZpY2UubmFtZSAhPSBzZWxmLnNpbXVsYXRvcl9kZXZpY2VfdHlwZSgp
Lm5hbWU6Ci0gICAgICAgICAgICAgICAgX2xvZy53YXJuKCJFeHBlY3RlZCBzaW11bGF0b3Igb2Yg
dHlwZSAnIiArIHNlbGYuc2ltdWxhdG9yX2RldmljZV90eXBlKCkubmFtZSArICInIGJ1dCBmb3Vu
ZCBzaW11bGF0b3Igb2YgdHlwZSAnIiArIHNlbGYuX2N1cnJlbnRfZGV2aWNlLm5hbWUgKyAiJyIp
Ci0gICAgICAgICAgICAgICAgX2xvZy53YXJuKCdUaGUgbmV4dCBibG9jayBvZiB0ZXN0cyBtYXkg
ZmFpbCBkdWUgdG8gZGV2aWNlIG1pcy1tYXRjaCcpCi0KLSAgICBkZWYgc2V0dXBfdGVzdF9ydW4o
c2VsZiwgZGV2aWNlX2NsYXNzPU5vbmUpOgotICAgICAgICBtYWNfb3NfdmVyc2lvbiA9IHNlbGYu
aG9zdC5wbGF0Zm9ybS5vc192ZXJzaW9uCi0KLSAgICAgICAgc2VsZi5fc2V0X2RldmljZV9jbGFz
cyhkZXZpY2VfY2xhc3MpCi0KLSAgICAgICAgX2xvZy5kZWJ1ZygnJykKLSAgICAgICAgX2xvZy5k
ZWJ1Zygnc2V0dXBfdGVzdF9ydW4gZm9yICVzJywgc2VsZi5fZGV2aWNlX2NsYXNzKQotCi0gICAg
ICAgIHNlbGYuX2NyZWF0ZV9zaW11bGF0b3JzKCkKLQotICAgICAgICBpZiBub3Qgc2VsZi5fdXNp
bmdfZGVkaWNhdGVkX3NpbXVsYXRvcnMoKToKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAg
IGZvciBpIGluIHhyYW5nZShzZWxmLmNoaWxkX3Byb2Nlc3NlcygpKToKLSAgICAgICAgICAgIGRl
dmljZV91ZGlkID0gc2VsZi5fdGVzdGluZ19kZXZpY2UoaSkudWRpZAotICAgICAgICAgICAgX2xv
Zy5kZWJ1ZygndGVzdGluZyBkZXZpY2UgJXMgaGFzIHVkaWQgJXMnLCBpLCBkZXZpY2VfdWRpZCkK
LQotICAgICAgICAgICAgIyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzIwOTE2MTQwPiBTd2l0Y2gg
dG8gdXNpbmcgQ29yZVNpbXVsYXRvci5mcmFtZXdvcmsgZm9yIGxhdW5jaGluZyBhbmQgcXVpdHRp
bmcgaU9TIFNpbXVsYXRvcgotICAgICAgICAgICAgc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5k
KFsKLSAgICAgICAgICAgICAgICAnb3BlbicsICctZycsICctYicsIHNlbGYuU0lNVUxBVE9SX0JV
TkRMRV9JRCArIHN0cihpKSwKLSAgICAgICAgICAgICAgICAnLS1hcmdzJywgJy1DdXJyZW50RGV2
aWNlVURJRCcsIGRldmljZV91ZGlkXSkKLQotICAgICAgICAgICAgaWYgbWFjX29zX3ZlcnNpb24g
aW4gWydlbGNhcGl0YW4nLCAneW9zZW1pdGUnLCAnbWF2ZXJpY2tzJ106Ci0gICAgICAgICAgICAg
ICAgdGltZS5zbGVlcCgyLjUpCi0KLSAgICAgICAgX2xvZy5pbmZvKCdXYWl0aW5nIGZvciBhbGwg
aU9TIFNpbXVsYXRvcnMgdG8gZmluaXNoIGJvb3RpbmcuJykKLSAgICAgICAgZm9yIGkgaW4geHJh
bmdlKHNlbGYuY2hpbGRfcHJvY2Vzc2VzKCkpOgotICAgICAgICAgICAgU2ltdWxhdG9yLndhaXRf
dW50aWxfZGV2aWNlX2lzX2Jvb3RlZChzZWxmLl90ZXN0aW5nX2RldmljZShpKS51ZGlkKQotCi0g
ICAgZGVmIF9xdWl0X2lvc19zaW11bGF0b3Ioc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLl91
c2luZ19kZWRpY2F0ZWRfc2ltdWxhdG9ycygpOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAg
IF9sb2cuZGVidWcoIl9xdWl0X2lvc19zaW11bGF0b3Iga2lsbGluZyBhbGwgU2ltdWxhdG9yIHBy
b2Nlc3NlcyIpCi0gICAgICAgICMgRklYTUU6IFdlIHNob3VsZCBraWxsIG9ubHkgdGhlIFNpbXVs
YXRvcnMgd2Ugc3RhcnRlZC4KLSAgICAgICAgc3VicHJvY2Vzcy5jYWxsKFsia2lsbGFsbCIsICIt
OSIsICItbSIsICJTaW11bGF0b3IiXSkKLQotICAgIGRlZiBjbGVhbl91cF90ZXN0X3J1bihzZWxm
KToKLSAgICAgICAgc3VwZXIoSU9TU2ltdWxhdG9yUG9ydCwgc2VsZikuY2xlYW5fdXBfdGVzdF9y
dW4oKQotICAgICAgICBfbG9nLmRlYnVnKCJjbGVhbl91cF90ZXN0X3J1biIpCi0gICAgICAgIHNl
bGYuX3F1aXRfaW9zX3NpbXVsYXRvcigpCi0gICAgICAgIGZpZm9zID0gW3BhdGggZm9yIHBhdGgg
aW4gb3MubGlzdGRpcignL3RtcCcpIGlmIHJlLnNlYXJjaCgnb3JnLndlYmtpdC4oRHVtcFJlbmRl
clRyZWV8V2ViS2l0VGVzdFJ1bm5lcikuKl8oSU58T1VUfEVSUk9SKScsIHBhdGgpXQotICAgICAg
ICBmb3IgZmlmbyBpbiBmaWZvczoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBv
cy5yZW1vdmUob3MucGF0aC5qb2luKCcvdG1wJywgZmlmbykpCi0gICAgICAgICAgICBleGNlcHQg
T1NFcnJvcjoKLSAgICAgICAgICAgICAgICBfbG9nLndhcm5pbmcoJ1VuYWJsZSB0byByZW1vdmUg
JyArIGZpZm8pCi0gICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIGlmIG5vdCBzZWxmLl91
c2luZ19kZWRpY2F0ZWRfc2ltdWxhdG9ycygpOgotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAg
ICAgZm9yIGkgaW4geHJhbmdlKHNlbGYuY2hpbGRfcHJvY2Vzc2VzKCkpOgotICAgICAgICAgICAg
c2ltdWxhdG9yX3BhdGggPSBzZWxmLmdldF9zaW11bGF0b3JfcGF0aChpKQotICAgICAgICAgICAg
ZGV2aWNlX3VkaWQgPSBzZWxmLl90ZXN0aW5nX2RldmljZShpKS51ZGlkCi0gICAgICAgICAgICBz
ZWxmLl9yZW1vdmVfZGV2aWNlKGkpCi0KLSAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0
cyhzaW11bGF0b3JfcGF0aCk6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAg
IHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQoW3NlbGYu
TFNSRUdJU1RFUl9QQVRILCAiLXUiLCBzaW11bGF0b3JfcGF0aF0pCi0KLSAgICAgICAgICAgICAg
ICBfbG9nLmRlYnVnKCdybXRyZWUgJXMnLCBzaW11bGF0b3JfcGF0aCkKLSAgICAgICAgICAgICAg
ICBzZWxmLl9maWxlc3lzdGVtLnJtdHJlZShzaW11bGF0b3JfcGF0aCkKLQotICAgICAgICAgICAg
ICAgIGxvZ3NfcGF0aCA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl9maWxlc3lzdGVtLmV4
cGFuZHVzZXIoIn4iKSwgIkxpYnJhcnkvTG9ncy9Db3JlU2ltdWxhdG9yLyIsIGRldmljZV91ZGlk
KQotICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoJ3JtdHJlZSAlcycsIGxvZ3NfcGF0aCkKLSAg
ICAgICAgICAgICAgICBzZWxmLl9maWxlc3lzdGVtLnJtdHJlZShsb2dzX3BhdGgpCi0KLSAgICAg
ICAgICAgICAgICBzYXZlZF9zdGF0ZV9wYXRoID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYu
X2ZpbGVzeXN0ZW0uZXhwYW5kdXNlcigifiIpLCAiTGlicmFyeS9TYXZlZCBBcHBsaWNhdGlvbiBT
dGF0ZS8iLCBzZWxmLlNJTVVMQVRPUl9CVU5ETEVfSUQgKyBzdHIoaSkgKyAiLnNhdmVkU3RhdGUi
KQotICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoJ3JtdHJlZSAlcycsIHNhdmVkX3N0YXRlX3Bh
dGgpCi0gICAgICAgICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5ybXRyZWUoc2F2ZWRfc3RhdGVf
cGF0aCkKLQotICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgIF9sb2cud2Fybmlu
ZygnVW5hYmxlIHRvIHJlbW92ZSBTaW11bGF0b3InICsgc3RyKGkpKQotCi0gICAgZGVmIHNldHVw
X2Vudmlyb25fZm9yX3NlcnZlcihzZWxmLCBzZXJ2ZXJfbmFtZT1Ob25lKToKLSAgICAgICAgX2xv
Zy5kZWJ1Zygic2V0dXBfZW52aXJvbl9mb3Jfc2VydmVyIikKLSAgICAgICAgZW52ID0gc3VwZXIo
SU9TU2ltdWxhdG9yUG9ydCwgc2VsZikuc2V0dXBfZW52aXJvbl9mb3Jfc2VydmVyKHNlcnZlcl9u
YW1lKQotICAgICAgICBpZiBzZXJ2ZXJfbmFtZSA9PSBzZWxmLmRyaXZlcl9uYW1lKCk6Ci0gICAg
ICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ2xlYWtzJyk6Ci0gICAgICAgICAgICAgICAgZW52
WydNYWxsb2NTdGFja0xvZ2dpbmcnXSA9ICcxJwotICAgICAgICAgICAgICAgIGVudlsnX19YUENf
TWFsbG9jU3RhY2tMb2dnaW5nJ10gPSAnMScKLSAgICAgICAgICAgICAgICBlbnZbJ01hbGxvY1Nj
cmliYmxlJ10gPSAnMScKLSAgICAgICAgICAgICAgICBlbnZbJ19fWFBDX01hbGxvY1NjcmliYmxl
J10gPSAnMScKLSAgICAgICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbignZ3VhcmRfbWFsbG9jJyk6
Ci0gICAgICAgICAgICAgICAgc2VsZi5fYXBwZW5kX3ZhbHVlX2NvbG9uX3NlcGFyYXRlZChlbnYs
ICdEWUxEX0lOU0VSVF9MSUJSQVJJRVMnLCAnL3Vzci9saWIvbGliZ21hbGxvYy5keWxpYicpCi0g
ICAgICAgICAgICAgICAgc2VsZi5fYXBwZW5kX3ZhbHVlX2NvbG9uX3NlcGFyYXRlZChlbnYsICdf
X1hQQ19EWUxEX0lOU0VSVF9MSUJSQVJJRVMnLCAnL3Vzci9saWIvbGliZ21hbGxvYy5keWxpYicp
Ci0gICAgICAgIGVudlsnWE1MX0NBVEFMT0dfRklMRVMnXSA9ICcnICAjIHdvcmsgYXJvdW5kIG1p
c3NpbmcgL2V0Yy9jYXRhbG9nIDxyZGFyOi8vcHJvYmxlbS80MjkyOTk1PgotICAgICAgICByZXR1
cm4gZW52Ci0KLSAgICBkZWYgb3BlcmF0aW5nX3N5c3RlbShzZWxmKToKLSAgICAgICAgcmV0dXJu
ICdpb3Mtc2ltdWxhdG9yJwotCi0gICAgZGVmIGNoZWNrX3N5c19kZXBzKHNlbGYsIG5lZWRzX2h0
dHApOgotICAgICAgICBpZiBub3Qgc2VsZi5zaW11bGF0b3JfcnVudGltZS5hdmFpbGFibGU6Ci0g
ICAgICAgICAgICBfbG9nLmVycm9yKCdUaGUgaU9TIFNpbXVsYXRvciBydW50aW1lIHdpdGggaWRl
bnRpZmllciAiezB9IiBjYW5ub3QgYmUgdXNlZCBiZWNhdXNlIGl0IGlzIHVuYXZhaWxhYmxlLicu
Zm9ybWF0KHNlbGYuc2ltdWxhdG9yX3J1bnRpbWUuaWRlbnRpZmllcikpCi0gICAgICAgICAgICBy
ZXR1cm4gRmFsc2UKLSAgICAgICAgcmV0dXJuIHN1cGVyKElPU1NpbXVsYXRvclBvcnQsIHNlbGYp
LmNoZWNrX3N5c19kZXBzKG5lZWRzX2h0dHApCi0KLSAgICBTVUJQUk9DRVNTX0NSQVNIX1JFR0VY
ID0gcmUuY29tcGlsZSgnI0NSQVNIRUQgLSAoP1A8c3VicHJvY2Vzc19uYW1lPlxTKykgXChwaWQg
KD9QPHN1YnByb2Nlc3NfcGlkPlxkKylcKScpCi0KLSAgICBkZWYgX3VzaW5nX2RlZGljYXRlZF9z
aW11bGF0b3JzKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5nZXRfb3B0aW9uKCdkZWRpY2F0
ZWRfc2ltdWxhdG9ycycpCi0KLSAgICBkZWYgX2NyZWF0ZV9kZXZpY2Uoc2VsZiwgbnVtYmVyKToK
LSAgICAgICAgcmV0dXJuIFNpbXVsYXRvci5jcmVhdGVfZGV2aWNlKG51bWJlciwgc2VsZi5zaW11
bGF0b3JfZGV2aWNlX3R5cGUoKSwgc2VsZi5zaW11bGF0b3JfcnVudGltZSkKLQotICAgIGRlZiBf
cmVtb3ZlX2RldmljZShzZWxmLCBudW1iZXIpOgotICAgICAgICBTaW11bGF0b3IucmVtb3ZlX2Rl
dmljZShudW1iZXIpCisgICAgZGVmIG11bHRpcGxlX2RldmljZXMoc2VsZik6CisgICAgICAgIHJl
dHVybiBGYWxzZQogCiAgICAgZGVmIF90ZXN0aW5nX2RldmljZShzZWxmLCBudW1iZXIpOgotICAg
ICAgICByZXR1cm4gU2ltdWxhdG9yLmRldmljZV9udW1iZXIobnVtYmVyKQotCi0gICAgIyBGSVhN
RTogVGhpcyBpcyBvbmx5IGV4cG9zZWQgc28gdGhhdCBTaW11bGF0b3JQcm9jZXNzIGNhbiB1c2Ug
aXQuCi0gICAgZGVmIGRldmljZV9pZF9mb3Jfd29ya2VyX251bWJlcihzZWxmLCBudW1iZXIpOgor
ICAgICAgICBkZXZpY2UgPSBzZWxmLl9kZXZpY2VfbWFwW251bWJlcl0KKyAgICAgICAgaWYgbm90
IGRldmljZToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignRGV2aWNlIGF0IHt9IGNv
dWxkIG5vdCBiZSBmb3VuZCcuZm9ybWF0KG51bWJlcikpCisgICAgICAgIHJldHVybiBkZXZpY2UK
KworICAgIGRlZiBkZXZpY2VfZm9yX3dvcmtlcl9udW1iZXIoc2VsZiwgbnVtYmVyKToKKyAgICAg
ICAgaWYgbnVtYmVyIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ05v
IHdvcmtlciBudW1iZXIgZ2l2ZW4sIGNhbm5vdCBtYXAgZGV2aWNlcy4nKQogICAgICAgICBpZiBz
ZWxmLl9wcmludGluZ19jbWRfbGluZToKLSAgICAgICAgICAgIHJldHVybiAnPGR1bW15IGlkPicK
LSAgICAgICAgaWYgc2VsZi5fdXNpbmdfZGVkaWNhdGVkX3NpbXVsYXRvcnMoKToKLSAgICAgICAg
ICAgIHJldHVybiBzZWxmLl90ZXN0aW5nX2RldmljZShudW1iZXIpLnVkaWQKLSAgICAgICAgcmV0
dXJuIHNlbGYuX2N1cnJlbnRfZGV2aWNlLnVkaWQKLQotICAgIGRlZiBnZXRfc2ltdWxhdG9yX3Bh
dGgoc2VsZiwgc3VmZml4PSIiKToKLSAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLlNJ
TVVMQVRPUl9ESVJFQ1RPUlksICJTaW11bGF0b3IiICsgc3RyKHN1ZmZpeCkgKyAiLmFwcCIpCi0K
LSAgICBkZWYgZGlmZl9pbWFnZShzZWxmLCBleHBlY3RlZF9jb250ZW50cywgYWN0dWFsX2NvbnRl
bnRzLCB0b2xlcmFuY2U9Tm9uZSk6Ci0gICAgICAgIGlmIG5vdCBhY3R1YWxfY29udGVudHMgYW5k
IG5vdCBleHBlY3RlZF9jb250ZW50czoKLSAgICAgICAgICAgIHJldHVybiAoTm9uZSwgMCwgTm9u
ZSkKLSAgICAgICAgaWYgbm90IGFjdHVhbF9jb250ZW50cyBvciBub3QgZXhwZWN0ZWRfY29udGVu
dHM6Ci0gICAgICAgICAgICByZXR1cm4gKFRydWUsIDAsIE5vbmUpCi0gICAgICAgIGlmIG5vdCBz
ZWxmLl9pbWFnZV9kaWZmZXI6Ci0gICAgICAgICAgICBzZWxmLl9pbWFnZV9kaWZmZXIgPSBpbWFn
ZV9kaWZmLklPU1NpbXVsYXRvckltYWdlRGlmZmVyKHNlbGYpCi0gICAgICAgIHNlbGYuc2V0X29w
dGlvbl9kZWZhdWx0KCd0b2xlcmFuY2UnLCAwLjEpCi0gICAgICAgIGlmIHRvbGVyYW5jZSBpcyBO
b25lOgotICAgICAgICAgICAgdG9sZXJhbmNlID0gc2VsZi5nZXRfb3B0aW9uKCd0b2xlcmFuY2Un
KQotICAgICAgICByZXR1cm4gc2VsZi5faW1hZ2VfZGlmZmVyLmRpZmZfaW1hZ2UoZXhwZWN0ZWRf
Y29udGVudHMsIGFjdHVhbF9jb250ZW50cywgdG9sZXJhbmNlKQotCi0gICAgZGVmIHJlc2V0X3By
ZWZlcmVuY2VzKHNlbGYpOgotICAgICAgICBfbG9nLmRlYnVnKCJyZXNldF9wcmVmZXJlbmNlcyIp
Ci0gICAgICAgIHNlbGYuX3F1aXRfaW9zX3NpbXVsYXRvcigpCi0gICAgICAgICMgTWF5YmUgdGhp
cyBzaG91bGQgZGVsZXRlIGFsbCBkZXZpY2VzIHRoYXQgd2UndmUgY3JlYXRlZD8KLQotICAgIGRl
ZiBubV9jb21tYW5kKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi54Y3J1bl9maW5kKCdubScp
Ci0KLSAgICBAcHJvcGVydHkKLSAgICBAbWVtb2l6ZWQKLSAgICBkZWYgZGV2ZWxvcGVyX2Rpcihz
ZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbJ3hjb2Rl
LXNlbGVjdCcsICctLXByaW50LXBhdGgnXSkucnN0cmlwKCkKLQotICAgIGRlZiBsb2dnaW5nX3Bh
dHRlcm5zX3RvX3N0cmlwKHNlbGYpOgotICAgICAgICByZXR1cm4gW10KLQotICAgIGRlZiBzdGRl
cnJfcGF0dGVybnNfdG9fc3RyaXAoc2VsZik6Ci0gICAgICAgIHJldHVybiBbXQotCi0gICAgZGVm
IF9jcmVhdGVTaW11bGF0b3JBcHBzKHNlbGYpOgotICAgICAgICBmb3IgaSBpbiB4cmFuZ2Uoc2Vs
Zi5jaGlsZF9wcm9jZXNzZXMoKSk6Ci0gICAgICAgICAgICBzZWxmLl9jcmVhdGVTaW11bGF0b3JB
cHAoaSkKLQotICAgIGRlZiBfY3JlYXRlU2ltdWxhdG9yQXBwKHNlbGYsIHN1ZmZpeCk6Ci0gICAg
ICAgIGRlc3RpbmF0aW9uID0gc2VsZi5nZXRfc2ltdWxhdG9yX3BhdGgoc3VmZml4KQotICAgICAg
ICBfbG9nLmluZm8oIkNyZWF0aW5nIGFwcDoiICsgZGVzdGluYXRpb24pCi0gICAgICAgIGlmIG9z
LnBhdGguZXhpc3RzKGRlc3RpbmF0aW9uKToKLSAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoZGVz
dGluYXRpb24sIGlnbm9yZV9lcnJvcnM9VHJ1ZSkKLSAgICAgICAgc2ltdWxhdG9yX2FwcF9wYXRo
ID0gc2VsZi5kZXZlbG9wZXJfZGlyICsgIi9BcHBsaWNhdGlvbnMvU2ltdWxhdG9yLmFwcCIKLSAg
ICAgICAgc2h1dGlsLmNvcHl0cmVlKHNpbXVsYXRvcl9hcHBfcGF0aCwgZGVzdGluYXRpb24pCi0K
LSAgICAgICAgIyBVcGRhdGUgYXBwJ3MgcGFja2FnZS1uYW1lIGluc2lkZSBwbGlzdCBhbmQgcmUt
Y29kZS1zaWduIGl0Ci0gICAgICAgIHBsaXN0X3BhdGggPSBkZXN0aW5hdGlvbiArICIvQ29udGVu
dHMvSW5mby5wbGlzdCIKLSAgICAgICAgY29tbWFuZCA9ICJTZXQgQ0ZCdW5kbGVJZGVudGlmaWVy
IGNvbS5hcHBsZS5pcGhvbmVzaW11bGF0b3IiICsgc3RyKHN1ZmZpeCkKLSAgICAgICAgc3VicHJv
Y2Vzcy5jaGVja19vdXRwdXQoWyIvdXNyL2xpYmV4ZWMvUGxpc3RCdWRkeSIsICItYyIsIGNvbW1h
bmQsIHBsaXN0X3BhdGhdKQotICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbImluc3Rh
bGxfbmFtZV90b29sIiwgIi1hZGRfcnBhdGgiLCBzZWxmLmRldmVsb3Blcl9kaXIgKyAiL0xpYnJh
cnkvUHJpdmF0ZUZyYW1ld29ya3MvIiwgZGVzdGluYXRpb24gKyAiL0NvbnRlbnRzL01hY09TL1Np
bXVsYXRvciJdKQotICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbImluc3RhbGxfbmFt
ZV90b29sIiwgIi1hZGRfcnBhdGgiLCBzZWxmLmRldmVsb3Blcl9kaXIgKyAiLy4uL0ZyYW1ld29y
a3MvIiwgZGVzdGluYXRpb24gKyAiL0NvbnRlbnRzL01hY09TL1NpbXVsYXRvciJdKQotICAgICAg
ICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbImNvZGVzaWduIiwgIi1mcyIsICItIiwgZGVzdGlu
YXRpb25dKQotICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbc2VsZi5MU1JFR0lTVEVS
X1BBVEgsICItZiIsIGRlc3RpbmF0aW9uXSkKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAg
ICAgIGlmIHNlbGYubXVsdGlwbGVfZGV2aWNlcygpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYu
X3Rlc3RpbmdfZGV2aWNlKG51bWJlcikKKyAgICAgICAgcmV0dXJuIHNlbGYuX2N1cnJlbnRfZGV2
aWNlCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3NpbXVsYXRvci5weQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3NpbXVsYXRvci5w
eQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3NpbXVs
YXRvci5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM3OSBAQAorIyBDb3B5cmlnaHQgKEMp
IDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
IyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
CisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MK
K2ltcG9ydCByZQoraW1wb3J0IHNodXRpbAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCB0aW1l
CisKK2Zyb20gd2Via2l0cHkuY29tbW9uLm1lbW9pemVkIGltcG9ydCBtZW1vaXplZAorZnJvbSB3
ZWJraXRweS5sYXlvdXRfdGVzdHMubW9kZWxzLnRlc3RfY29uZmlndXJhdGlvbiBpbXBvcnQgVGVz
dENvbmZpZ3VyYXRpb24KK2Zyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgaW1hZ2VfZGlmZgorZnJv
bSB3ZWJraXRweS5wb3J0LmlvcyBpbXBvcnQgSU9TUG9ydAorZnJvbSB3ZWJraXRweS54Y29kZS5z
aW11bGF0b3IgaW1wb3J0IFNpbXVsYXRvciwgUnVudGltZSwgRGV2aWNlVHlwZQorZnJvbSB3ZWJr
aXRweS5jb21tb24uc3lzdGVtLmNyYXNobG9ncyBpbXBvcnQgQ3Jhc2hMb2dzCisKKworX2xvZyA9
IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisKK2NsYXNzIElPU1NpbXVsYXRvclBvcnQo
SU9TUG9ydCk6CisgICAgcG9ydF9uYW1lID0gImlvcy1zaW11bGF0b3IiCisKKyAgICBGVVRVUkVf
VkVSU0lPTiA9ICdmdXR1cmUnCisgICAgQVJDSElURUNUVVJFUyA9IFsneDg2XzY0JywgJ3g4Nidd
CisgICAgREVGQVVMVF9BUkNISVRFQ1RVUkUgPSAneDg2XzY0JworCisgICAgREVGQVVMVF9ERVZJ
Q0VfQ0xBU1MgPSAnaXBob25lJworICAgIENVU1RPTV9ERVZJQ0VfQ0xBU1NFUyA9IFsnaXBhZCcs
ICdpcGhvbmU3J10KKyAgICBTREsgPSAnaXBob25lc2ltdWxhdG9yJworCisgICAgU0lNVUxBVE9S
X0JVTkRMRV9JRCA9ICdjb20uYXBwbGUuaXBob25lc2ltdWxhdG9yJworICAgIFNJTVVMQVRPUl9E
SVJFQ1RPUlkgPSAiL3RtcC9XZWJLaXRUZXN0aW5nU2ltdWxhdG9ycy8iCisgICAgTFNSRUdJU1RF
Ul9QQVRIID0gIi9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0NvcmVTZXJ2aWNlcy5mcmFtZXdv
cmsvRnJhbWV3b3Jrcy9MYXVuY2hTZXJ2aWNlcy5mcmFtZXdvcmsvVmVyc2lvbnMvQ3VycmVudC9T
dXBwb3J0L2xzcmVnaXN0ZXIiCisgICAgUFJPQ0VTU19DT1VOVF9FU1RJTUFURV9QRVJfU0lNVUxB
VE9SX0lOU1RBTkNFID0gMTAwCisKKyAgICBERVZJQ0VfQ0xBU1NfTUFQID0geworICAgICAgICAn
eDg2XzY0JzogeworICAgICAgICAgICAgJ2lwaG9uZSc6ICdpUGhvbmUgNXMnLAorICAgICAgICAg
ICAgJ2lwaG9uZTcnOiAnaVBob25lIDcnLAorICAgICAgICAgICAgJ2lwYWQnOiAnaVBhZCBBaXIn
LAorICAgICAgICB9LAorICAgICAgICAneDg2JzogeworICAgICAgICAgICAgJ2lwaG9uZSc6ICdp
UGhvbmUgNScsCisgICAgICAgICAgICAnaXBhZCc6ICdpUGFkIFJldGluYScsCisgICAgICAgIH0s
CisgICAgfQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnRfbmFtZSwgKiprd2Fy
Z3MpOgorICAgICAgICBzdXBlcihJT1NTaW11bGF0b3JQb3J0LCBzZWxmKS5fX2luaXRfXyhob3N0
LCBwb3J0X25hbWUsICoqa3dhcmdzKQorICAgICAgICBzZWxmLl9zaW11bGF0b3JfZ3JvdXBfbWFu
YWdlciA9IFNpbXVsYXRvcihob3N0KQorICAgICAgICBzZWxmLl9kZXZpY2VfbWFwID0gc2VsZi5f
c2ltdWxhdG9yX2dyb3VwX21hbmFnZXIubWFuYWdlZF9kZXZpY2VzCisKKyAgICAgICAgb3B0aW9u
YWxfZGV2aWNlX2NsYXNzID0gc2VsZi5nZXRfb3B0aW9uKCdkZXZpY2VfY2xhc3MnKQorICAgICAg
ICBzZWxmLl9kZXZpY2VfY2xhc3MgPSBvcHRpb25hbF9kZXZpY2VfY2xhc3MgaWYgb3B0aW9uYWxf
ZGV2aWNlX2NsYXNzIGVsc2Ugc2VsZi5ERUZBVUxUX0RFVklDRV9DTEFTUworICAgICAgICBfbG9n
LmRlYnVnKCdJT1NTaW11bGF0b3JQb3J0IF9kZXZpY2VfY2xhc3MgaXMgJXMnLCBzZWxmLl9kZXZp
Y2VfY2xhc3MpCisKKyAgICAgICAgc2VsZi5fY3VycmVudF9kZXZpY2UgPSBzZWxmLl9zaW11bGF0
b3JfZ3JvdXBfbWFuYWdlci5jdXJyZW50X2RldmljZSgpCisgICAgICAgIGlmIG5vdCBzZWxmLl9j
dXJyZW50X2RldmljZToKKyAgICAgICAgICAgIHNlbGYuc2V0X29wdGlvbignZGVkaWNhdGVkX3Np
bXVsYXRvcnMnLCBUcnVlKQorICAgICAgICBpZiBub3Qgc2VsZi5nZXRfb3B0aW9uKCdkZWRpY2F0
ZWRfc2ltdWxhdG9ycycpOgorICAgICAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCdjaGlsZF9w
cm9jZXNzZXMnKSA+IDE6CisgICAgICAgICAgICAgICAgX2xvZy53YXJuKCdDYW5ub3QgaGF2ZSBt
b3JlIHRoYW4gb25lIGNoaWxkIHByb2Nlc3Mgd2hlbiB1c2luZyBhIHJ1bm5pbmcgc2ltdWxhdG9y
LiAgU2V0dGluZyBjaGlsZF9wcm9jZXNzZXMgdG8gMS4nKQorICAgICAgICAgICAgc2VsZi5zZXRf
b3B0aW9uKCdjaGlsZF9wcm9jZXNzZXMnLCAxKQorCisgICAgQHByb3BlcnR5CisgICAgQG1lbW9p
emVkCisgICAgZGVmIHNpbXVsYXRvcl9ydW50aW1lKHNlbGYpOgorICAgICAgICBydW50aW1lX2lk
ZW50aWZpZXIgPSBzZWxmLmdldF9vcHRpb24oJ3J1bnRpbWUnKQorICAgICAgICBpZiBydW50aW1l
X2lkZW50aWZpZXI6CisgICAgICAgICAgICBydW50aW1lID0gUnVudGltZS5mcm9tX2lkZW50aWZp
ZXIocnVudGltZV9pZGVudGlmaWVyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcnVudGlt
ZSA9IFJ1bnRpbWUuZnJvbV92ZXJzaW9uX3N0cmluZyhzZWxmLmhvc3QucGxhdGZvcm0ueGNvZGVf
c2RrX3ZlcnNpb24oJ2lwaG9uZXNpbXVsYXRvcicpKQorICAgICAgICByZXR1cm4gcnVudGltZQor
CisgICAgZGVmIHNpbXVsYXRvcl9kZXZpY2VfdHlwZShzZWxmKToKKyAgICAgICAgZGV2aWNlX3R5
cGVfaWRlbnRpZmllciA9IHNlbGYuZ2V0X29wdGlvbignZGV2aWNlX3R5cGUnKQorICAgICAgICBp
ZiBkZXZpY2VfdHlwZV9pZGVudGlmaWVyOgorICAgICAgICAgICAgX2xvZy5kZWJ1Zygnc2ltdWxh
dG9yX2RldmljZV90eXBlIGZvciBkZXZpY2UgaWRlbnRpZmllciAlcycsIGRldmljZV90eXBlX2lk
ZW50aWZpZXIpCisgICAgICAgICAgICBkZXZpY2VfdHlwZSA9IERldmljZVR5cGUuZnJvbV9pZGVu
dGlmaWVyKGRldmljZV90eXBlX2lkZW50aWZpZXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICBfbG9nLmRlYnVnKCdzaW11bGF0b3JfZGV2aWNlX3R5cGUgZm9yIGRldmljZSAlcycsIHNlbGYu
X2RldmljZV9jbGFzcykKKyAgICAgICAgICAgIGRldmljZV9uYW1lID0gc2VsZi5ERVZJQ0VfQ0xB
U1NfTUFQW3NlbGYuYXJjaGl0ZWN0dXJlKCldW3NlbGYuX2RldmljZV9jbGFzc10KKyAgICAgICAg
ICAgIGlmIG5vdCBkZXZpY2VfbmFtZToKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24o
J0ZhaWxlZCB0byBmaW5kIGRldmljZSBmb3IgYXJjaGl0ZWN0dXJlIHt9IGFuZCBkZXZpY2UgY2xh
c3Mge30nLmZvcm1hdChzZWxmLmFyY2hpdGVjdHVyZSgpKSwgc2VsZi5fZGV2aWNlX2NsYXNzKQor
ICAgICAgICAgICAgZGV2aWNlX3R5cGUgPSBEZXZpY2VUeXBlLmZyb21fbmFtZShkZXZpY2VfbmFt
ZSkKKyAgICAgICAgcmV0dXJuIGRldmljZV90eXBlCisKKyAgICBAbWVtb2l6ZWQKKyAgICBkZWYg
ZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgbnVt
YmVyIG9mIFNpbXVsYXRvcnMgaW5zdGFuY2VzIHRvIHVzZSBmb3IgdGhpcyBwb3J0LiIiIgorICAg
ICAgICBiZXN0X2NoaWxkX3Byb2Nlc3NfY291bnRfZm9yX2NwdSA9IHNlbGYuX2V4ZWN1dGl2ZS5j
cHVfY291bnQoKSAvIDIKKyAgICAgICAgc3lzdGVtX3Byb2Nlc3NfY291bnRfbGltaXQgPSBpbnQo
c3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyJ1bGltaXQiLCAiLXUiXSkuc3RyaXAoKSkKKyAgICAg
ICAgY3VycmVudF9wcm9jZXNzX2NvdW50ID0gbGVuKHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsi
cHMiLCAiYXV4Il0pLnN0cmlwKCkuc3BsaXQoJ1xuJykpCisgICAgICAgIF9sb2cuZGVidWcoJ1By
b2Nlc3MgbGltaXQ6ICVkLCBjdXJyZW50ICNwcm9jZXNzZXM6ICVkJyAlIChzeXN0ZW1fcHJvY2Vz
c19jb3VudF9saW1pdCwgY3VycmVudF9wcm9jZXNzX2NvdW50KSkKKyAgICAgICAgbWF4aW11bV9z
aW11bGF0b3JfY291bnRfb25fdGhpc19zeXN0ZW0gPSAoc3lzdGVtX3Byb2Nlc3NfY291bnRfbGlt
aXQgLSBjdXJyZW50X3Byb2Nlc3NfY291bnQpIC8vIHNlbGYuUFJPQ0VTU19DT1VOVF9FU1RJTUFU
RV9QRVJfU0lNVUxBVE9SX0lOU1RBTkNFCisgICAgICAgICMgRklYTUU6IFdlIHNob3VsZCBhbHNv
IHRha2UgaW50byBhY2NvdW50IHRoZSBhdmFpbGFibGUgUkFNLgorCisgICAgICAgIGlmIChtYXhp
bXVtX3NpbXVsYXRvcl9jb3VudF9vbl90aGlzX3N5c3RlbSA8IGJlc3RfY2hpbGRfcHJvY2Vzc19j
b3VudF9mb3JfY3B1KToKKyAgICAgICAgICAgIF9sb2cud2FybigiVGhpcyBtYWNoaW5lIGNvdWxk
IHN1cHBvcnQgJXMgc2ltdWxhdG9ycywgYnV0IGlzIG9ubHkgY29uZmlndXJlZCBmb3IgJXMuIgor
ICAgICAgICAgICAgICAgICUgKGJlc3RfY2hpbGRfcHJvY2Vzc19jb3VudF9mb3JfY3B1LCBtYXhp
bXVtX3NpbXVsYXRvcl9jb3VudF9vbl90aGlzX3N5c3RlbSkpCisgICAgICAgICAgICBfbG9nLndh
cm4oJ1BsZWFzZSBzZWUgPGh0dHBzOi8vdHJhYy53ZWJraXQub3JnL3dpa2kvSW5jcmVhc2luZ0tl
cm5lbExpbWl0cz4uJykKKworICAgICAgICBpZiBtYXhpbXVtX3NpbXVsYXRvcl9jb3VudF9vbl90
aGlzX3N5c3RlbSA9PSAwOgorICAgICAgICAgICAgbWF4aW11bV9zaW11bGF0b3JfY291bnRfb25f
dGhpc19zeXN0ZW0gPSAxCisKKyAgICAgICAgcmV0dXJuIG1pbihtYXhpbXVtX3NpbXVsYXRvcl9j
b3VudF9vbl90aGlzX3N5c3RlbSwgYmVzdF9jaGlsZF9wcm9jZXNzX2NvdW50X2Zvcl9jcHUpCisK
KyAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwg
bmV3ZXJfdGhhbiwgdGltZV9mbj10aW1lLnRpbWUsIHNsZWVwX2ZuPXRpbWUuc2xlZXAsIHdhaXRf
Zm9yX2xvZz1UcnVlKToKKyAgICAgICAgdGltZV9mbiA9IHRpbWVfZm4gb3IgdGltZS50aW1lCisg
ICAgICAgIHNsZWVwX2ZuID0gc2xlZXBfZm4gb3IgdGltZS5zbGVlcAorCisgICAgICAgICMgRklY
TUU6IFdlIHNob3VsZCBjb2xsZWN0IHRoZSBhY3R1YWwgY3Jhc2ggbG9nIGZvciBEdW1wUmVuZGVy
VHJlZS5hcHAgYmVjYXVzZSBpdCBpbmNsdWRlcyBtb3JlCisgICAgICAgICMgaW5mb3JtYXRpb24g
KGUuZy4gZXhjZXB0aW9uIGNvZGVzKSB0aGFuIGlzIGF2YWlsYWJsZSBpbiB0aGUgc3RhY2sgdHJh
Y2Ugd3JpdHRlbiB0byBzdGFuZGFyZCBlcnJvci4KKyAgICAgICAgc3RkZXJyX2xpbmVzID0gW10K
KyAgICAgICAgY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZCA9IE5vbmUgICMgZS5nLiAo
J0R1bXBSZW5kZXJUcmVlLmFwcCcsIDEyMzQpCisgICAgICAgIGZvciBsaW5lIGluIChzdGRlcnIg
b3IgJycpLnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgIGlmIG5vdCBjcmFzaGVkX3N1YnByb2Nl
c3NfbmFtZV9hbmRfcGlkOgorICAgICAgICAgICAgICAgIG1hdGNoID0gc2VsZi5TVUJQUk9DRVNT
X0NSQVNIX1JFR0VYLm1hdGNoKGxpbmUpCisgICAgICAgICAgICAgICAgaWYgbWF0Y2g6CisgICAg
ICAgICAgICAgICAgICAgIGNyYXNoZWRfc3VicHJvY2Vzc19uYW1lX2FuZF9waWQgPSAobWF0Y2gu
Z3JvdXAoJ3N1YnByb2Nlc3NfbmFtZScpLCBpbnQobWF0Y2guZ3JvdXAoJ3N1YnByb2Nlc3NfcGlk
JykpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgc3RkZXJyX2xp
bmVzLmFwcGVuZChsaW5lKQorCisgICAgICAgIGlmIGNyYXNoZWRfc3VicHJvY2Vzc19uYW1lX2Fu
ZF9waWQ6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X2NyYXNoX2xvZyhjcmFzaGVkX3N1
YnByb2Nlc3NfbmFtZV9hbmRfcGlkWzBdLCBjcmFzaGVkX3N1YnByb2Nlc3NfbmFtZV9hbmRfcGlk
WzFdLCBzdGRvdXQsCisgICAgICAgICAgICAgICAgJ1xuJy5qb2luKHN0ZGVycl9saW5lcyksIG5l
d2VyX3RoYW4sIHRpbWVfZm4sIHNsZWVwX2ZuLCB3YWl0X2Zvcl9sb2cpCisKKyAgICAgICAgIyBB
cHAgY3Jhc2hlZAorICAgICAgICBfbG9nLmRlYnVnKCdsb29raW5nIGZvciBjcmFzaCBsb2cgZm9y
ICVzOiVzJyAlIChuYW1lLCBzdHIocGlkKSkpCisgICAgICAgIGNyYXNoX2xvZyA9ICcnCisgICAg
ICAgIGNyYXNoX2xvZ3MgPSBDcmFzaExvZ3Moc2VsZi5ob3N0KQorICAgICAgICBub3cgPSB0aW1l
X2ZuKCkKKyAgICAgICAgZGVhZGxpbmUgPSBub3cgKyA1ICogaW50KHNlbGYuZ2V0X29wdGlvbign
Y2hpbGRfcHJvY2Vzc2VzJywgMSkpCisgICAgICAgIHdoaWxlIG5vdCBjcmFzaF9sb2cgYW5kIG5v
dyA8PSBkZWFkbGluZToKKyAgICAgICAgICAgIGNyYXNoX2xvZyA9IGNyYXNoX2xvZ3MuZmluZF9u
ZXdlc3RfbG9nKG5hbWUsIHBpZCwgaW5jbHVkZV9lcnJvcnM9VHJ1ZSwgbmV3ZXJfdGhhbj1uZXdl
cl90aGFuKQorICAgICAgICAgICAgaWYgbm90IHdhaXRfZm9yX2xvZzoKKyAgICAgICAgICAgICAg
ICBicmVhaworICAgICAgICAgICAgaWYgbm90IGNyYXNoX2xvZyBvciBub3QgW2xpbmUgZm9yIGxp
bmUgaW4gY3Jhc2hfbG9nLnNwbGl0bGluZXMoKSBpZiBub3QgbGluZS5zdGFydHN3aXRoKCdFUlJP
UicpXToKKyAgICAgICAgICAgICAgICBzbGVlcF9mbigwLjEpCisgICAgICAgICAgICAgICAgbm93
ID0gdGltZV9mbigpCisKKyAgICAgICAgaWYgbm90IGNyYXNoX2xvZzoKKyAgICAgICAgICAgIHJl
dHVybiBzdGRlcnIsIE5vbmUKKyAgICAgICAgcmV0dXJuIHN0ZGVyciwgY3Jhc2hfbG9nCisKKyAg
ICBkZWYgX2J1aWxkX2RyaXZlcl9mbGFncyhzZWxmKToKKyAgICAgICAgYXJjaHMgPSBbJ0FSQ0hT
PWkzODYnXSBpZiBzZWxmLmFyY2hpdGVjdHVyZSgpID09ICd4ODYnIGVsc2UgW10KKyAgICAgICAg
c2RrID0gWyctLXNkaycsICdpcGhvbmVzaW11bGF0b3InXQorICAgICAgICByZXR1cm4gYXJjaHMg
KyBzZGsKKworICAgIGRlZiBfZ2VuZXJhdGVfYWxsX3Rlc3RfY29uZmlndXJhdGlvbnMoc2VsZik6
CisgICAgICAgIGNvbmZpZ3VyYXRpb25zID0gW10KKyAgICAgICAgZm9yIGJ1aWxkX3R5cGUgaW4g
c2VsZi5BTExfQlVJTERfVFlQRVM6CisgICAgICAgICAgICBmb3IgYXJjaGl0ZWN0dXJlIGluIHNl
bGYuQVJDSElURUNUVVJFUzoKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9ucy5hcHBlbmQo
VGVzdENvbmZpZ3VyYXRpb24odmVyc2lvbj1zZWxmLl92ZXJzaW9uLCBhcmNoaXRlY3R1cmU9YXJj
aGl0ZWN0dXJlLCBidWlsZF90eXBlPWJ1aWxkX3R5cGUpKQorICAgICAgICByZXR1cm4gY29uZmln
dXJhdGlvbnMKKworICAgIGRlZiBkZWZhdWx0X2Jhc2VsaW5lX3NlYXJjaF9wYXRoKHNlbGYpOgor
ICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ3dlYmtpdF90ZXN0X3J1bm5lcicpOgorICAgICAg
ICAgICAgZmFsbGJhY2tfbmFtZXMgPSBbc2VsZi5fd2syX3BvcnRfbmFtZSgpXSArIFtzZWxmLnBv
cnRfbmFtZV0gKyBbJ3drMiddCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmYWxsYmFja19u
YW1lcyA9IFtzZWxmLnBvcnRfbmFtZSArICctd2sxJ10gKyBbc2VsZi5wb3J0X25hbWVdCisKKyAg
ICAgICAgcmV0dXJuIG1hcChzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aCwgZmFsbGJhY2tfbmFt
ZXMpCisKKyAgICBkZWYgX3NldF9kZXZpY2VfY2xhc3Moc2VsZiwgZGV2aWNlX2NsYXNzKToKKyAg
ICAgICAgc2VsZi5fZGV2aWNlX2NsYXNzID0gZGV2aWNlX2NsYXNzIGlmIGRldmljZV9jbGFzcyBl
bHNlIHNlbGYuREVGQVVMVF9ERVZJQ0VfQ0xBU1MKKworICAgIGRlZiBfY3JlYXRlX3NpbXVsYXRv
cnMoc2VsZik6CisgICAgICAgIGlmIChzZWxmLmRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKCkgPCBz
ZWxmLmNoaWxkX3Byb2Nlc3NlcygpKToKKyAgICAgICAgICAgIF9sb2cud2FybignWW91IGhhdmUg
c3BlY2lmaWVkIHZlcnkgaGlnaCB2YWx1ZSh7MH0pIGZvciAtLWNoaWxkLXByb2Nlc3NlcycuZm9y
bWF0KHNlbGYuY2hpbGRfcHJvY2Vzc2VzKCkpKQorICAgICAgICAgICAgX2xvZy53YXJuKCdtYXhp
bXVtIGNoaWxkLXByb2Nlc3NlcyB3aGljaCBjYW4gYmUgc3VwcG9ydGVkIG9uIHRoaXMgc3lzdGVt
IGFyZTogezB9Jy5mb3JtYXQoc2VsZi5kZWZhdWx0X2NoaWxkX3Byb2Nlc3NlcygpKSkKKyAgICAg
ICAgICAgIF9sb2cud2FybignVGhpcyBpcyB2ZXJ5IGxpa2VseSB0byBmYWlsLicpCisKKyAgICAg
ICAgaWYgc2VsZi5fdXNpbmdfZGVkaWNhdGVkX3NpbXVsYXRvcnMoKToKKyAgICAgICAgICAgIHNl
bGYuX2NyZWF0ZVNpbXVsYXRvckFwcHMoKQorCisgICAgICAgICAgICBmb3IgaSBpbiB4cmFuZ2Uo
c2VsZi5jaGlsZF9wcm9jZXNzZXMoKSk6CisgICAgICAgICAgICAgICAgc2VsZi5fY3JlYXRlX2Rl
dmljZShpKQorCisgICAgICAgICAgICBzZWxmLl9kZXZpY2VfbWFwID0gc2VsZi5fc2ltdWxhdG9y
X2dyb3VwX21hbmFnZXIubWFuYWdlZF9kZXZpY2VzCisgICAgICAgICAgICBmb3IgaSBpbiB4cmFu
Z2Uoc2VsZi5jaGlsZF9wcm9jZXNzZXMoKSk6CisgICAgICAgICAgICAgICAgZGV2aWNlX3VkaWQg
PSBzZWxmLl90ZXN0aW5nX2RldmljZShpKS51ZGlkCisgICAgICAgICAgICAgICAgc2VsZi5fc2lt
dWxhdG9yX2dyb3VwX21hbmFnZXIud2FpdF91bnRpbF9kZXZpY2VfaXNfaW5fc3RhdGUoZGV2aWNl
X3VkaWQsIFNpbXVsYXRvci5EZXZpY2VTdGF0ZS5TSFVURE9XTikKKyAgICAgICAgICAgICAgICBz
ZWxmLl9zaW11bGF0b3JfZ3JvdXBfbWFuYWdlci5yZXNldF9kZXZpY2UoZGV2aWNlX3VkaWQpCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICBhc3NlcnQoc2VsZi5fY3VycmVudF9kZXZpY2UpCisg
ICAgICAgICAgICBpZiBzZWxmLl9jdXJyZW50X2RldmljZS5uYW1lICE9IHNlbGYuc2ltdWxhdG9y
X2RldmljZV90eXBlKCkubmFtZToKKyAgICAgICAgICAgICAgICBfbG9nLndhcm4oIkV4cGVjdGVk
IHNpbXVsYXRvciBvZiB0eXBlICciICsgc2VsZi5zaW11bGF0b3JfZGV2aWNlX3R5cGUoKS5uYW1l
ICsgIicgYnV0IGZvdW5kIHNpbXVsYXRvciBvZiB0eXBlICciICsgc2VsZi5fY3VycmVudF9kZXZp
Y2UubmFtZSArICInIikKKyAgICAgICAgICAgICAgICBfbG9nLndhcm4oJ1RoZSBuZXh0IGJsb2Nr
IG9mIHRlc3RzIG1heSBmYWlsIGR1ZSB0byBkZXZpY2UgbWlzLW1hdGNoJykKKworICAgIGRlZiBz
ZXR1cF90ZXN0X3J1bihzZWxmLCBkZXZpY2VfY2xhc3M9Tm9uZSk6CisgICAgICAgIG1hY19vc192
ZXJzaW9uID0gc2VsZi5ob3N0LnBsYXRmb3JtLm9zX3ZlcnNpb24KKworICAgICAgICBzZWxmLl9z
ZXRfZGV2aWNlX2NsYXNzKGRldmljZV9jbGFzcykKKworICAgICAgICBfbG9nLmRlYnVnKCcnKQor
ICAgICAgICBfbG9nLmRlYnVnKCdzZXR1cF90ZXN0X3J1biBmb3IgJXMnLCBzZWxmLl9kZXZpY2Vf
Y2xhc3MpCisKKyAgICAgICAgc2VsZi5fY3JlYXRlX3NpbXVsYXRvcnMoKQorCisgICAgICAgIGlm
IG5vdCBzZWxmLl91c2luZ19kZWRpY2F0ZWRfc2ltdWxhdG9ycygpOgorICAgICAgICAgICAgcmV0
dXJuCisKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKHNlbGYuY2hpbGRfcHJvY2Vzc2VzKCkpOgor
ICAgICAgICAgICAgZGV2aWNlX3VkaWQgPSBzZWxmLl90ZXN0aW5nX2RldmljZShpKS51ZGlkCisg
ICAgICAgICAgICBfbG9nLmRlYnVnKCd0ZXN0aW5nIGRldmljZSAlcyBoYXMgdWRpZCAlcycsIGks
IGRldmljZV91ZGlkKQorCisgICAgICAgICAgICAjIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vMjA5
MTYxNDA+IFN3aXRjaCB0byB1c2luZyBDb3JlU2ltdWxhdG9yLmZyYW1ld29yayBmb3IgbGF1bmNo
aW5nIGFuZCBxdWl0dGluZyBpT1MgU2ltdWxhdG9yCisgICAgICAgICAgICBzZWxmLl9leGVjdXRp
dmUucnVuX2NvbW1hbmQoWworICAgICAgICAgICAgICAgICdvcGVuJywgJy1nJywgJy1iJywgc2Vs
Zi5TSU1VTEFUT1JfQlVORExFX0lEICsgc3RyKGkpLAorICAgICAgICAgICAgICAgICctLWFyZ3Mn
LCAnLUN1cnJlbnREZXZpY2VVRElEJywgZGV2aWNlX3VkaWRdKQorCisgICAgICAgICAgICBpZiBt
YWNfb3NfdmVyc2lvbiBpbiBbJ2VsY2FwaXRhbicsICd5b3NlbWl0ZScsICdtYXZlcmlja3MnXToK
KyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDIuNSkKKworICAgICAgICBfbG9nLmluZm8oJ1dh
aXRpbmcgZm9yIGFsbCBpT1MgU2ltdWxhdG9ycyB0byBmaW5pc2ggYm9vdGluZy4nKQorICAgICAg
ICBmb3IgaSBpbiB4cmFuZ2Uoc2VsZi5jaGlsZF9wcm9jZXNzZXMoKSk6CisgICAgICAgICAgICBz
ZWxmLl9zaW11bGF0b3JfZ3JvdXBfbWFuYWdlci53YWl0X3VudGlsX2RldmljZV9pc19ib290ZWQo
c2VsZi5fdGVzdGluZ19kZXZpY2UoaSkudWRpZCkKKworICAgIGRlZiBfcXVpdF9pb3Nfc2ltdWxh
dG9yKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fdXNpbmdfZGVkaWNhdGVkX3NpbXVsYXRv
cnMoKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBfbG9nLmRlYnVnKCJfcXVpdF9pb3Nf
c2ltdWxhdG9yIGtpbGxpbmcgYWxsIFNpbXVsYXRvciBwcm9jZXNzZXMiKQorICAgICAgICAjIEZJ
WE1FOiBXZSBzaG91bGQga2lsbCBvbmx5IHRoZSBTaW11bGF0b3JzIHdlIHN0YXJ0ZWQuCisgICAg
ICAgIHN1YnByb2Nlc3MuY2FsbChbImtpbGxhbGwiLCAiLTkiLCAiLW0iLCAiU2ltdWxhdG9yIl0p
CisKKyAgICBkZWYgY2xlYW5fdXBfdGVzdF9ydW4oc2VsZik6CisgICAgICAgIHN1cGVyKElPU1Np
bXVsYXRvclBvcnQsIHNlbGYpLmNsZWFuX3VwX3Rlc3RfcnVuKCkKKyAgICAgICAgX2xvZy5kZWJ1
ZygiY2xlYW5fdXBfdGVzdF9ydW4iKQorICAgICAgICBzZWxmLl9xdWl0X2lvc19zaW11bGF0b3Io
KQorICAgICAgICBmaWZvcyA9IFtwYXRoIGZvciBwYXRoIGluIG9zLmxpc3RkaXIoJy90bXAnKSBp
ZiByZS5zZWFyY2goJ29yZy53ZWJraXQuKER1bXBSZW5kZXJUcmVlfFdlYktpdFRlc3RSdW5uZXIp
LipfKElOfE9VVHxFUlJPUiknLCBwYXRoKV0KKyAgICAgICAgZm9yIGZpZm8gaW4gZmlmb3M6Cisg
ICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKG9zLnBhdGguam9pbign
L3RtcCcsIGZpZm8pKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAg
ICAgX2xvZy53YXJuaW5nKCdVbmFibGUgdG8gcmVtb3ZlICcgKyBmaWZvKQorICAgICAgICAgICAg
ICAgIHBhc3MKKworICAgICAgICBpZiBub3Qgc2VsZi5fdXNpbmdfZGVkaWNhdGVkX3NpbXVsYXRv
cnMoKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGZvciBpIGluIHhyYW5nZShzZWxm
LmNoaWxkX3Byb2Nlc3NlcygpKToKKyAgICAgICAgICAgIHNpbXVsYXRvcl9wYXRoID0gc2VsZi5n
ZXRfc2ltdWxhdG9yX3BhdGgoaSkKKyAgICAgICAgICAgIGRldmljZV91ZGlkID0gc2VsZi5fdGVz
dGluZ19kZXZpY2UoaSkudWRpZAorICAgICAgICAgICAgc2VsZi5fcmVtb3ZlX2RldmljZShpKQor
CisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2ltdWxhdG9yX3BhdGgpOgorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAg
c2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFtzZWxmLkxTUkVHSVNURVJfUEFUSCwgIi11Iiwg
c2ltdWxhdG9yX3BhdGhdKQorCisgICAgICAgICAgICAgICAgX2xvZy5kZWJ1Zygncm10cmVlICVz
Jywgc2ltdWxhdG9yX3BhdGgpCisgICAgICAgICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5ybXRy
ZWUoc2ltdWxhdG9yX3BhdGgpCisKKyAgICAgICAgICAgICAgICBsb2dzX3BhdGggPSBzZWxmLl9m
aWxlc3lzdGVtLmpvaW4oc2VsZi5fZmlsZXN5c3RlbS5leHBhbmR1c2VyKCJ+IiksICJMaWJyYXJ5
L0xvZ3MvQ29yZVNpbXVsYXRvci8iLCBkZXZpY2VfdWRpZCkKKyAgICAgICAgICAgICAgICBfbG9n
LmRlYnVnKCdybXRyZWUgJXMnLCBsb2dzX3BhdGgpCisgICAgICAgICAgICAgICAgc2VsZi5fZmls
ZXN5c3RlbS5ybXRyZWUobG9nc19wYXRoKQorCisgICAgICAgICAgICAgICAgc2F2ZWRfc3RhdGVf
cGF0aCA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl9maWxlc3lzdGVtLmV4cGFuZHVzZXIo
In4iKSwgIkxpYnJhcnkvU2F2ZWQgQXBwbGljYXRpb24gU3RhdGUvIiwgc2VsZi5TSU1VTEFUT1Jf
QlVORExFX0lEICsgc3RyKGkpICsgIi5zYXZlZFN0YXRlIikKKyAgICAgICAgICAgICAgICBfbG9n
LmRlYnVnKCdybXRyZWUgJXMnLCBzYXZlZF9zdGF0ZV9wYXRoKQorICAgICAgICAgICAgICAgIHNl
bGYuX2ZpbGVzeXN0ZW0ucm10cmVlKHNhdmVkX3N0YXRlX3BhdGgpCisKKyAgICAgICAgICAgIGV4
Y2VwdDoKKyAgICAgICAgICAgICAgICBfbG9nLndhcm5pbmcoJ1VuYWJsZSB0byByZW1vdmUgU2lt
dWxhdG9yJyArIHN0cihpKSkKKworICAgIGRlZiBzZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2ZXIoc2Vs
Ziwgc2VydmVyX25hbWU9Tm9uZSk6CisgICAgICAgIF9sb2cuZGVidWcoInNldHVwX2Vudmlyb25f
Zm9yX3NlcnZlciIpCisgICAgICAgIGVudiA9IHN1cGVyKElPU1NpbXVsYXRvclBvcnQsIHNlbGYp
LnNldHVwX2Vudmlyb25fZm9yX3NlcnZlcihzZXJ2ZXJfbmFtZSkKKyAgICAgICAgaWYgc2VydmVy
X25hbWUgPT0gc2VsZi5kcml2ZXJfbmFtZSgpOgorICAgICAgICAgICAgaWYgc2VsZi5nZXRfb3B0
aW9uKCdsZWFrcycpOgorICAgICAgICAgICAgICAgIGVudlsnTWFsbG9jU3RhY2tMb2dnaW5nJ10g
PSAnMScKKyAgICAgICAgICAgICAgICBlbnZbJ19fWFBDX01hbGxvY1N0YWNrTG9nZ2luZyddID0g
JzEnCisgICAgICAgICAgICAgICAgZW52WydNYWxsb2NTY3JpYmJsZSddID0gJzEnCisgICAgICAg
ICAgICAgICAgZW52WydfX1hQQ19NYWxsb2NTY3JpYmJsZSddID0gJzEnCisgICAgICAgICAgICBp
ZiBzZWxmLmdldF9vcHRpb24oJ2d1YXJkX21hbGxvYycpOgorICAgICAgICAgICAgICAgIHNlbGYu
X2FwcGVuZF92YWx1ZV9jb2xvbl9zZXBhcmF0ZWQoZW52LCAnRFlMRF9JTlNFUlRfTElCUkFSSUVT
JywgJy91c3IvbGliL2xpYmdtYWxsb2MuZHlsaWInKQorICAgICAgICAgICAgICAgIHNlbGYuX2Fw
cGVuZF92YWx1ZV9jb2xvbl9zZXBhcmF0ZWQoZW52LCAnX19YUENfRFlMRF9JTlNFUlRfTElCUkFS
SUVTJywgJy91c3IvbGliL2xpYmdtYWxsb2MuZHlsaWInKQorICAgICAgICBlbnZbJ1hNTF9DQVRB
TE9HX0ZJTEVTJ10gPSAnJyAgIyB3b3JrIGFyb3VuZCBtaXNzaW5nIC9ldGMvY2F0YWxvZyA8cmRh
cjovL3Byb2JsZW0vNDI5Mjk5NT4KKyAgICAgICAgcmV0dXJuIGVudgorCisgICAgZGVmIG9wZXJh
dGluZ19zeXN0ZW0oc2VsZik6CisgICAgICAgIHJldHVybiAnaW9zLXNpbXVsYXRvcicKKworICAg
IGRlZiBjaGVja19zeXNfZGVwcyhzZWxmLCBuZWVkc19odHRwKToKKyAgICAgICAgaWYgbm90IHNl
bGYuc2ltdWxhdG9yX3J1bnRpbWUuYXZhaWxhYmxlOgorICAgICAgICAgICAgX2xvZy5lcnJvcign
VGhlIGlPUyBTaW11bGF0b3IgcnVudGltZSB3aXRoIGlkZW50aWZpZXIgInswfSIgY2Fubm90IGJl
IHVzZWQgYmVjYXVzZSBpdCBpcyB1bmF2YWlsYWJsZS4nLmZvcm1hdChzZWxmLnNpbXVsYXRvcl9y
dW50aW1lLmlkZW50aWZpZXIpKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJl
dHVybiBzdXBlcihJT1NTaW11bGF0b3JQb3J0LCBzZWxmKS5jaGVja19zeXNfZGVwcyhuZWVkc19o
dHRwKQorCisgICAgU1VCUFJPQ0VTU19DUkFTSF9SRUdFWCA9IHJlLmNvbXBpbGUoJyNDUkFTSEVE
IC0gKD9QPHN1YnByb2Nlc3NfbmFtZT5cUyspIFwocGlkICg/UDxzdWJwcm9jZXNzX3BpZD5cZCsp
XCknKQorCisgICAgZGVmIF91c2luZ19kZWRpY2F0ZWRfc2ltdWxhdG9ycyhzZWxmKToKKyAgICAg
ICAgcmV0dXJuIHNlbGYuZ2V0X29wdGlvbignZGVkaWNhdGVkX3NpbXVsYXRvcnMnKQorCisgICAg
ZGVmIG11bHRpcGxlX2RldmljZXMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl91c2luZ19k
ZWRpY2F0ZWRfc2ltdWxhdG9ycygpCisKKyAgICBkZWYgX2NyZWF0ZV9kZXZpY2Uoc2VsZiwgbnVt
YmVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NpbXVsYXRvcl9ncm91cF9tYW5hZ2VyLmNyZWF0
ZV9kZXZpY2UobnVtYmVyLCBzZWxmLnNpbXVsYXRvcl9kZXZpY2VfdHlwZSgpLCBzZWxmLnNpbXVs
YXRvcl9ydW50aW1lKQorCisgICAgZGVmIF9yZW1vdmVfZGV2aWNlKHNlbGYsIG51bWJlcik6Cisg
ICAgICAgIHNlbGYuX3NpbXVsYXRvcl9ncm91cF9tYW5hZ2VyLnJlbW92ZV9kZXZpY2UobnVtYmVy
KQorCisgICAgZGVmIGdldF9zaW11bGF0b3JfcGF0aChzZWxmLCBzdWZmaXg9IiIpOgorICAgICAg
ICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuU0lNVUxBVE9SX0RJUkVDVE9SWSwgIlNpbXVsYXRv
ciIgKyBzdHIoc3VmZml4KSArICIuYXBwIikKKworICAgIGRlZiBkaWZmX2ltYWdlKHNlbGYsIGV4
cGVjdGVkX2NvbnRlbnRzLCBhY3R1YWxfY29udGVudHMsIHRvbGVyYW5jZT1Ob25lKToKKyAgICAg
ICAgaWYgbm90IGFjdHVhbF9jb250ZW50cyBhbmQgbm90IGV4cGVjdGVkX2NvbnRlbnRzOgorICAg
ICAgICAgICAgcmV0dXJuIChOb25lLCAwLCBOb25lKQorICAgICAgICBpZiBub3QgYWN0dWFsX2Nv
bnRlbnRzIG9yIG5vdCBleHBlY3RlZF9jb250ZW50czoKKyAgICAgICAgICAgIHJldHVybiAoVHJ1
ZSwgMCwgTm9uZSkKKyAgICAgICAgaWYgbm90IHNlbGYuX2ltYWdlX2RpZmZlcjoKKyAgICAgICAg
ICAgIHNlbGYuX2ltYWdlX2RpZmZlciA9IGltYWdlX2RpZmYuSU9TU2ltdWxhdG9ySW1hZ2VEaWZm
ZXIoc2VsZikKKyAgICAgICAgc2VsZi5zZXRfb3B0aW9uX2RlZmF1bHQoJ3RvbGVyYW5jZScsIDAu
MSkKKyAgICAgICAgaWYgdG9sZXJhbmNlIGlzIE5vbmU6CisgICAgICAgICAgICB0b2xlcmFuY2Ug
PSBzZWxmLmdldF9vcHRpb24oJ3RvbGVyYW5jZScpCisgICAgICAgIHJldHVybiBzZWxmLl9pbWFn
ZV9kaWZmZXIuZGlmZl9pbWFnZShleHBlY3RlZF9jb250ZW50cywgYWN0dWFsX2NvbnRlbnRzLCB0
b2xlcmFuY2UpCisKKyAgICBkZWYgcmVzZXRfcHJlZmVyZW5jZXMoc2VsZik6CisgICAgICAgIF9s
b2cuZGVidWcoInJlc2V0X3ByZWZlcmVuY2VzIikKKyAgICAgICAgc2VsZi5fcXVpdF9pb3Nfc2lt
dWxhdG9yKCkKKyAgICAgICAgIyBNYXliZSB0aGlzIHNob3VsZCBkZWxldGUgYWxsIGRldmljZXMg
dGhhdCB3ZSd2ZSBjcmVhdGVkPworCisgICAgZGVmIG5tX2NvbW1hbmQoc2VsZik6CisgICAgICAg
IHJldHVybiBzZWxmLnhjcnVuX2ZpbmQoJ25tJykKKworICAgIEBwcm9wZXJ0eQorICAgIEBtZW1v
aXplZAorICAgIGRlZiBkZXZlbG9wZXJfZGlyKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5f
ZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsneGNvZGUtc2VsZWN0JywgJy0tcHJpbnQtcGF0aCddKS5y
c3RyaXAoKQorCisgICAgZGVmIGxvZ2dpbmdfcGF0dGVybnNfdG9fc3RyaXAoc2VsZik6CisgICAg
ICAgIHJldHVybiBbXQorCisgICAgZGVmIHN0ZGVycl9wYXR0ZXJuc190b19zdHJpcChzZWxmKToK
KyAgICAgICAgcmV0dXJuIFtdCisKKyAgICBkZWYgX2NyZWF0ZVNpbXVsYXRvckFwcHMoc2VsZik6
CisgICAgICAgIGZvciBpIGluIHhyYW5nZShzZWxmLmNoaWxkX3Byb2Nlc3NlcygpKToKKyAgICAg
ICAgICAgIHNlbGYuX2NyZWF0ZVNpbXVsYXRvckFwcChpKQorCisgICAgZGVmIF9jcmVhdGVTaW11
bGF0b3JBcHAoc2VsZiwgc3VmZml4KToKKyAgICAgICAgZGVzdGluYXRpb24gPSBzZWxmLmdldF9z
aW11bGF0b3JfcGF0aChzdWZmaXgpCisgICAgICAgIF9sb2cuaW5mbygiQ3JlYXRpbmcgYXBwOiIg
KyBkZXN0aW5hdGlvbikKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZGVzdGluYXRpb24pOgor
ICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShkZXN0aW5hdGlvbiwgaWdub3JlX2Vycm9ycz1UcnVl
KQorICAgICAgICBzaW11bGF0b3JfYXBwX3BhdGggPSBzZWxmLmRldmVsb3Blcl9kaXIgKyAiL0Fw
cGxpY2F0aW9ucy9TaW11bGF0b3IuYXBwIgorICAgICAgICBzaHV0aWwuY29weXRyZWUoc2ltdWxh
dG9yX2FwcF9wYXRoLCBkZXN0aW5hdGlvbikKKworICAgICAgICAjIFVwZGF0ZSBhcHAncyBwYWNr
YWdlLW5hbWUgaW5zaWRlIHBsaXN0IGFuZCByZS1jb2RlLXNpZ24gaXQKKyAgICAgICAgcGxpc3Rf
cGF0aCA9IGRlc3RpbmF0aW9uICsgIi9Db250ZW50cy9JbmZvLnBsaXN0IgorICAgICAgICBjb21t
YW5kID0gIlNldCBDRkJ1bmRsZUlkZW50aWZpZXIgY29tLmFwcGxlLmlwaG9uZXNpbXVsYXRvciIg
KyBzdHIoc3VmZml4KQorICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbIi91c3IvbGli
ZXhlYy9QbGlzdEJ1ZGR5IiwgIi1jIiwgY29tbWFuZCwgcGxpc3RfcGF0aF0pCisgICAgICAgIHN1
YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsiaW5zdGFsbF9uYW1lX3Rvb2wiLCAiLWFkZF9ycGF0aCIs
IHNlbGYuZGV2ZWxvcGVyX2RpciArICIvTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy8iLCBkZXN0
aW5hdGlvbiArICIvQ29udGVudHMvTWFjT1MvU2ltdWxhdG9yIl0pCisgICAgICAgIHN1YnByb2Nl
c3MuY2hlY2tfb3V0cHV0KFsiaW5zdGFsbF9uYW1lX3Rvb2wiLCAiLWFkZF9ycGF0aCIsIHNlbGYu
ZGV2ZWxvcGVyX2RpciArICIvLi4vRnJhbWV3b3Jrcy8iLCBkZXN0aW5hdGlvbiArICIvQ29udGVu
dHMvTWFjT1MvU2ltdWxhdG9yIl0pCisgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsi
Y29kZXNpZ24iLCAiLWZzIiwgIi0iLCBkZXN0aW5hdGlvbl0pCisgICAgICAgIHN1YnByb2Nlc3Mu
Y2hlY2tfb3V0cHV0KFtzZWxmLkxTUkVHSVNURVJfUEFUSCwgIi1mIiwgZGVzdGluYXRpb25dKQpJ
bmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc191bml0dGVzdC5weQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3VuaXR0ZXN0LnB5CShyZXZp
c2lvbiAyMTI3NDQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3VuaXR0ZXN0
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw3IEBACiAKIGltcG9ydCB0aW1lCiAKLWZy
b20gd2Via2l0cHkucG9ydC5pb3MgaW1wb3J0IElPU1NpbXVsYXRvclBvcnQKK2Zyb20gd2Via2l0
cHkucG9ydC5pb3Nfc2ltdWxhdG9yIGltcG9ydCBJT1NTaW11bGF0b3JQb3J0CiBmcm9tIHdlYmtp
dHB5LnBvcnQgaW1wb3J0IGRhcndpbl90ZXN0Y2FzZQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lz
dGVtLmZpbGVzeXN0ZW1fbW9jayBpbXBvcnQgTW9ja0ZpbGVTeXN0ZW0KIGZyb20gd2Via2l0cHku
Y29tbW9uLnN5c3RlbS5vdXRwdXRjYXB0dXJlIGltcG9ydCBPdXRwdXRDYXB0dXJlCkluZGV4OiBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2ltdWxhdG9yX3Byb2Nlc3MucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NpbXVsYXRvcl9wcm9jZXNzLnB5CShy
ZXZpc2lvbiAyMTI3NDQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2ltdWxhdG9y
X3Byb2Nlc3MucHkJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgY2xhc3MgU2ltdWxh
dG9yUHJvY2VzcyhTZXJ2ZXJQcm9jZXNzKToKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0
X29iaiwgbmFtZSwgY21kLCBlbnY9Tm9uZSwgdW5pdmVyc2FsX25ld2xpbmVzPUZhbHNlLCB0cmVh
dF9ub19kYXRhX2FzX2NyYXNoPUZhbHNlLCB3b3JrZXJfbnVtYmVyPU5vbmUpOgogICAgICAgICBz
ZWxmLl9idW5kbGVfaWQgPSBwb3J0X29iai5hcHBfaWRlbnRpZmllcl9mcm9tX2J1bmRsZShjbWRb
MF0pCi0gICAgICAgIHNlbGYuX2RldmljZSA9IFNpbXVsYXRvcihwb3J0X29iai5ob3N0KS5maW5k
X2RldmljZV9ieV91ZGlkKHBvcnRfb2JqLmRldmljZV9pZF9mb3Jfd29ya2VyX251bWJlcih3b3Jr
ZXJfbnVtYmVyKSkKKyAgICAgICAgc2VsZi5fZGV2aWNlID0gcG9ydF9vYmouZGV2aWNlX2Zvcl93
b3JrZXJfbnVtYmVyKHdvcmtlcl9udW1iZXIpCiAgICAgICAgIGlmIG5vdCBzZWxmLl9kZXZpY2Uu
aW5zdGFsbF9hcHAoY21kWzBdLCBlbnYpOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9y
KCdGYWlsZWQgdG8gaW5zdGFsbCBhcHAge30gb24gc2ltdWxhdG9yIGRldmljZSB7fScuZm9ybWF0
KGNtZFswXSwgc2VsZi5fZGV2aWNlLnVkaWQpKQogICAgICAgICBlbnZbJ0lQQ19JREVOVElGSUVS
J10gPSBzZWxmLl9idW5kbGVfaWQgKyAnLScgKyBzZWxmLl9kZXZpY2UudWRpZApJbmRleDogVG9v
bHMvU2NyaXB0cy93ZWJraXRweS94Y29kZS9zaW11bGF0b3IucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy93ZWJraXRweS94Y29kZS9zaW11bGF0b3IucHkJKHJldmlzaW9uIDIxMjc0NCkK
KysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkveGNvZGUvc2ltdWxhdG9yLnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0xODEsNyArMTgxLDcgQEAgY2xhc3MgU2ltdWxhdG9yKG9iamVjdCk6CiAgICAgZGV2
aWNlc19yZSA9IHJlLmNvbXBpbGUoCiAgICAgICAgICdccyooP1A8bmFtZT5bXihdKyApXCgoP1A8
dWRpZD5bXildKylcKSBcKCg/UDxzdGF0ZT5bXildKylcKSggXCgoP1A8YXZhaWxhYmlsaXR5Plte
KV0rKVwpKT8nKQogCi0gICAgX21hbmFnZWRfZGV2aWNlcyA9IHt9CisgICAgbWFuYWdlZF9kZXZp
Y2VzID0ge30KICAgICBEZXZpY2UgPSBOb25lCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgaG9z
dD1Ob25lKToKQEAgLTIxNiwyMSArMjE2LDIxIEBAIGNsYXNzIFNpbXVsYXRvcihvYmplY3QpOgog
ICAgIGRlZiBjcmVhdGVfZGV2aWNlKG51bWJlciwgZGV2aWNlX3R5cGUsIHJ1bnRpbWUpOgogICAg
ICAgICBkZXZpY2UgPSBTaW11bGF0b3IoKS5sb29rdXBfb3JfY3JlYXRlX2RldmljZShkZXZpY2Vf
dHlwZS5uYW1lICsgJyBXZWJLaXQgVGVzdGVyJyArIHN0cihudW1iZXIpLCBkZXZpY2VfdHlwZSwg
cnVudGltZSkKICAgICAgICAgX2xvZy5kZWJ1ZygnY3JlYXRlZCBkZXZpY2Uge30ge30nLmZvcm1h
dChudW1iZXIsIGRldmljZSkpCi0gICAgICAgIGFzc2VydChsZW4oU2ltdWxhdG9yLl9tYW5hZ2Vk
X2RldmljZXMpID09IG51bWJlcikKLSAgICAgICAgU2ltdWxhdG9yLl9tYW5hZ2VkX2RldmljZXNb
bnVtYmVyXSA9IGRldmljZQorICAgICAgICBhc3NlcnQobGVuKFNpbXVsYXRvci5tYW5hZ2VkX2Rl
dmljZXMpID09IG51bWJlcikKKyAgICAgICAgU2ltdWxhdG9yLm1hbmFnZWRfZGV2aWNlc1tudW1i
ZXJdID0gZGV2aWNlCiAKICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIHJlbW92ZV9kZXZpY2Uo
bnVtYmVyKToKLSAgICAgICAgaWYgbm90IFNpbXVsYXRvci5fbWFuYWdlZF9kZXZpY2VzW251bWJl
cl06CisgICAgICAgIGlmIG5vdCBTaW11bGF0b3IubWFuYWdlZF9kZXZpY2VzW251bWJlcl06CiAg
ICAgICAgICAgICByZXR1cm4KLSAgICAgICAgZGV2aWNlX3VkaWQgPSBTaW11bGF0b3IuX21hbmFn
ZWRfZGV2aWNlc1tudW1iZXJdLnVkaWQKKyAgICAgICAgZGV2aWNlX3VkaWQgPSBTaW11bGF0b3Iu
bWFuYWdlZF9kZXZpY2VzW251bWJlcl0udWRpZAogICAgICAgICBfbG9nLmRlYnVnKCdyZW1vdmlu
ZyBkZXZpY2Uge30ge30nLmZvcm1hdChudW1iZXIsIGRldmljZV91ZGlkKSkKLSAgICAgICAgZGVs
IFNpbXVsYXRvci5fbWFuYWdlZF9kZXZpY2VzW251bWJlcl0KKyAgICAgICAgZGVsIFNpbXVsYXRv
ci5tYW5hZ2VkX2RldmljZXNbbnVtYmVyXQogICAgICAgICBTaW11bGF0b3IuZGVsZXRlX2Rldmlj
ZShkZXZpY2VfdWRpZCkKIAogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgZGV2aWNlX251bWJl
cihudW1iZXIpOgotICAgICAgICByZXR1cm4gU2ltdWxhdG9yLl9tYW5hZ2VkX2RldmljZXNbbnVt
YmVyXQorICAgICAgICByZXR1cm4gU2ltdWxhdG9yLm1hbmFnZWRfZGV2aWNlc1tudW1iZXJdCiAK
ICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIGRldmljZV9zdGF0ZV9kZXNjcmlwdGlvbihzdGF0
ZSk6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>302695</attachid>
            <date>2017-02-24 15:36:38 -0800</date>
            <delta_ts>2017-02-28 13:30:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-168681-20170224153348.patch</filename>
            <type>text/plain</type>
            <size>54382</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxMjk3MCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQxIEBACisyMDE3LTAyLTI0ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogTW92ZSBzb21lIGRldmljZSBtYW5hZ2VtZW50IGZyb20g
aU9TU2ltdWxhdG9yUG9ydCB0byBpT1NQb3J0IGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjg2ODEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9mYWN0b3J5
LnB5OgorICAgICAgICAoUG9ydEZhY3RvcnkpOiBDb3JyZWN0IGltcG9ydCBwYXRoIGZvciBJT1NT
aW11bGF0b3JQb3J0CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weToKKyAg
ICAgICAgKElPU1BvcnQuX19pbml0X18pOiBEZWZpbmUgdmFyaWFibGVzIHNoYXJlZCBiZXR3ZWVu
IGlPUyBwb3J0cy4KKyAgICAgICAgKElPU1BvcnQuZHJpdmVyX2NtZF9saW5lX2Zvcl9sb2dnaW5n
KTogRnJvbSBJT1NTaW11bGF0b3JQb3J0LgorICAgICAgICAoSU9TUG9ydC5kcml2ZXJfbmFtZSk6
IEZyb20gSU9TU2ltdWxhdG9yUG9ydC4KKyAgICAgICAgKElPU1BvcnQubXVsdGlwbGVfZGV2aWNl
cyk6IENoZWNrIGlmIHRoaXMgcG9ydCBzdXBwb3J0cyBtdWx0aXBsZSBkZXZpY2VzLgorICAgICAg
ICAoSU9TUG9ydC5fdGVzdGluZ19kZXZpY2UpOiBNYXAgd29ya2VyIG51bWJlciB0byBkZXZpY2Uu
CisgICAgICAgIChJT1NQb3J0LmRldmljZV9mb3Jfd29ya2VyX251bWJlcik6IENoZWNrIHJldHVy
biBfdGVzdGluZ19kZXZpY2UgaWYgbXVsdGlwbGUgZGV2aWNlcworICAgICAgICAoSU9TU2ltdWxh
dG9yUG9ydCk6IE1vdmVkIHRvIGlvc19zaW11bGF0b3IucHkKKyAgICAgICAgYXJlIHN1cHBvcnRl
ZCBvciByZXR1cm4gX2N1cnJlbnRfZGV2aWNlLiAKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L3BvcnQvaW9zX3NpbXVsYXRvci5weTogQWRkZWQuCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0
KTogTW92ZWQgZnJvbSBpb3MucHkuCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0Ll9faW5pdF9f
KTogSW5pdCBwYXJlbnQgY2xhc3MsIHNldHVwIGRldmljZSBtYXAuCisgICAgICAgIChJT1NTaW11
bGF0b3JQb3J0Ll9jcmVhdGVfc2ltdWxhdG9ycyk6IFVzZSBvYmplY3Qgb3ZlciB1bmJvdW5kIG1l
dGhvZHMuCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0LnNldHVwX3Rlc3RfcnVuKTogRGl0dG8u
CisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0Lm11bHRpcGxlX2RldmljZXMpOiBUcnVlIGlmIHdl
IGFyZSBtYW5hZ2luZyB0aGUgc2ltdWxhdG9ycy4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQu
X2NyZWF0ZV9kZXZpY2UpOiBVc2Ugb2JqZWN0IG92ZXIgdW5ib3VuZCBtZXRob2RzLgorICAgICAg
ICAoSU9TU2ltdWxhdG9yUG9ydC5fcmVtb3ZlX2RldmljZSk6IERpdHRvLgorICAgICAgICAoSU9T
U2ltdWxhdG9yUG9ydC5kcml2ZXJfbmFtZSk6IE1vdmVkIHRvIHBhcmVudCBjbGFzcy4KKyAgICAg
ICAgKElPU1NpbXVsYXRvclBvcnQuZHJpdmVyX2NtZF9saW5lX2Zvcl9sb2dnaW5nKTogRGl0dG8u
CisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0LmNoaWxkX3Byb2Nlc3Nlcyk6IERpdHRvLgorICAg
ICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fdGVzdGluZ19kZXZpY2UpOiBEaXR0by4KKyAgICAgICAg
KElPU1NpbXVsYXRvclBvcnQuZGV2aWNlX2lkX2Zvcl93b3JrZXJfbnVtYmVyKTogUmVuYW1lZCBh
cyBkZXZpY2VfZm9yX3dvcmtlcl9udW1iZXIuCisgICAgICAgIChTaW11bGF0b3JQcm9jZXNzLl9f
aW5pdF9fKTogQ2FsbCBmaW5kX2RldmljZV9ieV91ZGlkLCBkZXZpY2VfaWRfZm9yX3dvcmtlcl9u
dW1iZXIgaGFzIGJlZW4gcmVtb3ZlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3hjb2Rl
L3NpbXVsYXRvci5weToKKyAgICAgICAgKFNpbXVsYXRvcik6IE1ha2UgX21hbmFnZWRfZGV2aWNl
cyBwdWJsaWMuCisgICAgICAgIChTaW11bGF0b3IuY3JlYXRlX2RldmljZSk6IERpdHRvLgorICAg
ICAgICAoU2ltdWxhdG9yLnJlbW92ZV9kZXZpY2UpOiBEaXR0by4KKyAgICAgICAgKFNpbXVsYXRv
ci5kZXZpY2VfbnVtYmVyKTogRGl0dG8uCisKIDIwMTctMDItMjQgIEpvaG4gV2lsYW5kZXIgIDx3
aWxhbmRlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmVzb3VyY2UgTG9hZCBTdGF0aXN0aWNzOiBB
ZGQgYWx0ZXJuYXRlIGNsYXNzaWZpY2F0aW9uIG1ldGhvZApJbmRleDogVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wb3J0L2ZhY3RvcnkucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L2ZhY3RvcnkucHkJKHJldmlzaW9uIDIxMjk3MCkKKysrIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9mYWN0b3J5LnB5CSh3b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4OSw3IEBA
IGNsYXNzIFBvcnRGYWN0b3J5KG9iamVjdCk6CiAgICAgUE9SVF9DTEFTU0VTID0gKAogICAgICAg
ICAnZWZsLkVmbFBvcnQnLAogICAgICAgICAnZ3RrLkd0a1BvcnQnLAotICAgICAgICAnaW9zLklP
U1NpbXVsYXRvclBvcnQnLAorICAgICAgICAnaW9zX3NpbXVsYXRvci5JT1NTaW11bGF0b3JQb3J0
JywKICAgICAgICAgJ2lvcy5JT1NQb3J0JywKICAgICAgICAgJ21hYy5NYWNQb3J0JywKICAgICAg
ICAgJ21vY2tfZHJ0Lk1vY2tEUlRQb3J0JywKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
cG9ydC9pb3MucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lv
cy5weQkocmV2aXNpb24gMjEyOTcwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lv
cy5weQkod29ya2luZyBjb3B5KQpAQCAtMjAsMjQgKzIwLDExIEBACiAjIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKLWltcG9ydCBpdGVydG9vbHMKIGltcG9ydCBsb2dnaW5n
Ci1pbXBvcnQgb3MKLWltcG9ydCByZQotaW1wb3J0IHNodXRpbAotaW1wb3J0IHN1YnByb2Nlc3MK
LWltcG9ydCB0aW1lCiAKIGZyb20gd2Via2l0cHkuY29tbW9uLm1lbW9pemVkIGltcG9ydCBtZW1v
aXplZAotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0
RXJyb3IKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLm1vZGVscy50ZXN0X2NvbmZpZ3VyYXRp
b24gaW1wb3J0IFRlc3RDb25maWd1cmF0aW9uCi1mcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IGNv
bmZpZyBhcyBwb3J0X2NvbmZpZwotZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBkcml2ZXIsIGlt
YWdlX2RpZmYKIGZyb20gd2Via2l0cHkucG9ydC5kYXJ3aW4gaW1wb3J0IERhcndpblBvcnQKIGZy
b20gd2Via2l0cHkucG9ydC5zaW11bGF0b3JfcHJvY2VzcyBpbXBvcnQgU2ltdWxhdG9yUHJvY2Vz
cwotZnJvbSB3ZWJraXRweS54Y29kZS5zaW11bGF0b3IgaW1wb3J0IFNpbXVsYXRvciwgUnVudGlt
ZSwgRGV2aWNlVHlwZQotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmNyYXNobG9ncyBpbXBv
cnQgQ3Jhc2hMb2dzCi0KIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogCkBA
IC00NSw3MiArMzIsMjIgQEAgX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogY2xh
c3MgSU9TUG9ydChEYXJ3aW5Qb3J0KToKICAgICBwb3J0X25hbWUgPSAiaW9zIgogCi0gICAgQVJD
SElURUNUVVJFUyA9IFsnYXJtdjcnLCAnYXJtdjdzJywgJ2FybTY0J10KLSAgICBERUZBVUxUX0FS
Q0hJVEVDVFVSRSA9ICdhcm02NCcKLSAgICBWRVJTSU9OX0ZBTExCQUNLX09SREVSID0gWydpb3Mt
NycsICdpb3MtOCcsICdpb3MtOScsICdpb3MtMTAnXQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAg
ZGVmIGRldGVybWluZV9mdWxsX3BvcnRfbmFtZShjbHMsIGhvc3QsIG9wdGlvbnMsIHBvcnRfbmFt
ZSk6Ci0gICAgICAgIGlmIHBvcnRfbmFtZSA9PSBjbHMucG9ydF9uYW1lOgotICAgICAgICAgICAg
aXBob25lb3Nfc2RrX3ZlcnNpb24gPSBob3N0LnBsYXRmb3JtLnhjb2RlX3Nka192ZXJzaW9uKCdp
cGhvbmVvcycpCi0gICAgICAgICAgICBpZiBub3QgaXBob25lb3Nfc2RrX3ZlcnNpb246Ci0gICAg
ICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJQbGVhc2UgaW5zdGFsbCB0aGUgaU9TIFNESy4i
KQotICAgICAgICAgICAgbWFqb3JfdmVyc2lvbl9udW1iZXIgPSBpcGhvbmVvc19zZGtfdmVyc2lv
bi5zcGxpdCgnLicpWzBdCi0gICAgICAgICAgICBwb3J0X25hbWUgPSBwb3J0X25hbWUgKyAnLScg
KyBtYWpvcl92ZXJzaW9uX251bWJlcgotICAgICAgICByZXR1cm4gcG9ydF9uYW1lCi0KLSAgICAj
IERlc3BpdGUgdGhlaXIgbmFtZXMsIHRoZXNlIGZsYWdzIGRvIG5vdCBhY3R1YWxseSBnZXQgcGFz
c2VkIGFsbCB0aGUgd2F5IGRvd24gdG8gd2Via2l0LWJ1aWxkLgotICAgIGRlZiBfYnVpbGRfZHJp
dmVyX2ZsYWdzKHNlbGYpOgotICAgICAgICByZXR1cm4gWyctLXNkaycsICdpcGhvbmVvcyddICsg
KFsnQVJDSFM9JXMnICUgc2VsZi5hcmNoaXRlY3R1cmUoKV0gaWYgc2VsZi5hcmNoaXRlY3R1cmUo
KSBlbHNlIFtdKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0X25hbWUsICoqa3dh
cmdzKToKKyAgICAgICAgc3VwZXIoSU9TUG9ydCwgc2VsZikuX19pbml0X18oaG9zdCwgcG9ydF9u
YW1lLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5fdGVzdF9ydW5uZXJfcHJvY2Vzc19jb25zdHJ1
Y3RvciA9IFNpbXVsYXRvclByb2Nlc3MKKyAgICAgICAgc2VsZi5fcHJpbnRpbmdfY21kX2xpbmUg
PSBGYWxzZQorICAgICAgICBzZWxmLl9jdXJyZW50X2RldmljZSA9IE5vbmUKKyAgICAgICAgc2Vs
Zi5fZGV2aWNlX21hcCA9IHt9CiAKICAgICBkZWYgb3BlcmF0aW5nX3N5c3RlbShzZWxmKToKICAg
ICAgICAgcmV0dXJuICdpb3MnCiAKLQotY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0
KToKLSAgICBwb3J0X25hbWUgPSAiaW9zLXNpbXVsYXRvciIKLQotICAgIEZVVFVSRV9WRVJTSU9O
ID0gJ2Z1dHVyZScKLSAgICBBUkNISVRFQ1RVUkVTID0gWyd4ODZfNjQnLCAneDg2J10KLSAgICBE
RUZBVUxUX0FSQ0hJVEVDVFVSRSA9ICd4ODZfNjQnCi0KLSAgICBERUZBVUxUX0RFVklDRV9DTEFT
UyA9ICdpcGhvbmUnCi0gICAgQ1VTVE9NX0RFVklDRV9DTEFTU0VTID0gWydpcGFkJywgJ2lwaG9u
ZTcnXQotICAgIFNESyA9ICdpcGhvbmVzaW11bGF0b3InCi0KLSAgICBTSU1VTEFUT1JfQlVORExF
X0lEID0gJ2NvbS5hcHBsZS5pcGhvbmVzaW11bGF0b3InCi0gICAgU0lNVUxBVE9SX0RJUkVDVE9S
WSA9ICIvdG1wL1dlYktpdFRlc3RpbmdTaW11bGF0b3JzLyIKLSAgICBMU1JFR0lTVEVSX1BBVEgg
PSAiL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ29yZVNlcnZpY2VzLmZyYW1ld29yay9GcmFt
ZXdvcmtzL0xhdW5jaFNlcnZpY2VzLmZyYW1ld29yay9WZXJzaW9ucy9DdXJyZW50L1N1cHBvcnQv
bHNyZWdpc3RlciIKLSAgICBQUk9DRVNTX0NPVU5UX0VTVElNQVRFX1BFUl9TSU1VTEFUT1JfSU5T
VEFOQ0UgPSAxMDAKLQotICAgIERFVklDRV9DTEFTU19NQVAgPSB7Ci0gICAgICAgICd4ODZfNjQn
OiB7Ci0gICAgICAgICAgICAnaXBob25lJzogJ2lQaG9uZSA1cycsCi0gICAgICAgICAgICAnaXBo
b25lNyc6ICdpUGhvbmUgNycsCi0gICAgICAgICAgICAnaXBhZCc6ICdpUGFkIEFpcicKLSAgICAg
ICAgfSwKLSAgICAgICAgJ3g4Nic6IHsKLSAgICAgICAgICAgICdpcGhvbmUnOiAnaVBob25lIDUn
LAotICAgICAgICAgICAgJ2lwYWQnOiAnaVBhZCBSZXRpbmEnCi0gICAgICAgIH0sCi0gICAgfQot
Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnRfbmFtZSwgKiprd2FyZ3MpOgotICAg
ICAgICBEYXJ3aW5Qb3J0Ll9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnRfbmFtZSwgKiprd2FyZ3Mp
Ci0gICAgICAgIHNlbGYuX3Rlc3RfcnVubmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBTaW11bGF0
b3JQcm9jZXNzCi0KLSAgICAgICAgb3B0aW9uYWxfZGV2aWNlX2NsYXNzID0gc2VsZi5nZXRfb3B0
aW9uKCdkZXZpY2VfY2xhc3MnKQorICAgIGRlZiBkcml2ZXJfY21kX2xpbmVfZm9yX2xvZ2dpbmco
c2VsZik6CisgICAgICAgICMgQXZvaWQgY3JlYXRpbmcvY29ubmVjdGluZyBkZXZpY2VzIGp1c3Qg
Zm9yIGxvZ2dpbmcgdGhlIGNvbW1hbmRsaW5lLgorICAgICAgICBzZWxmLl9wcmludGluZ19jbWRf
bGluZSA9IFRydWUKKyAgICAgICAgcmVzdWx0ID0gc3VwZXIoSU9TUG9ydCwgc2VsZikuZHJpdmVy
X2NtZF9saW5lX2Zvcl9sb2dnaW5nKCkKICAgICAgICAgc2VsZi5fcHJpbnRpbmdfY21kX2xpbmUg
PSBGYWxzZQotICAgICAgICBzZWxmLl9kZXZpY2VfY2xhc3MgPSBvcHRpb25hbF9kZXZpY2VfY2xh
c3MgaWYgb3B0aW9uYWxfZGV2aWNlX2NsYXNzIGVsc2Ugc2VsZi5ERUZBVUxUX0RFVklDRV9DTEFT
UwotICAgICAgICBfbG9nLmRlYnVnKCdJT1NTaW11bGF0b3JQb3J0IF9kZXZpY2VfY2xhc3MgaXMg
JXMnLCBzZWxmLl9kZXZpY2VfY2xhc3MpCi0KLSAgICAgICAgc2VsZi5fY3VycmVudF9kZXZpY2Ug
PSBTaW11bGF0b3IoaG9zdCkuY3VycmVudF9kZXZpY2UoKQotICAgICAgICBpZiBub3Qgc2VsZi5f
Y3VycmVudF9kZXZpY2U6Ci0gICAgICAgICAgICBzZWxmLnNldF9vcHRpb24oJ2RlZGljYXRlZF9z
aW11bGF0b3JzJywgVHJ1ZSkKLSAgICAgICAgaWYgbm90IHNlbGYuZ2V0X29wdGlvbignZGVkaWNh
dGVkX3NpbXVsYXRvcnMnKToKLSAgICAgICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbignY2hpbGRf
cHJvY2Vzc2VzJykgPiAxOgotICAgICAgICAgICAgICAgIF9sb2cud2FybignQ2Fubm90IGhhdmUg
bW9yZSB0aGFuIG9uZSBjaGlsZCBwcm9jZXNzIHdoZW4gdXNpbmcgYSBydW5uaW5nIHNpbXVsYXRv
ci4gIFNldHRpbmcgY2hpbGRfcHJvY2Vzc2VzIHRvIDEuJykKLSAgICAgICAgICAgIHNlbGYuc2V0
X29wdGlvbignY2hpbGRfcHJvY2Vzc2VzJywgMSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAogCiAg
ICAgZGVmIGRyaXZlcl9uYW1lKHNlbGYpOgogICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ2Ry
aXZlcl9uYW1lJyk6CkBAIC0xMTksMzE1ICs1NiwyNCBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0
KERhcndpblBvcnQpOgogICAgICAgICAgICAgcmV0dXJuICdXZWJLaXRUZXN0UnVubmVyQXBwLmFw
cCcKICAgICAgICAgcmV0dXJuICdEdW1wUmVuZGVyVHJlZS5hcHAnCiAKLSAgICBkZWYgZHJpdmVy
X2NtZF9saW5lX2Zvcl9sb2dnaW5nKHNlbGYpOgotICAgICAgICAjIEF2b2lkIHNwaW5uaW5nIHVw
IGRldmljZXMganVzdCBmb3IgbG9nZ2luZyB0aGUgY29tbWFuZGxpbmUuCi0gICAgICAgIHNlbGYu
X3ByaW50aW5nX2NtZF9saW5lID0gVHJ1ZQotICAgICAgICByZXN1bHQgPSBzdXBlcihJT1NTaW11
bGF0b3JQb3J0LCBzZWxmKS5kcml2ZXJfY21kX2xpbmVfZm9yX2xvZ2dpbmcoKQotICAgICAgICBz
ZWxmLl9wcmludGluZ19jbWRfbGluZSA9IEZhbHNlCi0gICAgICAgIHJldHVybiByZXN1bHQKLQot
ICAgIEBwcm9wZXJ0eQotICAgIEBtZW1vaXplZAotICAgIGRlZiBzaW11bGF0b3JfcnVudGltZShz
ZWxmKToKLSAgICAgICAgcnVudGltZV9pZGVudGlmaWVyID0gc2VsZi5nZXRfb3B0aW9uKCdydW50
aW1lJykKLSAgICAgICAgaWYgcnVudGltZV9pZGVudGlmaWVyOgotICAgICAgICAgICAgcnVudGlt
ZSA9IFJ1bnRpbWUuZnJvbV9pZGVudGlmaWVyKHJ1bnRpbWVfaWRlbnRpZmllcikKLSAgICAgICAg
ZWxzZToKLSAgICAgICAgICAgIHJ1bnRpbWUgPSBSdW50aW1lLmZyb21fdmVyc2lvbl9zdHJpbmco
c2VsZi5ob3N0LnBsYXRmb3JtLnhjb2RlX3Nka192ZXJzaW9uKCdpcGhvbmVzaW11bGF0b3InKSkK
LSAgICAgICAgcmV0dXJuIHJ1bnRpbWUKLQotICAgIGRlZiBzaW11bGF0b3JfZGV2aWNlX3R5cGUo
c2VsZik6Ci0gICAgICAgIGRldmljZV90eXBlX2lkZW50aWZpZXIgPSBzZWxmLmdldF9vcHRpb24o
J2RldmljZV90eXBlJykKLSAgICAgICAgaWYgZGV2aWNlX3R5cGVfaWRlbnRpZmllcjoKLSAgICAg
ICAgICAgIF9sb2cuZGVidWcoJ3NpbXVsYXRvcl9kZXZpY2VfdHlwZSBmb3IgZGV2aWNlIGlkZW50
aWZpZXIgJXMnLCBkZXZpY2VfdHlwZV9pZGVudGlmaWVyKQotICAgICAgICAgICAgZGV2aWNlX3R5
cGUgPSBEZXZpY2VUeXBlLmZyb21faWRlbnRpZmllcihkZXZpY2VfdHlwZV9pZGVudGlmaWVyKQot
ICAgICAgICBlbHNlOgotICAgICAgICAgICAgX2xvZy5kZWJ1Zygnc2ltdWxhdG9yX2RldmljZV90
eXBlIGZvciBkZXZpY2UgJXMnLCBzZWxmLl9kZXZpY2VfY2xhc3MpCi0gICAgICAgICAgICBkZXZp
Y2VfbmFtZSA9IHNlbGYuREVWSUNFX0NMQVNTX01BUFtzZWxmLmFyY2hpdGVjdHVyZSgpXVtzZWxm
Ll9kZXZpY2VfY2xhc3NdCi0gICAgICAgICAgICBpZiBub3QgZGV2aWNlX25hbWU6Ci0gICAgICAg
ICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdGYWlsZWQgdG8gZmluZCBkZXZpY2UgZm9yIGFyY2hp
dGVjdHVyZSB7fSBhbmQgZGV2aWNlIGNsYXNzIHt9Jy5mb3JtYXQoc2VsZi5hcmNoaXRlY3R1cmUo
KSksIHNlbGYuX2RldmljZV9jbGFzcykKLSAgICAgICAgICAgIGRldmljZV90eXBlID0gRGV2aWNl
VHlwZS5mcm9tX25hbWUoZGV2aWNlX25hbWUpCi0gICAgICAgIHJldHVybiBkZXZpY2VfdHlwZQot
CiAgICAgQG1lbW9pemVkCiAgICAgZGVmIGNoaWxkX3Byb2Nlc3NlcyhzZWxmKToKICAgICAgICAg
cmV0dXJuIGludChzZWxmLmdldF9vcHRpb24oJ2NoaWxkX3Byb2Nlc3NlcycpKQogCi0gICAgQG1l
bW9pemVkCi0gICAgZGVmIGRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKHNlbGYpOgotICAgICAgICAi
IiJSZXR1cm4gdGhlIG51bWJlciBvZiBTaW11bGF0b3JzIGluc3RhbmNlcyB0byB1c2UgZm9yIHRo
aXMgcG9ydC4iIiIKLSAgICAgICAgYmVzdF9jaGlsZF9wcm9jZXNzX2NvdW50X2Zvcl9jcHUgPSBz
ZWxmLl9leGVjdXRpdmUuY3B1X2NvdW50KCkgLyAyCi0gICAgICAgIHN5c3RlbV9wcm9jZXNzX2Nv
dW50X2xpbWl0ID0gaW50KHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsidWxpbWl0IiwgIi11Il0p
LnN0cmlwKCkpCi0gICAgICAgIGN1cnJlbnRfcHJvY2Vzc19jb3VudCA9IGxlbihzdWJwcm9jZXNz
LmNoZWNrX291dHB1dChbInBzIiwgImF1eCJdKS5zdHJpcCgpLnNwbGl0KCdcbicpKQotICAgICAg
ICBfbG9nLmRlYnVnKCdQcm9jZXNzIGxpbWl0OiAlZCwgY3VycmVudCAjcHJvY2Vzc2VzOiAlZCcg
JSAoc3lzdGVtX3Byb2Nlc3NfY291bnRfbGltaXQsIGN1cnJlbnRfcHJvY2Vzc19jb3VudCkpCi0g
ICAgICAgIG1heGltdW1fc2ltdWxhdG9yX2NvdW50X29uX3RoaXNfc3lzdGVtID0gKHN5c3RlbV9w
cm9jZXNzX2NvdW50X2xpbWl0IC0gY3VycmVudF9wcm9jZXNzX2NvdW50KSAvLyBzZWxmLlBST0NF
U1NfQ09VTlRfRVNUSU1BVEVfUEVSX1NJTVVMQVRPUl9JTlNUQU5DRQotICAgICAgICAjIEZJWE1F
OiBXZSBzaG91bGQgYWxzbyB0YWtlIGludG8gYWNjb3VudCB0aGUgYXZhaWxhYmxlIFJBTS4KLQot
ICAgICAgICBpZiAobWF4aW11bV9zaW11bGF0b3JfY291bnRfb25fdGhpc19zeXN0ZW0gPCBiZXN0
X2NoaWxkX3Byb2Nlc3NfY291bnRfZm9yX2NwdSk6Ci0gICAgICAgICAgICBfbG9nLndhcm4oIlRo
aXMgbWFjaGluZSBjb3VsZCBzdXBwb3J0ICVzIHNpbXVsYXRvcnMsIGJ1dCBpcyBvbmx5IGNvbmZp
Z3VyZWQgZm9yICVzLiIKLSAgICAgICAgICAgICAgICAlIChiZXN0X2NoaWxkX3Byb2Nlc3NfY291
bnRfZm9yX2NwdSwgbWF4aW11bV9zaW11bGF0b3JfY291bnRfb25fdGhpc19zeXN0ZW0pKQotICAg
ICAgICAgICAgX2xvZy53YXJuKCdQbGVhc2Ugc2VlIDxodHRwczovL3RyYWMud2Via2l0Lm9yZy93
aWtpL0luY3JlYXNpbmdLZXJuZWxMaW1pdHM+LicpCi0KLSAgICAgICAgaWYgbWF4aW11bV9zaW11
bGF0b3JfY291bnRfb25fdGhpc19zeXN0ZW0gPT0gMDoKLSAgICAgICAgICAgIG1heGltdW1fc2lt
dWxhdG9yX2NvdW50X29uX3RoaXNfc3lzdGVtID0gMQotCi0gICAgICAgIHJldHVybiBtaW4obWF4
aW11bV9zaW11bGF0b3JfY291bnRfb25fdGhpc19zeXN0ZW0sIGJlc3RfY2hpbGRfcHJvY2Vzc19j
b3VudF9mb3JfY3B1KQotCi0gICAgZGVmIF9nZXRfY3Jhc2hfbG9nKHNlbGYsIG5hbWUsIHBpZCwg
c3Rkb3V0LCBzdGRlcnIsIG5ld2VyX3RoYW4sIHRpbWVfZm49dGltZS50aW1lLCBzbGVlcF9mbj10
aW1lLnNsZWVwLCB3YWl0X2Zvcl9sb2c9VHJ1ZSk6Ci0gICAgICAgIHRpbWVfZm4gPSB0aW1lX2Zu
IG9yIHRpbWUudGltZQotICAgICAgICBzbGVlcF9mbiA9IHNsZWVwX2ZuIG9yIHRpbWUuc2xlZXAK
LQotICAgICAgICAjIEZJWE1FOiBXZSBzaG91bGQgY29sbGVjdCB0aGUgYWN0dWFsIGNyYXNoIGxv
ZyBmb3IgRHVtcFJlbmRlclRyZWUuYXBwIGJlY2F1c2UgaXQgaW5jbHVkZXMgbW9yZQotICAgICAg
ICAjIGluZm9ybWF0aW9uIChlLmcuIGV4Y2VwdGlvbiBjb2RlcykgdGhhbiBpcyBhdmFpbGFibGUg
aW4gdGhlIHN0YWNrIHRyYWNlIHdyaXR0ZW4gdG8gc3RhbmRhcmQgZXJyb3IuCi0gICAgICAgIHN0
ZGVycl9saW5lcyA9IFtdCi0gICAgICAgIGNyYXNoZWRfc3VicHJvY2Vzc19uYW1lX2FuZF9waWQg
PSBOb25lICAjIGUuZy4gKCdEdW1wUmVuZGVyVHJlZS5hcHAnLCAxMjM0KQotICAgICAgICBmb3Ig
bGluZSBpbiAoc3RkZXJyIG9yICcnKS5zcGxpdGxpbmVzKCk6Ci0gICAgICAgICAgICBpZiBub3Qg
Y3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZDoKLSAgICAgICAgICAgICAgICBtYXRjaCA9
IHNlbGYuU1VCUFJPQ0VTU19DUkFTSF9SRUdFWC5tYXRjaChsaW5lKQotICAgICAgICAgICAgICAg
IGlmIG1hdGNoOgotICAgICAgICAgICAgICAgICAgICBjcmFzaGVkX3N1YnByb2Nlc3NfbmFtZV9h
bmRfcGlkID0gKG1hdGNoLmdyb3VwKCdzdWJwcm9jZXNzX25hbWUnKSwgaW50KG1hdGNoLmdyb3Vw
KCdzdWJwcm9jZXNzX3BpZCcpKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAg
ICAgICAgIHN0ZGVycl9saW5lcy5hcHBlbmQobGluZSkKLQotICAgICAgICBpZiBjcmFzaGVkX3N1
YnByb2Nlc3NfbmFtZV9hbmRfcGlkOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9jcmFz
aF9sb2coY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZFswXSwgY3Jhc2hlZF9zdWJwcm9j
ZXNzX25hbWVfYW5kX3BpZFsxXSwgc3Rkb3V0LAotICAgICAgICAgICAgICAgICdcbicuam9pbihz
dGRlcnJfbGluZXMpLCBuZXdlcl90aGFuLCB0aW1lX2ZuLCBzbGVlcF9mbiwgd2FpdF9mb3JfbG9n
KQotCi0gICAgICAgICMgQXBwIGNyYXNoZWQKLSAgICAgICAgX2xvZy5kZWJ1ZygnbG9va2luZyBm
b3IgY3Jhc2ggbG9nIGZvciAlczolcycgJSAobmFtZSwgc3RyKHBpZCkpKQotICAgICAgICBjcmFz
aF9sb2cgPSAnJwotICAgICAgICBjcmFzaF9sb2dzID0gQ3Jhc2hMb2dzKHNlbGYuaG9zdCkKLSAg
ICAgICAgbm93ID0gdGltZV9mbigpCi0gICAgICAgIGRlYWRsaW5lID0gbm93ICsgNSAqIGludChz
ZWxmLmdldF9vcHRpb24oJ2NoaWxkX3Byb2Nlc3NlcycsIDEpKQotICAgICAgICB3aGlsZSBub3Qg
Y3Jhc2hfbG9nIGFuZCBub3cgPD0gZGVhZGxpbmU6Ci0gICAgICAgICAgICBjcmFzaF9sb2cgPSBj
cmFzaF9sb2dzLmZpbmRfbmV3ZXN0X2xvZyhuYW1lLCBwaWQsIGluY2x1ZGVfZXJyb3JzPVRydWUs
IG5ld2VyX3RoYW49bmV3ZXJfdGhhbikKLSAgICAgICAgICAgIGlmIG5vdCB3YWl0X2Zvcl9sb2c6
Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGlmIG5vdCBjcmFzaF9sb2cgb3Ig
bm90IFtsaW5lIGZvciBsaW5lIGluIGNyYXNoX2xvZy5zcGxpdGxpbmVzKCkgaWYgbm90IGxpbmUu
c3RhcnRzd2l0aCgnRVJST1InKV06Ci0gICAgICAgICAgICAgICAgc2xlZXBfZm4oMC4xKQotICAg
ICAgICAgICAgICAgIG5vdyA9IHRpbWVfZm4oKQotCi0gICAgICAgIGlmIG5vdCBjcmFzaF9sb2c6
Ci0gICAgICAgICAgICByZXR1cm4gc3RkZXJyLCBOb25lCi0gICAgICAgIHJldHVybiBzdGRlcnIs
IGNyYXNoX2xvZwotCi0gICAgZGVmIF9idWlsZF9kcml2ZXJfZmxhZ3Moc2VsZik6Ci0gICAgICAg
IGFyY2hzID0gWydBUkNIUz1pMzg2J10gaWYgc2VsZi5hcmNoaXRlY3R1cmUoKSA9PSAneDg2JyBl
bHNlIFtdCi0gICAgICAgIHNkayA9IFsnLS1zZGsnLCAnaXBob25lc2ltdWxhdG9yJ10KLSAgICAg
ICAgcmV0dXJuIGFyY2hzICsgc2RrCi0KLSAgICBkZWYgX2dlbmVyYXRlX2FsbF90ZXN0X2NvbmZp
Z3VyYXRpb25zKHNlbGYpOgotICAgICAgICBjb25maWd1cmF0aW9ucyA9IFtdCi0gICAgICAgIGZv
ciBidWlsZF90eXBlIGluIHNlbGYuQUxMX0JVSUxEX1RZUEVTOgotICAgICAgICAgICAgZm9yIGFy
Y2hpdGVjdHVyZSBpbiBzZWxmLkFSQ0hJVEVDVFVSRVM6Ci0gICAgICAgICAgICAgICAgY29uZmln
dXJhdGlvbnMuYXBwZW5kKFRlc3RDb25maWd1cmF0aW9uKHZlcnNpb249c2VsZi5fdmVyc2lvbiwg
YXJjaGl0ZWN0dXJlPWFyY2hpdGVjdHVyZSwgYnVpbGRfdHlwZT1idWlsZF90eXBlKSkKLSAgICAg
ICAgcmV0dXJuIGNvbmZpZ3VyYXRpb25zCi0KLSAgICBkZWYgZGVmYXVsdF9iYXNlbGluZV9zZWFy
Y2hfcGF0aChzZWxmKToKLSAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCd3ZWJraXRfdGVzdF9y
dW5uZXInKToKLSAgICAgICAgICAgIGZhbGxiYWNrX25hbWVzID0gW3NlbGYuX3drMl9wb3J0X25h
bWUoKV0gKyBbc2VsZi5wb3J0X25hbWVdICsgWyd3azInXQotICAgICAgICBlbHNlOgotICAgICAg
ICAgICAgZmFsbGJhY2tfbmFtZXMgPSBbc2VsZi5wb3J0X25hbWUgKyAnLXdrMSddICsgW3NlbGYu
cG9ydF9uYW1lXQotCi0gICAgICAgIHJldHVybiBtYXAoc2VsZi5fd2Via2l0X2Jhc2VsaW5lX3Bh
dGgsIGZhbGxiYWNrX25hbWVzKQotCi0gICAgZGVmIF9zZXRfZGV2aWNlX2NsYXNzKHNlbGYsIGRl
dmljZV9jbGFzcyk6Ci0gICAgICAgIHNlbGYuX2RldmljZV9jbGFzcyA9IGRldmljZV9jbGFzcyBp
ZiBkZXZpY2VfY2xhc3MgZWxzZSBzZWxmLkRFRkFVTFRfREVWSUNFX0NMQVNTCi0KLSAgICBkZWYg
X2NyZWF0ZV9zaW11bGF0b3JzKHNlbGYpOgotICAgICAgICBpZiAoc2VsZi5kZWZhdWx0X2NoaWxk
X3Byb2Nlc3NlcygpIDwgc2VsZi5jaGlsZF9wcm9jZXNzZXMoKSk6Ci0gICAgICAgICAgICBfbG9n
Lndhcm4oJ1lvdSBoYXZlIHNwZWNpZmllZCB2ZXJ5IGhpZ2ggdmFsdWUoezB9KSBmb3IgLS1jaGls
ZC1wcm9jZXNzZXMnLmZvcm1hdChzZWxmLmNoaWxkX3Byb2Nlc3NlcygpKSkKLSAgICAgICAgICAg
IF9sb2cud2FybignbWF4aW11bSBjaGlsZC1wcm9jZXNzZXMgd2hpY2ggY2FuIGJlIHN1cHBvcnRl
ZCBvbiB0aGlzIHN5c3RlbSBhcmU6IHswfScuZm9ybWF0KHNlbGYuZGVmYXVsdF9jaGlsZF9wcm9j
ZXNzZXMoKSkpCi0gICAgICAgICAgICBfbG9nLndhcm4oJ1RoaXMgaXMgdmVyeSBsaWtlbHkgdG8g
ZmFpbC4nKQotCi0gICAgICAgIGlmIHNlbGYuX3VzaW5nX2RlZGljYXRlZF9zaW11bGF0b3JzKCk6
Ci0gICAgICAgICAgICBzZWxmLl9jcmVhdGVTaW11bGF0b3JBcHBzKCkKLQotICAgICAgICAgICAg
Zm9yIGkgaW4geHJhbmdlKHNlbGYuY2hpbGRfcHJvY2Vzc2VzKCkpOgotICAgICAgICAgICAgICAg
IHNlbGYuX2NyZWF0ZV9kZXZpY2UoaSkKLQotICAgICAgICAgICAgZm9yIGkgaW4geHJhbmdlKHNl
bGYuY2hpbGRfcHJvY2Vzc2VzKCkpOgotICAgICAgICAgICAgICAgIGRldmljZV91ZGlkID0gc2Vs
Zi5fdGVzdGluZ19kZXZpY2UoaSkudWRpZAotICAgICAgICAgICAgICAgIFNpbXVsYXRvci53YWl0
X3VudGlsX2RldmljZV9pc19pbl9zdGF0ZShkZXZpY2VfdWRpZCwgU2ltdWxhdG9yLkRldmljZVN0
YXRlLlNIVVRET1dOKQotICAgICAgICAgICAgICAgIFNpbXVsYXRvci5yZXNldF9kZXZpY2UoZGV2
aWNlX3VkaWQpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBhc3NlcnQoc2VsZi5fY3VycmVu
dF9kZXZpY2UpCi0gICAgICAgICAgICBpZiBzZWxmLl9jdXJyZW50X2RldmljZS5uYW1lICE9IHNl
bGYuc2ltdWxhdG9yX2RldmljZV90eXBlKCkubmFtZToKLSAgICAgICAgICAgICAgICBfbG9nLndh
cm4oIkV4cGVjdGVkIHNpbXVsYXRvciBvZiB0eXBlICciICsgc2VsZi5zaW11bGF0b3JfZGV2aWNl
X3R5cGUoKS5uYW1lICsgIicgYnV0IGZvdW5kIHNpbXVsYXRvciBvZiB0eXBlICciICsgc2VsZi5f
Y3VycmVudF9kZXZpY2UubmFtZSArICInIikKLSAgICAgICAgICAgICAgICBfbG9nLndhcm4oJ1Ro
ZSBuZXh0IGJsb2NrIG9mIHRlc3RzIG1heSBmYWlsIGR1ZSB0byBkZXZpY2UgbWlzLW1hdGNoJykK
LQotICAgIGRlZiBzZXR1cF90ZXN0X3J1bihzZWxmLCBkZXZpY2VfY2xhc3M9Tm9uZSk6Ci0gICAg
ICAgIG1hY19vc192ZXJzaW9uID0gc2VsZi5ob3N0LnBsYXRmb3JtLm9zX3ZlcnNpb24KLQotICAg
ICAgICBzZWxmLl9zZXRfZGV2aWNlX2NsYXNzKGRldmljZV9jbGFzcykKLQotICAgICAgICBfbG9n
LmRlYnVnKCcnKQotICAgICAgICBfbG9nLmRlYnVnKCdzZXR1cF90ZXN0X3J1biBmb3IgJXMnLCBz
ZWxmLl9kZXZpY2VfY2xhc3MpCi0KLSAgICAgICAgc2VsZi5fY3JlYXRlX3NpbXVsYXRvcnMoKQot
Ci0gICAgICAgIGlmIG5vdCBzZWxmLl91c2luZ19kZWRpY2F0ZWRfc2ltdWxhdG9ycygpOgotICAg
ICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgZm9yIGkgaW4geHJhbmdlKHNlbGYuY2hpbGRfcHJv
Y2Vzc2VzKCkpOgotICAgICAgICAgICAgZGV2aWNlX3VkaWQgPSBzZWxmLl90ZXN0aW5nX2Rldmlj
ZShpKS51ZGlkCi0gICAgICAgICAgICBfbG9nLmRlYnVnKCd0ZXN0aW5nIGRldmljZSAlcyBoYXMg
dWRpZCAlcycsIGksIGRldmljZV91ZGlkKQotCi0gICAgICAgICAgICAjIEZJWE1FOiA8cmRhcjov
L3Byb2JsZW0vMjA5MTYxNDA+IFN3aXRjaCB0byB1c2luZyBDb3JlU2ltdWxhdG9yLmZyYW1ld29y
ayBmb3IgbGF1bmNoaW5nIGFuZCBxdWl0dGluZyBpT1MgU2ltdWxhdG9yCi0gICAgICAgICAgICBz
ZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQoWwotICAgICAgICAgICAgICAgICdvcGVuJywgJy1n
JywgJy1iJywgc2VsZi5TSU1VTEFUT1JfQlVORExFX0lEICsgc3RyKGkpLAotICAgICAgICAgICAg
ICAgICctLWFyZ3MnLCAnLUN1cnJlbnREZXZpY2VVRElEJywgZGV2aWNlX3VkaWRdKQotCi0gICAg
ICAgICAgICBpZiBtYWNfb3NfdmVyc2lvbiBpbiBbJ2VsY2FwaXRhbicsICd5b3NlbWl0ZScsICdt
YXZlcmlja3MnXToKLSAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDIuNSkKLQotICAgICAgICBf
bG9nLmluZm8oJ1dhaXRpbmcgZm9yIGFsbCBpT1MgU2ltdWxhdG9ycyB0byBmaW5pc2ggYm9vdGlu
Zy4nKQotICAgICAgICBmb3IgaSBpbiB4cmFuZ2Uoc2VsZi5jaGlsZF9wcm9jZXNzZXMoKSk6Ci0g
ICAgICAgICAgICBTaW11bGF0b3Iud2FpdF91bnRpbF9kZXZpY2VfaXNfYm9vdGVkKHNlbGYuX3Rl
c3RpbmdfZGV2aWNlKGkpLnVkaWQpCi0KLSAgICBkZWYgX3F1aXRfaW9zX3NpbXVsYXRvcihzZWxm
KToKLSAgICAgICAgaWYgbm90IHNlbGYuX3VzaW5nX2RlZGljYXRlZF9zaW11bGF0b3JzKCk6Ci0g
ICAgICAgICAgICByZXR1cm4KLSAgICAgICAgX2xvZy5kZWJ1ZygiX3F1aXRfaW9zX3NpbXVsYXRv
ciBraWxsaW5nIGFsbCBTaW11bGF0b3IgcHJvY2Vzc2VzIikKLSAgICAgICAgIyBGSVhNRTogV2Ug
c2hvdWxkIGtpbGwgb25seSB0aGUgU2ltdWxhdG9ycyB3ZSBzdGFydGVkLgotICAgICAgICBzdWJw
cm9jZXNzLmNhbGwoWyJraWxsYWxsIiwgIi05IiwgIi1tIiwgIlNpbXVsYXRvciJdKQotCi0gICAg
ZGVmIGNsZWFuX3VwX3Rlc3RfcnVuKHNlbGYpOgotICAgICAgICBzdXBlcihJT1NTaW11bGF0b3JQ
b3J0LCBzZWxmKS5jbGVhbl91cF90ZXN0X3J1bigpCi0gICAgICAgIF9sb2cuZGVidWcoImNsZWFu
X3VwX3Rlc3RfcnVuIikKLSAgICAgICAgc2VsZi5fcXVpdF9pb3Nfc2ltdWxhdG9yKCkKLSAgICAg
ICAgZmlmb3MgPSBbcGF0aCBmb3IgcGF0aCBpbiBvcy5saXN0ZGlyKCcvdG1wJykgaWYgcmUuc2Vh
cmNoKCdvcmcud2Via2l0LihEdW1wUmVuZGVyVHJlZXxXZWJLaXRUZXN0UnVubmVyKS4qXyhJTnxP
VVR8RVJST1IpJywgcGF0aCldCi0gICAgICAgIGZvciBmaWZvIGluIGZpZm9zOgotICAgICAgICAg
ICAgdHJ5OgotICAgICAgICAgICAgICAgIG9zLnJlbW92ZShvcy5wYXRoLmpvaW4oJy90bXAnLCBm
aWZvKSkKLSAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICAgICAgICAgIF9sb2cu
d2FybmluZygnVW5hYmxlIHRvIHJlbW92ZSAnICsgZmlmbykKLSAgICAgICAgICAgICAgICBwYXNz
Ci0KLSAgICAgICAgaWYgbm90IHNlbGYuX3VzaW5nX2RlZGljYXRlZF9zaW11bGF0b3JzKCk6Ci0g
ICAgICAgICAgICByZXR1cm4KLQotICAgICAgICBmb3IgaSBpbiB4cmFuZ2Uoc2VsZi5jaGlsZF9w
cm9jZXNzZXMoKSk6Ci0gICAgICAgICAgICBzaW11bGF0b3JfcGF0aCA9IHNlbGYuZ2V0X3NpbXVs
YXRvcl9wYXRoKGkpCi0gICAgICAgICAgICBkZXZpY2VfdWRpZCA9IHNlbGYuX3Rlc3RpbmdfZGV2
aWNlKGkpLnVkaWQKLSAgICAgICAgICAgIHNlbGYuX3JlbW92ZV9kZXZpY2UoaSkKLQotICAgICAg
ICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNpbXVsYXRvcl9wYXRoKToKLSAgICAgICAgICAg
ICAgICBjb250aW51ZQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYuX2V4
ZWN1dGl2ZS5ydW5fY29tbWFuZChbc2VsZi5MU1JFR0lTVEVSX1BBVEgsICItdSIsIHNpbXVsYXRv
cl9wYXRoXSkKLQotICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoJ3JtdHJlZSAlcycsIHNpbXVs
YXRvcl9wYXRoKQotICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ucm10cmVlKHNpbXVs
YXRvcl9wYXRoKQotCi0gICAgICAgICAgICAgICAgbG9nc19wYXRoID0gc2VsZi5fZmlsZXN5c3Rl
bS5qb2luKHNlbGYuX2ZpbGVzeXN0ZW0uZXhwYW5kdXNlcigifiIpLCAiTGlicmFyeS9Mb2dzL0Nv
cmVTaW11bGF0b3IvIiwgZGV2aWNlX3VkaWQpCi0gICAgICAgICAgICAgICAgX2xvZy5kZWJ1Zygn
cm10cmVlICVzJywgbG9nc19wYXRoKQotICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0u
cm10cmVlKGxvZ3NfcGF0aCkKLQotICAgICAgICAgICAgICAgIHNhdmVkX3N0YXRlX3BhdGggPSBz
ZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5fZmlsZXN5c3RlbS5leHBhbmR1c2VyKCJ+IiksICJM
aWJyYXJ5L1NhdmVkIEFwcGxpY2F0aW9uIFN0YXRlLyIsIHNlbGYuU0lNVUxBVE9SX0JVTkRMRV9J
RCArIHN0cihpKSArICIuc2F2ZWRTdGF0ZSIpCi0gICAgICAgICAgICAgICAgX2xvZy5kZWJ1Zygn
cm10cmVlICVzJywgc2F2ZWRfc3RhdGVfcGF0aCkKLSAgICAgICAgICAgICAgICBzZWxmLl9maWxl
c3lzdGVtLnJtdHJlZShzYXZlZF9zdGF0ZV9wYXRoKQotCi0gICAgICAgICAgICBleGNlcHQ6Ci0g
ICAgICAgICAgICAgICAgX2xvZy53YXJuaW5nKCdVbmFibGUgdG8gcmVtb3ZlIFNpbXVsYXRvcicg
KyBzdHIoaSkpCi0KLSAgICBkZWYgc2V0dXBfZW52aXJvbl9mb3Jfc2VydmVyKHNlbGYsIHNlcnZl
cl9uYW1lPU5vbmUpOgotICAgICAgICBfbG9nLmRlYnVnKCJzZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2
ZXIiKQotICAgICAgICBlbnYgPSBzdXBlcihJT1NTaW11bGF0b3JQb3J0LCBzZWxmKS5zZXR1cF9l
bnZpcm9uX2Zvcl9zZXJ2ZXIoc2VydmVyX25hbWUpCi0gICAgICAgIGlmIHNlcnZlcl9uYW1lID09
IHNlbGYuZHJpdmVyX25hbWUoKToKLSAgICAgICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbignbGVh
a3MnKToKLSAgICAgICAgICAgICAgICBlbnZbJ01hbGxvY1N0YWNrTG9nZ2luZyddID0gJzEnCi0g
ICAgICAgICAgICAgICAgZW52WydfX1hQQ19NYWxsb2NTdGFja0xvZ2dpbmcnXSA9ICcxJwotICAg
ICAgICAgICAgICAgIGVudlsnTWFsbG9jU2NyaWJibGUnXSA9ICcxJwotICAgICAgICAgICAgICAg
IGVudlsnX19YUENfTWFsbG9jU2NyaWJibGUnXSA9ICcxJwotICAgICAgICAgICAgaWYgc2VsZi5n
ZXRfb3B0aW9uKCdndWFyZF9tYWxsb2MnKToKLSAgICAgICAgICAgICAgICBzZWxmLl9hcHBlbmRf
dmFsdWVfY29sb25fc2VwYXJhdGVkKGVudiwgJ0RZTERfSU5TRVJUX0xJQlJBUklFUycsICcvdXNy
L2xpYi9saWJnbWFsbG9jLmR5bGliJykKLSAgICAgICAgICAgICAgICBzZWxmLl9hcHBlbmRfdmFs
dWVfY29sb25fc2VwYXJhdGVkKGVudiwgJ19fWFBDX0RZTERfSU5TRVJUX0xJQlJBUklFUycsICcv
dXNyL2xpYi9saWJnbWFsbG9jLmR5bGliJykKLSAgICAgICAgZW52WydYTUxfQ0FUQUxPR19GSUxF
UyddID0gJycgICMgd29yayBhcm91bmQgbWlzc2luZyAvZXRjL2NhdGFsb2cgPHJkYXI6Ly9wcm9i
bGVtLzQyOTI5OTU+Ci0gICAgICAgIHJldHVybiBlbnYKLQotICAgIGRlZiBvcGVyYXRpbmdfc3lz
dGVtKHNlbGYpOgotICAgICAgICByZXR1cm4gJ2lvcy1zaW11bGF0b3InCi0KLSAgICBkZWYgY2hl
Y2tfc3lzX2RlcHMoc2VsZiwgbmVlZHNfaHR0cCk6Ci0gICAgICAgIGlmIG5vdCBzZWxmLnNpbXVs
YXRvcl9ydW50aW1lLmF2YWlsYWJsZToKLSAgICAgICAgICAgIF9sb2cuZXJyb3IoJ1RoZSBpT1Mg
U2ltdWxhdG9yIHJ1bnRpbWUgd2l0aCBpZGVudGlmaWVyICJ7MH0iIGNhbm5vdCBiZSB1c2VkIGJl
Y2F1c2UgaXQgaXMgdW5hdmFpbGFibGUuJy5mb3JtYXQoc2VsZi5zaW11bGF0b3JfcnVudGltZS5p
ZGVudGlmaWVyKSkKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1cm4gc3Vw
ZXIoSU9TU2ltdWxhdG9yUG9ydCwgc2VsZikuY2hlY2tfc3lzX2RlcHMobmVlZHNfaHR0cCkKLQot
ICAgIFNVQlBST0NFU1NfQ1JBU0hfUkVHRVggPSByZS5jb21waWxlKCcjQ1JBU0hFRCAtICg/UDxz
dWJwcm9jZXNzX25hbWU+XFMrKSBcKHBpZCAoP1A8c3VicHJvY2Vzc19waWQ+XGQrKVwpJykKLQot
ICAgIGRlZiBfdXNpbmdfZGVkaWNhdGVkX3NpbXVsYXRvcnMoc2VsZik6Ci0gICAgICAgIHJldHVy
biBzZWxmLmdldF9vcHRpb24oJ2RlZGljYXRlZF9zaW11bGF0b3JzJykKLQotICAgIGRlZiBfY3Jl
YXRlX2RldmljZShzZWxmLCBudW1iZXIpOgotICAgICAgICByZXR1cm4gU2ltdWxhdG9yLmNyZWF0
ZV9kZXZpY2UobnVtYmVyLCBzZWxmLnNpbXVsYXRvcl9kZXZpY2VfdHlwZSgpLCBzZWxmLnNpbXVs
YXRvcl9ydW50aW1lKQotCi0gICAgZGVmIF9yZW1vdmVfZGV2aWNlKHNlbGYsIG51bWJlcik6Ci0g
ICAgICAgIFNpbXVsYXRvci5yZW1vdmVfZGV2aWNlKG51bWJlcikKKyAgICBkZWYgbXVsdGlwbGVf
ZGV2aWNlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICBkZWYgX3Rlc3Rpbmdf
ZGV2aWNlKHNlbGYsIG51bWJlcik6Ci0gICAgICAgIHJldHVybiBTaW11bGF0b3IuZGV2aWNlX251
bWJlcihudW1iZXIpCi0KLSAgICAjIEZJWE1FOiBUaGlzIGlzIG9ubHkgZXhwb3NlZCBzbyB0aGF0
IFNpbXVsYXRvclByb2Nlc3MgY2FuIHVzZSBpdC4KLSAgICBkZWYgZGV2aWNlX2lkX2Zvcl93b3Jr
ZXJfbnVtYmVyKHNlbGYsIG51bWJlcik6CisgICAgICAgIGRldmljZSA9IHNlbGYuX2RldmljZV9t
YXBbbnVtYmVyXQorICAgICAgICBpZiBub3QgZGV2aWNlOgorICAgICAgICAgICAgcmFpc2UgUnVu
dGltZUVycm9yKCdEZXZpY2UgYXQge30gY291bGQgbm90IGJlIGZvdW5kJy5mb3JtYXQobnVtYmVy
KSkKKyAgICAgICAgcmV0dXJuIGRldmljZQorCisgICAgZGVmIGRldmljZV9mb3Jfd29ya2VyX251
bWJlcihzZWxmLCBudW1iZXIpOgorICAgICAgICBpZiBudW1iZXIgaXMgTm9uZToKKyAgICAgICAg
ICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignTm8gd29ya2VyIG51bWJlciBnaXZlbiwgY2Fubm90IG1h
cCBkZXZpY2VzLicpCiAgICAgICAgIGlmIHNlbGYuX3ByaW50aW5nX2NtZF9saW5lOgotICAgICAg
ICAgICAgcmV0dXJuICc8ZHVtbXkgaWQ+JwotICAgICAgICBpZiBzZWxmLl91c2luZ19kZWRpY2F0
ZWRfc2ltdWxhdG9ycygpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3Rlc3RpbmdfZGV2aWNl
KG51bWJlcikudWRpZAotICAgICAgICByZXR1cm4gc2VsZi5fY3VycmVudF9kZXZpY2UudWRpZAot
Ci0gICAgZGVmIGdldF9zaW11bGF0b3JfcGF0aChzZWxmLCBzdWZmaXg9IiIpOgotICAgICAgICBy
ZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuU0lNVUxBVE9SX0RJUkVDVE9SWSwgIlNpbXVsYXRvciIg
KyBzdHIoc3VmZml4KSArICIuYXBwIikKLQotICAgIGRlZiBkaWZmX2ltYWdlKHNlbGYsIGV4cGVj
dGVkX2NvbnRlbnRzLCBhY3R1YWxfY29udGVudHMsIHRvbGVyYW5jZT1Ob25lKToKLSAgICAgICAg
aWYgbm90IGFjdHVhbF9jb250ZW50cyBhbmQgbm90IGV4cGVjdGVkX2NvbnRlbnRzOgotICAgICAg
ICAgICAgcmV0dXJuIChOb25lLCAwLCBOb25lKQotICAgICAgICBpZiBub3QgYWN0dWFsX2NvbnRl
bnRzIG9yIG5vdCBleHBlY3RlZF9jb250ZW50czoKLSAgICAgICAgICAgIHJldHVybiAoVHJ1ZSwg
MCwgTm9uZSkKLSAgICAgICAgaWYgbm90IHNlbGYuX2ltYWdlX2RpZmZlcjoKLSAgICAgICAgICAg
IHNlbGYuX2ltYWdlX2RpZmZlciA9IGltYWdlX2RpZmYuSU9TU2ltdWxhdG9ySW1hZ2VEaWZmZXIo
c2VsZikKLSAgICAgICAgc2VsZi5zZXRfb3B0aW9uX2RlZmF1bHQoJ3RvbGVyYW5jZScsIDAuMSkK
LSAgICAgICAgaWYgdG9sZXJhbmNlIGlzIE5vbmU6Ci0gICAgICAgICAgICB0b2xlcmFuY2UgPSBz
ZWxmLmdldF9vcHRpb24oJ3RvbGVyYW5jZScpCi0gICAgICAgIHJldHVybiBzZWxmLl9pbWFnZV9k
aWZmZXIuZGlmZl9pbWFnZShleHBlY3RlZF9jb250ZW50cywgYWN0dWFsX2NvbnRlbnRzLCB0b2xl
cmFuY2UpCi0KLSAgICBkZWYgcmVzZXRfcHJlZmVyZW5jZXMoc2VsZik6Ci0gICAgICAgIF9sb2cu
ZGVidWcoInJlc2V0X3ByZWZlcmVuY2VzIikKLSAgICAgICAgc2VsZi5fcXVpdF9pb3Nfc2ltdWxh
dG9yKCkKLSAgICAgICAgIyBNYXliZSB0aGlzIHNob3VsZCBkZWxldGUgYWxsIGRldmljZXMgdGhh
dCB3ZSd2ZSBjcmVhdGVkPwotCi0gICAgZGVmIG5tX2NvbW1hbmQoc2VsZik6Ci0gICAgICAgIHJl
dHVybiBzZWxmLnhjcnVuX2ZpbmQoJ25tJykKLQotICAgIEBwcm9wZXJ0eQotICAgIEBtZW1vaXpl
ZAotICAgIGRlZiBkZXZlbG9wZXJfZGlyKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fZXhl
Y3V0aXZlLnJ1bl9jb21tYW5kKFsneGNvZGUtc2VsZWN0JywgJy0tcHJpbnQtcGF0aCddKS5yc3Ry
aXAoKQotCi0gICAgZGVmIGxvZ2dpbmdfcGF0dGVybnNfdG9fc3RyaXAoc2VsZik6Ci0gICAgICAg
IHJldHVybiBbXQotCi0gICAgZGVmIHN0ZGVycl9wYXR0ZXJuc190b19zdHJpcChzZWxmKToKLSAg
ICAgICAgcmV0dXJuIFtdCi0KLSAgICBkZWYgX2NyZWF0ZVNpbXVsYXRvckFwcHMoc2VsZik6Ci0g
ICAgICAgIGZvciBpIGluIHhyYW5nZShzZWxmLmNoaWxkX3Byb2Nlc3NlcygpKToKLSAgICAgICAg
ICAgIHNlbGYuX2NyZWF0ZVNpbXVsYXRvckFwcChpKQotCi0gICAgZGVmIF9jcmVhdGVTaW11bGF0
b3JBcHAoc2VsZiwgc3VmZml4KToKLSAgICAgICAgZGVzdGluYXRpb24gPSBzZWxmLmdldF9zaW11
bGF0b3JfcGF0aChzdWZmaXgpCi0gICAgICAgIF9sb2cuaW5mbygiQ3JlYXRpbmcgYXBwOiIgKyBk
ZXN0aW5hdGlvbikKLSAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZGVzdGluYXRpb24pOgotICAg
ICAgICAgICAgc2h1dGlsLnJtdHJlZShkZXN0aW5hdGlvbiwgaWdub3JlX2Vycm9ycz1UcnVlKQot
ICAgICAgICBzaW11bGF0b3JfYXBwX3BhdGggPSBzZWxmLmRldmVsb3Blcl9kaXIgKyAiL0FwcGxp
Y2F0aW9ucy9TaW11bGF0b3IuYXBwIgotICAgICAgICBzaHV0aWwuY29weXRyZWUoc2ltdWxhdG9y
X2FwcF9wYXRoLCBkZXN0aW5hdGlvbikKLQotICAgICAgICAjIFVwZGF0ZSBhcHAncyBwYWNrYWdl
LW5hbWUgaW5zaWRlIHBsaXN0IGFuZCByZS1jb2RlLXNpZ24gaXQKLSAgICAgICAgcGxpc3RfcGF0
aCA9IGRlc3RpbmF0aW9uICsgIi9Db250ZW50cy9JbmZvLnBsaXN0IgotICAgICAgICBjb21tYW5k
ID0gIlNldCBDRkJ1bmRsZUlkZW50aWZpZXIgY29tLmFwcGxlLmlwaG9uZXNpbXVsYXRvciIgKyBz
dHIoc3VmZml4KQotICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbIi91c3IvbGliZXhl
Yy9QbGlzdEJ1ZGR5IiwgIi1jIiwgY29tbWFuZCwgcGxpc3RfcGF0aF0pCi0gICAgICAgIHN1YnBy
b2Nlc3MuY2hlY2tfb3V0cHV0KFsiaW5zdGFsbF9uYW1lX3Rvb2wiLCAiLWFkZF9ycGF0aCIsIHNl
bGYuZGV2ZWxvcGVyX2RpciArICIvTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy8iLCBkZXN0aW5h
dGlvbiArICIvQ29udGVudHMvTWFjT1MvU2ltdWxhdG9yIl0pCi0gICAgICAgIHN1YnByb2Nlc3Mu
Y2hlY2tfb3V0cHV0KFsiaW5zdGFsbF9uYW1lX3Rvb2wiLCAiLWFkZF9ycGF0aCIsIHNlbGYuZGV2
ZWxvcGVyX2RpciArICIvLi4vRnJhbWV3b3Jrcy8iLCBkZXN0aW5hdGlvbiArICIvQ29udGVudHMv
TWFjT1MvU2ltdWxhdG9yIl0pCi0gICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsiY29k
ZXNpZ24iLCAiLWZzIiwgIi0iLCBkZXN0aW5hdGlvbl0pCi0gICAgICAgIHN1YnByb2Nlc3MuY2hl
Y2tfb3V0cHV0KFtzZWxmLkxTUkVHSVNURVJfUEFUSCwgIi1mIiwgZGVzdGluYXRpb25dKQorICAg
ICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgaWYgc2VsZi5tdWx0aXBsZV9kZXZpY2VzKCk6
CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fdGVzdGluZ19kZXZpY2UobnVtYmVyKQorICAgICAg
ICByZXR1cm4gc2VsZi5fY3VycmVudF9kZXZpY2UKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcG9ydC9pb3Nfc2ltdWxhdG9yLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9pb3Nfc2ltdWxhdG9yLnB5CShyZXZpc2lvbiAyMTI5NzApCShmcm9tIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3MucHk6MjEyOTcwKQorKysgVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wb3J0L2lvc19zaW11bGF0b3IucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
MzMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBv
cnQgaXRlcnRvb2xzCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9y
dCBzaHV0aWwKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdGltZQorCitmcm9tIHdlYmtpdHB5
LmNvbW1vbi5tZW1vaXplZCBpbXBvcnQgbWVtb2l6ZWQKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5
c3RlbS5leGVjdXRpdmUgaW1wb3J0IFNjcmlwdEVycm9yCitmcm9tIHdlYmtpdHB5LmxheW91dF90
ZXN0cy5tb2RlbHMudGVzdF9jb25maWd1cmF0aW9uIGltcG9ydCBUZXN0Q29uZmlndXJhdGlvbgor
ZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBjb25maWcgYXMgcG9ydF9jb25maWcKK2Zyb20gd2Vi
a2l0cHkucG9ydCBpbXBvcnQgZHJpdmVyLCBpbWFnZV9kaWZmCitmcm9tIHdlYmtpdHB5LnBvcnQu
ZGFyd2luIGltcG9ydCBEYXJ3aW5Qb3J0Citmcm9tIHdlYmtpdHB5LnBvcnQuc2ltdWxhdG9yX3By
b2Nlc3MgaW1wb3J0IFNpbXVsYXRvclByb2Nlc3MKK2Zyb20gd2Via2l0cHkueGNvZGUuc2ltdWxh
dG9yIGltcG9ydCBTaW11bGF0b3IsIFJ1bnRpbWUsIERldmljZVR5cGUKK2Zyb20gd2Via2l0cHku
Y29tbW9uLnN5c3RlbS5jcmFzaGxvZ3MgaW1wb3J0IENyYXNoTG9ncworCisKK19sb2cgPSBsb2dn
aW5nLmdldExvZ2dlcihfX25hbWVfXykKKworCitjbGFzcyBJT1NQb3J0KERhcndpblBvcnQpOgor
ICAgIHBvcnRfbmFtZSA9ICJpb3MiCisKKyAgICBBUkNISVRFQ1RVUkVTID0gWydhcm12NycsICdh
cm12N3MnLCAnYXJtNjQnXQorICAgIERFRkFVTFRfQVJDSElURUNUVVJFID0gJ2FybTY0JworICAg
IFZFUlNJT05fRkFMTEJBQ0tfT1JERVIgPSBbJ2lvcy03JywgJ2lvcy04JywgJ2lvcy05JywgJ2lv
cy0xMCddCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZGV0ZXJtaW5lX2Z1bGxfcG9ydF9u
YW1lKGNscywgaG9zdCwgb3B0aW9ucywgcG9ydF9uYW1lKToKKyAgICAgICAgaWYgcG9ydF9uYW1l
ID09IGNscy5wb3J0X25hbWU6CisgICAgICAgICAgICBpcGhvbmVvc19zZGtfdmVyc2lvbiA9IGhv
c3QucGxhdGZvcm0ueGNvZGVfc2RrX3ZlcnNpb24oJ2lwaG9uZW9zJykKKyAgICAgICAgICAgIGlm
IG5vdCBpcGhvbmVvc19zZGtfdmVyc2lvbjoKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRp
b24oIlBsZWFzZSBpbnN0YWxsIHRoZSBpT1MgU0RLLiIpCisgICAgICAgICAgICBtYWpvcl92ZXJz
aW9uX251bWJlciA9IGlwaG9uZW9zX3Nka192ZXJzaW9uLnNwbGl0KCcuJylbMF0KKyAgICAgICAg
ICAgIHBvcnRfbmFtZSA9IHBvcnRfbmFtZSArICctJyArIG1ham9yX3ZlcnNpb25fbnVtYmVyCisg
ICAgICAgIHJldHVybiBwb3J0X25hbWUKKworICAgICMgRGVzcGl0ZSB0aGVpciBuYW1lcywgdGhl
c2UgZmxhZ3MgZG8gbm90IGFjdHVhbGx5IGdldCBwYXNzZWQgYWxsIHRoZSB3YXkgZG93biB0byB3
ZWJraXQtYnVpbGQuCisgICAgZGVmIF9idWlsZF9kcml2ZXJfZmxhZ3Moc2VsZik6CisgICAgICAg
IHJldHVybiBbJy0tc2RrJywgJ2lwaG9uZW9zJ10gKyAoWydBUkNIUz0lcycgJSBzZWxmLmFyY2hp
dGVjdHVyZSgpXSBpZiBzZWxmLmFyY2hpdGVjdHVyZSgpIGVsc2UgW10pCisKKyAgICBkZWYgb3Bl
cmF0aW5nX3N5c3RlbShzZWxmKToKKyAgICAgICAgcmV0dXJuICdpb3MnCisKKworY2xhc3MgSU9T
U2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKKyAgICBwb3J0X25hbWUgPSAiaW9zLXNpbXVsYXRv
ciIKKworICAgIEZVVFVSRV9WRVJTSU9OID0gJ2Z1dHVyZScKKyAgICBBUkNISVRFQ1RVUkVTID0g
Wyd4ODZfNjQnLCAneDg2J10KKyAgICBERUZBVUxUX0FSQ0hJVEVDVFVSRSA9ICd4ODZfNjQnCisK
KyAgICBERUZBVUxUX0RFVklDRV9DTEFTUyA9ICdpcGhvbmUnCisgICAgQ1VTVE9NX0RFVklDRV9D
TEFTU0VTID0gWydpcGFkJywgJ2lwaG9uZTcnXQorICAgIFNESyA9ICdpcGhvbmVzaW11bGF0b3In
CisKKyAgICBTSU1VTEFUT1JfQlVORExFX0lEID0gJ2NvbS5hcHBsZS5pcGhvbmVzaW11bGF0b3In
CisgICAgU0lNVUxBVE9SX0RJUkVDVE9SWSA9ICIvdG1wL1dlYktpdFRlc3RpbmdTaW11bGF0b3Jz
LyIKKyAgICBMU1JFR0lTVEVSX1BBVEggPSAiL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ29y
ZVNlcnZpY2VzLmZyYW1ld29yay9GcmFtZXdvcmtzL0xhdW5jaFNlcnZpY2VzLmZyYW1ld29yay9W
ZXJzaW9ucy9DdXJyZW50L1N1cHBvcnQvbHNyZWdpc3RlciIKKyAgICBQUk9DRVNTX0NPVU5UX0VT
VElNQVRFX1BFUl9TSU1VTEFUT1JfSU5TVEFOQ0UgPSAxMDAKKworICAgIERFVklDRV9DTEFTU19N
QVAgPSB7CisgICAgICAgICd4ODZfNjQnOiB7CisgICAgICAgICAgICAnaXBob25lJzogJ2lQaG9u
ZSA1cycsCisgICAgICAgICAgICAnaXBob25lNyc6ICdpUGhvbmUgNycsCisgICAgICAgICAgICAn
aXBhZCc6ICdpUGFkIEFpcicKKyAgICAgICAgfSwKKyAgICAgICAgJ3g4Nic6IHsKKyAgICAgICAg
ICAgICdpcGhvbmUnOiAnaVBob25lIDUnLAorICAgICAgICAgICAgJ2lwYWQnOiAnaVBhZCBSZXRp
bmEnCisgICAgICAgIH0sCisgICAgfQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHBv
cnRfbmFtZSwgKiprd2FyZ3MpOgorICAgICAgICBEYXJ3aW5Qb3J0Ll9faW5pdF9fKHNlbGYsIGhv
c3QsIHBvcnRfbmFtZSwgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuX3Rlc3RfcnVubmVyX3Byb2Nl
c3NfY29uc3RydWN0b3IgPSBTaW11bGF0b3JQcm9jZXNzCisKKyAgICAgICAgb3B0aW9uYWxfZGV2
aWNlX2NsYXNzID0gc2VsZi5nZXRfb3B0aW9uKCdkZXZpY2VfY2xhc3MnKQorICAgICAgICBzZWxm
Ll9wcmludGluZ19jbWRfbGluZSA9IEZhbHNlCisgICAgICAgIHNlbGYuX2RldmljZV9jbGFzcyA9
IG9wdGlvbmFsX2RldmljZV9jbGFzcyBpZiBvcHRpb25hbF9kZXZpY2VfY2xhc3MgZWxzZSBzZWxm
LkRFRkFVTFRfREVWSUNFX0NMQVNTCisgICAgICAgIF9sb2cuZGVidWcoJ0lPU1NpbXVsYXRvclBv
cnQgX2RldmljZV9jbGFzcyBpcyAlcycsIHNlbGYuX2RldmljZV9jbGFzcykKKworICAgICAgICBz
ZWxmLl9jdXJyZW50X2RldmljZSA9IFNpbXVsYXRvcihob3N0KS5jdXJyZW50X2RldmljZSgpCisg
ICAgICAgIGlmIG5vdCBzZWxmLl9jdXJyZW50X2RldmljZToKKyAgICAgICAgICAgIHNlbGYuc2V0
X29wdGlvbignZGVkaWNhdGVkX3NpbXVsYXRvcnMnLCBUcnVlKQorICAgICAgICBpZiBub3Qgc2Vs
Zi5nZXRfb3B0aW9uKCdkZWRpY2F0ZWRfc2ltdWxhdG9ycycpOgorICAgICAgICAgICAgaWYgc2Vs
Zi5nZXRfb3B0aW9uKCdjaGlsZF9wcm9jZXNzZXMnKSA+IDE6CisgICAgICAgICAgICAgICAgX2xv
Zy53YXJuKCdDYW5ub3QgaGF2ZSBtb3JlIHRoYW4gb25lIGNoaWxkIHByb2Nlc3Mgd2hlbiB1c2lu
ZyBhIHJ1bm5pbmcgc2ltdWxhdG9yLiAgU2V0dGluZyBjaGlsZF9wcm9jZXNzZXMgdG8gMS4nKQor
ICAgICAgICAgICAgc2VsZi5zZXRfb3B0aW9uKCdjaGlsZF9wcm9jZXNzZXMnLCAxKQorCisgICAg
ZGVmIGRyaXZlcl9uYW1lKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ2RyaXZl
cl9uYW1lJyk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfb3B0aW9uKCdkcml2ZXJfbmFt
ZScpCisgICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbignd2Via2l0X3Rlc3RfcnVubmVyJyk6Cisg
ICAgICAgICAgICByZXR1cm4gJ1dlYktpdFRlc3RSdW5uZXJBcHAuYXBwJworICAgICAgICByZXR1
cm4gJ0R1bXBSZW5kZXJUcmVlLmFwcCcKKworICAgIGRlZiBkcml2ZXJfY21kX2xpbmVfZm9yX2xv
Z2dpbmcoc2VsZik6CisgICAgICAgICMgQXZvaWQgc3Bpbm5pbmcgdXAgZGV2aWNlcyBqdXN0IGZv
ciBsb2dnaW5nIHRoZSBjb21tYW5kbGluZS4KKyAgICAgICAgc2VsZi5fcHJpbnRpbmdfY21kX2xp
bmUgPSBUcnVlCisgICAgICAgIHJlc3VsdCA9IHN1cGVyKElPU1NpbXVsYXRvclBvcnQsIHNlbGYp
LmRyaXZlcl9jbWRfbGluZV9mb3JfbG9nZ2luZygpCisgICAgICAgIHNlbGYuX3ByaW50aW5nX2Nt
ZF9saW5lID0gRmFsc2UKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgQHByb3BlcnR5Cisg
ICAgQG1lbW9pemVkCisgICAgZGVmIHNpbXVsYXRvcl9ydW50aW1lKHNlbGYpOgorICAgICAgICBy
dW50aW1lX2lkZW50aWZpZXIgPSBzZWxmLmdldF9vcHRpb24oJ3J1bnRpbWUnKQorICAgICAgICBp
ZiBydW50aW1lX2lkZW50aWZpZXI6CisgICAgICAgICAgICBydW50aW1lID0gUnVudGltZS5mcm9t
X2lkZW50aWZpZXIocnVudGltZV9pZGVudGlmaWVyKQorICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgcnVudGltZSA9IFJ1bnRpbWUuZnJvbV92ZXJzaW9uX3N0cmluZyhzZWxmLmhvc3QucGxhdGZv
cm0ueGNvZGVfc2RrX3ZlcnNpb24oJ2lwaG9uZXNpbXVsYXRvcicpKQorICAgICAgICByZXR1cm4g
cnVudGltZQorCisgICAgZGVmIHNpbXVsYXRvcl9kZXZpY2VfdHlwZShzZWxmKToKKyAgICAgICAg
ZGV2aWNlX3R5cGVfaWRlbnRpZmllciA9IHNlbGYuZ2V0X29wdGlvbignZGV2aWNlX3R5cGUnKQor
ICAgICAgICBpZiBkZXZpY2VfdHlwZV9pZGVudGlmaWVyOgorICAgICAgICAgICAgX2xvZy5kZWJ1
Zygnc2ltdWxhdG9yX2RldmljZV90eXBlIGZvciBkZXZpY2UgaWRlbnRpZmllciAlcycsIGRldmlj
ZV90eXBlX2lkZW50aWZpZXIpCisgICAgICAgICAgICBkZXZpY2VfdHlwZSA9IERldmljZVR5cGUu
ZnJvbV9pZGVudGlmaWVyKGRldmljZV90eXBlX2lkZW50aWZpZXIpCisgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICBfbG9nLmRlYnVnKCdzaW11bGF0b3JfZGV2aWNlX3R5cGUgZm9yIGRldmljZSAl
cycsIHNlbGYuX2RldmljZV9jbGFzcykKKyAgICAgICAgICAgIGRldmljZV9uYW1lID0gc2VsZi5E
RVZJQ0VfQ0xBU1NfTUFQW3NlbGYuYXJjaGl0ZWN0dXJlKCldW3NlbGYuX2RldmljZV9jbGFzc10K
KyAgICAgICAgICAgIGlmIG5vdCBkZXZpY2VfbmFtZToKKyAgICAgICAgICAgICAgICByYWlzZSBF
eGNlcHRpb24oJ0ZhaWxlZCB0byBmaW5kIGRldmljZSBmb3IgYXJjaGl0ZWN0dXJlIHt9IGFuZCBk
ZXZpY2UgY2xhc3Mge30nLmZvcm1hdChzZWxmLmFyY2hpdGVjdHVyZSgpKSwgc2VsZi5fZGV2aWNl
X2NsYXNzKQorICAgICAgICAgICAgZGV2aWNlX3R5cGUgPSBEZXZpY2VUeXBlLmZyb21fbmFtZShk
ZXZpY2VfbmFtZSkKKyAgICAgICAgcmV0dXJuIGRldmljZV90eXBlCisKKyAgICBAbWVtb2l6ZWQK
KyAgICBkZWYgY2hpbGRfcHJvY2Vzc2VzKHNlbGYpOgorICAgICAgICByZXR1cm4gaW50KHNlbGYu
Z2V0X29wdGlvbignY2hpbGRfcHJvY2Vzc2VzJykpCisKKyAgICBAbWVtb2l6ZWQKKyAgICBkZWYg
ZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgbnVt
YmVyIG9mIFNpbXVsYXRvcnMgaW5zdGFuY2VzIHRvIHVzZSBmb3IgdGhpcyBwb3J0LiIiIgorICAg
ICAgICBiZXN0X2NoaWxkX3Byb2Nlc3NfY291bnRfZm9yX2NwdSA9IHNlbGYuX2V4ZWN1dGl2ZS5j
cHVfY291bnQoKSAvIDIKKyAgICAgICAgc3lzdGVtX3Byb2Nlc3NfY291bnRfbGltaXQgPSBpbnQo
c3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyJ1bGltaXQiLCAiLXUiXSkuc3RyaXAoKSkKKyAgICAg
ICAgY3VycmVudF9wcm9jZXNzX2NvdW50ID0gbGVuKHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsi
cHMiLCAiYXV4Il0pLnN0cmlwKCkuc3BsaXQoJ1xuJykpCisgICAgICAgIF9sb2cuZGVidWcoJ1By
b2Nlc3MgbGltaXQ6ICVkLCBjdXJyZW50ICNwcm9jZXNzZXM6ICVkJyAlIChzeXN0ZW1fcHJvY2Vz
c19jb3VudF9saW1pdCwgY3VycmVudF9wcm9jZXNzX2NvdW50KSkKKyAgICAgICAgbWF4aW11bV9z
aW11bGF0b3JfY291bnRfb25fdGhpc19zeXN0ZW0gPSAoc3lzdGVtX3Byb2Nlc3NfY291bnRfbGlt
aXQgLSBjdXJyZW50X3Byb2Nlc3NfY291bnQpIC8vIHNlbGYuUFJPQ0VTU19DT1VOVF9FU1RJTUFU
RV9QRVJfU0lNVUxBVE9SX0lOU1RBTkNFCisgICAgICAgICMgRklYTUU6IFdlIHNob3VsZCBhbHNv
IHRha2UgaW50byBhY2NvdW50IHRoZSBhdmFpbGFibGUgUkFNLgorCisgICAgICAgIGlmIChtYXhp
bXVtX3NpbXVsYXRvcl9jb3VudF9vbl90aGlzX3N5c3RlbSA8IGJlc3RfY2hpbGRfcHJvY2Vzc19j
b3VudF9mb3JfY3B1KToKKyAgICAgICAgICAgIF9sb2cud2FybigiVGhpcyBtYWNoaW5lIGNvdWxk
IHN1cHBvcnQgJXMgc2ltdWxhdG9ycywgYnV0IGlzIG9ubHkgY29uZmlndXJlZCBmb3IgJXMuIgor
ICAgICAgICAgICAgICAgICUgKGJlc3RfY2hpbGRfcHJvY2Vzc19jb3VudF9mb3JfY3B1LCBtYXhp
bXVtX3NpbXVsYXRvcl9jb3VudF9vbl90aGlzX3N5c3RlbSkpCisgICAgICAgICAgICBfbG9nLndh
cm4oJ1BsZWFzZSBzZWUgPGh0dHBzOi8vdHJhYy53ZWJraXQub3JnL3dpa2kvSW5jcmVhc2luZ0tl
cm5lbExpbWl0cz4uJykKKworICAgICAgICBpZiBtYXhpbXVtX3NpbXVsYXRvcl9jb3VudF9vbl90
aGlzX3N5c3RlbSA9PSAwOgorICAgICAgICAgICAgbWF4aW11bV9zaW11bGF0b3JfY291bnRfb25f
dGhpc19zeXN0ZW0gPSAxCisKKyAgICAgICAgcmV0dXJuIG1pbihtYXhpbXVtX3NpbXVsYXRvcl9j
b3VudF9vbl90aGlzX3N5c3RlbSwgYmVzdF9jaGlsZF9wcm9jZXNzX2NvdW50X2Zvcl9jcHUpCisK
KyAgICBkZWYgX2dldF9jcmFzaF9sb2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwg
bmV3ZXJfdGhhbiwgdGltZV9mbj10aW1lLnRpbWUsIHNsZWVwX2ZuPXRpbWUuc2xlZXAsIHdhaXRf
Zm9yX2xvZz1UcnVlKToKKyAgICAgICAgdGltZV9mbiA9IHRpbWVfZm4gb3IgdGltZS50aW1lCisg
ICAgICAgIHNsZWVwX2ZuID0gc2xlZXBfZm4gb3IgdGltZS5zbGVlcAorCisgICAgICAgICMgRklY
TUU6IFdlIHNob3VsZCBjb2xsZWN0IHRoZSBhY3R1YWwgY3Jhc2ggbG9nIGZvciBEdW1wUmVuZGVy
VHJlZS5hcHAgYmVjYXVzZSBpdCBpbmNsdWRlcyBtb3JlCisgICAgICAgICMgaW5mb3JtYXRpb24g
KGUuZy4gZXhjZXB0aW9uIGNvZGVzKSB0aGFuIGlzIGF2YWlsYWJsZSBpbiB0aGUgc3RhY2sgdHJh
Y2Ugd3JpdHRlbiB0byBzdGFuZGFyZCBlcnJvci4KKyAgICAgICAgc3RkZXJyX2xpbmVzID0gW10K
KyAgICAgICAgY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZCA9IE5vbmUgICMgZS5nLiAo
J0R1bXBSZW5kZXJUcmVlLmFwcCcsIDEyMzQpCisgICAgICAgIGZvciBsaW5lIGluIChzdGRlcnIg
b3IgJycpLnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgIGlmIG5vdCBjcmFzaGVkX3N1YnByb2Nl
c3NfbmFtZV9hbmRfcGlkOgorICAgICAgICAgICAgICAgIG1hdGNoID0gc2VsZi5TVUJQUk9DRVNT
X0NSQVNIX1JFR0VYLm1hdGNoKGxpbmUpCisgICAgICAgICAgICAgICAgaWYgbWF0Y2g6CisgICAg
ICAgICAgICAgICAgICAgIGNyYXNoZWRfc3VicHJvY2Vzc19uYW1lX2FuZF9waWQgPSAobWF0Y2gu
Z3JvdXAoJ3N1YnByb2Nlc3NfbmFtZScpLCBpbnQobWF0Y2guZ3JvdXAoJ3N1YnByb2Nlc3NfcGlk
JykpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgc3RkZXJyX2xp
bmVzLmFwcGVuZChsaW5lKQorCisgICAgICAgIGlmIGNyYXNoZWRfc3VicHJvY2Vzc19uYW1lX2Fu
ZF9waWQ6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X2NyYXNoX2xvZyhjcmFzaGVkX3N1
YnByb2Nlc3NfbmFtZV9hbmRfcGlkWzBdLCBjcmFzaGVkX3N1YnByb2Nlc3NfbmFtZV9hbmRfcGlk
WzFdLCBzdGRvdXQsCisgICAgICAgICAgICAgICAgJ1xuJy5qb2luKHN0ZGVycl9saW5lcyksIG5l
d2VyX3RoYW4sIHRpbWVfZm4sIHNsZWVwX2ZuLCB3YWl0X2Zvcl9sb2cpCisKKyAgICAgICAgIyBB
cHAgY3Jhc2hlZAorICAgICAgICBfbG9nLmRlYnVnKCdsb29raW5nIGZvciBjcmFzaCBsb2cgZm9y
ICVzOiVzJyAlIChuYW1lLCBzdHIocGlkKSkpCisgICAgICAgIGNyYXNoX2xvZyA9ICcnCisgICAg
ICAgIGNyYXNoX2xvZ3MgPSBDcmFzaExvZ3Moc2VsZi5ob3N0KQorICAgICAgICBub3cgPSB0aW1l
X2ZuKCkKKyAgICAgICAgZGVhZGxpbmUgPSBub3cgKyA1ICogaW50KHNlbGYuZ2V0X29wdGlvbign
Y2hpbGRfcHJvY2Vzc2VzJywgMSkpCisgICAgICAgIHdoaWxlIG5vdCBjcmFzaF9sb2cgYW5kIG5v
dyA8PSBkZWFkbGluZToKKyAgICAgICAgICAgIGNyYXNoX2xvZyA9IGNyYXNoX2xvZ3MuZmluZF9u
ZXdlc3RfbG9nKG5hbWUsIHBpZCwgaW5jbHVkZV9lcnJvcnM9VHJ1ZSwgbmV3ZXJfdGhhbj1uZXdl
cl90aGFuKQorICAgICAgICAgICAgaWYgbm90IHdhaXRfZm9yX2xvZzoKKyAgICAgICAgICAgICAg
ICBicmVhaworICAgICAgICAgICAgaWYgbm90IGNyYXNoX2xvZyBvciBub3QgW2xpbmUgZm9yIGxp
bmUgaW4gY3Jhc2hfbG9nLnNwbGl0bGluZXMoKSBpZiBub3QgbGluZS5zdGFydHN3aXRoKCdFUlJP
UicpXToKKyAgICAgICAgICAgICAgICBzbGVlcF9mbigwLjEpCisgICAgICAgICAgICAgICAgbm93
ID0gdGltZV9mbigpCisKKyAgICAgICAgaWYgbm90IGNyYXNoX2xvZzoKKyAgICAgICAgICAgIHJl
dHVybiBzdGRlcnIsIE5vbmUKKyAgICAgICAgcmV0dXJuIHN0ZGVyciwgY3Jhc2hfbG9nCisKKyAg
ICBkZWYgX2J1aWxkX2RyaXZlcl9mbGFncyhzZWxmKToKKyAgICAgICAgYXJjaHMgPSBbJ0FSQ0hT
PWkzODYnXSBpZiBzZWxmLmFyY2hpdGVjdHVyZSgpID09ICd4ODYnIGVsc2UgW10KKyAgICAgICAg
c2RrID0gWyctLXNkaycsICdpcGhvbmVzaW11bGF0b3InXQorICAgICAgICByZXR1cm4gYXJjaHMg
KyBzZGsKKworICAgIGRlZiBfZ2VuZXJhdGVfYWxsX3Rlc3RfY29uZmlndXJhdGlvbnMoc2VsZik6
CisgICAgICAgIGNvbmZpZ3VyYXRpb25zID0gW10KKyAgICAgICAgZm9yIGJ1aWxkX3R5cGUgaW4g
c2VsZi5BTExfQlVJTERfVFlQRVM6CisgICAgICAgICAgICBmb3IgYXJjaGl0ZWN0dXJlIGluIHNl
bGYuQVJDSElURUNUVVJFUzoKKyAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9ucy5hcHBlbmQo
VGVzdENvbmZpZ3VyYXRpb24odmVyc2lvbj1zZWxmLl92ZXJzaW9uLCBhcmNoaXRlY3R1cmU9YXJj
aGl0ZWN0dXJlLCBidWlsZF90eXBlPWJ1aWxkX3R5cGUpKQorICAgICAgICByZXR1cm4gY29uZmln
dXJhdGlvbnMKKworICAgIGRlZiBkZWZhdWx0X2Jhc2VsaW5lX3NlYXJjaF9wYXRoKHNlbGYpOgor
ICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ3dlYmtpdF90ZXN0X3J1bm5lcicpOgorICAgICAg
ICAgICAgZmFsbGJhY2tfbmFtZXMgPSBbc2VsZi5fd2syX3BvcnRfbmFtZSgpXSArIFtzZWxmLnBv
cnRfbmFtZV0gKyBbJ3drMiddCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmYWxsYmFja19u
YW1lcyA9IFtzZWxmLnBvcnRfbmFtZSArICctd2sxJ10gKyBbc2VsZi5wb3J0X25hbWVdCisKKyAg
ICAgICAgcmV0dXJuIG1hcChzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aCwgZmFsbGJhY2tfbmFt
ZXMpCisKKyAgICBkZWYgX3NldF9kZXZpY2VfY2xhc3Moc2VsZiwgZGV2aWNlX2NsYXNzKToKKyAg
ICAgICAgc2VsZi5fZGV2aWNlX2NsYXNzID0gZGV2aWNlX2NsYXNzIGlmIGRldmljZV9jbGFzcyBl
bHNlIHNlbGYuREVGQVVMVF9ERVZJQ0VfQ0xBU1MKKworICAgIGRlZiBfY3JlYXRlX3NpbXVsYXRv
cnMoc2VsZik6CisgICAgICAgIGlmIChzZWxmLmRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKCkgPCBz
ZWxmLmNoaWxkX3Byb2Nlc3NlcygpKToKKyAgICAgICAgICAgIF9sb2cud2FybignWW91IGhhdmUg
c3BlY2lmaWVkIHZlcnkgaGlnaCB2YWx1ZSh7MH0pIGZvciAtLWNoaWxkLXByb2Nlc3NlcycuZm9y
bWF0KHNlbGYuY2hpbGRfcHJvY2Vzc2VzKCkpKQorICAgICAgICAgICAgX2xvZy53YXJuKCdtYXhp
bXVtIGNoaWxkLXByb2Nlc3NlcyB3aGljaCBjYW4gYmUgc3VwcG9ydGVkIG9uIHRoaXMgc3lzdGVt
IGFyZTogezB9Jy5mb3JtYXQoc2VsZi5kZWZhdWx0X2NoaWxkX3Byb2Nlc3NlcygpKSkKKyAgICAg
ICAgICAgIF9sb2cud2FybignVGhpcyBpcyB2ZXJ5IGxpa2VseSB0byBmYWlsLicpCisKKyAgICAg
ICAgaWYgc2VsZi5fdXNpbmdfZGVkaWNhdGVkX3NpbXVsYXRvcnMoKToKKyAgICAgICAgICAgIHNl
bGYuX2NyZWF0ZVNpbXVsYXRvckFwcHMoKQorCisgICAgICAgICAgICBmb3IgaSBpbiB4cmFuZ2Uo
c2VsZi5jaGlsZF9wcm9jZXNzZXMoKSk6CisgICAgICAgICAgICAgICAgc2VsZi5fY3JlYXRlX2Rl
dmljZShpKQorCisgICAgICAgICAgICBmb3IgaSBpbiB4cmFuZ2Uoc2VsZi5jaGlsZF9wcm9jZXNz
ZXMoKSk6CisgICAgICAgICAgICAgICAgZGV2aWNlX3VkaWQgPSBzZWxmLl90ZXN0aW5nX2Rldmlj
ZShpKS51ZGlkCisgICAgICAgICAgICAgICAgU2ltdWxhdG9yLndhaXRfdW50aWxfZGV2aWNlX2lz
X2luX3N0YXRlKGRldmljZV91ZGlkLCBTaW11bGF0b3IuRGV2aWNlU3RhdGUuU0hVVERPV04pCisg
ICAgICAgICAgICAgICAgU2ltdWxhdG9yLnJlc2V0X2RldmljZShkZXZpY2VfdWRpZCkKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIGFzc2VydChzZWxmLl9jdXJyZW50X2RldmljZSkKKyAgICAg
ICAgICAgIGlmIHNlbGYuX2N1cnJlbnRfZGV2aWNlLm5hbWUgIT0gc2VsZi5zaW11bGF0b3JfZGV2
aWNlX3R5cGUoKS5uYW1lOgorICAgICAgICAgICAgICAgIF9sb2cud2FybigiRXhwZWN0ZWQgc2lt
dWxhdG9yIG9mIHR5cGUgJyIgKyBzZWxmLnNpbXVsYXRvcl9kZXZpY2VfdHlwZSgpLm5hbWUgKyAi
JyBidXQgZm91bmQgc2ltdWxhdG9yIG9mIHR5cGUgJyIgKyBzZWxmLl9jdXJyZW50X2RldmljZS5u
YW1lICsgIiciKQorICAgICAgICAgICAgICAgIF9sb2cud2FybignVGhlIG5leHQgYmxvY2sgb2Yg
dGVzdHMgbWF5IGZhaWwgZHVlIHRvIGRldmljZSBtaXMtbWF0Y2gnKQorCisgICAgZGVmIHNldHVw
X3Rlc3RfcnVuKHNlbGYsIGRldmljZV9jbGFzcz1Ob25lKToKKyAgICAgICAgbWFjX29zX3ZlcnNp
b24gPSBzZWxmLmhvc3QucGxhdGZvcm0ub3NfdmVyc2lvbgorCisgICAgICAgIHNlbGYuX3NldF9k
ZXZpY2VfY2xhc3MoZGV2aWNlX2NsYXNzKQorCisgICAgICAgIF9sb2cuZGVidWcoJycpCisgICAg
ICAgIF9sb2cuZGVidWcoJ3NldHVwX3Rlc3RfcnVuIGZvciAlcycsIHNlbGYuX2RldmljZV9jbGFz
cykKKworICAgICAgICBzZWxmLl9jcmVhdGVfc2ltdWxhdG9ycygpCisKKyAgICAgICAgaWYgbm90
IHNlbGYuX3VzaW5nX2RlZGljYXRlZF9zaW11bGF0b3JzKCk6CisgICAgICAgICAgICByZXR1cm4K
KworICAgICAgICBmb3IgaSBpbiB4cmFuZ2Uoc2VsZi5jaGlsZF9wcm9jZXNzZXMoKSk6CisgICAg
ICAgICAgICBkZXZpY2VfdWRpZCA9IHNlbGYuX3Rlc3RpbmdfZGV2aWNlKGkpLnVkaWQKKyAgICAg
ICAgICAgIF9sb2cuZGVidWcoJ3Rlc3RpbmcgZGV2aWNlICVzIGhhcyB1ZGlkICVzJywgaSwgZGV2
aWNlX3VkaWQpCisKKyAgICAgICAgICAgICMgRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8yMDkxNjE0
MD4gU3dpdGNoIHRvIHVzaW5nIENvcmVTaW11bGF0b3IuZnJhbWV3b3JrIGZvciBsYXVuY2hpbmcg
YW5kIHF1aXR0aW5nIGlPUyBTaW11bGF0b3IKKyAgICAgICAgICAgIHNlbGYuX2V4ZWN1dGl2ZS5y
dW5fY29tbWFuZChbCisgICAgICAgICAgICAgICAgJ29wZW4nLCAnLWcnLCAnLWInLCBzZWxmLlNJ
TVVMQVRPUl9CVU5ETEVfSUQgKyBzdHIoaSksCisgICAgICAgICAgICAgICAgJy0tYXJncycsICct
Q3VycmVudERldmljZVVESUQnLCBkZXZpY2VfdWRpZF0pCisKKyAgICAgICAgICAgIGlmIG1hY19v
c192ZXJzaW9uIGluIFsnZWxjYXBpdGFuJywgJ3lvc2VtaXRlJywgJ21hdmVyaWNrcyddOgorICAg
ICAgICAgICAgICAgIHRpbWUuc2xlZXAoMi41KQorCisgICAgICAgIF9sb2cuaW5mbygnV2FpdGlu
ZyBmb3IgYWxsIGlPUyBTaW11bGF0b3JzIHRvIGZpbmlzaCBib290aW5nLicpCisgICAgICAgIGZv
ciBpIGluIHhyYW5nZShzZWxmLmNoaWxkX3Byb2Nlc3NlcygpKToKKyAgICAgICAgICAgIFNpbXVs
YXRvci53YWl0X3VudGlsX2RldmljZV9pc19ib290ZWQoc2VsZi5fdGVzdGluZ19kZXZpY2UoaSku
dWRpZCkKKworICAgIGRlZiBfcXVpdF9pb3Nfc2ltdWxhdG9yKHNlbGYpOgorICAgICAgICBpZiBu
b3Qgc2VsZi5fdXNpbmdfZGVkaWNhdGVkX3NpbXVsYXRvcnMoKToKKyAgICAgICAgICAgIHJldHVy
bgorICAgICAgICBfbG9nLmRlYnVnKCJfcXVpdF9pb3Nfc2ltdWxhdG9yIGtpbGxpbmcgYWxsIFNp
bXVsYXRvciBwcm9jZXNzZXMiKQorICAgICAgICAjIEZJWE1FOiBXZSBzaG91bGQga2lsbCBvbmx5
IHRoZSBTaW11bGF0b3JzIHdlIHN0YXJ0ZWQuCisgICAgICAgIHN1YnByb2Nlc3MuY2FsbChbImtp
bGxhbGwiLCAiLTkiLCAiLW0iLCAiU2ltdWxhdG9yIl0pCisKKyAgICBkZWYgY2xlYW5fdXBfdGVz
dF9ydW4oc2VsZik6CisgICAgICAgIHN1cGVyKElPU1NpbXVsYXRvclBvcnQsIHNlbGYpLmNsZWFu
X3VwX3Rlc3RfcnVuKCkKKyAgICAgICAgX2xvZy5kZWJ1ZygiY2xlYW5fdXBfdGVzdF9ydW4iKQor
ICAgICAgICBzZWxmLl9xdWl0X2lvc19zaW11bGF0b3IoKQorICAgICAgICBmaWZvcyA9IFtwYXRo
IGZvciBwYXRoIGluIG9zLmxpc3RkaXIoJy90bXAnKSBpZiByZS5zZWFyY2goJ29yZy53ZWJraXQu
KER1bXBSZW5kZXJUcmVlfFdlYktpdFRlc3RSdW5uZXIpLipfKElOfE9VVHxFUlJPUiknLCBwYXRo
KV0KKyAgICAgICAgZm9yIGZpZm8gaW4gZmlmb3M6CisgICAgICAgICAgICB0cnk6CisgICAgICAg
ICAgICAgICAgb3MucmVtb3ZlKG9zLnBhdGguam9pbignL3RtcCcsIGZpZm8pKQorICAgICAgICAg
ICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgX2xvZy53YXJuaW5nKCdVbmFibGUg
dG8gcmVtb3ZlICcgKyBmaWZvKQorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBpZiBu
b3Qgc2VsZi5fdXNpbmdfZGVkaWNhdGVkX3NpbXVsYXRvcnMoKToKKyAgICAgICAgICAgIHJldHVy
bgorCisgICAgICAgIGZvciBpIGluIHhyYW5nZShzZWxmLmNoaWxkX3Byb2Nlc3NlcygpKToKKyAg
ICAgICAgICAgIHNpbXVsYXRvcl9wYXRoID0gc2VsZi5nZXRfc2ltdWxhdG9yX3BhdGgoaSkKKyAg
ICAgICAgICAgIGRldmljZV91ZGlkID0gc2VsZi5fdGVzdGluZ19kZXZpY2UoaSkudWRpZAorICAg
ICAgICAgICAgc2VsZi5fcmVtb3ZlX2RldmljZShpKQorCisgICAgICAgICAgICBpZiBub3Qgb3Mu
cGF0aC5leGlzdHMoc2ltdWxhdG9yX3BhdGgpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisg
ICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21t
YW5kKFtzZWxmLkxTUkVHSVNURVJfUEFUSCwgIi11Iiwgc2ltdWxhdG9yX3BhdGhdKQorCisgICAg
ICAgICAgICAgICAgX2xvZy5kZWJ1Zygncm10cmVlICVzJywgc2ltdWxhdG9yX3BhdGgpCisgICAg
ICAgICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5ybXRyZWUoc2ltdWxhdG9yX3BhdGgpCisKKyAg
ICAgICAgICAgICAgICBsb2dzX3BhdGggPSBzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5fZmls
ZXN5c3RlbS5leHBhbmR1c2VyKCJ+IiksICJMaWJyYXJ5L0xvZ3MvQ29yZVNpbXVsYXRvci8iLCBk
ZXZpY2VfdWRpZCkKKyAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCdybXRyZWUgJXMnLCBsb2dz
X3BhdGgpCisgICAgICAgICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5ybXRyZWUobG9nc19wYXRo
KQorCisgICAgICAgICAgICAgICAgc2F2ZWRfc3RhdGVfcGF0aCA9IHNlbGYuX2ZpbGVzeXN0ZW0u
am9pbihzZWxmLl9maWxlc3lzdGVtLmV4cGFuZHVzZXIoIn4iKSwgIkxpYnJhcnkvU2F2ZWQgQXBw
bGljYXRpb24gU3RhdGUvIiwgc2VsZi5TSU1VTEFUT1JfQlVORExFX0lEICsgc3RyKGkpICsgIi5z
YXZlZFN0YXRlIikKKyAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCdybXRyZWUgJXMnLCBzYXZl
ZF9zdGF0ZV9wYXRoKQorICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ucm10cmVlKHNh
dmVkX3N0YXRlX3BhdGgpCisKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBf
bG9nLndhcm5pbmcoJ1VuYWJsZSB0byByZW1vdmUgU2ltdWxhdG9yJyArIHN0cihpKSkKKworICAg
IGRlZiBzZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2ZXIoc2VsZiwgc2VydmVyX25hbWU9Tm9uZSk6Cisg
ICAgICAgIF9sb2cuZGVidWcoInNldHVwX2Vudmlyb25fZm9yX3NlcnZlciIpCisgICAgICAgIGVu
diA9IHN1cGVyKElPU1NpbXVsYXRvclBvcnQsIHNlbGYpLnNldHVwX2Vudmlyb25fZm9yX3NlcnZl
cihzZXJ2ZXJfbmFtZSkKKyAgICAgICAgaWYgc2VydmVyX25hbWUgPT0gc2VsZi5kcml2ZXJfbmFt
ZSgpOgorICAgICAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCdsZWFrcycpOgorICAgICAgICAg
ICAgICAgIGVudlsnTWFsbG9jU3RhY2tMb2dnaW5nJ10gPSAnMScKKyAgICAgICAgICAgICAgICBl
bnZbJ19fWFBDX01hbGxvY1N0YWNrTG9nZ2luZyddID0gJzEnCisgICAgICAgICAgICAgICAgZW52
WydNYWxsb2NTY3JpYmJsZSddID0gJzEnCisgICAgICAgICAgICAgICAgZW52WydfX1hQQ19NYWxs
b2NTY3JpYmJsZSddID0gJzEnCisgICAgICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ2d1YXJk
X21hbGxvYycpOgorICAgICAgICAgICAgICAgIHNlbGYuX2FwcGVuZF92YWx1ZV9jb2xvbl9zZXBh
cmF0ZWQoZW52LCAnRFlMRF9JTlNFUlRfTElCUkFSSUVTJywgJy91c3IvbGliL2xpYmdtYWxsb2Mu
ZHlsaWInKQorICAgICAgICAgICAgICAgIHNlbGYuX2FwcGVuZF92YWx1ZV9jb2xvbl9zZXBhcmF0
ZWQoZW52LCAnX19YUENfRFlMRF9JTlNFUlRfTElCUkFSSUVTJywgJy91c3IvbGliL2xpYmdtYWxs
b2MuZHlsaWInKQorICAgICAgICBlbnZbJ1hNTF9DQVRBTE9HX0ZJTEVTJ10gPSAnJyAgIyB3b3Jr
IGFyb3VuZCBtaXNzaW5nIC9ldGMvY2F0YWxvZyA8cmRhcjovL3Byb2JsZW0vNDI5Mjk5NT4KKyAg
ICAgICAgcmV0dXJuIGVudgorCisgICAgZGVmIG9wZXJhdGluZ19zeXN0ZW0oc2VsZik6CisgICAg
ICAgIHJldHVybiAnaW9zLXNpbXVsYXRvcicKKworICAgIGRlZiBjaGVja19zeXNfZGVwcyhzZWxm
LCBuZWVkc19odHRwKToKKyAgICAgICAgaWYgbm90IHNlbGYuc2ltdWxhdG9yX3J1bnRpbWUuYXZh
aWxhYmxlOgorICAgICAgICAgICAgX2xvZy5lcnJvcignVGhlIGlPUyBTaW11bGF0b3IgcnVudGlt
ZSB3aXRoIGlkZW50aWZpZXIgInswfSIgY2Fubm90IGJlIHVzZWQgYmVjYXVzZSBpdCBpcyB1bmF2
YWlsYWJsZS4nLmZvcm1hdChzZWxmLnNpbXVsYXRvcl9ydW50aW1lLmlkZW50aWZpZXIpKQorICAg
ICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBzdXBlcihJT1NTaW11bGF0b3JQ
b3J0LCBzZWxmKS5jaGVja19zeXNfZGVwcyhuZWVkc19odHRwKQorCisgICAgU1VCUFJPQ0VTU19D
UkFTSF9SRUdFWCA9IHJlLmNvbXBpbGUoJyNDUkFTSEVEIC0gKD9QPHN1YnByb2Nlc3NfbmFtZT5c
UyspIFwocGlkICg/UDxzdWJwcm9jZXNzX3BpZD5cZCspXCknKQorCisgICAgZGVmIF91c2luZ19k
ZWRpY2F0ZWRfc2ltdWxhdG9ycyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X29wdGlv
bignZGVkaWNhdGVkX3NpbXVsYXRvcnMnKQorCisgICAgZGVmIF9jcmVhdGVfZGV2aWNlKHNlbGYs
IG51bWJlcik6CisgICAgICAgIHJldHVybiBTaW11bGF0b3IuY3JlYXRlX2RldmljZShudW1iZXIs
IHNlbGYuc2ltdWxhdG9yX2RldmljZV90eXBlKCksIHNlbGYuc2ltdWxhdG9yX3J1bnRpbWUpCisK
KyAgICBkZWYgX3JlbW92ZV9kZXZpY2Uoc2VsZiwgbnVtYmVyKToKKyAgICAgICAgU2ltdWxhdG9y
LnJlbW92ZV9kZXZpY2UobnVtYmVyKQorCisgICAgZGVmIF90ZXN0aW5nX2RldmljZShzZWxmLCBu
dW1iZXIpOgorICAgICAgICByZXR1cm4gU2ltdWxhdG9yLmRldmljZV9udW1iZXIobnVtYmVyKQor
CisgICAgIyBGSVhNRTogVGhpcyBpcyBvbmx5IGV4cG9zZWQgc28gdGhhdCBTaW11bGF0b3JQcm9j
ZXNzIGNhbiB1c2UgaXQuCisgICAgZGVmIGRldmljZV9pZF9mb3Jfd29ya2VyX251bWJlcihzZWxm
LCBudW1iZXIpOgorICAgICAgICBpZiBzZWxmLl9wcmludGluZ19jbWRfbGluZToKKyAgICAgICAg
ICAgIHJldHVybiAnPGR1bW15IGlkPicKKyAgICAgICAgaWYgc2VsZi5fdXNpbmdfZGVkaWNhdGVk
X3NpbXVsYXRvcnMoKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl90ZXN0aW5nX2RldmljZShu
dW1iZXIpLnVkaWQKKyAgICAgICAgcmV0dXJuIHNlbGYuX2N1cnJlbnRfZGV2aWNlLnVkaWQKKwor
ICAgIGRlZiBnZXRfc2ltdWxhdG9yX3BhdGgoc2VsZiwgc3VmZml4PSIiKToKKyAgICAgICAgcmV0
dXJuIG9zLnBhdGguam9pbihzZWxmLlNJTVVMQVRPUl9ESVJFQ1RPUlksICJTaW11bGF0b3IiICsg
c3RyKHN1ZmZpeCkgKyAiLmFwcCIpCisKKyAgICBkZWYgZGlmZl9pbWFnZShzZWxmLCBleHBlY3Rl
ZF9jb250ZW50cywgYWN0dWFsX2NvbnRlbnRzLCB0b2xlcmFuY2U9Tm9uZSk6CisgICAgICAgIGlm
IG5vdCBhY3R1YWxfY29udGVudHMgYW5kIG5vdCBleHBlY3RlZF9jb250ZW50czoKKyAgICAgICAg
ICAgIHJldHVybiAoTm9uZSwgMCwgTm9uZSkKKyAgICAgICAgaWYgbm90IGFjdHVhbF9jb250ZW50
cyBvciBub3QgZXhwZWN0ZWRfY29udGVudHM6CisgICAgICAgICAgICByZXR1cm4gKFRydWUsIDAs
IE5vbmUpCisgICAgICAgIGlmIG5vdCBzZWxmLl9pbWFnZV9kaWZmZXI6CisgICAgICAgICAgICBz
ZWxmLl9pbWFnZV9kaWZmZXIgPSBpbWFnZV9kaWZmLklPU1NpbXVsYXRvckltYWdlRGlmZmVyKHNl
bGYpCisgICAgICAgIHNlbGYuc2V0X29wdGlvbl9kZWZhdWx0KCd0b2xlcmFuY2UnLCAwLjEpCisg
ICAgICAgIGlmIHRvbGVyYW5jZSBpcyBOb25lOgorICAgICAgICAgICAgdG9sZXJhbmNlID0gc2Vs
Zi5nZXRfb3B0aW9uKCd0b2xlcmFuY2UnKQorICAgICAgICByZXR1cm4gc2VsZi5faW1hZ2VfZGlm
ZmVyLmRpZmZfaW1hZ2UoZXhwZWN0ZWRfY29udGVudHMsIGFjdHVhbF9jb250ZW50cywgdG9sZXJh
bmNlKQorCisgICAgZGVmIHJlc2V0X3ByZWZlcmVuY2VzKHNlbGYpOgorICAgICAgICBfbG9nLmRl
YnVnKCJyZXNldF9wcmVmZXJlbmNlcyIpCisgICAgICAgIHNlbGYuX3F1aXRfaW9zX3NpbXVsYXRv
cigpCisgICAgICAgICMgTWF5YmUgdGhpcyBzaG91bGQgZGVsZXRlIGFsbCBkZXZpY2VzIHRoYXQg
d2UndmUgY3JlYXRlZD8KKworICAgIGRlZiBubV9jb21tYW5kKHNlbGYpOgorICAgICAgICByZXR1
cm4gc2VsZi54Y3J1bl9maW5kKCdubScpCisKKyAgICBAcHJvcGVydHkKKyAgICBAbWVtb2l6ZWQK
KyAgICBkZWYgZGV2ZWxvcGVyX2RpcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2V4ZWN1
dGl2ZS5ydW5fY29tbWFuZChbJ3hjb2RlLXNlbGVjdCcsICctLXByaW50LXBhdGgnXSkucnN0cmlw
KCkKKworICAgIGRlZiBsb2dnaW5nX3BhdHRlcm5zX3RvX3N0cmlwKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gW10KKworICAgIGRlZiBzdGRlcnJfcGF0dGVybnNfdG9fc3RyaXAoc2VsZik6CisgICAg
ICAgIHJldHVybiBbXQorCisgICAgZGVmIF9jcmVhdGVTaW11bGF0b3JBcHBzKHNlbGYpOgorICAg
ICAgICBmb3IgaSBpbiB4cmFuZ2Uoc2VsZi5jaGlsZF9wcm9jZXNzZXMoKSk6CisgICAgICAgICAg
ICBzZWxmLl9jcmVhdGVTaW11bGF0b3JBcHAoaSkKKworICAgIGRlZiBfY3JlYXRlU2ltdWxhdG9y
QXBwKHNlbGYsIHN1ZmZpeCk6CisgICAgICAgIGRlc3RpbmF0aW9uID0gc2VsZi5nZXRfc2ltdWxh
dG9yX3BhdGgoc3VmZml4KQorICAgICAgICBfbG9nLmluZm8oIkNyZWF0aW5nIGFwcDoiICsgZGVz
dGluYXRpb24pCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGRlc3RpbmF0aW9uKToKKyAgICAg
ICAgICAgIHNodXRpbC5ybXRyZWUoZGVzdGluYXRpb24sIGlnbm9yZV9lcnJvcnM9VHJ1ZSkKKyAg
ICAgICAgc2ltdWxhdG9yX2FwcF9wYXRoID0gc2VsZi5kZXZlbG9wZXJfZGlyICsgIi9BcHBsaWNh
dGlvbnMvU2ltdWxhdG9yLmFwcCIKKyAgICAgICAgc2h1dGlsLmNvcHl0cmVlKHNpbXVsYXRvcl9h
cHBfcGF0aCwgZGVzdGluYXRpb24pCisKKyAgICAgICAgIyBVcGRhdGUgYXBwJ3MgcGFja2FnZS1u
YW1lIGluc2lkZSBwbGlzdCBhbmQgcmUtY29kZS1zaWduIGl0CisgICAgICAgIHBsaXN0X3BhdGgg
PSBkZXN0aW5hdGlvbiArICIvQ29udGVudHMvSW5mby5wbGlzdCIKKyAgICAgICAgY29tbWFuZCA9
ICJTZXQgQ0ZCdW5kbGVJZGVudGlmaWVyIGNvbS5hcHBsZS5pcGhvbmVzaW11bGF0b3IiICsgc3Ry
KHN1ZmZpeCkKKyAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyIvdXNyL2xpYmV4ZWMv
UGxpc3RCdWRkeSIsICItYyIsIGNvbW1hbmQsIHBsaXN0X3BhdGhdKQorICAgICAgICBzdWJwcm9j
ZXNzLmNoZWNrX291dHB1dChbImluc3RhbGxfbmFtZV90b29sIiwgIi1hZGRfcnBhdGgiLCBzZWxm
LmRldmVsb3Blcl9kaXIgKyAiL0xpYnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvIiwgZGVzdGluYXRp
b24gKyAiL0NvbnRlbnRzL01hY09TL1NpbXVsYXRvciJdKQorICAgICAgICBzdWJwcm9jZXNzLmNo
ZWNrX291dHB1dChbImluc3RhbGxfbmFtZV90b29sIiwgIi1hZGRfcnBhdGgiLCBzZWxmLmRldmVs
b3Blcl9kaXIgKyAiLy4uL0ZyYW1ld29ya3MvIiwgZGVzdGluYXRpb24gKyAiL0NvbnRlbnRzL01h
Y09TL1NpbXVsYXRvciJdKQorICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbImNvZGVz
aWduIiwgIi1mcyIsICItIiwgZGVzdGluYXRpb25dKQorICAgICAgICBzdWJwcm9jZXNzLmNoZWNr
X291dHB1dChbc2VsZi5MU1JFR0lTVEVSX1BBVEgsICItZiIsIGRlc3RpbmF0aW9uXSkKSW5kZXg6
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Nfc2ltdWxhdG9yLnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Nfc2ltdWxhdG9yLnB5CShyZXZpc2lv
biAyMTI5NzApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3NpbXVsYXRvci5w
eQkod29ya2luZyBjb3B5KQpAQCAtMjAsNyArMjAsNiBAQAogIyBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogCi1pbXBvcnQgaXRlcnRvb2xzCiBpbXBvcnQgbG9nZ2luZwogaW1w
b3J0IG9zCiBpbXBvcnQgcmUKQEAgLTI5LDEyICsyOCw5IEBAIGltcG9ydCBzdWJwcm9jZXNzCiBp
bXBvcnQgdGltZQogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5tZW1vaXplZCBpbXBvcnQgbWVtb2l6
ZWQKLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IFNjcmlwdEVy
cm9yCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMudGVzdF9jb25maWd1cmF0aW9u
IGltcG9ydCBUZXN0Q29uZmlndXJhdGlvbgotZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBjb25m
aWcgYXMgcG9ydF9jb25maWcKLWZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgZHJpdmVyLCBpbWFn
ZV9kaWZmCi1mcm9tIHdlYmtpdHB5LnBvcnQuZGFyd2luIGltcG9ydCBEYXJ3aW5Qb3J0Ci1mcm9t
IHdlYmtpdHB5LnBvcnQuc2ltdWxhdG9yX3Byb2Nlc3MgaW1wb3J0IFNpbXVsYXRvclByb2Nlc3MK
K2Zyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgaW1hZ2VfZGlmZgorZnJvbSB3ZWJraXRweS5wb3J0
LmlvcyBpbXBvcnQgSU9TUG9ydAogZnJvbSB3ZWJraXRweS54Y29kZS5zaW11bGF0b3IgaW1wb3J0
IFNpbXVsYXRvciwgUnVudGltZSwgRGV2aWNlVHlwZQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lz
dGVtLmNyYXNobG9ncyBpbXBvcnQgQ3Jhc2hMb2dzCiAKQEAgLTQyLDMyICszOCw3IEBAIGZyb20g
d2Via2l0cHkuY29tbW9uLnN5c3RlbS5jcmFzaGxvZ3MgaW0KIF9sb2cgPSBsb2dnaW5nLmdldExv
Z2dlcihfX25hbWVfXykKIAogCi1jbGFzcyBJT1NQb3J0KERhcndpblBvcnQpOgotICAgIHBvcnRf
bmFtZSA9ICJpb3MiCi0KLSAgICBBUkNISVRFQ1RVUkVTID0gWydhcm12NycsICdhcm12N3MnLCAn
YXJtNjQnXQotICAgIERFRkFVTFRfQVJDSElURUNUVVJFID0gJ2FybTY0JwotICAgIFZFUlNJT05f
RkFMTEJBQ0tfT1JERVIgPSBbJ2lvcy03JywgJ2lvcy04JywgJ2lvcy05JywgJ2lvcy0xMCddCi0K
LSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZGV0ZXJtaW5lX2Z1bGxfcG9ydF9uYW1lKGNscywg
aG9zdCwgb3B0aW9ucywgcG9ydF9uYW1lKToKLSAgICAgICAgaWYgcG9ydF9uYW1lID09IGNscy5w
b3J0X25hbWU6Ci0gICAgICAgICAgICBpcGhvbmVvc19zZGtfdmVyc2lvbiA9IGhvc3QucGxhdGZv
cm0ueGNvZGVfc2RrX3ZlcnNpb24oJ2lwaG9uZW9zJykKLSAgICAgICAgICAgIGlmIG5vdCBpcGhv
bmVvc19zZGtfdmVyc2lvbjoKLSAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlBsZWFz
ZSBpbnN0YWxsIHRoZSBpT1MgU0RLLiIpCi0gICAgICAgICAgICBtYWpvcl92ZXJzaW9uX251bWJl
ciA9IGlwaG9uZW9zX3Nka192ZXJzaW9uLnNwbGl0KCcuJylbMF0KLSAgICAgICAgICAgIHBvcnRf
bmFtZSA9IHBvcnRfbmFtZSArICctJyArIG1ham9yX3ZlcnNpb25fbnVtYmVyCi0gICAgICAgIHJl
dHVybiBwb3J0X25hbWUKLQotICAgICMgRGVzcGl0ZSB0aGVpciBuYW1lcywgdGhlc2UgZmxhZ3Mg
ZG8gbm90IGFjdHVhbGx5IGdldCBwYXNzZWQgYWxsIHRoZSB3YXkgZG93biB0byB3ZWJraXQtYnVp
bGQuCi0gICAgZGVmIF9idWlsZF9kcml2ZXJfZmxhZ3Moc2VsZik6Ci0gICAgICAgIHJldHVybiBb
Jy0tc2RrJywgJ2lwaG9uZW9zJ10gKyAoWydBUkNIUz0lcycgJSBzZWxmLmFyY2hpdGVjdHVyZSgp
XSBpZiBzZWxmLmFyY2hpdGVjdHVyZSgpIGVsc2UgW10pCi0KLSAgICBkZWYgb3BlcmF0aW5nX3N5
c3RlbShzZWxmKToKLSAgICAgICAgcmV0dXJuICdpb3MnCi0KLQotY2xhc3MgSU9TU2ltdWxhdG9y
UG9ydChEYXJ3aW5Qb3J0KToKK2NsYXNzIElPU1NpbXVsYXRvclBvcnQoSU9TUG9ydCk6CiAgICAg
cG9ydF9uYW1lID0gImlvcy1zaW11bGF0b3IiCiAKICAgICBGVVRVUkVfVkVSU0lPTiA9ICdmdXR1
cmUnCkBAIC04NywyNCArNTgsMjQgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0
KToKICAgICAgICAgJ3g4Nl82NCc6IHsKICAgICAgICAgICAgICdpcGhvbmUnOiAnaVBob25lIDVz
JywKICAgICAgICAgICAgICdpcGhvbmU3JzogJ2lQaG9uZSA3JywKLSAgICAgICAgICAgICdpcGFk
JzogJ2lQYWQgQWlyJworICAgICAgICAgICAgJ2lwYWQnOiAnaVBhZCBBaXInLAogICAgICAgICB9
LAogICAgICAgICAneDg2JzogewogICAgICAgICAgICAgJ2lwaG9uZSc6ICdpUGhvbmUgNScsCi0g
ICAgICAgICAgICAnaXBhZCc6ICdpUGFkIFJldGluYScKKyAgICAgICAgICAgICdpcGFkJzogJ2lQ
YWQgUmV0aW5hJywKICAgICAgICAgfSwKICAgICB9CiAKICAgICBkZWYgX19pbml0X18oc2VsZiwg
aG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncyk6Ci0gICAgICAgIERhcndpblBvcnQuX19pbml0X18o
c2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncykKLSAgICAgICAgc2VsZi5fdGVzdF9ydW5u
ZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IFNpbXVsYXRvclByb2Nlc3MKKyAgICAgICAgc3VwZXIo
SU9TU2ltdWxhdG9yUG9ydCwgc2VsZikuX19pbml0X18oaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJn
cykKKyAgICAgICAgc2VsZi5fc2ltdWxhdG9yX2dyb3VwX21hbmFnZXIgPSBTaW11bGF0b3IoaG9z
dCkKKyAgICAgICAgc2VsZi5fZGV2aWNlX21hcCA9IHNlbGYuX3NpbXVsYXRvcl9ncm91cF9tYW5h
Z2VyLm1hbmFnZWRfZGV2aWNlcwogCiAgICAgICAgIG9wdGlvbmFsX2RldmljZV9jbGFzcyA9IHNl
bGYuZ2V0X29wdGlvbignZGV2aWNlX2NsYXNzJykKLSAgICAgICAgc2VsZi5fcHJpbnRpbmdfY21k
X2xpbmUgPSBGYWxzZQogICAgICAgICBzZWxmLl9kZXZpY2VfY2xhc3MgPSBvcHRpb25hbF9kZXZp
Y2VfY2xhc3MgaWYgb3B0aW9uYWxfZGV2aWNlX2NsYXNzIGVsc2Ugc2VsZi5ERUZBVUxUX0RFVklD
RV9DTEFTUwogICAgICAgICBfbG9nLmRlYnVnKCdJT1NTaW11bGF0b3JQb3J0IF9kZXZpY2VfY2xh
c3MgaXMgJXMnLCBzZWxmLl9kZXZpY2VfY2xhc3MpCiAKLSAgICAgICAgc2VsZi5fY3VycmVudF9k
ZXZpY2UgPSBTaW11bGF0b3IoaG9zdCkuY3VycmVudF9kZXZpY2UoKQorICAgICAgICBzZWxmLl9j
dXJyZW50X2RldmljZSA9IHNlbGYuX3NpbXVsYXRvcl9ncm91cF9tYW5hZ2VyLmN1cnJlbnRfZGV2
aWNlKCkKICAgICAgICAgaWYgbm90IHNlbGYuX2N1cnJlbnRfZGV2aWNlOgogICAgICAgICAgICAg
c2VsZi5zZXRfb3B0aW9uKCdkZWRpY2F0ZWRfc2ltdWxhdG9ycycsIFRydWUpCiAgICAgICAgIGlm
IG5vdCBzZWxmLmdldF9vcHRpb24oJ2RlZGljYXRlZF9zaW11bGF0b3JzJyk6CkBAIC0xMTIsMjAg
KzgzLDYgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKICAgICAgICAgICAg
ICAgICBfbG9nLndhcm4oJ0Nhbm5vdCBoYXZlIG1vcmUgdGhhbiBvbmUgY2hpbGQgcHJvY2VzcyB3
aGVuIHVzaW5nIGEgcnVubmluZyBzaW11bGF0b3IuICBTZXR0aW5nIGNoaWxkX3Byb2Nlc3NlcyB0
byAxLicpCiAgICAgICAgICAgICBzZWxmLnNldF9vcHRpb24oJ2NoaWxkX3Byb2Nlc3NlcycsIDEp
CiAKLSAgICBkZWYgZHJpdmVyX25hbWUoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuZ2V0X29wdGlv
bignZHJpdmVyX25hbWUnKToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9vcHRpb24oJ2Ry
aXZlcl9uYW1lJykKLSAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCd3ZWJraXRfdGVzdF9ydW5u
ZXInKToKLSAgICAgICAgICAgIHJldHVybiAnV2ViS2l0VGVzdFJ1bm5lckFwcC5hcHAnCi0gICAg
ICAgIHJldHVybiAnRHVtcFJlbmRlclRyZWUuYXBwJwotCi0gICAgZGVmIGRyaXZlcl9jbWRfbGlu
ZV9mb3JfbG9nZ2luZyhzZWxmKToKLSAgICAgICAgIyBBdm9pZCBzcGlubmluZyB1cCBkZXZpY2Vz
IGp1c3QgZm9yIGxvZ2dpbmcgdGhlIGNvbW1hbmRsaW5lLgotICAgICAgICBzZWxmLl9wcmludGlu
Z19jbWRfbGluZSA9IFRydWUKLSAgICAgICAgcmVzdWx0ID0gc3VwZXIoSU9TU2ltdWxhdG9yUG9y
dCwgc2VsZikuZHJpdmVyX2NtZF9saW5lX2Zvcl9sb2dnaW5nKCkKLSAgICAgICAgc2VsZi5fcHJp
bnRpbmdfY21kX2xpbmUgPSBGYWxzZQotICAgICAgICByZXR1cm4gcmVzdWx0Ci0KICAgICBAcHJv
cGVydHkKICAgICBAbWVtb2l6ZWQKICAgICBkZWYgc2ltdWxhdG9yX3J1bnRpbWUoc2VsZik6CkBA
IC0xNTAsMTAgKzEwNyw2IEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoRGFyd2luUG9ydCk6CiAg
ICAgICAgIHJldHVybiBkZXZpY2VfdHlwZQogCiAgICAgQG1lbW9pemVkCi0gICAgZGVmIGNoaWxk
X3Byb2Nlc3NlcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIGludChzZWxmLmdldF9vcHRpb24oJ2No
aWxkX3Byb2Nlc3NlcycpKQotCi0gICAgQG1lbW9pemVkCiAgICAgZGVmIGRlZmF1bHRfY2hpbGRf
cHJvY2Vzc2VzKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIG51bWJlciBvZiBTaW11bGF0
b3JzIGluc3RhbmNlcyB0byB1c2UgZm9yIHRoaXMgcG9ydC4iIiIKICAgICAgICAgYmVzdF9jaGls
ZF9wcm9jZXNzX2NvdW50X2Zvcl9jcHUgPSBzZWxmLl9leGVjdXRpdmUuY3B1X2NvdW50KCkgLyAy
CkBAIC0yNDYsMTAgKzE5OSwxMSBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQp
OgogICAgICAgICAgICAgZm9yIGkgaW4geHJhbmdlKHNlbGYuY2hpbGRfcHJvY2Vzc2VzKCkpOgog
ICAgICAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9kZXZpY2UoaSkKIAorICAgICAgICAgICAgc2Vs
Zi5fZGV2aWNlX21hcCA9IHNlbGYuX3NpbXVsYXRvcl9ncm91cF9tYW5hZ2VyLm1hbmFnZWRfZGV2
aWNlcwogICAgICAgICAgICAgZm9yIGkgaW4geHJhbmdlKHNlbGYuY2hpbGRfcHJvY2Vzc2VzKCkp
OgogICAgICAgICAgICAgICAgIGRldmljZV91ZGlkID0gc2VsZi5fdGVzdGluZ19kZXZpY2UoaSku
dWRpZAotICAgICAgICAgICAgICAgIFNpbXVsYXRvci53YWl0X3VudGlsX2RldmljZV9pc19pbl9z
dGF0ZShkZXZpY2VfdWRpZCwgU2ltdWxhdG9yLkRldmljZVN0YXRlLlNIVVRET1dOKQotICAgICAg
ICAgICAgICAgIFNpbXVsYXRvci5yZXNldF9kZXZpY2UoZGV2aWNlX3VkaWQpCisgICAgICAgICAg
ICAgICAgc2VsZi5fc2ltdWxhdG9yX2dyb3VwX21hbmFnZXIud2FpdF91bnRpbF9kZXZpY2VfaXNf
aW5fc3RhdGUoZGV2aWNlX3VkaWQsIFNpbXVsYXRvci5EZXZpY2VTdGF0ZS5TSFVURE9XTikKKyAg
ICAgICAgICAgICAgICBzZWxmLl9zaW11bGF0b3JfZ3JvdXBfbWFuYWdlci5yZXNldF9kZXZpY2Uo
ZGV2aWNlX3VkaWQpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBhc3NlcnQoc2VsZi5fY3Vy
cmVudF9kZXZpY2UpCiAgICAgICAgICAgICBpZiBzZWxmLl9jdXJyZW50X2RldmljZS5uYW1lICE9
IHNlbGYuc2ltdWxhdG9yX2RldmljZV90eXBlKCkubmFtZToKQEAgLTI4Myw3ICsyMzcsNyBAQCBj
bGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogCiAgICAgICAgIF9sb2cuaW5mbygn
V2FpdGluZyBmb3IgYWxsIGlPUyBTaW11bGF0b3JzIHRvIGZpbmlzaCBib290aW5nLicpCiAgICAg
ICAgIGZvciBpIGluIHhyYW5nZShzZWxmLmNoaWxkX3Byb2Nlc3NlcygpKToKLSAgICAgICAgICAg
IFNpbXVsYXRvci53YWl0X3VudGlsX2RldmljZV9pc19ib290ZWQoc2VsZi5fdGVzdGluZ19kZXZp
Y2UoaSkudWRpZCkKKyAgICAgICAgICAgIHNlbGYuX3NpbXVsYXRvcl9ncm91cF9tYW5hZ2VyLndh
aXRfdW50aWxfZGV2aWNlX2lzX2Jvb3RlZChzZWxmLl90ZXN0aW5nX2RldmljZShpKS51ZGlkKQog
CiAgICAgZGVmIF9xdWl0X2lvc19zaW11bGF0b3Ioc2VsZik6CiAgICAgICAgIGlmIG5vdCBzZWxm
Ll91c2luZ19kZWRpY2F0ZWRfc2ltdWxhdG9ycygpOgpAQCAtMzYwLDIyICszMTQsMTQgQEAgY2xh
c3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKICAgICBkZWYgX3VzaW5nX2RlZGljYXRl
ZF9zaW11bGF0b3JzKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5nZXRfb3B0aW9uKCdkZWRp
Y2F0ZWRfc2ltdWxhdG9ycycpCiAKKyAgICBkZWYgbXVsdGlwbGVfZGV2aWNlcyhzZWxmKToKKyAg
ICAgICAgcmV0dXJuIHNlbGYuX3VzaW5nX2RlZGljYXRlZF9zaW11bGF0b3JzKCkKKwogICAgIGRl
ZiBfY3JlYXRlX2RldmljZShzZWxmLCBudW1iZXIpOgotICAgICAgICByZXR1cm4gU2ltdWxhdG9y
LmNyZWF0ZV9kZXZpY2UobnVtYmVyLCBzZWxmLnNpbXVsYXRvcl9kZXZpY2VfdHlwZSgpLCBzZWxm
LnNpbXVsYXRvcl9ydW50aW1lKQorICAgICAgICByZXR1cm4gc2VsZi5fc2ltdWxhdG9yX2dyb3Vw
X21hbmFnZXIuY3JlYXRlX2RldmljZShudW1iZXIsIHNlbGYuc2ltdWxhdG9yX2RldmljZV90eXBl
KCksIHNlbGYuc2ltdWxhdG9yX3J1bnRpbWUpCiAKICAgICBkZWYgX3JlbW92ZV9kZXZpY2Uoc2Vs
ZiwgbnVtYmVyKToKLSAgICAgICAgU2ltdWxhdG9yLnJlbW92ZV9kZXZpY2UobnVtYmVyKQotCi0g
ICAgZGVmIF90ZXN0aW5nX2RldmljZShzZWxmLCBudW1iZXIpOgotICAgICAgICByZXR1cm4gU2lt
dWxhdG9yLmRldmljZV9udW1iZXIobnVtYmVyKQotCi0gICAgIyBGSVhNRTogVGhpcyBpcyBvbmx5
IGV4cG9zZWQgc28gdGhhdCBTaW11bGF0b3JQcm9jZXNzIGNhbiB1c2UgaXQuCi0gICAgZGVmIGRl
dmljZV9pZF9mb3Jfd29ya2VyX251bWJlcihzZWxmLCBudW1iZXIpOgotICAgICAgICBpZiBzZWxm
Ll9wcmludGluZ19jbWRfbGluZToKLSAgICAgICAgICAgIHJldHVybiAnPGR1bW15IGlkPicKLSAg
ICAgICAgaWYgc2VsZi5fdXNpbmdfZGVkaWNhdGVkX3NpbXVsYXRvcnMoKToKLSAgICAgICAgICAg
IHJldHVybiBzZWxmLl90ZXN0aW5nX2RldmljZShudW1iZXIpLnVkaWQKLSAgICAgICAgcmV0dXJu
IHNlbGYuX2N1cnJlbnRfZGV2aWNlLnVkaWQKKyAgICAgICAgc2VsZi5fc2ltdWxhdG9yX2dyb3Vw
X21hbmFnZXIucmVtb3ZlX2RldmljZShudW1iZXIpCiAKICAgICBkZWYgZ2V0X3NpbXVsYXRvcl9w
YXRoKHNlbGYsIHN1ZmZpeD0iIik6CiAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5T
SU1VTEFUT1JfRElSRUNUT1JZLCAiU2ltdWxhdG9yIiArIHN0cihzdWZmaXgpICsgIi5hcHAiKQpJ
bmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc191bml0dGVzdC5weQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3VuaXR0ZXN0LnB5CShyZXZp
c2lvbiAyMTI5NzApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3VuaXR0ZXN0
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw3IEBACiAKIGltcG9ydCB0aW1lCiAKLWZy
b20gd2Via2l0cHkucG9ydC5pb3MgaW1wb3J0IElPU1NpbXVsYXRvclBvcnQKK2Zyb20gd2Via2l0
cHkucG9ydC5pb3Nfc2ltdWxhdG9yIGltcG9ydCBJT1NTaW11bGF0b3JQb3J0CiBmcm9tIHdlYmtp
dHB5LnBvcnQgaW1wb3J0IGRhcndpbl90ZXN0Y2FzZQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lz
dGVtLmZpbGVzeXN0ZW1fbW9jayBpbXBvcnQgTW9ja0ZpbGVTeXN0ZW0KIGZyb20gd2Via2l0cHku
Y29tbW9uLnN5c3RlbS5vdXRwdXRjYXB0dXJlIGltcG9ydCBPdXRwdXRDYXB0dXJlCkluZGV4OiBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2ltdWxhdG9yX3Byb2Nlc3MucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NpbXVsYXRvcl9wcm9jZXNzLnB5CShy
ZXZpc2lvbiAyMTI5NzApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2ltdWxhdG9y
X3Byb2Nlc3MucHkJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgY2xhc3MgU2ltdWxh
dG9yUHJvY2VzcyhTZXJ2ZXJQcm9jZXNzKToKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0
X29iaiwgbmFtZSwgY21kLCBlbnY9Tm9uZSwgdW5pdmVyc2FsX25ld2xpbmVzPUZhbHNlLCB0cmVh
dF9ub19kYXRhX2FzX2NyYXNoPUZhbHNlLCB3b3JrZXJfbnVtYmVyPU5vbmUpOgogICAgICAgICBz
ZWxmLl9idW5kbGVfaWQgPSBwb3J0X29iai5hcHBfaWRlbnRpZmllcl9mcm9tX2J1bmRsZShjbWRb
MF0pCi0gICAgICAgIHNlbGYuX2RldmljZSA9IFNpbXVsYXRvcihwb3J0X29iai5ob3N0KS5maW5k
X2RldmljZV9ieV91ZGlkKHBvcnRfb2JqLmRldmljZV9pZF9mb3Jfd29ya2VyX251bWJlcih3b3Jr
ZXJfbnVtYmVyKSkKKyAgICAgICAgc2VsZi5fZGV2aWNlID0gcG9ydF9vYmouZGV2aWNlX2Zvcl93
b3JrZXJfbnVtYmVyKHdvcmtlcl9udW1iZXIpCiAgICAgICAgIGlmIG5vdCBzZWxmLl9kZXZpY2Uu
aW5zdGFsbF9hcHAoY21kWzBdLCBlbnYpOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9y
KCdGYWlsZWQgdG8gaW5zdGFsbCBhcHAge30gb24gc2ltdWxhdG9yIGRldmljZSB7fScuZm9ybWF0
KGNtZFswXSwgc2VsZi5fZGV2aWNlLnVkaWQpKQogICAgICAgICBlbnZbJ0lQQ19JREVOVElGSUVS
J10gPSBzZWxmLl9idW5kbGVfaWQgKyAnLScgKyBzZWxmLl9kZXZpY2UudWRpZApJbmRleDogVG9v
bHMvU2NyaXB0cy93ZWJraXRweS94Y29kZS9zaW11bGF0b3IucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy93ZWJraXRweS94Y29kZS9zaW11bGF0b3IucHkJKHJldmlzaW9uIDIxMjk3MCkK
KysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkveGNvZGUvc2ltdWxhdG9yLnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0xODEsNyArMTgxLDcgQEAgY2xhc3MgU2ltdWxhdG9yKG9iamVjdCk6CiAgICAgZGV2
aWNlc19yZSA9IHJlLmNvbXBpbGUoCiAgICAgICAgICdccyooP1A8bmFtZT5bXihdKyApXCgoP1A8
dWRpZD5bXildKylcKSBcKCg/UDxzdGF0ZT5bXildKylcKSggXCgoP1A8YXZhaWxhYmlsaXR5Plte
KV0rKVwpKT8nKQogCi0gICAgX21hbmFnZWRfZGV2aWNlcyA9IHt9CisgICAgbWFuYWdlZF9kZXZp
Y2VzID0ge30KICAgICBEZXZpY2UgPSBOb25lCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgaG9z
dD1Ob25lKToKQEAgLTIxNiwyMSArMjE2LDIxIEBAIGNsYXNzIFNpbXVsYXRvcihvYmplY3QpOgog
ICAgIGRlZiBjcmVhdGVfZGV2aWNlKG51bWJlciwgZGV2aWNlX3R5cGUsIHJ1bnRpbWUpOgogICAg
ICAgICBkZXZpY2UgPSBTaW11bGF0b3IoKS5sb29rdXBfb3JfY3JlYXRlX2RldmljZShkZXZpY2Vf
dHlwZS5uYW1lICsgJyBXZWJLaXQgVGVzdGVyJyArIHN0cihudW1iZXIpLCBkZXZpY2VfdHlwZSwg
cnVudGltZSkKICAgICAgICAgX2xvZy5kZWJ1ZygnY3JlYXRlZCBkZXZpY2Uge30ge30nLmZvcm1h
dChudW1iZXIsIGRldmljZSkpCi0gICAgICAgIGFzc2VydChsZW4oU2ltdWxhdG9yLl9tYW5hZ2Vk
X2RldmljZXMpID09IG51bWJlcikKLSAgICAgICAgU2ltdWxhdG9yLl9tYW5hZ2VkX2RldmljZXNb
bnVtYmVyXSA9IGRldmljZQorICAgICAgICBhc3NlcnQobGVuKFNpbXVsYXRvci5tYW5hZ2VkX2Rl
dmljZXMpID09IG51bWJlcikKKyAgICAgICAgU2ltdWxhdG9yLm1hbmFnZWRfZGV2aWNlc1tudW1i
ZXJdID0gZGV2aWNlCiAKICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIHJlbW92ZV9kZXZpY2Uo
bnVtYmVyKToKLSAgICAgICAgaWYgbm90IFNpbXVsYXRvci5fbWFuYWdlZF9kZXZpY2VzW251bWJl
cl06CisgICAgICAgIGlmIG5vdCBTaW11bGF0b3IubWFuYWdlZF9kZXZpY2VzW251bWJlcl06CiAg
ICAgICAgICAgICByZXR1cm4KLSAgICAgICAgZGV2aWNlX3VkaWQgPSBTaW11bGF0b3IuX21hbmFn
ZWRfZGV2aWNlc1tudW1iZXJdLnVkaWQKKyAgICAgICAgZGV2aWNlX3VkaWQgPSBTaW11bGF0b3Iu
bWFuYWdlZF9kZXZpY2VzW251bWJlcl0udWRpZAogICAgICAgICBfbG9nLmRlYnVnKCdyZW1vdmlu
ZyBkZXZpY2Uge30ge30nLmZvcm1hdChudW1iZXIsIGRldmljZV91ZGlkKSkKLSAgICAgICAgZGVs
IFNpbXVsYXRvci5fbWFuYWdlZF9kZXZpY2VzW251bWJlcl0KKyAgICAgICAgZGVsIFNpbXVsYXRv
ci5tYW5hZ2VkX2RldmljZXNbbnVtYmVyXQogICAgICAgICBTaW11bGF0b3IuZGVsZXRlX2Rldmlj
ZShkZXZpY2VfdWRpZCkKIAogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgZGV2aWNlX251bWJl
cihudW1iZXIpOgotICAgICAgICByZXR1cm4gU2ltdWxhdG9yLl9tYW5hZ2VkX2RldmljZXNbbnVt
YmVyXQorICAgICAgICByZXR1cm4gU2ltdWxhdG9yLm1hbmFnZWRfZGV2aWNlc1tudW1iZXJdCiAK
ICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIGRldmljZV9zdGF0ZV9kZXNjcmlwdGlvbihzdGF0
ZSk6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>302973</attachid>
            <date>2017-02-28 13:30:03 -0800</date>
            <delta_ts>2017-03-01 11:08:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-168681-20170228132705.patch</filename>
            <type>text/plain</type>
            <size>57117</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxMzE2NikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQ1IEBACisyMDE3LTAyLTI4ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogTW92ZSBzb21lIGRldmljZSBtYW5hZ2VtZW50IGZyb20g
aU9TU2ltdWxhdG9yUG9ydCB0byBpT1NQb3J0IGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjg2ODEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9mYWN0b3J5
LnB5OgorICAgICAgICAoUG9ydEZhY3RvcnkpOiBDb3JyZWN0IGltcG9ydCBwYXRoIGZvciBJT1NT
aW11bGF0b3JQb3J0IGFuZCBJT1NEZXZpY2VQb3J0LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvcG9ydC9pb3MucHk6CisgICAgICAgIChJT1NQb3J0Ll9faW5pdF9fKTogRGVmaW5lIHZhcmlh
YmxlcyBzaGFyZWQgYmV0d2VlbiBpT1MgcG9ydHMuCisgICAgICAgIChJT1NQb3J0LmRyaXZlcl9j
bWRfbGluZV9mb3JfbG9nZ2luZyk6IEZyb20gSU9TU2ltdWxhdG9yUG9ydC4KKyAgICAgICAgKElP
U1BvcnQuZHJpdmVyX25hbWUpOiBGcm9tIElPU1NpbXVsYXRvclBvcnQuCisgICAgICAgIChJT1NQ
b3J0LnVzaW5nX211bHRpcGxlX2RldmljZXMpOiBDaGVjayBpZiB0aGlzIHBvcnQgc3VwcG9ydHMg
bXVsdGlwbGUgZGV2aWNlcy4KKyAgICAgICAgKElPU1BvcnQuX3Rlc3RpbmdfZGV2aWNlKTogTWFw
IHdvcmtlciBudW1iZXIgdG8gZGV2aWNlLgorICAgICAgICAoSU9TUG9ydC5kZXZpY2VfZm9yX3dv
cmtlcl9udW1iZXIpOiBSZXR1cm4gX3Rlc3RpbmdfZGV2aWNlKCkgb3IgX2N1cnJlbnRfZGV2aWNl
IGJhc2VkIG9uIHVzaW5nX211bHRpcGxlX2RldmljZXMuIAorICAgICAgICAoSU9TU2ltdWxhdG9y
UG9ydCk6IE1vdmVkIHRvIGlvc19zaW11bGF0b3IucHkKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L3BvcnQvaW9zX2RldmljZS5weTogQWRkZWQuCisgICAgICAgIChJT1NEZXZpY2VQb3J0KTog
TW92ZWQgZnVuY3Rpb25hbGl0eSBmcm9tIElPU1BvcnQuCisgICAgICAgIChJT1NEZXZpY2VQb3J0
LmRldGVybWluZV9mdWxsX3BvcnRfbmFtZSk6IE1vdmVkIGZyb20gSU9TUG9ydC4KKyAgICAgICAg
KElPU0RldmljZVBvcnQuX2J1aWxkX2RyaXZlcl9mbGFncyk6IERpdHRvLgorICAgICAgICAoSU9T
RGV2aWNlUG9ydC5vcGVyYXRpbmdfc3lzdGVtKTogRGl0dG8uCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9wb3J0L2lvc19zaW11bGF0b3IucHk6IEFkZGVkLgorICAgICAgICAoSU9TU2ltdWxh
dG9yUG9ydCk6IE1vdmVkIGZyb20gaW9zLnB5LgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5f
X2luaXRfXyk6IEluaXQgcGFyZW50IGNsYXNzLCBzZXR1cCBkZXZpY2UgbWFwLgorICAgICAgICAo
SU9TU2ltdWxhdG9yUG9ydC5fY3JlYXRlX3NpbXVsYXRvcnMpOiBVc2Ugb2JqZWN0IG92ZXIgdW5i
b3VuZCBtZXRob2RzLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5zZXR1cF90ZXN0X3J1bik6
IERpdHRvLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC51c2luZ19tdWx0aXBsZV9kZXZpY2Vz
KTogVHJ1ZSBpZiB3ZSBhcmUgbWFuYWdpbmcgdGhlIHNpbXVsYXRvcnMuCisgICAgICAgIChJT1NT
aW11bGF0b3JQb3J0Ll9jcmVhdGVfZGV2aWNlKTogVXNlIG9iamVjdCBvdmVyIHVuYm91bmQgbWV0
aG9kcy4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuX3JlbW92ZV9kZXZpY2UpOiBEaXR0by4K
KyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuZHJpdmVyX25hbWUpOiBNb3ZlZCB0byBwYXJlbnQg
Y2xhc3MuCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0LmRyaXZlcl9jbWRfbGluZV9mb3JfbG9n
Z2luZyk6IERpdHRvLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5jaGlsZF9wcm9jZXNzZXMp
OiBEaXR0by4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuX3Rlc3RpbmdfZGV2aWNlKTogRGl0
dG8uCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0LmRldmljZV9pZF9mb3Jfd29ya2VyX251bWJl
cik6IFJlbmFtZWQgYXMgZGV2aWNlX2Zvcl93b3JrZXJfbnVtYmVyLgorICAgICAgICAoU2ltdWxh
dG9yUHJvY2Vzcy5fX2luaXRfXyk6IENhbGwgZmluZF9kZXZpY2VfYnlfdWRpZCwgZGV2aWNlX2lk
X2Zvcl93b3JrZXJfbnVtYmVyIGhhcyBiZWVuIHJlbW92ZWQuCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS94Y29kZS9zaW11bGF0b3IucHk6CisgICAgICAgIChTaW11bGF0b3IpOiBNYWtlIF9t
YW5hZ2VkX2RldmljZXMgcHVibGljLgorICAgICAgICAoU2ltdWxhdG9yLmNyZWF0ZV9kZXZpY2Up
OiBEaXR0by4KKyAgICAgICAgKFNpbXVsYXRvci5yZW1vdmVfZGV2aWNlKTogRGl0dG8uCisgICAg
ICAgIChTaW11bGF0b3IuZGV2aWNlX251bWJlcik6IERpdHRvLgorCiAyMDE3LTAyLTI4ICBKb25h
dGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KIAogICAgICAgICB3ZWJraXRweTogUmVn
dWxhciBleHByZXNzaW9uIGZvciBwYXJzaW5nIHNpbWN0bCBkZXZpY2UgaW5mb3JtYXRpb24gaXMg
d3JvbmcgZm9yIGlQYWQgUHJvCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZmFj
dG9yeS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZmFjdG9y
eS5weQkocmV2aXNpb24gMjEzMTYxKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Zh
Y3RvcnkucHkJKHdvcmtpbmcgY29weSkKQEAgLTgwLDE3ICs4MCwxNyBAQCBkZWYgX2J1aWxkZXJf
b3B0aW9ucyhidWlsZGVyX25hbWUpOgogY2xhc3MgUG9ydEZhY3Rvcnkob2JqZWN0KToKICAgICAj
IE9yZGVyIG1hdHRlcnMuICBGb3IgcG9ydCBjbGFzc2VzIHRoYXQgaGF2ZSBhIHBvcnRfbmFtZSB3
aXRoIGEKICAgICAjIGNvbW1vbiBwcmVmaXgsIHRoZSBtb3JlIHNwZWNpZmljIHBvcnQgY2xhc3Mg
c2hvdWxkIGJlIGxpc3RlZAotICAgICMgZmlyc3QuICBGb3IgZXhhbXBsZSwgJ2lvcy5JT1NTaW11
bGF0b3JQb3J0JyAocG9ydF9uYW1lPSdpb3Mtc2ltdWxhdG9yJykKLSAgICAjIHNob3VsZCBiZSBs
aXN0ZWQgYmVmb3JlICdpb3MuSU9TUG9ydCcgKHBvcnRfbmFtZT0naW9zJykuICBJZiB0aGlzCisg
ICAgIyBmaXJzdC4gIEZvciBleGFtcGxlLCAnaW9zX3NpbXVsYXRvci5JT1NTaW11bGF0b3JQb3J0
JyAocG9ydF9uYW1lPSdpb3Mtc2ltdWxhdG9yJykKKyAgICAjIHNob3VsZCBiZSBsaXN0ZWQgYmVm
b3JlICdpb3NfZGV2aWNlLklPU0RldmljZVBvcnQnIChwb3J0X25hbWU9J2lvcycpLiAgSWYgdGhp
cwogICAgICMgcnVsZSBpcyBub3QgZm9sbG93ZWQsIHRoZW4gYHdlYmtpdC1wYXRjaCAtLWlvcy1z
aW11bGF0b3JgIHdpbGwgdHJ5Ci0gICAgIyB0byB1c2UgSU9TUG9ydCBpbnN0ZWFkIG9mIElPU1Np
bXVsYXRvclBvcnQgYmVjYXVzZSAnaW9zJwotICAgICMgKElPU1BvcnQucG9ydF9uYW1lKSBpcyBh
IHByZWZpeCBvZiAnaW9zLXNpbXVsYXRvcicgKHBvcnRfbmFtZQorICAgICMgdG8gdXNlIElPU0Rl
dmljZVBvcnQgaW5zdGVhZCBvZiBJT1NTaW11bGF0b3JQb3J0IGJlY2F1c2UgJ2lvcycKKyAgICAj
IChJT1NEZXZpY2VQb3J0LnBvcnRfbmFtZSkgaXMgYSBwcmVmaXggb2YgJ2lvcy1zaW11bGF0b3In
IChwb3J0X25hbWUKICAgICAjIGRlcml2ZWQgZnJvbSAnLS1pb3Mtc2ltdWxhdG9yJyBjb21tYW5k
LWxpbmUgc3dpdGNoKSwgZm9yIGV4YW1wbGUuCiAgICAgUE9SVF9DTEFTU0VTID0gKAogICAgICAg
ICAnZWZsLkVmbFBvcnQnLAogICAgICAgICAnZ3RrLkd0a1BvcnQnLAotICAgICAgICAnaW9zLklP
U1NpbXVsYXRvclBvcnQnLAotICAgICAgICAnaW9zLklPU1BvcnQnLAorICAgICAgICAnaW9zX3Np
bXVsYXRvci5JT1NTaW11bGF0b3JQb3J0JywKKyAgICAgICAgJ2lvc19kZXZpY2UuSU9TRGV2aWNl
UG9ydCcsCiAgICAgICAgICdtYWMuTWFjUG9ydCcsCiAgICAgICAgICdtb2NrX2RydC5Nb2NrRFJU
UG9ydCcsCiAgICAgICAgICd0ZXN0LlRlc3RQb3J0JywKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9pb3MucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9w
b3J0L2lvcy5weQkocmV2aXNpb24gMjEzMTYxKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9w
b3J0L2lvcy5weQkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLSMgQ29weXJpZ2h0IChD
KSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQg
KEMpIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTIwLDI0ICsyMCwxMSBAQAogIyBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgogCi1pbXBvcnQgaXRlcnRvb2xzCiBpbXBvcnQgbG9nZ2luZwot
aW1wb3J0IG9zCi1pbXBvcnQgcmUKLWltcG9ydCBzaHV0aWwKLWltcG9ydCBzdWJwcm9jZXNzCi1p
bXBvcnQgdGltZQogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5tZW1vaXplZCBpbXBvcnQgbWVtb2l6
ZWQKLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IFNjcmlwdEVy
cm9yCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMudGVzdF9jb25maWd1cmF0aW9u
IGltcG9ydCBUZXN0Q29uZmlndXJhdGlvbgotZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBjb25m
aWcgYXMgcG9ydF9jb25maWcKLWZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgZHJpdmVyLCBpbWFn
ZV9kaWZmCiBmcm9tIHdlYmtpdHB5LnBvcnQuZGFyd2luIGltcG9ydCBEYXJ3aW5Qb3J0CiBmcm9t
IHdlYmtpdHB5LnBvcnQuc2ltdWxhdG9yX3Byb2Nlc3MgaW1wb3J0IFNpbXVsYXRvclByb2Nlc3MK
LWZyb20gd2Via2l0cHkueGNvZGUuc2ltdWxhdG9yIGltcG9ydCBTaW11bGF0b3IsIFJ1bnRpbWUs
IERldmljZVR5cGUKLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5jcmFzaGxvZ3MgaW1wb3J0
IENyYXNoTG9ncwotCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKIApAQCAt
NDUsNzIgKzMyLDIxIEBAIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKIGNsYXNz
IElPU1BvcnQoRGFyd2luUG9ydCk6CiAgICAgcG9ydF9uYW1lID0gImlvcyIKIAotICAgIEFSQ0hJ
VEVDVFVSRVMgPSBbJ2FybXY3JywgJ2FybXY3cycsICdhcm02NCddCi0gICAgREVGQVVMVF9BUkNI
SVRFQ1RVUkUgPSAnYXJtNjQnCi0gICAgVkVSU0lPTl9GQUxMQkFDS19PUkRFUiA9IFsnaW9zLTcn
LCAnaW9zLTgnLCAnaW9zLTknLCAnaW9zLTEwJ10KLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRl
ZiBkZXRlcm1pbmVfZnVsbF9wb3J0X25hbWUoY2xzLCBob3N0LCBvcHRpb25zLCBwb3J0X25hbWUp
OgotICAgICAgICBpZiBwb3J0X25hbWUgPT0gY2xzLnBvcnRfbmFtZToKLSAgICAgICAgICAgIGlw
aG9uZW9zX3Nka192ZXJzaW9uID0gaG9zdC5wbGF0Zm9ybS54Y29kZV9zZGtfdmVyc2lvbignaXBo
b25lb3MnKQotICAgICAgICAgICAgaWYgbm90IGlwaG9uZW9zX3Nka192ZXJzaW9uOgotICAgICAg
ICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiUGxlYXNlIGluc3RhbGwgdGhlIGlPUyBTREsuIikK
LSAgICAgICAgICAgIG1ham9yX3ZlcnNpb25fbnVtYmVyID0gaXBob25lb3Nfc2RrX3ZlcnNpb24u
c3BsaXQoJy4nKVswXQotICAgICAgICAgICAgcG9ydF9uYW1lID0gcG9ydF9uYW1lICsgJy0nICsg
bWFqb3JfdmVyc2lvbl9udW1iZXIKLSAgICAgICAgcmV0dXJuIHBvcnRfbmFtZQotCi0gICAgIyBE
ZXNwaXRlIHRoZWlyIG5hbWVzLCB0aGVzZSBmbGFncyBkbyBub3QgYWN0dWFsbHkgZ2V0IHBhc3Nl
ZCBhbGwgdGhlIHdheSBkb3duIHRvIHdlYmtpdC1idWlsZC4KLSAgICBkZWYgX2J1aWxkX2RyaXZl
cl9mbGFncyhzZWxmKToKLSAgICAgICAgcmV0dXJuIFsnLS1zZGsnLCAnaXBob25lb3MnXSArIChb
J0FSQ0hTPSVzJyAlIHNlbGYuYXJjaGl0ZWN0dXJlKCldIGlmIHNlbGYuYXJjaGl0ZWN0dXJlKCkg
ZWxzZSBbXSkKLQotICAgIGRlZiBvcGVyYXRpbmdfc3lzdGVtKHNlbGYpOgotICAgICAgICByZXR1
cm4gJ2lvcycKLQotCi1jbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQpOgotICAgIHBv
cnRfbmFtZSA9ICJpb3Mtc2ltdWxhdG9yIgotCi0gICAgRlVUVVJFX1ZFUlNJT04gPSAnZnV0dXJl
JwotICAgIEFSQ0hJVEVDVFVSRVMgPSBbJ3g4Nl82NCcsICd4ODYnXQotICAgIERFRkFVTFRfQVJD
SElURUNUVVJFID0gJ3g4Nl82NCcKLQotICAgIERFRkFVTFRfREVWSUNFX0NMQVNTID0gJ2lwaG9u
ZScKLSAgICBDVVNUT01fREVWSUNFX0NMQVNTRVMgPSBbJ2lwYWQnLCAnaXBob25lNyddCi0gICAg
U0RLID0gJ2lwaG9uZXNpbXVsYXRvcicKLQotICAgIFNJTVVMQVRPUl9CVU5ETEVfSUQgPSAnY29t
LmFwcGxlLmlwaG9uZXNpbXVsYXRvcicKLSAgICBTSU1VTEFUT1JfRElSRUNUT1JZID0gIi90bXAv
V2ViS2l0VGVzdGluZ1NpbXVsYXRvcnMvIgotICAgIExTUkVHSVNURVJfUEFUSCA9ICIvU3lzdGVt
L0xpYnJhcnkvRnJhbWV3b3Jrcy9Db3JlU2VydmljZXMuZnJhbWV3b3JrL0ZyYW1ld29ya3MvTGF1
bmNoU2VydmljZXMuZnJhbWV3b3JrL1ZlcnNpb25zL0N1cnJlbnQvU3VwcG9ydC9sc3JlZ2lzdGVy
IgotICAgIFBST0NFU1NfQ09VTlRfRVNUSU1BVEVfUEVSX1NJTVVMQVRPUl9JTlNUQU5DRSA9IDEw
MAotCi0gICAgREVWSUNFX0NMQVNTX01BUCA9IHsKLSAgICAgICAgJ3g4Nl82NCc6IHsKLSAgICAg
ICAgICAgICdpcGhvbmUnOiAnaVBob25lIDVzJywKLSAgICAgICAgICAgICdpcGhvbmU3JzogJ2lQ
aG9uZSA3JywKLSAgICAgICAgICAgICdpcGFkJzogJ2lQYWQgQWlyJwotICAgICAgICB9LAotICAg
ICAgICAneDg2JzogewotICAgICAgICAgICAgJ2lwaG9uZSc6ICdpUGhvbmUgNScsCi0gICAgICAg
ICAgICAnaXBhZCc6ICdpUGFkIFJldGluYScKLSAgICAgICAgfSwKLSAgICB9Ci0KICAgICBkZWYg
X19pbml0X18oc2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncyk6Ci0gICAgICAgIERhcndp
blBvcnQuX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncykKKyAgICAgICAg
c3VwZXIoSU9TUG9ydCwgc2VsZikuX19pbml0X18oaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncykK
ICAgICAgICAgc2VsZi5fdGVzdF9ydW5uZXJfcHJvY2Vzc19jb25zdHJ1Y3RvciA9IFNpbXVsYXRv
clByb2Nlc3MKLQotICAgICAgICBvcHRpb25hbF9kZXZpY2VfY2xhc3MgPSBzZWxmLmdldF9vcHRp
b24oJ2RldmljZV9jbGFzcycpCiAgICAgICAgIHNlbGYuX3ByaW50aW5nX2NtZF9saW5lID0gRmFs
c2UKLSAgICAgICAgc2VsZi5fZGV2aWNlX2NsYXNzID0gb3B0aW9uYWxfZGV2aWNlX2NsYXNzIGlm
IG9wdGlvbmFsX2RldmljZV9jbGFzcyBlbHNlIHNlbGYuREVGQVVMVF9ERVZJQ0VfQ0xBU1MKLSAg
ICAgICAgX2xvZy5kZWJ1ZygnSU9TU2ltdWxhdG9yUG9ydCBfZGV2aWNlX2NsYXNzIGlzICVzJywg
c2VsZi5fZGV2aWNlX2NsYXNzKQorICAgICAgICBzZWxmLl9jdXJyZW50X2RldmljZSA9IE5vbmUK
KworICAgIGRlZiBfZGV2aWNlX21hcChzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50
ZWRFcnJvcgogCi0gICAgICAgIHNlbGYuX2N1cnJlbnRfZGV2aWNlID0gU2ltdWxhdG9yKGhvc3Qp
LmN1cnJlbnRfZGV2aWNlKCkKLSAgICAgICAgaWYgbm90IHNlbGYuX2N1cnJlbnRfZGV2aWNlOgot
ICAgICAgICAgICAgc2VsZi5zZXRfb3B0aW9uKCdkZWRpY2F0ZWRfc2ltdWxhdG9ycycsIFRydWUp
Ci0gICAgICAgIGlmIG5vdCBzZWxmLmdldF9vcHRpb24oJ2RlZGljYXRlZF9zaW11bGF0b3JzJyk6
Ci0gICAgICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ2NoaWxkX3Byb2Nlc3NlcycpID4gMToK
LSAgICAgICAgICAgICAgICBfbG9nLndhcm4oJ0Nhbm5vdCBoYXZlIG1vcmUgdGhhbiBvbmUgY2hp
bGQgcHJvY2VzcyB3aGVuIHVzaW5nIGEgcnVubmluZyBzaW11bGF0b3IuICBTZXR0aW5nIGNoaWxk
X3Byb2Nlc3NlcyB0byAxLicpCi0gICAgICAgICAgICBzZWxmLnNldF9vcHRpb24oJ2NoaWxkX3By
b2Nlc3NlcycsIDEpCisgICAgZGVmIGRyaXZlcl9jbWRfbGluZV9mb3JfbG9nZ2luZyhzZWxmKToK
KyAgICAgICAgIyBBdm9pZCBjcmVhdGluZy9jb25uZWN0aW5nIHRvIGRldmljZXMganVzdCBmb3Ig
bG9nZ2luZyB0aGUgY29tbWFuZGxpbmUuCisgICAgICAgIHNlbGYuX3ByaW50aW5nX2NtZF9saW5l
ID0gVHJ1ZQorICAgICAgICByZXN1bHQgPSBzdXBlcihJT1NQb3J0LCBzZWxmKS5kcml2ZXJfY21k
X2xpbmVfZm9yX2xvZ2dpbmcoKQorICAgICAgICBzZWxmLl9wcmludGluZ19jbWRfbGluZSA9IEZh
bHNlCisgICAgICAgIHJldHVybiByZXN1bHQKIAogICAgIGRlZiBkcml2ZXJfbmFtZShzZWxmKToK
ICAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCdkcml2ZXJfbmFtZScpOgpAQCAtMTE5LDMxNSAr
NTUsMjUgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKICAgICAgICAgICAg
IHJldHVybiAnV2ViS2l0VGVzdFJ1bm5lckFwcC5hcHAnCiAgICAgICAgIHJldHVybiAnRHVtcFJl
bmRlclRyZWUuYXBwJwogCi0gICAgZGVmIGRyaXZlcl9jbWRfbGluZV9mb3JfbG9nZ2luZyhzZWxm
KToKLSAgICAgICAgIyBBdm9pZCBzcGlubmluZyB1cCBkZXZpY2VzIGp1c3QgZm9yIGxvZ2dpbmcg
dGhlIGNvbW1hbmRsaW5lLgotICAgICAgICBzZWxmLl9wcmludGluZ19jbWRfbGluZSA9IFRydWUK
LSAgICAgICAgcmVzdWx0ID0gc3VwZXIoSU9TU2ltdWxhdG9yUG9ydCwgc2VsZikuZHJpdmVyX2Nt
ZF9saW5lX2Zvcl9sb2dnaW5nKCkKLSAgICAgICAgc2VsZi5fcHJpbnRpbmdfY21kX2xpbmUgPSBG
YWxzZQotICAgICAgICByZXR1cm4gcmVzdWx0Ci0KLSAgICBAcHJvcGVydHkKLSAgICBAbWVtb2l6
ZWQKLSAgICBkZWYgc2ltdWxhdG9yX3J1bnRpbWUoc2VsZik6Ci0gICAgICAgIHJ1bnRpbWVfaWRl
bnRpZmllciA9IHNlbGYuZ2V0X29wdGlvbigncnVudGltZScpCi0gICAgICAgIGlmIHJ1bnRpbWVf
aWRlbnRpZmllcjoKLSAgICAgICAgICAgIHJ1bnRpbWUgPSBSdW50aW1lLmZyb21faWRlbnRpZmll
cihydW50aW1lX2lkZW50aWZpZXIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBydW50aW1l
ID0gUnVudGltZS5mcm9tX3ZlcnNpb25fc3RyaW5nKHNlbGYuaG9zdC5wbGF0Zm9ybS54Y29kZV9z
ZGtfdmVyc2lvbignaXBob25lc2ltdWxhdG9yJykpCi0gICAgICAgIHJldHVybiBydW50aW1lCi0K
LSAgICBkZWYgc2ltdWxhdG9yX2RldmljZV90eXBlKHNlbGYpOgotICAgICAgICBkZXZpY2VfdHlw
ZV9pZGVudGlmaWVyID0gc2VsZi5nZXRfb3B0aW9uKCdkZXZpY2VfdHlwZScpCi0gICAgICAgIGlm
IGRldmljZV90eXBlX2lkZW50aWZpZXI6Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCdzaW11bGF0
b3JfZGV2aWNlX3R5cGUgZm9yIGRldmljZSBpZGVudGlmaWVyICVzJywgZGV2aWNlX3R5cGVfaWRl
bnRpZmllcikKLSAgICAgICAgICAgIGRldmljZV90eXBlID0gRGV2aWNlVHlwZS5mcm9tX2lkZW50
aWZpZXIoZGV2aWNlX3R5cGVfaWRlbnRpZmllcikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAg
IF9sb2cuZGVidWcoJ3NpbXVsYXRvcl9kZXZpY2VfdHlwZSBmb3IgZGV2aWNlICVzJywgc2VsZi5f
ZGV2aWNlX2NsYXNzKQotICAgICAgICAgICAgZGV2aWNlX25hbWUgPSBzZWxmLkRFVklDRV9DTEFT
U19NQVBbc2VsZi5hcmNoaXRlY3R1cmUoKV1bc2VsZi5fZGV2aWNlX2NsYXNzXQotICAgICAgICAg
ICAgaWYgbm90IGRldmljZV9uYW1lOgotICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbign
RmFpbGVkIHRvIGZpbmQgZGV2aWNlIGZvciBhcmNoaXRlY3R1cmUge30gYW5kIGRldmljZSBjbGFz
cyB7fScuZm9ybWF0KHNlbGYuYXJjaGl0ZWN0dXJlKCkpLCBzZWxmLl9kZXZpY2VfY2xhc3MpCi0g
ICAgICAgICAgICBkZXZpY2VfdHlwZSA9IERldmljZVR5cGUuZnJvbV9uYW1lKGRldmljZV9uYW1l
KQotICAgICAgICByZXR1cm4gZGV2aWNlX3R5cGUKLQogICAgIEBtZW1vaXplZAogICAgIGRlZiBj
aGlsZF9wcm9jZXNzZXMoc2VsZik6CiAgICAgICAgIHJldHVybiBpbnQoc2VsZi5nZXRfb3B0aW9u
KCdjaGlsZF9wcm9jZXNzZXMnKSkKIAotICAgIEBtZW1vaXplZAotICAgIGRlZiBkZWZhdWx0X2No
aWxkX3Byb2Nlc3NlcyhzZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIHRoZSBudW1iZXIgb2YgU2lt
dWxhdG9ycyBpbnN0YW5jZXMgdG8gdXNlIGZvciB0aGlzIHBvcnQuIiIiCi0gICAgICAgIGJlc3Rf
Y2hpbGRfcHJvY2Vzc19jb3VudF9mb3JfY3B1ID0gc2VsZi5fZXhlY3V0aXZlLmNwdV9jb3VudCgp
IC8gMgotICAgICAgICBzeXN0ZW1fcHJvY2Vzc19jb3VudF9saW1pdCA9IGludChzdWJwcm9jZXNz
LmNoZWNrX291dHB1dChbInVsaW1pdCIsICItdSJdKS5zdHJpcCgpKQotICAgICAgICBjdXJyZW50
X3Byb2Nlc3NfY291bnQgPSBsZW4oc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyJwcyIsICJhdXgi
XSkuc3RyaXAoKS5zcGxpdCgnXG4nKSkKLSAgICAgICAgX2xvZy5kZWJ1ZygnUHJvY2VzcyBsaW1p
dDogJWQsIGN1cnJlbnQgI3Byb2Nlc3NlczogJWQnICUgKHN5c3RlbV9wcm9jZXNzX2NvdW50X2xp
bWl0LCBjdXJyZW50X3Byb2Nlc3NfY291bnQpKQotICAgICAgICBtYXhpbXVtX3NpbXVsYXRvcl9j
b3VudF9vbl90aGlzX3N5c3RlbSA9IChzeXN0ZW1fcHJvY2Vzc19jb3VudF9saW1pdCAtIGN1cnJl
bnRfcHJvY2Vzc19jb3VudCkgLy8gc2VsZi5QUk9DRVNTX0NPVU5UX0VTVElNQVRFX1BFUl9TSU1V
TEFUT1JfSU5TVEFOQ0UKLSAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIGFsc28gdGFrZSBpbnRv
IGFjY291bnQgdGhlIGF2YWlsYWJsZSBSQU0uCi0KLSAgICAgICAgaWYgKG1heGltdW1fc2ltdWxh
dG9yX2NvdW50X29uX3RoaXNfc3lzdGVtIDwgYmVzdF9jaGlsZF9wcm9jZXNzX2NvdW50X2Zvcl9j
cHUpOgotICAgICAgICAgICAgX2xvZy53YXJuKCJUaGlzIG1hY2hpbmUgY291bGQgc3VwcG9ydCAl
cyBzaW11bGF0b3JzLCBidXQgaXMgb25seSBjb25maWd1cmVkIGZvciAlcy4iCi0gICAgICAgICAg
ICAgICAgJSAoYmVzdF9jaGlsZF9wcm9jZXNzX2NvdW50X2Zvcl9jcHUsIG1heGltdW1fc2ltdWxh
dG9yX2NvdW50X29uX3RoaXNfc3lzdGVtKSkKLSAgICAgICAgICAgIF9sb2cud2FybignUGxlYXNl
IHNlZSA8aHR0cHM6Ly90cmFjLndlYmtpdC5vcmcvd2lraS9JbmNyZWFzaW5nS2VybmVsTGltaXRz
Pi4nKQotCi0gICAgICAgIGlmIG1heGltdW1fc2ltdWxhdG9yX2NvdW50X29uX3RoaXNfc3lzdGVt
ID09IDA6Ci0gICAgICAgICAgICBtYXhpbXVtX3NpbXVsYXRvcl9jb3VudF9vbl90aGlzX3N5c3Rl
bSA9IDEKLQotICAgICAgICByZXR1cm4gbWluKG1heGltdW1fc2ltdWxhdG9yX2NvdW50X29uX3Ro
aXNfc3lzdGVtLCBiZXN0X2NoaWxkX3Byb2Nlc3NfY291bnRfZm9yX2NwdSkKLQotICAgIGRlZiBf
Z2V0X2NyYXNoX2xvZyhzZWxmLCBuYW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFu
LCB0aW1lX2ZuPXRpbWUudGltZSwgc2xlZXBfZm49dGltZS5zbGVlcCwgd2FpdF9mb3JfbG9nPVRy
dWUpOgotICAgICAgICB0aW1lX2ZuID0gdGltZV9mbiBvciB0aW1lLnRpbWUKLSAgICAgICAgc2xl
ZXBfZm4gPSBzbGVlcF9mbiBvciB0aW1lLnNsZWVwCi0KLSAgICAgICAgIyBGSVhNRTogV2Ugc2hv
dWxkIGNvbGxlY3QgdGhlIGFjdHVhbCBjcmFzaCBsb2cgZm9yIER1bXBSZW5kZXJUcmVlLmFwcCBi
ZWNhdXNlIGl0IGluY2x1ZGVzIG1vcmUKLSAgICAgICAgIyBpbmZvcm1hdGlvbiAoZS5nLiBleGNl
cHRpb24gY29kZXMpIHRoYW4gaXMgYXZhaWxhYmxlIGluIHRoZSBzdGFjayB0cmFjZSB3cml0dGVu
IHRvIHN0YW5kYXJkIGVycm9yLgotICAgICAgICBzdGRlcnJfbGluZXMgPSBbXQotICAgICAgICBj
cmFzaGVkX3N1YnByb2Nlc3NfbmFtZV9hbmRfcGlkID0gTm9uZSAgIyBlLmcuICgnRHVtcFJlbmRl
clRyZWUuYXBwJywgMTIzNCkKLSAgICAgICAgZm9yIGxpbmUgaW4gKHN0ZGVyciBvciAnJykuc3Bs
aXRsaW5lcygpOgotICAgICAgICAgICAgaWYgbm90IGNyYXNoZWRfc3VicHJvY2Vzc19uYW1lX2Fu
ZF9waWQ6Ci0gICAgICAgICAgICAgICAgbWF0Y2ggPSBzZWxmLlNVQlBST0NFU1NfQ1JBU0hfUkVH
RVgubWF0Y2gobGluZSkKLSAgICAgICAgICAgICAgICBpZiBtYXRjaDoKLSAgICAgICAgICAgICAg
ICAgICAgY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZCA9IChtYXRjaC5ncm91cCgnc3Vi
cHJvY2Vzc19uYW1lJyksIGludChtYXRjaC5ncm91cCgnc3VicHJvY2Vzc19waWQnKSkpCi0gICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBzdGRlcnJfbGluZXMuYXBwZW5k
KGxpbmUpCi0KLSAgICAgICAgaWYgY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZDoKLSAg
ICAgICAgICAgIHJldHVybiBzZWxmLl9nZXRfY3Jhc2hfbG9nKGNyYXNoZWRfc3VicHJvY2Vzc19u
YW1lX2FuZF9waWRbMF0sIGNyYXNoZWRfc3VicHJvY2Vzc19uYW1lX2FuZF9waWRbMV0sIHN0ZG91
dCwKLSAgICAgICAgICAgICAgICAnXG4nLmpvaW4oc3RkZXJyX2xpbmVzKSwgbmV3ZXJfdGhhbiwg
dGltZV9mbiwgc2xlZXBfZm4sIHdhaXRfZm9yX2xvZykKLQotICAgICAgICAjIEFwcCBjcmFzaGVk
Ci0gICAgICAgIF9sb2cuZGVidWcoJ2xvb2tpbmcgZm9yIGNyYXNoIGxvZyBmb3IgJXM6JXMnICUg
KG5hbWUsIHN0cihwaWQpKSkKLSAgICAgICAgY3Jhc2hfbG9nID0gJycKLSAgICAgICAgY3Jhc2hf
bG9ncyA9IENyYXNoTG9ncyhzZWxmLmhvc3QpCi0gICAgICAgIG5vdyA9IHRpbWVfZm4oKQotICAg
ICAgICBkZWFkbGluZSA9IG5vdyArIDUgKiBpbnQoc2VsZi5nZXRfb3B0aW9uKCdjaGlsZF9wcm9j
ZXNzZXMnLCAxKSkKLSAgICAgICAgd2hpbGUgbm90IGNyYXNoX2xvZyBhbmQgbm93IDw9IGRlYWRs
aW5lOgotICAgICAgICAgICAgY3Jhc2hfbG9nID0gY3Jhc2hfbG9ncy5maW5kX25ld2VzdF9sb2co
bmFtZSwgcGlkLCBpbmNsdWRlX2Vycm9ycz1UcnVlLCBuZXdlcl90aGFuPW5ld2VyX3RoYW4pCi0g
ICAgICAgICAgICBpZiBub3Qgd2FpdF9mb3JfbG9nOgotICAgICAgICAgICAgICAgIGJyZWFrCi0g
ICAgICAgICAgICBpZiBub3QgY3Jhc2hfbG9nIG9yIG5vdCBbbGluZSBmb3IgbGluZSBpbiBjcmFz
aF9sb2cuc3BsaXRsaW5lcygpIGlmIG5vdCBsaW5lLnN0YXJ0c3dpdGgoJ0VSUk9SJyldOgotICAg
ICAgICAgICAgICAgIHNsZWVwX2ZuKDAuMSkKLSAgICAgICAgICAgICAgICBub3cgPSB0aW1lX2Zu
KCkKLQotICAgICAgICBpZiBub3QgY3Jhc2hfbG9nOgotICAgICAgICAgICAgcmV0dXJuIHN0ZGVy
ciwgTm9uZQotICAgICAgICByZXR1cm4gc3RkZXJyLCBjcmFzaF9sb2cKLQotICAgIGRlZiBfYnVp
bGRfZHJpdmVyX2ZsYWdzKHNlbGYpOgotICAgICAgICBhcmNocyA9IFsnQVJDSFM9aTM4NiddIGlm
IHNlbGYuYXJjaGl0ZWN0dXJlKCkgPT0gJ3g4NicgZWxzZSBbXQotICAgICAgICBzZGsgPSBbJy0t
c2RrJywgJ2lwaG9uZXNpbXVsYXRvciddCi0gICAgICAgIHJldHVybiBhcmNocyArIHNkawotCi0g
ICAgZGVmIF9nZW5lcmF0ZV9hbGxfdGVzdF9jb25maWd1cmF0aW9ucyhzZWxmKToKLSAgICAgICAg
Y29uZmlndXJhdGlvbnMgPSBbXQotICAgICAgICBmb3IgYnVpbGRfdHlwZSBpbiBzZWxmLkFMTF9C
VUlMRF9UWVBFUzoKLSAgICAgICAgICAgIGZvciBhcmNoaXRlY3R1cmUgaW4gc2VsZi5BUkNISVRF
Q1RVUkVTOgotICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25zLmFwcGVuZChUZXN0Q29uZmln
dXJhdGlvbih2ZXJzaW9uPXNlbGYuX3ZlcnNpb24sIGFyY2hpdGVjdHVyZT1hcmNoaXRlY3R1cmUs
IGJ1aWxkX3R5cGU9YnVpbGRfdHlwZSkpCi0gICAgICAgIHJldHVybiBjb25maWd1cmF0aW9ucwot
Ci0gICAgZGVmIGRlZmF1bHRfYmFzZWxpbmVfc2VhcmNoX3BhdGgoc2VsZik6Ci0gICAgICAgIGlm
IHNlbGYuZ2V0X29wdGlvbignd2Via2l0X3Rlc3RfcnVubmVyJyk6Ci0gICAgICAgICAgICBmYWxs
YmFja19uYW1lcyA9IFtzZWxmLl93azJfcG9ydF9uYW1lKCldICsgW3NlbGYucG9ydF9uYW1lXSAr
IFsnd2syJ10KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGZhbGxiYWNrX25hbWVzID0gW3Nl
bGYucG9ydF9uYW1lICsgJy13azEnXSArIFtzZWxmLnBvcnRfbmFtZV0KLQotICAgICAgICByZXR1
cm4gbWFwKHNlbGYuX3dlYmtpdF9iYXNlbGluZV9wYXRoLCBmYWxsYmFja19uYW1lcykKLQotICAg
IGRlZiBfc2V0X2RldmljZV9jbGFzcyhzZWxmLCBkZXZpY2VfY2xhc3MpOgotICAgICAgICBzZWxm
Ll9kZXZpY2VfY2xhc3MgPSBkZXZpY2VfY2xhc3MgaWYgZGV2aWNlX2NsYXNzIGVsc2Ugc2VsZi5E
RUZBVUxUX0RFVklDRV9DTEFTUwotCi0gICAgZGVmIF9jcmVhdGVfc2ltdWxhdG9ycyhzZWxmKToK
LSAgICAgICAgaWYgKHNlbGYuZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoKSA8IHNlbGYuY2hpbGRf
cHJvY2Vzc2VzKCkpOgotICAgICAgICAgICAgX2xvZy53YXJuKCdZb3UgaGF2ZSBzcGVjaWZpZWQg
dmVyeSBoaWdoIHZhbHVlKHswfSkgZm9yIC0tY2hpbGQtcHJvY2Vzc2VzJy5mb3JtYXQoc2VsZi5j
aGlsZF9wcm9jZXNzZXMoKSkpCi0gICAgICAgICAgICBfbG9nLndhcm4oJ21heGltdW0gY2hpbGQt
cHJvY2Vzc2VzIHdoaWNoIGNhbiBiZSBzdXBwb3J0ZWQgb24gdGhpcyBzeXN0ZW0gYXJlOiB7MH0n
LmZvcm1hdChzZWxmLmRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKCkpKQotICAgICAgICAgICAgX2xv
Zy53YXJuKCdUaGlzIGlzIHZlcnkgbGlrZWx5IHRvIGZhaWwuJykKLQotICAgICAgICBpZiBzZWxm
Ll91c2luZ19kZWRpY2F0ZWRfc2ltdWxhdG9ycygpOgotICAgICAgICAgICAgc2VsZi5fY3JlYXRl
U2ltdWxhdG9yQXBwcygpCi0KLSAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZShzZWxmLmNoaWxk
X3Byb2Nlc3NlcygpKToKLSAgICAgICAgICAgICAgICBzZWxmLl9jcmVhdGVfZGV2aWNlKGkpCi0K
LSAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZShzZWxmLmNoaWxkX3Byb2Nlc3NlcygpKToKLSAg
ICAgICAgICAgICAgICBkZXZpY2VfdWRpZCA9IHNlbGYuX3Rlc3RpbmdfZGV2aWNlKGkpLnVkaWQK
LSAgICAgICAgICAgICAgICBTaW11bGF0b3Iud2FpdF91bnRpbF9kZXZpY2VfaXNfaW5fc3RhdGUo
ZGV2aWNlX3VkaWQsIFNpbXVsYXRvci5EZXZpY2VTdGF0ZS5TSFVURE9XTikKLSAgICAgICAgICAg
ICAgICBTaW11bGF0b3IucmVzZXRfZGV2aWNlKGRldmljZV91ZGlkKQotICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgYXNzZXJ0KHNlbGYuX2N1cnJlbnRfZGV2aWNlKQotICAgICAgICAgICAgaWYg
c2VsZi5fY3VycmVudF9kZXZpY2UubmFtZSAhPSBzZWxmLnNpbXVsYXRvcl9kZXZpY2VfdHlwZSgp
Lm5hbWU6Ci0gICAgICAgICAgICAgICAgX2xvZy53YXJuKCJFeHBlY3RlZCBzaW11bGF0b3Igb2Yg
dHlwZSAnIiArIHNlbGYuc2ltdWxhdG9yX2RldmljZV90eXBlKCkubmFtZSArICInIGJ1dCBmb3Vu
ZCBzaW11bGF0b3Igb2YgdHlwZSAnIiArIHNlbGYuX2N1cnJlbnRfZGV2aWNlLm5hbWUgKyAiJyIp
Ci0gICAgICAgICAgICAgICAgX2xvZy53YXJuKCdUaGUgbmV4dCBibG9jayBvZiB0ZXN0cyBtYXkg
ZmFpbCBkdWUgdG8gZGV2aWNlIG1pcy1tYXRjaCcpCi0KLSAgICBkZWYgc2V0dXBfdGVzdF9ydW4o
c2VsZiwgZGV2aWNlX2NsYXNzPU5vbmUpOgotICAgICAgICBtYWNfb3NfdmVyc2lvbiA9IHNlbGYu
aG9zdC5wbGF0Zm9ybS5vc192ZXJzaW9uCi0KLSAgICAgICAgc2VsZi5fc2V0X2RldmljZV9jbGFz
cyhkZXZpY2VfY2xhc3MpCi0KLSAgICAgICAgX2xvZy5kZWJ1ZygnJykKLSAgICAgICAgX2xvZy5k
ZWJ1Zygnc2V0dXBfdGVzdF9ydW4gZm9yICVzJywgc2VsZi5fZGV2aWNlX2NsYXNzKQotCi0gICAg
ICAgIHNlbGYuX2NyZWF0ZV9zaW11bGF0b3JzKCkKLQotICAgICAgICBpZiBub3Qgc2VsZi5fdXNp
bmdfZGVkaWNhdGVkX3NpbXVsYXRvcnMoKToKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAg
IGZvciBpIGluIHhyYW5nZShzZWxmLmNoaWxkX3Byb2Nlc3NlcygpKToKLSAgICAgICAgICAgIGRl
dmljZV91ZGlkID0gc2VsZi5fdGVzdGluZ19kZXZpY2UoaSkudWRpZAotICAgICAgICAgICAgX2xv
Zy5kZWJ1ZygndGVzdGluZyBkZXZpY2UgJXMgaGFzIHVkaWQgJXMnLCBpLCBkZXZpY2VfdWRpZCkK
LQotICAgICAgICAgICAgIyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzIwOTE2MTQwPiBTd2l0Y2gg
dG8gdXNpbmcgQ29yZVNpbXVsYXRvci5mcmFtZXdvcmsgZm9yIGxhdW5jaGluZyBhbmQgcXVpdHRp
bmcgaU9TIFNpbXVsYXRvcgotICAgICAgICAgICAgc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5k
KFsKLSAgICAgICAgICAgICAgICAnb3BlbicsICctZycsICctYicsIHNlbGYuU0lNVUxBVE9SX0JV
TkRMRV9JRCArIHN0cihpKSwKLSAgICAgICAgICAgICAgICAnLS1hcmdzJywgJy1DdXJyZW50RGV2
aWNlVURJRCcsIGRldmljZV91ZGlkXSkKLQotICAgICAgICAgICAgaWYgbWFjX29zX3ZlcnNpb24g
aW4gWydlbGNhcGl0YW4nLCAneW9zZW1pdGUnLCAnbWF2ZXJpY2tzJ106Ci0gICAgICAgICAgICAg
ICAgdGltZS5zbGVlcCgyLjUpCi0KLSAgICAgICAgX2xvZy5pbmZvKCdXYWl0aW5nIGZvciBhbGwg
aU9TIFNpbXVsYXRvcnMgdG8gZmluaXNoIGJvb3RpbmcuJykKLSAgICAgICAgZm9yIGkgaW4geHJh
bmdlKHNlbGYuY2hpbGRfcHJvY2Vzc2VzKCkpOgotICAgICAgICAgICAgU2ltdWxhdG9yLndhaXRf
dW50aWxfZGV2aWNlX2lzX2Jvb3RlZChzZWxmLl90ZXN0aW5nX2RldmljZShpKS51ZGlkKQotCi0g
ICAgZGVmIF9xdWl0X2lvc19zaW11bGF0b3Ioc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLl91
c2luZ19kZWRpY2F0ZWRfc2ltdWxhdG9ycygpOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAg
IF9sb2cuZGVidWcoIl9xdWl0X2lvc19zaW11bGF0b3Iga2lsbGluZyBhbGwgU2ltdWxhdG9yIHBy
b2Nlc3NlcyIpCi0gICAgICAgICMgRklYTUU6IFdlIHNob3VsZCBraWxsIG9ubHkgdGhlIFNpbXVs
YXRvcnMgd2Ugc3RhcnRlZC4KLSAgICAgICAgc3VicHJvY2Vzcy5jYWxsKFsia2lsbGFsbCIsICIt
OSIsICItbSIsICJTaW11bGF0b3IiXSkKLQotICAgIGRlZiBjbGVhbl91cF90ZXN0X3J1bihzZWxm
KToKLSAgICAgICAgc3VwZXIoSU9TU2ltdWxhdG9yUG9ydCwgc2VsZikuY2xlYW5fdXBfdGVzdF9y
dW4oKQotICAgICAgICBfbG9nLmRlYnVnKCJjbGVhbl91cF90ZXN0X3J1biIpCi0gICAgICAgIHNl
bGYuX3F1aXRfaW9zX3NpbXVsYXRvcigpCi0gICAgICAgIGZpZm9zID0gW3BhdGggZm9yIHBhdGgg
aW4gb3MubGlzdGRpcignL3RtcCcpIGlmIHJlLnNlYXJjaCgnb3JnLndlYmtpdC4oRHVtcFJlbmRl
clRyZWV8V2ViS2l0VGVzdFJ1bm5lcikuKl8oSU58T1VUfEVSUk9SKScsIHBhdGgpXQotICAgICAg
ICBmb3IgZmlmbyBpbiBmaWZvczoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBv
cy5yZW1vdmUob3MucGF0aC5qb2luKCcvdG1wJywgZmlmbykpCi0gICAgICAgICAgICBleGNlcHQg
T1NFcnJvcjoKLSAgICAgICAgICAgICAgICBfbG9nLndhcm5pbmcoJ1VuYWJsZSB0byByZW1vdmUg
JyArIGZpZm8pCi0gICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIGlmIG5vdCBzZWxmLl91
c2luZ19kZWRpY2F0ZWRfc2ltdWxhdG9ycygpOgotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAg
ICAgZm9yIGkgaW4geHJhbmdlKHNlbGYuY2hpbGRfcHJvY2Vzc2VzKCkpOgotICAgICAgICAgICAg
c2ltdWxhdG9yX3BhdGggPSBzZWxmLmdldF9zaW11bGF0b3JfcGF0aChpKQotICAgICAgICAgICAg
ZGV2aWNlX3VkaWQgPSBzZWxmLl90ZXN0aW5nX2RldmljZShpKS51ZGlkCi0gICAgICAgICAgICBz
ZWxmLl9yZW1vdmVfZGV2aWNlKGkpCi0KLSAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0
cyhzaW11bGF0b3JfcGF0aCk6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAg
IHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQoW3NlbGYu
TFNSRUdJU1RFUl9QQVRILCAiLXUiLCBzaW11bGF0b3JfcGF0aF0pCi0KLSAgICAgICAgICAgICAg
ICBfbG9nLmRlYnVnKCdybXRyZWUgJXMnLCBzaW11bGF0b3JfcGF0aCkKLSAgICAgICAgICAgICAg
ICBzZWxmLl9maWxlc3lzdGVtLnJtdHJlZShzaW11bGF0b3JfcGF0aCkKLQotICAgICAgICAgICAg
ICAgIGxvZ3NfcGF0aCA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl9maWxlc3lzdGVtLmV4
cGFuZHVzZXIoIn4iKSwgIkxpYnJhcnkvTG9ncy9Db3JlU2ltdWxhdG9yLyIsIGRldmljZV91ZGlk
KQotICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoJ3JtdHJlZSAlcycsIGxvZ3NfcGF0aCkKLSAg
ICAgICAgICAgICAgICBzZWxmLl9maWxlc3lzdGVtLnJtdHJlZShsb2dzX3BhdGgpCi0KLSAgICAg
ICAgICAgICAgICBzYXZlZF9zdGF0ZV9wYXRoID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYu
X2ZpbGVzeXN0ZW0uZXhwYW5kdXNlcigifiIpLCAiTGlicmFyeS9TYXZlZCBBcHBsaWNhdGlvbiBT
dGF0ZS8iLCBzZWxmLlNJTVVMQVRPUl9CVU5ETEVfSUQgKyBzdHIoaSkgKyAiLnNhdmVkU3RhdGUi
KQotICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoJ3JtdHJlZSAlcycsIHNhdmVkX3N0YXRlX3Bh
dGgpCi0gICAgICAgICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5ybXRyZWUoc2F2ZWRfc3RhdGVf
cGF0aCkKLQotICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgIF9sb2cud2Fybmlu
ZygnVW5hYmxlIHRvIHJlbW92ZSBTaW11bGF0b3InICsgc3RyKGkpKQotCi0gICAgZGVmIHNldHVw
X2Vudmlyb25fZm9yX3NlcnZlcihzZWxmLCBzZXJ2ZXJfbmFtZT1Ob25lKToKLSAgICAgICAgX2xv
Zy5kZWJ1Zygic2V0dXBfZW52aXJvbl9mb3Jfc2VydmVyIikKLSAgICAgICAgZW52ID0gc3VwZXIo
SU9TU2ltdWxhdG9yUG9ydCwgc2VsZikuc2V0dXBfZW52aXJvbl9mb3Jfc2VydmVyKHNlcnZlcl9u
YW1lKQotICAgICAgICBpZiBzZXJ2ZXJfbmFtZSA9PSBzZWxmLmRyaXZlcl9uYW1lKCk6Ci0gICAg
ICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ2xlYWtzJyk6Ci0gICAgICAgICAgICAgICAgZW52
WydNYWxsb2NTdGFja0xvZ2dpbmcnXSA9ICcxJwotICAgICAgICAgICAgICAgIGVudlsnX19YUENf
TWFsbG9jU3RhY2tMb2dnaW5nJ10gPSAnMScKLSAgICAgICAgICAgICAgICBlbnZbJ01hbGxvY1Nj
cmliYmxlJ10gPSAnMScKLSAgICAgICAgICAgICAgICBlbnZbJ19fWFBDX01hbGxvY1NjcmliYmxl
J10gPSAnMScKLSAgICAgICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbignZ3VhcmRfbWFsbG9jJyk6
Ci0gICAgICAgICAgICAgICAgc2VsZi5fYXBwZW5kX3ZhbHVlX2NvbG9uX3NlcGFyYXRlZChlbnYs
ICdEWUxEX0lOU0VSVF9MSUJSQVJJRVMnLCAnL3Vzci9saWIvbGliZ21hbGxvYy5keWxpYicpCi0g
ICAgICAgICAgICAgICAgc2VsZi5fYXBwZW5kX3ZhbHVlX2NvbG9uX3NlcGFyYXRlZChlbnYsICdf
X1hQQ19EWUxEX0lOU0VSVF9MSUJSQVJJRVMnLCAnL3Vzci9saWIvbGliZ21hbGxvYy5keWxpYicp
Ci0gICAgICAgIGVudlsnWE1MX0NBVEFMT0dfRklMRVMnXSA9ICcnICAjIHdvcmsgYXJvdW5kIG1p
c3NpbmcgL2V0Yy9jYXRhbG9nIDxyZGFyOi8vcHJvYmxlbS80MjkyOTk1PgotICAgICAgICByZXR1
cm4gZW52Ci0KLSAgICBkZWYgb3BlcmF0aW5nX3N5c3RlbShzZWxmKToKLSAgICAgICAgcmV0dXJu
ICdpb3Mtc2ltdWxhdG9yJwotCi0gICAgZGVmIGNoZWNrX3N5c19kZXBzKHNlbGYsIG5lZWRzX2h0
dHApOgotICAgICAgICBpZiBub3Qgc2VsZi5zaW11bGF0b3JfcnVudGltZS5hdmFpbGFibGU6Ci0g
ICAgICAgICAgICBfbG9nLmVycm9yKCdUaGUgaU9TIFNpbXVsYXRvciBydW50aW1lIHdpdGggaWRl
bnRpZmllciAiezB9IiBjYW5ub3QgYmUgdXNlZCBiZWNhdXNlIGl0IGlzIHVuYXZhaWxhYmxlLicu
Zm9ybWF0KHNlbGYuc2ltdWxhdG9yX3J1bnRpbWUuaWRlbnRpZmllcikpCi0gICAgICAgICAgICBy
ZXR1cm4gRmFsc2UKLSAgICAgICAgcmV0dXJuIHN1cGVyKElPU1NpbXVsYXRvclBvcnQsIHNlbGYp
LmNoZWNrX3N5c19kZXBzKG5lZWRzX2h0dHApCi0KLSAgICBTVUJQUk9DRVNTX0NSQVNIX1JFR0VY
ID0gcmUuY29tcGlsZSgnI0NSQVNIRUQgLSAoP1A8c3VicHJvY2Vzc19uYW1lPlxTKykgXChwaWQg
KD9QPHN1YnByb2Nlc3NfcGlkPlxkKylcKScpCi0KLSAgICBkZWYgX3VzaW5nX2RlZGljYXRlZF9z
aW11bGF0b3JzKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5nZXRfb3B0aW9uKCdkZWRpY2F0
ZWRfc2ltdWxhdG9ycycpCi0KLSAgICBkZWYgX2NyZWF0ZV9kZXZpY2Uoc2VsZiwgbnVtYmVyKToK
LSAgICAgICAgcmV0dXJuIFNpbXVsYXRvci5jcmVhdGVfZGV2aWNlKG51bWJlciwgc2VsZi5zaW11
bGF0b3JfZGV2aWNlX3R5cGUoKSwgc2VsZi5zaW11bGF0b3JfcnVudGltZSkKLQotICAgIGRlZiBf
cmVtb3ZlX2RldmljZShzZWxmLCBudW1iZXIpOgotICAgICAgICBTaW11bGF0b3IucmVtb3ZlX2Rl
dmljZShudW1iZXIpCisgICAgZGVmIHVzaW5nX211bHRpcGxlX2RldmljZXMoc2VsZik6CisgICAg
ICAgIHJldHVybiBGYWxzZQogCiAgICAgZGVmIF90ZXN0aW5nX2RldmljZShzZWxmLCBudW1iZXIp
OgotICAgICAgICByZXR1cm4gU2ltdWxhdG9yLmRldmljZV9udW1iZXIobnVtYmVyKQotCi0gICAg
IyBGSVhNRTogVGhpcyBpcyBvbmx5IGV4cG9zZWQgc28gdGhhdCBTaW11bGF0b3JQcm9jZXNzIGNh
biB1c2UgaXQuCi0gICAgZGVmIGRldmljZV9pZF9mb3Jfd29ya2VyX251bWJlcihzZWxmLCBudW1i
ZXIpOgorICAgICAgICBkZXZpY2UgPSBzZWxmLl9kZXZpY2VfbWFwKClbbnVtYmVyXQorICAgICAg
ICBpZiBub3QgZGV2aWNlOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdEZXZpY2Ug
YXQge30gY291bGQgbm90IGJlIGZvdW5kJy5mb3JtYXQobnVtYmVyKSkKKyAgICAgICAgcmV0dXJu
IGRldmljZQorCisgICAgZGVmIGRldmljZV9mb3Jfd29ya2VyX251bWJlcihzZWxmLCBudW1iZXIp
OgorICAgICAgICBpZiBudW1iZXIgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVF
cnJvcignTm8gd29ya2VyIG51bWJlciBnaXZlbiwgY2Fubm90IG1hcCBkZXZpY2VzLicpCiAgICAg
ICAgIGlmIHNlbGYuX3ByaW50aW5nX2NtZF9saW5lOgotICAgICAgICAgICAgcmV0dXJuICc8ZHVt
bXkgaWQ+JwotICAgICAgICBpZiBzZWxmLl91c2luZ19kZWRpY2F0ZWRfc2ltdWxhdG9ycygpOgot
ICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3Rlc3RpbmdfZGV2aWNlKG51bWJlcikudWRpZAotICAg
ICAgICByZXR1cm4gc2VsZi5fY3VycmVudF9kZXZpY2UudWRpZAotCi0gICAgZGVmIGdldF9zaW11
bGF0b3JfcGF0aChzZWxmLCBzdWZmaXg9IiIpOgotICAgICAgICByZXR1cm4gb3MucGF0aC5qb2lu
KHNlbGYuU0lNVUxBVE9SX0RJUkVDVE9SWSwgIlNpbXVsYXRvciIgKyBzdHIoc3VmZml4KSArICIu
YXBwIikKLQotICAgIGRlZiBkaWZmX2ltYWdlKHNlbGYsIGV4cGVjdGVkX2NvbnRlbnRzLCBhY3R1
YWxfY29udGVudHMsIHRvbGVyYW5jZT1Ob25lKToKLSAgICAgICAgaWYgbm90IGFjdHVhbF9jb250
ZW50cyBhbmQgbm90IGV4cGVjdGVkX2NvbnRlbnRzOgotICAgICAgICAgICAgcmV0dXJuIChOb25l
LCAwLCBOb25lKQotICAgICAgICBpZiBub3QgYWN0dWFsX2NvbnRlbnRzIG9yIG5vdCBleHBlY3Rl
ZF9jb250ZW50czoKLSAgICAgICAgICAgIHJldHVybiAoVHJ1ZSwgMCwgTm9uZSkKLSAgICAgICAg
aWYgbm90IHNlbGYuX2ltYWdlX2RpZmZlcjoKLSAgICAgICAgICAgIHNlbGYuX2ltYWdlX2RpZmZl
ciA9IGltYWdlX2RpZmYuSU9TU2ltdWxhdG9ySW1hZ2VEaWZmZXIoc2VsZikKLSAgICAgICAgc2Vs
Zi5zZXRfb3B0aW9uX2RlZmF1bHQoJ3RvbGVyYW5jZScsIDAuMSkKLSAgICAgICAgaWYgdG9sZXJh
bmNlIGlzIE5vbmU6Ci0gICAgICAgICAgICB0b2xlcmFuY2UgPSBzZWxmLmdldF9vcHRpb24oJ3Rv
bGVyYW5jZScpCi0gICAgICAgIHJldHVybiBzZWxmLl9pbWFnZV9kaWZmZXIuZGlmZl9pbWFnZShl
eHBlY3RlZF9jb250ZW50cywgYWN0dWFsX2NvbnRlbnRzLCB0b2xlcmFuY2UpCi0KLSAgICBkZWYg
cmVzZXRfcHJlZmVyZW5jZXMoc2VsZik6Ci0gICAgICAgIF9sb2cuZGVidWcoInJlc2V0X3ByZWZl
cmVuY2VzIikKLSAgICAgICAgc2VsZi5fcXVpdF9pb3Nfc2ltdWxhdG9yKCkKLSAgICAgICAgIyBN
YXliZSB0aGlzIHNob3VsZCBkZWxldGUgYWxsIGRldmljZXMgdGhhdCB3ZSd2ZSBjcmVhdGVkPwot
Ci0gICAgZGVmIG5tX2NvbW1hbmQoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLnhjcnVuX2Zp
bmQoJ25tJykKLQotICAgIEBwcm9wZXJ0eQotICAgIEBtZW1vaXplZAotICAgIGRlZiBkZXZlbG9w
ZXJfZGlyKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5k
KFsneGNvZGUtc2VsZWN0JywgJy0tcHJpbnQtcGF0aCddKS5yc3RyaXAoKQotCi0gICAgZGVmIGxv
Z2dpbmdfcGF0dGVybnNfdG9fc3RyaXAoc2VsZik6Ci0gICAgICAgIHJldHVybiBbXQotCi0gICAg
ZGVmIHN0ZGVycl9wYXR0ZXJuc190b19zdHJpcChzZWxmKToKLSAgICAgICAgcmV0dXJuIFtdCi0K
LSAgICBkZWYgX2NyZWF0ZVNpbXVsYXRvckFwcHMoc2VsZik6Ci0gICAgICAgIGZvciBpIGluIHhy
YW5nZShzZWxmLmNoaWxkX3Byb2Nlc3NlcygpKToKLSAgICAgICAgICAgIHNlbGYuX2NyZWF0ZVNp
bXVsYXRvckFwcChpKQotCi0gICAgZGVmIF9jcmVhdGVTaW11bGF0b3JBcHAoc2VsZiwgc3VmZml4
KToKLSAgICAgICAgZGVzdGluYXRpb24gPSBzZWxmLmdldF9zaW11bGF0b3JfcGF0aChzdWZmaXgp
Ci0gICAgICAgIF9sb2cuaW5mbygiQ3JlYXRpbmcgYXBwOiIgKyBkZXN0aW5hdGlvbikKLSAgICAg
ICAgaWYgb3MucGF0aC5leGlzdHMoZGVzdGluYXRpb24pOgotICAgICAgICAgICAgc2h1dGlsLnJt
dHJlZShkZXN0aW5hdGlvbiwgaWdub3JlX2Vycm9ycz1UcnVlKQotICAgICAgICBzaW11bGF0b3Jf
YXBwX3BhdGggPSBzZWxmLmRldmVsb3Blcl9kaXIgKyAiL0FwcGxpY2F0aW9ucy9TaW11bGF0b3Iu
YXBwIgotICAgICAgICBzaHV0aWwuY29weXRyZWUoc2ltdWxhdG9yX2FwcF9wYXRoLCBkZXN0aW5h
dGlvbikKLQotICAgICAgICAjIFVwZGF0ZSBhcHAncyBwYWNrYWdlLW5hbWUgaW5zaWRlIHBsaXN0
IGFuZCByZS1jb2RlLXNpZ24gaXQKLSAgICAgICAgcGxpc3RfcGF0aCA9IGRlc3RpbmF0aW9uICsg
Ii9Db250ZW50cy9JbmZvLnBsaXN0IgotICAgICAgICBjb21tYW5kID0gIlNldCBDRkJ1bmRsZUlk
ZW50aWZpZXIgY29tLmFwcGxlLmlwaG9uZXNpbXVsYXRvciIgKyBzdHIoc3VmZml4KQotICAgICAg
ICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbIi91c3IvbGliZXhlYy9QbGlzdEJ1ZGR5IiwgIi1j
IiwgY29tbWFuZCwgcGxpc3RfcGF0aF0pCi0gICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0
KFsiaW5zdGFsbF9uYW1lX3Rvb2wiLCAiLWFkZF9ycGF0aCIsIHNlbGYuZGV2ZWxvcGVyX2RpciAr
ICIvTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy8iLCBkZXN0aW5hdGlvbiArICIvQ29udGVudHMv
TWFjT1MvU2ltdWxhdG9yIl0pCi0gICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsiaW5z
dGFsbF9uYW1lX3Rvb2wiLCAiLWFkZF9ycGF0aCIsIHNlbGYuZGV2ZWxvcGVyX2RpciArICIvLi4v
RnJhbWV3b3Jrcy8iLCBkZXN0aW5hdGlvbiArICIvQ29udGVudHMvTWFjT1MvU2ltdWxhdG9yIl0p
Ci0gICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsiY29kZXNpZ24iLCAiLWZzIiwgIi0i
LCBkZXN0aW5hdGlvbl0pCi0gICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFtzZWxmLkxT
UkVHSVNURVJfUEFUSCwgIi1mIiwgZGVzdGluYXRpb25dKQorICAgICAgICAgICAgcmV0dXJuIE5v
bmUKKyAgICAgICAgIyBXaGVuIHVzaW5nIHNpbXVsYXRlZCBkZXZpY2VzLCB0aGlzIG1lYW5zIHdl
YmtpdHB5IGlzIG1hbmFnaW5nIHRoZSBkZXZpY2VzLgorICAgICAgICBpZiBzZWxmLnVzaW5nX211
bHRpcGxlX2RldmljZXMoKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl90ZXN0aW5nX2Rldmlj
ZShudW1iZXIpCisgICAgICAgIHJldHVybiBzZWxmLl9jdXJyZW50X2RldmljZQpJbmRleDogVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19kZXZpY2UucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19kZXZpY2UucHkJKG5vbmV4aXN0ZW50KQorKysg
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19kZXZpY2UucHkJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw1MiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1l
dDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisj
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKK2ltcG9ydCBsb2dnaW5nCisKK2Zyb20gd2Via2l0cHkucG9ydC5pb3MgaW1wb3J0IElP
U1BvcnQKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisKK2NsYXNzIElP
U0RldmljZVBvcnQoSU9TUG9ydCk6CisgICAgcG9ydF9uYW1lID0gImlvcyIKKworICAgIEFSQ0hJ
VEVDVFVSRVMgPSBbJ2FybXY3JywgJ2FybXY3cycsICdhcm02NCddCisgICAgREVGQVVMVF9BUkNI
SVRFQ1RVUkUgPSAnYXJtNjQnCisgICAgVkVSU0lPTl9GQUxMQkFDS19PUkRFUiA9IFsnaW9zLTcn
LCAnaW9zLTgnLCAnaW9zLTknLCAnaW9zLTEwJ10KKworICAgIEBjbGFzc21ldGhvZAorICAgIGRl
ZiBkZXRlcm1pbmVfZnVsbF9wb3J0X25hbWUoY2xzLCBob3N0LCBvcHRpb25zLCBwb3J0X25hbWUp
OgorICAgICAgICBpZiBwb3J0X25hbWUgPT0gY2xzLnBvcnRfbmFtZToKKyAgICAgICAgICAgIGlw
aG9uZW9zX3Nka192ZXJzaW9uID0gaG9zdC5wbGF0Zm9ybS54Y29kZV9zZGtfdmVyc2lvbignaXBo
b25lb3MnKQorICAgICAgICAgICAgaWYgbm90IGlwaG9uZW9zX3Nka192ZXJzaW9uOgorICAgICAg
ICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiUGxlYXNlIGluc3RhbGwgdGhlIGlPUyBTREsuIikK
KyAgICAgICAgICAgIG1ham9yX3ZlcnNpb25fbnVtYmVyID0gaXBob25lb3Nfc2RrX3ZlcnNpb24u
c3BsaXQoJy4nKVswXQorICAgICAgICAgICAgcG9ydF9uYW1lID0gcG9ydF9uYW1lICsgJy0nICsg
bWFqb3JfdmVyc2lvbl9udW1iZXIKKyAgICAgICAgcmV0dXJuIHBvcnRfbmFtZQorCisgICAgIyBE
ZXNwaXRlIHRoZWlyIG5hbWVzLCB0aGVzZSBmbGFncyBkbyBub3QgYWN0dWFsbHkgZ2V0IHBhc3Nl
ZCBhbGwgdGhlIHdheSBkb3duIHRvIHdlYmtpdC1idWlsZC4KKyAgICBkZWYgX2J1aWxkX2RyaXZl
cl9mbGFncyhzZWxmKToKKyAgICAgICAgcmV0dXJuIFsnLS1zZGsnLCAnaXBob25lb3MnXSArIChb
J0FSQ0hTPSVzJyAlIHNlbGYuYXJjaGl0ZWN0dXJlKCldIGlmIHNlbGYuYXJjaGl0ZWN0dXJlKCkg
ZWxzZSBbXSkKKworICAgIGRlZiBvcGVyYXRpbmdfc3lzdGVtKHNlbGYpOgorICAgICAgICByZXR1
cm4gJ2lvcycKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Nfc2ltdWxhdG9y
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Nfc2ltdWxh
dG9yLnB5CShyZXZpc2lvbiAyMTMxNjEpCShmcm9tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9y
dC9pb3MucHk6MjEzMTYxKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19zaW11
bGF0b3IucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MzMgQEAKKyMgQ29weXJpZ2h0IChD
KSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgaXRlcnRvb2xzCitpbXBvcnQg
bG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBzdWJw
cm9jZXNzCitpbXBvcnQgdGltZQorCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5tZW1vaXplZCBpbXBv
cnQgbWVtb2l6ZWQKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0
IFNjcmlwdEVycm9yCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMudGVzdF9jb25m
aWd1cmF0aW9uIGltcG9ydCBUZXN0Q29uZmlndXJhdGlvbgorZnJvbSB3ZWJraXRweS5wb3J0IGlt
cG9ydCBjb25maWcgYXMgcG9ydF9jb25maWcKK2Zyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgZHJp
dmVyLCBpbWFnZV9kaWZmCitmcm9tIHdlYmtpdHB5LnBvcnQuZGFyd2luIGltcG9ydCBEYXJ3aW5Q
b3J0Citmcm9tIHdlYmtpdHB5LnBvcnQuc2ltdWxhdG9yX3Byb2Nlc3MgaW1wb3J0IFNpbXVsYXRv
clByb2Nlc3MKK2Zyb20gd2Via2l0cHkueGNvZGUuc2ltdWxhdG9yIGltcG9ydCBTaW11bGF0b3Is
IFJ1bnRpbWUsIERldmljZVR5cGUKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5jcmFzaGxv
Z3MgaW1wb3J0IENyYXNoTG9ncworCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVf
XykKKworCitjbGFzcyBJT1NQb3J0KERhcndpblBvcnQpOgorICAgIHBvcnRfbmFtZSA9ICJpb3Mi
CisKKyAgICBBUkNISVRFQ1RVUkVTID0gWydhcm12NycsICdhcm12N3MnLCAnYXJtNjQnXQorICAg
IERFRkFVTFRfQVJDSElURUNUVVJFID0gJ2FybTY0JworICAgIFZFUlNJT05fRkFMTEJBQ0tfT1JE
RVIgPSBbJ2lvcy03JywgJ2lvcy04JywgJ2lvcy05JywgJ2lvcy0xMCddCisKKyAgICBAY2xhc3Nt
ZXRob2QKKyAgICBkZWYgZGV0ZXJtaW5lX2Z1bGxfcG9ydF9uYW1lKGNscywgaG9zdCwgb3B0aW9u
cywgcG9ydF9uYW1lKToKKyAgICAgICAgaWYgcG9ydF9uYW1lID09IGNscy5wb3J0X25hbWU6Cisg
ICAgICAgICAgICBpcGhvbmVvc19zZGtfdmVyc2lvbiA9IGhvc3QucGxhdGZvcm0ueGNvZGVfc2Rr
X3ZlcnNpb24oJ2lwaG9uZW9zJykKKyAgICAgICAgICAgIGlmIG5vdCBpcGhvbmVvc19zZGtfdmVy
c2lvbjoKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlBsZWFzZSBpbnN0YWxsIHRo
ZSBpT1MgU0RLLiIpCisgICAgICAgICAgICBtYWpvcl92ZXJzaW9uX251bWJlciA9IGlwaG9uZW9z
X3Nka192ZXJzaW9uLnNwbGl0KCcuJylbMF0KKyAgICAgICAgICAgIHBvcnRfbmFtZSA9IHBvcnRf
bmFtZSArICctJyArIG1ham9yX3ZlcnNpb25fbnVtYmVyCisgICAgICAgIHJldHVybiBwb3J0X25h
bWUKKworICAgICMgRGVzcGl0ZSB0aGVpciBuYW1lcywgdGhlc2UgZmxhZ3MgZG8gbm90IGFjdHVh
bGx5IGdldCBwYXNzZWQgYWxsIHRoZSB3YXkgZG93biB0byB3ZWJraXQtYnVpbGQuCisgICAgZGVm
IF9idWlsZF9kcml2ZXJfZmxhZ3Moc2VsZik6CisgICAgICAgIHJldHVybiBbJy0tc2RrJywgJ2lw
aG9uZW9zJ10gKyAoWydBUkNIUz0lcycgJSBzZWxmLmFyY2hpdGVjdHVyZSgpXSBpZiBzZWxmLmFy
Y2hpdGVjdHVyZSgpIGVsc2UgW10pCisKKyAgICBkZWYgb3BlcmF0aW5nX3N5c3RlbShzZWxmKToK
KyAgICAgICAgcmV0dXJuICdpb3MnCisKKworY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Q
b3J0KToKKyAgICBwb3J0X25hbWUgPSAiaW9zLXNpbXVsYXRvciIKKworICAgIEZVVFVSRV9WRVJT
SU9OID0gJ2Z1dHVyZScKKyAgICBBUkNISVRFQ1RVUkVTID0gWyd4ODZfNjQnLCAneDg2J10KKyAg
ICBERUZBVUxUX0FSQ0hJVEVDVFVSRSA9ICd4ODZfNjQnCisKKyAgICBERUZBVUxUX0RFVklDRV9D
TEFTUyA9ICdpcGhvbmUnCisgICAgQ1VTVE9NX0RFVklDRV9DTEFTU0VTID0gWydpcGFkJywgJ2lw
aG9uZTcnXQorICAgIFNESyA9ICdpcGhvbmVzaW11bGF0b3InCisKKyAgICBTSU1VTEFUT1JfQlVO
RExFX0lEID0gJ2NvbS5hcHBsZS5pcGhvbmVzaW11bGF0b3InCisgICAgU0lNVUxBVE9SX0RJUkVD
VE9SWSA9ICIvdG1wL1dlYktpdFRlc3RpbmdTaW11bGF0b3JzLyIKKyAgICBMU1JFR0lTVEVSX1BB
VEggPSAiL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ29yZVNlcnZpY2VzLmZyYW1ld29yay9G
cmFtZXdvcmtzL0xhdW5jaFNlcnZpY2VzLmZyYW1ld29yay9WZXJzaW9ucy9DdXJyZW50L1N1cHBv
cnQvbHNyZWdpc3RlciIKKyAgICBQUk9DRVNTX0NPVU5UX0VTVElNQVRFX1BFUl9TSU1VTEFUT1Jf
SU5TVEFOQ0UgPSAxMDAKKworICAgIERFVklDRV9DTEFTU19NQVAgPSB7CisgICAgICAgICd4ODZf
NjQnOiB7CisgICAgICAgICAgICAnaXBob25lJzogJ2lQaG9uZSA1cycsCisgICAgICAgICAgICAn
aXBob25lNyc6ICdpUGhvbmUgNycsCisgICAgICAgICAgICAnaXBhZCc6ICdpUGFkIEFpcicKKyAg
ICAgICAgfSwKKyAgICAgICAgJ3g4Nic6IHsKKyAgICAgICAgICAgICdpcGhvbmUnOiAnaVBob25l
IDUnLAorICAgICAgICAgICAgJ2lwYWQnOiAnaVBhZCBSZXRpbmEnCisgICAgICAgIH0sCisgICAg
fQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnRfbmFtZSwgKiprd2FyZ3MpOgor
ICAgICAgICBEYXJ3aW5Qb3J0Ll9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnRfbmFtZSwgKiprd2Fy
Z3MpCisgICAgICAgIHNlbGYuX3Rlc3RfcnVubmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBTaW11
bGF0b3JQcm9jZXNzCisKKyAgICAgICAgb3B0aW9uYWxfZGV2aWNlX2NsYXNzID0gc2VsZi5nZXRf
b3B0aW9uKCdkZXZpY2VfY2xhc3MnKQorICAgICAgICBzZWxmLl9wcmludGluZ19jbWRfbGluZSA9
IEZhbHNlCisgICAgICAgIHNlbGYuX2RldmljZV9jbGFzcyA9IG9wdGlvbmFsX2RldmljZV9jbGFz
cyBpZiBvcHRpb25hbF9kZXZpY2VfY2xhc3MgZWxzZSBzZWxmLkRFRkFVTFRfREVWSUNFX0NMQVNT
CisgICAgICAgIF9sb2cuZGVidWcoJ0lPU1NpbXVsYXRvclBvcnQgX2RldmljZV9jbGFzcyBpcyAl
cycsIHNlbGYuX2RldmljZV9jbGFzcykKKworICAgICAgICBzZWxmLl9jdXJyZW50X2RldmljZSA9
IFNpbXVsYXRvcihob3N0KS5jdXJyZW50X2RldmljZSgpCisgICAgICAgIGlmIG5vdCBzZWxmLl9j
dXJyZW50X2RldmljZToKKyAgICAgICAgICAgIHNlbGYuc2V0X29wdGlvbignZGVkaWNhdGVkX3Np
bXVsYXRvcnMnLCBUcnVlKQorICAgICAgICBpZiBub3Qgc2VsZi5nZXRfb3B0aW9uKCdkZWRpY2F0
ZWRfc2ltdWxhdG9ycycpOgorICAgICAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCdjaGlsZF9w
cm9jZXNzZXMnKSA+IDE6CisgICAgICAgICAgICAgICAgX2xvZy53YXJuKCdDYW5ub3QgaGF2ZSBt
b3JlIHRoYW4gb25lIGNoaWxkIHByb2Nlc3Mgd2hlbiB1c2luZyBhIHJ1bm5pbmcgc2ltdWxhdG9y
LiAgU2V0dGluZyBjaGlsZF9wcm9jZXNzZXMgdG8gMS4nKQorICAgICAgICAgICAgc2VsZi5zZXRf
b3B0aW9uKCdjaGlsZF9wcm9jZXNzZXMnLCAxKQorCisgICAgZGVmIGRyaXZlcl9uYW1lKHNlbGYp
OgorICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ2RyaXZlcl9uYW1lJyk6CisgICAgICAgICAg
ICByZXR1cm4gc2VsZi5nZXRfb3B0aW9uKCdkcml2ZXJfbmFtZScpCisgICAgICAgIGlmIHNlbGYu
Z2V0X29wdGlvbignd2Via2l0X3Rlc3RfcnVubmVyJyk6CisgICAgICAgICAgICByZXR1cm4gJ1dl
YktpdFRlc3RSdW5uZXJBcHAuYXBwJworICAgICAgICByZXR1cm4gJ0R1bXBSZW5kZXJUcmVlLmFw
cCcKKworICAgIGRlZiBkcml2ZXJfY21kX2xpbmVfZm9yX2xvZ2dpbmcoc2VsZik6CisgICAgICAg
ICMgQXZvaWQgc3Bpbm5pbmcgdXAgZGV2aWNlcyBqdXN0IGZvciBsb2dnaW5nIHRoZSBjb21tYW5k
bGluZS4KKyAgICAgICAgc2VsZi5fcHJpbnRpbmdfY21kX2xpbmUgPSBUcnVlCisgICAgICAgIHJl
c3VsdCA9IHN1cGVyKElPU1NpbXVsYXRvclBvcnQsIHNlbGYpLmRyaXZlcl9jbWRfbGluZV9mb3Jf
bG9nZ2luZygpCisgICAgICAgIHNlbGYuX3ByaW50aW5nX2NtZF9saW5lID0gRmFsc2UKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdAorCisgICAgQHByb3BlcnR5CisgICAgQG1lbW9pemVkCisgICAgZGVm
IHNpbXVsYXRvcl9ydW50aW1lKHNlbGYpOgorICAgICAgICBydW50aW1lX2lkZW50aWZpZXIgPSBz
ZWxmLmdldF9vcHRpb24oJ3J1bnRpbWUnKQorICAgICAgICBpZiBydW50aW1lX2lkZW50aWZpZXI6
CisgICAgICAgICAgICBydW50aW1lID0gUnVudGltZS5mcm9tX2lkZW50aWZpZXIocnVudGltZV9p
ZGVudGlmaWVyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcnVudGltZSA9IFJ1bnRpbWUu
ZnJvbV92ZXJzaW9uX3N0cmluZyhzZWxmLmhvc3QucGxhdGZvcm0ueGNvZGVfc2RrX3ZlcnNpb24o
J2lwaG9uZXNpbXVsYXRvcicpKQorICAgICAgICByZXR1cm4gcnVudGltZQorCisgICAgZGVmIHNp
bXVsYXRvcl9kZXZpY2VfdHlwZShzZWxmKToKKyAgICAgICAgZGV2aWNlX3R5cGVfaWRlbnRpZmll
ciA9IHNlbGYuZ2V0X29wdGlvbignZGV2aWNlX3R5cGUnKQorICAgICAgICBpZiBkZXZpY2VfdHlw
ZV9pZGVudGlmaWVyOgorICAgICAgICAgICAgX2xvZy5kZWJ1Zygnc2ltdWxhdG9yX2RldmljZV90
eXBlIGZvciBkZXZpY2UgaWRlbnRpZmllciAlcycsIGRldmljZV90eXBlX2lkZW50aWZpZXIpCisg
ICAgICAgICAgICBkZXZpY2VfdHlwZSA9IERldmljZVR5cGUuZnJvbV9pZGVudGlmaWVyKGRldmlj
ZV90eXBlX2lkZW50aWZpZXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBfbG9nLmRlYnVn
KCdzaW11bGF0b3JfZGV2aWNlX3R5cGUgZm9yIGRldmljZSAlcycsIHNlbGYuX2RldmljZV9jbGFz
cykKKyAgICAgICAgICAgIGRldmljZV9uYW1lID0gc2VsZi5ERVZJQ0VfQ0xBU1NfTUFQW3NlbGYu
YXJjaGl0ZWN0dXJlKCldW3NlbGYuX2RldmljZV9jbGFzc10KKyAgICAgICAgICAgIGlmIG5vdCBk
ZXZpY2VfbmFtZToKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0ZhaWxlZCB0byBm
aW5kIGRldmljZSBmb3IgYXJjaGl0ZWN0dXJlIHt9IGFuZCBkZXZpY2UgY2xhc3Mge30nLmZvcm1h
dChzZWxmLmFyY2hpdGVjdHVyZSgpKSwgc2VsZi5fZGV2aWNlX2NsYXNzKQorICAgICAgICAgICAg
ZGV2aWNlX3R5cGUgPSBEZXZpY2VUeXBlLmZyb21fbmFtZShkZXZpY2VfbmFtZSkKKyAgICAgICAg
cmV0dXJuIGRldmljZV90eXBlCisKKyAgICBAbWVtb2l6ZWQKKyAgICBkZWYgY2hpbGRfcHJvY2Vz
c2VzKHNlbGYpOgorICAgICAgICByZXR1cm4gaW50KHNlbGYuZ2V0X29wdGlvbignY2hpbGRfcHJv
Y2Vzc2VzJykpCisKKyAgICBAbWVtb2l6ZWQKKyAgICBkZWYgZGVmYXVsdF9jaGlsZF9wcm9jZXNz
ZXMoc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgbnVtYmVyIG9mIFNpbXVsYXRvcnMgaW5z
dGFuY2VzIHRvIHVzZSBmb3IgdGhpcyBwb3J0LiIiIgorICAgICAgICBiZXN0X2NoaWxkX3Byb2Nl
c3NfY291bnRfZm9yX2NwdSA9IHNlbGYuX2V4ZWN1dGl2ZS5jcHVfY291bnQoKSAvIDIKKyAgICAg
ICAgc3lzdGVtX3Byb2Nlc3NfY291bnRfbGltaXQgPSBpbnQoc3VicHJvY2Vzcy5jaGVja19vdXRw
dXQoWyJ1bGltaXQiLCAiLXUiXSkuc3RyaXAoKSkKKyAgICAgICAgY3VycmVudF9wcm9jZXNzX2Nv
dW50ID0gbGVuKHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsicHMiLCAiYXV4Il0pLnN0cmlwKCku
c3BsaXQoJ1xuJykpCisgICAgICAgIF9sb2cuZGVidWcoJ1Byb2Nlc3MgbGltaXQ6ICVkLCBjdXJy
ZW50ICNwcm9jZXNzZXM6ICVkJyAlIChzeXN0ZW1fcHJvY2Vzc19jb3VudF9saW1pdCwgY3VycmVu
dF9wcm9jZXNzX2NvdW50KSkKKyAgICAgICAgbWF4aW11bV9zaW11bGF0b3JfY291bnRfb25fdGhp
c19zeXN0ZW0gPSAoc3lzdGVtX3Byb2Nlc3NfY291bnRfbGltaXQgLSBjdXJyZW50X3Byb2Nlc3Nf
Y291bnQpIC8vIHNlbGYuUFJPQ0VTU19DT1VOVF9FU1RJTUFURV9QRVJfU0lNVUxBVE9SX0lOU1RB
TkNFCisgICAgICAgICMgRklYTUU6IFdlIHNob3VsZCBhbHNvIHRha2UgaW50byBhY2NvdW50IHRo
ZSBhdmFpbGFibGUgUkFNLgorCisgICAgICAgIGlmIChtYXhpbXVtX3NpbXVsYXRvcl9jb3VudF9v
bl90aGlzX3N5c3RlbSA8IGJlc3RfY2hpbGRfcHJvY2Vzc19jb3VudF9mb3JfY3B1KToKKyAgICAg
ICAgICAgIF9sb2cud2FybigiVGhpcyBtYWNoaW5lIGNvdWxkIHN1cHBvcnQgJXMgc2ltdWxhdG9y
cywgYnV0IGlzIG9ubHkgY29uZmlndXJlZCBmb3IgJXMuIgorICAgICAgICAgICAgICAgICUgKGJl
c3RfY2hpbGRfcHJvY2Vzc19jb3VudF9mb3JfY3B1LCBtYXhpbXVtX3NpbXVsYXRvcl9jb3VudF9v
bl90aGlzX3N5c3RlbSkpCisgICAgICAgICAgICBfbG9nLndhcm4oJ1BsZWFzZSBzZWUgPGh0dHBz
Oi8vdHJhYy53ZWJraXQub3JnL3dpa2kvSW5jcmVhc2luZ0tlcm5lbExpbWl0cz4uJykKKworICAg
ICAgICBpZiBtYXhpbXVtX3NpbXVsYXRvcl9jb3VudF9vbl90aGlzX3N5c3RlbSA9PSAwOgorICAg
ICAgICAgICAgbWF4aW11bV9zaW11bGF0b3JfY291bnRfb25fdGhpc19zeXN0ZW0gPSAxCisKKyAg
ICAgICAgcmV0dXJuIG1pbihtYXhpbXVtX3NpbXVsYXRvcl9jb3VudF9vbl90aGlzX3N5c3RlbSwg
YmVzdF9jaGlsZF9wcm9jZXNzX2NvdW50X2Zvcl9jcHUpCisKKyAgICBkZWYgX2dldF9jcmFzaF9s
b2coc2VsZiwgbmFtZSwgcGlkLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJfdGhhbiwgdGltZV9mbj10
aW1lLnRpbWUsIHNsZWVwX2ZuPXRpbWUuc2xlZXAsIHdhaXRfZm9yX2xvZz1UcnVlKToKKyAgICAg
ICAgdGltZV9mbiA9IHRpbWVfZm4gb3IgdGltZS50aW1lCisgICAgICAgIHNsZWVwX2ZuID0gc2xl
ZXBfZm4gb3IgdGltZS5zbGVlcAorCisgICAgICAgICMgRklYTUU6IFdlIHNob3VsZCBjb2xsZWN0
IHRoZSBhY3R1YWwgY3Jhc2ggbG9nIGZvciBEdW1wUmVuZGVyVHJlZS5hcHAgYmVjYXVzZSBpdCBp
bmNsdWRlcyBtb3JlCisgICAgICAgICMgaW5mb3JtYXRpb24gKGUuZy4gZXhjZXB0aW9uIGNvZGVz
KSB0aGFuIGlzIGF2YWlsYWJsZSBpbiB0aGUgc3RhY2sgdHJhY2Ugd3JpdHRlbiB0byBzdGFuZGFy
ZCBlcnJvci4KKyAgICAgICAgc3RkZXJyX2xpbmVzID0gW10KKyAgICAgICAgY3Jhc2hlZF9zdWJw
cm9jZXNzX25hbWVfYW5kX3BpZCA9IE5vbmUgICMgZS5nLiAoJ0R1bXBSZW5kZXJUcmVlLmFwcCcs
IDEyMzQpCisgICAgICAgIGZvciBsaW5lIGluIChzdGRlcnIgb3IgJycpLnNwbGl0bGluZXMoKToK
KyAgICAgICAgICAgIGlmIG5vdCBjcmFzaGVkX3N1YnByb2Nlc3NfbmFtZV9hbmRfcGlkOgorICAg
ICAgICAgICAgICAgIG1hdGNoID0gc2VsZi5TVUJQUk9DRVNTX0NSQVNIX1JFR0VYLm1hdGNoKGxp
bmUpCisgICAgICAgICAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICAgICAgICAgIGNyYXNo
ZWRfc3VicHJvY2Vzc19uYW1lX2FuZF9waWQgPSAobWF0Y2guZ3JvdXAoJ3N1YnByb2Nlc3NfbmFt
ZScpLCBpbnQobWF0Y2guZ3JvdXAoJ3N1YnByb2Nlc3NfcGlkJykpKQorICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZQorICAgICAgICAgICAgc3RkZXJyX2xpbmVzLmFwcGVuZChsaW5lKQorCisg
ICAgICAgIGlmIGNyYXNoZWRfc3VicHJvY2Vzc19uYW1lX2FuZF9waWQ6CisgICAgICAgICAgICBy
ZXR1cm4gc2VsZi5fZ2V0X2NyYXNoX2xvZyhjcmFzaGVkX3N1YnByb2Nlc3NfbmFtZV9hbmRfcGlk
WzBdLCBjcmFzaGVkX3N1YnByb2Nlc3NfbmFtZV9hbmRfcGlkWzFdLCBzdGRvdXQsCisgICAgICAg
ICAgICAgICAgJ1xuJy5qb2luKHN0ZGVycl9saW5lcyksIG5ld2VyX3RoYW4sIHRpbWVfZm4sIHNs
ZWVwX2ZuLCB3YWl0X2Zvcl9sb2cpCisKKyAgICAgICAgIyBBcHAgY3Jhc2hlZAorICAgICAgICBf
bG9nLmRlYnVnKCdsb29raW5nIGZvciBjcmFzaCBsb2cgZm9yICVzOiVzJyAlIChuYW1lLCBzdHIo
cGlkKSkpCisgICAgICAgIGNyYXNoX2xvZyA9ICcnCisgICAgICAgIGNyYXNoX2xvZ3MgPSBDcmFz
aExvZ3Moc2VsZi5ob3N0KQorICAgICAgICBub3cgPSB0aW1lX2ZuKCkKKyAgICAgICAgZGVhZGxp
bmUgPSBub3cgKyA1ICogaW50KHNlbGYuZ2V0X29wdGlvbignY2hpbGRfcHJvY2Vzc2VzJywgMSkp
CisgICAgICAgIHdoaWxlIG5vdCBjcmFzaF9sb2cgYW5kIG5vdyA8PSBkZWFkbGluZToKKyAgICAg
ICAgICAgIGNyYXNoX2xvZyA9IGNyYXNoX2xvZ3MuZmluZF9uZXdlc3RfbG9nKG5hbWUsIHBpZCwg
aW5jbHVkZV9lcnJvcnM9VHJ1ZSwgbmV3ZXJfdGhhbj1uZXdlcl90aGFuKQorICAgICAgICAgICAg
aWYgbm90IHdhaXRfZm9yX2xvZzoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAg
aWYgbm90IGNyYXNoX2xvZyBvciBub3QgW2xpbmUgZm9yIGxpbmUgaW4gY3Jhc2hfbG9nLnNwbGl0
bGluZXMoKSBpZiBub3QgbGluZS5zdGFydHN3aXRoKCdFUlJPUicpXToKKyAgICAgICAgICAgICAg
ICBzbGVlcF9mbigwLjEpCisgICAgICAgICAgICAgICAgbm93ID0gdGltZV9mbigpCisKKyAgICAg
ICAgaWYgbm90IGNyYXNoX2xvZzoKKyAgICAgICAgICAgIHJldHVybiBzdGRlcnIsIE5vbmUKKyAg
ICAgICAgcmV0dXJuIHN0ZGVyciwgY3Jhc2hfbG9nCisKKyAgICBkZWYgX2J1aWxkX2RyaXZlcl9m
bGFncyhzZWxmKToKKyAgICAgICAgYXJjaHMgPSBbJ0FSQ0hTPWkzODYnXSBpZiBzZWxmLmFyY2hp
dGVjdHVyZSgpID09ICd4ODYnIGVsc2UgW10KKyAgICAgICAgc2RrID0gWyctLXNkaycsICdpcGhv
bmVzaW11bGF0b3InXQorICAgICAgICByZXR1cm4gYXJjaHMgKyBzZGsKKworICAgIGRlZiBfZ2Vu
ZXJhdGVfYWxsX3Rlc3RfY29uZmlndXJhdGlvbnMoc2VsZik6CisgICAgICAgIGNvbmZpZ3VyYXRp
b25zID0gW10KKyAgICAgICAgZm9yIGJ1aWxkX3R5cGUgaW4gc2VsZi5BTExfQlVJTERfVFlQRVM6
CisgICAgICAgICAgICBmb3IgYXJjaGl0ZWN0dXJlIGluIHNlbGYuQVJDSElURUNUVVJFUzoKKyAg
ICAgICAgICAgICAgICBjb25maWd1cmF0aW9ucy5hcHBlbmQoVGVzdENvbmZpZ3VyYXRpb24odmVy
c2lvbj1zZWxmLl92ZXJzaW9uLCBhcmNoaXRlY3R1cmU9YXJjaGl0ZWN0dXJlLCBidWlsZF90eXBl
PWJ1aWxkX3R5cGUpKQorICAgICAgICByZXR1cm4gY29uZmlndXJhdGlvbnMKKworICAgIGRlZiBk
ZWZhdWx0X2Jhc2VsaW5lX3NlYXJjaF9wYXRoKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmdldF9v
cHRpb24oJ3dlYmtpdF90ZXN0X3J1bm5lcicpOgorICAgICAgICAgICAgZmFsbGJhY2tfbmFtZXMg
PSBbc2VsZi5fd2syX3BvcnRfbmFtZSgpXSArIFtzZWxmLnBvcnRfbmFtZV0gKyBbJ3drMiddCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICBmYWxsYmFja19uYW1lcyA9IFtzZWxmLnBvcnRfbmFt
ZSArICctd2sxJ10gKyBbc2VsZi5wb3J0X25hbWVdCisKKyAgICAgICAgcmV0dXJuIG1hcChzZWxm
Ll93ZWJraXRfYmFzZWxpbmVfcGF0aCwgZmFsbGJhY2tfbmFtZXMpCisKKyAgICBkZWYgX3NldF9k
ZXZpY2VfY2xhc3Moc2VsZiwgZGV2aWNlX2NsYXNzKToKKyAgICAgICAgc2VsZi5fZGV2aWNlX2Ns
YXNzID0gZGV2aWNlX2NsYXNzIGlmIGRldmljZV9jbGFzcyBlbHNlIHNlbGYuREVGQVVMVF9ERVZJ
Q0VfQ0xBU1MKKworICAgIGRlZiBfY3JlYXRlX3NpbXVsYXRvcnMoc2VsZik6CisgICAgICAgIGlm
IChzZWxmLmRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKCkgPCBzZWxmLmNoaWxkX3Byb2Nlc3Nlcygp
KToKKyAgICAgICAgICAgIF9sb2cud2FybignWW91IGhhdmUgc3BlY2lmaWVkIHZlcnkgaGlnaCB2
YWx1ZSh7MH0pIGZvciAtLWNoaWxkLXByb2Nlc3NlcycuZm9ybWF0KHNlbGYuY2hpbGRfcHJvY2Vz
c2VzKCkpKQorICAgICAgICAgICAgX2xvZy53YXJuKCdtYXhpbXVtIGNoaWxkLXByb2Nlc3NlcyB3
aGljaCBjYW4gYmUgc3VwcG9ydGVkIG9uIHRoaXMgc3lzdGVtIGFyZTogezB9Jy5mb3JtYXQoc2Vs
Zi5kZWZhdWx0X2NoaWxkX3Byb2Nlc3NlcygpKSkKKyAgICAgICAgICAgIF9sb2cud2FybignVGhp
cyBpcyB2ZXJ5IGxpa2VseSB0byBmYWlsLicpCisKKyAgICAgICAgaWYgc2VsZi5fdXNpbmdfZGVk
aWNhdGVkX3NpbXVsYXRvcnMoKToKKyAgICAgICAgICAgIHNlbGYuX2NyZWF0ZVNpbXVsYXRvckFw
cHMoKQorCisgICAgICAgICAgICBmb3IgaSBpbiB4cmFuZ2Uoc2VsZi5jaGlsZF9wcm9jZXNzZXMo
KSk6CisgICAgICAgICAgICAgICAgc2VsZi5fY3JlYXRlX2RldmljZShpKQorCisgICAgICAgICAg
ICBmb3IgaSBpbiB4cmFuZ2Uoc2VsZi5jaGlsZF9wcm9jZXNzZXMoKSk6CisgICAgICAgICAgICAg
ICAgZGV2aWNlX3VkaWQgPSBzZWxmLl90ZXN0aW5nX2RldmljZShpKS51ZGlkCisgICAgICAgICAg
ICAgICAgU2ltdWxhdG9yLndhaXRfdW50aWxfZGV2aWNlX2lzX2luX3N0YXRlKGRldmljZV91ZGlk
LCBTaW11bGF0b3IuRGV2aWNlU3RhdGUuU0hVVERPV04pCisgICAgICAgICAgICAgICAgU2ltdWxh
dG9yLnJlc2V0X2RldmljZShkZXZpY2VfdWRpZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IGFzc2VydChzZWxmLl9jdXJyZW50X2RldmljZSkKKyAgICAgICAgICAgIGlmIHNlbGYuX2N1cnJl
bnRfZGV2aWNlLm5hbWUgIT0gc2VsZi5zaW11bGF0b3JfZGV2aWNlX3R5cGUoKS5uYW1lOgorICAg
ICAgICAgICAgICAgIF9sb2cud2FybigiRXhwZWN0ZWQgc2ltdWxhdG9yIG9mIHR5cGUgJyIgKyBz
ZWxmLnNpbXVsYXRvcl9kZXZpY2VfdHlwZSgpLm5hbWUgKyAiJyBidXQgZm91bmQgc2ltdWxhdG9y
IG9mIHR5cGUgJyIgKyBzZWxmLl9jdXJyZW50X2RldmljZS5uYW1lICsgIiciKQorICAgICAgICAg
ICAgICAgIF9sb2cud2FybignVGhlIG5leHQgYmxvY2sgb2YgdGVzdHMgbWF5IGZhaWwgZHVlIHRv
IGRldmljZSBtaXMtbWF0Y2gnKQorCisgICAgZGVmIHNldHVwX3Rlc3RfcnVuKHNlbGYsIGRldmlj
ZV9jbGFzcz1Ob25lKToKKyAgICAgICAgbWFjX29zX3ZlcnNpb24gPSBzZWxmLmhvc3QucGxhdGZv
cm0ub3NfdmVyc2lvbgorCisgICAgICAgIHNlbGYuX3NldF9kZXZpY2VfY2xhc3MoZGV2aWNlX2Ns
YXNzKQorCisgICAgICAgIF9sb2cuZGVidWcoJycpCisgICAgICAgIF9sb2cuZGVidWcoJ3NldHVw
X3Rlc3RfcnVuIGZvciAlcycsIHNlbGYuX2RldmljZV9jbGFzcykKKworICAgICAgICBzZWxmLl9j
cmVhdGVfc2ltdWxhdG9ycygpCisKKyAgICAgICAgaWYgbm90IHNlbGYuX3VzaW5nX2RlZGljYXRl
ZF9zaW11bGF0b3JzKCk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBmb3IgaSBpbiB4
cmFuZ2Uoc2VsZi5jaGlsZF9wcm9jZXNzZXMoKSk6CisgICAgICAgICAgICBkZXZpY2VfdWRpZCA9
IHNlbGYuX3Rlc3RpbmdfZGV2aWNlKGkpLnVkaWQKKyAgICAgICAgICAgIF9sb2cuZGVidWcoJ3Rl
c3RpbmcgZGV2aWNlICVzIGhhcyB1ZGlkICVzJywgaSwgZGV2aWNlX3VkaWQpCisKKyAgICAgICAg
ICAgICMgRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8yMDkxNjE0MD4gU3dpdGNoIHRvIHVzaW5nIENv
cmVTaW11bGF0b3IuZnJhbWV3b3JrIGZvciBsYXVuY2hpbmcgYW5kIHF1aXR0aW5nIGlPUyBTaW11
bGF0b3IKKyAgICAgICAgICAgIHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbCisgICAgICAg
ICAgICAgICAgJ29wZW4nLCAnLWcnLCAnLWInLCBzZWxmLlNJTVVMQVRPUl9CVU5ETEVfSUQgKyBz
dHIoaSksCisgICAgICAgICAgICAgICAgJy0tYXJncycsICctQ3VycmVudERldmljZVVESUQnLCBk
ZXZpY2VfdWRpZF0pCisKKyAgICAgICAgICAgIGlmIG1hY19vc192ZXJzaW9uIGluIFsnZWxjYXBp
dGFuJywgJ3lvc2VtaXRlJywgJ21hdmVyaWNrcyddOgorICAgICAgICAgICAgICAgIHRpbWUuc2xl
ZXAoMi41KQorCisgICAgICAgIF9sb2cuaW5mbygnV2FpdGluZyBmb3IgYWxsIGlPUyBTaW11bGF0
b3JzIHRvIGZpbmlzaCBib290aW5nLicpCisgICAgICAgIGZvciBpIGluIHhyYW5nZShzZWxmLmNo
aWxkX3Byb2Nlc3NlcygpKToKKyAgICAgICAgICAgIFNpbXVsYXRvci53YWl0X3VudGlsX2Rldmlj
ZV9pc19ib290ZWQoc2VsZi5fdGVzdGluZ19kZXZpY2UoaSkudWRpZCkKKworICAgIGRlZiBfcXVp
dF9pb3Nfc2ltdWxhdG9yKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fdXNpbmdfZGVkaWNh
dGVkX3NpbXVsYXRvcnMoKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBfbG9nLmRlYnVn
KCJfcXVpdF9pb3Nfc2ltdWxhdG9yIGtpbGxpbmcgYWxsIFNpbXVsYXRvciBwcm9jZXNzZXMiKQor
ICAgICAgICAjIEZJWE1FOiBXZSBzaG91bGQga2lsbCBvbmx5IHRoZSBTaW11bGF0b3JzIHdlIHN0
YXJ0ZWQuCisgICAgICAgIHN1YnByb2Nlc3MuY2FsbChbImtpbGxhbGwiLCAiLTkiLCAiLW0iLCAi
U2ltdWxhdG9yIl0pCisKKyAgICBkZWYgY2xlYW5fdXBfdGVzdF9ydW4oc2VsZik6CisgICAgICAg
IHN1cGVyKElPU1NpbXVsYXRvclBvcnQsIHNlbGYpLmNsZWFuX3VwX3Rlc3RfcnVuKCkKKyAgICAg
ICAgX2xvZy5kZWJ1ZygiY2xlYW5fdXBfdGVzdF9ydW4iKQorICAgICAgICBzZWxmLl9xdWl0X2lv
c19zaW11bGF0b3IoKQorICAgICAgICBmaWZvcyA9IFtwYXRoIGZvciBwYXRoIGluIG9zLmxpc3Rk
aXIoJy90bXAnKSBpZiByZS5zZWFyY2goJ29yZy53ZWJraXQuKER1bXBSZW5kZXJUcmVlfFdlYktp
dFRlc3RSdW5uZXIpLipfKElOfE9VVHxFUlJPUiknLCBwYXRoKV0KKyAgICAgICAgZm9yIGZpZm8g
aW4gZmlmb3M6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKG9z
LnBhdGguam9pbignL3RtcCcsIGZpZm8pKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6Cisg
ICAgICAgICAgICAgICAgX2xvZy53YXJuaW5nKCdVbmFibGUgdG8gcmVtb3ZlICcgKyBmaWZvKQor
ICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBpZiBub3Qgc2VsZi5fdXNpbmdfZGVkaWNh
dGVkX3NpbXVsYXRvcnMoKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGZvciBpIGlu
IHhyYW5nZShzZWxmLmNoaWxkX3Byb2Nlc3NlcygpKToKKyAgICAgICAgICAgIHNpbXVsYXRvcl9w
YXRoID0gc2VsZi5nZXRfc2ltdWxhdG9yX3BhdGgoaSkKKyAgICAgICAgICAgIGRldmljZV91ZGlk
ID0gc2VsZi5fdGVzdGluZ19kZXZpY2UoaSkudWRpZAorICAgICAgICAgICAgc2VsZi5fcmVtb3Zl
X2RldmljZShpKQorCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2ltdWxhdG9y
X3BhdGgpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB0cnk6CisgICAg
ICAgICAgICAgICAgc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFtzZWxmLkxTUkVHSVNURVJf
UEFUSCwgIi11Iiwgc2ltdWxhdG9yX3BhdGhdKQorCisgICAgICAgICAgICAgICAgX2xvZy5kZWJ1
Zygncm10cmVlICVzJywgc2ltdWxhdG9yX3BhdGgpCisgICAgICAgICAgICAgICAgc2VsZi5fZmls
ZXN5c3RlbS5ybXRyZWUoc2ltdWxhdG9yX3BhdGgpCisKKyAgICAgICAgICAgICAgICBsb2dzX3Bh
dGggPSBzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5fZmlsZXN5c3RlbS5leHBhbmR1c2VyKCJ+
IiksICJMaWJyYXJ5L0xvZ3MvQ29yZVNpbXVsYXRvci8iLCBkZXZpY2VfdWRpZCkKKyAgICAgICAg
ICAgICAgICBfbG9nLmRlYnVnKCdybXRyZWUgJXMnLCBsb2dzX3BhdGgpCisgICAgICAgICAgICAg
ICAgc2VsZi5fZmlsZXN5c3RlbS5ybXRyZWUobG9nc19wYXRoKQorCisgICAgICAgICAgICAgICAg
c2F2ZWRfc3RhdGVfcGF0aCA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl9maWxlc3lzdGVt
LmV4cGFuZHVzZXIoIn4iKSwgIkxpYnJhcnkvU2F2ZWQgQXBwbGljYXRpb24gU3RhdGUvIiwgc2Vs
Zi5TSU1VTEFUT1JfQlVORExFX0lEICsgc3RyKGkpICsgIi5zYXZlZFN0YXRlIikKKyAgICAgICAg
ICAgICAgICBfbG9nLmRlYnVnKCdybXRyZWUgJXMnLCBzYXZlZF9zdGF0ZV9wYXRoKQorICAgICAg
ICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ucm10cmVlKHNhdmVkX3N0YXRlX3BhdGgpCisKKyAg
ICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBfbG9nLndhcm5pbmcoJ1VuYWJsZSB0
byByZW1vdmUgU2ltdWxhdG9yJyArIHN0cihpKSkKKworICAgIGRlZiBzZXR1cF9lbnZpcm9uX2Zv
cl9zZXJ2ZXIoc2VsZiwgc2VydmVyX25hbWU9Tm9uZSk6CisgICAgICAgIF9sb2cuZGVidWcoInNl
dHVwX2Vudmlyb25fZm9yX3NlcnZlciIpCisgICAgICAgIGVudiA9IHN1cGVyKElPU1NpbXVsYXRv
clBvcnQsIHNlbGYpLnNldHVwX2Vudmlyb25fZm9yX3NlcnZlcihzZXJ2ZXJfbmFtZSkKKyAgICAg
ICAgaWYgc2VydmVyX25hbWUgPT0gc2VsZi5kcml2ZXJfbmFtZSgpOgorICAgICAgICAgICAgaWYg
c2VsZi5nZXRfb3B0aW9uKCdsZWFrcycpOgorICAgICAgICAgICAgICAgIGVudlsnTWFsbG9jU3Rh
Y2tMb2dnaW5nJ10gPSAnMScKKyAgICAgICAgICAgICAgICBlbnZbJ19fWFBDX01hbGxvY1N0YWNr
TG9nZ2luZyddID0gJzEnCisgICAgICAgICAgICAgICAgZW52WydNYWxsb2NTY3JpYmJsZSddID0g
JzEnCisgICAgICAgICAgICAgICAgZW52WydfX1hQQ19NYWxsb2NTY3JpYmJsZSddID0gJzEnCisg
ICAgICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ2d1YXJkX21hbGxvYycpOgorICAgICAgICAg
ICAgICAgIHNlbGYuX2FwcGVuZF92YWx1ZV9jb2xvbl9zZXBhcmF0ZWQoZW52LCAnRFlMRF9JTlNF
UlRfTElCUkFSSUVTJywgJy91c3IvbGliL2xpYmdtYWxsb2MuZHlsaWInKQorICAgICAgICAgICAg
ICAgIHNlbGYuX2FwcGVuZF92YWx1ZV9jb2xvbl9zZXBhcmF0ZWQoZW52LCAnX19YUENfRFlMRF9J
TlNFUlRfTElCUkFSSUVTJywgJy91c3IvbGliL2xpYmdtYWxsb2MuZHlsaWInKQorICAgICAgICBl
bnZbJ1hNTF9DQVRBTE9HX0ZJTEVTJ10gPSAnJyAgIyB3b3JrIGFyb3VuZCBtaXNzaW5nIC9ldGMv
Y2F0YWxvZyA8cmRhcjovL3Byb2JsZW0vNDI5Mjk5NT4KKyAgICAgICAgcmV0dXJuIGVudgorCisg
ICAgZGVmIG9wZXJhdGluZ19zeXN0ZW0oc2VsZik6CisgICAgICAgIHJldHVybiAnaW9zLXNpbXVs
YXRvcicKKworICAgIGRlZiBjaGVja19zeXNfZGVwcyhzZWxmLCBuZWVkc19odHRwKToKKyAgICAg
ICAgaWYgbm90IHNlbGYuc2ltdWxhdG9yX3J1bnRpbWUuYXZhaWxhYmxlOgorICAgICAgICAgICAg
X2xvZy5lcnJvcignVGhlIGlPUyBTaW11bGF0b3IgcnVudGltZSB3aXRoIGlkZW50aWZpZXIgInsw
fSIgY2Fubm90IGJlIHVzZWQgYmVjYXVzZSBpdCBpcyB1bmF2YWlsYWJsZS4nLmZvcm1hdChzZWxm
LnNpbXVsYXRvcl9ydW50aW1lLmlkZW50aWZpZXIpKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNl
CisgICAgICAgIHJldHVybiBzdXBlcihJT1NTaW11bGF0b3JQb3J0LCBzZWxmKS5jaGVja19zeXNf
ZGVwcyhuZWVkc19odHRwKQorCisgICAgU1VCUFJPQ0VTU19DUkFTSF9SRUdFWCA9IHJlLmNvbXBp
bGUoJyNDUkFTSEVEIC0gKD9QPHN1YnByb2Nlc3NfbmFtZT5cUyspIFwocGlkICg/UDxzdWJwcm9j
ZXNzX3BpZD5cZCspXCknKQorCisgICAgZGVmIF91c2luZ19kZWRpY2F0ZWRfc2ltdWxhdG9ycyhz
ZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X29wdGlvbignZGVkaWNhdGVkX3NpbXVsYXRv
cnMnKQorCisgICAgZGVmIF9jcmVhdGVfZGV2aWNlKHNlbGYsIG51bWJlcik6CisgICAgICAgIHJl
dHVybiBTaW11bGF0b3IuY3JlYXRlX2RldmljZShudW1iZXIsIHNlbGYuc2ltdWxhdG9yX2Rldmlj
ZV90eXBlKCksIHNlbGYuc2ltdWxhdG9yX3J1bnRpbWUpCisKKyAgICBkZWYgX3JlbW92ZV9kZXZp
Y2Uoc2VsZiwgbnVtYmVyKToKKyAgICAgICAgU2ltdWxhdG9yLnJlbW92ZV9kZXZpY2UobnVtYmVy
KQorCisgICAgZGVmIF90ZXN0aW5nX2RldmljZShzZWxmLCBudW1iZXIpOgorICAgICAgICByZXR1
cm4gU2ltdWxhdG9yLmRldmljZV9udW1iZXIobnVtYmVyKQorCisgICAgIyBGSVhNRTogVGhpcyBp
cyBvbmx5IGV4cG9zZWQgc28gdGhhdCBTaW11bGF0b3JQcm9jZXNzIGNhbiB1c2UgaXQuCisgICAg
ZGVmIGRldmljZV9pZF9mb3Jfd29ya2VyX251bWJlcihzZWxmLCBudW1iZXIpOgorICAgICAgICBp
ZiBzZWxmLl9wcmludGluZ19jbWRfbGluZToKKyAgICAgICAgICAgIHJldHVybiAnPGR1bW15IGlk
PicKKyAgICAgICAgaWYgc2VsZi5fdXNpbmdfZGVkaWNhdGVkX3NpbXVsYXRvcnMoKToKKyAgICAg
ICAgICAgIHJldHVybiBzZWxmLl90ZXN0aW5nX2RldmljZShudW1iZXIpLnVkaWQKKyAgICAgICAg
cmV0dXJuIHNlbGYuX2N1cnJlbnRfZGV2aWNlLnVkaWQKKworICAgIGRlZiBnZXRfc2ltdWxhdG9y
X3BhdGgoc2VsZiwgc3VmZml4PSIiKToKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxm
LlNJTVVMQVRPUl9ESVJFQ1RPUlksICJTaW11bGF0b3IiICsgc3RyKHN1ZmZpeCkgKyAiLmFwcCIp
CisKKyAgICBkZWYgZGlmZl9pbWFnZShzZWxmLCBleHBlY3RlZF9jb250ZW50cywgYWN0dWFsX2Nv
bnRlbnRzLCB0b2xlcmFuY2U9Tm9uZSk6CisgICAgICAgIGlmIG5vdCBhY3R1YWxfY29udGVudHMg
YW5kIG5vdCBleHBlY3RlZF9jb250ZW50czoKKyAgICAgICAgICAgIHJldHVybiAoTm9uZSwgMCwg
Tm9uZSkKKyAgICAgICAgaWYgbm90IGFjdHVhbF9jb250ZW50cyBvciBub3QgZXhwZWN0ZWRfY29u
dGVudHM6CisgICAgICAgICAgICByZXR1cm4gKFRydWUsIDAsIE5vbmUpCisgICAgICAgIGlmIG5v
dCBzZWxmLl9pbWFnZV9kaWZmZXI6CisgICAgICAgICAgICBzZWxmLl9pbWFnZV9kaWZmZXIgPSBp
bWFnZV9kaWZmLklPU1NpbXVsYXRvckltYWdlRGlmZmVyKHNlbGYpCisgICAgICAgIHNlbGYuc2V0
X29wdGlvbl9kZWZhdWx0KCd0b2xlcmFuY2UnLCAwLjEpCisgICAgICAgIGlmIHRvbGVyYW5jZSBp
cyBOb25lOgorICAgICAgICAgICAgdG9sZXJhbmNlID0gc2VsZi5nZXRfb3B0aW9uKCd0b2xlcmFu
Y2UnKQorICAgICAgICByZXR1cm4gc2VsZi5faW1hZ2VfZGlmZmVyLmRpZmZfaW1hZ2UoZXhwZWN0
ZWRfY29udGVudHMsIGFjdHVhbF9jb250ZW50cywgdG9sZXJhbmNlKQorCisgICAgZGVmIHJlc2V0
X3ByZWZlcmVuY2VzKHNlbGYpOgorICAgICAgICBfbG9nLmRlYnVnKCJyZXNldF9wcmVmZXJlbmNl
cyIpCisgICAgICAgIHNlbGYuX3F1aXRfaW9zX3NpbXVsYXRvcigpCisgICAgICAgICMgTWF5YmUg
dGhpcyBzaG91bGQgZGVsZXRlIGFsbCBkZXZpY2VzIHRoYXQgd2UndmUgY3JlYXRlZD8KKworICAg
IGRlZiBubV9jb21tYW5kKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi54Y3J1bl9maW5kKCdu
bScpCisKKyAgICBAcHJvcGVydHkKKyAgICBAbWVtb2l6ZWQKKyAgICBkZWYgZGV2ZWxvcGVyX2Rp
cihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbJ3hj
b2RlLXNlbGVjdCcsICctLXByaW50LXBhdGgnXSkucnN0cmlwKCkKKworICAgIGRlZiBsb2dnaW5n
X3BhdHRlcm5zX3RvX3N0cmlwKHNlbGYpOgorICAgICAgICByZXR1cm4gW10KKworICAgIGRlZiBz
dGRlcnJfcGF0dGVybnNfdG9fc3RyaXAoc2VsZik6CisgICAgICAgIHJldHVybiBbXQorCisgICAg
ZGVmIF9jcmVhdGVTaW11bGF0b3JBcHBzKHNlbGYpOgorICAgICAgICBmb3IgaSBpbiB4cmFuZ2Uo
c2VsZi5jaGlsZF9wcm9jZXNzZXMoKSk6CisgICAgICAgICAgICBzZWxmLl9jcmVhdGVTaW11bGF0
b3JBcHAoaSkKKworICAgIGRlZiBfY3JlYXRlU2ltdWxhdG9yQXBwKHNlbGYsIHN1ZmZpeCk6Cisg
ICAgICAgIGRlc3RpbmF0aW9uID0gc2VsZi5nZXRfc2ltdWxhdG9yX3BhdGgoc3VmZml4KQorICAg
ICAgICBfbG9nLmluZm8oIkNyZWF0aW5nIGFwcDoiICsgZGVzdGluYXRpb24pCisgICAgICAgIGlm
IG9zLnBhdGguZXhpc3RzKGRlc3RpbmF0aW9uKToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUo
ZGVzdGluYXRpb24sIGlnbm9yZV9lcnJvcnM9VHJ1ZSkKKyAgICAgICAgc2ltdWxhdG9yX2FwcF9w
YXRoID0gc2VsZi5kZXZlbG9wZXJfZGlyICsgIi9BcHBsaWNhdGlvbnMvU2ltdWxhdG9yLmFwcCIK
KyAgICAgICAgc2h1dGlsLmNvcHl0cmVlKHNpbXVsYXRvcl9hcHBfcGF0aCwgZGVzdGluYXRpb24p
CisKKyAgICAgICAgIyBVcGRhdGUgYXBwJ3MgcGFja2FnZS1uYW1lIGluc2lkZSBwbGlzdCBhbmQg
cmUtY29kZS1zaWduIGl0CisgICAgICAgIHBsaXN0X3BhdGggPSBkZXN0aW5hdGlvbiArICIvQ29u
dGVudHMvSW5mby5wbGlzdCIKKyAgICAgICAgY29tbWFuZCA9ICJTZXQgQ0ZCdW5kbGVJZGVudGlm
aWVyIGNvbS5hcHBsZS5pcGhvbmVzaW11bGF0b3IiICsgc3RyKHN1ZmZpeCkKKyAgICAgICAgc3Vi
cHJvY2Vzcy5jaGVja19vdXRwdXQoWyIvdXNyL2xpYmV4ZWMvUGxpc3RCdWRkeSIsICItYyIsIGNv
bW1hbmQsIHBsaXN0X3BhdGhdKQorICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbImlu
c3RhbGxfbmFtZV90b29sIiwgIi1hZGRfcnBhdGgiLCBzZWxmLmRldmVsb3Blcl9kaXIgKyAiL0xp
YnJhcnkvUHJpdmF0ZUZyYW1ld29ya3MvIiwgZGVzdGluYXRpb24gKyAiL0NvbnRlbnRzL01hY09T
L1NpbXVsYXRvciJdKQorICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbImluc3RhbGxf
bmFtZV90b29sIiwgIi1hZGRfcnBhdGgiLCBzZWxmLmRldmVsb3Blcl9kaXIgKyAiLy4uL0ZyYW1l
d29ya3MvIiwgZGVzdGluYXRpb24gKyAiL0NvbnRlbnRzL01hY09TL1NpbXVsYXRvciJdKQorICAg
ICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbImNvZGVzaWduIiwgIi1mcyIsICItIiwgZGVz
dGluYXRpb25dKQorICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbc2VsZi5MU1JFR0lT
VEVSX1BBVEgsICItZiIsIGRlc3RpbmF0aW9uXSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvcG9ydC9pb3Nfc2ltdWxhdG9yLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9pb3Nfc2ltdWxhdG9yLnB5CShyZXZpc2lvbiAyMTMxNjEpCisrKyBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3NpbXVsYXRvci5weQkod29ya2luZyBjb3B5KQpAQCAt
MSw0ICsxLDQgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIwLDcgKzIw
LDYgQEAKICMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAotaW1wb3J0IGl0
ZXJ0b29scwogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBvcwogaW1wb3J0IHJlCkBAIC0yOSwxMiAr
MjgsOSBAQCBpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHRpbWUKIAogZnJvbSB3ZWJraXRweS5j
b21tb24ubWVtb2l6ZWQgaW1wb3J0IG1lbW9pemVkCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0
ZW0uZXhlY3V0aXZlIGltcG9ydCBTY3JpcHRFcnJvcgogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVz
dHMubW9kZWxzLnRlc3RfY29uZmlndXJhdGlvbiBpbXBvcnQgVGVzdENvbmZpZ3VyYXRpb24KLWZy
b20gd2Via2l0cHkucG9ydCBpbXBvcnQgY29uZmlnIGFzIHBvcnRfY29uZmlnCi1mcm9tIHdlYmtp
dHB5LnBvcnQgaW1wb3J0IGRyaXZlciwgaW1hZ2VfZGlmZgotZnJvbSB3ZWJraXRweS5wb3J0LmRh
cndpbiBpbXBvcnQgRGFyd2luUG9ydAotZnJvbSB3ZWJraXRweS5wb3J0LnNpbXVsYXRvcl9wcm9j
ZXNzIGltcG9ydCBTaW11bGF0b3JQcm9jZXNzCitmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IGlt
YWdlX2RpZmYKK2Zyb20gd2Via2l0cHkucG9ydC5pb3MgaW1wb3J0IElPU1BvcnQKIGZyb20gd2Vi
a2l0cHkueGNvZGUuc2ltdWxhdG9yIGltcG9ydCBTaW11bGF0b3IsIFJ1bnRpbWUsIERldmljZVR5
cGUKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5jcmFzaGxvZ3MgaW1wb3J0IENyYXNoTG9n
cwogCkBAIC00MiwzMiArMzgsNyBAQCBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uY3Jhc2hs
b2dzIGltCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiAKIAotY2xhc3MgSU9T
UG9ydChEYXJ3aW5Qb3J0KToKLSAgICBwb3J0X25hbWUgPSAiaW9zIgotCi0gICAgQVJDSElURUNU
VVJFUyA9IFsnYXJtdjcnLCAnYXJtdjdzJywgJ2FybTY0J10KLSAgICBERUZBVUxUX0FSQ0hJVEVD
VFVSRSA9ICdhcm02NCcKLSAgICBWRVJTSU9OX0ZBTExCQUNLX09SREVSID0gWydpb3MtNycsICdp
b3MtOCcsICdpb3MtOScsICdpb3MtMTAnXQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGRl
dGVybWluZV9mdWxsX3BvcnRfbmFtZShjbHMsIGhvc3QsIG9wdGlvbnMsIHBvcnRfbmFtZSk6Ci0g
ICAgICAgIGlmIHBvcnRfbmFtZSA9PSBjbHMucG9ydF9uYW1lOgotICAgICAgICAgICAgaXBob25l
b3Nfc2RrX3ZlcnNpb24gPSBob3N0LnBsYXRmb3JtLnhjb2RlX3Nka192ZXJzaW9uKCdpcGhvbmVv
cycpCi0gICAgICAgICAgICBpZiBub3QgaXBob25lb3Nfc2RrX3ZlcnNpb246Ci0gICAgICAgICAg
ICAgICAgcmFpc2UgRXhjZXB0aW9uKCJQbGVhc2UgaW5zdGFsbCB0aGUgaU9TIFNESy4iKQotICAg
ICAgICAgICAgbWFqb3JfdmVyc2lvbl9udW1iZXIgPSBpcGhvbmVvc19zZGtfdmVyc2lvbi5zcGxp
dCgnLicpWzBdCi0gICAgICAgICAgICBwb3J0X25hbWUgPSBwb3J0X25hbWUgKyAnLScgKyBtYWpv
cl92ZXJzaW9uX251bWJlcgotICAgICAgICByZXR1cm4gcG9ydF9uYW1lCi0KLSAgICAjIERlc3Bp
dGUgdGhlaXIgbmFtZXMsIHRoZXNlIGZsYWdzIGRvIG5vdCBhY3R1YWxseSBnZXQgcGFzc2VkIGFs
bCB0aGUgd2F5IGRvd24gdG8gd2Via2l0LWJ1aWxkLgotICAgIGRlZiBfYnVpbGRfZHJpdmVyX2Zs
YWdzKHNlbGYpOgotICAgICAgICByZXR1cm4gWyctLXNkaycsICdpcGhvbmVvcyddICsgKFsnQVJD
SFM9JXMnICUgc2VsZi5hcmNoaXRlY3R1cmUoKV0gaWYgc2VsZi5hcmNoaXRlY3R1cmUoKSBlbHNl
IFtdKQotCi0gICAgZGVmIG9wZXJhdGluZ19zeXN0ZW0oc2VsZik6Ci0gICAgICAgIHJldHVybiAn
aW9zJwotCi0KLWNsYXNzIElPU1NpbXVsYXRvclBvcnQoRGFyd2luUG9ydCk6CitjbGFzcyBJT1NT
aW11bGF0b3JQb3J0KElPU1BvcnQpOgogICAgIHBvcnRfbmFtZSA9ICJpb3Mtc2ltdWxhdG9yIgog
CiAgICAgRlVUVVJFX1ZFUlNJT04gPSAnZnV0dXJlJwpAQCAtODcsMjAgKzU4LDE4IEBAIGNsYXNz
IElPU1NpbXVsYXRvclBvcnQoRGFyd2luUG9ydCk6CiAgICAgICAgICd4ODZfNjQnOiB7CiAgICAg
ICAgICAgICAnaXBob25lJzogJ2lQaG9uZSA1cycsCiAgICAgICAgICAgICAnaXBob25lNyc6ICdp
UGhvbmUgNycsCi0gICAgICAgICAgICAnaXBhZCc6ICdpUGFkIEFpcicKKyAgICAgICAgICAgICdp
cGFkJzogJ2lQYWQgQWlyJywKICAgICAgICAgfSwKICAgICAgICAgJ3g4Nic6IHsKICAgICAgICAg
ICAgICdpcGhvbmUnOiAnaVBob25lIDUnLAotICAgICAgICAgICAgJ2lwYWQnOiAnaVBhZCBSZXRp
bmEnCisgICAgICAgICAgICAnaXBhZCc6ICdpUGFkIFJldGluYScsCiAgICAgICAgIH0sCiAgICAg
fQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnRfbmFtZSwgKiprd2FyZ3MpOgot
ICAgICAgICBEYXJ3aW5Qb3J0Ll9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnRfbmFtZSwgKiprd2Fy
Z3MpCi0gICAgICAgIHNlbGYuX3Rlc3RfcnVubmVyX3Byb2Nlc3NfY29uc3RydWN0b3IgPSBTaW11
bGF0b3JQcm9jZXNzCisgICAgICAgIHN1cGVyKElPU1NpbXVsYXRvclBvcnQsIHNlbGYpLl9faW5p
dF9fKGhvc3QsIHBvcnRfbmFtZSwgKiprd2FyZ3MpCiAKICAgICAgICAgb3B0aW9uYWxfZGV2aWNl
X2NsYXNzID0gc2VsZi5nZXRfb3B0aW9uKCdkZXZpY2VfY2xhc3MnKQotICAgICAgICBzZWxmLl9w
cmludGluZ19jbWRfbGluZSA9IEZhbHNlCiAgICAgICAgIHNlbGYuX2RldmljZV9jbGFzcyA9IG9w
dGlvbmFsX2RldmljZV9jbGFzcyBpZiBvcHRpb25hbF9kZXZpY2VfY2xhc3MgZWxzZSBzZWxmLkRF
RkFVTFRfREVWSUNFX0NMQVNTCiAgICAgICAgIF9sb2cuZGVidWcoJ0lPU1NpbXVsYXRvclBvcnQg
X2RldmljZV9jbGFzcyBpcyAlcycsIHNlbGYuX2RldmljZV9jbGFzcykKIApAQCAtMTEyLDE5ICs4
MSw4IEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoRGFyd2luUG9ydCk6CiAgICAgICAgICAgICAg
ICAgX2xvZy53YXJuKCdDYW5ub3QgaGF2ZSBtb3JlIHRoYW4gb25lIGNoaWxkIHByb2Nlc3Mgd2hl
biB1c2luZyBhIHJ1bm5pbmcgc2ltdWxhdG9yLiAgU2V0dGluZyBjaGlsZF9wcm9jZXNzZXMgdG8g
MS4nKQogICAgICAgICAgICAgc2VsZi5zZXRfb3B0aW9uKCdjaGlsZF9wcm9jZXNzZXMnLCAxKQog
Ci0gICAgZGVmIGRyaXZlcl9uYW1lKHNlbGYpOgotICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24o
J2RyaXZlcl9uYW1lJyk6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfb3B0aW9uKCdkcml2
ZXJfbmFtZScpCi0gICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbignd2Via2l0X3Rlc3RfcnVubmVy
Jyk6Ci0gICAgICAgICAgICByZXR1cm4gJ1dlYktpdFRlc3RSdW5uZXJBcHAuYXBwJwotICAgICAg
ICByZXR1cm4gJ0R1bXBSZW5kZXJUcmVlLmFwcCcKLQotICAgIGRlZiBkcml2ZXJfY21kX2xpbmVf
Zm9yX2xvZ2dpbmcoc2VsZik6Ci0gICAgICAgICMgQXZvaWQgc3Bpbm5pbmcgdXAgZGV2aWNlcyBq
dXN0IGZvciBsb2dnaW5nIHRoZSBjb21tYW5kbGluZS4KLSAgICAgICAgc2VsZi5fcHJpbnRpbmdf
Y21kX2xpbmUgPSBUcnVlCi0gICAgICAgIHJlc3VsdCA9IHN1cGVyKElPU1NpbXVsYXRvclBvcnQs
IHNlbGYpLmRyaXZlcl9jbWRfbGluZV9mb3JfbG9nZ2luZygpCi0gICAgICAgIHNlbGYuX3ByaW50
aW5nX2NtZF9saW5lID0gRmFsc2UKLSAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgIGRlZiBfZGV2
aWNlX21hcChzZWxmKToKKyAgICAgICAgcmV0dXJuIFNpbXVsYXRvci5tYW5hZ2VkX2RldmljZXMK
IAogICAgIEBwcm9wZXJ0eQogICAgIEBtZW1vaXplZApAQCAtMTUwLDEwICsxMDgsNiBAQCBjbGFz
cyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBvcnQpOgogICAgICAgICByZXR1cm4gZGV2aWNlX3R5
cGUKIAogICAgIEBtZW1vaXplZAotICAgIGRlZiBjaGlsZF9wcm9jZXNzZXMoc2VsZik6Ci0gICAg
ICAgIHJldHVybiBpbnQoc2VsZi5nZXRfb3B0aW9uKCdjaGlsZF9wcm9jZXNzZXMnKSkKLQotICAg
IEBtZW1vaXplZAogICAgIGRlZiBkZWZhdWx0X2NoaWxkX3Byb2Nlc3NlcyhzZWxmKToKICAgICAg
ICAgIiIiUmV0dXJuIHRoZSBudW1iZXIgb2YgU2ltdWxhdG9ycyBpbnN0YW5jZXMgdG8gdXNlIGZv
ciB0aGlzIHBvcnQuIiIiCiAgICAgICAgIGJlc3RfY2hpbGRfcHJvY2Vzc19jb3VudF9mb3JfY3B1
ID0gc2VsZi5fZXhlY3V0aXZlLmNwdV9jb3VudCgpIC8gMgpAQCAtMzYwLDIzICszMTQsMTUgQEAg
Y2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKICAgICBkZWYgX3VzaW5nX2RlZGlj
YXRlZF9zaW11bGF0b3JzKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5nZXRfb3B0aW9uKCdk
ZWRpY2F0ZWRfc2ltdWxhdG9ycycpCiAKKyAgICBkZWYgdXNpbmdfbXVsdGlwbGVfZGV2aWNlcyhz
ZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3VzaW5nX2RlZGljYXRlZF9zaW11bGF0b3JzKCkK
KwogICAgIGRlZiBfY3JlYXRlX2RldmljZShzZWxmLCBudW1iZXIpOgogICAgICAgICByZXR1cm4g
U2ltdWxhdG9yLmNyZWF0ZV9kZXZpY2UobnVtYmVyLCBzZWxmLnNpbXVsYXRvcl9kZXZpY2VfdHlw
ZSgpLCBzZWxmLnNpbXVsYXRvcl9ydW50aW1lKQogCiAgICAgZGVmIF9yZW1vdmVfZGV2aWNlKHNl
bGYsIG51bWJlcik6CiAgICAgICAgIFNpbXVsYXRvci5yZW1vdmVfZGV2aWNlKG51bWJlcikKIAot
ICAgIGRlZiBfdGVzdGluZ19kZXZpY2Uoc2VsZiwgbnVtYmVyKToKLSAgICAgICAgcmV0dXJuIFNp
bXVsYXRvci5kZXZpY2VfbnVtYmVyKG51bWJlcikKLQotICAgICMgRklYTUU6IFRoaXMgaXMgb25s
eSBleHBvc2VkIHNvIHRoYXQgU2ltdWxhdG9yUHJvY2VzcyBjYW4gdXNlIGl0LgotICAgIGRlZiBk
ZXZpY2VfaWRfZm9yX3dvcmtlcl9udW1iZXIoc2VsZiwgbnVtYmVyKToKLSAgICAgICAgaWYgc2Vs
Zi5fcHJpbnRpbmdfY21kX2xpbmU6Ci0gICAgICAgICAgICByZXR1cm4gJzxkdW1teSBpZD4nCi0g
ICAgICAgIGlmIHNlbGYuX3VzaW5nX2RlZGljYXRlZF9zaW11bGF0b3JzKCk6Ci0gICAgICAgICAg
ICByZXR1cm4gc2VsZi5fdGVzdGluZ19kZXZpY2UobnVtYmVyKS51ZGlkCi0gICAgICAgIHJldHVy
biBzZWxmLl9jdXJyZW50X2RldmljZS51ZGlkCi0KICAgICBkZWYgZ2V0X3NpbXVsYXRvcl9wYXRo
KHNlbGYsIHN1ZmZpeD0iIik6CiAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5TSU1V
TEFUT1JfRElSRUNUT1JZLCAiU2ltdWxhdG9yIiArIHN0cihzdWZmaXgpICsgIi5hcHAiKQogCklu
ZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3VuaXR0ZXN0LnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfdW5pdHRlc3QucHkJKHJldmlz
aW9uIDIxMzE2MSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3NfdW5pdHRlc3Qu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDcgQEAKIAogaW1wb3J0IHRpbWUKIAotZnJv
bSB3ZWJraXRweS5wb3J0LmlvcyBpbXBvcnQgSU9TU2ltdWxhdG9yUG9ydAorZnJvbSB3ZWJraXRw
eS5wb3J0Lmlvc19zaW11bGF0b3IgaW1wb3J0IElPU1NpbXVsYXRvclBvcnQKIGZyb20gd2Via2l0
cHkucG9ydCBpbXBvcnQgZGFyd2luX3Rlc3RjYXNlCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0
ZW0uZmlsZXN5c3RlbV9tb2NrIGltcG9ydCBNb2NrRmlsZVN5c3RlbQogZnJvbSB3ZWJraXRweS5j
b21tb24uc3lzdGVtLm91dHB1dGNhcHR1cmUgaW1wb3J0IE91dHB1dENhcHR1cmUKSW5kZXg6IFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zaW11bGF0b3JfcHJvY2Vzcy5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2ltdWxhdG9yX3Byb2Nlc3MucHkJKHJl
dmlzaW9uIDIxMzE2MSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zaW11bGF0b3Jf
cHJvY2Vzcy5weQkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCBjbGFzcyBTaW11bGF0
b3JQcm9jZXNzKFNlcnZlclByb2Nlc3MpOgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRf
b2JqLCBuYW1lLCBjbWQsIGVudj1Ob25lLCB1bml2ZXJzYWxfbmV3bGluZXM9RmFsc2UsIHRyZWF0
X25vX2RhdGFfYXNfY3Jhc2g9RmFsc2UsIHdvcmtlcl9udW1iZXI9Tm9uZSk6CiAgICAgICAgIHNl
bGYuX2J1bmRsZV9pZCA9IHBvcnRfb2JqLmFwcF9pZGVudGlmaWVyX2Zyb21fYnVuZGxlKGNtZFsw
XSkKLSAgICAgICAgc2VsZi5fZGV2aWNlID0gU2ltdWxhdG9yKHBvcnRfb2JqLmhvc3QpLmZpbmRf
ZGV2aWNlX2J5X3VkaWQocG9ydF9vYmouZGV2aWNlX2lkX2Zvcl93b3JrZXJfbnVtYmVyKHdvcmtl
cl9udW1iZXIpKQorICAgICAgICBzZWxmLl9kZXZpY2UgPSBwb3J0X29iai5kZXZpY2VfZm9yX3dv
cmtlcl9udW1iZXIod29ya2VyX251bWJlcikKICAgICAgICAgaWYgbm90IHNlbGYuX2RldmljZS5p
bnN0YWxsX2FwcChjbWRbMF0sIGVudik6CiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3Io
J0ZhaWxlZCB0byBpbnN0YWxsIGFwcCB7fSBvbiBzaW11bGF0b3IgZGV2aWNlIHt9Jy5mb3JtYXQo
Y21kWzBdLCBzZWxmLl9kZXZpY2UudWRpZCkpCiAgICAgICAgIGVudlsnSVBDX0lERU5USUZJRVIn
XSA9IHNlbGYuX2J1bmRsZV9pZCArICctJyArIHNlbGYuX2RldmljZS51ZGlkCkluZGV4OiBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3hjb2RlL3NpbXVsYXRvci5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3hjb2RlL3NpbXVsYXRvci5weQkocmV2aXNpb24gMjEzMTYxKQor
KysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS94Y29kZS9zaW11bGF0b3IucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTE4MSw3ICsxODEsNyBAQCBjbGFzcyBTaW11bGF0b3Iob2JqZWN0KToKICAgICBkZXZp
Y2VzX3JlID0gcmUuY29tcGlsZSgKICAgICAgICAgJ1xzKig/UDxuYW1lPlteKF0rIClcKCg/UDx1
ZGlkPlteKV0rKVwpIFwoKD9QPHN0YXRlPlteKV0rKVwpKCBcKCg/UDxhdmFpbGFiaWxpdHk+W14p
XSspXCkpPycpCiAKLSAgICBfbWFuYWdlZF9kZXZpY2VzID0ge30KKyAgICBtYW5hZ2VkX2Rldmlj
ZXMgPSB7fQogICAgIERldmljZSA9IE5vbmUKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0
PU5vbmUpOgpAQCAtMjE2LDIxICsyMTYsMjEgQEAgY2xhc3MgU2ltdWxhdG9yKG9iamVjdCk6CiAg
ICAgZGVmIGNyZWF0ZV9kZXZpY2UobnVtYmVyLCBkZXZpY2VfdHlwZSwgcnVudGltZSk6CiAgICAg
ICAgIGRldmljZSA9IFNpbXVsYXRvcigpLmxvb2t1cF9vcl9jcmVhdGVfZGV2aWNlKGRldmljZV90
eXBlLm5hbWUgKyAnIFdlYktpdCBUZXN0ZXInICsgc3RyKG51bWJlciksIGRldmljZV90eXBlLCBy
dW50aW1lKQogICAgICAgICBfbG9nLmRlYnVnKCdjcmVhdGVkIGRldmljZSB7fSB7fScuZm9ybWF0
KG51bWJlciwgZGV2aWNlKSkKLSAgICAgICAgYXNzZXJ0KGxlbihTaW11bGF0b3IuX21hbmFnZWRf
ZGV2aWNlcykgPT0gbnVtYmVyKQotICAgICAgICBTaW11bGF0b3IuX21hbmFnZWRfZGV2aWNlc1tu
dW1iZXJdID0gZGV2aWNlCisgICAgICAgIGFzc2VydChsZW4oU2ltdWxhdG9yLm1hbmFnZWRfZGV2
aWNlcykgPT0gbnVtYmVyKQorICAgICAgICBTaW11bGF0b3IubWFuYWdlZF9kZXZpY2VzW251bWJl
cl0gPSBkZXZpY2UKIAogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgcmVtb3ZlX2RldmljZShu
dW1iZXIpOgotICAgICAgICBpZiBub3QgU2ltdWxhdG9yLl9tYW5hZ2VkX2RldmljZXNbbnVtYmVy
XToKKyAgICAgICAgaWYgbm90IFNpbXVsYXRvci5tYW5hZ2VkX2RldmljZXNbbnVtYmVyXToKICAg
ICAgICAgICAgIHJldHVybgotICAgICAgICBkZXZpY2VfdWRpZCA9IFNpbXVsYXRvci5fbWFuYWdl
ZF9kZXZpY2VzW251bWJlcl0udWRpZAorICAgICAgICBkZXZpY2VfdWRpZCA9IFNpbXVsYXRvci5t
YW5hZ2VkX2RldmljZXNbbnVtYmVyXS51ZGlkCiAgICAgICAgIF9sb2cuZGVidWcoJ3JlbW92aW5n
IGRldmljZSB7fSB7fScuZm9ybWF0KG51bWJlciwgZGV2aWNlX3VkaWQpKQotICAgICAgICBkZWwg
U2ltdWxhdG9yLl9tYW5hZ2VkX2RldmljZXNbbnVtYmVyXQorICAgICAgICBkZWwgU2ltdWxhdG9y
Lm1hbmFnZWRfZGV2aWNlc1tudW1iZXJdCiAgICAgICAgIFNpbXVsYXRvci5kZWxldGVfZGV2aWNl
KGRldmljZV91ZGlkKQogCiAgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBkZXZpY2VfbnVtYmVy
KG51bWJlcik6Ci0gICAgICAgIHJldHVybiBTaW11bGF0b3IuX21hbmFnZWRfZGV2aWNlc1tudW1i
ZXJdCisgICAgICAgIHJldHVybiBTaW11bGF0b3IubWFuYWdlZF9kZXZpY2VzW251bWJlcl0KIAog
ICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgZGV2aWNlX3N0YXRlX2Rlc2NyaXB0aW9uKHN0YXRl
KToK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>303083</attachid>
            <date>2017-03-01 11:08:41 -0800</date>
            <delta_ts>2017-03-01 11:49:15 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-168681-20170301110541.patch</filename>
            <type>text/plain</type>
            <size>57311</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxMzIzMCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQ5IEBACisyMDE3LTAzLTAxICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICB3ZWJraXRweTogTW92ZSBzb21lIGRldmljZSBtYW5hZ2VtZW50IGZyb20g
aU9TU2ltdWxhdG9yUG9ydCB0byBpT1NQb3J0IGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjg2ODEKKworICAgICAgICBSZXZpZXdlZCBieSBE
YW5pZWwgQmF0ZXMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtb3ZlcyBoaWdoLWxldmVsIGRldmlj
ZSBtYW5hZ2VtZW50IGludG8gaU9TUG9ydCBhbmQgYWRkcyBhIG5ldyBpT1NEZXZpY2VQb3J0IGNs
YXNzCisgICAgICAgIHdoaWNoIGluaGVyaXRzIGZyb20gaU9TUG9ydC4gIEFkZGl0aW9uYWxseSwg
dGhpcyBjaGFuZ2UgcmVuYW1lcyBkZXZpY2VfaWRfZm9yX3dvcmtlcl9udW1iZXIgdG8KKyAgICAg
ICAgZGV2aWNlX2Zvcl93b3JrZXJfbnVtYmVyIGFuZCBtYW5hZ2VzIGRldmljZXMgYnkgb2JqZWN0
IGluc3RlYWQgb2YgYnkgVURJRC4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9m
YWN0b3J5LnB5OgorICAgICAgICAoUG9ydEZhY3RvcnkpOiBDb3JyZWN0IGltcG9ydCBwYXRoIGZv
ciBJT1NTaW11bGF0b3JQb3J0IGFuZCBJT1NEZXZpY2VQb3J0LgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvcG9ydC9pb3MucHk6CisgICAgICAgIChJT1NQb3J0Ll9faW5pdF9fKTogRGVmaW5l
IHZhcmlhYmxlcyBzaGFyZWQgYmV0d2VlbiBpT1MgcG9ydHMuCisgICAgICAgIChJT1NQb3J0LmRy
aXZlcl9jbWRfbGluZV9mb3JfbG9nZ2luZyk6IEZyb20gSU9TU2ltdWxhdG9yUG9ydC4KKyAgICAg
ICAgKElPU1BvcnQuZHJpdmVyX25hbWUpOiBGcm9tIElPU1NpbXVsYXRvclBvcnQuCisgICAgICAg
IChJT1NQb3J0LnVzaW5nX211bHRpcGxlX2RldmljZXMpOiBDaGVjayBpZiB0aGlzIHBvcnQgc3Vw
cG9ydHMgbXVsdGlwbGUgZGV2aWNlcy4KKyAgICAgICAgKElPU1BvcnQuX3Rlc3RpbmdfZGV2aWNl
KTogTWFwIHdvcmtlciBudW1iZXIgdG8gZGV2aWNlLgorICAgICAgICAoSU9TUG9ydC5kZXZpY2Vf
Zm9yX3dvcmtlcl9udW1iZXIpOiBSZXR1cm4gX3Rlc3RpbmdfZGV2aWNlKCkgb3IgX2N1cnJlbnRf
ZGV2aWNlIGJhc2VkIG9uIHVzaW5nX211bHRpcGxlX2RldmljZXMuIAorICAgICAgICAoSU9TU2lt
dWxhdG9yUG9ydCk6IE1vdmVkIHRvIGlvc19zaW11bGF0b3IucHkKKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L3BvcnQvaW9zX2RldmljZS5weTogQWRkZWQuCisgICAgICAgIChJT1NEZXZpY2VQ
b3J0KTogTW92ZWQgZnVuY3Rpb25hbGl0eSBmcm9tIElPU1BvcnQuCisgICAgICAgIChJT1NEZXZp
Y2VQb3J0LmRldGVybWluZV9mdWxsX3BvcnRfbmFtZSk6IE1vdmVkIGZyb20gSU9TUG9ydC4KKyAg
ICAgICAgKElPU0RldmljZVBvcnQuX2J1aWxkX2RyaXZlcl9mbGFncyk6IERpdHRvLgorICAgICAg
ICAoSU9TRGV2aWNlUG9ydC5vcGVyYXRpbmdfc3lzdGVtKTogRGl0dG8uCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9wb3J0L2lvc19zaW11bGF0b3IucHk6IEFkZGVkLgorICAgICAgICAoSU9T
U2ltdWxhdG9yUG9ydCk6IE1vdmVkIGZyb20gaW9zLnB5LgorICAgICAgICAoSU9TU2ltdWxhdG9y
UG9ydC5fX2luaXRfXyk6IEluaXQgcGFyZW50IGNsYXNzLCBzZXR1cCBkZXZpY2UgbWFwLgorICAg
ICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fY3JlYXRlX3NpbXVsYXRvcnMpOiBVc2Ugb2JqZWN0IG92
ZXIgdW5ib3VuZCBtZXRob2RzLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5zZXR1cF90ZXN0
X3J1bik6IERpdHRvLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC51c2luZ19tdWx0aXBsZV9k
ZXZpY2VzKTogVHJ1ZSBpZiB3ZSBhcmUgbWFuYWdpbmcgdGhlIHNpbXVsYXRvcnMuCisgICAgICAg
IChJT1NTaW11bGF0b3JQb3J0Ll9jcmVhdGVfZGV2aWNlKTogVXNlIG9iamVjdCBvdmVyIHVuYm91
bmQgbWV0aG9kcy4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuX3JlbW92ZV9kZXZpY2UpOiBE
aXR0by4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuZHJpdmVyX25hbWUpOiBNb3ZlZCB0byBw
YXJlbnQgY2xhc3MuCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0LmRyaXZlcl9jbWRfbGluZV9m
b3JfbG9nZ2luZyk6IERpdHRvLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5jaGlsZF9wcm9j
ZXNzZXMpOiBEaXR0by4KKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQuX3Rlc3RpbmdfZGV2aWNl
KTogRGl0dG8uCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0LmRldmljZV9pZF9mb3Jfd29ya2Vy
X251bWJlcik6IFJlbmFtZWQgYXMgZGV2aWNlX2Zvcl93b3JrZXJfbnVtYmVyLgorICAgICAgICAo
U2ltdWxhdG9yUHJvY2Vzcy5fX2luaXRfXyk6IENhbGwgZmluZF9kZXZpY2VfYnlfdWRpZCwgZGV2
aWNlX2lkX2Zvcl93b3JrZXJfbnVtYmVyIGhhcyBiZWVuIHJlbW92ZWQuCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS94Y29kZS9zaW11bGF0b3IucHk6CisgICAgICAgIChTaW11bGF0b3IpOiBN
YWtlIF9tYW5hZ2VkX2RldmljZXMgcHVibGljLgorICAgICAgICAoU2ltdWxhdG9yLmNyZWF0ZV9k
ZXZpY2UpOiBEaXR0by4KKyAgICAgICAgKFNpbXVsYXRvci5yZW1vdmVfZGV2aWNlKTogRGl0dG8u
CisgICAgICAgIChTaW11bGF0b3IuZGV2aWNlX251bWJlcik6IERpdHRvLgorCiAyMDE3LTAzLTAx
ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIEluZGV4ZWRE
Qi5JbmRleGVkREJNdWx0aVByb2Nlc3MgaXMgYSBmbGFreSB0aW1lb3V0CkluZGV4OiBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvZmFjdG9yeS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3BvcnQvZmFjdG9yeS5weQkocmV2aXNpb24gMjEzMjMwKQorKysgVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wb3J0L2ZhY3RvcnkucHkJKHdvcmtpbmcgY29weSkKQEAgLTgwLDE3
ICs4MCwxNyBAQCBkZWYgX2J1aWxkZXJfb3B0aW9ucyhidWlsZGVyX25hbWUpOgogY2xhc3MgUG9y
dEZhY3Rvcnkob2JqZWN0KToKICAgICAjIE9yZGVyIG1hdHRlcnMuICBGb3IgcG9ydCBjbGFzc2Vz
IHRoYXQgaGF2ZSBhIHBvcnRfbmFtZSB3aXRoIGEKICAgICAjIGNvbW1vbiBwcmVmaXgsIHRoZSBt
b3JlIHNwZWNpZmljIHBvcnQgY2xhc3Mgc2hvdWxkIGJlIGxpc3RlZAotICAgICMgZmlyc3QuICBG
b3IgZXhhbXBsZSwgJ2lvcy5JT1NTaW11bGF0b3JQb3J0JyAocG9ydF9uYW1lPSdpb3Mtc2ltdWxh
dG9yJykKLSAgICAjIHNob3VsZCBiZSBsaXN0ZWQgYmVmb3JlICdpb3MuSU9TUG9ydCcgKHBvcnRf
bmFtZT0naW9zJykuICBJZiB0aGlzCisgICAgIyBmaXJzdC4gIEZvciBleGFtcGxlLCAnaW9zX3Np
bXVsYXRvci5JT1NTaW11bGF0b3JQb3J0JyAocG9ydF9uYW1lPSdpb3Mtc2ltdWxhdG9yJykKKyAg
ICAjIHNob3VsZCBiZSBsaXN0ZWQgYmVmb3JlICdpb3NfZGV2aWNlLklPU0RldmljZVBvcnQnIChw
b3J0X25hbWU9J2lvcycpLiAgSWYgdGhpcwogICAgICMgcnVsZSBpcyBub3QgZm9sbG93ZWQsIHRo
ZW4gYHdlYmtpdC1wYXRjaCAtLWlvcy1zaW11bGF0b3JgIHdpbGwgdHJ5Ci0gICAgIyB0byB1c2Ug
SU9TUG9ydCBpbnN0ZWFkIG9mIElPU1NpbXVsYXRvclBvcnQgYmVjYXVzZSAnaW9zJwotICAgICMg
KElPU1BvcnQucG9ydF9uYW1lKSBpcyBhIHByZWZpeCBvZiAnaW9zLXNpbXVsYXRvcicgKHBvcnRf
bmFtZQorICAgICMgdG8gdXNlIElPU0RldmljZVBvcnQgaW5zdGVhZCBvZiBJT1NTaW11bGF0b3JQ
b3J0IGJlY2F1c2UgJ2lvcycKKyAgICAjIChJT1NEZXZpY2VQb3J0LnBvcnRfbmFtZSkgaXMgYSBw
cmVmaXggb2YgJ2lvcy1zaW11bGF0b3InIChwb3J0X25hbWUKICAgICAjIGRlcml2ZWQgZnJvbSAn
LS1pb3Mtc2ltdWxhdG9yJyBjb21tYW5kLWxpbmUgc3dpdGNoKSwgZm9yIGV4YW1wbGUuCiAgICAg
UE9SVF9DTEFTU0VTID0gKAogICAgICAgICAnZWZsLkVmbFBvcnQnLAogICAgICAgICAnZ3RrLkd0
a1BvcnQnLAotICAgICAgICAnaW9zLklPU1NpbXVsYXRvclBvcnQnLAotICAgICAgICAnaW9zLklP
U1BvcnQnLAorICAgICAgICAnaW9zX3NpbXVsYXRvci5JT1NTaW11bGF0b3JQb3J0JywKKyAgICAg
ICAgJ2lvc19kZXZpY2UuSU9TRGV2aWNlUG9ydCcsCiAgICAgICAgICdtYWMuTWFjUG9ydCcsCiAg
ICAgICAgICdtb2NrX2RydC5Nb2NrRFJUUG9ydCcsCiAgICAgICAgICd0ZXN0LlRlc3RQb3J0JywK
SW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3MucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weQkocmV2aXNpb24gMjEzMjMwKQorKysg
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weQkod29ya2luZyBjb3B5KQpAQCAtMSw0
ICsxLDQgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIwLDI0ICsyMCwx
MSBAQAogIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCi1pbXBvcnQgaXRl
cnRvb2xzCiBpbXBvcnQgbG9nZ2luZwotaW1wb3J0IG9zCi1pbXBvcnQgcmUKLWltcG9ydCBzaHV0
aWwKLWltcG9ydCBzdWJwcm9jZXNzCi1pbXBvcnQgdGltZQogCiBmcm9tIHdlYmtpdHB5LmNvbW1v
bi5tZW1vaXplZCBpbXBvcnQgbWVtb2l6ZWQKLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5l
eGVjdXRpdmUgaW1wb3J0IFNjcmlwdEVycm9yCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5t
b2RlbHMudGVzdF9jb25maWd1cmF0aW9uIGltcG9ydCBUZXN0Q29uZmlndXJhdGlvbgotZnJvbSB3
ZWJraXRweS5wb3J0IGltcG9ydCBjb25maWcgYXMgcG9ydF9jb25maWcKLWZyb20gd2Via2l0cHku
cG9ydCBpbXBvcnQgZHJpdmVyLCBpbWFnZV9kaWZmCiBmcm9tIHdlYmtpdHB5LnBvcnQuZGFyd2lu
IGltcG9ydCBEYXJ3aW5Qb3J0CiBmcm9tIHdlYmtpdHB5LnBvcnQuc2ltdWxhdG9yX3Byb2Nlc3Mg
aW1wb3J0IFNpbXVsYXRvclByb2Nlc3MKLWZyb20gd2Via2l0cHkueGNvZGUuc2ltdWxhdG9yIGlt
cG9ydCBTaW11bGF0b3IsIFJ1bnRpbWUsIERldmljZVR5cGUKLWZyb20gd2Via2l0cHkuY29tbW9u
LnN5c3RlbS5jcmFzaGxvZ3MgaW1wb3J0IENyYXNoTG9ncwotCiAKIF9sb2cgPSBsb2dnaW5nLmdl
dExvZ2dlcihfX25hbWVfXykKIApAQCAtNDUsNzIgKzMyLDIxIEBAIF9sb2cgPSBsb2dnaW5nLmdl
dExvZ2dlcihfX25hbWVfXykKIGNsYXNzIElPU1BvcnQoRGFyd2luUG9ydCk6CiAgICAgcG9ydF9u
YW1lID0gImlvcyIKIAotICAgIEFSQ0hJVEVDVFVSRVMgPSBbJ2FybXY3JywgJ2FybXY3cycsICdh
cm02NCddCi0gICAgREVGQVVMVF9BUkNISVRFQ1RVUkUgPSAnYXJtNjQnCi0gICAgVkVSU0lPTl9G
QUxMQkFDS19PUkRFUiA9IFsnaW9zLTcnLCAnaW9zLTgnLCAnaW9zLTknLCAnaW9zLTEwJ10KLQot
ICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBkZXRlcm1pbmVfZnVsbF9wb3J0X25hbWUoY2xzLCBo
b3N0LCBvcHRpb25zLCBwb3J0X25hbWUpOgotICAgICAgICBpZiBwb3J0X25hbWUgPT0gY2xzLnBv
cnRfbmFtZToKLSAgICAgICAgICAgIGlwaG9uZW9zX3Nka192ZXJzaW9uID0gaG9zdC5wbGF0Zm9y
bS54Y29kZV9zZGtfdmVyc2lvbignaXBob25lb3MnKQotICAgICAgICAgICAgaWYgbm90IGlwaG9u
ZW9zX3Nka192ZXJzaW9uOgotICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiUGxlYXNl
IGluc3RhbGwgdGhlIGlPUyBTREsuIikKLSAgICAgICAgICAgIG1ham9yX3ZlcnNpb25fbnVtYmVy
ID0gaXBob25lb3Nfc2RrX3ZlcnNpb24uc3BsaXQoJy4nKVswXQotICAgICAgICAgICAgcG9ydF9u
YW1lID0gcG9ydF9uYW1lICsgJy0nICsgbWFqb3JfdmVyc2lvbl9udW1iZXIKLSAgICAgICAgcmV0
dXJuIHBvcnRfbmFtZQotCi0gICAgIyBEZXNwaXRlIHRoZWlyIG5hbWVzLCB0aGVzZSBmbGFncyBk
byBub3QgYWN0dWFsbHkgZ2V0IHBhc3NlZCBhbGwgdGhlIHdheSBkb3duIHRvIHdlYmtpdC1idWls
ZC4KLSAgICBkZWYgX2J1aWxkX2RyaXZlcl9mbGFncyhzZWxmKToKLSAgICAgICAgcmV0dXJuIFsn
LS1zZGsnLCAnaXBob25lb3MnXSArIChbJ0FSQ0hTPSVzJyAlIHNlbGYuYXJjaGl0ZWN0dXJlKCld
IGlmIHNlbGYuYXJjaGl0ZWN0dXJlKCkgZWxzZSBbXSkKLQotICAgIGRlZiBvcGVyYXRpbmdfc3lz
dGVtKHNlbGYpOgotICAgICAgICByZXR1cm4gJ2lvcycKLQotCi1jbGFzcyBJT1NTaW11bGF0b3JQ
b3J0KERhcndpblBvcnQpOgotICAgIHBvcnRfbmFtZSA9ICJpb3Mtc2ltdWxhdG9yIgotCi0gICAg
RlVUVVJFX1ZFUlNJT04gPSAnZnV0dXJlJwotICAgIEFSQ0hJVEVDVFVSRVMgPSBbJ3g4Nl82NCcs
ICd4ODYnXQotICAgIERFRkFVTFRfQVJDSElURUNUVVJFID0gJ3g4Nl82NCcKLQotICAgIERFRkFV
TFRfREVWSUNFX0NMQVNTID0gJ2lwaG9uZScKLSAgICBDVVNUT01fREVWSUNFX0NMQVNTRVMgPSBb
J2lwYWQnLCAnaXBob25lNyddCi0gICAgU0RLID0gJ2lwaG9uZXNpbXVsYXRvcicKLQotICAgIFNJ
TVVMQVRPUl9CVU5ETEVfSUQgPSAnY29tLmFwcGxlLmlwaG9uZXNpbXVsYXRvcicKLSAgICBTSU1V
TEFUT1JfRElSRUNUT1JZID0gIi90bXAvV2ViS2l0VGVzdGluZ1NpbXVsYXRvcnMvIgotICAgIExT
UkVHSVNURVJfUEFUSCA9ICIvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Db3JlU2VydmljZXMu
ZnJhbWV3b3JrL0ZyYW1ld29ya3MvTGF1bmNoU2VydmljZXMuZnJhbWV3b3JrL1ZlcnNpb25zL0N1
cnJlbnQvU3VwcG9ydC9sc3JlZ2lzdGVyIgotICAgIFBST0NFU1NfQ09VTlRfRVNUSU1BVEVfUEVS
X1NJTVVMQVRPUl9JTlNUQU5DRSA9IDEwMAotCi0gICAgREVWSUNFX0NMQVNTX01BUCA9IHsKLSAg
ICAgICAgJ3g4Nl82NCc6IHsKLSAgICAgICAgICAgICdpcGhvbmUnOiAnaVBob25lIDVzJywKLSAg
ICAgICAgICAgICdpcGhvbmU3JzogJ2lQaG9uZSA3JywKLSAgICAgICAgICAgICdpcGFkJzogJ2lQ
YWQgQWlyJwotICAgICAgICB9LAotICAgICAgICAneDg2JzogewotICAgICAgICAgICAgJ2lwaG9u
ZSc6ICdpUGhvbmUgNScsCi0gICAgICAgICAgICAnaXBhZCc6ICdpUGFkIFJldGluYScKLSAgICAg
ICAgfSwKLSAgICB9Ci0KICAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAq
Kmt3YXJncyk6Ci0gICAgICAgIERhcndpblBvcnQuX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydF9u
YW1lLCAqKmt3YXJncykKKyAgICAgICAgc3VwZXIoSU9TUG9ydCwgc2VsZikuX19pbml0X18oaG9z
dCwgcG9ydF9uYW1lLCAqKmt3YXJncykKICAgICAgICAgc2VsZi5fdGVzdF9ydW5uZXJfcHJvY2Vz
c19jb25zdHJ1Y3RvciA9IFNpbXVsYXRvclByb2Nlc3MKLQotICAgICAgICBvcHRpb25hbF9kZXZp
Y2VfY2xhc3MgPSBzZWxmLmdldF9vcHRpb24oJ2RldmljZV9jbGFzcycpCiAgICAgICAgIHNlbGYu
X3ByaW50aW5nX2NtZF9saW5lID0gRmFsc2UKLSAgICAgICAgc2VsZi5fZGV2aWNlX2NsYXNzID0g
b3B0aW9uYWxfZGV2aWNlX2NsYXNzIGlmIG9wdGlvbmFsX2RldmljZV9jbGFzcyBlbHNlIHNlbGYu
REVGQVVMVF9ERVZJQ0VfQ0xBU1MKLSAgICAgICAgX2xvZy5kZWJ1ZygnSU9TU2ltdWxhdG9yUG9y
dCBfZGV2aWNlX2NsYXNzIGlzICVzJywgc2VsZi5fZGV2aWNlX2NsYXNzKQorICAgICAgICBzZWxm
Ll9jdXJyZW50X2RldmljZSA9IE5vbmUKKworICAgIGRlZiBfZGV2aWNlX2Zvcl93b3JrZXJfbnVt
YmVyX21hcChzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgogCi0gICAg
ICAgIHNlbGYuX2N1cnJlbnRfZGV2aWNlID0gU2ltdWxhdG9yKGhvc3QpLmN1cnJlbnRfZGV2aWNl
KCkKLSAgICAgICAgaWYgbm90IHNlbGYuX2N1cnJlbnRfZGV2aWNlOgotICAgICAgICAgICAgc2Vs
Zi5zZXRfb3B0aW9uKCdkZWRpY2F0ZWRfc2ltdWxhdG9ycycsIFRydWUpCi0gICAgICAgIGlmIG5v
dCBzZWxmLmdldF9vcHRpb24oJ2RlZGljYXRlZF9zaW11bGF0b3JzJyk6Ci0gICAgICAgICAgICBp
ZiBzZWxmLmdldF9vcHRpb24oJ2NoaWxkX3Byb2Nlc3NlcycpID4gMToKLSAgICAgICAgICAgICAg
ICBfbG9nLndhcm4oJ0Nhbm5vdCBoYXZlIG1vcmUgdGhhbiBvbmUgY2hpbGQgcHJvY2VzcyB3aGVu
IHVzaW5nIGEgcnVubmluZyBzaW11bGF0b3IuICBTZXR0aW5nIGNoaWxkX3Byb2Nlc3NlcyB0byAx
LicpCi0gICAgICAgICAgICBzZWxmLnNldF9vcHRpb24oJ2NoaWxkX3Byb2Nlc3NlcycsIDEpCisg
ICAgZGVmIGRyaXZlcl9jbWRfbGluZV9mb3JfbG9nZ2luZyhzZWxmKToKKyAgICAgICAgIyBBdm9p
ZCBjcmVhdGluZy9jb25uZWN0aW5nIHRvIGRldmljZXMganVzdCBmb3IgbG9nZ2luZyB0aGUgY29t
bWFuZGxpbmUuCisgICAgICAgIHNlbGYuX3ByaW50aW5nX2NtZF9saW5lID0gVHJ1ZQorICAgICAg
ICByZXN1bHQgPSBzdXBlcihJT1NQb3J0LCBzZWxmKS5kcml2ZXJfY21kX2xpbmVfZm9yX2xvZ2dp
bmcoKQorICAgICAgICBzZWxmLl9wcmludGluZ19jbWRfbGluZSA9IEZhbHNlCisgICAgICAgIHJl
dHVybiByZXN1bHQKIAogICAgIGRlZiBkcml2ZXJfbmFtZShzZWxmKToKICAgICAgICAgaWYgc2Vs
Zi5nZXRfb3B0aW9uKCdkcml2ZXJfbmFtZScpOgpAQCAtMTE5LDMxNSArNTUsMjQgQEAgY2xhc3Mg
SU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKICAgICAgICAgICAgIHJldHVybiAnV2ViS2l0
VGVzdFJ1bm5lckFwcC5hcHAnCiAgICAgICAgIHJldHVybiAnRHVtcFJlbmRlclRyZWUuYXBwJwog
Ci0gICAgZGVmIGRyaXZlcl9jbWRfbGluZV9mb3JfbG9nZ2luZyhzZWxmKToKLSAgICAgICAgIyBB
dm9pZCBzcGlubmluZyB1cCBkZXZpY2VzIGp1c3QgZm9yIGxvZ2dpbmcgdGhlIGNvbW1hbmRsaW5l
LgotICAgICAgICBzZWxmLl9wcmludGluZ19jbWRfbGluZSA9IFRydWUKLSAgICAgICAgcmVzdWx0
ID0gc3VwZXIoSU9TU2ltdWxhdG9yUG9ydCwgc2VsZikuZHJpdmVyX2NtZF9saW5lX2Zvcl9sb2dn
aW5nKCkKLSAgICAgICAgc2VsZi5fcHJpbnRpbmdfY21kX2xpbmUgPSBGYWxzZQotICAgICAgICBy
ZXR1cm4gcmVzdWx0Ci0KLSAgICBAcHJvcGVydHkKLSAgICBAbWVtb2l6ZWQKLSAgICBkZWYgc2lt
dWxhdG9yX3J1bnRpbWUoc2VsZik6Ci0gICAgICAgIHJ1bnRpbWVfaWRlbnRpZmllciA9IHNlbGYu
Z2V0X29wdGlvbigncnVudGltZScpCi0gICAgICAgIGlmIHJ1bnRpbWVfaWRlbnRpZmllcjoKLSAg
ICAgICAgICAgIHJ1bnRpbWUgPSBSdW50aW1lLmZyb21faWRlbnRpZmllcihydW50aW1lX2lkZW50
aWZpZXIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBydW50aW1lID0gUnVudGltZS5mcm9t
X3ZlcnNpb25fc3RyaW5nKHNlbGYuaG9zdC5wbGF0Zm9ybS54Y29kZV9zZGtfdmVyc2lvbignaXBo
b25lc2ltdWxhdG9yJykpCi0gICAgICAgIHJldHVybiBydW50aW1lCi0KLSAgICBkZWYgc2ltdWxh
dG9yX2RldmljZV90eXBlKHNlbGYpOgotICAgICAgICBkZXZpY2VfdHlwZV9pZGVudGlmaWVyID0g
c2VsZi5nZXRfb3B0aW9uKCdkZXZpY2VfdHlwZScpCi0gICAgICAgIGlmIGRldmljZV90eXBlX2lk
ZW50aWZpZXI6Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCdzaW11bGF0b3JfZGV2aWNlX3R5cGUg
Zm9yIGRldmljZSBpZGVudGlmaWVyICVzJywgZGV2aWNlX3R5cGVfaWRlbnRpZmllcikKLSAgICAg
ICAgICAgIGRldmljZV90eXBlID0gRGV2aWNlVHlwZS5mcm9tX2lkZW50aWZpZXIoZGV2aWNlX3R5
cGVfaWRlbnRpZmllcikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIF9sb2cuZGVidWcoJ3Np
bXVsYXRvcl9kZXZpY2VfdHlwZSBmb3IgZGV2aWNlICVzJywgc2VsZi5fZGV2aWNlX2NsYXNzKQot
ICAgICAgICAgICAgZGV2aWNlX25hbWUgPSBzZWxmLkRFVklDRV9DTEFTU19NQVBbc2VsZi5hcmNo
aXRlY3R1cmUoKV1bc2VsZi5fZGV2aWNlX2NsYXNzXQotICAgICAgICAgICAgaWYgbm90IGRldmlj
ZV9uYW1lOgotICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignRmFpbGVkIHRvIGZpbmQg
ZGV2aWNlIGZvciBhcmNoaXRlY3R1cmUge30gYW5kIGRldmljZSBjbGFzcyB7fScuZm9ybWF0KHNl
bGYuYXJjaGl0ZWN0dXJlKCkpLCBzZWxmLl9kZXZpY2VfY2xhc3MpCi0gICAgICAgICAgICBkZXZp
Y2VfdHlwZSA9IERldmljZVR5cGUuZnJvbV9uYW1lKGRldmljZV9uYW1lKQotICAgICAgICByZXR1
cm4gZGV2aWNlX3R5cGUKLQogICAgIEBtZW1vaXplZAogICAgIGRlZiBjaGlsZF9wcm9jZXNzZXMo
c2VsZik6CiAgICAgICAgIHJldHVybiBpbnQoc2VsZi5nZXRfb3B0aW9uKCdjaGlsZF9wcm9jZXNz
ZXMnKSkKIAotICAgIEBtZW1vaXplZAotICAgIGRlZiBkZWZhdWx0X2NoaWxkX3Byb2Nlc3Nlcyhz
ZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIHRoZSBudW1iZXIgb2YgU2ltdWxhdG9ycyBpbnN0YW5j
ZXMgdG8gdXNlIGZvciB0aGlzIHBvcnQuIiIiCi0gICAgICAgIGJlc3RfY2hpbGRfcHJvY2Vzc19j
b3VudF9mb3JfY3B1ID0gc2VsZi5fZXhlY3V0aXZlLmNwdV9jb3VudCgpIC8gMgotICAgICAgICBz
eXN0ZW1fcHJvY2Vzc19jb3VudF9saW1pdCA9IGludChzdWJwcm9jZXNzLmNoZWNrX291dHB1dChb
InVsaW1pdCIsICItdSJdKS5zdHJpcCgpKQotICAgICAgICBjdXJyZW50X3Byb2Nlc3NfY291bnQg
PSBsZW4oc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyJwcyIsICJhdXgiXSkuc3RyaXAoKS5zcGxp
dCgnXG4nKSkKLSAgICAgICAgX2xvZy5kZWJ1ZygnUHJvY2VzcyBsaW1pdDogJWQsIGN1cnJlbnQg
I3Byb2Nlc3NlczogJWQnICUgKHN5c3RlbV9wcm9jZXNzX2NvdW50X2xpbWl0LCBjdXJyZW50X3By
b2Nlc3NfY291bnQpKQotICAgICAgICBtYXhpbXVtX3NpbXVsYXRvcl9jb3VudF9vbl90aGlzX3N5
c3RlbSA9IChzeXN0ZW1fcHJvY2Vzc19jb3VudF9saW1pdCAtIGN1cnJlbnRfcHJvY2Vzc19jb3Vu
dCkgLy8gc2VsZi5QUk9DRVNTX0NPVU5UX0VTVElNQVRFX1BFUl9TSU1VTEFUT1JfSU5TVEFOQ0UK
LSAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIGFsc28gdGFrZSBpbnRvIGFjY291bnQgdGhlIGF2
YWlsYWJsZSBSQU0uCi0KLSAgICAgICAgaWYgKG1heGltdW1fc2ltdWxhdG9yX2NvdW50X29uX3Ro
aXNfc3lzdGVtIDwgYmVzdF9jaGlsZF9wcm9jZXNzX2NvdW50X2Zvcl9jcHUpOgotICAgICAgICAg
ICAgX2xvZy53YXJuKCJUaGlzIG1hY2hpbmUgY291bGQgc3VwcG9ydCAlcyBzaW11bGF0b3JzLCBi
dXQgaXMgb25seSBjb25maWd1cmVkIGZvciAlcy4iCi0gICAgICAgICAgICAgICAgJSAoYmVzdF9j
aGlsZF9wcm9jZXNzX2NvdW50X2Zvcl9jcHUsIG1heGltdW1fc2ltdWxhdG9yX2NvdW50X29uX3Ro
aXNfc3lzdGVtKSkKLSAgICAgICAgICAgIF9sb2cud2FybignUGxlYXNlIHNlZSA8aHR0cHM6Ly90
cmFjLndlYmtpdC5vcmcvd2lraS9JbmNyZWFzaW5nS2VybmVsTGltaXRzPi4nKQotCi0gICAgICAg
IGlmIG1heGltdW1fc2ltdWxhdG9yX2NvdW50X29uX3RoaXNfc3lzdGVtID09IDA6Ci0gICAgICAg
ICAgICBtYXhpbXVtX3NpbXVsYXRvcl9jb3VudF9vbl90aGlzX3N5c3RlbSA9IDEKLQotICAgICAg
ICByZXR1cm4gbWluKG1heGltdW1fc2ltdWxhdG9yX2NvdW50X29uX3RoaXNfc3lzdGVtLCBiZXN0
X2NoaWxkX3Byb2Nlc3NfY291bnRfZm9yX2NwdSkKLQotICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhz
ZWxmLCBuYW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuLCB0aW1lX2ZuPXRpbWUu
dGltZSwgc2xlZXBfZm49dGltZS5zbGVlcCwgd2FpdF9mb3JfbG9nPVRydWUpOgotICAgICAgICB0
aW1lX2ZuID0gdGltZV9mbiBvciB0aW1lLnRpbWUKLSAgICAgICAgc2xlZXBfZm4gPSBzbGVlcF9m
biBvciB0aW1lLnNsZWVwCi0KLSAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIGNvbGxlY3QgdGhl
IGFjdHVhbCBjcmFzaCBsb2cgZm9yIER1bXBSZW5kZXJUcmVlLmFwcCBiZWNhdXNlIGl0IGluY2x1
ZGVzIG1vcmUKLSAgICAgICAgIyBpbmZvcm1hdGlvbiAoZS5nLiBleGNlcHRpb24gY29kZXMpIHRo
YW4gaXMgYXZhaWxhYmxlIGluIHRoZSBzdGFjayB0cmFjZSB3cml0dGVuIHRvIHN0YW5kYXJkIGVy
cm9yLgotICAgICAgICBzdGRlcnJfbGluZXMgPSBbXQotICAgICAgICBjcmFzaGVkX3N1YnByb2Nl
c3NfbmFtZV9hbmRfcGlkID0gTm9uZSAgIyBlLmcuICgnRHVtcFJlbmRlclRyZWUuYXBwJywgMTIz
NCkKLSAgICAgICAgZm9yIGxpbmUgaW4gKHN0ZGVyciBvciAnJykuc3BsaXRsaW5lcygpOgotICAg
ICAgICAgICAgaWYgbm90IGNyYXNoZWRfc3VicHJvY2Vzc19uYW1lX2FuZF9waWQ6Ci0gICAgICAg
ICAgICAgICAgbWF0Y2ggPSBzZWxmLlNVQlBST0NFU1NfQ1JBU0hfUkVHRVgubWF0Y2gobGluZSkK
LSAgICAgICAgICAgICAgICBpZiBtYXRjaDoKLSAgICAgICAgICAgICAgICAgICAgY3Jhc2hlZF9z
dWJwcm9jZXNzX25hbWVfYW5kX3BpZCA9IChtYXRjaC5ncm91cCgnc3VicHJvY2Vzc19uYW1lJyks
IGludChtYXRjaC5ncm91cCgnc3VicHJvY2Vzc19waWQnKSkpCi0gICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlCi0gICAgICAgICAgICBzdGRlcnJfbGluZXMuYXBwZW5kKGxpbmUpCi0KLSAgICAg
ICAgaWYgY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZDoKLSAgICAgICAgICAgIHJldHVy
biBzZWxmLl9nZXRfY3Jhc2hfbG9nKGNyYXNoZWRfc3VicHJvY2Vzc19uYW1lX2FuZF9waWRbMF0s
IGNyYXNoZWRfc3VicHJvY2Vzc19uYW1lX2FuZF9waWRbMV0sIHN0ZG91dCwKLSAgICAgICAgICAg
ICAgICAnXG4nLmpvaW4oc3RkZXJyX2xpbmVzKSwgbmV3ZXJfdGhhbiwgdGltZV9mbiwgc2xlZXBf
Zm4sIHdhaXRfZm9yX2xvZykKLQotICAgICAgICAjIEFwcCBjcmFzaGVkCi0gICAgICAgIF9sb2cu
ZGVidWcoJ2xvb2tpbmcgZm9yIGNyYXNoIGxvZyBmb3IgJXM6JXMnICUgKG5hbWUsIHN0cihwaWQp
KSkKLSAgICAgICAgY3Jhc2hfbG9nID0gJycKLSAgICAgICAgY3Jhc2hfbG9ncyA9IENyYXNoTG9n
cyhzZWxmLmhvc3QpCi0gICAgICAgIG5vdyA9IHRpbWVfZm4oKQotICAgICAgICBkZWFkbGluZSA9
IG5vdyArIDUgKiBpbnQoc2VsZi5nZXRfb3B0aW9uKCdjaGlsZF9wcm9jZXNzZXMnLCAxKSkKLSAg
ICAgICAgd2hpbGUgbm90IGNyYXNoX2xvZyBhbmQgbm93IDw9IGRlYWRsaW5lOgotICAgICAgICAg
ICAgY3Jhc2hfbG9nID0gY3Jhc2hfbG9ncy5maW5kX25ld2VzdF9sb2cobmFtZSwgcGlkLCBpbmNs
dWRlX2Vycm9ycz1UcnVlLCBuZXdlcl90aGFuPW5ld2VyX3RoYW4pCi0gICAgICAgICAgICBpZiBu
b3Qgd2FpdF9mb3JfbG9nOgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBpZiBu
b3QgY3Jhc2hfbG9nIG9yIG5vdCBbbGluZSBmb3IgbGluZSBpbiBjcmFzaF9sb2cuc3BsaXRsaW5l
cygpIGlmIG5vdCBsaW5lLnN0YXJ0c3dpdGgoJ0VSUk9SJyldOgotICAgICAgICAgICAgICAgIHNs
ZWVwX2ZuKDAuMSkKLSAgICAgICAgICAgICAgICBub3cgPSB0aW1lX2ZuKCkKLQotICAgICAgICBp
ZiBub3QgY3Jhc2hfbG9nOgotICAgICAgICAgICAgcmV0dXJuIHN0ZGVyciwgTm9uZQotICAgICAg
ICByZXR1cm4gc3RkZXJyLCBjcmFzaF9sb2cKLQotICAgIGRlZiBfYnVpbGRfZHJpdmVyX2ZsYWdz
KHNlbGYpOgotICAgICAgICBhcmNocyA9IFsnQVJDSFM9aTM4NiddIGlmIHNlbGYuYXJjaGl0ZWN0
dXJlKCkgPT0gJ3g4NicgZWxzZSBbXQotICAgICAgICBzZGsgPSBbJy0tc2RrJywgJ2lwaG9uZXNp
bXVsYXRvciddCi0gICAgICAgIHJldHVybiBhcmNocyArIHNkawotCi0gICAgZGVmIF9nZW5lcmF0
ZV9hbGxfdGVzdF9jb25maWd1cmF0aW9ucyhzZWxmKToKLSAgICAgICAgY29uZmlndXJhdGlvbnMg
PSBbXQotICAgICAgICBmb3IgYnVpbGRfdHlwZSBpbiBzZWxmLkFMTF9CVUlMRF9UWVBFUzoKLSAg
ICAgICAgICAgIGZvciBhcmNoaXRlY3R1cmUgaW4gc2VsZi5BUkNISVRFQ1RVUkVTOgotICAgICAg
ICAgICAgICAgIGNvbmZpZ3VyYXRpb25zLmFwcGVuZChUZXN0Q29uZmlndXJhdGlvbih2ZXJzaW9u
PXNlbGYuX3ZlcnNpb24sIGFyY2hpdGVjdHVyZT1hcmNoaXRlY3R1cmUsIGJ1aWxkX3R5cGU9YnVp
bGRfdHlwZSkpCi0gICAgICAgIHJldHVybiBjb25maWd1cmF0aW9ucwotCi0gICAgZGVmIGRlZmF1
bHRfYmFzZWxpbmVfc2VhcmNoX3BhdGgoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuZ2V0X29wdGlv
bignd2Via2l0X3Rlc3RfcnVubmVyJyk6Ci0gICAgICAgICAgICBmYWxsYmFja19uYW1lcyA9IFtz
ZWxmLl93azJfcG9ydF9uYW1lKCldICsgW3NlbGYucG9ydF9uYW1lXSArIFsnd2syJ10KLSAgICAg
ICAgZWxzZToKLSAgICAgICAgICAgIGZhbGxiYWNrX25hbWVzID0gW3NlbGYucG9ydF9uYW1lICsg
Jy13azEnXSArIFtzZWxmLnBvcnRfbmFtZV0KLQotICAgICAgICByZXR1cm4gbWFwKHNlbGYuX3dl
YmtpdF9iYXNlbGluZV9wYXRoLCBmYWxsYmFja19uYW1lcykKLQotICAgIGRlZiBfc2V0X2Rldmlj
ZV9jbGFzcyhzZWxmLCBkZXZpY2VfY2xhc3MpOgotICAgICAgICBzZWxmLl9kZXZpY2VfY2xhc3Mg
PSBkZXZpY2VfY2xhc3MgaWYgZGV2aWNlX2NsYXNzIGVsc2Ugc2VsZi5ERUZBVUxUX0RFVklDRV9D
TEFTUwotCi0gICAgZGVmIF9jcmVhdGVfc2ltdWxhdG9ycyhzZWxmKToKLSAgICAgICAgaWYgKHNl
bGYuZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoKSA8IHNlbGYuY2hpbGRfcHJvY2Vzc2VzKCkpOgot
ICAgICAgICAgICAgX2xvZy53YXJuKCdZb3UgaGF2ZSBzcGVjaWZpZWQgdmVyeSBoaWdoIHZhbHVl
KHswfSkgZm9yIC0tY2hpbGQtcHJvY2Vzc2VzJy5mb3JtYXQoc2VsZi5jaGlsZF9wcm9jZXNzZXMo
KSkpCi0gICAgICAgICAgICBfbG9nLndhcm4oJ21heGltdW0gY2hpbGQtcHJvY2Vzc2VzIHdoaWNo
IGNhbiBiZSBzdXBwb3J0ZWQgb24gdGhpcyBzeXN0ZW0gYXJlOiB7MH0nLmZvcm1hdChzZWxmLmRl
ZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKCkpKQotICAgICAgICAgICAgX2xvZy53YXJuKCdUaGlzIGlz
IHZlcnkgbGlrZWx5IHRvIGZhaWwuJykKLQotICAgICAgICBpZiBzZWxmLl91c2luZ19kZWRpY2F0
ZWRfc2ltdWxhdG9ycygpOgotICAgICAgICAgICAgc2VsZi5fY3JlYXRlU2ltdWxhdG9yQXBwcygp
Ci0KLSAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZShzZWxmLmNoaWxkX3Byb2Nlc3NlcygpKToK
LSAgICAgICAgICAgICAgICBzZWxmLl9jcmVhdGVfZGV2aWNlKGkpCi0KLSAgICAgICAgICAgIGZv
ciBpIGluIHhyYW5nZShzZWxmLmNoaWxkX3Byb2Nlc3NlcygpKToKLSAgICAgICAgICAgICAgICBk
ZXZpY2VfdWRpZCA9IHNlbGYuX3Rlc3RpbmdfZGV2aWNlKGkpLnVkaWQKLSAgICAgICAgICAgICAg
ICBTaW11bGF0b3Iud2FpdF91bnRpbF9kZXZpY2VfaXNfaW5fc3RhdGUoZGV2aWNlX3VkaWQsIFNp
bXVsYXRvci5EZXZpY2VTdGF0ZS5TSFVURE9XTikKLSAgICAgICAgICAgICAgICBTaW11bGF0b3Iu
cmVzZXRfZGV2aWNlKGRldmljZV91ZGlkKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgYXNz
ZXJ0KHNlbGYuX2N1cnJlbnRfZGV2aWNlKQotICAgICAgICAgICAgaWYgc2VsZi5fY3VycmVudF9k
ZXZpY2UubmFtZSAhPSBzZWxmLnNpbXVsYXRvcl9kZXZpY2VfdHlwZSgpLm5hbWU6Ci0gICAgICAg
ICAgICAgICAgX2xvZy53YXJuKCJFeHBlY3RlZCBzaW11bGF0b3Igb2YgdHlwZSAnIiArIHNlbGYu
c2ltdWxhdG9yX2RldmljZV90eXBlKCkubmFtZSArICInIGJ1dCBmb3VuZCBzaW11bGF0b3Igb2Yg
dHlwZSAnIiArIHNlbGYuX2N1cnJlbnRfZGV2aWNlLm5hbWUgKyAiJyIpCi0gICAgICAgICAgICAg
ICAgX2xvZy53YXJuKCdUaGUgbmV4dCBibG9jayBvZiB0ZXN0cyBtYXkgZmFpbCBkdWUgdG8gZGV2
aWNlIG1pcy1tYXRjaCcpCi0KLSAgICBkZWYgc2V0dXBfdGVzdF9ydW4oc2VsZiwgZGV2aWNlX2Ns
YXNzPU5vbmUpOgotICAgICAgICBtYWNfb3NfdmVyc2lvbiA9IHNlbGYuaG9zdC5wbGF0Zm9ybS5v
c192ZXJzaW9uCi0KLSAgICAgICAgc2VsZi5fc2V0X2RldmljZV9jbGFzcyhkZXZpY2VfY2xhc3Mp
Ci0KLSAgICAgICAgX2xvZy5kZWJ1ZygnJykKLSAgICAgICAgX2xvZy5kZWJ1Zygnc2V0dXBfdGVz
dF9ydW4gZm9yICVzJywgc2VsZi5fZGV2aWNlX2NsYXNzKQotCi0gICAgICAgIHNlbGYuX2NyZWF0
ZV9zaW11bGF0b3JzKCkKLQotICAgICAgICBpZiBub3Qgc2VsZi5fdXNpbmdfZGVkaWNhdGVkX3Np
bXVsYXRvcnMoKToKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgIGZvciBpIGluIHhyYW5n
ZShzZWxmLmNoaWxkX3Byb2Nlc3NlcygpKToKLSAgICAgICAgICAgIGRldmljZV91ZGlkID0gc2Vs
Zi5fdGVzdGluZ19kZXZpY2UoaSkudWRpZAotICAgICAgICAgICAgX2xvZy5kZWJ1ZygndGVzdGlu
ZyBkZXZpY2UgJXMgaGFzIHVkaWQgJXMnLCBpLCBkZXZpY2VfdWRpZCkKLQotICAgICAgICAgICAg
IyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzIwOTE2MTQwPiBTd2l0Y2ggdG8gdXNpbmcgQ29yZVNp
bXVsYXRvci5mcmFtZXdvcmsgZm9yIGxhdW5jaGluZyBhbmQgcXVpdHRpbmcgaU9TIFNpbXVsYXRv
cgotICAgICAgICAgICAgc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsKLSAgICAgICAgICAg
ICAgICAnb3BlbicsICctZycsICctYicsIHNlbGYuU0lNVUxBVE9SX0JVTkRMRV9JRCArIHN0cihp
KSwKLSAgICAgICAgICAgICAgICAnLS1hcmdzJywgJy1DdXJyZW50RGV2aWNlVURJRCcsIGRldmlj
ZV91ZGlkXSkKLQotICAgICAgICAgICAgaWYgbWFjX29zX3ZlcnNpb24gaW4gWydlbGNhcGl0YW4n
LCAneW9zZW1pdGUnLCAnbWF2ZXJpY2tzJ106Ci0gICAgICAgICAgICAgICAgdGltZS5zbGVlcCgy
LjUpCi0KLSAgICAgICAgX2xvZy5pbmZvKCdXYWl0aW5nIGZvciBhbGwgaU9TIFNpbXVsYXRvcnMg
dG8gZmluaXNoIGJvb3RpbmcuJykKLSAgICAgICAgZm9yIGkgaW4geHJhbmdlKHNlbGYuY2hpbGRf
cHJvY2Vzc2VzKCkpOgotICAgICAgICAgICAgU2ltdWxhdG9yLndhaXRfdW50aWxfZGV2aWNlX2lz
X2Jvb3RlZChzZWxmLl90ZXN0aW5nX2RldmljZShpKS51ZGlkKQotCi0gICAgZGVmIF9xdWl0X2lv
c19zaW11bGF0b3Ioc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLl91c2luZ19kZWRpY2F0ZWRf
c2ltdWxhdG9ycygpOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIF9sb2cuZGVidWcoIl9x
dWl0X2lvc19zaW11bGF0b3Iga2lsbGluZyBhbGwgU2ltdWxhdG9yIHByb2Nlc3NlcyIpCi0gICAg
ICAgICMgRklYTUU6IFdlIHNob3VsZCBraWxsIG9ubHkgdGhlIFNpbXVsYXRvcnMgd2Ugc3RhcnRl
ZC4KLSAgICAgICAgc3VicHJvY2Vzcy5jYWxsKFsia2lsbGFsbCIsICItOSIsICItbSIsICJTaW11
bGF0b3IiXSkKLQotICAgIGRlZiBjbGVhbl91cF90ZXN0X3J1bihzZWxmKToKLSAgICAgICAgc3Vw
ZXIoSU9TU2ltdWxhdG9yUG9ydCwgc2VsZikuY2xlYW5fdXBfdGVzdF9ydW4oKQotICAgICAgICBf
bG9nLmRlYnVnKCJjbGVhbl91cF90ZXN0X3J1biIpCi0gICAgICAgIHNlbGYuX3F1aXRfaW9zX3Np
bXVsYXRvcigpCi0gICAgICAgIGZpZm9zID0gW3BhdGggZm9yIHBhdGggaW4gb3MubGlzdGRpcign
L3RtcCcpIGlmIHJlLnNlYXJjaCgnb3JnLndlYmtpdC4oRHVtcFJlbmRlclRyZWV8V2ViS2l0VGVz
dFJ1bm5lcikuKl8oSU58T1VUfEVSUk9SKScsIHBhdGgpXQotICAgICAgICBmb3IgZmlmbyBpbiBm
aWZvczoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBvcy5yZW1vdmUob3MucGF0
aC5qb2luKCcvdG1wJywgZmlmbykpCi0gICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKLSAgICAg
ICAgICAgICAgICBfbG9nLndhcm5pbmcoJ1VuYWJsZSB0byByZW1vdmUgJyArIGZpZm8pCi0gICAg
ICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIGlmIG5vdCBzZWxmLl91c2luZ19kZWRpY2F0ZWRf
c2ltdWxhdG9ycygpOgotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgZm9yIGkgaW4geHJh
bmdlKHNlbGYuY2hpbGRfcHJvY2Vzc2VzKCkpOgotICAgICAgICAgICAgc2ltdWxhdG9yX3BhdGgg
PSBzZWxmLmdldF9zaW11bGF0b3JfcGF0aChpKQotICAgICAgICAgICAgZGV2aWNlX3VkaWQgPSBz
ZWxmLl90ZXN0aW5nX2RldmljZShpKS51ZGlkCi0gICAgICAgICAgICBzZWxmLl9yZW1vdmVfZGV2
aWNlKGkpCi0KLSAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzaW11bGF0b3JfcGF0
aCk6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAg
ICAgICAgICBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQoW3NlbGYuTFNSRUdJU1RFUl9QQVRI
LCAiLXUiLCBzaW11bGF0b3JfcGF0aF0pCi0KLSAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCdy
bXRyZWUgJXMnLCBzaW11bGF0b3JfcGF0aCkKLSAgICAgICAgICAgICAgICBzZWxmLl9maWxlc3lz
dGVtLnJtdHJlZShzaW11bGF0b3JfcGF0aCkKLQotICAgICAgICAgICAgICAgIGxvZ3NfcGF0aCA9
IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl9maWxlc3lzdGVtLmV4cGFuZHVzZXIoIn4iKSwg
IkxpYnJhcnkvTG9ncy9Db3JlU2ltdWxhdG9yLyIsIGRldmljZV91ZGlkKQotICAgICAgICAgICAg
ICAgIF9sb2cuZGVidWcoJ3JtdHJlZSAlcycsIGxvZ3NfcGF0aCkKLSAgICAgICAgICAgICAgICBz
ZWxmLl9maWxlc3lzdGVtLnJtdHJlZShsb2dzX3BhdGgpCi0KLSAgICAgICAgICAgICAgICBzYXZl
ZF9zdGF0ZV9wYXRoID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYuX2ZpbGVzeXN0ZW0uZXhw
YW5kdXNlcigifiIpLCAiTGlicmFyeS9TYXZlZCBBcHBsaWNhdGlvbiBTdGF0ZS8iLCBzZWxmLlNJ
TVVMQVRPUl9CVU5ETEVfSUQgKyBzdHIoaSkgKyAiLnNhdmVkU3RhdGUiKQotICAgICAgICAgICAg
ICAgIF9sb2cuZGVidWcoJ3JtdHJlZSAlcycsIHNhdmVkX3N0YXRlX3BhdGgpCi0gICAgICAgICAg
ICAgICAgc2VsZi5fZmlsZXN5c3RlbS5ybXRyZWUoc2F2ZWRfc3RhdGVfcGF0aCkKLQotICAgICAg
ICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgIF9sb2cud2FybmluZygnVW5hYmxlIHRvIHJl
bW92ZSBTaW11bGF0b3InICsgc3RyKGkpKQotCi0gICAgZGVmIHNldHVwX2Vudmlyb25fZm9yX3Nl
cnZlcihzZWxmLCBzZXJ2ZXJfbmFtZT1Ob25lKToKLSAgICAgICAgX2xvZy5kZWJ1Zygic2V0dXBf
ZW52aXJvbl9mb3Jfc2VydmVyIikKLSAgICAgICAgZW52ID0gc3VwZXIoSU9TU2ltdWxhdG9yUG9y
dCwgc2VsZikuc2V0dXBfZW52aXJvbl9mb3Jfc2VydmVyKHNlcnZlcl9uYW1lKQotICAgICAgICBp
ZiBzZXJ2ZXJfbmFtZSA9PSBzZWxmLmRyaXZlcl9uYW1lKCk6Ci0gICAgICAgICAgICBpZiBzZWxm
LmdldF9vcHRpb24oJ2xlYWtzJyk6Ci0gICAgICAgICAgICAgICAgZW52WydNYWxsb2NTdGFja0xv
Z2dpbmcnXSA9ICcxJwotICAgICAgICAgICAgICAgIGVudlsnX19YUENfTWFsbG9jU3RhY2tMb2dn
aW5nJ10gPSAnMScKLSAgICAgICAgICAgICAgICBlbnZbJ01hbGxvY1NjcmliYmxlJ10gPSAnMScK
LSAgICAgICAgICAgICAgICBlbnZbJ19fWFBDX01hbGxvY1NjcmliYmxlJ10gPSAnMScKLSAgICAg
ICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbignZ3VhcmRfbWFsbG9jJyk6Ci0gICAgICAgICAgICAg
ICAgc2VsZi5fYXBwZW5kX3ZhbHVlX2NvbG9uX3NlcGFyYXRlZChlbnYsICdEWUxEX0lOU0VSVF9M
SUJSQVJJRVMnLCAnL3Vzci9saWIvbGliZ21hbGxvYy5keWxpYicpCi0gICAgICAgICAgICAgICAg
c2VsZi5fYXBwZW5kX3ZhbHVlX2NvbG9uX3NlcGFyYXRlZChlbnYsICdfX1hQQ19EWUxEX0lOU0VS
VF9MSUJSQVJJRVMnLCAnL3Vzci9saWIvbGliZ21hbGxvYy5keWxpYicpCi0gICAgICAgIGVudlsn
WE1MX0NBVEFMT0dfRklMRVMnXSA9ICcnICAjIHdvcmsgYXJvdW5kIG1pc3NpbmcgL2V0Yy9jYXRh
bG9nIDxyZGFyOi8vcHJvYmxlbS80MjkyOTk1PgotICAgICAgICByZXR1cm4gZW52Ci0KLSAgICBk
ZWYgb3BlcmF0aW5nX3N5c3RlbShzZWxmKToKLSAgICAgICAgcmV0dXJuICdpb3Mtc2ltdWxhdG9y
JwotCi0gICAgZGVmIGNoZWNrX3N5c19kZXBzKHNlbGYsIG5lZWRzX2h0dHApOgotICAgICAgICBp
ZiBub3Qgc2VsZi5zaW11bGF0b3JfcnVudGltZS5hdmFpbGFibGU6Ci0gICAgICAgICAgICBfbG9n
LmVycm9yKCdUaGUgaU9TIFNpbXVsYXRvciBydW50aW1lIHdpdGggaWRlbnRpZmllciAiezB9IiBj
YW5ub3QgYmUgdXNlZCBiZWNhdXNlIGl0IGlzIHVuYXZhaWxhYmxlLicuZm9ybWF0KHNlbGYuc2lt
dWxhdG9yX3J1bnRpbWUuaWRlbnRpZmllcikpCi0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAg
ICAgICAgcmV0dXJuIHN1cGVyKElPU1NpbXVsYXRvclBvcnQsIHNlbGYpLmNoZWNrX3N5c19kZXBz
KG5lZWRzX2h0dHApCi0KLSAgICBTVUJQUk9DRVNTX0NSQVNIX1JFR0VYID0gcmUuY29tcGlsZSgn
I0NSQVNIRUQgLSAoP1A8c3VicHJvY2Vzc19uYW1lPlxTKykgXChwaWQgKD9QPHN1YnByb2Nlc3Nf
cGlkPlxkKylcKScpCi0KLSAgICBkZWYgX3VzaW5nX2RlZGljYXRlZF9zaW11bGF0b3JzKHNlbGYp
OgotICAgICAgICByZXR1cm4gc2VsZi5nZXRfb3B0aW9uKCdkZWRpY2F0ZWRfc2ltdWxhdG9ycycp
Ci0KLSAgICBkZWYgX2NyZWF0ZV9kZXZpY2Uoc2VsZiwgbnVtYmVyKToKLSAgICAgICAgcmV0dXJu
IFNpbXVsYXRvci5jcmVhdGVfZGV2aWNlKG51bWJlciwgc2VsZi5zaW11bGF0b3JfZGV2aWNlX3R5
cGUoKSwgc2VsZi5zaW11bGF0b3JfcnVudGltZSkKLQotICAgIGRlZiBfcmVtb3ZlX2RldmljZShz
ZWxmLCBudW1iZXIpOgotICAgICAgICBTaW11bGF0b3IucmVtb3ZlX2RldmljZShudW1iZXIpCisg
ICAgZGVmIHVzaW5nX211bHRpcGxlX2RldmljZXMoc2VsZik6CisgICAgICAgIHJldHVybiBGYWxz
ZQogCiAgICAgZGVmIF90ZXN0aW5nX2RldmljZShzZWxmLCBudW1iZXIpOgotICAgICAgICByZXR1
cm4gU2ltdWxhdG9yLmRldmljZV9udW1iZXIobnVtYmVyKQorICAgICAgICBkZXZpY2UgPSBzZWxm
Ll9kZXZpY2VfZm9yX3dvcmtlcl9udW1iZXJfbWFwKClbbnVtYmVyXQorICAgICAgICBpZiBub3Qg
ZGV2aWNlOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdEZXZpY2UgYXQge30gY291
bGQgbm90IGJlIGZvdW5kJy5mb3JtYXQobnVtYmVyKSkKKyAgICAgICAgcmV0dXJuIGRldmljZQog
CiAgICAgIyBGSVhNRTogVGhpcyBpcyBvbmx5IGV4cG9zZWQgc28gdGhhdCBTaW11bGF0b3JQcm9j
ZXNzIGNhbiB1c2UgaXQuCi0gICAgZGVmIGRldmljZV9pZF9mb3Jfd29ya2VyX251bWJlcihzZWxm
LCBudW1iZXIpOgorICAgIGRlZiBkZXZpY2VfZm9yX3dvcmtlcl9udW1iZXIoc2VsZiwgbnVtYmVy
KToKICAgICAgICAgaWYgc2VsZi5fcHJpbnRpbmdfY21kX2xpbmU6Ci0gICAgICAgICAgICByZXR1
cm4gJzxkdW1teSBpZD4nCi0gICAgICAgIGlmIHNlbGYuX3VzaW5nX2RlZGljYXRlZF9zaW11bGF0
b3JzKCk6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fdGVzdGluZ19kZXZpY2UobnVtYmVyKS51
ZGlkCi0gICAgICAgIHJldHVybiBzZWxmLl9jdXJyZW50X2RldmljZS51ZGlkCi0KLSAgICBkZWYg
Z2V0X3NpbXVsYXRvcl9wYXRoKHNlbGYsIHN1ZmZpeD0iIik6Ci0gICAgICAgIHJldHVybiBvcy5w
YXRoLmpvaW4oc2VsZi5TSU1VTEFUT1JfRElSRUNUT1JZLCAiU2ltdWxhdG9yIiArIHN0cihzdWZm
aXgpICsgIi5hcHAiKQotCi0gICAgZGVmIGRpZmZfaW1hZ2Uoc2VsZiwgZXhwZWN0ZWRfY29udGVu
dHMsIGFjdHVhbF9jb250ZW50cywgdG9sZXJhbmNlPU5vbmUpOgotICAgICAgICBpZiBub3QgYWN0
dWFsX2NvbnRlbnRzIGFuZCBub3QgZXhwZWN0ZWRfY29udGVudHM6Ci0gICAgICAgICAgICByZXR1
cm4gKE5vbmUsIDAsIE5vbmUpCi0gICAgICAgIGlmIG5vdCBhY3R1YWxfY29udGVudHMgb3Igbm90
IGV4cGVjdGVkX2NvbnRlbnRzOgotICAgICAgICAgICAgcmV0dXJuIChUcnVlLCAwLCBOb25lKQot
ICAgICAgICBpZiBub3Qgc2VsZi5faW1hZ2VfZGlmZmVyOgotICAgICAgICAgICAgc2VsZi5faW1h
Z2VfZGlmZmVyID0gaW1hZ2VfZGlmZi5JT1NTaW11bGF0b3JJbWFnZURpZmZlcihzZWxmKQotICAg
ICAgICBzZWxmLnNldF9vcHRpb25fZGVmYXVsdCgndG9sZXJhbmNlJywgMC4xKQotICAgICAgICBp
ZiB0b2xlcmFuY2UgaXMgTm9uZToKLSAgICAgICAgICAgIHRvbGVyYW5jZSA9IHNlbGYuZ2V0X29w
dGlvbigndG9sZXJhbmNlJykKLSAgICAgICAgcmV0dXJuIHNlbGYuX2ltYWdlX2RpZmZlci5kaWZm
X2ltYWdlKGV4cGVjdGVkX2NvbnRlbnRzLCBhY3R1YWxfY29udGVudHMsIHRvbGVyYW5jZSkKLQot
ICAgIGRlZiByZXNldF9wcmVmZXJlbmNlcyhzZWxmKToKLSAgICAgICAgX2xvZy5kZWJ1ZygicmVz
ZXRfcHJlZmVyZW5jZXMiKQotICAgICAgICBzZWxmLl9xdWl0X2lvc19zaW11bGF0b3IoKQotICAg
ICAgICAjIE1heWJlIHRoaXMgc2hvdWxkIGRlbGV0ZSBhbGwgZGV2aWNlcyB0aGF0IHdlJ3ZlIGNy
ZWF0ZWQ/Ci0KLSAgICBkZWYgbm1fY29tbWFuZChzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYu
eGNydW5fZmluZCgnbm0nKQotCi0gICAgQHByb3BlcnR5Ci0gICAgQG1lbW9pemVkCi0gICAgZGVm
IGRldmVsb3Blcl9kaXIoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9leGVjdXRpdmUucnVu
X2NvbW1hbmQoWyd4Y29kZS1zZWxlY3QnLCAnLS1wcmludC1wYXRoJ10pLnJzdHJpcCgpCi0KLSAg
ICBkZWYgbG9nZ2luZ19wYXR0ZXJuc190b19zdHJpcChzZWxmKToKLSAgICAgICAgcmV0dXJuIFtd
Ci0KLSAgICBkZWYgc3RkZXJyX3BhdHRlcm5zX3RvX3N0cmlwKHNlbGYpOgotICAgICAgICByZXR1
cm4gW10KLQotICAgIGRlZiBfY3JlYXRlU2ltdWxhdG9yQXBwcyhzZWxmKToKLSAgICAgICAgZm9y
IGkgaW4geHJhbmdlKHNlbGYuY2hpbGRfcHJvY2Vzc2VzKCkpOgotICAgICAgICAgICAgc2VsZi5f
Y3JlYXRlU2ltdWxhdG9yQXBwKGkpCi0KLSAgICBkZWYgX2NyZWF0ZVNpbXVsYXRvckFwcChzZWxm
LCBzdWZmaXgpOgotICAgICAgICBkZXN0aW5hdGlvbiA9IHNlbGYuZ2V0X3NpbXVsYXRvcl9wYXRo
KHN1ZmZpeCkKLSAgICAgICAgX2xvZy5pbmZvKCJDcmVhdGluZyBhcHA6IiArIGRlc3RpbmF0aW9u
KQotICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhkZXN0aW5hdGlvbik6Ci0gICAgICAgICAgICBz
aHV0aWwucm10cmVlKGRlc3RpbmF0aW9uLCBpZ25vcmVfZXJyb3JzPVRydWUpCi0gICAgICAgIHNp
bXVsYXRvcl9hcHBfcGF0aCA9IHNlbGYuZGV2ZWxvcGVyX2RpciArICIvQXBwbGljYXRpb25zL1Np
bXVsYXRvci5hcHAiCi0gICAgICAgIHNodXRpbC5jb3B5dHJlZShzaW11bGF0b3JfYXBwX3BhdGgs
IGRlc3RpbmF0aW9uKQotCi0gICAgICAgICMgVXBkYXRlIGFwcCdzIHBhY2thZ2UtbmFtZSBpbnNp
ZGUgcGxpc3QgYW5kIHJlLWNvZGUtc2lnbiBpdAotICAgICAgICBwbGlzdF9wYXRoID0gZGVzdGlu
YXRpb24gKyAiL0NvbnRlbnRzL0luZm8ucGxpc3QiCi0gICAgICAgIGNvbW1hbmQgPSAiU2V0IENG
QnVuZGxlSWRlbnRpZmllciBjb20uYXBwbGUuaXBob25lc2ltdWxhdG9yIiArIHN0cihzdWZmaXgp
Ci0gICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsiL3Vzci9saWJleGVjL1BsaXN0QnVk
ZHkiLCAiLWMiLCBjb21tYW5kLCBwbGlzdF9wYXRoXSkKLSAgICAgICAgc3VicHJvY2Vzcy5jaGVj
a19vdXRwdXQoWyJpbnN0YWxsX25hbWVfdG9vbCIsICItYWRkX3JwYXRoIiwgc2VsZi5kZXZlbG9w
ZXJfZGlyICsgIi9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzLyIsIGRlc3RpbmF0aW9uICsgIi9D
b250ZW50cy9NYWNPUy9TaW11bGF0b3IiXSkKLSAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRw
dXQoWyJpbnN0YWxsX25hbWVfdG9vbCIsICItYWRkX3JwYXRoIiwgc2VsZi5kZXZlbG9wZXJfZGly
ICsgIi8uLi9GcmFtZXdvcmtzLyIsIGRlc3RpbmF0aW9uICsgIi9Db250ZW50cy9NYWNPUy9TaW11
bGF0b3IiXSkKLSAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyJjb2Rlc2lnbiIsICIt
ZnMiLCAiLSIsIGRlc3RpbmF0aW9uXSkKLSAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQo
W3NlbGYuTFNSRUdJU1RFUl9QQVRILCAiLWYiLCBkZXN0aW5hdGlvbl0pCisgICAgICAgICAgICBy
ZXR1cm4gTm9uZQorICAgICAgICAjIFdoZW4gdXNpbmcgc2ltdWxhdGVkIGRldmljZXMsIHRoaXMg
bWVhbnMgd2Via2l0cHkgaXMgbWFuYWdpbmcgdGhlIGRldmljZXMuCisgICAgICAgIGlmIHNlbGYu
dXNpbmdfbXVsdGlwbGVfZGV2aWNlcygpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3Rlc3Rp
bmdfZGV2aWNlKG51bWJlcikKKyAgICAgICAgcmV0dXJuIHNlbGYuX2N1cnJlbnRfZGV2aWNlCklu
ZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX2RldmljZS5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX2RldmljZS5weQkobm9uZXhpc3Rl
bnQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX2RldmljZS5weQkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBACisjIENvcHlyaWdodCAoQykgMjAxNC0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
IyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAor
IyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworaW1wb3J0IGxvZ2dpbmcKKworZnJvbSB3ZWJraXRweS5wb3J0LmlvcyBp
bXBvcnQgSU9TUG9ydAorCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKKwor
Y2xhc3MgSU9TRGV2aWNlUG9ydChJT1NQb3J0KToKKyAgICBwb3J0X25hbWUgPSAnaW9zJworCisg
ICAgQVJDSElURUNUVVJFUyA9IFsnYXJtdjcnLCAnYXJtdjdzJywgJ2FybTY0J10KKyAgICBERUZB
VUxUX0FSQ0hJVEVDVFVSRSA9ICdhcm02NCcKKyAgICBWRVJTSU9OX0ZBTExCQUNLX09SREVSID0g
Wydpb3MtNycsICdpb3MtOCcsICdpb3MtOScsICdpb3MtMTAnXQorCisgICAgQGNsYXNzbWV0aG9k
CisgICAgZGVmIGRldGVybWluZV9mdWxsX3BvcnRfbmFtZShjbHMsIGhvc3QsIG9wdGlvbnMsIHBv
cnRfbmFtZSk6CisgICAgICAgIGlmIHBvcnRfbmFtZSA9PSBjbHMucG9ydF9uYW1lOgorICAgICAg
ICAgICAgaXBob25lb3Nfc2RrX3ZlcnNpb24gPSBob3N0LnBsYXRmb3JtLnhjb2RlX3Nka192ZXJz
aW9uKCdpcGhvbmVvcycpCisgICAgICAgICAgICBpZiBub3QgaXBob25lb3Nfc2RrX3ZlcnNpb246
CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJQbGVhc2UgaW5zdGFsbCB0aGUgaU9T
IFNESy4iKQorICAgICAgICAgICAgbWFqb3JfdmVyc2lvbl9udW1iZXIgPSBpcGhvbmVvc19zZGtf
dmVyc2lvbi5zcGxpdCgnLicpWzBdCisgICAgICAgICAgICBwb3J0X25hbWUgPSBwb3J0X25hbWUg
KyAnLScgKyBtYWpvcl92ZXJzaW9uX251bWJlcgorICAgICAgICByZXR1cm4gcG9ydF9uYW1lCisK
KyAgICAjIERlc3BpdGUgdGhlaXIgbmFtZXMsIHRoZXNlIGZsYWdzIGRvIG5vdCBhY3R1YWxseSBn
ZXQgcGFzc2VkIGFsbCB0aGUgd2F5IGRvd24gdG8gd2Via2l0LWJ1aWxkLgorICAgIGRlZiBfYnVp
bGRfZHJpdmVyX2ZsYWdzKHNlbGYpOgorICAgICAgICByZXR1cm4gWyctLXNkaycsICdpcGhvbmVv
cyddICsgKFsnQVJDSFM9JXMnICUgc2VsZi5hcmNoaXRlY3R1cmUoKV0gaWYgc2VsZi5hcmNoaXRl
Y3R1cmUoKSBlbHNlIFtdKQorCisgICAgZGVmIG9wZXJhdGluZ19zeXN0ZW0oc2VsZik6CisgICAg
ICAgIHJldHVybiAnaW9zJwpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19z
aW11bGF0b3IucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lv
c19zaW11bGF0b3IucHkJKHJldmlzaW9uIDIxMzIzMCkJKGZyb20gVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9wb3J0L2lvcy5weToyMTMyMzApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
aW9zX3NpbXVsYXRvci5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzMyBAQAorIyBDb3B5
cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisj
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBpdGVydG9vbHMK
K2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHNodXRpbAoraW1w
b3J0IHN1YnByb2Nlc3MKK2ltcG9ydCB0aW1lCisKK2Zyb20gd2Via2l0cHkuY29tbW9uLm1lbW9p
emVkIGltcG9ydCBtZW1vaXplZAorZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2
ZSBpbXBvcnQgU2NyaXB0RXJyb3IKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLm1vZGVscy50
ZXN0X2NvbmZpZ3VyYXRpb24gaW1wb3J0IFRlc3RDb25maWd1cmF0aW9uCitmcm9tIHdlYmtpdHB5
LnBvcnQgaW1wb3J0IGNvbmZpZyBhcyBwb3J0X2NvbmZpZworZnJvbSB3ZWJraXRweS5wb3J0IGlt
cG9ydCBkcml2ZXIsIGltYWdlX2RpZmYKK2Zyb20gd2Via2l0cHkucG9ydC5kYXJ3aW4gaW1wb3J0
IERhcndpblBvcnQKK2Zyb20gd2Via2l0cHkucG9ydC5zaW11bGF0b3JfcHJvY2VzcyBpbXBvcnQg
U2ltdWxhdG9yUHJvY2VzcworZnJvbSB3ZWJraXRweS54Y29kZS5zaW11bGF0b3IgaW1wb3J0IFNp
bXVsYXRvciwgUnVudGltZSwgRGV2aWNlVHlwZQorZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVt
LmNyYXNobG9ncyBpbXBvcnQgQ3Jhc2hMb2dzCisKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2Vy
KF9fbmFtZV9fKQorCisKK2NsYXNzIElPU1BvcnQoRGFyd2luUG9ydCk6CisgICAgcG9ydF9uYW1l
ID0gImlvcyIKKworICAgIEFSQ0hJVEVDVFVSRVMgPSBbJ2FybXY3JywgJ2FybXY3cycsICdhcm02
NCddCisgICAgREVGQVVMVF9BUkNISVRFQ1RVUkUgPSAnYXJtNjQnCisgICAgVkVSU0lPTl9GQUxM
QkFDS19PUkRFUiA9IFsnaW9zLTcnLCAnaW9zLTgnLCAnaW9zLTknLCAnaW9zLTEwJ10KKworICAg
IEBjbGFzc21ldGhvZAorICAgIGRlZiBkZXRlcm1pbmVfZnVsbF9wb3J0X25hbWUoY2xzLCBob3N0
LCBvcHRpb25zLCBwb3J0X25hbWUpOgorICAgICAgICBpZiBwb3J0X25hbWUgPT0gY2xzLnBvcnRf
bmFtZToKKyAgICAgICAgICAgIGlwaG9uZW9zX3Nka192ZXJzaW9uID0gaG9zdC5wbGF0Zm9ybS54
Y29kZV9zZGtfdmVyc2lvbignaXBob25lb3MnKQorICAgICAgICAgICAgaWYgbm90IGlwaG9uZW9z
X3Nka192ZXJzaW9uOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiUGxlYXNlIGlu
c3RhbGwgdGhlIGlPUyBTREsuIikKKyAgICAgICAgICAgIG1ham9yX3ZlcnNpb25fbnVtYmVyID0g
aXBob25lb3Nfc2RrX3ZlcnNpb24uc3BsaXQoJy4nKVswXQorICAgICAgICAgICAgcG9ydF9uYW1l
ID0gcG9ydF9uYW1lICsgJy0nICsgbWFqb3JfdmVyc2lvbl9udW1iZXIKKyAgICAgICAgcmV0dXJu
IHBvcnRfbmFtZQorCisgICAgIyBEZXNwaXRlIHRoZWlyIG5hbWVzLCB0aGVzZSBmbGFncyBkbyBu
b3QgYWN0dWFsbHkgZ2V0IHBhc3NlZCBhbGwgdGhlIHdheSBkb3duIHRvIHdlYmtpdC1idWlsZC4K
KyAgICBkZWYgX2J1aWxkX2RyaXZlcl9mbGFncyhzZWxmKToKKyAgICAgICAgcmV0dXJuIFsnLS1z
ZGsnLCAnaXBob25lb3MnXSArIChbJ0FSQ0hTPSVzJyAlIHNlbGYuYXJjaGl0ZWN0dXJlKCldIGlm
IHNlbGYuYXJjaGl0ZWN0dXJlKCkgZWxzZSBbXSkKKworICAgIGRlZiBvcGVyYXRpbmdfc3lzdGVt
KHNlbGYpOgorICAgICAgICByZXR1cm4gJ2lvcycKKworCitjbGFzcyBJT1NTaW11bGF0b3JQb3J0
KERhcndpblBvcnQpOgorICAgIHBvcnRfbmFtZSA9ICJpb3Mtc2ltdWxhdG9yIgorCisgICAgRlVU
VVJFX1ZFUlNJT04gPSAnZnV0dXJlJworICAgIEFSQ0hJVEVDVFVSRVMgPSBbJ3g4Nl82NCcsICd4
ODYnXQorICAgIERFRkFVTFRfQVJDSElURUNUVVJFID0gJ3g4Nl82NCcKKworICAgIERFRkFVTFRf
REVWSUNFX0NMQVNTID0gJ2lwaG9uZScKKyAgICBDVVNUT01fREVWSUNFX0NMQVNTRVMgPSBbJ2lw
YWQnLCAnaXBob25lNyddCisgICAgU0RLID0gJ2lwaG9uZXNpbXVsYXRvcicKKworICAgIFNJTVVM
QVRPUl9CVU5ETEVfSUQgPSAnY29tLmFwcGxlLmlwaG9uZXNpbXVsYXRvcicKKyAgICBTSU1VTEFU
T1JfRElSRUNUT1JZID0gIi90bXAvV2ViS2l0VGVzdGluZ1NpbXVsYXRvcnMvIgorICAgIExTUkVH
SVNURVJfUEFUSCA9ICIvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Db3JlU2VydmljZXMuZnJh
bWV3b3JrL0ZyYW1ld29ya3MvTGF1bmNoU2VydmljZXMuZnJhbWV3b3JrL1ZlcnNpb25zL0N1cnJl
bnQvU3VwcG9ydC9sc3JlZ2lzdGVyIgorICAgIFBST0NFU1NfQ09VTlRfRVNUSU1BVEVfUEVSX1NJ
TVVMQVRPUl9JTlNUQU5DRSA9IDEwMAorCisgICAgREVWSUNFX0NMQVNTX01BUCA9IHsKKyAgICAg
ICAgJ3g4Nl82NCc6IHsKKyAgICAgICAgICAgICdpcGhvbmUnOiAnaVBob25lIDVzJywKKyAgICAg
ICAgICAgICdpcGhvbmU3JzogJ2lQaG9uZSA3JywKKyAgICAgICAgICAgICdpcGFkJzogJ2lQYWQg
QWlyJworICAgICAgICB9LAorICAgICAgICAneDg2JzogeworICAgICAgICAgICAgJ2lwaG9uZSc6
ICdpUGhvbmUgNScsCisgICAgICAgICAgICAnaXBhZCc6ICdpUGFkIFJldGluYScKKyAgICAgICAg
fSwKKyAgICB9CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3
YXJncyk6CisgICAgICAgIERhcndpblBvcnQuX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydF9uYW1l
LCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5fdGVzdF9ydW5uZXJfcHJvY2Vzc19jb25zdHJ1Y3Rv
ciA9IFNpbXVsYXRvclByb2Nlc3MKKworICAgICAgICBvcHRpb25hbF9kZXZpY2VfY2xhc3MgPSBz
ZWxmLmdldF9vcHRpb24oJ2RldmljZV9jbGFzcycpCisgICAgICAgIHNlbGYuX3ByaW50aW5nX2Nt
ZF9saW5lID0gRmFsc2UKKyAgICAgICAgc2VsZi5fZGV2aWNlX2NsYXNzID0gb3B0aW9uYWxfZGV2
aWNlX2NsYXNzIGlmIG9wdGlvbmFsX2RldmljZV9jbGFzcyBlbHNlIHNlbGYuREVGQVVMVF9ERVZJ
Q0VfQ0xBU1MKKyAgICAgICAgX2xvZy5kZWJ1ZygnSU9TU2ltdWxhdG9yUG9ydCBfZGV2aWNlX2Ns
YXNzIGlzICVzJywgc2VsZi5fZGV2aWNlX2NsYXNzKQorCisgICAgICAgIHNlbGYuX2N1cnJlbnRf
ZGV2aWNlID0gU2ltdWxhdG9yKGhvc3QpLmN1cnJlbnRfZGV2aWNlKCkKKyAgICAgICAgaWYgbm90
IHNlbGYuX2N1cnJlbnRfZGV2aWNlOgorICAgICAgICAgICAgc2VsZi5zZXRfb3B0aW9uKCdkZWRp
Y2F0ZWRfc2ltdWxhdG9ycycsIFRydWUpCisgICAgICAgIGlmIG5vdCBzZWxmLmdldF9vcHRpb24o
J2RlZGljYXRlZF9zaW11bGF0b3JzJyk6CisgICAgICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24o
J2NoaWxkX3Byb2Nlc3NlcycpID4gMToKKyAgICAgICAgICAgICAgICBfbG9nLndhcm4oJ0Nhbm5v
dCBoYXZlIG1vcmUgdGhhbiBvbmUgY2hpbGQgcHJvY2VzcyB3aGVuIHVzaW5nIGEgcnVubmluZyBz
aW11bGF0b3IuICBTZXR0aW5nIGNoaWxkX3Byb2Nlc3NlcyB0byAxLicpCisgICAgICAgICAgICBz
ZWxmLnNldF9vcHRpb24oJ2NoaWxkX3Byb2Nlc3NlcycsIDEpCisKKyAgICBkZWYgZHJpdmVyX25h
bWUoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbignZHJpdmVyX25hbWUnKToKKyAg
ICAgICAgICAgIHJldHVybiBzZWxmLmdldF9vcHRpb24oJ2RyaXZlcl9uYW1lJykKKyAgICAgICAg
aWYgc2VsZi5nZXRfb3B0aW9uKCd3ZWJraXRfdGVzdF9ydW5uZXInKToKKyAgICAgICAgICAgIHJl
dHVybiAnV2ViS2l0VGVzdFJ1bm5lckFwcC5hcHAnCisgICAgICAgIHJldHVybiAnRHVtcFJlbmRl
clRyZWUuYXBwJworCisgICAgZGVmIGRyaXZlcl9jbWRfbGluZV9mb3JfbG9nZ2luZyhzZWxmKToK
KyAgICAgICAgIyBBdm9pZCBzcGlubmluZyB1cCBkZXZpY2VzIGp1c3QgZm9yIGxvZ2dpbmcgdGhl
IGNvbW1hbmRsaW5lLgorICAgICAgICBzZWxmLl9wcmludGluZ19jbWRfbGluZSA9IFRydWUKKyAg
ICAgICAgcmVzdWx0ID0gc3VwZXIoSU9TU2ltdWxhdG9yUG9ydCwgc2VsZikuZHJpdmVyX2NtZF9s
aW5lX2Zvcl9sb2dnaW5nKCkKKyAgICAgICAgc2VsZi5fcHJpbnRpbmdfY21kX2xpbmUgPSBGYWxz
ZQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBAcHJvcGVydHkKKyAgICBAbWVtb2l6ZWQK
KyAgICBkZWYgc2ltdWxhdG9yX3J1bnRpbWUoc2VsZik6CisgICAgICAgIHJ1bnRpbWVfaWRlbnRp
ZmllciA9IHNlbGYuZ2V0X29wdGlvbigncnVudGltZScpCisgICAgICAgIGlmIHJ1bnRpbWVfaWRl
bnRpZmllcjoKKyAgICAgICAgICAgIHJ1bnRpbWUgPSBSdW50aW1lLmZyb21faWRlbnRpZmllcihy
dW50aW1lX2lkZW50aWZpZXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBydW50aW1lID0g
UnVudGltZS5mcm9tX3ZlcnNpb25fc3RyaW5nKHNlbGYuaG9zdC5wbGF0Zm9ybS54Y29kZV9zZGtf
dmVyc2lvbignaXBob25lc2ltdWxhdG9yJykpCisgICAgICAgIHJldHVybiBydW50aW1lCisKKyAg
ICBkZWYgc2ltdWxhdG9yX2RldmljZV90eXBlKHNlbGYpOgorICAgICAgICBkZXZpY2VfdHlwZV9p
ZGVudGlmaWVyID0gc2VsZi5nZXRfb3B0aW9uKCdkZXZpY2VfdHlwZScpCisgICAgICAgIGlmIGRl
dmljZV90eXBlX2lkZW50aWZpZXI6CisgICAgICAgICAgICBfbG9nLmRlYnVnKCdzaW11bGF0b3Jf
ZGV2aWNlX3R5cGUgZm9yIGRldmljZSBpZGVudGlmaWVyICVzJywgZGV2aWNlX3R5cGVfaWRlbnRp
ZmllcikKKyAgICAgICAgICAgIGRldmljZV90eXBlID0gRGV2aWNlVHlwZS5mcm9tX2lkZW50aWZp
ZXIoZGV2aWNlX3R5cGVfaWRlbnRpZmllcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIF9s
b2cuZGVidWcoJ3NpbXVsYXRvcl9kZXZpY2VfdHlwZSBmb3IgZGV2aWNlICVzJywgc2VsZi5fZGV2
aWNlX2NsYXNzKQorICAgICAgICAgICAgZGV2aWNlX25hbWUgPSBzZWxmLkRFVklDRV9DTEFTU19N
QVBbc2VsZi5hcmNoaXRlY3R1cmUoKV1bc2VsZi5fZGV2aWNlX2NsYXNzXQorICAgICAgICAgICAg
aWYgbm90IGRldmljZV9uYW1lOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignRmFp
bGVkIHRvIGZpbmQgZGV2aWNlIGZvciBhcmNoaXRlY3R1cmUge30gYW5kIGRldmljZSBjbGFzcyB7
fScuZm9ybWF0KHNlbGYuYXJjaGl0ZWN0dXJlKCkpLCBzZWxmLl9kZXZpY2VfY2xhc3MpCisgICAg
ICAgICAgICBkZXZpY2VfdHlwZSA9IERldmljZVR5cGUuZnJvbV9uYW1lKGRldmljZV9uYW1lKQor
ICAgICAgICByZXR1cm4gZGV2aWNlX3R5cGUKKworICAgIEBtZW1vaXplZAorICAgIGRlZiBjaGls
ZF9wcm9jZXNzZXMoc2VsZik6CisgICAgICAgIHJldHVybiBpbnQoc2VsZi5nZXRfb3B0aW9uKCdj
aGlsZF9wcm9jZXNzZXMnKSkKKworICAgIEBtZW1vaXplZAorICAgIGRlZiBkZWZhdWx0X2NoaWxk
X3Byb2Nlc3NlcyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBudW1iZXIgb2YgU2ltdWxh
dG9ycyBpbnN0YW5jZXMgdG8gdXNlIGZvciB0aGlzIHBvcnQuIiIiCisgICAgICAgIGJlc3RfY2hp
bGRfcHJvY2Vzc19jb3VudF9mb3JfY3B1ID0gc2VsZi5fZXhlY3V0aXZlLmNwdV9jb3VudCgpIC8g
MgorICAgICAgICBzeXN0ZW1fcHJvY2Vzc19jb3VudF9saW1pdCA9IGludChzdWJwcm9jZXNzLmNo
ZWNrX291dHB1dChbInVsaW1pdCIsICItdSJdKS5zdHJpcCgpKQorICAgICAgICBjdXJyZW50X3By
b2Nlc3NfY291bnQgPSBsZW4oc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyJwcyIsICJhdXgiXSku
c3RyaXAoKS5zcGxpdCgnXG4nKSkKKyAgICAgICAgX2xvZy5kZWJ1ZygnUHJvY2VzcyBsaW1pdDog
JWQsIGN1cnJlbnQgI3Byb2Nlc3NlczogJWQnICUgKHN5c3RlbV9wcm9jZXNzX2NvdW50X2xpbWl0
LCBjdXJyZW50X3Byb2Nlc3NfY291bnQpKQorICAgICAgICBtYXhpbXVtX3NpbXVsYXRvcl9jb3Vu
dF9vbl90aGlzX3N5c3RlbSA9IChzeXN0ZW1fcHJvY2Vzc19jb3VudF9saW1pdCAtIGN1cnJlbnRf
cHJvY2Vzc19jb3VudCkgLy8gc2VsZi5QUk9DRVNTX0NPVU5UX0VTVElNQVRFX1BFUl9TSU1VTEFU
T1JfSU5TVEFOQ0UKKyAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIGFsc28gdGFrZSBpbnRvIGFj
Y291bnQgdGhlIGF2YWlsYWJsZSBSQU0uCisKKyAgICAgICAgaWYgKG1heGltdW1fc2ltdWxhdG9y
X2NvdW50X29uX3RoaXNfc3lzdGVtIDwgYmVzdF9jaGlsZF9wcm9jZXNzX2NvdW50X2Zvcl9jcHUp
OgorICAgICAgICAgICAgX2xvZy53YXJuKCJUaGlzIG1hY2hpbmUgY291bGQgc3VwcG9ydCAlcyBz
aW11bGF0b3JzLCBidXQgaXMgb25seSBjb25maWd1cmVkIGZvciAlcy4iCisgICAgICAgICAgICAg
ICAgJSAoYmVzdF9jaGlsZF9wcm9jZXNzX2NvdW50X2Zvcl9jcHUsIG1heGltdW1fc2ltdWxhdG9y
X2NvdW50X29uX3RoaXNfc3lzdGVtKSkKKyAgICAgICAgICAgIF9sb2cud2FybignUGxlYXNlIHNl
ZSA8aHR0cHM6Ly90cmFjLndlYmtpdC5vcmcvd2lraS9JbmNyZWFzaW5nS2VybmVsTGltaXRzPi4n
KQorCisgICAgICAgIGlmIG1heGltdW1fc2ltdWxhdG9yX2NvdW50X29uX3RoaXNfc3lzdGVtID09
IDA6CisgICAgICAgICAgICBtYXhpbXVtX3NpbXVsYXRvcl9jb3VudF9vbl90aGlzX3N5c3RlbSA9
IDEKKworICAgICAgICByZXR1cm4gbWluKG1heGltdW1fc2ltdWxhdG9yX2NvdW50X29uX3RoaXNf
c3lzdGVtLCBiZXN0X2NoaWxkX3Byb2Nlc3NfY291bnRfZm9yX2NwdSkKKworICAgIGRlZiBfZ2V0
X2NyYXNoX2xvZyhzZWxmLCBuYW1lLCBwaWQsIHN0ZG91dCwgc3RkZXJyLCBuZXdlcl90aGFuLCB0
aW1lX2ZuPXRpbWUudGltZSwgc2xlZXBfZm49dGltZS5zbGVlcCwgd2FpdF9mb3JfbG9nPVRydWUp
OgorICAgICAgICB0aW1lX2ZuID0gdGltZV9mbiBvciB0aW1lLnRpbWUKKyAgICAgICAgc2xlZXBf
Zm4gPSBzbGVlcF9mbiBvciB0aW1lLnNsZWVwCisKKyAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxk
IGNvbGxlY3QgdGhlIGFjdHVhbCBjcmFzaCBsb2cgZm9yIER1bXBSZW5kZXJUcmVlLmFwcCBiZWNh
dXNlIGl0IGluY2x1ZGVzIG1vcmUKKyAgICAgICAgIyBpbmZvcm1hdGlvbiAoZS5nLiBleGNlcHRp
b24gY29kZXMpIHRoYW4gaXMgYXZhaWxhYmxlIGluIHRoZSBzdGFjayB0cmFjZSB3cml0dGVuIHRv
IHN0YW5kYXJkIGVycm9yLgorICAgICAgICBzdGRlcnJfbGluZXMgPSBbXQorICAgICAgICBjcmFz
aGVkX3N1YnByb2Nlc3NfbmFtZV9hbmRfcGlkID0gTm9uZSAgIyBlLmcuICgnRHVtcFJlbmRlclRy
ZWUuYXBwJywgMTIzNCkKKyAgICAgICAgZm9yIGxpbmUgaW4gKHN0ZGVyciBvciAnJykuc3BsaXRs
aW5lcygpOgorICAgICAgICAgICAgaWYgbm90IGNyYXNoZWRfc3VicHJvY2Vzc19uYW1lX2FuZF9w
aWQ6CisgICAgICAgICAgICAgICAgbWF0Y2ggPSBzZWxmLlNVQlBST0NFU1NfQ1JBU0hfUkVHRVgu
bWF0Y2gobGluZSkKKyAgICAgICAgICAgICAgICBpZiBtYXRjaDoKKyAgICAgICAgICAgICAgICAg
ICAgY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZCA9IChtYXRjaC5ncm91cCgnc3VicHJv
Y2Vzc19uYW1lJyksIGludChtYXRjaC5ncm91cCgnc3VicHJvY2Vzc19waWQnKSkpCisgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzdGRlcnJfbGluZXMuYXBwZW5kKGxp
bmUpCisKKyAgICAgICAgaWYgY3Jhc2hlZF9zdWJwcm9jZXNzX25hbWVfYW5kX3BpZDoKKyAgICAg
ICAgICAgIHJldHVybiBzZWxmLl9nZXRfY3Jhc2hfbG9nKGNyYXNoZWRfc3VicHJvY2Vzc19uYW1l
X2FuZF9waWRbMF0sIGNyYXNoZWRfc3VicHJvY2Vzc19uYW1lX2FuZF9waWRbMV0sIHN0ZG91dCwK
KyAgICAgICAgICAgICAgICAnXG4nLmpvaW4oc3RkZXJyX2xpbmVzKSwgbmV3ZXJfdGhhbiwgdGlt
ZV9mbiwgc2xlZXBfZm4sIHdhaXRfZm9yX2xvZykKKworICAgICAgICAjIEFwcCBjcmFzaGVkCisg
ICAgICAgIF9sb2cuZGVidWcoJ2xvb2tpbmcgZm9yIGNyYXNoIGxvZyBmb3IgJXM6JXMnICUgKG5h
bWUsIHN0cihwaWQpKSkKKyAgICAgICAgY3Jhc2hfbG9nID0gJycKKyAgICAgICAgY3Jhc2hfbG9n
cyA9IENyYXNoTG9ncyhzZWxmLmhvc3QpCisgICAgICAgIG5vdyA9IHRpbWVfZm4oKQorICAgICAg
ICBkZWFkbGluZSA9IG5vdyArIDUgKiBpbnQoc2VsZi5nZXRfb3B0aW9uKCdjaGlsZF9wcm9jZXNz
ZXMnLCAxKSkKKyAgICAgICAgd2hpbGUgbm90IGNyYXNoX2xvZyBhbmQgbm93IDw9IGRlYWRsaW5l
OgorICAgICAgICAgICAgY3Jhc2hfbG9nID0gY3Jhc2hfbG9ncy5maW5kX25ld2VzdF9sb2cobmFt
ZSwgcGlkLCBpbmNsdWRlX2Vycm9ycz1UcnVlLCBuZXdlcl90aGFuPW5ld2VyX3RoYW4pCisgICAg
ICAgICAgICBpZiBub3Qgd2FpdF9mb3JfbG9nOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAg
ICAgICAgICBpZiBub3QgY3Jhc2hfbG9nIG9yIG5vdCBbbGluZSBmb3IgbGluZSBpbiBjcmFzaF9s
b2cuc3BsaXRsaW5lcygpIGlmIG5vdCBsaW5lLnN0YXJ0c3dpdGgoJ0VSUk9SJyldOgorICAgICAg
ICAgICAgICAgIHNsZWVwX2ZuKDAuMSkKKyAgICAgICAgICAgICAgICBub3cgPSB0aW1lX2ZuKCkK
KworICAgICAgICBpZiBub3QgY3Jhc2hfbG9nOgorICAgICAgICAgICAgcmV0dXJuIHN0ZGVyciwg
Tm9uZQorICAgICAgICByZXR1cm4gc3RkZXJyLCBjcmFzaF9sb2cKKworICAgIGRlZiBfYnVpbGRf
ZHJpdmVyX2ZsYWdzKHNlbGYpOgorICAgICAgICBhcmNocyA9IFsnQVJDSFM9aTM4NiddIGlmIHNl
bGYuYXJjaGl0ZWN0dXJlKCkgPT0gJ3g4NicgZWxzZSBbXQorICAgICAgICBzZGsgPSBbJy0tc2Rr
JywgJ2lwaG9uZXNpbXVsYXRvciddCisgICAgICAgIHJldHVybiBhcmNocyArIHNkaworCisgICAg
ZGVmIF9nZW5lcmF0ZV9hbGxfdGVzdF9jb25maWd1cmF0aW9ucyhzZWxmKToKKyAgICAgICAgY29u
ZmlndXJhdGlvbnMgPSBbXQorICAgICAgICBmb3IgYnVpbGRfdHlwZSBpbiBzZWxmLkFMTF9CVUlM
RF9UWVBFUzoKKyAgICAgICAgICAgIGZvciBhcmNoaXRlY3R1cmUgaW4gc2VsZi5BUkNISVRFQ1RV
UkVTOgorICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25zLmFwcGVuZChUZXN0Q29uZmlndXJh
dGlvbih2ZXJzaW9uPXNlbGYuX3ZlcnNpb24sIGFyY2hpdGVjdHVyZT1hcmNoaXRlY3R1cmUsIGJ1
aWxkX3R5cGU9YnVpbGRfdHlwZSkpCisgICAgICAgIHJldHVybiBjb25maWd1cmF0aW9ucworCisg
ICAgZGVmIGRlZmF1bHRfYmFzZWxpbmVfc2VhcmNoX3BhdGgoc2VsZik6CisgICAgICAgIGlmIHNl
bGYuZ2V0X29wdGlvbignd2Via2l0X3Rlc3RfcnVubmVyJyk6CisgICAgICAgICAgICBmYWxsYmFj
a19uYW1lcyA9IFtzZWxmLl93azJfcG9ydF9uYW1lKCldICsgW3NlbGYucG9ydF9uYW1lXSArIFsn
d2syJ10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZhbGxiYWNrX25hbWVzID0gW3NlbGYu
cG9ydF9uYW1lICsgJy13azEnXSArIFtzZWxmLnBvcnRfbmFtZV0KKworICAgICAgICByZXR1cm4g
bWFwKHNlbGYuX3dlYmtpdF9iYXNlbGluZV9wYXRoLCBmYWxsYmFja19uYW1lcykKKworICAgIGRl
ZiBfc2V0X2RldmljZV9jbGFzcyhzZWxmLCBkZXZpY2VfY2xhc3MpOgorICAgICAgICBzZWxmLl9k
ZXZpY2VfY2xhc3MgPSBkZXZpY2VfY2xhc3MgaWYgZGV2aWNlX2NsYXNzIGVsc2Ugc2VsZi5ERUZB
VUxUX0RFVklDRV9DTEFTUworCisgICAgZGVmIF9jcmVhdGVfc2ltdWxhdG9ycyhzZWxmKToKKyAg
ICAgICAgaWYgKHNlbGYuZGVmYXVsdF9jaGlsZF9wcm9jZXNzZXMoKSA8IHNlbGYuY2hpbGRfcHJv
Y2Vzc2VzKCkpOgorICAgICAgICAgICAgX2xvZy53YXJuKCdZb3UgaGF2ZSBzcGVjaWZpZWQgdmVy
eSBoaWdoIHZhbHVlKHswfSkgZm9yIC0tY2hpbGQtcHJvY2Vzc2VzJy5mb3JtYXQoc2VsZi5jaGls
ZF9wcm9jZXNzZXMoKSkpCisgICAgICAgICAgICBfbG9nLndhcm4oJ21heGltdW0gY2hpbGQtcHJv
Y2Vzc2VzIHdoaWNoIGNhbiBiZSBzdXBwb3J0ZWQgb24gdGhpcyBzeXN0ZW0gYXJlOiB7MH0nLmZv
cm1hdChzZWxmLmRlZmF1bHRfY2hpbGRfcHJvY2Vzc2VzKCkpKQorICAgICAgICAgICAgX2xvZy53
YXJuKCdUaGlzIGlzIHZlcnkgbGlrZWx5IHRvIGZhaWwuJykKKworICAgICAgICBpZiBzZWxmLl91
c2luZ19kZWRpY2F0ZWRfc2ltdWxhdG9ycygpOgorICAgICAgICAgICAgc2VsZi5fY3JlYXRlU2lt
dWxhdG9yQXBwcygpCisKKyAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZShzZWxmLmNoaWxkX3By
b2Nlc3NlcygpKToKKyAgICAgICAgICAgICAgICBzZWxmLl9jcmVhdGVfZGV2aWNlKGkpCisKKyAg
ICAgICAgICAgIGZvciBpIGluIHhyYW5nZShzZWxmLmNoaWxkX3Byb2Nlc3NlcygpKToKKyAgICAg
ICAgICAgICAgICBkZXZpY2VfdWRpZCA9IHNlbGYuX3Rlc3RpbmdfZGV2aWNlKGkpLnVkaWQKKyAg
ICAgICAgICAgICAgICBTaW11bGF0b3Iud2FpdF91bnRpbF9kZXZpY2VfaXNfaW5fc3RhdGUoZGV2
aWNlX3VkaWQsIFNpbXVsYXRvci5EZXZpY2VTdGF0ZS5TSFVURE9XTikKKyAgICAgICAgICAgICAg
ICBTaW11bGF0b3IucmVzZXRfZGV2aWNlKGRldmljZV91ZGlkKQorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgYXNzZXJ0KHNlbGYuX2N1cnJlbnRfZGV2aWNlKQorICAgICAgICAgICAgaWYgc2Vs
Zi5fY3VycmVudF9kZXZpY2UubmFtZSAhPSBzZWxmLnNpbXVsYXRvcl9kZXZpY2VfdHlwZSgpLm5h
bWU6CisgICAgICAgICAgICAgICAgX2xvZy53YXJuKCJFeHBlY3RlZCBzaW11bGF0b3Igb2YgdHlw
ZSAnIiArIHNlbGYuc2ltdWxhdG9yX2RldmljZV90eXBlKCkubmFtZSArICInIGJ1dCBmb3VuZCBz
aW11bGF0b3Igb2YgdHlwZSAnIiArIHNlbGYuX2N1cnJlbnRfZGV2aWNlLm5hbWUgKyAiJyIpCisg
ICAgICAgICAgICAgICAgX2xvZy53YXJuKCdUaGUgbmV4dCBibG9jayBvZiB0ZXN0cyBtYXkgZmFp
bCBkdWUgdG8gZGV2aWNlIG1pcy1tYXRjaCcpCisKKyAgICBkZWYgc2V0dXBfdGVzdF9ydW4oc2Vs
ZiwgZGV2aWNlX2NsYXNzPU5vbmUpOgorICAgICAgICBtYWNfb3NfdmVyc2lvbiA9IHNlbGYuaG9z
dC5wbGF0Zm9ybS5vc192ZXJzaW9uCisKKyAgICAgICAgc2VsZi5fc2V0X2RldmljZV9jbGFzcyhk
ZXZpY2VfY2xhc3MpCisKKyAgICAgICAgX2xvZy5kZWJ1ZygnJykKKyAgICAgICAgX2xvZy5kZWJ1
Zygnc2V0dXBfdGVzdF9ydW4gZm9yICVzJywgc2VsZi5fZGV2aWNlX2NsYXNzKQorCisgICAgICAg
IHNlbGYuX2NyZWF0ZV9zaW11bGF0b3JzKCkKKworICAgICAgICBpZiBub3Qgc2VsZi5fdXNpbmdf
ZGVkaWNhdGVkX3NpbXVsYXRvcnMoKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGZv
ciBpIGluIHhyYW5nZShzZWxmLmNoaWxkX3Byb2Nlc3NlcygpKToKKyAgICAgICAgICAgIGRldmlj
ZV91ZGlkID0gc2VsZi5fdGVzdGluZ19kZXZpY2UoaSkudWRpZAorICAgICAgICAgICAgX2xvZy5k
ZWJ1ZygndGVzdGluZyBkZXZpY2UgJXMgaGFzIHVkaWQgJXMnLCBpLCBkZXZpY2VfdWRpZCkKKwor
ICAgICAgICAgICAgIyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzIwOTE2MTQwPiBTd2l0Y2ggdG8g
dXNpbmcgQ29yZVNpbXVsYXRvci5mcmFtZXdvcmsgZm9yIGxhdW5jaGluZyBhbmQgcXVpdHRpbmcg
aU9TIFNpbXVsYXRvcgorICAgICAgICAgICAgc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21tYW5kKFsK
KyAgICAgICAgICAgICAgICAnb3BlbicsICctZycsICctYicsIHNlbGYuU0lNVUxBVE9SX0JVTkRM
RV9JRCArIHN0cihpKSwKKyAgICAgICAgICAgICAgICAnLS1hcmdzJywgJy1DdXJyZW50RGV2aWNl
VURJRCcsIGRldmljZV91ZGlkXSkKKworICAgICAgICAgICAgaWYgbWFjX29zX3ZlcnNpb24gaW4g
WydlbGNhcGl0YW4nLCAneW9zZW1pdGUnLCAnbWF2ZXJpY2tzJ106CisgICAgICAgICAgICAgICAg
dGltZS5zbGVlcCgyLjUpCisKKyAgICAgICAgX2xvZy5pbmZvKCdXYWl0aW5nIGZvciBhbGwgaU9T
IFNpbXVsYXRvcnMgdG8gZmluaXNoIGJvb3RpbmcuJykKKyAgICAgICAgZm9yIGkgaW4geHJhbmdl
KHNlbGYuY2hpbGRfcHJvY2Vzc2VzKCkpOgorICAgICAgICAgICAgU2ltdWxhdG9yLndhaXRfdW50
aWxfZGV2aWNlX2lzX2Jvb3RlZChzZWxmLl90ZXN0aW5nX2RldmljZShpKS51ZGlkKQorCisgICAg
ZGVmIF9xdWl0X2lvc19zaW11bGF0b3Ioc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLl91c2lu
Z19kZWRpY2F0ZWRfc2ltdWxhdG9ycygpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIF9s
b2cuZGVidWcoIl9xdWl0X2lvc19zaW11bGF0b3Iga2lsbGluZyBhbGwgU2ltdWxhdG9yIHByb2Nl
c3NlcyIpCisgICAgICAgICMgRklYTUU6IFdlIHNob3VsZCBraWxsIG9ubHkgdGhlIFNpbXVsYXRv
cnMgd2Ugc3RhcnRlZC4KKyAgICAgICAgc3VicHJvY2Vzcy5jYWxsKFsia2lsbGFsbCIsICItOSIs
ICItbSIsICJTaW11bGF0b3IiXSkKKworICAgIGRlZiBjbGVhbl91cF90ZXN0X3J1bihzZWxmKToK
KyAgICAgICAgc3VwZXIoSU9TU2ltdWxhdG9yUG9ydCwgc2VsZikuY2xlYW5fdXBfdGVzdF9ydW4o
KQorICAgICAgICBfbG9nLmRlYnVnKCJjbGVhbl91cF90ZXN0X3J1biIpCisgICAgICAgIHNlbGYu
X3F1aXRfaW9zX3NpbXVsYXRvcigpCisgICAgICAgIGZpZm9zID0gW3BhdGggZm9yIHBhdGggaW4g
b3MubGlzdGRpcignL3RtcCcpIGlmIHJlLnNlYXJjaCgnb3JnLndlYmtpdC4oRHVtcFJlbmRlclRy
ZWV8V2ViS2l0VGVzdFJ1bm5lcikuKl8oSU58T1VUfEVSUk9SKScsIHBhdGgpXQorICAgICAgICBm
b3IgZmlmbyBpbiBmaWZvczoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcy5y
ZW1vdmUob3MucGF0aC5qb2luKCcvdG1wJywgZmlmbykpCisgICAgICAgICAgICBleGNlcHQgT1NF
cnJvcjoKKyAgICAgICAgICAgICAgICBfbG9nLndhcm5pbmcoJ1VuYWJsZSB0byByZW1vdmUgJyAr
IGZpZm8pCisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGlmIG5vdCBzZWxmLl91c2lu
Z19kZWRpY2F0ZWRfc2ltdWxhdG9ycygpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAg
Zm9yIGkgaW4geHJhbmdlKHNlbGYuY2hpbGRfcHJvY2Vzc2VzKCkpOgorICAgICAgICAgICAgc2lt
dWxhdG9yX3BhdGggPSBzZWxmLmdldF9zaW11bGF0b3JfcGF0aChpKQorICAgICAgICAgICAgZGV2
aWNlX3VkaWQgPSBzZWxmLl90ZXN0aW5nX2RldmljZShpKS51ZGlkCisgICAgICAgICAgICBzZWxm
Ll9yZW1vdmVfZGV2aWNlKGkpCisKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhz
aW11bGF0b3JfcGF0aCk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHRy
eToKKyAgICAgICAgICAgICAgICBzZWxmLl9leGVjdXRpdmUucnVuX2NvbW1hbmQoW3NlbGYuTFNS
RUdJU1RFUl9QQVRILCAiLXUiLCBzaW11bGF0b3JfcGF0aF0pCisKKyAgICAgICAgICAgICAgICBf
bG9nLmRlYnVnKCdybXRyZWUgJXMnLCBzaW11bGF0b3JfcGF0aCkKKyAgICAgICAgICAgICAgICBz
ZWxmLl9maWxlc3lzdGVtLnJtdHJlZShzaW11bGF0b3JfcGF0aCkKKworICAgICAgICAgICAgICAg
IGxvZ3NfcGF0aCA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl9maWxlc3lzdGVtLmV4cGFu
ZHVzZXIoIn4iKSwgIkxpYnJhcnkvTG9ncy9Db3JlU2ltdWxhdG9yLyIsIGRldmljZV91ZGlkKQor
ICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoJ3JtdHJlZSAlcycsIGxvZ3NfcGF0aCkKKyAgICAg
ICAgICAgICAgICBzZWxmLl9maWxlc3lzdGVtLnJtdHJlZShsb2dzX3BhdGgpCisKKyAgICAgICAg
ICAgICAgICBzYXZlZF9zdGF0ZV9wYXRoID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYuX2Zp
bGVzeXN0ZW0uZXhwYW5kdXNlcigifiIpLCAiTGlicmFyeS9TYXZlZCBBcHBsaWNhdGlvbiBTdGF0
ZS8iLCBzZWxmLlNJTVVMQVRPUl9CVU5ETEVfSUQgKyBzdHIoaSkgKyAiLnNhdmVkU3RhdGUiKQor
ICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoJ3JtdHJlZSAlcycsIHNhdmVkX3N0YXRlX3BhdGgp
CisgICAgICAgICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5ybXRyZWUoc2F2ZWRfc3RhdGVfcGF0
aCkKKworICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIF9sb2cud2FybmluZygn
VW5hYmxlIHRvIHJlbW92ZSBTaW11bGF0b3InICsgc3RyKGkpKQorCisgICAgZGVmIHNldHVwX2Vu
dmlyb25fZm9yX3NlcnZlcihzZWxmLCBzZXJ2ZXJfbmFtZT1Ob25lKToKKyAgICAgICAgX2xvZy5k
ZWJ1Zygic2V0dXBfZW52aXJvbl9mb3Jfc2VydmVyIikKKyAgICAgICAgZW52ID0gc3VwZXIoSU9T
U2ltdWxhdG9yUG9ydCwgc2VsZikuc2V0dXBfZW52aXJvbl9mb3Jfc2VydmVyKHNlcnZlcl9uYW1l
KQorICAgICAgICBpZiBzZXJ2ZXJfbmFtZSA9PSBzZWxmLmRyaXZlcl9uYW1lKCk6CisgICAgICAg
ICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ2xlYWtzJyk6CisgICAgICAgICAgICAgICAgZW52WydN
YWxsb2NTdGFja0xvZ2dpbmcnXSA9ICcxJworICAgICAgICAgICAgICAgIGVudlsnX19YUENfTWFs
bG9jU3RhY2tMb2dnaW5nJ10gPSAnMScKKyAgICAgICAgICAgICAgICBlbnZbJ01hbGxvY1Njcmli
YmxlJ10gPSAnMScKKyAgICAgICAgICAgICAgICBlbnZbJ19fWFBDX01hbGxvY1NjcmliYmxlJ10g
PSAnMScKKyAgICAgICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbignZ3VhcmRfbWFsbG9jJyk6Cisg
ICAgICAgICAgICAgICAgc2VsZi5fYXBwZW5kX3ZhbHVlX2NvbG9uX3NlcGFyYXRlZChlbnYsICdE
WUxEX0lOU0VSVF9MSUJSQVJJRVMnLCAnL3Vzci9saWIvbGliZ21hbGxvYy5keWxpYicpCisgICAg
ICAgICAgICAgICAgc2VsZi5fYXBwZW5kX3ZhbHVlX2NvbG9uX3NlcGFyYXRlZChlbnYsICdfX1hQ
Q19EWUxEX0lOU0VSVF9MSUJSQVJJRVMnLCAnL3Vzci9saWIvbGliZ21hbGxvYy5keWxpYicpCisg
ICAgICAgIGVudlsnWE1MX0NBVEFMT0dfRklMRVMnXSA9ICcnICAjIHdvcmsgYXJvdW5kIG1pc3Np
bmcgL2V0Yy9jYXRhbG9nIDxyZGFyOi8vcHJvYmxlbS80MjkyOTk1PgorICAgICAgICByZXR1cm4g
ZW52CisKKyAgICBkZWYgb3BlcmF0aW5nX3N5c3RlbShzZWxmKToKKyAgICAgICAgcmV0dXJuICdp
b3Mtc2ltdWxhdG9yJworCisgICAgZGVmIGNoZWNrX3N5c19kZXBzKHNlbGYsIG5lZWRzX2h0dHAp
OgorICAgICAgICBpZiBub3Qgc2VsZi5zaW11bGF0b3JfcnVudGltZS5hdmFpbGFibGU6CisgICAg
ICAgICAgICBfbG9nLmVycm9yKCdUaGUgaU9TIFNpbXVsYXRvciBydW50aW1lIHdpdGggaWRlbnRp
ZmllciAiezB9IiBjYW5ub3QgYmUgdXNlZCBiZWNhdXNlIGl0IGlzIHVuYXZhaWxhYmxlLicuZm9y
bWF0KHNlbGYuc2ltdWxhdG9yX3J1bnRpbWUuaWRlbnRpZmllcikpCisgICAgICAgICAgICByZXR1
cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIHN1cGVyKElPU1NpbXVsYXRvclBvcnQsIHNlbGYpLmNo
ZWNrX3N5c19kZXBzKG5lZWRzX2h0dHApCisKKyAgICBTVUJQUk9DRVNTX0NSQVNIX1JFR0VYID0g
cmUuY29tcGlsZSgnI0NSQVNIRUQgLSAoP1A8c3VicHJvY2Vzc19uYW1lPlxTKykgXChwaWQgKD9Q
PHN1YnByb2Nlc3NfcGlkPlxkKylcKScpCisKKyAgICBkZWYgX3VzaW5nX2RlZGljYXRlZF9zaW11
bGF0b3JzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5nZXRfb3B0aW9uKCdkZWRpY2F0ZWRf
c2ltdWxhdG9ycycpCisKKyAgICBkZWYgX2NyZWF0ZV9kZXZpY2Uoc2VsZiwgbnVtYmVyKToKKyAg
ICAgICAgcmV0dXJuIFNpbXVsYXRvci5jcmVhdGVfZGV2aWNlKG51bWJlciwgc2VsZi5zaW11bGF0
b3JfZGV2aWNlX3R5cGUoKSwgc2VsZi5zaW11bGF0b3JfcnVudGltZSkKKworICAgIGRlZiBfcmVt
b3ZlX2RldmljZShzZWxmLCBudW1iZXIpOgorICAgICAgICBTaW11bGF0b3IucmVtb3ZlX2Rldmlj
ZShudW1iZXIpCisKKyAgICBkZWYgX3Rlc3RpbmdfZGV2aWNlKHNlbGYsIG51bWJlcik6CisgICAg
ICAgIHJldHVybiBTaW11bGF0b3IuZGV2aWNlX251bWJlcihudW1iZXIpCisKKyAgICAjIEZJWE1F
OiBUaGlzIGlzIG9ubHkgZXhwb3NlZCBzbyB0aGF0IFNpbXVsYXRvclByb2Nlc3MgY2FuIHVzZSBp
dC4KKyAgICBkZWYgZGV2aWNlX2lkX2Zvcl93b3JrZXJfbnVtYmVyKHNlbGYsIG51bWJlcik6Cisg
ICAgICAgIGlmIHNlbGYuX3ByaW50aW5nX2NtZF9saW5lOgorICAgICAgICAgICAgcmV0dXJuICc8
ZHVtbXkgaWQ+JworICAgICAgICBpZiBzZWxmLl91c2luZ19kZWRpY2F0ZWRfc2ltdWxhdG9ycygp
OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3Rlc3RpbmdfZGV2aWNlKG51bWJlcikudWRpZAor
ICAgICAgICByZXR1cm4gc2VsZi5fY3VycmVudF9kZXZpY2UudWRpZAorCisgICAgZGVmIGdldF9z
aW11bGF0b3JfcGF0aChzZWxmLCBzdWZmaXg9IiIpOgorICAgICAgICByZXR1cm4gb3MucGF0aC5q
b2luKHNlbGYuU0lNVUxBVE9SX0RJUkVDVE9SWSwgIlNpbXVsYXRvciIgKyBzdHIoc3VmZml4KSAr
ICIuYXBwIikKKworICAgIGRlZiBkaWZmX2ltYWdlKHNlbGYsIGV4cGVjdGVkX2NvbnRlbnRzLCBh
Y3R1YWxfY29udGVudHMsIHRvbGVyYW5jZT1Ob25lKToKKyAgICAgICAgaWYgbm90IGFjdHVhbF9j
b250ZW50cyBhbmQgbm90IGV4cGVjdGVkX2NvbnRlbnRzOgorICAgICAgICAgICAgcmV0dXJuIChO
b25lLCAwLCBOb25lKQorICAgICAgICBpZiBub3QgYWN0dWFsX2NvbnRlbnRzIG9yIG5vdCBleHBl
Y3RlZF9jb250ZW50czoKKyAgICAgICAgICAgIHJldHVybiAoVHJ1ZSwgMCwgTm9uZSkKKyAgICAg
ICAgaWYgbm90IHNlbGYuX2ltYWdlX2RpZmZlcjoKKyAgICAgICAgICAgIHNlbGYuX2ltYWdlX2Rp
ZmZlciA9IGltYWdlX2RpZmYuSU9TU2ltdWxhdG9ySW1hZ2VEaWZmZXIoc2VsZikKKyAgICAgICAg
c2VsZi5zZXRfb3B0aW9uX2RlZmF1bHQoJ3RvbGVyYW5jZScsIDAuMSkKKyAgICAgICAgaWYgdG9s
ZXJhbmNlIGlzIE5vbmU6CisgICAgICAgICAgICB0b2xlcmFuY2UgPSBzZWxmLmdldF9vcHRpb24o
J3RvbGVyYW5jZScpCisgICAgICAgIHJldHVybiBzZWxmLl9pbWFnZV9kaWZmZXIuZGlmZl9pbWFn
ZShleHBlY3RlZF9jb250ZW50cywgYWN0dWFsX2NvbnRlbnRzLCB0b2xlcmFuY2UpCisKKyAgICBk
ZWYgcmVzZXRfcHJlZmVyZW5jZXMoc2VsZik6CisgICAgICAgIF9sb2cuZGVidWcoInJlc2V0X3By
ZWZlcmVuY2VzIikKKyAgICAgICAgc2VsZi5fcXVpdF9pb3Nfc2ltdWxhdG9yKCkKKyAgICAgICAg
IyBNYXliZSB0aGlzIHNob3VsZCBkZWxldGUgYWxsIGRldmljZXMgdGhhdCB3ZSd2ZSBjcmVhdGVk
PworCisgICAgZGVmIG5tX2NvbW1hbmQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnhjcnVu
X2ZpbmQoJ25tJykKKworICAgIEBwcm9wZXJ0eQorICAgIEBtZW1vaXplZAorICAgIGRlZiBkZXZl
bG9wZXJfZGlyKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZXhlY3V0aXZlLnJ1bl9jb21t
YW5kKFsneGNvZGUtc2VsZWN0JywgJy0tcHJpbnQtcGF0aCddKS5yc3RyaXAoKQorCisgICAgZGVm
IGxvZ2dpbmdfcGF0dGVybnNfdG9fc3RyaXAoc2VsZik6CisgICAgICAgIHJldHVybiBbXQorCisg
ICAgZGVmIHN0ZGVycl9wYXR0ZXJuc190b19zdHJpcChzZWxmKToKKyAgICAgICAgcmV0dXJuIFtd
CisKKyAgICBkZWYgX2NyZWF0ZVNpbXVsYXRvckFwcHMoc2VsZik6CisgICAgICAgIGZvciBpIGlu
IHhyYW5nZShzZWxmLmNoaWxkX3Byb2Nlc3NlcygpKToKKyAgICAgICAgICAgIHNlbGYuX2NyZWF0
ZVNpbXVsYXRvckFwcChpKQorCisgICAgZGVmIF9jcmVhdGVTaW11bGF0b3JBcHAoc2VsZiwgc3Vm
Zml4KToKKyAgICAgICAgZGVzdGluYXRpb24gPSBzZWxmLmdldF9zaW11bGF0b3JfcGF0aChzdWZm
aXgpCisgICAgICAgIF9sb2cuaW5mbygiQ3JlYXRpbmcgYXBwOiIgKyBkZXN0aW5hdGlvbikKKyAg
ICAgICAgaWYgb3MucGF0aC5leGlzdHMoZGVzdGluYXRpb24pOgorICAgICAgICAgICAgc2h1dGls
LnJtdHJlZShkZXN0aW5hdGlvbiwgaWdub3JlX2Vycm9ycz1UcnVlKQorICAgICAgICBzaW11bGF0
b3JfYXBwX3BhdGggPSBzZWxmLmRldmVsb3Blcl9kaXIgKyAiL0FwcGxpY2F0aW9ucy9TaW11bGF0
b3IuYXBwIgorICAgICAgICBzaHV0aWwuY29weXRyZWUoc2ltdWxhdG9yX2FwcF9wYXRoLCBkZXN0
aW5hdGlvbikKKworICAgICAgICAjIFVwZGF0ZSBhcHAncyBwYWNrYWdlLW5hbWUgaW5zaWRlIHBs
aXN0IGFuZCByZS1jb2RlLXNpZ24gaXQKKyAgICAgICAgcGxpc3RfcGF0aCA9IGRlc3RpbmF0aW9u
ICsgIi9Db250ZW50cy9JbmZvLnBsaXN0IgorICAgICAgICBjb21tYW5kID0gIlNldCBDRkJ1bmRs
ZUlkZW50aWZpZXIgY29tLmFwcGxlLmlwaG9uZXNpbXVsYXRvciIgKyBzdHIoc3VmZml4KQorICAg
ICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbIi91c3IvbGliZXhlYy9QbGlzdEJ1ZGR5Iiwg
Ii1jIiwgY29tbWFuZCwgcGxpc3RfcGF0aF0pCisgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0
cHV0KFsiaW5zdGFsbF9uYW1lX3Rvb2wiLCAiLWFkZF9ycGF0aCIsIHNlbGYuZGV2ZWxvcGVyX2Rp
ciArICIvTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jrcy8iLCBkZXN0aW5hdGlvbiArICIvQ29udGVu
dHMvTWFjT1MvU2ltdWxhdG9yIl0pCisgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsi
aW5zdGFsbF9uYW1lX3Rvb2wiLCAiLWFkZF9ycGF0aCIsIHNlbGYuZGV2ZWxvcGVyX2RpciArICIv
Li4vRnJhbWV3b3Jrcy8iLCBkZXN0aW5hdGlvbiArICIvQ29udGVudHMvTWFjT1MvU2ltdWxhdG9y
Il0pCisgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsiY29kZXNpZ24iLCAiLWZzIiwg
Ii0iLCBkZXN0aW5hdGlvbl0pCisgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFtzZWxm
LkxTUkVHSVNURVJfUEFUSCwgIi1mIiwgZGVzdGluYXRpb25dKQpJbmRleDogVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L2lvc19zaW11bGF0b3IucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wb3J0L2lvc19zaW11bGF0b3IucHkJKHJldmlzaW9uIDIxMzIzMCkKKysr
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Nfc2ltdWxhdG9yLnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAxNC0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjAsNyArMjAsNiBAQAogIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogIyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCi1p
bXBvcnQgaXRlcnRvb2xzCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9zCiBpbXBvcnQgcmUKQEAg
LTI5LDEyICsyOCw5IEBAIGltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgdGltZQogCiBmcm9tIHdl
YmtpdHB5LmNvbW1vbi5tZW1vaXplZCBpbXBvcnQgbWVtb2l6ZWQKLWZyb20gd2Via2l0cHkuY29t
bW9uLnN5c3RlbS5leGVjdXRpdmUgaW1wb3J0IFNjcmlwdEVycm9yCiBmcm9tIHdlYmtpdHB5Lmxh
eW91dF90ZXN0cy5tb2RlbHMudGVzdF9jb25maWd1cmF0aW9uIGltcG9ydCBUZXN0Q29uZmlndXJh
dGlvbgotZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBjb25maWcgYXMgcG9ydF9jb25maWcKLWZy
b20gd2Via2l0cHkucG9ydCBpbXBvcnQgZHJpdmVyLCBpbWFnZV9kaWZmCi1mcm9tIHdlYmtpdHB5
LnBvcnQuZGFyd2luIGltcG9ydCBEYXJ3aW5Qb3J0Ci1mcm9tIHdlYmtpdHB5LnBvcnQuc2ltdWxh
dG9yX3Byb2Nlc3MgaW1wb3J0IFNpbXVsYXRvclByb2Nlc3MKK2Zyb20gd2Via2l0cHkucG9ydCBp
bXBvcnQgaW1hZ2VfZGlmZgorZnJvbSB3ZWJraXRweS5wb3J0LmlvcyBpbXBvcnQgSU9TUG9ydAog
ZnJvbSB3ZWJraXRweS54Y29kZS5zaW11bGF0b3IgaW1wb3J0IFNpbXVsYXRvciwgUnVudGltZSwg
RGV2aWNlVHlwZQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmNyYXNobG9ncyBpbXBvcnQg
Q3Jhc2hMb2dzCiAKQEAgLTQyLDMyICszOCw3IEBAIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3Rl
bS5jcmFzaGxvZ3MgaW0KIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKIAogCi1j
bGFzcyBJT1NQb3J0KERhcndpblBvcnQpOgotICAgIHBvcnRfbmFtZSA9ICJpb3MiCi0KLSAgICBB
UkNISVRFQ1RVUkVTID0gWydhcm12NycsICdhcm12N3MnLCAnYXJtNjQnXQotICAgIERFRkFVTFRf
QVJDSElURUNUVVJFID0gJ2FybTY0JwotICAgIFZFUlNJT05fRkFMTEJBQ0tfT1JERVIgPSBbJ2lv
cy03JywgJ2lvcy04JywgJ2lvcy05JywgJ2lvcy0xMCddCi0KLSAgICBAY2xhc3NtZXRob2QKLSAg
ICBkZWYgZGV0ZXJtaW5lX2Z1bGxfcG9ydF9uYW1lKGNscywgaG9zdCwgb3B0aW9ucywgcG9ydF9u
YW1lKToKLSAgICAgICAgaWYgcG9ydF9uYW1lID09IGNscy5wb3J0X25hbWU6Ci0gICAgICAgICAg
ICBpcGhvbmVvc19zZGtfdmVyc2lvbiA9IGhvc3QucGxhdGZvcm0ueGNvZGVfc2RrX3ZlcnNpb24o
J2lwaG9uZW9zJykKLSAgICAgICAgICAgIGlmIG5vdCBpcGhvbmVvc19zZGtfdmVyc2lvbjoKLSAg
ICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlBsZWFzZSBpbnN0YWxsIHRoZSBpT1MgU0RL
LiIpCi0gICAgICAgICAgICBtYWpvcl92ZXJzaW9uX251bWJlciA9IGlwaG9uZW9zX3Nka192ZXJz
aW9uLnNwbGl0KCcuJylbMF0KLSAgICAgICAgICAgIHBvcnRfbmFtZSA9IHBvcnRfbmFtZSArICct
JyArIG1ham9yX3ZlcnNpb25fbnVtYmVyCi0gICAgICAgIHJldHVybiBwb3J0X25hbWUKLQotICAg
ICMgRGVzcGl0ZSB0aGVpciBuYW1lcywgdGhlc2UgZmxhZ3MgZG8gbm90IGFjdHVhbGx5IGdldCBw
YXNzZWQgYWxsIHRoZSB3YXkgZG93biB0byB3ZWJraXQtYnVpbGQuCi0gICAgZGVmIF9idWlsZF9k
cml2ZXJfZmxhZ3Moc2VsZik6Ci0gICAgICAgIHJldHVybiBbJy0tc2RrJywgJ2lwaG9uZW9zJ10g
KyAoWydBUkNIUz0lcycgJSBzZWxmLmFyY2hpdGVjdHVyZSgpXSBpZiBzZWxmLmFyY2hpdGVjdHVy
ZSgpIGVsc2UgW10pCi0KLSAgICBkZWYgb3BlcmF0aW5nX3N5c3RlbShzZWxmKToKLSAgICAgICAg
cmV0dXJuICdpb3MnCi0KLQotY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKK2Ns
YXNzIElPU1NpbXVsYXRvclBvcnQoSU9TUG9ydCk6CiAgICAgcG9ydF9uYW1lID0gImlvcy1zaW11
bGF0b3IiCiAKICAgICBGVVRVUkVfVkVSU0lPTiA9ICdmdXR1cmUnCkBAIC04NywyMCArNTgsMTgg
QEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKICAgICAgICAgJ3g4Nl82NCc6
IHsKICAgICAgICAgICAgICdpcGhvbmUnOiAnaVBob25lIDVzJywKICAgICAgICAgICAgICdpcGhv
bmU3JzogJ2lQaG9uZSA3JywKLSAgICAgICAgICAgICdpcGFkJzogJ2lQYWQgQWlyJworICAgICAg
ICAgICAgJ2lwYWQnOiAnaVBhZCBBaXInLAogICAgICAgICB9LAogICAgICAgICAneDg2Jzogewog
ICAgICAgICAgICAgJ2lwaG9uZSc6ICdpUGhvbmUgNScsCi0gICAgICAgICAgICAnaXBhZCc6ICdp
UGFkIFJldGluYScKKyAgICAgICAgICAgICdpcGFkJzogJ2lQYWQgUmV0aW5hJywKICAgICAgICAg
fSwKICAgICB9CiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3
YXJncyk6Ci0gICAgICAgIERhcndpblBvcnQuX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydF9uYW1l
LCAqKmt3YXJncykKLSAgICAgICAgc2VsZi5fdGVzdF9ydW5uZXJfcHJvY2Vzc19jb25zdHJ1Y3Rv
ciA9IFNpbXVsYXRvclByb2Nlc3MKKyAgICAgICAgc3VwZXIoSU9TU2ltdWxhdG9yUG9ydCwgc2Vs
ZikuX19pbml0X18oaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncykKIAogICAgICAgICBvcHRpb25h
bF9kZXZpY2VfY2xhc3MgPSBzZWxmLmdldF9vcHRpb24oJ2RldmljZV9jbGFzcycpCi0gICAgICAg
IHNlbGYuX3ByaW50aW5nX2NtZF9saW5lID0gRmFsc2UKICAgICAgICAgc2VsZi5fZGV2aWNlX2Ns
YXNzID0gb3B0aW9uYWxfZGV2aWNlX2NsYXNzIGlmIG9wdGlvbmFsX2RldmljZV9jbGFzcyBlbHNl
IHNlbGYuREVGQVVMVF9ERVZJQ0VfQ0xBU1MKICAgICAgICAgX2xvZy5kZWJ1ZygnSU9TU2ltdWxh
dG9yUG9ydCBfZGV2aWNlX2NsYXNzIGlzICVzJywgc2VsZi5fZGV2aWNlX2NsYXNzKQogCkBAIC0x
MTIsMTkgKzgxLDggQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChEYXJ3aW5Qb3J0KToKICAgICAg
ICAgICAgICAgICBfbG9nLndhcm4oJ0Nhbm5vdCBoYXZlIG1vcmUgdGhhbiBvbmUgY2hpbGQgcHJv
Y2VzcyB3aGVuIHVzaW5nIGEgcnVubmluZyBzaW11bGF0b3IuICBTZXR0aW5nIGNoaWxkX3Byb2Nl
c3NlcyB0byAxLicpCiAgICAgICAgICAgICBzZWxmLnNldF9vcHRpb24oJ2NoaWxkX3Byb2Nlc3Nl
cycsIDEpCiAKLSAgICBkZWYgZHJpdmVyX25hbWUoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuZ2V0
X29wdGlvbignZHJpdmVyX25hbWUnKToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9vcHRp
b24oJ2RyaXZlcl9uYW1lJykKLSAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCd3ZWJraXRfdGVz
dF9ydW5uZXInKToKLSAgICAgICAgICAgIHJldHVybiAnV2ViS2l0VGVzdFJ1bm5lckFwcC5hcHAn
Ci0gICAgICAgIHJldHVybiAnRHVtcFJlbmRlclRyZWUuYXBwJwotCi0gICAgZGVmIGRyaXZlcl9j
bWRfbGluZV9mb3JfbG9nZ2luZyhzZWxmKToKLSAgICAgICAgIyBBdm9pZCBzcGlubmluZyB1cCBk
ZXZpY2VzIGp1c3QgZm9yIGxvZ2dpbmcgdGhlIGNvbW1hbmRsaW5lLgotICAgICAgICBzZWxmLl9w
cmludGluZ19jbWRfbGluZSA9IFRydWUKLSAgICAgICAgcmVzdWx0ID0gc3VwZXIoSU9TU2ltdWxh
dG9yUG9ydCwgc2VsZikuZHJpdmVyX2NtZF9saW5lX2Zvcl9sb2dnaW5nKCkKLSAgICAgICAgc2Vs
Zi5fcHJpbnRpbmdfY21kX2xpbmUgPSBGYWxzZQotICAgICAgICByZXR1cm4gcmVzdWx0CisgICAg
ZGVmIF9kZXZpY2VfZm9yX3dvcmtlcl9udW1iZXJfbWFwKHNlbGYpOgorICAgICAgICByZXR1cm4g
U2ltdWxhdG9yLm1hbmFnZWRfZGV2aWNlcwogCiAgICAgQHByb3BlcnR5CiAgICAgQG1lbW9pemVk
CkBAIC0xNTAsMTAgKzEwOCw2IEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoRGFyd2luUG9ydCk6
CiAgICAgICAgIHJldHVybiBkZXZpY2VfdHlwZQogCiAgICAgQG1lbW9pemVkCi0gICAgZGVmIGNo
aWxkX3Byb2Nlc3NlcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIGludChzZWxmLmdldF9vcHRpb24o
J2NoaWxkX3Byb2Nlc3NlcycpKQotCi0gICAgQG1lbW9pemVkCiAgICAgZGVmIGRlZmF1bHRfY2hp
bGRfcHJvY2Vzc2VzKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIG51bWJlciBvZiBTaW11
bGF0b3JzIGluc3RhbmNlcyB0byB1c2UgZm9yIHRoaXMgcG9ydC4iIiIKICAgICAgICAgYmVzdF9j
aGlsZF9wcm9jZXNzX2NvdW50X2Zvcl9jcHUgPSBzZWxmLl9leGVjdXRpdmUuY3B1X2NvdW50KCkg
LyAyCkBAIC0zNjAsMjMgKzMxNCwxNSBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KERhcndpblBv
cnQpOgogICAgIGRlZiBfdXNpbmdfZGVkaWNhdGVkX3NpbXVsYXRvcnMoc2VsZik6CiAgICAgICAg
IHJldHVybiBzZWxmLmdldF9vcHRpb24oJ2RlZGljYXRlZF9zaW11bGF0b3JzJykKIAorICAgIGRl
ZiB1c2luZ19tdWx0aXBsZV9kZXZpY2VzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdXNp
bmdfZGVkaWNhdGVkX3NpbXVsYXRvcnMoKQorCiAgICAgZGVmIF9jcmVhdGVfZGV2aWNlKHNlbGYs
IG51bWJlcik6CiAgICAgICAgIHJldHVybiBTaW11bGF0b3IuY3JlYXRlX2RldmljZShudW1iZXIs
IHNlbGYuc2ltdWxhdG9yX2RldmljZV90eXBlKCksIHNlbGYuc2ltdWxhdG9yX3J1bnRpbWUpCiAK
ICAgICBkZWYgX3JlbW92ZV9kZXZpY2Uoc2VsZiwgbnVtYmVyKToKICAgICAgICAgU2ltdWxhdG9y
LnJlbW92ZV9kZXZpY2UobnVtYmVyKQogCi0gICAgZGVmIF90ZXN0aW5nX2RldmljZShzZWxmLCBu
dW1iZXIpOgotICAgICAgICByZXR1cm4gU2ltdWxhdG9yLmRldmljZV9udW1iZXIobnVtYmVyKQot
Ci0gICAgIyBGSVhNRTogVGhpcyBpcyBvbmx5IGV4cG9zZWQgc28gdGhhdCBTaW11bGF0b3JQcm9j
ZXNzIGNhbiB1c2UgaXQuCi0gICAgZGVmIGRldmljZV9pZF9mb3Jfd29ya2VyX251bWJlcihzZWxm
LCBudW1iZXIpOgotICAgICAgICBpZiBzZWxmLl9wcmludGluZ19jbWRfbGluZToKLSAgICAgICAg
ICAgIHJldHVybiAnPGR1bW15IGlkPicKLSAgICAgICAgaWYgc2VsZi5fdXNpbmdfZGVkaWNhdGVk
X3NpbXVsYXRvcnMoKToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl90ZXN0aW5nX2RldmljZShu
dW1iZXIpLnVkaWQKLSAgICAgICAgcmV0dXJuIHNlbGYuX2N1cnJlbnRfZGV2aWNlLnVkaWQKLQog
ICAgIGRlZiBnZXRfc2ltdWxhdG9yX3BhdGgoc2VsZiwgc3VmZml4PSIiKToKICAgICAgICAgcmV0
dXJuIG9zLnBhdGguam9pbihzZWxmLlNJTVVMQVRPUl9ESVJFQ1RPUlksICJTaW11bGF0b3IiICsg
c3RyKHN1ZmZpeCkgKyAiLmFwcCIpCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9y
dC9pb3NfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9w
b3J0L2lvc191bml0dGVzdC5weQkocmV2aXNpb24gMjEzMjMwKQorKysgVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wb3J0L2lvc191bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIs
NyBAQAogCiBpbXBvcnQgdGltZQogCi1mcm9tIHdlYmtpdHB5LnBvcnQuaW9zIGltcG9ydCBJT1NT
aW11bGF0b3JQb3J0Citmcm9tIHdlYmtpdHB5LnBvcnQuaW9zX3NpbXVsYXRvciBpbXBvcnQgSU9T
U2ltdWxhdG9yUG9ydAogZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBkYXJ3aW5fdGVzdGNhc2UK
IGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5maWxlc3lzdGVtX21vY2sgaW1wb3J0IE1vY2tG
aWxlU3lzdGVtCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ub3V0cHV0Y2FwdHVyZSBpbXBv
cnQgT3V0cHV0Q2FwdHVyZQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NpbXVs
YXRvcl9wcm9jZXNzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9y
dC9zaW11bGF0b3JfcHJvY2Vzcy5weQkocmV2aXNpb24gMjEzMjMwKQorKysgVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9wb3J0L3NpbXVsYXRvcl9wcm9jZXNzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC01
OCw3ICs1OCw3IEBAIGNsYXNzIFNpbXVsYXRvclByb2Nlc3MoU2VydmVyUHJvY2Vzcyk6CiAKICAg
ICBkZWYgX19pbml0X18oc2VsZiwgcG9ydF9vYmosIG5hbWUsIGNtZCwgZW52PU5vbmUsIHVuaXZl
cnNhbF9uZXdsaW5lcz1GYWxzZSwgdHJlYXRfbm9fZGF0YV9hc19jcmFzaD1GYWxzZSwgd29ya2Vy
X251bWJlcj1Ob25lKToKICAgICAgICAgc2VsZi5fYnVuZGxlX2lkID0gcG9ydF9vYmouYXBwX2lk
ZW50aWZpZXJfZnJvbV9idW5kbGUoY21kWzBdKQotICAgICAgICBzZWxmLl9kZXZpY2UgPSBTaW11
bGF0b3IocG9ydF9vYmouaG9zdCkuZmluZF9kZXZpY2VfYnlfdWRpZChwb3J0X29iai5kZXZpY2Vf
aWRfZm9yX3dvcmtlcl9udW1iZXIod29ya2VyX251bWJlcikpCisgICAgICAgIHNlbGYuX2Rldmlj
ZSA9IHBvcnRfb2JqLmRldmljZV9mb3Jfd29ya2VyX251bWJlcih3b3JrZXJfbnVtYmVyKQogICAg
ICAgICBpZiBub3Qgc2VsZi5fZGV2aWNlLmluc3RhbGxfYXBwKGNtZFswXSwgZW52KToKICAgICAg
ICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignRmFpbGVkIHRvIGluc3RhbGwgYXBwIHt9IG9uIHNp
bXVsYXRvciBkZXZpY2Uge30nLmZvcm1hdChjbWRbMF0sIHNlbGYuX2RldmljZS51ZGlkKSkKICAg
ICAgICAgZW52WydJUENfSURFTlRJRklFUiddID0gc2VsZi5fYnVuZGxlX2lkICsgJy0nICsgc2Vs
Zi5fZGV2aWNlLnVkaWQKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkveGNvZGUvc2ltdWxh
dG9yLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkveGNvZGUvc2ltdWxh
dG9yLnB5CShyZXZpc2lvbiAyMTMyMzApCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3hjb2Rl
L3NpbXVsYXRvci5weQkod29ya2luZyBjb3B5KQpAQCAtMTgxLDcgKzE4MSw3IEBAIGNsYXNzIFNp
bXVsYXRvcihvYmplY3QpOgogICAgIGRldmljZXNfcmUgPSByZS5jb21waWxlKAogICAgICAgICAn
XHMqKD9QPG5hbWU+LispIFwoKD9QPHVkaWQ+W14pXSspXCkgXCgoP1A8c3RhdGU+W14pXSspXCko
IFwoKD9QPGF2YWlsYWJpbGl0eT5bXildKylcKSk/JykKIAotICAgIF9tYW5hZ2VkX2RldmljZXMg
PSB7fQorICAgIG1hbmFnZWRfZGV2aWNlcyA9IHt9CiAgICAgRGV2aWNlID0gTm9uZQogCiAgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIGhvc3Q9Tm9uZSk6CkBAIC0yMTYsMjEgKzIxNiwyMSBAQCBjbGFz
cyBTaW11bGF0b3Iob2JqZWN0KToKICAgICBkZWYgY3JlYXRlX2RldmljZShudW1iZXIsIGRldmlj
ZV90eXBlLCBydW50aW1lKToKICAgICAgICAgZGV2aWNlID0gU2ltdWxhdG9yKCkubG9va3VwX29y
X2NyZWF0ZV9kZXZpY2UoZGV2aWNlX3R5cGUubmFtZSArICcgV2ViS2l0IFRlc3RlcicgKyBzdHIo
bnVtYmVyKSwgZGV2aWNlX3R5cGUsIHJ1bnRpbWUpCiAgICAgICAgIF9sb2cuZGVidWcoJ2NyZWF0
ZWQgZGV2aWNlIHt9IHt9Jy5mb3JtYXQobnVtYmVyLCBkZXZpY2UpKQotICAgICAgICBhc3NlcnQo
bGVuKFNpbXVsYXRvci5fbWFuYWdlZF9kZXZpY2VzKSA9PSBudW1iZXIpCi0gICAgICAgIFNpbXVs
YXRvci5fbWFuYWdlZF9kZXZpY2VzW251bWJlcl0gPSBkZXZpY2UKKyAgICAgICAgYXNzZXJ0KGxl
bihTaW11bGF0b3IubWFuYWdlZF9kZXZpY2VzKSA9PSBudW1iZXIpCisgICAgICAgIFNpbXVsYXRv
ci5tYW5hZ2VkX2RldmljZXNbbnVtYmVyXSA9IGRldmljZQogCiAgICAgQHN0YXRpY21ldGhvZAog
ICAgIGRlZiByZW1vdmVfZGV2aWNlKG51bWJlcik6Ci0gICAgICAgIGlmIG5vdCBTaW11bGF0b3Iu
X21hbmFnZWRfZGV2aWNlc1tudW1iZXJdOgorICAgICAgICBpZiBub3QgU2ltdWxhdG9yLm1hbmFn
ZWRfZGV2aWNlc1tudW1iZXJdOgogICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGRldmljZV91
ZGlkID0gU2ltdWxhdG9yLl9tYW5hZ2VkX2RldmljZXNbbnVtYmVyXS51ZGlkCisgICAgICAgIGRl
dmljZV91ZGlkID0gU2ltdWxhdG9yLm1hbmFnZWRfZGV2aWNlc1tudW1iZXJdLnVkaWQKICAgICAg
ICAgX2xvZy5kZWJ1ZygncmVtb3ZpbmcgZGV2aWNlIHt9IHt9Jy5mb3JtYXQobnVtYmVyLCBkZXZp
Y2VfdWRpZCkpCi0gICAgICAgIGRlbCBTaW11bGF0b3IuX21hbmFnZWRfZGV2aWNlc1tudW1iZXJd
CisgICAgICAgIGRlbCBTaW11bGF0b3IubWFuYWdlZF9kZXZpY2VzW251bWJlcl0KICAgICAgICAg
U2ltdWxhdG9yLmRlbGV0ZV9kZXZpY2UoZGV2aWNlX3VkaWQpCiAKICAgICBAc3RhdGljbWV0aG9k
CiAgICAgZGVmIGRldmljZV9udW1iZXIobnVtYmVyKToKLSAgICAgICAgcmV0dXJuIFNpbXVsYXRv
ci5fbWFuYWdlZF9kZXZpY2VzW251bWJlcl0KKyAgICAgICAgcmV0dXJuIFNpbXVsYXRvci5tYW5h
Z2VkX2RldmljZXNbbnVtYmVyXQogCiAgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBkZXZpY2Vf
c3RhdGVfZGVzY3JpcHRpb24oc3RhdGUpOgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>