From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Williams, Dan J" Subject: [GIT PULL] libnvdimm: non-volatile memory devices for 4.2 Date: Fri, 26 Jun 2015 21:46:26 +0000 Message-ID: <1435355182.18090.64.camel@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com ([134.134.136.20]:52739 "EHLO mga02.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752729AbbFZVqa (ORCPT ); Fri, 26 Jun 2015 17:46:30 -0400 Content-Language: en-US Content-ID: <742108056C3A7A4ABEF7F37AAE8FF96C@intel.com> Sender: linux-acpi-owner@vger.kernel.org List-Id: linux-acpi@vger.kernel.org To: "torvalds@linux-foundation.org" Cc: "toshi.kani@hp.com" , "mingo@kernel.org" , "linux-kernel@vger.kernel.org" , "nicholas.w.moulin@linux.intel.com" , "Rudoff, Andy" , "jmoyer@redhat.com" , "tglx@linutronix.de" , "hch@lst.de" , "axboe@kernel.dk" , "Moore, Robert" , "Wysocki, Rafael J" , "hpa@zytor.com" , "linux-nvdimm@lists.01.org" , "axboe@fb.com" , "willy@linux.intel.com" , "bp@alien8.de" , "ross.zwisler@linux.intel.com" , "Verma, Vishal L" , "gregkh@linuxfoundation.org" , luto@amaca SGkgTGludXMsIHBsZWFzZSBwdWxsIGZyb206DQoNCmdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9z Y20vbGludXgva2VybmVsL2dpdC9kamJ3L252ZGltbSB0YWdzL2xpYm52ZGltbS1mb3ItNC4yDQoN Ci4uLnRvIHJlY2VpdmUgdGhlIG5ldyBsaWJudmRpbW0gc3ViLXN5c3RlbSwgcmVsYXRlZCBkcml2 ZXJzLCBhbmQgeDg2DQplbmFibGluZy4NCg0KLS0tDQoNCkVhcmxpZXIgdGhpcyB3ZWVrLCBpbiB0 aGUgQUNQSUNBIHVwZGF0ZSwgeW91IG1lcmdlZCB0aGUgZGVmaW5pdGlvbiBvZg0KdGhlIG5ldyBB Q1BJIDYuMCB0YWJsZSBkZXNjcmliaW5nIHBsYXRmb3JtIG5vbi12b2xhdGlsZSBtZW1vcnkNCnJl c291cmNlcywgTkZJVCAoTlZESU1NIEZpcm13YXJlIEludGVyZmFjZSBUYWJsZSkuICBUaGUgc3Bl Y2lmaWNhdGlvbg0KZm9yIHRoaXMgdGFibGUgZ3VpZGVkIGRldmVsb3BtZW50IG9mIGxpYm52ZGlt bSwgYSBnZW5lcmljIGtlcm5lbA0Kc3ViLXN5c3RlbSBpbiBzdXBwb3J0IG9mIE5WRElNTSBkZXZp Y2VzLiAgVGhlIG5ldyBBQ1BJX05GSVQgZHJpdmVyIGlzDQp0aGUgcHJpbWFyeSBjb25zdW1lciBv ZiB0aGlzIGxpYnJhcnksIGFuZCBpdCBhbHNvIHN1cHBvcnRzIHRoZSBleGlzdGluZw0KWDg2X1BN RU1fTEVHQUNZIGRlZmluaXRpb24gbWVyZ2VkIGluIHY0LjEuDQoNClRoZSBpbXBsZW1lbnRhdGlv biBoYXMgYmVlbiBvdXQgZm9yIHJldmlldyBzaW5jZSBBQ1BJIDYuMCB3YXMgcmVsZWFzZWQNCndo aWNoIGNvaW5jaWRlZCB3aXRoIHY0LjEtcmMxLiAgV2UgaGF2ZSBpdGVyYXRlZCB0aHJvdWdoIGEg c3RlYWR5IHN0cmVhbQ0Kb2YgdG91Z2gsIGJ1dCB1bHRpbWF0ZWx5IGZvciB0aGUgYmV0dGVybWVu dCBvZiB0aGUgY29kZSBiYXNlLCByZXZpZXcNCmZlZWRiYWNrLiAgVGhlIGNvZGUgaXMgbWVyZ2Ug cmVhZHkgYXMgd2UgaGF2ZSB3b3JrZWQgdGhyb3VnaCBhbGwgdGhlDQpjb2Fyc2UgYXNwZWN0cyBv ZiB0aGUgYXJjaGl0ZWN0dXJlLCBwcmltYXJpbHkgd2l0aCBDaHJpc3RvcGgsIGFuZCBoYXZlDQpk ZW1vbnN0cmF0ZWQgYSB3aWxsaW5nbmVzcyBhbmQgYWJpbGl0eSB0byBxdWlja2x5IHNwaW4gdGhl DQppbXBsZW1lbnRhdGlvbiBpbiByZXNwb25zZSB0byByZXZpZXcuDQoNCkl0IG11c3QgYmUgbm90 ZWQgdGhhdCB0aGUgb25lIGFzcGVjdCBvZiB0aGlzIHB1bGwgcmVxdWVzdCB0aGF0IENocmlzdG9w aA0Kc3RpbGwgaGFzIGNvbmNlcm5zLCB0aGUgZXh0ZXJuYWwgdW5pdCB0ZXN0IGluZnJhc3RydWN0 dXJlIGluDQp0b29scy90ZXN0aW5nL252ZGltbS8sIGlzIHRoZSBwcmltYXJ5IHJlYXNvbiB3ZSBo YXZlIGJlZW4gYWJsZSB0byBzcGluDQp0aGUgaW1wbGVtZW50YXRpb24gd2l0aCBzcGVlZCBhbmQg Y29uZmlkZW5jZS4gIFRoZSBjaGFuZ2Vsb2cgZm9yIGNvbW1pdA0KNmJjNzU2MTkzZmY2ICJ0b29s cy90ZXN0aW5nL252ZGltbTogbGlibnZkaW1tIHVuaXQgdGVzdCBpbmZyYXN0cnVjdHVyZSINCmdv ZXMgaW50byBtb3JlIGRldGFpbHMgb2YgdGhlIHJhdGlvbmFsZSB0byBpbmNsdWRlIGl0LiAgU3Vm ZmljZSB0byBzYXkNCnRoZSBwb3RlbnRpYWwgbWFpbnRlbmFuY2UgYnVyZGVuIG9mIGNhcnJ5aW5n IGRyaXZlciB0ZXN0IGluZnJhc3RydWN0dXJlDQppbi10cmVlIGlzIG92ZXJzaGFkb3dlZCBieSB0 aGUgYmVuZWZpdHMgb2YgZGVtb25zdHJhdGluZyB0aGUNCmltcGxlbWVudGF0aW9uIGluIHRoZSBh YnNlbmNlIG9mIGhhcmR3YXJlLCBjYXRjaGluZyBidWdzICh0aGUgbWFqb3JpdHkNCm9mIHRoZW0p LCBhbmQgaWRlbnRpZnlpbmcgaW5jb21wbGV0ZSBlbmFibGluZy4NCg0KTm90YWJseSBtaXNzaW5n IGZyb20gdGhpcyBtZXJnZSByZXF1ZXN0IGFyZSBzb21lIG9mIHRoZSB3aWRlciBhcmNoDQpjbGVh bnVwcyAoZ2VuZXJpYyBpb3JlbWFwX2NhY2hlKCkpIGFuZCBjb3JlIGtlcm5lbCBlbmFibGluZyAo X19wZm5fdCwNCmttYXBfYXRvbWljX3Bmbl90KCksIG1lbXJlbWFwKCksIGV0Yy4uLikgdXBkYXRl cyB0aGF0IHdlcmUgaWRlbnRpZmllZCBpbg0KdGhlIGNvdXJzZSBvZiBkZXZlbG9wbWVudC4gIFRo b3NlIHdpbGwgbmVlZCB0byB3YWl0IGZvciA0LjMuICBJbiB0aGUNCm1lYW50aW1lIHRoaXMgZG9l cyBpbmNsdWRlIHRoZSBuZXcgcG1lbSBhcGkgd2hpY2ggaG9va3MgdXAgdGhlICJwY29tbWl0Ig0K aW5zdHJ1Y3Rpb24gdGhhdCB3YXMgcHJldmlvdXNseSBtZXJnZWQgaW4gdjQuMSBhbmQgb3V0bGlu ZXMgd2hhdCBhbg0KYXJjaGl0ZWN0dXJlIG1heSBuZWVkIHRvIGltcGxlbWVudCB0byByZWxpYWJs eSBzdXBwb3J0IHBtZW0uDQoNClBsZWFzZSBwdWxsLCBmdWxsIGNvbW1pdCBsb2cgYmVsb3cgc28g eW91IGNhbiBzZWUgd2hhdCBoYXMgYmVlbg0KZXhwbGljaXRseSBhY2tlZC4NCg0KVGhhbmsgeW91 IQ0KDQotLS0NCg0KVGhlIGZvbGxvd2luZyBjaGFuZ2VzIHNpbmNlIGNvbW1pdCBmM2I2Y2VkMjM2 MjU5YTg3ODI5YjgyOWU4ZTU0MmZmNTNiZmI5YTRmOg0KDQogIEFDUElDQTogRml4IGZvciBpbGwt Zm9ybWVkIEdVSUQgc3RyaW5ncyBmb3IgTkZJVCB0YWJsZXMuICgyMDE1LTA1LTI1IDIzOjQyOjM0 ICswMjAwKQ0KDQphcmUgYXZhaWxhYmxlIGluIHRoZSBnaXQgcmVwb3NpdG9yeSBhdDoNCg0KICBn aXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvZGpidy9udmRpbW0g dGFncy9saWJudmRpbW0tZm9yLTQuMg0KDQpmb3IgeW91IHRvIGZldGNoIGNoYW5nZXMgdXAgdG8g NjEwMzE5NTJmNGM4OWRiYTEwNjVmN2E1Yjk0MTliYWRiMTEyNTU0YzoNCg0KICBhcmNoLCB4ODY6 IHBtZW0gYXBpIGZvciBlbnN1cmluZyBkdXJhYmlsaXR5IG9mIHBlcnNpc3RlbnQgbWVtb3J5IHVw ZGF0ZXMgKDIwMTUtMDYtMjYgMTE6MjM6MzggLTA0MDApDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NClRoZSBsaWJudmRp bW0gc3ViLXN5c3RlbSBpbnRyb2R1Y2VzLCBpbiBhZGRpdGlvbiB0byB0aGUgbGlibnZkaW1tLWNv cmUsDQo0IGRyaXZlcnMgLyBlbmFibGluZyBtb2R1bGVzOg0KDQpORklUOg0KSW5zdGFudGlhdGVz IGFuICJudmRpbW0gYnVzIiB3aXRoIHRoZSBjb3JlIGFuZCByZWdpc3RlcnMgbWVtb3J5IGRldmlj ZXMNCihOVkRJTU1zKSBlbnVtZXJhdGVkIGJ5IHRoZSBBQ1BJIDYuMCBORklUIChOVkRJTU0gRmly bXdhcmUgSW50ZXJmYWNlDQp0YWJsZSkuICBBZnRlciByZWdpc3RlcmluZyBOVkRJTU1zIHRoZSBO RklUIGRyaXZlciB0aGVuIHJlZ2lzdGVycw0KInJlZ2lvbiIgZGV2aWNlcy4gIEEgbGlibnZkaW1t LXJlZ2lvbiBkZWZpbmVzIGFuIGFjY2VzcyBtb2RlIGFuZCB0aGUNCmJvdW5kYXJpZXMgb2YgcGVy c2lzdGVudCBtZW1vcnkgbWVkaWEuICBBIHJlZ2lvbiBtYXkgc3BhbiBtdWx0aXBsZQ0KTlZESU1N cyB0aGF0IGFyZSBpbnRlcmxlYXZlZCBieSB0aGUgaGFyZHdhcmUgbWVtb3J5IGNvbnRyb2xsZXIu ICBJbg0KdHVybiwgYSBsaWJudmRpbW0tcmVnaW9uIGNhbiBiZSBjYXJ2ZWQgaW50byBhICJuYW1l c3BhY2UiIGRldmljZSBhbmQNCmJvdW5kIHRvIHRoZSBQTUVNIG9yIEJMSyBkcml2ZXIgd2hpY2gg d2lsbCBhdHRhY2ggYSBMaW51eCBibG9jayBkZXZpY2UNCihkaXNrKSBpbnRlcmZhY2UgdG8gdGhl IG1lbW9yeS4NCg0KUE1FTToNCkluaXRpYWxseSBtZXJnZWQgaW4gdjQuMSB0aGlzIGRyaXZlciBm b3IgY29udGlndW91cyBzcGFucyBvZiBwZXJzaXN0ZW50DQptZW1vcnkgYWRkcmVzcyByYW5nZXMg aXMgcmUtd29ya2VkIHRvIGRyaXZlIFBNRU0tbmFtZXNwYWNlcyBlbWl0dGVkIGJ5DQp0aGUgbGli bnZkaW1tLWNvcmUuICBJbiB0aGlzIHVwZGF0ZSB0aGUgUE1FTSBkcml2ZXIsIG9uIHg4NiwgZ2Fp bnMgdGhlDQphYmlsaXR5IHRvIGFzc2VydCB0aGF0IHdyaXRlcyB0byBwZXJzaXN0ZW50IG1lbW9y eSBoYXZlIGJlZW4gZmx1c2hlZCBhbGwNCnRoZSB3YXkgdGhyb3VnaCB0aGUgY2FjaGVzIGFuZCBi dWZmZXJzIGluIHRoZSBwbGF0Zm9ybSB0byBwZXJzaXN0ZW50DQptZWRpYS4gIFNlZSBtZW1jcHlf dG9fcG1lbSgpIGFuZCB3bWJfcG1lbSgpLg0KDQpCTEs6DQpUaGlzIG5ldyBkcml2ZXIgZW5hYmxl cyBhY2Nlc3MgdG8gcGVyc2lzdGVudCBtZW1vcnkgbWVkaWEgdGhyb3VnaCAiQmxvY2sNCkRhdGEg V2luZG93cyIgYXMgZGVmaW5lZCBieSB0aGUgTkZJVC4gIFRoZSBwcmltYXJ5IGRpZmZlcmVuY2Ug b2YgdGhpcw0KZHJpdmVyIHRvIFBNRU0gaXMgdGhhdCBvbmx5IGEgc21hbGwgd2luZG93IG9mIHBl cnNpc3RlbnQgbWVtb3J5IGlzDQptYXBwZWQgaW50byBzeXN0ZW0gYWRkcmVzcyBzcGFjZSBhdCBh bnkgZ2l2ZW4gcG9pbnQgaW4gdGltZS4gIFBlci1OVkRJTU0NCndpbmRvd3MgYXJlIHJlcHJvZ3Jh bW1lZCBhdCBydW4gdGltZSwgcGVyLUkvTywgdG8gYWNjZXNzIGRpZmZlcmVudA0KcG9ydGlvbnMg b2YgdGhlIG1lZGlhLiAgQkxLLW1vZGUsIGJ5IGRlZmluaXRpb24sIGRvZXMgbm90IHN1cHBvcnQg REFYLg0KDQpCVFQ6DQpUaGlzIGlzIGEgbGlicmFyeSwgb3B0aW9uYWxseSBjb25zdW1lZCBieSBl aXRoZXIgUE1FTSBvciBCTEssIHRoYXQNCmNvbnZlcnRzIGEgYnl0ZS1hY2Nlc3NpYmxlIG5hbWVz cGFjZSBpbnRvIGEgZGlzayB3aXRoIGF0b21pYyBzZWN0b3INCnVwZGF0ZSBzZW1hbnRpY3MgKHBy ZXZlbnRzIHNlY3RvciB0ZWFyaW5nIG9uIGNyYXNoIG9yIHBvd2VyIGxvc3MpLiAgVGhlDQpzaW5p c3RlciBhc3BlY3Qgb2Ygc2VjdG9yIHRlYXJpbmcgaXMgdGhhdCBtb3N0IGFwcGxpY2F0aW9ucyBk byBub3Qga25vdw0KdGhleSBoYXZlIGEgYXRvbWljIHNlY3RvciBkZXBlbmRlbmN5LiAgQXQgbGVh c3QgdG9kYXkncyBkaXNrcyByYXJlbHkNCmV2ZXIgdGVhciBzZWN0b3JzIGFuZCBpZiB0aGV5IGRv IG9uZSBhbG1vc3QgY2VydGFpbmx5IGdldHMgYSBDUkMgZXJyb3INCm9uIGFjY2Vzcy4gIE5WRElN TXMgd2lsbCBhbHdheXMgdGVhciBhbmQgYWx3YXlzIHNpbGVudGx5LiAgVW50aWwgYW4NCmFwcGxp Y2F0aW9uIGlzIGF1ZGl0ZWQgdG8gYmUgcm9idXN0IGluIHRoZSBwcmVzZW5jZSBvZiBzZWN0b3It dGVhcmluZw0KdGhlIHVzYWdlIG9mIEJUVCBpcyByZWNvbW1lbmRlZC4NCg0KVGhhbmtzIHRvOiBS b3NzIFp3aXNsZXIsIEplZmYgTW95ZXIsIFZpc2hhbCBWZXJtYSwgQ2hyaXN0b3BoIEhlbGx3aWcs DQpJbmdvIE1vbG5hciwgTmVpbCBCcm93biwgQm9heiBIYXJyb3NoLCBSb2JlcnQgRWxsaW90dCwg TWF0dGhldyBXaWxjb3gsDQpBbmR5IFJ1ZG9mZiwgTGluZGEgS25pcHBlcnMsIFRvc2hpIEthbmks IE5pY2hvbGFzIE1vdWxpbiwgUmFmYWVsDQpXeXNvY2tpLCBhbmQgQm9iIE1vb3JlLg0KDQotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQpEYW4gV2lsbGlhbXMgKDI0KToNCiAgICAgIGU4MjAsIGVmaTogYWRkIEFDUEkgNi4wIHBl cnNpc3RlbnQgbWVtb3J5IHR5cGVzDQogICAgICBsaWJudmRpbW0sIG5maXQ6IGluaXRpYWwgbGli bnZkaW1tIGluZnJhc3RydWN0dXJlIGFuZCBORklUIHN1cHBvcnQNCiAgICAgIGxpYm52ZGltbTog Y29udHJvbCBjaGFyYWN0ZXIgZGV2aWNlIGFuZCBudmRpbW1fYnVzIHN5c2ZzIGF0dHJpYnV0ZXMN CiAgICAgIGxpYm52ZGltbSwgbmZpdDogZGltbS9tZW1vcnktZGV2aWNlcw0KICAgICAgbGlibnZk aW1tOiBjb250cm9sIChpb2N0bCkgbWVzc2FnZXMgZm9yIG52ZGltbV9idXMgYW5kIG52ZGltbSBk ZXZpY2VzDQogICAgICBsaWJudmRpbW0sIG52ZGltbTogZGltbSBkcml2ZXIgYW5kIGJhc2UgbGli bnZkaW1tIGRldmljZS1kcml2ZXIgaW5mcmFzdHJ1Y3R1cmUNCiAgICAgIGxpYm52ZGltbSwgbmZp dDogcmVnaW9ucyAoYmxvY2stZGF0YS13aW5kb3csIHBlcnNpc3RlbnQgbWVtb3J5LCB2b2xhdGls ZSBtZW1vcnkpDQogICAgICBsaWJudmRpbW06IHN1cHBvcnQgZm9yIGxlZ2FjeSAobm9uLWFsaWFz aW5nKSBudmRpbW1zDQogICAgICBsaWJudmRpbW0sIHBtZW06IG1vdmUgcG1lbSB0byBkcml2ZXJz L252ZGltbS8NCiAgICAgIGxpYm52ZGltbSwgcG1lbTogYWRkIGxpYm52ZGltbSBzdXBwb3J0IHRv IHRoZSBwbWVtIGRyaXZlcg0KICAgICAgbGlibnZkaW1tLCBuZml0OiBhZGQgaW50ZXJsZWF2ZS1z ZXQgc3RhdGUtdHJhY2tpbmcgaW5mcmFzdHJ1Y3R1cmUNCiAgICAgIGxpYm52ZGltbTogbmFtZXNw YWNlIGluZGljZXM6IHJlYWQgYW5kIHZhbGlkYXRlDQogICAgICBsaWJudmRpbW06IHBtZW0gbGFi ZWwgc2V0cyBhbmQgbmFtZXNwYWNlIGluc3RhbnRpYXRpb24uDQogICAgICBsaWJudmRpbW06IGJs ayBsYWJlbHMgYW5kIG5hbWVzcGFjZSBpbnN0YW50aWF0aW9uDQogICAgICBsaWJudmRpbW06IHdy aXRlIHBtZW0gbGFiZWwgc2V0DQogICAgICBsaWJudmRpbW06IHdyaXRlIGJsayBsYWJlbCBzZXQN CiAgICAgIGxpYm52ZGltbTogaW5mcmFzdHJ1Y3R1cmUgZm9yIGJ0dCBkZXZpY2VzDQogICAgICB0 b29scy90ZXN0aW5nL252ZGltbTogbGlibnZkaW1tIHVuaXQgdGVzdCBpbmZyYXN0cnVjdHVyZQ0K ICAgICAgbGlibnZkaW1tOiBOb24tVm9sYXRpbGUgRGV2aWNlcw0KICAgICAgbGlibnZkaW1tLCBw bWVtOiBmaXggdXAgbWF4X2h3X3NlY3RvcnMNCiAgICAgIHBtZW06IG1ha2VfcmVxdWVzdCBjbGVh bnVwcw0KICAgICAgbGlibnZkaW1tOiBlbmFibGUgaW9zdGF0DQogICAgICBwbWVtOiBmbGFnIHBt ZW0gYmxvY2sgZGV2aWNlcyBhcyBub24tcm90YXRpb25hbA0KICAgICAgbGlibnZkaW1tLCBuZml0 OiBoYW5kbGUgdW5hcm1lZCBkaW1tcywgbWFyayBuYW1lc3BhY2VzIHJlYWQtb25seQ0KDQpSb3Nz IFp3aXNsZXIgKDIpOg0KICAgICAgbGlibnZkaW1tLCBuZml0LCBuZF9ibGs6IGRyaXZlciBmb3Ig QkxLLW1vZGUgYWNjZXNzIHBlcnNpc3RlbnQgbWVtb3J5DQogICAgICBhcmNoLCB4ODY6IHBtZW0g YXBpIGZvciBlbnN1cmluZyBkdXJhYmlsaXR5IG9mIHBlcnNpc3RlbnQgbWVtb3J5IHVwZGF0ZXMN Cg0KVG9zaGkgS2FuaSAoMyk6DQogICAgICBhY3BpOiBBZGQgYWNwaV9tYXBfcHhtX3RvX29ubGlu ZV9ub2RlKCkNCiAgICAgIGxpYm52ZGltbTogU2V0IG51bWFfbm9kZSB0byBOVkRJTU0gZGV2aWNl cw0KICAgICAgbGlibnZkaW1tOiBBZGQgc3lzZnMgbnVtYV9ub2RlIHRvIE5WRElNTSBkZXZpY2Vz DQoNClZpc2hhbCBWZXJtYSAoNCk6DQogICAgICBuZF9idHQ6IGF0b21pYyBzZWN0b3IgdXBkYXRl cw0KICAgICAgZnMvYmxvY2tfZGV2LmM6IHNraXAgcndfcGFnZSBpZiBiZGV2IGhhcyBpbnRlZ3Jp dHkNCiAgICAgIGxpYm52ZGltbSwgYnR0OiBhZGQgc3VwcG9ydCBmb3IgYmxrIGludGVncml0eQ0K ICAgICAgbGlibnZkaW1tLCBibGs6IGFkZCBzdXBwb3J0IGZvciBibGsgaW50ZWdyaXR5DQoNCiBE b2N1bWVudGF0aW9uL252ZGltbS9idHQudHh0ICAgICAgICAgIHwgIDI4MyArKysrKw0KIERvY3Vt ZW50YXRpb24vbnZkaW1tL252ZGltbS50eHQgICAgICAgfCAgODA4ICsrKysrKysrKysrKysrDQog TUFJTlRBSU5FUlMgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzkgKy0NCiBhcmNoL2Fy bTY0L2tlcm5lbC9lZmkuYyAgICAgICAgICAgICAgIHwgICAgMSArDQogYXJjaC9pYTY0L2tlcm5l bC9lZmkuYyAgICAgICAgICAgICAgICB8ICAgIDQgKw0KIGFyY2gveDg2L0tjb25maWcgICAgICAg ICAgICAgICAgICAgICAgfCAgICA0ICsNCiBhcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvZWJvb3Qu YyAgICAgIHwgICAgNCArDQogYXJjaC94ODYvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oICAgICB8 ICAgNzIgKysNCiBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9pby5oICAgICAgICAgICAgIHwgICAgNiAr DQogYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9lODIwLmggICAgICB8ICAgIDEgKw0KIGFyY2gv eDg2L2tlcm5lbC9lODIwLmMgICAgICAgICAgICAgICAgfCAgIDI4ICstDQogYXJjaC94ODYva2Vy bmVsL3BtZW0uYyAgICAgICAgICAgICAgICB8ICAgOTMgKy0NCiBhcmNoL3g4Ni9wbGF0Zm9ybS9l ZmkvZWZpLmMgICAgICAgICAgIHwgICAgMyArDQogZHJpdmVycy9LY29uZmlnICAgICAgICAgICAg ICAgICAgICAgICB8ICAgIDIgKw0KIGRyaXZlcnMvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAg ICAgfCAgICAxICsNCiBkcml2ZXJzL2FjcGkvS2NvbmZpZyAgICAgICAgICAgICAgICAgIHwgICAy NiArDQogZHJpdmVycy9hY3BpL01ha2VmaWxlICAgICAgICAgICAgICAgICB8ICAgIDEgKw0KIGRy aXZlcnMvYWNwaS9uZml0LmMgICAgICAgICAgICAgICAgICAgfCAxNTg3ICsrKysrKysrKysrKysr KysrKysrKysrKysrKysNCiBkcml2ZXJzL2FjcGkvbmZpdC5oICAgICAgICAgICAgICAgICAgIHwg IDE1OCArKysNCiBkcml2ZXJzL2FjcGkvbnVtYS5jICAgICAgICAgICAgICAgICAgIHwgICA1MCAr LQ0KIGRyaXZlcnMvYmxvY2svS2NvbmZpZyAgICAgICAgICAgICAgICAgfCAgIDExIC0NCiBkcml2 ZXJzL2Jsb2NrL01ha2VmaWxlICAgICAgICAgICAgICAgIHwgICAgMSAtDQogZHJpdmVycy9udmRp bW0vS2NvbmZpZyAgICAgICAgICAgICAgICB8ICAgNjggKysNCiBkcml2ZXJzL252ZGltbS9NYWtl ZmlsZSAgICAgICAgICAgICAgIHwgICAyMCArDQogZHJpdmVycy9udmRpbW0vYmxrLmMgICAgICAg ICAgICAgICAgICB8ICAzODQgKysrKysrKw0KIGRyaXZlcnMvbnZkaW1tL2J0dC5jICAgICAgICAg ICAgICAgICAgfCAxNDc5ICsrKysrKysrKysrKysrKysrKysrKysrKysrDQogZHJpdmVycy9udmRp bW0vYnR0LmggICAgICAgICAgICAgICAgICB8ICAxODUgKysrKw0KIGRyaXZlcnMvbnZkaW1tL2J0 dF9kZXZzLmMgICAgICAgICAgICAgfCAgNDI1ICsrKysrKysrDQogZHJpdmVycy9udmRpbW0vYnVz LmMgICAgICAgICAgICAgICAgICB8ICA3MzAgKysrKysrKysrKysrKw0KIGRyaXZlcnMvbnZkaW1t L2NvcmUuYyAgICAgICAgICAgICAgICAgfCAgNDY1ICsrKysrKysrDQogZHJpdmVycy9udmRpbW0v ZGltbS5jICAgICAgICAgICAgICAgICB8ICAxMDIgKysNCiBkcml2ZXJzL252ZGltbS9kaW1tX2Rl dnMuYyAgICAgICAgICAgIHwgIDU1MSArKysrKysrKysrDQogZHJpdmVycy9udmRpbW0vbGFiZWwu YyAgICAgICAgICAgICAgICB8ICA5MjcgKysrKysrKysrKysrKysrKw0KIGRyaXZlcnMvbnZkaW1t L2xhYmVsLmggICAgICAgICAgICAgICAgfCAgMTQxICsrKw0KIGRyaXZlcnMvbnZkaW1tL25hbWVz cGFjZV9kZXZzLmMgICAgICAgfCAxODcwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Kw0KIGRyaXZlcnMvbnZkaW1tL25kLWNvcmUuaCAgICAgICAgICAgICAgfCAgIDgzICsrDQogZHJp dmVycy9udmRpbW0vbmQuaCAgICAgICAgICAgICAgICAgICB8ICAyMjAgKysrKw0KIGRyaXZlcnMv e2Jsb2NrID0+IG52ZGltbX0vcG1lbS5jICAgICAgfCAgMjI3ICsrLS0NCiBkcml2ZXJzL252ZGlt bS9yZWdpb24uYyAgICAgICAgICAgICAgIHwgIDExNCArKw0KIGRyaXZlcnMvbnZkaW1tL3JlZ2lv bl9kZXZzLmMgICAgICAgICAgfCAgNzg3ICsrKysrKysrKysrKysrDQogZnMvYmxvY2tfZGV2LmMg ICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDQgKy0NCiBpbmNsdWRlL2xpbnV4L2FjcGkuaCAg ICAgICAgICAgICAgICAgIHwgICAgNSArDQogaW5jbHVkZS9saW51eC9jb21waWxlci5oICAgICAg ICAgICAgICB8ICAgIDIgKw0KIGluY2x1ZGUvbGludXgvZWZpLmggICAgICAgICAgICAgICAgICAg fCAgICAzICstDQogaW5jbHVkZS9saW51eC9saWJudmRpbW0uaCAgICAgICAgICAgICB8ICAxNTEg KysrDQogaW5jbHVkZS9saW51eC9uZC5oICAgICAgICAgICAgICAgICAgICB8ICAxNTEgKysrDQog aW5jbHVkZS9saW51eC9wbWVtLmggICAgICAgICAgICAgICAgICB8ICAxNTMgKysrDQogaW5jbHVk ZS91YXBpL2xpbnV4L0tidWlsZCAgICAgICAgICAgICB8ICAgIDEgKw0KIGluY2x1ZGUvdWFwaS9s aW51eC9uZGN0bC5oICAgICAgICAgICAgfCAgMTk3ICsrKysNCiBsaWIvS2NvbmZpZyAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwgICAgMyArDQogdG9vbHMvdGVzdGluZy9udmRpbW0vS2J1aWxk ICAgICAgICAgICB8ICAgNDAgKw0KIHRvb2xzL3Rlc3RpbmcvbnZkaW1tL01ha2VmaWxlICAgICAg ICAgfCAgICA3ICsNCiB0b29scy90ZXN0aW5nL252ZGltbS9jb25maWdfY2hlY2suYyAgIHwgICAx NSArDQogdG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9LYnVpbGQgICAgICB8ICAgIDggKw0KIHRv b2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYyAgICAgfCAgMTUxICsrKw0KIHRvb2xzL3Rl c3RpbmcvbnZkaW1tL3Rlc3QvbmZpdC5jICAgICAgfCAxMTE2ICsrKysrKysrKysrKysrKysrKysr DQogdG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9uZml0X3Rlc3QuaCB8ICAgMjkgKw0KIDU3IGZp bGVzIGNoYW5nZWQsIDEzODQzIGluc2VydGlvbnMoKyksIDE1NCBkZWxldGlvbnMoLSkNCiBjcmVh dGUgbW9kZSAxMDA2NDQgRG9jdW1lbnRhdGlvbi9udmRpbW0vYnR0LnR4dA0KIGNyZWF0ZSBtb2Rl IDEwMDY0NCBEb2N1bWVudGF0aW9uL252ZGltbS9udmRpbW0udHh0DQogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvYWNwaS9uZml0LmMNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9hY3Bp L25maXQuaA0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL252ZGltbS9LY29uZmlnDQogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbnZkaW1tL01ha2VmaWxlDQogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvbnZkaW1tL2Jsay5jDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbnZk aW1tL2J0dC5jDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbnZkaW1tL2J0dC5oDQogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbnZkaW1tL2J0dF9kZXZzLmMNCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9udmRpbW0vYnVzLmMNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9u dmRpbW0vY29yZS5jDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbnZkaW1tL2RpbW0uYw0K IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL252ZGltbS9kaW1tX2RldnMuYw0KIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL252ZGltbS9sYWJlbC5jDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvbnZkaW1tL2xhYmVsLmgNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9udmRpbW0v bmFtZXNwYWNlX2RldnMuYw0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL252ZGltbS9uZC1j b3JlLmgNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9udmRpbW0vbmQuaA0KIHJlbmFtZSBk cml2ZXJzL3tibG9jayA9PiBudmRpbW19L3BtZW0uYyAoNTAlKQ0KIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL252ZGltbS9yZWdpb24uYw0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL252 ZGltbS9yZWdpb25fZGV2cy5jDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvbGludXgvbGli bnZkaW1tLmgNCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9saW51eC9uZC5oDQogY3JlYXRl IG1vZGUgMTAwNjQ0IGluY2x1ZGUvbGludXgvcG1lbS5oDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGlu Y2x1ZGUvdWFwaS9saW51eC9uZGN0bC5oDQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL3Rlc3Rp bmcvbnZkaW1tL0tidWlsZA0KIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy90ZXN0aW5nL252ZGlt bS9NYWtlZmlsZQ0KIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy90ZXN0aW5nL252ZGltbS9jb25m aWdfY2hlY2suYw0KIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy90ZXN0aW5nL252ZGltbS90ZXN0 L0tidWlsZA0KIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lv bWFwLmMNCiBjcmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9uZml0 LmMNCiBjcmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9uZml0X3Rl c3QuaA0KDQoNCmNvbW1pdCBhZDVmYjg3MGM0ODZkOTMyYTE3NDlkNzg1M2RkNzBmNDM2YTdlMDNm DQpBdXRob3I6IERhbiBXaWxsaWFtcyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tPg0KRGF0ZTog ICBGcmkgQXByIDMgMTI6MDU6MjggMjAxNSAtMDQwMA0KDQogICAgZTgyMCwgZWZpOiBhZGQgQUNQ SSA2LjAgcGVyc2lzdGVudCBtZW1vcnkgdHlwZXMNCiAgICANCiAgICBBQ1BJIDYuMCBmb3JtYWxp emVzIGU4MjAtdHlwZS03IGFuZCBlZmktdHlwZS0xNCBhcyBwZXJzaXN0ZW50IG1lbW9yeS4NCiAg ICBNYXJrIGl0ICJyZXNlcnZlZCIgYW5kIGFsbG93IGl0IHRvIGJlIGNsYWltZWQgYnkgYSBwZXJz aXN0ZW50IG1lbW9yeQ0KICAgIGRldmljZSBkcml2ZXIuDQogICAgDQogICAgVGhpcyBkZWZpbml0 aW9uIGlzIGluIGFkZGl0aW9uIHRvIHRoZSBMaW51eCBrZXJuZWwncyBleGlzdGluZyB0eXBlLTEy DQogICAgZGVmaW5pdGlvbiB0aGF0IHdhcyByZWNlbnRseSBhZGRlZCBpbiBzdXBwb3J0IG9mIHNo aXBwaW5nIHBsYXRmb3JtcyB3aXRoDQogICAgTlZESU1NIHN1cHBvcnQgdGhhdCBwcmVkYXRlIEFD UEkgNi4wICh3aGljaCBub3cgY2xhc3NpZmllcyB0eXBlLTEyIGFzDQogICAgT0VNIHJlc2VydmVk KS4NCiAgICANCiAgICBOb3RlLCAvcHJvYy9pb21lbSBjYW4gYmUgY29uc3VsdGVkIGZvciBkaWZm ZXJlbnRpYXRpbmcgbGVnYWN5DQogICAgIlBlcnNpc3RlbnQgTWVtb3J5IChsZWdhY3kpIiBFODIw X1BSQU0gdnMgc3RhbmRhcmQgIlBlcnNpc3RlbnQgTWVtb3J5Ig0KICAgIEU4MjBfUE1FTS4NCiAg ICANCiAgICBDYzogQm9heiBIYXJyb3NoIDxib2F6QHBsZXhpc3Rvci5jb20+DQogICAgQ2M6IElu Z28gTW9sbmFyIDxtaW5nb0BrZXJuZWwub3JnPg0KICAgIENjOiBDaHJpc3RvcGggSGVsbHdpZyA8 aGNoQGxzdC5kZT4NCiAgICBDYzogQW5kcmV3IE1vcnRvbiA8YWtwbUBsaW51eC1mb3VuZGF0aW9u Lm9yZz4NCiAgICBDYzogQm9yaXNsYXYgUGV0a292IDxicEBhbGllbjguZGU+DQogICAgQ2M6IEgu IFBldGVyIEFudmluIDxocGFAenl0b3IuY29tPg0KICAgIENjOiBKZW5zIEF4Ym9lIDxheGJvZUBm Yi5jb20+DQogICAgQ2M6IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0BsaW51eC1mb3VuZGF0aW9u Lm9yZz4NCiAgICBDYzogTWF0dGhldyBXaWxjb3ggPHdpbGx5QGxpbnV4LmludGVsLmNvbT4NCiAg ICBDYzogVGhvbWFzIEdsZWl4bmVyIDx0Z2x4QGxpbnV0cm9uaXguZGU+DQogICAgQWNrZWQtYnk6 IEplZmYgTW95ZXIgPGptb3llckByZWRoYXQuY29tPg0KICAgIEFja2VkLWJ5OiBBbmR5IEx1dG9t aXJza2kgPGx1dG9AYW1hY2FwaXRhbC5uZXQ+DQogICAgUmV2aWV3ZWQtYnk6IFJvc3MgWndpc2xl ciA8cm9zcy56d2lzbGVyQGxpbnV4LmludGVsLmNvbT4NCiAgICBBY2tlZC1ieTogQ2hyaXN0b3Bo IEhlbGx3aWcgPGhjaEBsc3QuZGU+DQogICAgVGVzdGVkLWJ5OiBUb3NoaSBLYW5pIDx0b3NoaS5r YW5pQGhwLmNvbT4NCiAgICBTaWduZWQtb2ZmLWJ5OiBEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxp YW1zQGludGVsLmNvbT4NCg0KY29tbWl0IGI5NGQ1MjMwZDA2ZWI5MzBiZTgyZTY3ZmIxYTlhNTgy NzFlNzgyOTcNCkF1dGhvcjogRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRlbC5jb20+ DQpEYXRlOiAgIFR1ZSBNYXkgMTkgMjI6NTQ6MzEgMjAxNSAtMDQwMA0KDQogICAgbGlibnZkaW1t LCBuZml0OiBpbml0aWFsIGxpYm52ZGltbSBpbmZyYXN0cnVjdHVyZSBhbmQgTkZJVCBzdXBwb3J0 DQogICAgDQogICAgQSBzdHJ1Y3QgbnZkaW1tX2J1cyBpcyB0aGUgYW5jaG9yIGRldmljZSBmb3Ig cmVnaXN0ZXJpbmcgbnZkaW1tDQogICAgcmVzb3VyY2VzIGFuZCBpbnRlcmZhY2VzLCBmb3IgZXhh bXBsZSwgYSBjaGFyYWN0ZXIgY29udHJvbCBkZXZpY2UsDQogICAgbnZkaW1tIGRldmljZXMsIGFu ZCBJL08gcmVnaW9uIGRldmljZXMuICBUaGUgQUNQSSBORklUIChOVkRJTU0gRmlybXdhcmUNCiAg ICBJbnRlcmZhY2UgVGFibGUpIGlzIG9uZSBwb3NzaWJsZSBwbGF0Zm9ybSBkZXNjcmlwdGlvbiBm b3Igc3VjaA0KICAgIG5vbi12b2xhdGlsZSBtZW1vcnkgcmVzb3VyY2VzIGluIGEgc3lzdGVtLiAg VGhlIG5maXQua28gZHJpdmVyIGF0dGFjaGVzDQogICAgdG8gdGhlICJBQ1BJMDAxMiIgZGV2aWNl IHRoYXQgaW5kaWNhdGVzIHRoZSBwcmVzZW5jZSBvZiB0aGUgTkZJVCBhbmQNCiAgICBwYXJzZXMg dGhlIHRhYmxlIHRvIHJlZ2lzdGVyIGEgc3RydWN0IG52ZGltbV9idXMgaW5zdGFuY2UuDQogICAg DQogICAgQ2M6IDxsaW51eC1hY3BpQHZnZXIua2VybmVsLm9yZz4NCiAgICBDYzogTHYgWmhlbmcg PGx2LnpoZW5nQGludGVsLmNvbT4NCiAgICBDYzogUm9iZXJ0IE1vb3JlIDxyb2JlcnQubW9vcmVA aW50ZWwuY29tPg0KICAgIENjOiBSYWZhZWwgSi4gV3lzb2NraSA8cmFmYWVsLmoud3lzb2NraUBp bnRlbC5jb20+DQogICAgQWNrZWQtYnk6IEplZmYgTW95ZXIgPGptb3llckByZWRoYXQuY29tPg0K ICAgIEFja2VkLWJ5OiBDaHJpc3RvcGggSGVsbHdpZyA8aGNoQGxzdC5kZT4NCiAgICBBY2tlZC1i eTogUmFmYWVsIEouIFd5c29ja2kgPHJhZmFlbC5qLnd5c29ja2lAaW50ZWwuY29tPg0KICAgIFRl c3RlZC1ieTogVG9zaGkgS2FuaSA8dG9zaGkua2FuaUBocC5jb20+DQogICAgU2lnbmVkLW9mZi1i eTogRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRlbC5jb20+DQoNCmNvbW1pdCA0NWRl ZjIyYzFmYWI4NTc2NDY0Njc0NmNlMzhkNDViMmYzMjgxZmE1DQpBdXRob3I6IERhbiBXaWxsaWFt cyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tPg0KRGF0ZTogICBTdW4gQXByIDI2IDE5OjI2OjQ4 IDIwMTUgLTA0MDANCg0KICAgIGxpYm52ZGltbTogY29udHJvbCBjaGFyYWN0ZXIgZGV2aWNlIGFu ZCBudmRpbW1fYnVzIHN5c2ZzIGF0dHJpYnV0ZXMNCiAgICANCiAgICBUaGUgY29udHJvbCBkZXZp Y2UgZm9yIGEgbnZkaW1tX2J1cyBpcyByZWdpc3RlcmVkIGFzIGFuICJuZCIgY2xhc3MNCiAgICBk ZXZpY2UuICBUaGUgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGVyZSB3aWxsIHVzdWFsbHkgb25seSBi ZSBvbmUgIm5kIiBidXMNCiAgICByZWdpc3RlcmVkIHVuZGVyIC9zeXMvY2xhc3MvbmQuICBIb3dl dmVyLCB3ZSBhbGxvdyBmb3IgdGhlIHBvc3NpYmlsaXR5DQogICAgb2YgbXVsdGlwbGUgYnVzZXMg YW5kIHRoZXkgd2lsbCBsaXN0ZWQgaW4gZGlzY292ZXJ5IG9yZGVyIGFzDQogICAgbmRjdGwwLi4u bmRjdGxOLiAgVGhpcyBjaGFyYWN0ZXIgZGV2aWNlIGhvc3RzIHRoZSBpb2N0bCBmb3IgcGFzc2lu Zw0KICAgIGNvbnRyb2wgbWVzc2FnZXMuICBUaGUgaW5pdGlhbCBjb21tYW5kIHNldCBoYXMgYSAx OjEgY29ycmVsYXRpb24gd2l0aA0KICAgIHRoZSBjb21tYW5kcyBsaXN0ZWQgaW4gdGhlIGJ5IHRo ZSAiTkZJVCBEU00gRXhhbXBsZSIgZG9jdW1lbnQgWzFdLCBidXQNCiAgICB0aGlzIHNjaGVtZSBp cyBleHRlbnNpYmxlIHRvIGZ1dHVyZSBjb21tYW5kIHNldHMuDQogICAgDQogICAgTm90ZSwgbmRf aW9jdGwoKSBhbmQgdGhlIGJhY2tpbmcgLT5uZGN0bCgpIGltcGxlbWVudGF0aW9uIGFyZSBkZWZp bmVkIGluDQogICAgYSBzdWJzZXF1ZW50IHBhdGNoLiAgVGhpcyBpcyBzaW1wbHkgdGhlIGluaXRp YWwgcmVnaXN0cmF0aW9ucyBhbmQgc3lzZnMNCiAgICBhdHRyaWJ1dGVzLg0KICAgIA0KICAgIFsx XTogaHR0cDovL3BtZW0uaW8vZG9jdW1lbnRzL05WRElNTV9EU01fSW50ZXJmYWNlX0V4YW1wbGUu cGRmDQogICAgDQogICAgQ2M6IE5laWwgQnJvd24gPG5laWxiQHN1c2UuZGU+DQogICAgQ2M6IEdy ZWcgS0ggPGdyZWdraEBsaW51eGZvdW5kYXRpb24ub3JnPg0KICAgIENjOiA8bGludXgtYWNwaUB2 Z2VyLmtlcm5lbC5vcmc+DQogICAgQ2M6IFJvYmVydCBNb29yZSA8cm9iZXJ0Lm1vb3JlQGludGVs LmNvbT4NCiAgICBDYzogUmFmYWVsIEouIFd5c29ja2kgPHJhZmFlbC5qLnd5c29ja2lAaW50ZWwu Y29tPg0KICAgIEFja2VkLWJ5OiBDaHJpc3RvcGggSGVsbHdpZyA8aGNoQGxzdC5kZT4NCiAgICBB Y2tlZC1ieTogUmFmYWVsIEouIFd5c29ja2kgPHJhZmFlbC5qLnd5c29ja2lAaW50ZWwuY29tPg0K ICAgIFRlc3RlZC1ieTogVG9zaGkgS2FuaSA8dG9zaGkua2FuaUBocC5jb20+DQogICAgU2lnbmVk LW9mZi1ieTogRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRlbC5jb20+DQoNCmNvbW1p dCBlNmRmYjJkZTQ3NzY4ZWZlOGNjMzdjOWExODYzZDJhZmY4MTQ0MGZiDQpBdXRob3I6IERhbiBX aWxsaWFtcyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tPg0KRGF0ZTogICBTYXQgQXByIDI1IDAz OjU2OjE3IDIwMTUgLTA0MDANCg0KICAgIGxpYm52ZGltbSwgbmZpdDogZGltbS9tZW1vcnktZGV2 aWNlcw0KICAgIA0KICAgIEVuYWJsZSBudmRpbW0gZGV2aWNlcyB0byBiZSByZWdpc3RlcmVkIG9u IGEgbnZkaW1tX2J1cy4gIFRoZSBrZXJuZWwNCiAgICBhc3NpZ25lZCBkZXZpY2UgaWQgZm9yIG52 ZGltbSBkZXZpY2VzaXMgZHluYW1pYy4gIElmIHVzZXJzcGFjZSBuZWVkcyBhDQogICAgbW9yZSBz dGF0aWMgaWRlbnRpZmllciBpdCBzaG91bGQgY29uc3VsdCBhIHByb3ZpZGVyLXNwZWNpZmljIGF0 dHJpYnV0ZS4NCiAgICBJbiB0aGUgY2FzZSB3aGVyZSBORklUIGlzIHRoZSBwcm92aWRlciwgdGhl ICdubWVtWC9uZml0L2hhbmRsZScgb3INCiAgICAnbm1lbVgvbmZpdC9zZXJpYWwnIGF0dHJpYnV0 ZXMgbWF5IGJlIHVzZWQgZm9yIHRoaXMgcHVycG9zZS4NCiAgICANCiAgICBDYzogTmVpbCBCcm93 biA8bmVpbGJAc3VzZS5kZT4NCiAgICBDYzogPGxpbnV4LWFjcGlAdmdlci5rZXJuZWwub3JnPg0K ICAgIENjOiBHcmVnIEtIIDxncmVna2hAbGludXhmb3VuZGF0aW9uLm9yZz4NCiAgICBDYzogUm9i ZXJ0IE1vb3JlIDxyb2JlcnQubW9vcmVAaW50ZWwuY29tPg0KICAgIENjOiBSYWZhZWwgSi4gV3lz b2NraSA8cmFmYWVsLmoud3lzb2NraUBpbnRlbC5jb20+DQogICAgQWNrZWQtYnk6IENocmlzdG9w aCBIZWxsd2lnIDxoY2hAbHN0LmRlPg0KICAgIEFja2VkLWJ5OiBSYWZhZWwgSi4gV3lzb2NraSA8 cmFmYWVsLmoud3lzb2NraUBpbnRlbC5jb20+DQogICAgVGVzdGVkLWJ5OiBUb3NoaSBLYW5pIDx0 b3NoaS5rYW5pQGhwLmNvbT4NCiAgICBTaWduZWQtb2ZmLWJ5OiBEYW4gV2lsbGlhbXMgPGRhbi5q LndpbGxpYW1zQGludGVsLmNvbT4NCg0KY29tbWl0IDYyMjMyZTQ1ZjRhMjY1YWJiNDNmMGFjZjE2 ZTU4ZjVkMGI2ZTFlYzkNCkF1dGhvcjogRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRl bC5jb20+DQpEYXRlOiAgIE1vbiBKdW4gOCAxNDoyNzowNiAyMDE1IC0wNDAwDQoNCiAgICBsaWJu dmRpbW06IGNvbnRyb2wgKGlvY3RsKSBtZXNzYWdlcyBmb3IgbnZkaW1tX2J1cyBhbmQgbnZkaW1t IGRldmljZXMNCiAgICANCiAgICBNb3N0IGRpc2NvdmVyeS9jb25maWd1cmF0aW9uIG9mIHRoZSBu dmRpbW0tc3Vic3lzdGVtIGlzIGRvbmUgdmlhIHN5c2ZzDQogICAgYXR0cmlidXRlcy4gIEhvd2V2 ZXIsIHNvbWUgbnZkaW1tX2J1cyBpbnN0YW5jZXMsIHBhcnRpY3VsYXJseSB0aGUNCiAgICBBQ1BJ Lk5GSVQgYnVzLCBkZWZpbmUgYSBzbWFsbCBzZXQgb2YgbWVzc2FnZXMgdGhhdCBjYW4gYmUgcGFz c2VkIHRvIHRoZQ0KICAgIHBsYXRmb3JtLiAgRm9yIGNvbnZlbmllbmNlIHdlIGRlcml2ZSB0aGUg aW5pdGlhbCBsaWJudmRpbW0taW9jdGwgY29tbWFuZA0KICAgIGZvcm1hdHMgZGlyZWN0bHkgZnJv bSB0aGUgTkZJVCBEU00gSW50ZXJmYWNlIEV4YW1wbGUgZm9ybWF0cy4NCiAgICANCiAgICAgICAg TkRfQ01EX1NNQVJUOiBtZWRpYSBoZWFsdGggYW5kIGRpYWdub3N0aWNzDQogICAgICAgIE5EX0NN RF9HRVRfQ09ORklHX1NJWkU6IHNpemUgb2YgdGhlIGxhYmVsIHNwYWNlDQogICAgICAgIE5EX0NN RF9HRVRfQ09ORklHX0RBVEE6IHJlYWQgbGFiZWwgc3BhY2UNCiAgICAgICAgTkRfQ01EX1NFVF9D T05GSUdfREFUQTogd3JpdGUgbGFiZWwgc3BhY2UNCiAgICAgICAgTkRfQ01EX1ZFTkRPUjogdmVu ZG9yLXNwZWNpZmljIGNvbW1hbmQgcGFzc3Rocm91Z2gNCiAgICAgICAgTkRfQ01EX0FSU19DQVA6 IHJlcG9ydCBhZGRyZXNzLXJhbmdlLXNjcnViYmluZyBjYXBhYmlsaXRpZXMNCiAgICAgICAgTkRf Q01EX0FSU19TVEFSVDogaW5pdGlhdGUgc2NydWJiaW5nDQogICAgICAgIE5EX0NNRF9BUlNfU1RB VFVTOiByZXBvcnQgb24gc2NydWJiaW5nIHN0YXRlDQogICAgICAgIE5EX0NNRF9TTUFSVF9USFJF U0hPTEQ6IGNvbmZpZ3VyZSBhbGFybSB0aHJlc2hvbGRzIGZvciBzbWFydCBldmVudHMNCiAgICAN CiAgICBJZiBhIHBsYXRmb3JtIGxhdGVyIGRlZmluZXMgZGlmZmVyZW50IGNvbW1hbmRzIHRoYW4g dGhpcyBzZXQgaXQgaXMNCiAgICBzdHJhaWdodGZvcndhcmQgdG8gZXh0ZW5kIHN1cHBvcnQgdG8g dGhvc2UgZm9ybWF0cy4NCiAgICANCiAgICBNb3N0IG9mIHRoZSBjb21tYW5kcyB0YXJnZXQgYSBz cGVjaWZpYyBkaW1tLiAgSG93ZXZlciwgdGhlDQogICAgYWRkcmVzcy1yYW5nZS1zY3J1YmJpbmcg Y29tbWFuZHMgdGFyZ2V0IHRoZSBidXMuICBUaGUgJ2NvbW1hbmRzJw0KICAgIGF0dHJpYnV0ZSBp biBzeXNmcyBvZiBhbiBudmRpbW1fYnVzLCBvciBudmRpbW0sIGVudW1lcmF0ZSB0aGUgc3VwcG9y dGVkDQogICAgY29tbWFuZHMgZm9yIHRoYXQgb2JqZWN0Lg0KICAgIA0KICAgIENjOiA8bGludXgt YWNwaUB2Z2VyLmtlcm5lbC5vcmc+DQogICAgQ2M6IFJvYmVydCBNb29yZSA8cm9iZXJ0Lm1vb3Jl QGludGVsLmNvbT4NCiAgICBDYzogUmFmYWVsIEouIFd5c29ja2kgPHJhZmFlbC5qLnd5c29ja2lA aW50ZWwuY29tPg0KICAgIFJlcG9ydGVkLWJ5OiBOaWNob2xhcyBNb3VsaW4gPG5pY2hvbGFzLncu bW91bGluQGxpbnV4LmludGVsLmNvbT4NCiAgICBBY2tlZC1ieTogQ2hyaXN0b3BoIEhlbGx3aWcg PGhjaEBsc3QuZGU+DQogICAgU2lnbmVkLW9mZi1ieTogRGFuIFdpbGxpYW1zIDxkYW4uai53aWxs aWFtc0BpbnRlbC5jb20+DQoNCmNvbW1pdCA0ZDg4YTk3YWE5ZThjZmE2NDYwYWFiMTE5YzVkYTYw YWQyMjY3NDIzDQpBdXRob3I6IERhbiBXaWxsaWFtcyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwuY29t Pg0KRGF0ZTogICBTdW4gTWF5IDMxIDE0OjQxOjQ4IDIwMTUgLTA0MDANCg0KICAgIGxpYm52ZGlt bSwgbnZkaW1tOiBkaW1tIGRyaXZlciBhbmQgYmFzZSBsaWJudmRpbW0gZGV2aWNlLWRyaXZlciBp bmZyYXN0cnVjdHVyZQ0KICAgIA0KICAgICogSW1wbGVtZW50IHRoZSBkZXZpY2UtbW9kZWwgaW5m cmFzdHJ1Y3R1cmUgZm9yIGxvYWRpbmcgbW9kdWxlcyBhbmQNCiAgICAgIGF0dGFjaGluZyBkcml2 ZXJzIHRvIG52ZGltbSBkZXZpY2VzLiAgVGhpcyBpcyBhIHNpbXBsZSBhc3NvY2lhdGlvbiBvZiBh DQogICAgICBuZC1kZXZpY2UtdHlwZSBudW1iZXIgd2l0aCBhIGRyaXZlciB0aGF0IGhhcyBhIGJp dG1hc2sgb2Ygc3VwcG9ydGVkDQogICAgICBkZXZpY2UgdHlwZXMuICBUbyBmYWNpbGl0YXRlIHVz ZXJzcGFjZSBiaW5kL3VuYmluZCBvcGVyYXRpb25zICdtb2RhbGlhcycNCiAgICAgIGFuZCAnZGV2 dHlwZScsIHRoYXQgYWxzbyBhcHBlYXIgaW4gdGhlIHVldmVudCwgYXJlIGFkZGVkIGFzIGdlbmVy aWMNCiAgICAgIHN5c2ZzIGF0dHJpYnV0ZXMgZm9yIGFsbCBudmRpbW0gZGV2aWNlcy4gIFRoZSBy ZWFzb24gZm9yIHRoZSBkZXZpY2UtdHlwZQ0KICAgICAgbnVtYmVyIGlzIHRvIHN1cHBvcnQgc3Vi LXR5cGVzIHdpdGhpbiBhIGdpdmVuIHBhcmVudCBkZXZ0eXBlLCBiZSBpdCBhDQogICAgICB2ZW5k b3Itc3BlY2lmaWMgc3ViLXR5cGUgb3Igb3RoZXJ3aXNlLg0KICAgIA0KICAgICogVGhlIGZpcnN0 IGNvbnN1bWVyIG9mIHRoaXMgaW5mcmFzdHJ1Y3R1cmUgaXMgdGhlIGRyaXZlcg0KICAgICAgZm9y IGRpbW0gZGV2aWNlcy4gIEl0IHNpbXBseSB1c2VzIGNvbnRyb2wgbWVzc2FnZXMgdG8gcmV0cmll dmUgYW5kDQogICAgICBzdG9yZSB0aGUgY29uZmlndXJhdGlvbi1kYXRhIGltYWdlIChsYWJlbCBz ZXQpIGZyb20gZWFjaCBkaW1tLg0KICAgIA0KICAgIE5vdGU6IG5kX2RldmljZV9yZWdpc3Rlcigp IGFycmFuZ2VzIGZvciBhc3luY2hyb25vdXMgcmVnaXN0cmF0aW9uIG9mDQogICAgICAgICAgbnZk aW1tIGJ1cyBkZXZpY2VzIGJ5IGRlZmF1bHQuDQogICAgDQogICAgQ2M6IEdyZWcgS0ggPGdyZWdr aEBsaW51eGZvdW5kYXRpb24ub3JnPg0KICAgIENjOiBOZWlsIEJyb3duIDxuZWlsYkBzdXNlLmRl Pg0KICAgIEFja2VkLWJ5OiBDaHJpc3RvcGggSGVsbHdpZyA8aGNoQGxzdC5kZT4NCiAgICBUZXN0 ZWQtYnk6IFRvc2hpIEthbmkgPHRvc2hpLmthbmlAaHAuY29tPg0KICAgIFNpZ25lZC1vZmYtYnk6 IERhbiBXaWxsaWFtcyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tPg0KDQpjb21taXQgMWY3ZGY2 Zjg4YjkyNDVhN2YyZDBmOGVjYmM5N2RjODhjOGQwZDhlMQ0KQXV0aG9yOiBEYW4gV2lsbGlhbXMg PGRhbi5qLndpbGxpYW1zQGludGVsLmNvbT4NCkRhdGU6ICAgVHVlIEp1biA5IDIwOjEzOjE0IDIw MTUgLTA0MDANCg0KICAgIGxpYm52ZGltbSwgbmZpdDogcmVnaW9ucyAoYmxvY2stZGF0YS13aW5k b3csIHBlcnNpc3RlbnQgbWVtb3J5LCB2b2xhdGlsZSBtZW1vcnkpDQogICAgDQogICAgQSAicmVn aW9uIiBkZXZpY2UgcmVwcmVzZW50cyB0aGUgbWF4aW11bSBjYXBhY2l0eSBvZiBhIEJMSyByYW5n ZSAobW1pbw0KICAgIGJsb2NrLWRhdGEtd2luZG93KHMpKSwgb3IgYSBQTUVNIHJhbmdlIChEQVgt Y2FwYWJsZSBwZXJzaXN0ZW50IG1lbW9yeSBvcg0KICAgIHZvbGF0aWxlIG1lbW9yeSksIHdpdGhv dXQgcmVnYXJkIGZvciBhbGlhc2luZy4gIEFsaWFzaW5nLCBpbiB0aGUNCiAgICBkaW1tLWxvY2Fs IGFkZHJlc3Mgc3BhY2UgKERQQSksIGlzIHJlc29sdmVkIGJ5IG1ldGFkYXRhIG9uIGEgZGltbSB0 bw0KICAgIGRlc2lnbmF0ZSB3aGljaCBleGNsdXNpdmUgaW50ZXJmYWNlIHdpbGwgYWNjZXNzIHRo ZSBhbGlhc2VkIERQQSByYW5nZXMuDQogICAgU3VwcG9ydCBmb3IgdGhlIHBlci1kaW1tIG1ldGFk YXRhL2xhYmVsIGFycnZpZXMgaXMgaW4gYSBzdWJzZXF1ZW50DQogICAgcGF0Y2guDQogICAgDQog ICAgVGhlIG5hbWUgZm9ybWF0IG9mICJyZWdpb24iIGRldmljZXMgaXMgInJlZ2lvbk4iIHdoZXJl LCBsaWtlIGRpbW1zLCBOIGlzDQogICAgYSBnbG9iYWwgaWRhIGluZGV4IGFzc2lnbmVkIGF0IGRp c2NvdmVyeSB0aW1lLiAgVGhpcyBpZCBpcyBub3QgcmVsaWFibGUNCiAgICBhY3Jvc3MgcmVib290 cyBub3IgaW4gdGhlIHByZXNlbmNlIG9mIGhvdHBsdWcuICBMb29rIHRvIGF0dHJpYnV0ZXMgb2YN CiAgICB0aGUgcmVnaW9uIG9yIHN0YXRpYyBpZC1kYXRhIG9mIHRoZSBzdWItbmFtZXNwYWNlIHRv IGdlbmVyYXRlIGENCiAgICBwZXJzaXN0ZW50IG5hbWUuICBIb3dldmVyLCBpZiB0aGUgcGxhdGZv cm0gY29uZmlndXJhdGlvbiBkb2VzIG5vdCBjaGFuZ2UNCiAgICBpdCBpcyByZWFzb25hYmxlIHRv IGV4cGVjdCB0aGUgc2FtZSByZWdpb24gaWQgdG8gYmUgYXNzaWduZWQgYXQgdGhlIG5leHQNCiAg ICBib290Lg0KICAgIA0KICAgICJyZWdpb24icyBoYXZlIDIgZ2VuZXJpYyBhdHRyaWJ1dGVzICJz aXplIiwgYW5kICJtYXBwaW5nInMgd2hlcmU6DQogICAgLSBzaXplOiB0aGUgQkxLIGFjY2Vzc2li bGUgY2FwYWNpdHkgb3IgdGhlIHNwYW4gb2YgdGhlDQogICAgICBzeXN0ZW0gcGh5c2ljYWwgYWRk cmVzcyByYW5nZSBpbiB0aGUgY2FzZSBvZiBQTUVNLg0KICAgIA0KICAgIC0gbWFwcGluZ046IGEg dHVwbGUgZGVzY3JpYmluZyBhIGRpbW0ncyBjb250cmlidXRpb24gdG8gdGhlIHJlZ2lvbidzDQog ICAgICBjYXBhY2l0eSBpbiB0aGUgZm9ybWF0ICg8bm1lbVg+LDxkcGE+LDxzaXplPikuICBGb3Ig YSBQTUVNLXJlZ2lvbg0KICAgICAgdGhlcmUgd2lsbCBiZSBhdCBsZWFzdCBvbmUgbWFwcGluZyBw ZXIgZGltbSBpbiB0aGUgaW50ZXJsZWF2ZSBzZXQuICBGb3INCiAgICAgIGEgQkxLLXJlZ2lvbiB0 aGVyZSBpcyBvbmx5ICJtYXBwaW5nMCIgbGlzdGluZyB0aGUgc3RhcnRpbmcgRFBBIG9mIHRoZQ0K ICAgICAgQkxLLXJlZ2lvbiBhbmQgdGhlIGF2YWlsYWJsZSBEUEEgY2FwYWNpdHkgb2YgdGhhdCBz cGFjZSAobWF0Y2hlcyAic2l6ZSINCiAgICAgIGFib3ZlKS4NCiAgICANCiAgICBUaGUgbWF4IG51 bWJlciBvZiBtYXBwaW5ncyBwZXIgInJlZ2lvbiIgaXMgaGFyZCBjb2RlZCBwZXIgdGhlDQogICAg Y29uc3RyYWludHMgb2Ygc3lzZnMgYXR0cmlidXRlIGdyb3Vwcy4gIFRoYXQgc2FpZCB0aGUgbnVt YmVyIG9mIG1hcHBpbmdzDQogICAgcGVyIHJlZ2lvbiBzaG91bGQgbmV2ZXIgZXhjZWVkIHRoZSBt YXhpbXVtIG51bWJlciBvZiBwb3NzaWJsZSBkaW1tcyBpbg0KICAgIHRoZSBzeXN0ZW0uICBJZiB0 aGUgY3VycmVudCBudW1iZXIgdHVybnMgb3V0IHRvIG5vdCBiZSBlbm91Z2ggdGhlbiB0aGUNCiAg ICAibWFwcGluZ3MiIGF0dHJpYnV0ZSBjbGFyaWZpZXMgaG93IG1hbnkgdGhlcmUgYXJlIHN1cHBv c2VkIHRvIGJlLiAiMzINCiAgICBzaG91bGQgYmUgZW5vdWdoIGZvciBhbnlib2R5Li4uIi4NCiAg ICANCiAgICBDYzogTmVpbCBCcm93biA8bmVpbGJAc3VzZS5kZT4NCiAgICBDYzogPGxpbnV4LWFj cGlAdmdlci5rZXJuZWwub3JnPg0KICAgIENjOiBHcmVnIEtIIDxncmVna2hAbGludXhmb3VuZGF0 aW9uLm9yZz4NCiAgICBDYzogUm9iZXJ0IE1vb3JlIDxyb2JlcnQubW9vcmVAaW50ZWwuY29tPg0K ICAgIENjOiBSYWZhZWwgSi4gV3lzb2NraSA8cmFmYWVsLmoud3lzb2NraUBpbnRlbC5jb20+DQog ICAgQWNrZWQtYnk6IENocmlzdG9waCBIZWxsd2lnIDxoY2hAbHN0LmRlPg0KICAgIEFja2VkLWJ5 OiBSYWZhZWwgSi4gV3lzb2NraSA8cmFmYWVsLmoud3lzb2NraUBpbnRlbC5jb20+DQogICAgVGVz dGVkLWJ5OiBUb3NoaSBLYW5pIDx0b3NoaS5rYW5pQGhwLmNvbT4NCiAgICBTaWduZWQtb2ZmLWJ5 OiBEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxpYW1zQGludGVsLmNvbT4NCg0KY29tbWl0IDNkODgw MDJlNGE3YmQ0MGYzNTU1NTAyODRjNmNkMTQwZTZmZTI5ZGMNCkF1dGhvcjogRGFuIFdpbGxpYW1z IDxkYW4uai53aWxsaWFtc0BpbnRlbC5jb20+DQpEYXRlOiAgIFN1biBNYXkgMzEgMTU6MDI6MTEg MjAxNSAtMDQwMA0KDQogICAgbGlibnZkaW1tOiBzdXBwb3J0IGZvciBsZWdhY3kgKG5vbi1hbGlh c2luZykgbnZkaW1tcw0KICAgIA0KICAgIFRoZSBsaWJudmRpbW0gcmVnaW9uIGRyaXZlciBpcyBh biBpbnRlcm1lZGlhcnkgZHJpdmVyIHRoYXQgdHJhbnNsYXRlcw0KICAgIG5vbi12b2xhdGlsZSAi cmVnaW9uInMgaW50byAibmFtZXNwYWNlIiBzdWItZGV2aWNlcyB0aGF0IGFyZSBzdXJmYWNlZCBi eQ0KICAgIHBlcnNpc3RlbnQgbWVtb3J5IGJsb2NrLWRldmljZSBkcml2ZXJzIChQTUVNIGFuZCBC TEspLg0KICAgIA0KICAgIEFDUEkgNiBpbnRyb2R1Y2VzIHRoZSBjb25jZXB0IHRoYXQgYSBnaXZl biBudmRpbW0gbWF5IHNpbXVsdGFuZW91c2x5DQogICAgb2ZmZXIgbXVsdGlwbGUgYWNjZXNzIG1v ZGVzIHRvIGl0cyBtZWRpYSB0aHJvdWdoIGRpcmVjdCBQTUVNIGxvYWQvc3RvcmUNCiAgICBhY2Nl c3MsIG9yIHdpbmRvd2VkIEJMSyBtb2RlLiAgRXhpc3RpbmcgbnZkaW1tcyBtb3N0bHkgaW1wbGVt ZW50IGEgUE1FTQ0KICAgIGludGVyZmFjZSwgc29tZSBvZmZlciBhIEJMSy1saWtlIG1vZGUsIGJ1 dCBuZXZlciBib3RoIGFzIEFDUEkgNiBkZWZpbmVzLg0KICAgIElmIGFuIG52ZGltbSBpcyBzaW5n bGUgaW50ZXJmYWNlZCwgdGhlbiB0aGVyZSBpcyBubyBuZWVkIGZvciBkaW1tDQogICAgbWV0YWRh dGEgbGFiZWxzLiAgRm9yIHRoZXNlIGRldmljZXMgd2UgY2FuIHRha2UgdGhlIHJlZ2lvbiBib3Vu ZGFyaWVzDQogICAgZGlyZWN0bHkgdG8gY3JlYXRlIGEgY2hpbGQgbmFtZXNwYWNlIGRldmljZSAo bmRfbmFtZXNwYWNlX2lvKS4NCiAgICANCiAgICBBY2tlZC1ieTogQ2hyaXN0b3BoIEhlbGx3aWcg PGhjaEBsc3QuZGU+DQogICAgVGVzdGVkLWJ5OiBUb3NoaSBLYW5pIDx0b3NoaS5rYW5pQGhwLmNv bT4NCiAgICBTaWduZWQtb2ZmLWJ5OiBEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxpYW1zQGludGVs LmNvbT4NCg0KY29tbWl0IDE4ZGEyYzllZTQxYTAzNmJmNDcwZGJhZDczYzE4YTgxNTcyNWQzNmUN CkF1dGhvcjogRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRlbC5jb20+DQpEYXRlOiAg IFR1ZSBKdW4gOSAxNDoxMzozNyAyMDE1IC0wNDAwDQoNCiAgICBsaWJudmRpbW0sIHBtZW06IG1v dmUgcG1lbSB0byBkcml2ZXJzL252ZGltbS8NCiAgICANCiAgICBQcmVwYXJlIHRoZSBwbWVtIGRy aXZlciB0byBjb25zdW1lIFBNRU0gbmFtZXNwYWNlcyBlbWl0dGVkIGJ5IHJlZ2lvbnMgb2YNCiAg ICBhbiBudmRpbW1fYnVzIGluc3RhbmNlLiAgTm8gZnVuY3Rpb25hbCBjaGFuZ2UuDQogICAgDQog ICAgQWNrZWQtYnk6IENocmlzdG9waCBIZWxsd2lnIDxoY2hAbHN0LmRlPg0KICAgIFRlc3RlZC1i eTogVG9zaGkgS2FuaSA8dG9zaGkua2FuaUBocC5jb20+DQogICAgU2lnbmVkLW9mZi1ieTogRGFu IFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRlbC5jb20+DQoNCmNvbW1pdCA5ZjUzZjlmYTRh ZDFkOGJkZGQ0ZDE0MzU5Y2RhYmM1MzFhZWRmZmU4DQpBdXRob3I6IERhbiBXaWxsaWFtcyA8ZGFu Lmoud2lsbGlhbXNAaW50ZWwuY29tPg0KRGF0ZTogICBUdWUgSnVuIDkgMTU6MzM6NDUgMjAxNSAt MDQwMA0KDQogICAgbGlibnZkaW1tLCBwbWVtOiBhZGQgbGlibnZkaW1tIHN1cHBvcnQgdG8gdGhl IHBtZW0gZHJpdmVyDQogICAgDQogICAgbmRfcG1lbSBhdHRhY2hlcyB0byBwZXJzaXN0ZW50IG1l bW9yeSByZWdpb25zIGFuZCBuYW1lc3BhY2VzIGVtaXR0ZWQgYnkNCiAgICB0aGUgbGlibnZkaW1t IHN1YnN5c3RlbSwgYW5kLCBzYW1lIGFzIHRoZSBvcmlnaW5hbCBwbWVtIGRyaXZlciwgcHJlc2Vu dHMNCiAgICB0aGUgc3lzdGVtLXBoeXNpY2FsLWFkZHJlc3MgcmFuZ2UgYXMgYSBibG9jayBkZXZp Y2UuDQogICAgDQogICAgVGhlIGV4aXN0aW5nIGU4MjAtdHlwZS0xMiB0byBwbWVtIHNldHVwIGlz IGNvbnZlcnRlZCB0byBhbiBudmRpbW1fYnVzDQogICAgdGhhdCBlbWl0cyBhbiBuZF9uYW1lc3Bh Y2VfaW8gZGV2aWNlLg0KICAgIA0KICAgIE5vdGUgdGhhdCB0aGUgWCBpbiAncG1lbVgnIGlzIG5v dyBkZXJpdmVkIGZyb20gdGhlIHBhcmVudCByZWdpb24uICBUaGlzDQogICAgcHJvdmlkZXMgc29t ZSBzdGFiaWxpdHkgdG8gdGhlIHBtZW0gZGV2aWNlcyBuYW1lcyBmcm9tIGJvb3QtdG8tYm9vdC4N CiAgICBUaGUgbWlub3IgbnVtYmVycyBhcmUgYWxzbyBtb3JlIHByZWRpY3RhYmxlIGJ5IHBhc3Np bmcgMCB0bw0KICAgIGFsbG9jX2Rpc2soKS4NCiAgICANCiAgICBDYzogQW5keSBMdXRvbWlyc2tp IDxsdXRvQGFtYWNhcGl0YWwubmV0Pg0KICAgIENjOiBCb2F6IEhhcnJvc2ggPGJvYXpAcGxleGlz dG9yLmNvbT4NCiAgICBDYzogSC4gUGV0ZXIgQW52aW4gPGhwYUB6eXRvci5jb20+DQogICAgQ2M6 IEplbnMgQXhib2UgPGF4Ym9lQGZiLmNvbT4NCiAgICBDYzogSW5nbyBNb2xuYXIgPG1pbmdvQGtl cm5lbC5vcmc+DQogICAgQ2M6IENocmlzdG9waCBIZWxsd2lnIDxoY2hAbHN0LmRlPg0KICAgIFNp Z25lZC1vZmYtYnk6IFJvc3MgWndpc2xlciA8cm9zcy56d2lzbGVyQGxpbnV4LmludGVsLmNvbT4N CiAgICBBY2tlZC1ieTogQ2hyaXN0b3BoIEhlbGx3aWcgPGhjaEBsc3QuZGU+DQogICAgVGVzdGVk LWJ5OiBUb3NoaSBLYW5pIDx0b3NoaS5rYW5pQGhwLmNvbT4NCiAgICBTaWduZWQtb2ZmLWJ5OiBE YW4gV2lsbGlhbXMgPGRhbi5qLndpbGxpYW1zQGludGVsLmNvbT4NCg0KY29tbWl0IGVhZjk2MTUz NmUxNjIyYWQyMTI0N2FjOGQ0NGFjZDQ4YmE2NTU2NmUNCkF1dGhvcjogRGFuIFdpbGxpYW1zIDxk YW4uai53aWxsaWFtc0BpbnRlbC5jb20+DQpEYXRlOiAgIEZyaSBNYXkgMSAxMzoxMToyNyAyMDE1 IC0wNDAwDQoNCiAgICBsaWJudmRpbW0sIG5maXQ6IGFkZCBpbnRlcmxlYXZlLXNldCBzdGF0ZS10 cmFja2luZyBpbmZyYXN0cnVjdHVyZQ0KICAgIA0KICAgIE9uIHBsYXRmb3JtcyB0aGF0IGhhdmUg ZmlybXdhcmUgc3VwcG9ydCBmb3IgcmVhZGluZy93cml0aW5nIHBlci1kaW1tDQogICAgbGFiZWwg c3BhY2UsIGEgcG9ydGlvbiBvZiB0aGUgZGltbSBtYXkgYmUgYWNjZXNzaWJsZSB2aWEgYW4gaW50 ZXJsZWF2ZQ0KICAgIHNldCBQTUVNIG1hcHBpbmcgaW4gYWRkaXRpb24gdG8gdGhlIGRpbW0ncyBC TEsgKGJsb2NrLWRhdGEtd2luZG93DQogICAgYXBlcnR1cmUocykpIGludGVyZmFjZS4gIEEgbGFi ZWwsIHN0b3JlZCBpbiBhICJjb25maWd1cmF0aW9uIGRhdGENCiAgICByZWdpb24iIG9uIHRoZSBk aW1tLCBkaXNhbWJpZ3VhdGVzIHdoaWNoIGRpbW0gYWRkcmVzc2VzIGFyZSBhY2Nlc3NlZA0KICAg IHRocm91Z2ggd2hpY2ggZXhjbHVzaXZlIGludGVyZmFjZS4NCiAgICANCiAgICBBZGQgaW5mcmFz dHJ1Y3R1cmUgdGhhdCBhbGxvd3MgdGhlIGtlcm5lbCB0byBibG9jayBtb2RpZmljYXRpb25zIHRv IGENCiAgICBsYWJlbCBpbiB0aGUgc2V0IHdoaWxlIGFueSBtZW1iZXIgZGltbSBpcyBhY3RpdmUu ICBOb3RlIHRoYXQgdGhpcyBpcw0KICAgIG1lYW50IG9ubHkgZm9yIGVuZm9yY2luZyAibm8gbW9k aWZpY2F0aW9ucyBvZiBhY3RpdmUgbGFiZWxzIiB2aWEgdGhlDQogICAgY29hcnNlIGlvY3RsIGNv bW1hbmQuICBBZGRpbmcvZGVsZXRpbmcgbmFtZXNwYWNlcyBmcm9tIGFuIGFjdGl2ZQ0KICAgIGlu dGVybGVhdmUgc2V0IGlzIGFsd2F5cyBwb3NzaWJsZSB2aWEgc3lzZnMuDQogICAgDQogICAgQW5v dGhlciBhc3BlY3Qgb2YgdHJhY2tpbmcgaW50ZXJsZWF2ZSBzZXRzIGlzIHRyYWNraW5nIHRoZWly IGludGVncml0eQ0KICAgIHdoZW4gRElNTXMgaW4gYSBzZXQgYXJlIHBoeXNpY2FsbHkgcmUtb3Jk ZXJlZC4gIEZvciB0aGlzIHB1cnBvc2Ugd2UNCiAgICBnZW5lcmF0ZSBhbiAiaW50ZXJsZWF2ZS1z ZXQgY29va2llIiB0aGF0IGNhbiBiZSByZWNvcmRlZCBpbiBhIGxhYmVsIGFuZA0KICAgIHZhbGlk YXRlZCBhZ2FpbnN0IHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uICBJdCBpcyB0aGUgYnVzIHBy b3ZpZGVyDQogICAgaW1wbGVtZW50YXRpb24ncyByZXNwb25zaWJpbGl0eSB0byBjYWxjdWxhdGUg dGhlIGludGVybGVhdmUgc2V0IGNvb2tpZQ0KICAgIGFuZCBhdHRhY2ggaXQgdG8gYSBnaXZlbiBy ZWdpb24uDQogICAgDQogICAgQ2M6IE5laWwgQnJvd24gPG5laWxiQHN1c2UuZGU+DQogICAgQ2M6 IDxsaW51eC1hY3BpQHZnZXIua2VybmVsLm9yZz4NCiAgICBDYzogR3JlZyBLSCA8Z3JlZ2toQGxp bnV4Zm91bmRhdGlvbi5vcmc+DQogICAgQ2M6IFJvYmVydCBNb29yZSA8cm9iZXJ0Lm1vb3JlQGlu dGVsLmNvbT4NCiAgICBDYzogUmFmYWVsIEouIFd5c29ja2kgPHJhZmFlbC5qLnd5c29ja2lAaW50 ZWwuY29tPg0KICAgIEFja2VkLWJ5OiBDaHJpc3RvcGggSGVsbHdpZyA8aGNoQGxzdC5kZT4NCiAg ICBBY2tlZC1ieTogUmFmYWVsIEouIFd5c29ja2kgPHJhZmFlbC5qLnd5c29ja2lAaW50ZWwuY29t Pg0KICAgIFNpZ25lZC1vZmYtYnk6IERhbiBXaWxsaWFtcyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwu Y29tPg0KDQpjb21taXQgNGE4MjZjODNkYjRlZGMwNDBkYTNhNjZkYmVmZDUzZjBjZmNmNDU3ZA0K QXV0aG9yOiBEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxpYW1zQGludGVsLmNvbT4NCkRhdGU6ICAg VHVlIEp1biA5IDE2OjA5OjM2IDIwMTUgLTA0MDANCg0KICAgIGxpYm52ZGltbTogbmFtZXNwYWNl IGluZGljZXM6IHJlYWQgYW5kIHZhbGlkYXRlDQogICAgDQogICAgVGhpcyBvbiBtZWRpYSBsYWJl bCBmb3JtYXQgWzFdIGNvbnNpc3RzIG9mIHR3byBpbmRleCBibG9ja3MgZm9sbG93ZWQgYnkNCiAg ICBhbiBhcnJheSBvZiBsYWJlbHMuICBOb25lIG9mIHRoZXNlIHN0cnVjdHVyZXMgYXJlIGV2ZXIg dXBkYXRlZCBpbiBwbGFjZS4NCiAgICBBIHNlcXVlbmNlIG51bWJlciB0cmFja3MgdGhlIGN1cnJl bnQgYWN0aXZlIGluZGV4IGFuZCB0aGUgbmV4dCBvbmUgdG8NCiAgICB3cml0ZSwgd2hpbGUgbGFi ZWxzIGFyZSB3cml0dGVuIHRvIGZyZWUgc2xvdHMuDQogICAgDQogICAgICAgICstLS0tLS0tLS0t LS0rDQogICAgICAgIHwgICAgICAgICAgICB8DQogICAgICAgIHwgIG5zaW5kZXgwICB8DQogICAg ICAgIHwgICAgICAgICAgICB8DQogICAgICAgICstLS0tLS0tLS0tLS0rDQogICAgICAgIHwgICAg ICAgICAgICB8DQogICAgICAgIHwgIG5zaW5kZXgxICB8DQogICAgICAgIHwgICAgICAgICAgICB8 DQogICAgICAgICstLS0tLS0tLS0tLS0rDQogICAgICAgIHwgICBsYWJlbDAgICB8DQogICAgICAg ICstLS0tLS0tLS0tLS0rDQogICAgICAgIHwgICBsYWJlbDEgICB8DQogICAgICAgICstLS0tLS0t LS0tLS0rDQogICAgICAgIHwgICAgICAgICAgICB8DQogICAgICAgICAuLi4ubnNsb3QuLi4NCiAg ICAgICAgfCAgICAgICAgICAgIHwNCiAgICAgICAgKy0tLS0tLS0tLS0tLSsNCiAgICAgICAgfCAg IGxhYmVsTiAgIHwNCiAgICAgICAgKy0tLS0tLS0tLS0tLSsNCiAgICANCiAgICBBZnRlciByZWFk aW5nIHZhbGlkIGxhYmVscywgc3RvcmUgdGhlIGRwYSByYW5nZXMgdGhleSBjbGFpbSBpbnRvDQog ICAgcGVyLWRpbW0gcmVzb3VyY2UgdHJlZXMuDQogICAgDQogICAgWzFdOiBodHRwOi8vcG1lbS5p by9kb2N1bWVudHMvTlZESU1NX05hbWVzcGFjZV9TcGVjLnBkZg0KICAgIA0KICAgIENjOiBOZWls IEJyb3duIDxuZWlsYkBzdXNlLmRlPg0KICAgIEFja2VkLWJ5OiBDaHJpc3RvcGggSGVsbHdpZyA8 aGNoQGxzdC5kZT4NCiAgICBTaWduZWQtb2ZmLWJ5OiBEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxp YW1zQGludGVsLmNvbT4NCg0KY29tbWl0IGJmOWJjY2MxNGMwNWRhZThjYWJhMjlkZjYxODdjNzMx NzEwZjUzODANCkF1dGhvcjogRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRlbC5jb20+ DQpEYXRlOiAgIFdlZCBKdW4gMTcgMTc6MTQ6NDYgMjAxNSAtMDQwMA0KDQogICAgbGlibnZkaW1t OiBwbWVtIGxhYmVsIHNldHMgYW5kIG5hbWVzcGFjZSBpbnN0YW50aWF0aW9uLg0KICAgIA0KICAg IEEgY29tcGxldGUgbGFiZWwgc2V0IGlzIGEgUE1FTS1sYWJlbCBwZXItZGltbSBwZXItaW50ZXJs ZWF2ZS1zZXQgd2hlcmUNCiAgICBhbGwgdGhlIFVVSURzIG1hdGNoIGFuZCB0aGUgaW50ZXJsZWF2 ZSBzZXQgY29va2llIG1hdGNoZXMgdGhlIGhvc3RpbmcNCiAgICBpbnRlcmxlYXZlIHNldC4NCiAg ICANCiAgICBQcmVzZW50IHN5c2ZzIGF0dHJpYnV0ZXMgZm9yIG1hbmlwdWxhdGlvbiBvZiBhIFBN RU0tbmFtZXNwYWNlJ3MNCiAgICAnYWx0X25hbWUnLCAndXVpZCcsIGFuZCAnc2l6ZScgYXR0cmli dXRlcy4gIEEgbGF0ZXIgcGF0Y2ggd2lsbCBtYWtlDQogICAgdGhlc2Ugc2V0dGluZ3MgcGVyc2lz dGVudCBieSB3cml0aW5nIGJhY2sgdGhlIGxhYmVsLg0KICAgIA0KICAgIE5vdGUgdGhhdCBQTUVN IGFsbG9jYXRpb25zIGdyb3cgZm9yd2FyZHMgZnJvbSB0aGUgc3RhcnQgb2YgYW4gaW50ZXJsZWF2 ZQ0KICAgIHNldCAobG93ZXN0IGRpbW0tcGh5c2ljYWwtYWRkcmVzcyAoRFBBKSkuICBCTEstbmFt ZXNwYWNlcyB0aGF0IGFsaWFzDQogICAgd2l0aCBhIFBNRU0gaW50ZXJsZWF2ZSBzZXQgd2lsbCBn cm93IGFsbG9jYXRpb25zIGJhY2t3YXJkIGZyb20gdGhlDQogICAgaGlnaGVzdCBEUEEuDQogICAg DQogICAgQ2M6IEdyZWcgS0ggPGdyZWdraEBsaW51eGZvdW5kYXRpb24ub3JnPg0KICAgIENjOiBO ZWlsIEJyb3duIDxuZWlsYkBzdXNlLmRlPg0KICAgIEFja2VkLWJ5OiBDaHJpc3RvcGggSGVsbHdp ZyA8aGNoQGxzdC5kZT4NCiAgICBTaWduZWQtb2ZmLWJ5OiBEYW4gV2lsbGlhbXMgPGRhbi5qLndp bGxpYW1zQGludGVsLmNvbT4NCg0KY29tbWl0IDFiNDBlMDlhMTIzMmRlNTM3YjE5M2ZhMWI2YjNl ZjE2ZDNhMWUzOTcNCkF1dGhvcjogRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRlbC5j b20+DQpEYXRlOiAgIEZyaSBNYXkgMSAxMzozNDowMSAyMDE1IC0wNDAwDQoNCiAgICBsaWJudmRp bW06IGJsayBsYWJlbHMgYW5kIG5hbWVzcGFjZSBpbnN0YW50aWF0aW9uDQogICAgDQogICAgQSBi bGsgbGFiZWwgc2V0IGRlc2NyaWJlcyBhIG5hbWVzcGFjZSBjb21wcmlzZWQgb2Ygb25lIG9yIG1v cmUNCiAgICBkaXNjb250aWd1b3VzIGRwYSByYW5nZXMgb24gYSBzaW5nbGUgZGltbS4gIFRoZXkg bWF5IGFsaWFzIHdpdGggb25lIG9yDQogICAgbW9yZSBwbWVtIGludGVybGVhdmUgc2V0cyB0aGF0 IGluY2x1ZGUgdGhlIGdpdmVuIGRpbW0uDQogICAgDQogICAgVGhpcyBpcyB0aGUgcnVudGltZS92 b2xhdGlsZSBjb25maWd1cmF0aW9uIGluZnJhc3RydWN0dXJlIGZvciBzeXNmcw0KICAgIG1hbmlw dWxhdGlvbiBvZiAnYWx0X25hbWUnLCAndXVpZCcsICdzaXplJywgYW5kICdzZWN0b3Jfc2l6ZScu ICBBIGxhdGVyDQogICAgcGF0Y2ggd2lsbCBtYWtlIHRoZXNlIHNldHRpbmdzIHBlcnNpc3RlbnQg Ynkgd3JpdGluZyBiYWNrIHRoZSBsYWJlbChzKS4NCiAgICANCiAgICBVbmxpa2UgcG1lbSBuYW1l c3BhY2VzLCBtdWx0aXBsZSBibGsgbmFtZXNwYWNlcyBjYW4gYmUgY3JlYXRlZCBwZXINCiAgICBy ZWdpb24uICBPbmNlIGEgYmxrIG5hbWVzcGFjZSBoYXMgYmVlbiBjcmVhdGVkIGEgbmV3IHNlZWQg ZGV2aWNlDQogICAgKHVuY29uZmlndXJlZCBjaGlsZCBvZiBhIHBhcmVudCBibGsgcmVnaW9uKSBp cyBpbnN0YW50aWF0ZWQuICBBcyBsb25nIGFzDQogICAgYSByZWdpb24gaGFzICdhdmFpbGFibGVf c2l6ZScgIT0gMCBuZXcgY2hpbGQgbmFtZXNwYWNlcyBtYXkgYmUgY3JlYXRlZC4NCiAgICANCiAg ICBDYzogR3JlZyBLSCA8Z3JlZ2toQGxpbnV4Zm91bmRhdGlvbi5vcmc+DQogICAgQ2M6IE5laWwg QnJvd24gPG5laWxiQHN1c2UuZGU+DQogICAgQWNrZWQtYnk6IENocmlzdG9waCBIZWxsd2lnIDxo Y2hAbHN0LmRlPg0KICAgIFNpZ25lZC1vZmYtYnk6IERhbiBXaWxsaWFtcyA8ZGFuLmoud2lsbGlh bXNAaW50ZWwuY29tPg0KDQpjb21taXQgZjUyNGJmMjcxYTVjZjEyYTQ0MjUzMTk0YWJjZjhiNjY4 OGZmNWI5ZA0KQXV0aG9yOiBEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxpYW1zQGludGVsLmNvbT4N CkRhdGU6ICAgU2F0IE1heSAzMCAxMjozNjowMiAyMDE1IC0wNDAwDQoNCiAgICBsaWJudmRpbW06 IHdyaXRlIHBtZW0gbGFiZWwgc2V0DQogICAgDQogICAgQWZ0ZXIgJ3V1aWQnLCAnc2l6ZScsIGFu ZCBvcHRpb25hbGx5ICdhbHRfbmFtZScgaGF2ZSBiZWVuIHNldCB0byB2YWxpZA0KICAgIHZhbHVl cyB0aGUgbGFiZWxzIG9uIHRoZSBkaW1tcyBjYW4gYmUgdXBkYXRlZC4NCiAgICANCiAgICBXcml0 ZSBwcm9jZWR1cmUgaXM6DQogICAgMS8gQWxsb2NhdGUgYW5kIHdyaXRlIG5ldyBsYWJlbHMgaW4g dGhlICJuZXh0IiBpbmRleA0KICAgIDIvIEZyZWUgdGhlIG9sZCBsYWJlbHMgaW4gdGhlIHdvcmtp bmcgY29weQ0KICAgIDMvIFdyaXRlIHRoZSBiaXRtYXAgYW5kIHRoZSBsYWJlbCBzcGFjZSBvbiB0 aGUgZGltbQ0KICAgIDQvIFdyaXRlIHRoZSBpbmRleCB0byBtYWtlIHRoZSB1cGRhdGUgdmFsaWQN CiAgICANCiAgICBMYWJlbCByYW5nZXMgZGlyZWN0bHkgbWlycm9yIHRoZSBkcGEgcmVzb3VyY2Ug dmFsdWVzIGZvciB0aGUgZ2l2ZW4NCiAgICBsYWJlbF9pZCBvZiB0aGUgbmFtZXNwYWNlLg0KICAg IA0KICAgIENjOiBHcmVnIEtIIDxncmVna2hAbGludXhmb3VuZGF0aW9uLm9yZz4NCiAgICBDYzog TmVpbCBCcm93biA8bmVpbGJAc3VzZS5kZT4NCiAgICBBY2tlZC1ieTogQ2hyaXN0b3BoIEhlbGx3 aWcgPGhjaEBsc3QuZGU+DQogICAgU2lnbmVkLW9mZi1ieTogRGFuIFdpbGxpYW1zIDxkYW4uai53 aWxsaWFtc0BpbnRlbC5jb20+DQoNCmNvbW1pdCAwYmExYzYzNDg5MmIzNTkwNzc5ODAzYTcwMWJj YjgyZThjMzJjYzdhDQpBdXRob3I6IERhbiBXaWxsaWFtcyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwu Y29tPg0KRGF0ZTogICBTYXQgTWF5IDMwIDEyOjM1OjM2IDIwMTUgLTA0MDANCg0KICAgIGxpYm52 ZGltbTogd3JpdGUgYmxrIGxhYmVsIHNldA0KICAgIA0KICAgIEFmdGVyICd1dWlkJywgJ3NpemUn LCAnc2VjdG9yX3NpemUnLCBhbmQgb3B0aW9uYWxseSAnYWx0X25hbWUnIGhhdmUgYmVlbg0KICAg IHNldCB0byB2YWxpZCB2YWx1ZXMgdGhlIGxhYmVscyBvbiB0aGUgZGltbSBjYW4gYmUgdXBkYXRl ZC4gIFRoZQ0KICAgIGRpZmZlcmVuY2Ugd2l0aCB0aGUgcG1lbSBjYXNlIGlzIHRoYXQgYmxrIG5h bWVzcGFjZXMgYXJlIGxpbWl0ZWQgdG8gb25lDQogICAgZGltbSBhbmQgY2FuIGNvdmVyIGRpc2Nv bnRpZ3VvdXMgcmFuZ2VzIGluIGRwYSBzcGFjZS4NCiAgICANCiAgICBBbHNvLCBhZnRlciBhbGxv Y2F0aW5nIGxhYmVsIHNsb3RzLCBpdCBpcyB1c2VmdWwgZm9yIHVzZXJzcGFjZSB0byBrbm93DQog ICAgaG93IG1hbnkgc2xvdHMgYXJlIGxlZnQuICBFeHBvcnQgdGhpcyBpbmZvcm1hdGlvbiBpbiBz eXNmcy4NCiAgICANCiAgICBDYzogR3JlZyBLSCA8Z3JlZ2toQGxpbnV4Zm91bmRhdGlvbi5vcmc+ DQogICAgQ2M6IE5laWwgQnJvd24gPG5laWxiQHN1c2UuZGU+DQogICAgQWNrZWQtYnk6IENocmlz dG9waCBIZWxsd2lnIDxoY2hAbHN0LmRlPg0KICAgIFNpZ25lZC1vZmYtYnk6IERhbiBXaWxsaWFt cyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tPg0KDQpjb21taXQgOGMyZjdlODY1OGRmMWQzYjdj YmZhNjI3MDY5NDFkMTRjNzE1ODIzYQ0KQXV0aG9yOiBEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxp YW1zQGludGVsLmNvbT4NCkRhdGU6ICAgVGh1IEp1biAyNSAwNDoyMDowNCAyMDE1IC0wNDAwDQoN CiAgICBsaWJudmRpbW06IGluZnJhc3RydWN0dXJlIGZvciBidHQgZGV2aWNlcw0KICAgIA0KICAg IE5WRElNTSBuYW1lc3BhY2VzLCBpbiBhZGRpdGlvbiB0byBhY2NlcHRpbmcgInN0cnVjdCBiaW8i IGJhc2VkIHJlcXVlc3RzLA0KICAgIGFsc28gaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBwZXJmb3Jt IGJ5dGUtYWxpZ25lZCBhY2Nlc3Nlcy4gIEJ5IGRlZmF1bHQNCiAgICBvbmx5IHRoZSBiaW8vYmxv Y2sgaW50ZXJmYWNlIGlzIHVzZWQuICBIb3dldmVyLCBpZiBhbm90aGVyIGRyaXZlciBjYW4NCiAg ICBtYWtlIGVmZmVjdGl2ZSB1c2Ugb2YgdGhlIGJ5dGUtYWxpZ25lZCBjYXBhYmlsaXR5IGl0IGNh biBjbGFpbSBuYW1lc3BhY2UNCiAgICBpbnRlcmZhY2UgYW5kIHVzZSB0aGUgYnl0ZS1hbGlnbmVk IC0+cndfYnl0ZXMoKSBpbnRlcmZhY2UuDQogICAgDQogICAgVGhlIEJUVCBkcml2ZXIgaXMgdGhl IGluaXRpYWwgZmlyc3QgY29uc3VtZXIgb2YgdGhpcyBtZWNoYW5pc20gdG8gYWxsb3cNCiAgICBh ZGRpbmcgYXRvbWljIHNlY3RvciB1cGRhdGUgc2VtYW50aWNzIHRvIGEgcG1lbSBvciBibGsgbmFt ZXNwYWNlLiAgVGhpcw0KICAgIHBhdGNoIGlzIHRoZSBzeXNmcyBpbmZyYXN0cnVjdHVyZSB0byBh bGxvdyBjb25maWd1cmluZyBhIEJUVCBpbnN0YW5jZQ0KICAgIGZvciBhIG5hbWVzcGFjZS4gIEVu YWJsaW5nIHRoYXQgQlRUIGFuZCBwZXJmb3JtaW5nIGkvbyBpcyBpbiBhDQogICAgc3Vic2VxdWVu dCBwYXRjaC4NCiAgICANCiAgICBDYzogR3JlZyBLSCA8Z3JlZ2toQGxpbnV4Zm91bmRhdGlvbi5v cmc+DQogICAgQ2M6IE5laWwgQnJvd24gPG5laWxiQHN1c2UuZGU+DQogICAgU2lnbmVkLW9mZi1i eTogRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRlbC5jb20+DQoNCmNvbW1pdCA1MjEy ZTExZmRlNGQ0MGZhNjI3NjY4YjRmMjIyMmQyMGRiNDg4ZjcxDQpBdXRob3I6IFZpc2hhbCBWZXJt YSA8dmlzaGFsLmwudmVybWFAaW50ZWwuY29tPg0KRGF0ZTogICBUaHUgSnVuIDI1IDA0OjIwOjMy IDIwMTUgLTA0MDANCg0KICAgIG5kX2J0dDogYXRvbWljIHNlY3RvciB1cGRhdGVzDQogICAgDQog ICAgQlRUIHN0YW5kcyBmb3IgQmxvY2sgVHJhbnNsYXRpb24gVGFibGUsIGFuZCBpcyBhIHdheSB0 byBwcm92aWRlIHBvd2VyDQogICAgZmFpbCBzZWN0b3IgYXRvbWljaXR5IHNlbWFudGljcyBmb3Ig YmxvY2sgZGV2aWNlcyB0aGF0IGhhdmUgdGhlIGFiaWxpdHkNCiAgICB0byBwZXJmb3JtIGJ5dGUg Z3JhbnVsYXJpdHkgSU8uIEl0IHJlbGllcyBvbiB0aGUgY2FwYWJpbGl0eSBvZiBsaWJudmRpbW0N CiAgICBuYW1lc3BhY2UgZGV2aWNlcyB0byBkbyBieXRlIGFsaWduZWQgSU8uDQogICAgDQogICAg VGhlIEJUVCB3b3JrcyBhcyBhIHN0YWNrZWQgYmxvY2tlZCBkZXZpY2UsIGFuZCByZXNlcnZlcyBh IGNodW5rIG9mIHNwYWNlDQogICAgZnJvbSB0aGUgYmFja2luZyBkZXZpY2UgZm9yIGl0cyBhY2Nv dW50aW5nIG1ldGFkYXRhLiBJdCBpcyBhIGJpby1iYXNlZA0KICAgIGRyaXZlciBiZWNhdXNlIGFs bCBJTyBpcyBkb25lIHN5bmNocm9ub3VzbHksIGFuZCB0aGVyZSBpcyBubyBxdWV1aW5nIG9yDQog ICAgYXN5bmNocm9ub3VzIGNvbXBsZXRpb25zIGF0IGVpdGhlciB0aGUgZGV2aWNlIG9yIHRoZSBk cml2ZXIgbGV2ZWwuDQogICAgDQogICAgVGhlIEJUVCB1c2VzICdsYW5lcycgdG8gaW5kZXggaW50 byB2YXJpb3VzICdvbi1kaXNrJyBkYXRhIHN0cnVjdHVyZXMsDQogICAgYW5kIGxhbmVzIGFsc28g YWN0IGFzIGEgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbSBpbiBjYXNlIHRoZXJlIGFyZSBtb3Jl DQogICAgQ1BVcyB0aGFuIGF2YWlsYWJsZSBsYW5lcy4gV2UgZGlkIGEgY29tcGFyaXNvbiBiZXR3 ZWVuIHR3byBsYW5lIGxvY2sNCiAgICBzdHJhdGVnaWVzIC0gZmlyc3Qgd2hlcmUgd2Uga2VwdCBh biBhdG9taWMgY291bnRlciBhcm91bmQgdGhhdCB0cmFja2VkDQogICAgd2hpY2ggd2FzIHRoZSBs YXN0IGxhbmUgdGhhdCB3YXMgdXNlZCwgYW5kICdvdXInIGxhbmUgd2FzIGRldGVybWluZWQgYnkN CiAgICBhdG9taWNhbGx5IGluY3JlbWVudGluZyB0aGF0LiBUaGF0IHdheSwgZm9yIHRoZSBucl9j cHVzID4gbnJfbGFuZXMgY2FzZSwNCiAgICB0aGVvcmV0aWNhbGx5LCBubyBDUFUgd291bGQgYmUg YmxvY2tlZCB3YWl0aW5nIGZvciBhIGxhbmUuIFRoZSBvdGhlcg0KICAgIHN0cmF0ZWd5IHdhcyB0 byB1c2UgdGhlIGNwdSBudW1iZXIgd2UncmUgc2NoZWR1bGVkIG9uIHRvIGFuZCBoYXNoIGl0IHRv DQogICAgYSBsYW5lIG51bWJlci4gVGhlb3JldGljYWxseSwgdGhpcyBjb3VsZCBibG9jayBhbiBJ TyB0aGF0IGNvdWxkJ3ZlDQogICAgb3RoZXJ3aXNlIHJ1biB1c2luZyBhIGRpZmZlcmVudCwgZnJl ZSBsYW5lLiBCdXQgc29tZSBmaW8gd29ya2xvYWRzDQogICAgc2hvd2VkIHRoYXQgdGhlIGRpcmVj dCBjcHUgLT4gbGFuZSBoYXNoIHBlcmZvcm1lZCBmYXN0ZXIgdGhhbiB0cmFja2luZw0KICAgICds YXN0IGxhbmUnIC0gbXkgcmVhc29uaW5nIGlzIHRoZSBjYWNoZSB0aHJhc2ggY2F1c2VkIGJ5IG1v dmluZyB0aGUNCiAgICBhdG9taWMgdmFyaWFibGUgbWFkZSB0aGF0IGFwcHJvYWNoIHNsb3dlciB0 aGFuIHNpbXBseSB3YWl0aW5nIG91dCB0aGUNCiAgICBpbi1wcm9ncmVzcyBJTy4gVGhpcyBzdXBw b3J0cyB0aGUgY29uY2x1c2lvbiB0aGF0IHRoZSBkcml2ZXIgY2FuIGJlIGENCiAgICB2ZXJ5IHNp bXBsZSBiaW8tYmFzZWQgb25lIHRoYXQgZG9lcyBzeW5jaHJvbm91cyBJT3MgaW5zdGVhZCBvZiBx dWV1aW5nLg0KICAgIA0KICAgIENjOiBBbmR5IEx1dG9taXJza2kgPGx1dG9AYW1hY2FwaXRhbC5u ZXQ+DQogICAgQ2M6IEJvYXogSGFycm9zaCA8Ym9hekBwbGV4aXN0b3IuY29tPg0KICAgIENjOiBI LiBQZXRlciBBbnZpbiA8aHBhQHp5dG9yLmNvbT4NCiAgICBDYzogSmVucyBBeGJvZSA8YXhib2VA ZmIuY29tPg0KICAgIENjOiBJbmdvIE1vbG5hciA8bWluZ29Aa2VybmVsLm9yZz4NCiAgICBDYzog Q2hyaXN0b3BoIEhlbGx3aWcgPGhjaEBsc3QuZGU+DQogICAgQ2M6IE5laWwgQnJvd24gPG5laWxi QHN1c2UuZGU+DQogICAgQ2M6IEplZmYgTW95ZXIgPGptb3llckByZWRoYXQuY29tPg0KICAgIENj OiBEYXZlIENoaW5uZXIgPGRhdmlkQGZyb21vcmJpdC5jb20+DQogICAgQ2M6IEdyZWcgS0ggPGdy ZWdraEBsaW51eGZvdW5kYXRpb24ub3JnPg0KICAgIFtqbW95ZXI6IGZpeCBubWkgd2F0Y2hkb2cg dGltZW91dCBpbiBidHRfbWFwX2luaXRdDQogICAgW2ptb3llcjogbW92ZSBidHQgaW5pdGlhbGl6 YXRpb24gdG8gbW9kdWxlIGxvYWQgcGF0aF0NCiAgICBbam1veWVyOiBmaXggbWVtb3J5IGxlYWsg aW4gdGhlIGJ0dCBpbml0aWFsaXphdGlvbiBwYXRoXQ0KICAgIFtqbW95ZXI6IERvbid0IG92ZXJ3 cml0ZSBjb3JydXB0ZWQgYXJlbmFzXQ0KICAgIFNpZ25lZC1vZmYtYnk6IFZpc2hhbCBWZXJtYSA8 dmlzaGFsLmwudmVybWFAbGludXguaW50ZWwuY29tPg0KICAgIFNpZ25lZC1vZmYtYnk6IERhbiBX aWxsaWFtcyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tPg0KDQpjb21taXQgMDQ3ZmM4YTFmOWE2 MzMwZWFjYzgwMzc0ZGZmMDg3ZTIwZGMyMzA0Yg0KQXV0aG9yOiBSb3NzIFp3aXNsZXIgPHJvc3Mu endpc2xlckBsaW51eC5pbnRlbC5jb20+DQpEYXRlOiAgIFRodSBKdW4gMjUgMDQ6MjE6MDIgMjAx NSAtMDQwMA0KDQogICAgbGlibnZkaW1tLCBuZml0LCBuZF9ibGs6IGRyaXZlciBmb3IgQkxLLW1v ZGUgYWNjZXNzIHBlcnNpc3RlbnQgbWVtb3J5DQogICAgDQogICAgVGhlIGxpYm52ZGltbSBpbXBs ZW1lbnRhdGlvbiBoYW5kbGVzIGFsbG9jYXRpbmcgZGltbSBhZGRyZXNzIHNwYWNlIChEUEEpDQog ICAgYmV0d2VlbiBQTUVNIGFuZCBCTEsgbW9kZSBpbnRlcmZhY2VzLiAgQWZ0ZXIgRFBBIGhhcyBi ZWVuIGFsbG9jYXRlZCBmcm9tDQogICAgYSBCTEstcmVnaW9uIHRvIGEgQkxLLW5hbWVzcGFjZSB0 aGUgbmRfYmxrIGRyaXZlciBhdHRhY2hlcyB0byBoYW5kbGUgSS9PDQogICAgYXMgYSBzdHJ1Y3Qg YmlvIGJhc2VkIGJsb2NrIGRldmljZS4gVW5saWtlIFBNRU0sIEJMSyBpcyByZXF1aXJlZCB0bw0K ICAgIGhhbmRsZSBwbGF0Zm9ybSBzcGVjaWZpYyBkZXRhaWxzIGxpa2UgbW1pbyByZWdpc3RlciBm b3JtYXRzIGFuZCBtZW1vcnkNCiAgICBjb250cm9sbGVyIGludGVybGVhdmUuICBGb3IgdGhpcyBy ZWFzb24gdGhlIGxpYm52ZGltbSBnZW5lcmljIG5kX2Jsaw0KICAgIGRyaXZlciBjYWxscyBiYWNr IGludG8gdGhlIGJ1cyBwcm92aWRlciB0byBjYXJyeSBvdXQgdGhlIEkvTy4NCiAgICANCiAgICBU aGlzIGluaXRpYWwgaW1wbGVtZW50YXRpb24gaGFuZGxlcyB0aGUgQkxLIGludGVyZmFjZSBkZWZp bmVkIGJ5IHRoZQ0KICAgIEFDUEkgNiBORklUIFsxXSBhbmQgdGhlIE5WRElNTSBEU00gSW50ZXJm YWNlIEV4YW1wbGUgWzJdIGNvbXBvc2VkIGZyb20NCiAgICBEQ1IgKGRpbW0gY29udHJvbCByZWdp b24pLCBCRFcgKGJsb2NrIGRhdGEgd2luZG93KSwgSURUIChpbnRlcmxlYXZlDQogICAgZGVzY3Jp cHRvcikgTkZJVCBzdHJ1Y3R1cmVzIGFuZCB0aGUgaGFyZHdhcmUgcmVnaXN0ZXIgZm9ybWF0Lg0K ICAgIFsxXTogaHR0cDovL3d3dy51ZWZpLm9yZy9zaXRlcy9kZWZhdWx0L2ZpbGVzL3Jlc291cmNl cy9BQ1BJXzYuMC5wZGYNCiAgICBbMl06IGh0dHA6Ly9wbWVtLmlvL2RvY3VtZW50cy9OVkRJTU1f RFNNX0ludGVyZmFjZV9FeGFtcGxlLnBkZg0KICAgIA0KICAgIENjOiBBbmR5IEx1dG9taXJza2kg PGx1dG9AYW1hY2FwaXRhbC5uZXQ+DQogICAgQ2M6IEJvYXogSGFycm9zaCA8Ym9hekBwbGV4aXN0 b3IuY29tPg0KICAgIENjOiBILiBQZXRlciBBbnZpbiA8aHBhQHp5dG9yLmNvbT4NCiAgICBDYzog SmVucyBBeGJvZSA8YXhib2VAZmIuY29tPg0KICAgIENjOiBJbmdvIE1vbG5hciA8bWluZ29Aa2Vy bmVsLm9yZz4NCiAgICBDYzogQ2hyaXN0b3BoIEhlbGx3aWcgPGhjaEBsc3QuZGU+DQogICAgU2ln bmVkLW9mZi1ieTogUm9zcyBad2lzbGVyIDxyb3NzLnp3aXNsZXJAbGludXguaW50ZWwuY29tPg0K ICAgIEFja2VkLWJ5OiBSYWZhZWwgSi4gV3lzb2NraSA8cmFmYWVsLmoud3lzb2NraUBpbnRlbC5j b20+DQogICAgU2lnbmVkLW9mZi1ieTogRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRl bC5jb20+DQoNCmNvbW1pdCA2YmM3NTYxOTNmZjYxYmY1ZTdiM2NmZWRmYmIwODczYmY0MGY4MDU1 DQpBdXRob3I6IERhbiBXaWxsaWFtcyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tPg0KRGF0ZTog ICBXZWQgSnVuIDE3IDE3OjIzOjMyIDIwMTUgLTA0MDANCg0KICAgIHRvb2xzL3Rlc3RpbmcvbnZk aW1tOiBsaWJudmRpbW0gdW5pdCB0ZXN0IGluZnJhc3RydWN0dXJlDQogICAgDQogICAgJ2xpYm52 ZGltbScgaXMgdGhlIGZpcnN0IGRyaXZlciBzdWItc3lzdGVtIGluIHRoZSBrZXJuZWwgdG8gaW1w bGVtZW50DQogICAgbW9ja2luZyBmb3IgdW5pdCB0ZXN0IGNvdmVyYWdlLiAgVGhlIG5maXRfdGVz dCBtb2R1bGUgZ2V0cyBidWlsdCBhcyBhbg0KICAgIGV4dGVybmFsIG1vZHVsZSBhbmQgYXJyYW5n ZXMgZm9yIGV4dGVybmFsIG1vZHVsZSByZXBsYWNlbWVudHMgb2YgbmZpdCwNCiAgICBsaWJudmRp bW0sIG5kX3BtZW0sIGFuZCBuZF9ibGsuICBUaGVzZSByZXBsYWNlbWVudHMgdXNlIHRoZSBsaW5r ZXINCiAgICAtLXdyYXAgb3B0aW9uIHRvIHJlZGlyZWN0IGNhbGxzIHRvIGlvcmVtYXAoKSArIHJl cXVlc3RfbWVtX3JlZ2lvbigpIHRvDQogICAgY3VzdG9tIGRlZmluZWQgdW5pdCB0ZXN0IHJlc291 cmNlcy4gIFRoZSBlbmQgcmVzdWx0IGlzIGEgZnVsbHkNCiAgICBmdW5jdGlvbmFsIG52ZGltbV9i dXMsIGFzIGZhciBhcyB1c2Vyc3BhY2UgaXMgY29uY2VybmVkLCBidXQgd2l0aCB0aGUNCiAgICBj YXBhYmlsaXR5IHRvIHBlcmZvcm0gb3RoZXJ3aXNlIGRlc3RydWN0aXZlIHRlc3RzIG9uIGVtdWxh dGVkIHJlc291cmNlcy4NCiAgICANCiAgICBROiBXaHkgbm90IHVzZSBRRU1VIGZvciB0aGlzIGVt dWxhdGlvbj8NCiAgICBRRU1VIGlzIG5vdCBzdWl0YWJsZSBmb3IgdW5pdCB0ZXN0aW5nLiAgUUVN VSdzIHJvbGUgaXMgdG8gZmFpdGhmdWxseQ0KICAgIGVtdWxhdGUgdGhlIHBsYXRmb3JtLiAgQSB1 bml0IHRlc3QncyByb2xlIGlzIHRvIHVuZmFpdGhmdWxseSBpbXBsZW1lbnQNCiAgICB0aGUgcGxh dGZvcm0gd2l0aCB0aGUgZ29hbCBvZiB0cmlnZ2VyaW5nIGJ1Z3MgaW4gdGhlIGNvcm5lcnMgb2Yg dGhlDQogICAgc3ViLXN5c3RlbSBpbXBsZW1lbnRhdGlvbi4gIEFzIGJ1Z3MgYXJlIGRpc2NvdmVy ZWQgaW4gcGxhdGZvcm1zLCBvciB0aGUNCiAgICBzdWItc3lzdGVtIGl0c2VsZiwgdGhlIHVuaXQg dGVzdHMgYXJlIGV4dGVuZGVkIHRvIGJhY2tzdG9wIGEgZml4IHdpdGggYQ0KICAgIHJlcHJvZHVj ZXIgdW5pdCB0ZXN0Lg0KICAgIA0KICAgIEFub3RoZXIgcHJvYmxlbSB3aXRoIFFFTVUgaXMgdGhh dCBpdCB3b3VsZCByZXF1aXJlIGNvb3JkaW5hdGlvbiBvZiAzDQogICAgc29mdHdhcmUgcHJvamVj dHMgaW5zdGVhZCBvZiAyIChrZXJuZWwgKyBsaWJuZGN0bCBbMV0pIHRvIG1haW50YWluIGFuZA0K ICAgIGV4ZWN1dGUgdGhlIHRlc3RzLiAgVGhlIGNoYW5jZXMgZm9yIGJpdCByb3QgYW5kIHRoZSBk aWZmaWN1bHR5IG9mDQogICAgZ2V0dGluZyB0aGUgdGVzdHMgcnVubmluZyBnb2VzIHVwIG5vbi1s aW5lYXJseSB0aGUgbW9yZSBjb21wb25lbnRzDQogICAgaW52b2x2ZWQuDQogICAgDQogICAgDQog ICAgUTogV2h5IHN1Ym1pdCB0aGlzIHRvIHRoZSBrZXJuZWwgdHJlZSBpbnN0ZWFkIG9mIGV4dGVy bmFsIG1vZHVsZXMgaW4NCiAgICAgICBsaWJuZGN0bD8NCiAgICBTaW1wbGUsIHRvIGFsbGV2aWF0 ZSB0aGUgc2FtZSByaXNrIHRoYXQgb3V0LW9mLXRyZWUgZXh0ZXJuYWwgbW9kdWxlcw0KICAgIGZh Y2UuICBVcGRhdGVzIHRvIGRyaXZlcnMvbnZkaW1tLyBjYW4gYmUgaW1tZWRpYXRlbHkgZXZhbHVh dGVkIHRvIHNlZSBpZg0KICAgIHRoZXkgaGF2ZSBhbnkgaW1wYWN0IG9uIHRvb2xzL3Rlc3Rpbmcv bnZkaW1tLy4NCiAgICANCiAgICANCiAgICBROiBXaGF0IGFyZSB0aGUgbmVnYXRpdmUgaW1wbGlj YXRpb25zIG9mIG1lcmdpbmcgdGhpcz8NCiAgICBJdCBpcyBhIHVuaXF1ZSBtYWludGVuYW5jZSBi dXJkZW4gYmVjYXVzZSB0aGUgcHVycG9zZSBvZiBtb2NraW5nIGFuDQogICAgaW50ZXJmYWNlIHRv IGVuYWJsZSBhIHVuaXQgdGVzdCBpcyB0byBwdXJwb3NlZnVsbHkgc2hvcnQgY2lyY3VpdCB0aGUN CiAgICBzZW1hbnRpY3Mgb2YgYSByb3V0aW5lIHRvIGVuYWJsZSB0ZXN0aW5nLiAgRm9yIGV4YW1w bGUNCiAgICBfX3dyYXBfaW9yZW1hcF9jYWNoZSgpIGZha2VzIHRoZSBwbWVtIGRyaXZlciBpbnRv ICJpb3JlbWFwKCknaW5nIiBhIHRlc3QNCiAgICByZXNvdXJjZSBidWZmZXIgYWxsb2NhdGVkIGJ5 IGRtYV9hbGxvY19jb2hlcmVudCgpLiAgVGhlIGZ1dHVyZQ0KICAgIG1haW50ZW5hbmNlIGJ1cmRl biBoaXRzIHdoZW4gc29tZW9uZSBjaGFuZ2VzIHRoZSBzZW1hbnRpY3Mgb2YNCiAgICBpb3JlbWFw X2NhY2hlKCkgYW5kIHdvbmRlcnMgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZSBmb3IgdGhlIHVu aXQgdGVzdC4NCiAgICANCiAgICBbMV06IGh0dHBzOi8vZ2l0aHViLmNvbS9wbWVtL25kY3RsDQog ICAgDQogICAgQ2M6IDxsaW51eC1hY3BpQHZnZXIua2VybmVsLm9yZz4NCiAgICBDYzogTHYgWmhl bmcgPGx2LnpoZW5nQGludGVsLmNvbT4NCiAgICBDYzogUm9iZXJ0IE1vb3JlIDxyb2JlcnQubW9v cmVAaW50ZWwuY29tPg0KICAgIENjOiBSYWZhZWwgSi4gV3lzb2NraSA8cmFmYWVsLmoud3lzb2Nr aUBpbnRlbC5jb20+DQogICAgQ2M6IENocmlzdG9waCBIZWxsd2lnIDxoY2hAbHN0LmRlPg0KICAg IFNpZ25lZC1vZmYtYnk6IERhbiBXaWxsaWFtcyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tPg0K DQpjb21taXQgYmMzMDE5NmY3MTVlZDNhOTRkMDUwZWY4YmM0NjVlNTY3YTYwNTBiZQ0KQXV0aG9y OiBEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxpYW1zQGludGVsLmNvbT4NCkRhdGU6ICAgVGh1IEp1 biAyNSAwNDo0ODoxOSAyMDE1IC0wNDAwDQoNCiAgICBsaWJudmRpbW06IE5vbi1Wb2xhdGlsZSBE ZXZpY2VzDQogICAgDQogICAgTWFpbnRhaW5lciBpbmZvcm1hdGlvbiBhbmQgZG9jdW1lbnRhdGlv biBmb3IgZHJpdmVycy9udmRpbW0NCiAgICANCiAgICBDYzogQW5keSBMdXRvbWlyc2tpIDxsdXRv QGFtYWNhcGl0YWwubmV0Pg0KICAgIENjOiBCb2F6IEhhcnJvc2ggPGJvYXpAcGxleGlzdG9yLmNv bT4NCiAgICBDYzogSC4gUGV0ZXIgQW52aW4gPGhwYUB6eXRvci5jb20+DQogICAgQ2M6IEplbnMg QXhib2UgPGF4Ym9lQGZiLmNvbT4NCiAgICBDYzogSW5nbyBNb2xuYXIgPG1pbmdvQGtlcm5lbC5v cmc+DQogICAgQ2M6IENocmlzdG9waCBIZWxsd2lnIDxoY2hAbHN0LmRlPg0KICAgIENjOiBOZWls IEJyb3duIDxuZWlsYkBzdXNlLmRlPg0KICAgIENjOiBHcmVnIEtIIDxncmVna2hAbGludXhmb3Vu ZGF0aW9uLm9yZz4NCiAgICBTaWduZWQtb2ZmLWJ5OiBEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxp YW1zQGludGVsLmNvbT4NCg0KY29tbWl0IGY2OGViMWU3MWE5Mjc2NWZmZDhlYjY4NDY2YTQxYjQ4 ZjJmYmJhMDQNCkF1dGhvcjogVmlzaGFsIFZlcm1hIDx2aXNoYWwubC52ZXJtYUBpbnRlbC5jb20+ DQpEYXRlOiAgIFR1ZSBNYXkgMTIgMTM6NDg6NTMgMjAxNSAtMDQwMA0KDQogICAgZnMvYmxvY2tf ZGV2LmM6IHNraXAgcndfcGFnZSBpZiBiZGV2IGhhcyBpbnRlZ3JpdHkNCiAgICANCiAgICBJZiBh IGJsb2NrIGRldmljZSBoYXMgYmlvIGludGVncml0eSBlbmFibGVkLCByd19wYWdlIHdpbGwgYnlw YXNzIHRoZQ0KICAgIGludGVncml0eSBwYXlsb2FkLCB3aGljaCBpcyB1bmRlc2lyYWJsZS4gU2tp cCByd19wYWdlIGlmIHRoaXMgaXMgdGhlDQogICAgY2FzZS4NCiAgICANCiAgICBDdXJyZW50bHkg YnJkIGFuZCB6cmFtIHByb3ZpZGUgcndfcGFnZSwgYW5kIHRoZSBwcm9wb3NlZCAnbmQnIGRyaXZl cnMNCiAgICB3aWxsIHRvby4NCiAgICANCiAgICBDYzogSmVucyBBeGJvZSA8YXhib2VAZmIuY29t Pg0KICAgIENjOiBNYXJ0aW4gSy4gUGV0ZXJzZW4gPG1hcnRpbi5wZXRlcnNlbkBvcmFjbGUuY29t Pg0KICAgIFN1Z2dlc3RlZC1ieTogTWF0dGhldyBXaWxjb3ggPG1hdHRoZXcuci53aWxjb3hAaW50 ZWwuY29tPg0KICAgIFNpZ25lZC1vZmYtYnk6IFZpc2hhbCBWZXJtYSA8dmlzaGFsLmwudmVybWFA bGludXguaW50ZWwuY29tPg0KICAgIFNpZ25lZC1vZmYtYnk6IERhbiBXaWxsaWFtcyA8ZGFuLmou d2lsbGlhbXNAaW50ZWwuY29tPg0KDQpjb21taXQgNDFjZDhiNzBjMzdhY2U0MDA3N2M4ZDZlYzBi NzRiOTgzMTc4YzE5Mg0KQXV0aG9yOiBWaXNoYWwgVmVybWEgPHZpc2hhbC5sLnZlcm1hQGludGVs LmNvbT4NCkRhdGU6ICAgVGh1IEp1biAyNSAwNDoyMTo1MiAyMDE1IC0wNDAwDQoNCiAgICBsaWJu dmRpbW0sIGJ0dDogYWRkIHN1cHBvcnQgZm9yIGJsayBpbnRlZ3JpdHkNCiAgICANCiAgICBTdXBw b3J0IG11bHRpcGxlIGJsb2NrIHNpemVzIChzZWN0b3IgKyBtZXRhZGF0YSkgdXNpbmcgdGhlIGJs ayBpbnRlZ3JpdHkNCiAgICBmcmFtZXdvcmsuIFRoaXMgcmVnaXN0ZXJzIGEgbmV3IGludGVncml0 eSB0ZW1wbGF0ZSB0aGF0IGRlZmluZXMgdGhlDQogICAgcHJvdGVjdGlvbiBpbmZvcm1hdGlvbiB0 dXBsZSBzaXplIGJhc2VkIG9uIHRoZSBjb25maWd1cmVkIG1ldGFkYXRhIHNpemUsDQogICAgYW5k IHNpbXBseSBhY3RzIGFzIGEgcGFzc3Rocm91Z2ggZm9yIHByb3RlY3Rpb24gaW5mb3JtYXRpb24g Z2VuZXJhdGVkIGJ5DQogICAgYW5vdGhlciBsYXllci4gVGhlIG1ldGFkYXRhIGlzIHdyaXR0ZW4g dG8gdGhlIHN0b3JhZ2UgYXMtaXMsIGFuZCByZWFkIGJhY2sNCiAgICB3aXRoIGVhY2ggc2VjdG9y Lg0KICAgIA0KICAgIFNpZ25lZC1vZmYtYnk6IFZpc2hhbCBWZXJtYSA8dmlzaGFsLmwudmVybWFA bGludXguaW50ZWwuY29tPg0KICAgIFNpZ25lZC1vZmYtYnk6IERhbiBXaWxsaWFtcyA8ZGFuLmou d2lsbGlhbXNAaW50ZWwuY29tPg0KDQpjb21taXQgZmNhZTY5NTczN2ZjYTA4NDljMThkYjgxNGQ5 ZDhkZTA1YzBmZDJhMg0KQXV0aG9yOiBWaXNoYWwgVmVybWEgPHZpc2hhbC5sLnZlcm1hQGludGVs LmNvbT4NCkRhdGU6ICAgVGh1IEp1biAyNSAwNDoyMjozOSAyMDE1IC0wNDAwDQoNCiAgICBsaWJu dmRpbW0sIGJsazogYWRkIHN1cHBvcnQgZm9yIGJsayBpbnRlZ3JpdHkNCiAgICANCiAgICBTdXBw b3J0IG11bHRpcGxlIGJsb2NrIHNpemVzIChzZWN0b3IgKyBtZXRhZGF0YSkgZm9yIG5kX2JsayBp biB0aGUNCiAgICBzYW1lIHdheSBhcyBkb25lIGZvciB0aGUgQlRULiBBZGQgdGhlIGlkZWEgb2Yg YW4gJ2ludGVybmFsJyBsYmFzaXplLA0KICAgIHdoaWNoIGlzIHByb3Blcmx5IGFsaWduZWQgYW5k IHBhZGRlZCwgYW5kIHN0b3JlIG1ldGFkYXRhIGluIHRoaXMgc3BhY2UuDQogICAgDQogICAgU2ln bmVkLW9mZi1ieTogVmlzaGFsIFZlcm1hIDx2aXNoYWwubC52ZXJtYUBsaW51eC5pbnRlbC5jb20+ DQogICAgU2lnbmVkLW9mZi1ieTogRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRlbC5j b20+DQoNCmNvbW1pdCA0M2QzZmEzYTA0OTExNjhhZDc2OWQyMGQ1Y2JhZTQ1NDkyNTA5ZDQzDQpB dXRob3I6IERhbiBXaWxsaWFtcyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tPg0KRGF0ZTogICBT YXQgTWF5IDE2IDEyOjI4OjUwIDIwMTUgLTA0MDANCg0KICAgIGxpYm52ZGltbSwgcG1lbTogZml4 IHVwIG1heF9od19zZWN0b3JzDQogICAgDQogICAgVGhlcmUgaXMgbm8gaGFyZHdhcmUgbGltaXQg dG8gZW5mb3JjZSBvbiB0aGUgc2l6ZSBvZiB0aGUgaS9vIHRoYXQgY2FuIGJlIHBhc3NlZA0KICAg IHRvIGFuIG52ZGltbSBibG9jayBkZXZpY2UsIHNvIHNldCBpdCB0byBVSU5UX01BWC4NCiAgICAN CiAgICBSZXZpZXdlZC1ieTogVmlzaGFsIFZlcm1hIDx2aXNoYWwubC52ZXJtYUBsaW51eC5pbnRl bC5jb20+DQogICAgU2lnbmVkLW9mZi1ieTogRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0Bp bnRlbC5jb20+DQoNCmNvbW1pdCBlZGM4NzBlNTQ2OTZiZWI5ZjM4MzVlY2I0MWE0ZTFjODRlZTQ1 ODRkDQpBdXRob3I6IERhbiBXaWxsaWFtcyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tPg0KRGF0 ZTogICBTYXQgTWF5IDE2IDEyOjI4OjUxIDIwMTUgLTA0MDANCg0KICAgIHBtZW06IG1ha2VfcmVx dWVzdCBjbGVhbnVwcw0KICAgIA0KICAgIFZhcmlvdXMgY2xlYW51cHM6DQogICAgDQogICAgMS8g S2lsbCB0aGUgQlVHX09OIHNpbmNlIHdlJ3ZlIGFscmVhZHkgdG9sZCB0aGUgYmxvY2sgbGF5ZXIg d2UgZG9uJ3QNCiAgICAgICBzdXBwb3J0IERJU0NBUkQgb24gYWxsIHRoZXNlIGRyaXZlcnMuDQog ICAgDQogICAgMi8gS2lsbCB0aGUgJ3J3JyB2YXJpYWJsZSwgbm8gbmVlZCB0byBjYWNoZSBpdC4N CiAgICANCiAgICAzLyBLaWxsIHRoZSBsb2NhbCAnc2VjdG9yJyB2YXJpYWJsZS4gIGJpb19mb3Jf ZWFjaF9zZWdtZW50KCkgaXMgYWxyZWFkeQ0KICAgICAgIGFkdmFuY2luZyB0aGUgaXRlcmF0b3In cyBzZWN0b3IgbnVtYmVyIGJ5IHRoZSBiaW9fdmVjIGxlbmd0aC4NCiAgICANCiAgICA0LyBLaWxs IHRoZSBjaGVjayBmb3IgYWNjZXNzaW5nIHBhc3QgdGhlIGVuZCBvZiBkZXZpY2UNCiAgICAgICBn ZW5lcmljX21ha2VfcmVxdWVzdF9jaGVja3MoKSBhbHJlYWR5IGRvZXMgdGhhdC4NCiAgICANCiAg ICBTdWdnZXN0ZWQtYnk6IENocmlzdG9waCBIZWxsd2lnIDxoY2hAbHN0LmRlPg0KICAgIFtoY2g6 IGtpbGwgYWNjZXNzIHBhc3QgZW5kIG9mIHRoZSBkZXZpY2UgY2hlY2tdDQogICAgUmV2aWV3ZWQt Ynk6IFZpc2hhbCBWZXJtYSA8dmlzaGFsLmwudmVybWFAbGludXguaW50ZWwuY29tPg0KICAgIFNp Z25lZC1vZmYtYnk6IERhbiBXaWxsaWFtcyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tPg0KDQpj b21taXQgZjBkYzA4OWNlMjE3ZTdiOThlMGQyMDc3YzU0OGZmMDgxMjllNzkxMQ0KQXV0aG9yOiBE YW4gV2lsbGlhbXMgPGRhbi5qLndpbGxpYW1zQGludGVsLmNvbT4NCkRhdGU6ICAgU2F0IE1heSAx NiAxMjoyODo1MyAyMDE1IC0wNDAwDQoNCiAgICBsaWJudmRpbW06IGVuYWJsZSBpb3N0YXQNCiAg ICANCiAgICBUaGlzIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgYXMgdGhlIG92ZXJoZWFkIGlzIHBy b2hpYml0aXZlLCBidXQgaWYgdGhlDQogICAgdXNlciB0YWtlcyB0aGUgYWN0aW9uIHRvIHR1cm4g aXQgb24gd2UnbGwgb2JsaWdlLg0KICAgIA0KICAgIFJldmlld2VkLWJ5OiBWaXNoYWwgVmVybWEg PHZpc2hhbC5sLnZlcm1hQGxpbnV4LmludGVsLmNvbT4NCiAgICBTaWduZWQtb2ZmLWJ5OiBEYW4g V2lsbGlhbXMgPGRhbi5qLndpbGxpYW1zQGludGVsLmNvbT4NCg0KY29tbWl0IDBmNTFjNGZhN2Y2 MDgzOGE4N2NkNDVlOGJhMTQ0ZGRkY2Q0YzA2NmMNCkF1dGhvcjogRGFuIFdpbGxpYW1zIDxkYW4u ai53aWxsaWFtc0BpbnRlbC5jb20+DQpEYXRlOiAgIFNhdCBNYXkgMTYgMTI6Mjg6NTQgMjAxNSAt MDQwMA0KDQogICAgcG1lbTogZmxhZyBwbWVtIGJsb2NrIGRldmljZXMgYXMgbm9uLXJvdGF0aW9u YWwNCiAgICANCiAgICAuLi5zaW5jZSB0aGV5IGFyZSBlZmZlY3RpdmVseSBTU0RzIGFzIGZhciBh cyB1c2Vyc3BhY2UgaXMgY29uY2VybmVkLg0KICAgIA0KICAgIFJldmlld2VkLWJ5OiBWaXNoYWwg VmVybWEgPHZpc2hhbC5sLnZlcm1hQGxpbnV4LmludGVsLmNvbT4NCiAgICBTaWduZWQtb2ZmLWJ5 OiBEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxpYW1zQGludGVsLmNvbT4NCg0KY29tbWl0IDU4MTM4 ODIwOTQwNTkwMmI1NmQwNTVmNjQ0YjRkZDEyNGEyMDYxMTINCkF1dGhvcjogRGFuIFdpbGxpYW1z IDxkYW4uai53aWxsaWFtc0BpbnRlbC5jb20+DQpEYXRlOiAgIFR1ZSBKdW4gMjMgMjA6MDg6MzQg MjAxNSAtMDQwMA0KDQogICAgbGlibnZkaW1tLCBuZml0OiBoYW5kbGUgdW5hcm1lZCBkaW1tcywg bWFyayBuYW1lc3BhY2VzIHJlYWQtb25seQ0KICAgIA0KICAgIFVwb24gZGV0ZWN0aW9uIG9mIGFu IHVuYXJtZWQgZGltbSBpbiBhIHJlZ2lvbiwgYXJyYW5nZSBmb3IgZGVzY2VuZGFudA0KICAgIEJU VCwgUE1FTSwgb3IgQkxLIGluc3RhbmNlcyB0byBiZSByZWFkLW9ubHkuICBBIGRpbW0gaXMgcHJp bWFyaWx5IG1hcmtlZA0KICAgICJ1bmFybWVkIiB2aWEgZmxhZ3MgcGFzc2VkIGJ5IHBsYXRmb3Jt IGZpcm13YXJlIChORklUKS4NCiAgICANCiAgICBUaGUgZmxhZ3MgaW4gdGhlIE5GSVQgbWVtb3J5 IGRldmljZSBzdWItc3RydWN0dXJlIGluZGljYXRlIHRoZSBzdGF0ZSBvZg0KICAgIHRoZSBkYXRh IG9uIHRoZSBudmRpbW0gcmVsYXRpdmUgdG8gaXRzIGVuZXJneSBzb3VyY2Ugb3IgbGFzdCAiZmx1 c2ggdG8NCiAgICBwZXJzaXN0ZW5jZSIuICBGb3IgdGhlIG1vc3QgcGFydCB0aGVyZSBpcyBub3Ro aW5nIHRoZSBkcml2ZXIgY2FuIGRvIGJ1dA0KICAgIGFkdmVydGlzZSB0aGUgc3RhdGUgb2YgdGhl c2UgZmxhZ3MgaW4gc3lzZnMgYW5kIGVtaXQgYSBtZXNzYWdlIGlmDQogICAgZmlybXdhcmUgaW5k aWNhdGVzIHRoYXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBkZXZpY2UgbWF5IGJlIGNvcnJ1cHRlZC4N CiAgICBIb3dldmVyLCBmb3IgdGhlIGNhc2Ugb2YgQUNQSV9ORklUX01FTV9BUk1FRCwgdGhlIGRy aXZlciBjYW4gYXJyYW5nZSBmb3INCiAgICB0aGUgYmxvY2sgZGV2aWNlcyBpbmNvcnBvcmF0aW5n IHRoYXQgbnZkaW1tIHRvIGJlIG1hcmtlZCByZWFkLW9ubHkuDQogICAgVGhpcyBpcyBhIHNhZmUg ZGVmYXVsdCBhcyB0aGUgZGF0YSBpcyBzdGlsbCBhdmFpbGFibGUgYW5kIG5ldyB3cml0ZXMgYXJl DQogICAgaGVsZCBvZmYgdW50aWwgdGhlIGFkbWluaXN0cmF0b3IgZWl0aGVyIGZvcmNlcyByZWFk LXdyaXRlIG1vZGUsIG9yIHRoZQ0KICAgIGVuZXJneSBzb3VyY2UgYmVjb21lcyBhcm1lZC4NCiAg ICANCiAgICBBICdyZWFkX29ubHknIGF0dHJpYnV0ZSBpcyBhZGRlZCB0byBSRUdJT04gZGV2aWNl cyB0byBhbGxvdyBmb3INCiAgICBvdmVycmlkaW5nIHRoZSBkZWZhdWx0IHJlYWQtb25seSBwb2xp Y3kgb2YgYWxsIGRlc2NlbmRhbnQgYmxvY2sgZGV2aWNlcy4NCiAgICANCiAgICBTaWduZWQtb2Zm LWJ5OiBEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxpYW1zQGludGVsLmNvbT4NCg0KY29tbWl0IDk5 NzU5ODY5ZmFmMTU0NzFjZmNlMjUxYmMxMzg4NDhkOGFmN2QxNjINCkF1dGhvcjogVG9zaGkgS2Fu aSA8dG9zaGkua2FuaUBocC5jb20+DQpEYXRlOiAgIEZyaSBKdW4gMTkgMTc6MTQ6MTUgMjAxNSAt MDYwMA0KDQogICAgYWNwaTogQWRkIGFjcGlfbWFwX3B4bV90b19vbmxpbmVfbm9kZSgpDQogICAg DQogICAgVGhlIGtlcm5lbCBpbml0aWFsaXplcyBDUFUgJiBtZW1vcnkncyBOVU1BIHRvcG9sb2d5 IGZyb20gQUNQSQ0KICAgIFNSQVQgdGFibGUuICBTb21lIG90aGVyIEFDUEkgdGFibGVzLCBzdWNo IGFzIE5GSVQgYW5kIERNQVIsIGFsc28NCiAgICBjb250YWluIHByb3hpbWl0eSBJRHMgZm9yIHRo ZWlyIGRldmljZSdzIE5VTUEgdG9wb2xvZ3kuICBUaGlzDQogICAgaW5mb3JtYXRpb24gY2FuIGJl IHVzZWQgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBvZiB0aGVzZSBkZXZpY2VzLg0KICAgIA0KICAg IFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhY3BpX21hcF9weG1fdG9fb25saW5lX25vZGUoKSwgd2hp Y2ggaXMNCiAgICBzaW1pbGFyIHRvIGFjcGlfbWFwX3B4bV90b19ub2RlKCksIGJ1dCBhbHdheXMg cmV0dXJucyBhbiBvbmxpbmUNCiAgICBub2RlLiAgV2hlbiB0aGUgbWFwcGVkIG5vZGUgZnJvbSBh IGdpdmVuIHByb3hpbWl0eSBJRCBpcyBvZmZsaW5lLA0KICAgIGl0IGxvb2tzIHVwIHRoZSBub2Rl IGRpc3RhbmNlIHRhYmxlIGFuZCByZXR1cm5zIHRoZSBuZWFyZXN0DQogICAgb25saW5lIG5vZGUu DQogICAgDQogICAgQUNQSSBkZXZpY2UgZHJpdmVycywgd2hpY2ggYXJlIGNhbGxlZCBhZnRlciB0 aGUgTlVNQSBpbml0aWFsaXphdGlvbg0KICAgIGhhcyBjb21wbGV0ZWQgaW4gdGhlIGtlcm5lbCwg Y2FuIGNhbGwgdGhpcyBpbnRlcmZhY2UgdG8gb2J0YWluIHRoZWlyDQogICAgZGV2aWNlIE5VTUEg dG9wb2xvZ3kgZnJvbSBBQ1BJIHRhYmxlcy4gIFN1Y2ggZHJpdmVycyBkbyBub3QgaGF2ZSB0bw0K ICAgIGRlYWwgd2l0aCBvZmZsaW5lIG5vZGVzLiAgQSBub2RlIG1heSBiZSBvZmZsaW5lIHdoZW4g YSBkZXZpY2UNCiAgICBwcm94aW1pdHkgSUQgaXMgdW5pcXVlLCBTUkFUIG1lbW9yeSBlbnRyeSBk b2VzIG5vdCBleGlzdCwgb3IgTlVNQSBpcw0KICAgIGRpc2FibGVkLCBleC4gIm51bWE9b2ZmIiBv biB4ODYuDQogICAgDQogICAgVGhpcyBwYXRjaCBhbHNvIG1vdmVzIHRoZSBweG0gcmFuZ2UgY2hl Y2sgZnJvbSBhY3BpX2dldF9ub2RlKCkgdG8NCiAgICBhY3BpX21hcF9weG1fdG9fbm9kZSgpLg0K ICAgIA0KICAgIFNpZ25lZC1vZmYtYnk6IFRvc2hpIEthbmkgPHRvc2hpLmthbmlAaHAuY29tPg0K ICAgIEFja2VkLWJ5OiBSYWZhZWwgSi4gV3lzb2NraSA8cmFmYWVsLmoud3lzb2NraUBpbnRlbC5j b20+Pg0KICAgIFNpZ25lZC1vZmYtYnk6IERhbiBXaWxsaWFtcyA8ZGFuLmoud2lsbGlhbXNAaW50 ZWwuY29tPg0KDQpjb21taXQgNDFkN2E2ZDYzN2UxNDQwZjU0MTBjYjQzYzI1YTNjNDEyNTU1NDBj NQ0KQXV0aG9yOiBUb3NoaSBLYW5pIDx0b3NoaS5rYW5pQGhwLmNvbT4NCkRhdGU6ICAgRnJpIEp1 biAxOSAxMjoxODozMyAyMDE1IC0wNjAwDQoNCiAgICBsaWJudmRpbW06IFNldCBudW1hX25vZGUg dG8gTlZESU1NIGRldmljZXMNCiAgICANCiAgICBBQ1BJIE5GSVQgdGFibGUgaGFzIFN5c3RlbSBQ aHlzaWNhbCBBZGRyZXNzIFJhbmdlIFN0cnVjdHVyZSBlbnRyaWVzIHRoYXQNCiAgICBkZXNjcmli ZSBhIHByb3hpbWl0eSBJRCBvZiBlYWNoIHJhbmdlIHdoZW4gQUNQSV9ORklUX1BST1hJTUlUWV9W QUxJRCBpcw0KICAgIHNldCBpbiB0aGUgZmxhZ3MuDQogICAgDQogICAgQ2hhbmdlIGFjcGlfbmZp dF9yZWdpc3Rlcl9yZWdpb24oKSB0byBtYXAgYSBwcm94aW1pdHkgSUQgdG8gaXRzIG5vZGUgSUQs DQogICAgYW5kIHNldCBpdCB0byBhIG5ldyBudW1hX25vZGUgZmllbGQgb2YgbmRfcmVnaW9uX2Rl c2MsIHdoaWNoIGlzIHRoZW4NCiAgICBjb252ZXllZCB0byB0aGUgbmRfcmVnaW9uIGRldmljZS4N CiAgICANCiAgICBUaGUgZGV2aWNlIGNvcmUgYXJyYW5nZXMgZm9yIGJ0dCBhbmQgbmFtZXNwYWNl IGRldmljZXMgdG8gaW5oZXJpdCB0aGVpcg0KICAgIG5vZGUgZnJvbSB0aGVpciBwYXJlbnQgcmVn aW9uLg0KICAgIA0KICAgIFNpZ25lZC1vZmYtYnk6IFRvc2hpIEthbmkgPHRvc2hpLmthbmlAaHAu Y29tPg0KICAgIFtkamJ3OiBtb3ZlIHNldF9kZXZfbm9kZSgpIGZyb20gcmVnaW9uLmMgdG8gYnVz LmNdDQogICAgU2lnbmVkLW9mZi1ieTogRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRl bC5jb20+DQoNCmNvbW1pdCA3NGFlNjZjM2IxNGZmYTk0YzhkMmRlYTIwMWNkZjhlNjIwM2QxM2Q1 DQpBdXRob3I6IFRvc2hpIEthbmkgPHRvc2hpLmthbmlAaHAuY29tPg0KRGF0ZTogICBGcmkgSnVu IDE5IDEyOjE4OjM0IDIwMTUgLTA2MDANCg0KICAgIGxpYm52ZGltbTogQWRkIHN5c2ZzIG51bWFf bm9kZSB0byBOVkRJTU0gZGV2aWNlcw0KICAgIA0KICAgIEFkZCBzdXBwb3J0IG9mIHN5c2ZzICdu dW1hX25vZGUnIHRvIEkvTy1yZWxhdGVkIE5WRElNTSBkZXZpY2VzDQogICAgdW5kZXIgL3N5cy9i dXMvbmQvZGV2aWNlcywgcmVnaW9uTiwgbmFtZXNwYWNlTi4wLCBhbmQgYnR0Ti54Lg0KICAgIA0K ICAgIEFuIGV4YW1wbGUgb2YgbnVtYV9ub2RlIHZhbHVlcyBvbiBhIDItc29ja2V0IHN5c3RlbSB3 aXRoIGEgc2luZ2xlDQogICAgTlZESU1NIHJhbmdlIG9uIGVhY2ggc29ja2V0IGlzIHNob3duIGJl bG93Lg0KICAgICAgL3N5cy9idXMvbmQvZGV2aWNlcw0KICAgICAgfC0tIGJ0dDAuMC9udW1hX25v ZGU6MA0KICAgICAgfC0tIGJ0dDEuMC9udW1hX25vZGU6MQ0KICAgICAgfC0tIGJ0dDEuMS9udW1h X25vZGU6MQ0KICAgICAgfC0tIG5hbWVzcGFjZTAuMC9udW1hX25vZGU6MA0KICAgICAgfC0tIG5h bWVzcGFjZTEuMC9udW1hX25vZGU6MQ0KICAgICAgfC0tIHJlZ2lvbjAvbnVtYV9ub2RlOjANCiAg ICAgIHwtLSByZWdpb24xL251bWFfbm9kZToxDQogICAgDQogICAgVGhlc2UgbnVtYV9ub2RlIGZp bGVzIGFyZSB0aGVuIGxpbmtlZCB1bmRlciB0aGUgYmxvY2sgY2xhc3Mgb2YNCiAgICB0aGVpciBk ZXZpY2UgbmFtZXMuDQogICAgICAvc3lzL2NsYXNzL2Jsb2NrL3BtZW0wL2RldmljZS9udW1hX25v ZGU6MA0KICAgICAgL3N5cy9jbGFzcy9ibG9jay9wbWVtMXMvZGV2aWNlL251bWFfbm9kZToxDQog ICAgDQogICAgVGhpcyBlbmFibGVzIG51bWFjdGwoOCkgdG8gYWNjZXB0ICdibG9jazonIGFuZCAn ZmlsZTonIHBhdGhzIG9mDQogICAgcG1lbSBhbmQgYnR0IGRldmljZXMgYXMgc2hvd24gaW4gdGhl IGV4YW1wbGVzIGJlbG93Lg0KICAgICAgbnVtYWN0bCAtLXByZWZlcnJlZCBibG9jazpwbWVtMCAt LXNob3cNCiAgICAgIG51bWFjdGwgLS1wcmVmZXJyZWQgZmlsZTovZGV2L3BtZW0xcyAtLXNob3cN CiAgICANCiAgICBTaWduZWQtb2ZmLWJ5OiBUb3NoaSBLYW5pIDx0b3NoaS5rYW5pQGhwLmNvbT4N CiAgICBTaWduZWQtb2ZmLWJ5OiBEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxpYW1zQGludGVsLmNv bT4NCg0KY29tbWl0IDYxMDMxOTUyZjRjODlkYmExMDY1ZjdhNWI5NDE5YmFkYjExMjU1NGMNCkF1 dGhvcjogUm9zcyBad2lzbGVyIDxyb3NzLnp3aXNsZXJAbGludXguaW50ZWwuY29tPg0KRGF0ZTog ICBUaHUgSnVuIDI1IDAzOjA4OjM5IDIwMTUgLTA0MDANCg0KICAgIGFyY2gsIHg4NjogcG1lbSBh cGkgZm9yIGVuc3VyaW5nIGR1cmFiaWxpdHkgb2YgcGVyc2lzdGVudCBtZW1vcnkgdXBkYXRlcw0K ICAgIA0KICAgIEJhc2VkIG9uIGFuIG9yaWdpbmFsIHBhdGNoIGJ5IFJvc3MgWndpc2xlciBbMV0u DQogICAgDQogICAgV3JpdGVzIHRvIHBlcnNpc3RlbnQgbWVtb3J5IGhhdmUgdGhlIHBvdGVudGlh bCB0byBiZSBwb3N0ZWQgdG8gY3B1DQogICAgY2FjaGUsIGNwdSB3cml0ZSBidWZmZXJzLCBhbmQg cGxhdGZvcm0gd3JpdGUgYnVmZmVycyAobWVtb3J5IGNvbnRyb2xsZXIpDQogICAgYmVmb3JlIGJl aW5nIGNvbW1pdHRlZCB0byBwZXJzaXN0ZW50IG1lZGlhLiAgUHJvdmlkZSBhcGlzLA0KICAgIG1l bWNweV90b19wbWVtKCksIHdtYl9wbWVtKCksIGFuZCBtZW1yZW1hcF9wbWVtKCksIHRvIHdyaXRl IGRhdGEgdG8NCiAgICBwbWVtIGFuZCBhc3NlcnQgdGhhdCBpdCBpcyBkdXJhYmxlIGluIFBNRU0g KGEgcGVyc2lzdGVudCBsaW5lYXIgYWRkcmVzcw0KICAgIHJhbmdlKS4gIEEgJ19fcG1lbScgYXR0 cmlidXRlIGlzIGFkZGVkIHNvIHNwYXJzZSBjYW4gdHJhY2sgcHJvcGVyIHVzYWdlDQogICAgb2Yg cG9pbnRlcnMgdG8gcG1lbS4NCiAgICANCiAgICBUaGlzIGNvbnRpbnVlcyB0aGUgc3RhdHVzIHF1 byBvZiBwbWVtIGJlaW5nIHg4NiBvbmx5IGZvciA0LjIsIGJ1dA0KICAgIHJld29ya3MgdG8gaW9y ZW1hcCwgYW5kIHdpZGVyIGltcGxlbWVudGF0aW9uIG9mIG1lbXJlbWFwKCkgd2lsbCBlbmFibGUN CiAgICBvdGhlciBhcmNocyBpbiA0LjMuDQogICAgDQogICAgWzFdOiBodHRwczovL2xpc3RzLjAx Lm9yZy9waXBlcm1haWwvbGludXgtbnZkaW1tLzIwMTUtTWF5LzAwMDkzMi5odG1sDQogICAgDQog ICAgQ2M6IFRob21hcyBHbGVpeG5lciA8dGdseEBsaW51dHJvbml4LmRlPg0KICAgIENjOiBJbmdv IE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4NCiAgICBDYzogIkguIFBldGVyIEFudmluIiA8aHBh QHp5dG9yLmNvbT4NCiAgICBTaWduZWQtb2ZmLWJ5OiBSb3NzIFp3aXNsZXIgPHJvc3Muendpc2xl ckBsaW51eC5pbnRlbC5jb20+DQogICAgW2RqYnc6IHZhcmlvdXMgcmV3b3Jrc10NCiAgICBTaWdu ZWQtb2ZmLWJ5OiBEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxpYW1zQGludGVsLmNvbT4NCg0K From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: "Williams, Dan J" Subject: [GIT PULL] libnvdimm: non-volatile memory devices for 4.2 Date: Fri, 26 Jun 2015 21:46:26 +0000 Message-ID: <1435355182.18090.64.camel@intel.com> Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-ID: <742108056C3A7A4ABEF7F37AAE8FF96C@intel.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org To: "torvalds@linux-foundation.org" Cc: "toshi.kani@hp.com" , "mingo@kernel.org" , "linux-kernel@vger.kernel.org" , "nicholas.w.moulin@linux.intel.com" , "Rudoff, Andy" , "jmoyer@redhat.com" , "tglx@linutronix.de" , "hch@lst.de" , "axboe@kernel.dk" , "Moore, Robert" , "Wysocki, Rafael J" , "hpa@zytor.com" , "linux-nvdimm@lists.01.org" , "axboe@fb.com" , "willy@linux.intel.com" , "bp@alien8.de" , "ross.zwisler@linux.intel.com" , "Verma, Vishal L" , "gregkh@linuxfoundation.org" , "luto@amacapital.net" , "linux-acpi@vger.kernel.org" , "akpm@linux-foundation.org" List-ID: SGkgTGludXMsIHBsZWFzZSBwdWxsIGZyb206DQoNCmdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9z Y20vbGludXgva2VybmVsL2dpdC9kamJ3L252ZGltbSB0YWdzL2xpYm52ZGltbS1mb3ItNC4yDQoN Ci4uLnRvIHJlY2VpdmUgdGhlIG5ldyBsaWJudmRpbW0gc3ViLXN5c3RlbSwgcmVsYXRlZCBkcml2 ZXJzLCBhbmQgeDg2DQplbmFibGluZy4NCg0KLS0tDQoNCkVhcmxpZXIgdGhpcyB3ZWVrLCBpbiB0 aGUgQUNQSUNBIHVwZGF0ZSwgeW91IG1lcmdlZCB0aGUgZGVmaW5pdGlvbiBvZg0KdGhlIG5ldyBB Q1BJIDYuMCB0YWJsZSBkZXNjcmliaW5nIHBsYXRmb3JtIG5vbi12b2xhdGlsZSBtZW1vcnkNCnJl c291cmNlcywgTkZJVCAoTlZESU1NIEZpcm13YXJlIEludGVyZmFjZSBUYWJsZSkuICBUaGUgc3Bl Y2lmaWNhdGlvbg0KZm9yIHRoaXMgdGFibGUgZ3VpZGVkIGRldmVsb3BtZW50IG9mIGxpYm52ZGlt bSwgYSBnZW5lcmljIGtlcm5lbA0Kc3ViLXN5c3RlbSBpbiBzdXBwb3J0IG9mIE5WRElNTSBkZXZp Y2VzLiAgVGhlIG5ldyBBQ1BJX05GSVQgZHJpdmVyIGlzDQp0aGUgcHJpbWFyeSBjb25zdW1lciBv ZiB0aGlzIGxpYnJhcnksIGFuZCBpdCBhbHNvIHN1cHBvcnRzIHRoZSBleGlzdGluZw0KWDg2X1BN RU1fTEVHQUNZIGRlZmluaXRpb24gbWVyZ2VkIGluIHY0LjEuDQoNClRoZSBpbXBsZW1lbnRhdGlv biBoYXMgYmVlbiBvdXQgZm9yIHJldmlldyBzaW5jZSBBQ1BJIDYuMCB3YXMgcmVsZWFzZWQNCndo aWNoIGNvaW5jaWRlZCB3aXRoIHY0LjEtcmMxLiAgV2UgaGF2ZSBpdGVyYXRlZCB0aHJvdWdoIGEg c3RlYWR5IHN0cmVhbQ0Kb2YgdG91Z2gsIGJ1dCB1bHRpbWF0ZWx5IGZvciB0aGUgYmV0dGVybWVu dCBvZiB0aGUgY29kZSBiYXNlLCByZXZpZXcNCmZlZWRiYWNrLiAgVGhlIGNvZGUgaXMgbWVyZ2Ug cmVhZHkgYXMgd2UgaGF2ZSB3b3JrZWQgdGhyb3VnaCBhbGwgdGhlDQpjb2Fyc2UgYXNwZWN0cyBv ZiB0aGUgYXJjaGl0ZWN0dXJlLCBwcmltYXJpbHkgd2l0aCBDaHJpc3RvcGgsIGFuZCBoYXZlDQpk ZW1vbnN0cmF0ZWQgYSB3aWxsaW5nbmVzcyBhbmQgYWJpbGl0eSB0byBxdWlja2x5IHNwaW4gdGhl DQppbXBsZW1lbnRhdGlvbiBpbiByZXNwb25zZSB0byByZXZpZXcuDQoNCkl0IG11c3QgYmUgbm90 ZWQgdGhhdCB0aGUgb25lIGFzcGVjdCBvZiB0aGlzIHB1bGwgcmVxdWVzdCB0aGF0IENocmlzdG9w aA0Kc3RpbGwgaGFzIGNvbmNlcm5zLCB0aGUgZXh0ZXJuYWwgdW5pdCB0ZXN0IGluZnJhc3RydWN0 dXJlIGluDQp0b29scy90ZXN0aW5nL252ZGltbS8sIGlzIHRoZSBwcmltYXJ5IHJlYXNvbiB3ZSBo YXZlIGJlZW4gYWJsZSB0byBzcGluDQp0aGUgaW1wbGVtZW50YXRpb24gd2l0aCBzcGVlZCBhbmQg Y29uZmlkZW5jZS4gIFRoZSBjaGFuZ2Vsb2cgZm9yIGNvbW1pdA0KNmJjNzU2MTkzZmY2ICJ0b29s cy90ZXN0aW5nL252ZGltbTogbGlibnZkaW1tIHVuaXQgdGVzdCBpbmZyYXN0cnVjdHVyZSINCmdv ZXMgaW50byBtb3JlIGRldGFpbHMgb2YgdGhlIHJhdGlvbmFsZSB0byBpbmNsdWRlIGl0LiAgU3Vm ZmljZSB0byBzYXkNCnRoZSBwb3RlbnRpYWwgbWFpbnRlbmFuY2UgYnVyZGVuIG9mIGNhcnJ5aW5n IGRyaXZlciB0ZXN0IGluZnJhc3RydWN0dXJlDQppbi10cmVlIGlzIG92ZXJzaGFkb3dlZCBieSB0 aGUgYmVuZWZpdHMgb2YgZGVtb25zdHJhdGluZyB0aGUNCmltcGxlbWVudGF0aW9uIGluIHRoZSBh YnNlbmNlIG9mIGhhcmR3YXJlLCBjYXRjaGluZyBidWdzICh0aGUgbWFqb3JpdHkNCm9mIHRoZW0p LCBhbmQgaWRlbnRpZnlpbmcgaW5jb21wbGV0ZSBlbmFibGluZy4NCg0KTm90YWJseSBtaXNzaW5n IGZyb20gdGhpcyBtZXJnZSByZXF1ZXN0IGFyZSBzb21lIG9mIHRoZSB3aWRlciBhcmNoDQpjbGVh bnVwcyAoZ2VuZXJpYyBpb3JlbWFwX2NhY2hlKCkpIGFuZCBjb3JlIGtlcm5lbCBlbmFibGluZyAo X19wZm5fdCwNCmttYXBfYXRvbWljX3Bmbl90KCksIG1lbXJlbWFwKCksIGV0Yy4uLikgdXBkYXRl cyB0aGF0IHdlcmUgaWRlbnRpZmllZCBpbg0KdGhlIGNvdXJzZSBvZiBkZXZlbG9wbWVudC4gIFRo b3NlIHdpbGwgbmVlZCB0byB3YWl0IGZvciA0LjMuICBJbiB0aGUNCm1lYW50aW1lIHRoaXMgZG9l cyBpbmNsdWRlIHRoZSBuZXcgcG1lbSBhcGkgd2hpY2ggaG9va3MgdXAgdGhlICJwY29tbWl0Ig0K aW5zdHJ1Y3Rpb24gdGhhdCB3YXMgcHJldmlvdXNseSBtZXJnZWQgaW4gdjQuMSBhbmQgb3V0bGlu ZXMgd2hhdCBhbg0KYXJjaGl0ZWN0dXJlIG1heSBuZWVkIHRvIGltcGxlbWVudCB0byByZWxpYWJs eSBzdXBwb3J0IHBtZW0uDQoNClBsZWFzZSBwdWxsLCBmdWxsIGNvbW1pdCBsb2cgYmVsb3cgc28g eW91IGNhbiBzZWUgd2hhdCBoYXMgYmVlbg0KZXhwbGljaXRseSBhY2tlZC4NCg0KVGhhbmsgeW91 IQ0KDQotLS0NCg0KVGhlIGZvbGxvd2luZyBjaGFuZ2VzIHNpbmNlIGNvbW1pdCBmM2I2Y2VkMjM2 MjU5YTg3ODI5YjgyOWU4ZTU0MmZmNTNiZmI5YTRmOg0KDQogIEFDUElDQTogRml4IGZvciBpbGwt Zm9ybWVkIEdVSUQgc3RyaW5ncyBmb3IgTkZJVCB0YWJsZXMuICgyMDE1LTA1LTI1IDIzOjQyOjM0 ICswMjAwKQ0KDQphcmUgYXZhaWxhYmxlIGluIHRoZSBnaXQgcmVwb3NpdG9yeSBhdDoNCg0KICBn aXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvZGpidy9udmRpbW0g dGFncy9saWJudmRpbW0tZm9yLTQuMg0KDQpmb3IgeW91IHRvIGZldGNoIGNoYW5nZXMgdXAgdG8g NjEwMzE5NTJmNGM4OWRiYTEwNjVmN2E1Yjk0MTliYWRiMTEyNTU0YzoNCg0KICBhcmNoLCB4ODY6 IHBtZW0gYXBpIGZvciBlbnN1cmluZyBkdXJhYmlsaXR5IG9mIHBlcnNpc3RlbnQgbWVtb3J5IHVw ZGF0ZXMgKDIwMTUtMDYtMjYgMTE6MjM6MzggLTA0MDApDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NClRoZSBsaWJudmRp bW0gc3ViLXN5c3RlbSBpbnRyb2R1Y2VzLCBpbiBhZGRpdGlvbiB0byB0aGUgbGlibnZkaW1tLWNv cmUsDQo0IGRyaXZlcnMgLyBlbmFibGluZyBtb2R1bGVzOg0KDQpORklUOg0KSW5zdGFudGlhdGVz IGFuICJudmRpbW0gYnVzIiB3aXRoIHRoZSBjb3JlIGFuZCByZWdpc3RlcnMgbWVtb3J5IGRldmlj ZXMNCihOVkRJTU1zKSBlbnVtZXJhdGVkIGJ5IHRoZSBBQ1BJIDYuMCBORklUIChOVkRJTU0gRmly bXdhcmUgSW50ZXJmYWNlDQp0YWJsZSkuICBBZnRlciByZWdpc3RlcmluZyBOVkRJTU1zIHRoZSBO RklUIGRyaXZlciB0aGVuIHJlZ2lzdGVycw0KInJlZ2lvbiIgZGV2aWNlcy4gIEEgbGlibnZkaW1t LXJlZ2lvbiBkZWZpbmVzIGFuIGFjY2VzcyBtb2RlIGFuZCB0aGUNCmJvdW5kYXJpZXMgb2YgcGVy c2lzdGVudCBtZW1vcnkgbWVkaWEuICBBIHJlZ2lvbiBtYXkgc3BhbiBtdWx0aXBsZQ0KTlZESU1N cyB0aGF0IGFyZSBpbnRlcmxlYXZlZCBieSB0aGUgaGFyZHdhcmUgbWVtb3J5IGNvbnRyb2xsZXIu ICBJbg0KdHVybiwgYSBsaWJudmRpbW0tcmVnaW9uIGNhbiBiZSBjYXJ2ZWQgaW50byBhICJuYW1l c3BhY2UiIGRldmljZSBhbmQNCmJvdW5kIHRvIHRoZSBQTUVNIG9yIEJMSyBkcml2ZXIgd2hpY2gg d2lsbCBhdHRhY2ggYSBMaW51eCBibG9jayBkZXZpY2UNCihkaXNrKSBpbnRlcmZhY2UgdG8gdGhl IG1lbW9yeS4NCg0KUE1FTToNCkluaXRpYWxseSBtZXJnZWQgaW4gdjQuMSB0aGlzIGRyaXZlciBm b3IgY29udGlndW91cyBzcGFucyBvZiBwZXJzaXN0ZW50DQptZW1vcnkgYWRkcmVzcyByYW5nZXMg aXMgcmUtd29ya2VkIHRvIGRyaXZlIFBNRU0tbmFtZXNwYWNlcyBlbWl0dGVkIGJ5DQp0aGUgbGli bnZkaW1tLWNvcmUuICBJbiB0aGlzIHVwZGF0ZSB0aGUgUE1FTSBkcml2ZXIsIG9uIHg4NiwgZ2Fp bnMgdGhlDQphYmlsaXR5IHRvIGFzc2VydCB0aGF0IHdyaXRlcyB0byBwZXJzaXN0ZW50IG1lbW9y eSBoYXZlIGJlZW4gZmx1c2hlZCBhbGwNCnRoZSB3YXkgdGhyb3VnaCB0aGUgY2FjaGVzIGFuZCBi dWZmZXJzIGluIHRoZSBwbGF0Zm9ybSB0byBwZXJzaXN0ZW50DQptZWRpYS4gIFNlZSBtZW1jcHlf dG9fcG1lbSgpIGFuZCB3bWJfcG1lbSgpLg0KDQpCTEs6DQpUaGlzIG5ldyBkcml2ZXIgZW5hYmxl cyBhY2Nlc3MgdG8gcGVyc2lzdGVudCBtZW1vcnkgbWVkaWEgdGhyb3VnaCAiQmxvY2sNCkRhdGEg V2luZG93cyIgYXMgZGVmaW5lZCBieSB0aGUgTkZJVC4gIFRoZSBwcmltYXJ5IGRpZmZlcmVuY2Ug b2YgdGhpcw0KZHJpdmVyIHRvIFBNRU0gaXMgdGhhdCBvbmx5IGEgc21hbGwgd2luZG93IG9mIHBl cnNpc3RlbnQgbWVtb3J5IGlzDQptYXBwZWQgaW50byBzeXN0ZW0gYWRkcmVzcyBzcGFjZSBhdCBh bnkgZ2l2ZW4gcG9pbnQgaW4gdGltZS4gIFBlci1OVkRJTU0NCndpbmRvd3MgYXJlIHJlcHJvZ3Jh bW1lZCBhdCBydW4gdGltZSwgcGVyLUkvTywgdG8gYWNjZXNzIGRpZmZlcmVudA0KcG9ydGlvbnMg b2YgdGhlIG1lZGlhLiAgQkxLLW1vZGUsIGJ5IGRlZmluaXRpb24sIGRvZXMgbm90IHN1cHBvcnQg REFYLg0KDQpCVFQ6DQpUaGlzIGlzIGEgbGlicmFyeSwgb3B0aW9uYWxseSBjb25zdW1lZCBieSBl aXRoZXIgUE1FTSBvciBCTEssIHRoYXQNCmNvbnZlcnRzIGEgYnl0ZS1hY2Nlc3NpYmxlIG5hbWVz cGFjZSBpbnRvIGEgZGlzayB3aXRoIGF0b21pYyBzZWN0b3INCnVwZGF0ZSBzZW1hbnRpY3MgKHBy ZXZlbnRzIHNlY3RvciB0ZWFyaW5nIG9uIGNyYXNoIG9yIHBvd2VyIGxvc3MpLiAgVGhlDQpzaW5p c3RlciBhc3BlY3Qgb2Ygc2VjdG9yIHRlYXJpbmcgaXMgdGhhdCBtb3N0IGFwcGxpY2F0aW9ucyBk byBub3Qga25vdw0KdGhleSBoYXZlIGEgYXRvbWljIHNlY3RvciBkZXBlbmRlbmN5LiAgQXQgbGVh c3QgdG9kYXkncyBkaXNrcyByYXJlbHkNCmV2ZXIgdGVhciBzZWN0b3JzIGFuZCBpZiB0aGV5IGRv IG9uZSBhbG1vc3QgY2VydGFpbmx5IGdldHMgYSBDUkMgZXJyb3INCm9uIGFjY2Vzcy4gIE5WRElN TXMgd2lsbCBhbHdheXMgdGVhciBhbmQgYWx3YXlzIHNpbGVudGx5LiAgVW50aWwgYW4NCmFwcGxp Y2F0aW9uIGlzIGF1ZGl0ZWQgdG8gYmUgcm9idXN0IGluIHRoZSBwcmVzZW5jZSBvZiBzZWN0b3It dGVhcmluZw0KdGhlIHVzYWdlIG9mIEJUVCBpcyByZWNvbW1lbmRlZC4NCg0KVGhhbmtzIHRvOiBS b3NzIFp3aXNsZXIsIEplZmYgTW95ZXIsIFZpc2hhbCBWZXJtYSwgQ2hyaXN0b3BoIEhlbGx3aWcs DQpJbmdvIE1vbG5hciwgTmVpbCBCcm93biwgQm9heiBIYXJyb3NoLCBSb2JlcnQgRWxsaW90dCwg TWF0dGhldyBXaWxjb3gsDQpBbmR5IFJ1ZG9mZiwgTGluZGEgS25pcHBlcnMsIFRvc2hpIEthbmks IE5pY2hvbGFzIE1vdWxpbiwgUmFmYWVsDQpXeXNvY2tpLCBhbmQgQm9iIE1vb3JlLg0KDQotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQpEYW4gV2lsbGlhbXMgKDI0KToNCiAgICAgIGU4MjAsIGVmaTogYWRkIEFDUEkgNi4wIHBl cnNpc3RlbnQgbWVtb3J5IHR5cGVzDQogICAgICBsaWJudmRpbW0sIG5maXQ6IGluaXRpYWwgbGli bnZkaW1tIGluZnJhc3RydWN0dXJlIGFuZCBORklUIHN1cHBvcnQNCiAgICAgIGxpYm52ZGltbTog Y29udHJvbCBjaGFyYWN0ZXIgZGV2aWNlIGFuZCBudmRpbW1fYnVzIHN5c2ZzIGF0dHJpYnV0ZXMN CiAgICAgIGxpYm52ZGltbSwgbmZpdDogZGltbS9tZW1vcnktZGV2aWNlcw0KICAgICAgbGlibnZk aW1tOiBjb250cm9sIChpb2N0bCkgbWVzc2FnZXMgZm9yIG52ZGltbV9idXMgYW5kIG52ZGltbSBk ZXZpY2VzDQogICAgICBsaWJudmRpbW0sIG52ZGltbTogZGltbSBkcml2ZXIgYW5kIGJhc2UgbGli bnZkaW1tIGRldmljZS1kcml2ZXIgaW5mcmFzdHJ1Y3R1cmUNCiAgICAgIGxpYm52ZGltbSwgbmZp dDogcmVnaW9ucyAoYmxvY2stZGF0YS13aW5kb3csIHBlcnNpc3RlbnQgbWVtb3J5LCB2b2xhdGls ZSBtZW1vcnkpDQogICAgICBsaWJudmRpbW06IHN1cHBvcnQgZm9yIGxlZ2FjeSAobm9uLWFsaWFz aW5nKSBudmRpbW1zDQogICAgICBsaWJudmRpbW0sIHBtZW06IG1vdmUgcG1lbSB0byBkcml2ZXJz L252ZGltbS8NCiAgICAgIGxpYm52ZGltbSwgcG1lbTogYWRkIGxpYm52ZGltbSBzdXBwb3J0IHRv IHRoZSBwbWVtIGRyaXZlcg0KICAgICAgbGlibnZkaW1tLCBuZml0OiBhZGQgaW50ZXJsZWF2ZS1z ZXQgc3RhdGUtdHJhY2tpbmcgaW5mcmFzdHJ1Y3R1cmUNCiAgICAgIGxpYm52ZGltbTogbmFtZXNw YWNlIGluZGljZXM6IHJlYWQgYW5kIHZhbGlkYXRlDQogICAgICBsaWJudmRpbW06IHBtZW0gbGFi ZWwgc2V0cyBhbmQgbmFtZXNwYWNlIGluc3RhbnRpYXRpb24uDQogICAgICBsaWJudmRpbW06IGJs ayBsYWJlbHMgYW5kIG5hbWVzcGFjZSBpbnN0YW50aWF0aW9uDQogICAgICBsaWJudmRpbW06IHdy aXRlIHBtZW0gbGFiZWwgc2V0DQogICAgICBsaWJudmRpbW06IHdyaXRlIGJsayBsYWJlbCBzZXQN CiAgICAgIGxpYm52ZGltbTogaW5mcmFzdHJ1Y3R1cmUgZm9yIGJ0dCBkZXZpY2VzDQogICAgICB0 b29scy90ZXN0aW5nL252ZGltbTogbGlibnZkaW1tIHVuaXQgdGVzdCBpbmZyYXN0cnVjdHVyZQ0K ICAgICAgbGlibnZkaW1tOiBOb24tVm9sYXRpbGUgRGV2aWNlcw0KICAgICAgbGlibnZkaW1tLCBw bWVtOiBmaXggdXAgbWF4X2h3X3NlY3RvcnMNCiAgICAgIHBtZW06IG1ha2VfcmVxdWVzdCBjbGVh bnVwcw0KICAgICAgbGlibnZkaW1tOiBlbmFibGUgaW9zdGF0DQogICAgICBwbWVtOiBmbGFnIHBt ZW0gYmxvY2sgZGV2aWNlcyBhcyBub24tcm90YXRpb25hbA0KICAgICAgbGlibnZkaW1tLCBuZml0 OiBoYW5kbGUgdW5hcm1lZCBkaW1tcywgbWFyayBuYW1lc3BhY2VzIHJlYWQtb25seQ0KDQpSb3Nz IFp3aXNsZXIgKDIpOg0KICAgICAgbGlibnZkaW1tLCBuZml0LCBuZF9ibGs6IGRyaXZlciBmb3Ig QkxLLW1vZGUgYWNjZXNzIHBlcnNpc3RlbnQgbWVtb3J5DQogICAgICBhcmNoLCB4ODY6IHBtZW0g YXBpIGZvciBlbnN1cmluZyBkdXJhYmlsaXR5IG9mIHBlcnNpc3RlbnQgbWVtb3J5IHVwZGF0ZXMN Cg0KVG9zaGkgS2FuaSAoMyk6DQogICAgICBhY3BpOiBBZGQgYWNwaV9tYXBfcHhtX3RvX29ubGlu ZV9ub2RlKCkNCiAgICAgIGxpYm52ZGltbTogU2V0IG51bWFfbm9kZSB0byBOVkRJTU0gZGV2aWNl cw0KICAgICAgbGlibnZkaW1tOiBBZGQgc3lzZnMgbnVtYV9ub2RlIHRvIE5WRElNTSBkZXZpY2Vz DQoNClZpc2hhbCBWZXJtYSAoNCk6DQogICAgICBuZF9idHQ6IGF0b21pYyBzZWN0b3IgdXBkYXRl cw0KICAgICAgZnMvYmxvY2tfZGV2LmM6IHNraXAgcndfcGFnZSBpZiBiZGV2IGhhcyBpbnRlZ3Jp dHkNCiAgICAgIGxpYm52ZGltbSwgYnR0OiBhZGQgc3VwcG9ydCBmb3IgYmxrIGludGVncml0eQ0K ICAgICAgbGlibnZkaW1tLCBibGs6IGFkZCBzdXBwb3J0IGZvciBibGsgaW50ZWdyaXR5DQoNCiBE b2N1bWVudGF0aW9uL252ZGltbS9idHQudHh0ICAgICAgICAgIHwgIDI4MyArKysrKw0KIERvY3Vt ZW50YXRpb24vbnZkaW1tL252ZGltbS50eHQgICAgICAgfCAgODA4ICsrKysrKysrKysrKysrDQog TUFJTlRBSU5FUlMgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzkgKy0NCiBhcmNoL2Fy bTY0L2tlcm5lbC9lZmkuYyAgICAgICAgICAgICAgIHwgICAgMSArDQogYXJjaC9pYTY0L2tlcm5l bC9lZmkuYyAgICAgICAgICAgICAgICB8ICAgIDQgKw0KIGFyY2gveDg2L0tjb25maWcgICAgICAg ICAgICAgICAgICAgICAgfCAgICA0ICsNCiBhcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvZWJvb3Qu YyAgICAgIHwgICAgNCArDQogYXJjaC94ODYvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oICAgICB8 ICAgNzIgKysNCiBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9pby5oICAgICAgICAgICAgIHwgICAgNiAr DQogYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9lODIwLmggICAgICB8ICAgIDEgKw0KIGFyY2gv eDg2L2tlcm5lbC9lODIwLmMgICAgICAgICAgICAgICAgfCAgIDI4ICstDQogYXJjaC94ODYva2Vy bmVsL3BtZW0uYyAgICAgICAgICAgICAgICB8ICAgOTMgKy0NCiBhcmNoL3g4Ni9wbGF0Zm9ybS9l ZmkvZWZpLmMgICAgICAgICAgIHwgICAgMyArDQogZHJpdmVycy9LY29uZmlnICAgICAgICAgICAg ICAgICAgICAgICB8ICAgIDIgKw0KIGRyaXZlcnMvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAg ICAgfCAgICAxICsNCiBkcml2ZXJzL2FjcGkvS2NvbmZpZyAgICAgICAgICAgICAgICAgIHwgICAy NiArDQogZHJpdmVycy9hY3BpL01ha2VmaWxlICAgICAgICAgICAgICAgICB8ICAgIDEgKw0KIGRy aXZlcnMvYWNwaS9uZml0LmMgICAgICAgICAgICAgICAgICAgfCAxNTg3ICsrKysrKysrKysrKysr KysrKysrKysrKysrKysNCiBkcml2ZXJzL2FjcGkvbmZpdC5oICAgICAgICAgICAgICAgICAgIHwg IDE1OCArKysNCiBkcml2ZXJzL2FjcGkvbnVtYS5jICAgICAgICAgICAgICAgICAgIHwgICA1MCAr LQ0KIGRyaXZlcnMvYmxvY2svS2NvbmZpZyAgICAgICAgICAgICAgICAgfCAgIDExIC0NCiBkcml2 ZXJzL2Jsb2NrL01ha2VmaWxlICAgICAgICAgICAgICAgIHwgICAgMSAtDQogZHJpdmVycy9udmRp bW0vS2NvbmZpZyAgICAgICAgICAgICAgICB8ICAgNjggKysNCiBkcml2ZXJzL252ZGltbS9NYWtl ZmlsZSAgICAgICAgICAgICAgIHwgICAyMCArDQogZHJpdmVycy9udmRpbW0vYmxrLmMgICAgICAg ICAgICAgICAgICB8ICAzODQgKysrKysrKw0KIGRyaXZlcnMvbnZkaW1tL2J0dC5jICAgICAgICAg ICAgICAgICAgfCAxNDc5ICsrKysrKysrKysrKysrKysrKysrKysrKysrDQogZHJpdmVycy9udmRp bW0vYnR0LmggICAgICAgICAgICAgICAgICB8ICAxODUgKysrKw0KIGRyaXZlcnMvbnZkaW1tL2J0 dF9kZXZzLmMgICAgICAgICAgICAgfCAgNDI1ICsrKysrKysrDQogZHJpdmVycy9udmRpbW0vYnVz LmMgICAgICAgICAgICAgICAgICB8ICA3MzAgKysrKysrKysrKysrKw0KIGRyaXZlcnMvbnZkaW1t L2NvcmUuYyAgICAgICAgICAgICAgICAgfCAgNDY1ICsrKysrKysrDQogZHJpdmVycy9udmRpbW0v ZGltbS5jICAgICAgICAgICAgICAgICB8ICAxMDIgKysNCiBkcml2ZXJzL252ZGltbS9kaW1tX2Rl dnMuYyAgICAgICAgICAgIHwgIDU1MSArKysrKysrKysrDQogZHJpdmVycy9udmRpbW0vbGFiZWwu YyAgICAgICAgICAgICAgICB8ICA5MjcgKysrKysrKysrKysrKysrKw0KIGRyaXZlcnMvbnZkaW1t L2xhYmVsLmggICAgICAgICAgICAgICAgfCAgMTQxICsrKw0KIGRyaXZlcnMvbnZkaW1tL25hbWVz cGFjZV9kZXZzLmMgICAgICAgfCAxODcwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Kw0KIGRyaXZlcnMvbnZkaW1tL25kLWNvcmUuaCAgICAgICAgICAgICAgfCAgIDgzICsrDQogZHJp dmVycy9udmRpbW0vbmQuaCAgICAgICAgICAgICAgICAgICB8ICAyMjAgKysrKw0KIGRyaXZlcnMv e2Jsb2NrID0+IG52ZGltbX0vcG1lbS5jICAgICAgfCAgMjI3ICsrLS0NCiBkcml2ZXJzL252ZGlt bS9yZWdpb24uYyAgICAgICAgICAgICAgIHwgIDExNCArKw0KIGRyaXZlcnMvbnZkaW1tL3JlZ2lv bl9kZXZzLmMgICAgICAgICAgfCAgNzg3ICsrKysrKysrKysrKysrDQogZnMvYmxvY2tfZGV2LmMg ICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDQgKy0NCiBpbmNsdWRlL2xpbnV4L2FjcGkuaCAg ICAgICAgICAgICAgICAgIHwgICAgNSArDQogaW5jbHVkZS9saW51eC9jb21waWxlci5oICAgICAg ICAgICAgICB8ICAgIDIgKw0KIGluY2x1ZGUvbGludXgvZWZpLmggICAgICAgICAgICAgICAgICAg fCAgICAzICstDQogaW5jbHVkZS9saW51eC9saWJudmRpbW0uaCAgICAgICAgICAgICB8ICAxNTEg KysrDQogaW5jbHVkZS9saW51eC9uZC5oICAgICAgICAgICAgICAgICAgICB8ICAxNTEgKysrDQog aW5jbHVkZS9saW51eC9wbWVtLmggICAgICAgICAgICAgICAgICB8ICAxNTMgKysrDQogaW5jbHVk ZS91YXBpL2xpbnV4L0tidWlsZCAgICAgICAgICAgICB8ICAgIDEgKw0KIGluY2x1ZGUvdWFwaS9s aW51eC9uZGN0bC5oICAgICAgICAgICAgfCAgMTk3ICsrKysNCiBsaWIvS2NvbmZpZyAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwgICAgMyArDQogdG9vbHMvdGVzdGluZy9udmRpbW0vS2J1aWxk ICAgICAgICAgICB8ICAgNDAgKw0KIHRvb2xzL3Rlc3RpbmcvbnZkaW1tL01ha2VmaWxlICAgICAg ICAgfCAgICA3ICsNCiB0b29scy90ZXN0aW5nL252ZGltbS9jb25maWdfY2hlY2suYyAgIHwgICAx NSArDQogdG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9LYnVpbGQgICAgICB8ICAgIDggKw0KIHRv b2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYyAgICAgfCAgMTUxICsrKw0KIHRvb2xzL3Rl c3RpbmcvbnZkaW1tL3Rlc3QvbmZpdC5jICAgICAgfCAxMTE2ICsrKysrKysrKysrKysrKysrKysr DQogdG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9uZml0X3Rlc3QuaCB8ICAgMjkgKw0KIDU3IGZp bGVzIGNoYW5nZWQsIDEzODQzIGluc2VydGlvbnMoKyksIDE1NCBkZWxldGlvbnMoLSkNCiBjcmVh dGUgbW9kZSAxMDA2NDQgRG9jdW1lbnRhdGlvbi9udmRpbW0vYnR0LnR4dA0KIGNyZWF0ZSBtb2Rl IDEwMDY0NCBEb2N1bWVudGF0aW9uL252ZGltbS9udmRpbW0udHh0DQogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvYWNwaS9uZml0LmMNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9hY3Bp L25maXQuaA0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL252ZGltbS9LY29uZmlnDQogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbnZkaW1tL01ha2VmaWxlDQogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvbnZkaW1tL2Jsay5jDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbnZk aW1tL2J0dC5jDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbnZkaW1tL2J0dC5oDQogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbnZkaW1tL2J0dF9kZXZzLmMNCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9udmRpbW0vYnVzLmMNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9u dmRpbW0vY29yZS5jDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbnZkaW1tL2RpbW0uYw0K IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL252ZGltbS9kaW1tX2RldnMuYw0KIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL252ZGltbS9sYWJlbC5jDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvbnZkaW1tL2xhYmVsLmgNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9udmRpbW0v bmFtZXNwYWNlX2RldnMuYw0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL252ZGltbS9uZC1j b3JlLmgNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9udmRpbW0vbmQuaA0KIHJlbmFtZSBk cml2ZXJzL3tibG9jayA9PiBudmRpbW19L3BtZW0uYyAoNTAlKQ0KIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL252ZGltbS9yZWdpb24uYw0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL252 ZGltbS9yZWdpb25fZGV2cy5jDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvbGludXgvbGli bnZkaW1tLmgNCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9saW51eC9uZC5oDQogY3JlYXRl IG1vZGUgMTAwNjQ0IGluY2x1ZGUvbGludXgvcG1lbS5oDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGlu Y2x1ZGUvdWFwaS9saW51eC9uZGN0bC5oDQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL3Rlc3Rp bmcvbnZkaW1tL0tidWlsZA0KIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy90ZXN0aW5nL252ZGlt bS9NYWtlZmlsZQ0KIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy90ZXN0aW5nL252ZGltbS9jb25m aWdfY2hlY2suYw0KIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy90ZXN0aW5nL252ZGltbS90ZXN0 L0tidWlsZA0KIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lv bWFwLmMNCiBjcmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9uZml0 LmMNCiBjcmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9uZml0X3Rl c3QuaA0KDQoNCmNvbW1pdCBhZDVmYjg3MGM0ODZkOTMyYTE3NDlkNzg1M2RkNzBmNDM2YTdlMDNm DQpBdXRob3I6IERhbiBXaWxsaWFtcyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tPg0KRGF0ZTog ICBGcmkgQXByIDMgMTI6MDU6MjggMjAxNSAtMDQwMA0KDQogICAgZTgyMCwgZWZpOiBhZGQgQUNQ SSA2LjAgcGVyc2lzdGVudCBtZW1vcnkgdHlwZXMNCiAgICANCiAgICBBQ1BJIDYuMCBmb3JtYWxp emVzIGU4MjAtdHlwZS03IGFuZCBlZmktdHlwZS0xNCBhcyBwZXJzaXN0ZW50IG1lbW9yeS4NCiAg ICBNYXJrIGl0ICJyZXNlcnZlZCIgYW5kIGFsbG93IGl0IHRvIGJlIGNsYWltZWQgYnkgYSBwZXJz aXN0ZW50IG1lbW9yeQ0KICAgIGRldmljZSBkcml2ZXIuDQogICAgDQogICAgVGhpcyBkZWZpbml0 aW9uIGlzIGluIGFkZGl0aW9uIHRvIHRoZSBMaW51eCBrZXJuZWwncyBleGlzdGluZyB0eXBlLTEy DQogICAgZGVmaW5pdGlvbiB0aGF0IHdhcyByZWNlbnRseSBhZGRlZCBpbiBzdXBwb3J0IG9mIHNo aXBwaW5nIHBsYXRmb3JtcyB3aXRoDQogICAgTlZESU1NIHN1cHBvcnQgdGhhdCBwcmVkYXRlIEFD UEkgNi4wICh3aGljaCBub3cgY2xhc3NpZmllcyB0eXBlLTEyIGFzDQogICAgT0VNIHJlc2VydmVk KS4NCiAgICANCiAgICBOb3RlLCAvcHJvYy9pb21lbSBjYW4gYmUgY29uc3VsdGVkIGZvciBkaWZm ZXJlbnRpYXRpbmcgbGVnYWN5DQogICAgIlBlcnNpc3RlbnQgTWVtb3J5IChsZWdhY3kpIiBFODIw X1BSQU0gdnMgc3RhbmRhcmQgIlBlcnNpc3RlbnQgTWVtb3J5Ig0KICAgIEU4MjBfUE1FTS4NCiAg ICANCiAgICBDYzogQm9heiBIYXJyb3NoIDxib2F6QHBsZXhpc3Rvci5jb20+DQogICAgQ2M6IElu Z28gTW9sbmFyIDxtaW5nb0BrZXJuZWwub3JnPg0KICAgIENjOiBDaHJpc3RvcGggSGVsbHdpZyA8 aGNoQGxzdC5kZT4NCiAgICBDYzogQW5kcmV3IE1vcnRvbiA8YWtwbUBsaW51eC1mb3VuZGF0aW9u Lm9yZz4NCiAgICBDYzogQm9yaXNsYXYgUGV0a292IDxicEBhbGllbjguZGU+DQogICAgQ2M6IEgu IFBldGVyIEFudmluIDxocGFAenl0b3IuY29tPg0KICAgIENjOiBKZW5zIEF4Ym9lIDxheGJvZUBm Yi5jb20+DQogICAgQ2M6IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0BsaW51eC1mb3VuZGF0aW9u Lm9yZz4NCiAgICBDYzogTWF0dGhldyBXaWxjb3ggPHdpbGx5QGxpbnV4LmludGVsLmNvbT4NCiAg ICBDYzogVGhvbWFzIEdsZWl4bmVyIDx0Z2x4QGxpbnV0cm9uaXguZGU+DQogICAgQWNrZWQtYnk6 IEplZmYgTW95ZXIgPGptb3llckByZWRoYXQuY29tPg0KICAgIEFja2VkLWJ5OiBBbmR5IEx1dG9t aXJza2kgPGx1dG9AYW1hY2FwaXRhbC5uZXQ+DQogICAgUmV2aWV3ZWQtYnk6IFJvc3MgWndpc2xl ciA8cm9zcy56d2lzbGVyQGxpbnV4LmludGVsLmNvbT4NCiAgICBBY2tlZC1ieTogQ2hyaXN0b3Bo IEhlbGx3aWcgPGhjaEBsc3QuZGU+DQogICAgVGVzdGVkLWJ5OiBUb3NoaSBLYW5pIDx0b3NoaS5r YW5pQGhwLmNvbT4NCiAgICBTaWduZWQtb2ZmLWJ5OiBEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxp YW1zQGludGVsLmNvbT4NCg0KY29tbWl0IGI5NGQ1MjMwZDA2ZWI5MzBiZTgyZTY3ZmIxYTlhNTgy NzFlNzgyOTcNCkF1dGhvcjogRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRlbC5jb20+ DQpEYXRlOiAgIFR1ZSBNYXkgMTkgMjI6NTQ6MzEgMjAxNSAtMDQwMA0KDQogICAgbGlibnZkaW1t LCBuZml0OiBpbml0aWFsIGxpYm52ZGltbSBpbmZyYXN0cnVjdHVyZSBhbmQgTkZJVCBzdXBwb3J0 DQogICAgDQogICAgQSBzdHJ1Y3QgbnZkaW1tX2J1cyBpcyB0aGUgYW5jaG9yIGRldmljZSBmb3Ig cmVnaXN0ZXJpbmcgbnZkaW1tDQogICAgcmVzb3VyY2VzIGFuZCBpbnRlcmZhY2VzLCBmb3IgZXhh bXBsZSwgYSBjaGFyYWN0ZXIgY29udHJvbCBkZXZpY2UsDQogICAgbnZkaW1tIGRldmljZXMsIGFu ZCBJL08gcmVnaW9uIGRldmljZXMuICBUaGUgQUNQSSBORklUIChOVkRJTU0gRmlybXdhcmUNCiAg ICBJbnRlcmZhY2UgVGFibGUpIGlzIG9uZSBwb3NzaWJsZSBwbGF0Zm9ybSBkZXNjcmlwdGlvbiBm b3Igc3VjaA0KICAgIG5vbi12b2xhdGlsZSBtZW1vcnkgcmVzb3VyY2VzIGluIGEgc3lzdGVtLiAg VGhlIG5maXQua28gZHJpdmVyIGF0dGFjaGVzDQogICAgdG8gdGhlICJBQ1BJMDAxMiIgZGV2aWNl IHRoYXQgaW5kaWNhdGVzIHRoZSBwcmVzZW5jZSBvZiB0aGUgTkZJVCBhbmQNCiAgICBwYXJzZXMg dGhlIHRhYmxlIHRvIHJlZ2lzdGVyIGEgc3RydWN0IG52ZGltbV9idXMgaW5zdGFuY2UuDQogICAg DQogICAgQ2M6IDxsaW51eC1hY3BpQHZnZXIua2VybmVsLm9yZz4NCiAgICBDYzogTHYgWmhlbmcg PGx2LnpoZW5nQGludGVsLmNvbT4NCiAgICBDYzogUm9iZXJ0IE1vb3JlIDxyb2JlcnQubW9vcmVA aW50ZWwuY29tPg0KICAgIENjOiBSYWZhZWwgSi4gV3lzb2NraSA8cmFmYWVsLmoud3lzb2NraUBp bnRlbC5jb20+DQogICAgQWNrZWQtYnk6IEplZmYgTW95ZXIgPGptb3llckByZWRoYXQuY29tPg0K ICAgIEFja2VkLWJ5OiBDaHJpc3RvcGggSGVsbHdpZyA8aGNoQGxzdC5kZT4NCiAgICBBY2tlZC1i eTogUmFmYWVsIEouIFd5c29ja2kgPHJhZmFlbC5qLnd5c29ja2lAaW50ZWwuY29tPg0KICAgIFRl c3RlZC1ieTogVG9zaGkgS2FuaSA8dG9zaGkua2FuaUBocC5jb20+DQogICAgU2lnbmVkLW9mZi1i eTogRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRlbC5jb20+DQoNCmNvbW1pdCA0NWRl ZjIyYzFmYWI4NTc2NDY0Njc0NmNlMzhkNDViMmYzMjgxZmE1DQpBdXRob3I6IERhbiBXaWxsaWFt cyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tPg0KRGF0ZTogICBTdW4gQXByIDI2IDE5OjI2OjQ4 IDIwMTUgLTA0MDANCg0KICAgIGxpYm52ZGltbTogY29udHJvbCBjaGFyYWN0ZXIgZGV2aWNlIGFu ZCBudmRpbW1fYnVzIHN5c2ZzIGF0dHJpYnV0ZXMNCiAgICANCiAgICBUaGUgY29udHJvbCBkZXZp Y2UgZm9yIGEgbnZkaW1tX2J1cyBpcyByZWdpc3RlcmVkIGFzIGFuICJuZCIgY2xhc3MNCiAgICBk ZXZpY2UuICBUaGUgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGVyZSB3aWxsIHVzdWFsbHkgb25seSBi ZSBvbmUgIm5kIiBidXMNCiAgICByZWdpc3RlcmVkIHVuZGVyIC9zeXMvY2xhc3MvbmQuICBIb3dl dmVyLCB3ZSBhbGxvdyBmb3IgdGhlIHBvc3NpYmlsaXR5DQogICAgb2YgbXVsdGlwbGUgYnVzZXMg YW5kIHRoZXkgd2lsbCBsaXN0ZWQgaW4gZGlzY292ZXJ5IG9yZGVyIGFzDQogICAgbmRjdGwwLi4u bmRjdGxOLiAgVGhpcyBjaGFyYWN0ZXIgZGV2aWNlIGhvc3RzIHRoZSBpb2N0bCBmb3IgcGFzc2lu Zw0KICAgIGNvbnRyb2wgbWVzc2FnZXMuICBUaGUgaW5pdGlhbCBjb21tYW5kIHNldCBoYXMgYSAx OjEgY29ycmVsYXRpb24gd2l0aA0KICAgIHRoZSBjb21tYW5kcyBsaXN0ZWQgaW4gdGhlIGJ5IHRo ZSAiTkZJVCBEU00gRXhhbXBsZSIgZG9jdW1lbnQgWzFdLCBidXQNCiAgICB0aGlzIHNjaGVtZSBp cyBleHRlbnNpYmxlIHRvIGZ1dHVyZSBjb21tYW5kIHNldHMuDQogICAgDQogICAgTm90ZSwgbmRf aW9jdGwoKSBhbmQgdGhlIGJhY2tpbmcgLT5uZGN0bCgpIGltcGxlbWVudGF0aW9uIGFyZSBkZWZp bmVkIGluDQogICAgYSBzdWJzZXF1ZW50IHBhdGNoLiAgVGhpcyBpcyBzaW1wbHkgdGhlIGluaXRp YWwgcmVnaXN0cmF0aW9ucyBhbmQgc3lzZnMNCiAgICBhdHRyaWJ1dGVzLg0KICAgIA0KICAgIFsx XTogaHR0cDovL3BtZW0uaW8vZG9jdW1lbnRzL05WRElNTV9EU01fSW50ZXJmYWNlX0V4YW1wbGUu cGRmDQogICAgDQogICAgQ2M6IE5laWwgQnJvd24gPG5laWxiQHN1c2UuZGU+DQogICAgQ2M6IEdy ZWcgS0ggPGdyZWdraEBsaW51eGZvdW5kYXRpb24ub3JnPg0KICAgIENjOiA8bGludXgtYWNwaUB2 Z2VyLmtlcm5lbC5vcmc+DQogICAgQ2M6IFJvYmVydCBNb29yZSA8cm9iZXJ0Lm1vb3JlQGludGVs LmNvbT4NCiAgICBDYzogUmFmYWVsIEouIFd5c29ja2kgPHJhZmFlbC5qLnd5c29ja2lAaW50ZWwu Y29tPg0KICAgIEFja2VkLWJ5OiBDaHJpc3RvcGggSGVsbHdpZyA8aGNoQGxzdC5kZT4NCiAgICBB Y2tlZC1ieTogUmFmYWVsIEouIFd5c29ja2kgPHJhZmFlbC5qLnd5c29ja2lAaW50ZWwuY29tPg0K ICAgIFRlc3RlZC1ieTogVG9zaGkgS2FuaSA8dG9zaGkua2FuaUBocC5jb20+DQogICAgU2lnbmVk LW9mZi1ieTogRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRlbC5jb20+DQoNCmNvbW1p dCBlNmRmYjJkZTQ3NzY4ZWZlOGNjMzdjOWExODYzZDJhZmY4MTQ0MGZiDQpBdXRob3I6IERhbiBX aWxsaWFtcyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tPg0KRGF0ZTogICBTYXQgQXByIDI1IDAz OjU2OjE3IDIwMTUgLTA0MDANCg0KICAgIGxpYm52ZGltbSwgbmZpdDogZGltbS9tZW1vcnktZGV2 aWNlcw0KICAgIA0KICAgIEVuYWJsZSBudmRpbW0gZGV2aWNlcyB0byBiZSByZWdpc3RlcmVkIG9u IGEgbnZkaW1tX2J1cy4gIFRoZSBrZXJuZWwNCiAgICBhc3NpZ25lZCBkZXZpY2UgaWQgZm9yIG52 ZGltbSBkZXZpY2VzaXMgZHluYW1pYy4gIElmIHVzZXJzcGFjZSBuZWVkcyBhDQogICAgbW9yZSBz dGF0aWMgaWRlbnRpZmllciBpdCBzaG91bGQgY29uc3VsdCBhIHByb3ZpZGVyLXNwZWNpZmljIGF0 dHJpYnV0ZS4NCiAgICBJbiB0aGUgY2FzZSB3aGVyZSBORklUIGlzIHRoZSBwcm92aWRlciwgdGhl ICdubWVtWC9uZml0L2hhbmRsZScgb3INCiAgICAnbm1lbVgvbmZpdC9zZXJpYWwnIGF0dHJpYnV0 ZXMgbWF5IGJlIHVzZWQgZm9yIHRoaXMgcHVycG9zZS4NCiAgICANCiAgICBDYzogTmVpbCBCcm93 biA8bmVpbGJAc3VzZS5kZT4NCiAgICBDYzogPGxpbnV4LWFjcGlAdmdlci5rZXJuZWwub3JnPg0K ICAgIENjOiBHcmVnIEtIIDxncmVna2hAbGludXhmb3VuZGF0aW9uLm9yZz4NCiAgICBDYzogUm9i ZXJ0IE1vb3JlIDxyb2JlcnQubW9vcmVAaW50ZWwuY29tPg0KICAgIENjOiBSYWZhZWwgSi4gV3lz b2NraSA8cmFmYWVsLmoud3lzb2NraUBpbnRlbC5jb20+DQogICAgQWNrZWQtYnk6IENocmlzdG9w aCBIZWxsd2lnIDxoY2hAbHN0LmRlPg0KICAgIEFja2VkLWJ5OiBSYWZhZWwgSi4gV3lzb2NraSA8 cmFmYWVsLmoud3lzb2NraUBpbnRlbC5jb20+DQogICAgVGVzdGVkLWJ5OiBUb3NoaSBLYW5pIDx0 b3NoaS5rYW5pQGhwLmNvbT4NCiAgICBTaWduZWQtb2ZmLWJ5OiBEYW4gV2lsbGlhbXMgPGRhbi5q LndpbGxpYW1zQGludGVsLmNvbT4NCg0KY29tbWl0IDYyMjMyZTQ1ZjRhMjY1YWJiNDNmMGFjZjE2 ZTU4ZjVkMGI2ZTFlYzkNCkF1dGhvcjogRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRl bC5jb20+DQpEYXRlOiAgIE1vbiBKdW4gOCAxNDoyNzowNiAyMDE1IC0wNDAwDQoNCiAgICBsaWJu dmRpbW06IGNvbnRyb2wgKGlvY3RsKSBtZXNzYWdlcyBmb3IgbnZkaW1tX2J1cyBhbmQgbnZkaW1t IGRldmljZXMNCiAgICANCiAgICBNb3N0IGRpc2NvdmVyeS9jb25maWd1cmF0aW9uIG9mIHRoZSBu dmRpbW0tc3Vic3lzdGVtIGlzIGRvbmUgdmlhIHN5c2ZzDQogICAgYXR0cmlidXRlcy4gIEhvd2V2 ZXIsIHNvbWUgbnZkaW1tX2J1cyBpbnN0YW5jZXMsIHBhcnRpY3VsYXJseSB0aGUNCiAgICBBQ1BJ Lk5GSVQgYnVzLCBkZWZpbmUgYSBzbWFsbCBzZXQgb2YgbWVzc2FnZXMgdGhhdCBjYW4gYmUgcGFz c2VkIHRvIHRoZQ0KICAgIHBsYXRmb3JtLiAgRm9yIGNvbnZlbmllbmNlIHdlIGRlcml2ZSB0aGUg aW5pdGlhbCBsaWJudmRpbW0taW9jdGwgY29tbWFuZA0KICAgIGZvcm1hdHMgZGlyZWN0bHkgZnJv bSB0aGUgTkZJVCBEU00gSW50ZXJmYWNlIEV4YW1wbGUgZm9ybWF0cy4NCiAgICANCiAgICAgICAg TkRfQ01EX1NNQVJUOiBtZWRpYSBoZWFsdGggYW5kIGRpYWdub3N0aWNzDQogICAgICAgIE5EX0NN RF9HRVRfQ09ORklHX1NJWkU6IHNpemUgb2YgdGhlIGxhYmVsIHNwYWNlDQogICAgICAgIE5EX0NN RF9HRVRfQ09ORklHX0RBVEE6IHJlYWQgbGFiZWwgc3BhY2UNCiAgICAgICAgTkRfQ01EX1NFVF9D T05GSUdfREFUQTogd3JpdGUgbGFiZWwgc3BhY2UNCiAgICAgICAgTkRfQ01EX1ZFTkRPUjogdmVu ZG9yLXNwZWNpZmljIGNvbW1hbmQgcGFzc3Rocm91Z2gNCiAgICAgICAgTkRfQ01EX0FSU19DQVA6 IHJlcG9ydCBhZGRyZXNzLXJhbmdlLXNjcnViYmluZyBjYXBhYmlsaXRpZXMNCiAgICAgICAgTkRf Q01EX0FSU19TVEFSVDogaW5pdGlhdGUgc2NydWJiaW5nDQogICAgICAgIE5EX0NNRF9BUlNfU1RB VFVTOiByZXBvcnQgb24gc2NydWJiaW5nIHN0YXRlDQogICAgICAgIE5EX0NNRF9TTUFSVF9USFJF U0hPTEQ6IGNvbmZpZ3VyZSBhbGFybSB0aHJlc2hvbGRzIGZvciBzbWFydCBldmVudHMNCiAgICAN CiAgICBJZiBhIHBsYXRmb3JtIGxhdGVyIGRlZmluZXMgZGlmZmVyZW50IGNvbW1hbmRzIHRoYW4g dGhpcyBzZXQgaXQgaXMNCiAgICBzdHJhaWdodGZvcndhcmQgdG8gZXh0ZW5kIHN1cHBvcnQgdG8g dGhvc2UgZm9ybWF0cy4NCiAgICANCiAgICBNb3N0IG9mIHRoZSBjb21tYW5kcyB0YXJnZXQgYSBz cGVjaWZpYyBkaW1tLiAgSG93ZXZlciwgdGhlDQogICAgYWRkcmVzcy1yYW5nZS1zY3J1YmJpbmcg Y29tbWFuZHMgdGFyZ2V0IHRoZSBidXMuICBUaGUgJ2NvbW1hbmRzJw0KICAgIGF0dHJpYnV0ZSBp biBzeXNmcyBvZiBhbiBudmRpbW1fYnVzLCBvciBudmRpbW0sIGVudW1lcmF0ZSB0aGUgc3VwcG9y dGVkDQogICAgY29tbWFuZHMgZm9yIHRoYXQgb2JqZWN0Lg0KICAgIA0KICAgIENjOiA8bGludXgt YWNwaUB2Z2VyLmtlcm5lbC5vcmc+DQogICAgQ2M6IFJvYmVydCBNb29yZSA8cm9iZXJ0Lm1vb3Jl QGludGVsLmNvbT4NCiAgICBDYzogUmFmYWVsIEouIFd5c29ja2kgPHJhZmFlbC5qLnd5c29ja2lA aW50ZWwuY29tPg0KICAgIFJlcG9ydGVkLWJ5OiBOaWNob2xhcyBNb3VsaW4gPG5pY2hvbGFzLncu bW91bGluQGxpbnV4LmludGVsLmNvbT4NCiAgICBBY2tlZC1ieTogQ2hyaXN0b3BoIEhlbGx3aWcg PGhjaEBsc3QuZGU+DQogICAgU2lnbmVkLW9mZi1ieTogRGFuIFdpbGxpYW1zIDxkYW4uai53aWxs aWFtc0BpbnRlbC5jb20+DQoNCmNvbW1pdCA0ZDg4YTk3YWE5ZThjZmE2NDYwYWFiMTE5YzVkYTYw YWQyMjY3NDIzDQpBdXRob3I6IERhbiBXaWxsaWFtcyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwuY29t Pg0KRGF0ZTogICBTdW4gTWF5IDMxIDE0OjQxOjQ4IDIwMTUgLTA0MDANCg0KICAgIGxpYm52ZGlt bSwgbnZkaW1tOiBkaW1tIGRyaXZlciBhbmQgYmFzZSBsaWJudmRpbW0gZGV2aWNlLWRyaXZlciBp bmZyYXN0cnVjdHVyZQ0KICAgIA0KICAgICogSW1wbGVtZW50IHRoZSBkZXZpY2UtbW9kZWwgaW5m cmFzdHJ1Y3R1cmUgZm9yIGxvYWRpbmcgbW9kdWxlcyBhbmQNCiAgICAgIGF0dGFjaGluZyBkcml2 ZXJzIHRvIG52ZGltbSBkZXZpY2VzLiAgVGhpcyBpcyBhIHNpbXBsZSBhc3NvY2lhdGlvbiBvZiBh DQogICAgICBuZC1kZXZpY2UtdHlwZSBudW1iZXIgd2l0aCBhIGRyaXZlciB0aGF0IGhhcyBhIGJp dG1hc2sgb2Ygc3VwcG9ydGVkDQogICAgICBkZXZpY2UgdHlwZXMuICBUbyBmYWNpbGl0YXRlIHVz ZXJzcGFjZSBiaW5kL3VuYmluZCBvcGVyYXRpb25zICdtb2RhbGlhcycNCiAgICAgIGFuZCAnZGV2 dHlwZScsIHRoYXQgYWxzbyBhcHBlYXIgaW4gdGhlIHVldmVudCwgYXJlIGFkZGVkIGFzIGdlbmVy aWMNCiAgICAgIHN5c2ZzIGF0dHJpYnV0ZXMgZm9yIGFsbCBudmRpbW0gZGV2aWNlcy4gIFRoZSBy ZWFzb24gZm9yIHRoZSBkZXZpY2UtdHlwZQ0KICAgICAgbnVtYmVyIGlzIHRvIHN1cHBvcnQgc3Vi LXR5cGVzIHdpdGhpbiBhIGdpdmVuIHBhcmVudCBkZXZ0eXBlLCBiZSBpdCBhDQogICAgICB2ZW5k b3Itc3BlY2lmaWMgc3ViLXR5cGUgb3Igb3RoZXJ3aXNlLg0KICAgIA0KICAgICogVGhlIGZpcnN0 IGNvbnN1bWVyIG9mIHRoaXMgaW5mcmFzdHJ1Y3R1cmUgaXMgdGhlIGRyaXZlcg0KICAgICAgZm9y IGRpbW0gZGV2aWNlcy4gIEl0IHNpbXBseSB1c2VzIGNvbnRyb2wgbWVzc2FnZXMgdG8gcmV0cmll dmUgYW5kDQogICAgICBzdG9yZSB0aGUgY29uZmlndXJhdGlvbi1kYXRhIGltYWdlIChsYWJlbCBz ZXQpIGZyb20gZWFjaCBkaW1tLg0KICAgIA0KICAgIE5vdGU6IG5kX2RldmljZV9yZWdpc3Rlcigp IGFycmFuZ2VzIGZvciBhc3luY2hyb25vdXMgcmVnaXN0cmF0aW9uIG9mDQogICAgICAgICAgbnZk aW1tIGJ1cyBkZXZpY2VzIGJ5IGRlZmF1bHQuDQogICAgDQogICAgQ2M6IEdyZWcgS0ggPGdyZWdr aEBsaW51eGZvdW5kYXRpb24ub3JnPg0KICAgIENjOiBOZWlsIEJyb3duIDxuZWlsYkBzdXNlLmRl Pg0KICAgIEFja2VkLWJ5OiBDaHJpc3RvcGggSGVsbHdpZyA8aGNoQGxzdC5kZT4NCiAgICBUZXN0 ZWQtYnk6IFRvc2hpIEthbmkgPHRvc2hpLmthbmlAaHAuY29tPg0KICAgIFNpZ25lZC1vZmYtYnk6 IERhbiBXaWxsaWFtcyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tPg0KDQpjb21taXQgMWY3ZGY2 Zjg4YjkyNDVhN2YyZDBmOGVjYmM5N2RjODhjOGQwZDhlMQ0KQXV0aG9yOiBEYW4gV2lsbGlhbXMg PGRhbi5qLndpbGxpYW1zQGludGVsLmNvbT4NCkRhdGU6ICAgVHVlIEp1biA5IDIwOjEzOjE0IDIw MTUgLTA0MDANCg0KICAgIGxpYm52ZGltbSwgbmZpdDogcmVnaW9ucyAoYmxvY2stZGF0YS13aW5k b3csIHBlcnNpc3RlbnQgbWVtb3J5LCB2b2xhdGlsZSBtZW1vcnkpDQogICAgDQogICAgQSAicmVn aW9uIiBkZXZpY2UgcmVwcmVzZW50cyB0aGUgbWF4aW11bSBjYXBhY2l0eSBvZiBhIEJMSyByYW5n ZSAobW1pbw0KICAgIGJsb2NrLWRhdGEtd2luZG93KHMpKSwgb3IgYSBQTUVNIHJhbmdlIChEQVgt Y2FwYWJsZSBwZXJzaXN0ZW50IG1lbW9yeSBvcg0KICAgIHZvbGF0aWxlIG1lbW9yeSksIHdpdGhv dXQgcmVnYXJkIGZvciBhbGlhc2luZy4gIEFsaWFzaW5nLCBpbiB0aGUNCiAgICBkaW1tLWxvY2Fs IGFkZHJlc3Mgc3BhY2UgKERQQSksIGlzIHJlc29sdmVkIGJ5IG1ldGFkYXRhIG9uIGEgZGltbSB0 bw0KICAgIGRlc2lnbmF0ZSB3aGljaCBleGNsdXNpdmUgaW50ZXJmYWNlIHdpbGwgYWNjZXNzIHRo ZSBhbGlhc2VkIERQQSByYW5nZXMuDQogICAgU3VwcG9ydCBmb3IgdGhlIHBlci1kaW1tIG1ldGFk YXRhL2xhYmVsIGFycnZpZXMgaXMgaW4gYSBzdWJzZXF1ZW50DQogICAgcGF0Y2guDQogICAgDQog ICAgVGhlIG5hbWUgZm9ybWF0IG9mICJyZWdpb24iIGRldmljZXMgaXMgInJlZ2lvbk4iIHdoZXJl LCBsaWtlIGRpbW1zLCBOIGlzDQogICAgYSBnbG9iYWwgaWRhIGluZGV4IGFzc2lnbmVkIGF0IGRp c2NvdmVyeSB0aW1lLiAgVGhpcyBpZCBpcyBub3QgcmVsaWFibGUNCiAgICBhY3Jvc3MgcmVib290 cyBub3IgaW4gdGhlIHByZXNlbmNlIG9mIGhvdHBsdWcuICBMb29rIHRvIGF0dHJpYnV0ZXMgb2YN CiAgICB0aGUgcmVnaW9uIG9yIHN0YXRpYyBpZC1kYXRhIG9mIHRoZSBzdWItbmFtZXNwYWNlIHRv IGdlbmVyYXRlIGENCiAgICBwZXJzaXN0ZW50IG5hbWUuICBIb3dldmVyLCBpZiB0aGUgcGxhdGZv cm0gY29uZmlndXJhdGlvbiBkb2VzIG5vdCBjaGFuZ2UNCiAgICBpdCBpcyByZWFzb25hYmxlIHRv IGV4cGVjdCB0aGUgc2FtZSByZWdpb24gaWQgdG8gYmUgYXNzaWduZWQgYXQgdGhlIG5leHQNCiAg ICBib290Lg0KICAgIA0KICAgICJyZWdpb24icyBoYXZlIDIgZ2VuZXJpYyBhdHRyaWJ1dGVzICJz aXplIiwgYW5kICJtYXBwaW5nInMgd2hlcmU6DQogICAgLSBzaXplOiB0aGUgQkxLIGFjY2Vzc2li bGUgY2FwYWNpdHkgb3IgdGhlIHNwYW4gb2YgdGhlDQogICAgICBzeXN0ZW0gcGh5c2ljYWwgYWRk cmVzcyByYW5nZSBpbiB0aGUgY2FzZSBvZiBQTUVNLg0KICAgIA0KICAgIC0gbWFwcGluZ046IGEg dHVwbGUgZGVzY3JpYmluZyBhIGRpbW0ncyBjb250cmlidXRpb24gdG8gdGhlIHJlZ2lvbidzDQog ICAgICBjYXBhY2l0eSBpbiB0aGUgZm9ybWF0ICg8bm1lbVg+LDxkcGE+LDxzaXplPikuICBGb3Ig YSBQTUVNLXJlZ2lvbg0KICAgICAgdGhlcmUgd2lsbCBiZSBhdCBsZWFzdCBvbmUgbWFwcGluZyBw ZXIgZGltbSBpbiB0aGUgaW50ZXJsZWF2ZSBzZXQuICBGb3INCiAgICAgIGEgQkxLLXJlZ2lvbiB0 aGVyZSBpcyBvbmx5ICJtYXBwaW5nMCIgbGlzdGluZyB0aGUgc3RhcnRpbmcgRFBBIG9mIHRoZQ0K ICAgICAgQkxLLXJlZ2lvbiBhbmQgdGhlIGF2YWlsYWJsZSBEUEEgY2FwYWNpdHkgb2YgdGhhdCBz cGFjZSAobWF0Y2hlcyAic2l6ZSINCiAgICAgIGFib3ZlKS4NCiAgICANCiAgICBUaGUgbWF4IG51 bWJlciBvZiBtYXBwaW5ncyBwZXIgInJlZ2lvbiIgaXMgaGFyZCBjb2RlZCBwZXIgdGhlDQogICAg Y29uc3RyYWludHMgb2Ygc3lzZnMgYXR0cmlidXRlIGdyb3Vwcy4gIFRoYXQgc2FpZCB0aGUgbnVt YmVyIG9mIG1hcHBpbmdzDQogICAgcGVyIHJlZ2lvbiBzaG91bGQgbmV2ZXIgZXhjZWVkIHRoZSBt YXhpbXVtIG51bWJlciBvZiBwb3NzaWJsZSBkaW1tcyBpbg0KICAgIHRoZSBzeXN0ZW0uICBJZiB0 aGUgY3VycmVudCBudW1iZXIgdHVybnMgb3V0IHRvIG5vdCBiZSBlbm91Z2ggdGhlbiB0aGUNCiAg ICAibWFwcGluZ3MiIGF0dHJpYnV0ZSBjbGFyaWZpZXMgaG93IG1hbnkgdGhlcmUgYXJlIHN1cHBv c2VkIHRvIGJlLiAiMzINCiAgICBzaG91bGQgYmUgZW5vdWdoIGZvciBhbnlib2R5Li4uIi4NCiAg ICANCiAgICBDYzogTmVpbCBCcm93biA8bmVpbGJAc3VzZS5kZT4NCiAgICBDYzogPGxpbnV4LWFj cGlAdmdlci5rZXJuZWwub3JnPg0KICAgIENjOiBHcmVnIEtIIDxncmVna2hAbGludXhmb3VuZGF0 aW9uLm9yZz4NCiAgICBDYzogUm9iZXJ0IE1vb3JlIDxyb2JlcnQubW9vcmVAaW50ZWwuY29tPg0K ICAgIENjOiBSYWZhZWwgSi4gV3lzb2NraSA8cmFmYWVsLmoud3lzb2NraUBpbnRlbC5jb20+DQog ICAgQWNrZWQtYnk6IENocmlzdG9waCBIZWxsd2lnIDxoY2hAbHN0LmRlPg0KICAgIEFja2VkLWJ5 OiBSYWZhZWwgSi4gV3lzb2NraSA8cmFmYWVsLmoud3lzb2NraUBpbnRlbC5jb20+DQogICAgVGVz dGVkLWJ5OiBUb3NoaSBLYW5pIDx0b3NoaS5rYW5pQGhwLmNvbT4NCiAgICBTaWduZWQtb2ZmLWJ5 OiBEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxpYW1zQGludGVsLmNvbT4NCg0KY29tbWl0IDNkODgw MDJlNGE3YmQ0MGYzNTU1NTAyODRjNmNkMTQwZTZmZTI5ZGMNCkF1dGhvcjogRGFuIFdpbGxpYW1z IDxkYW4uai53aWxsaWFtc0BpbnRlbC5jb20+DQpEYXRlOiAgIFN1biBNYXkgMzEgMTU6MDI6MTEg MjAxNSAtMDQwMA0KDQogICAgbGlibnZkaW1tOiBzdXBwb3J0IGZvciBsZWdhY3kgKG5vbi1hbGlh c2luZykgbnZkaW1tcw0KICAgIA0KICAgIFRoZSBsaWJudmRpbW0gcmVnaW9uIGRyaXZlciBpcyBh biBpbnRlcm1lZGlhcnkgZHJpdmVyIHRoYXQgdHJhbnNsYXRlcw0KICAgIG5vbi12b2xhdGlsZSAi cmVnaW9uInMgaW50byAibmFtZXNwYWNlIiBzdWItZGV2aWNlcyB0aGF0IGFyZSBzdXJmYWNlZCBi eQ0KICAgIHBlcnNpc3RlbnQgbWVtb3J5IGJsb2NrLWRldmljZSBkcml2ZXJzIChQTUVNIGFuZCBC TEspLg0KICAgIA0KICAgIEFDUEkgNiBpbnRyb2R1Y2VzIHRoZSBjb25jZXB0IHRoYXQgYSBnaXZl biBudmRpbW0gbWF5IHNpbXVsdGFuZW91c2x5DQogICAgb2ZmZXIgbXVsdGlwbGUgYWNjZXNzIG1v ZGVzIHRvIGl0cyBtZWRpYSB0aHJvdWdoIGRpcmVjdCBQTUVNIGxvYWQvc3RvcmUNCiAgICBhY2Nl c3MsIG9yIHdpbmRvd2VkIEJMSyBtb2RlLiAgRXhpc3RpbmcgbnZkaW1tcyBtb3N0bHkgaW1wbGVt ZW50IGEgUE1FTQ0KICAgIGludGVyZmFjZSwgc29tZSBvZmZlciBhIEJMSy1saWtlIG1vZGUsIGJ1 dCBuZXZlciBib3RoIGFzIEFDUEkgNiBkZWZpbmVzLg0KICAgIElmIGFuIG52ZGltbSBpcyBzaW5n bGUgaW50ZXJmYWNlZCwgdGhlbiB0aGVyZSBpcyBubyBuZWVkIGZvciBkaW1tDQogICAgbWV0YWRh dGEgbGFiZWxzLiAgRm9yIHRoZXNlIGRldmljZXMgd2UgY2FuIHRha2UgdGhlIHJlZ2lvbiBib3Vu ZGFyaWVzDQogICAgZGlyZWN0bHkgdG8gY3JlYXRlIGEgY2hpbGQgbmFtZXNwYWNlIGRldmljZSAo bmRfbmFtZXNwYWNlX2lvKS4NCiAgICANCiAgICBBY2tlZC1ieTogQ2hyaXN0b3BoIEhlbGx3aWcg PGhjaEBsc3QuZGU+DQogICAgVGVzdGVkLWJ5OiBUb3NoaSBLYW5pIDx0b3NoaS5rYW5pQGhwLmNv bT4NCiAgICBTaWduZWQtb2ZmLWJ5OiBEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxpYW1zQGludGVs LmNvbT4NCg0KY29tbWl0IDE4ZGEyYzllZTQxYTAzNmJmNDcwZGJhZDczYzE4YTgxNTcyNWQzNmUN CkF1dGhvcjogRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRlbC5jb20+DQpEYXRlOiAg IFR1ZSBKdW4gOSAxNDoxMzozNyAyMDE1IC0wNDAwDQoNCiAgICBsaWJudmRpbW0sIHBtZW06IG1v dmUgcG1lbSB0byBkcml2ZXJzL252ZGltbS8NCiAgICANCiAgICBQcmVwYXJlIHRoZSBwbWVtIGRy aXZlciB0byBjb25zdW1lIFBNRU0gbmFtZXNwYWNlcyBlbWl0dGVkIGJ5IHJlZ2lvbnMgb2YNCiAg ICBhbiBudmRpbW1fYnVzIGluc3RhbmNlLiAgTm8gZnVuY3Rpb25hbCBjaGFuZ2UuDQogICAgDQog ICAgQWNrZWQtYnk6IENocmlzdG9waCBIZWxsd2lnIDxoY2hAbHN0LmRlPg0KICAgIFRlc3RlZC1i eTogVG9zaGkgS2FuaSA8dG9zaGkua2FuaUBocC5jb20+DQogICAgU2lnbmVkLW9mZi1ieTogRGFu IFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRlbC5jb20+DQoNCmNvbW1pdCA5ZjUzZjlmYTRh ZDFkOGJkZGQ0ZDE0MzU5Y2RhYmM1MzFhZWRmZmU4DQpBdXRob3I6IERhbiBXaWxsaWFtcyA8ZGFu Lmoud2lsbGlhbXNAaW50ZWwuY29tPg0KRGF0ZTogICBUdWUgSnVuIDkgMTU6MzM6NDUgMjAxNSAt MDQwMA0KDQogICAgbGlibnZkaW1tLCBwbWVtOiBhZGQgbGlibnZkaW1tIHN1cHBvcnQgdG8gdGhl IHBtZW0gZHJpdmVyDQogICAgDQogICAgbmRfcG1lbSBhdHRhY2hlcyB0byBwZXJzaXN0ZW50IG1l bW9yeSByZWdpb25zIGFuZCBuYW1lc3BhY2VzIGVtaXR0ZWQgYnkNCiAgICB0aGUgbGlibnZkaW1t IHN1YnN5c3RlbSwgYW5kLCBzYW1lIGFzIHRoZSBvcmlnaW5hbCBwbWVtIGRyaXZlciwgcHJlc2Vu dHMNCiAgICB0aGUgc3lzdGVtLXBoeXNpY2FsLWFkZHJlc3MgcmFuZ2UgYXMgYSBibG9jayBkZXZp Y2UuDQogICAgDQogICAgVGhlIGV4aXN0aW5nIGU4MjAtdHlwZS0xMiB0byBwbWVtIHNldHVwIGlz IGNvbnZlcnRlZCB0byBhbiBudmRpbW1fYnVzDQogICAgdGhhdCBlbWl0cyBhbiBuZF9uYW1lc3Bh Y2VfaW8gZGV2aWNlLg0KICAgIA0KICAgIE5vdGUgdGhhdCB0aGUgWCBpbiAncG1lbVgnIGlzIG5v dyBkZXJpdmVkIGZyb20gdGhlIHBhcmVudCByZWdpb24uICBUaGlzDQogICAgcHJvdmlkZXMgc29t ZSBzdGFiaWxpdHkgdG8gdGhlIHBtZW0gZGV2aWNlcyBuYW1lcyBmcm9tIGJvb3QtdG8tYm9vdC4N CiAgICBUaGUgbWlub3IgbnVtYmVycyBhcmUgYWxzbyBtb3JlIHByZWRpY3RhYmxlIGJ5IHBhc3Np bmcgMCB0bw0KICAgIGFsbG9jX2Rpc2soKS4NCiAgICANCiAgICBDYzogQW5keSBMdXRvbWlyc2tp IDxsdXRvQGFtYWNhcGl0YWwubmV0Pg0KICAgIENjOiBCb2F6IEhhcnJvc2ggPGJvYXpAcGxleGlz dG9yLmNvbT4NCiAgICBDYzogSC4gUGV0ZXIgQW52aW4gPGhwYUB6eXRvci5jb20+DQogICAgQ2M6 IEplbnMgQXhib2UgPGF4Ym9lQGZiLmNvbT4NCiAgICBDYzogSW5nbyBNb2xuYXIgPG1pbmdvQGtl cm5lbC5vcmc+DQogICAgQ2M6IENocmlzdG9waCBIZWxsd2lnIDxoY2hAbHN0LmRlPg0KICAgIFNp Z25lZC1vZmYtYnk6IFJvc3MgWndpc2xlciA8cm9zcy56d2lzbGVyQGxpbnV4LmludGVsLmNvbT4N CiAgICBBY2tlZC1ieTogQ2hyaXN0b3BoIEhlbGx3aWcgPGhjaEBsc3QuZGU+DQogICAgVGVzdGVk LWJ5OiBUb3NoaSBLYW5pIDx0b3NoaS5rYW5pQGhwLmNvbT4NCiAgICBTaWduZWQtb2ZmLWJ5OiBE YW4gV2lsbGlhbXMgPGRhbi5qLndpbGxpYW1zQGludGVsLmNvbT4NCg0KY29tbWl0IGVhZjk2MTUz NmUxNjIyYWQyMTI0N2FjOGQ0NGFjZDQ4YmE2NTU2NmUNCkF1dGhvcjogRGFuIFdpbGxpYW1zIDxk YW4uai53aWxsaWFtc0BpbnRlbC5jb20+DQpEYXRlOiAgIEZyaSBNYXkgMSAxMzoxMToyNyAyMDE1 IC0wNDAwDQoNCiAgICBsaWJudmRpbW0sIG5maXQ6IGFkZCBpbnRlcmxlYXZlLXNldCBzdGF0ZS10 cmFja2luZyBpbmZyYXN0cnVjdHVyZQ0KICAgIA0KICAgIE9uIHBsYXRmb3JtcyB0aGF0IGhhdmUg ZmlybXdhcmUgc3VwcG9ydCBmb3IgcmVhZGluZy93cml0aW5nIHBlci1kaW1tDQogICAgbGFiZWwg c3BhY2UsIGEgcG9ydGlvbiBvZiB0aGUgZGltbSBtYXkgYmUgYWNjZXNzaWJsZSB2aWEgYW4gaW50 ZXJsZWF2ZQ0KICAgIHNldCBQTUVNIG1hcHBpbmcgaW4gYWRkaXRpb24gdG8gdGhlIGRpbW0ncyBC TEsgKGJsb2NrLWRhdGEtd2luZG93DQogICAgYXBlcnR1cmUocykpIGludGVyZmFjZS4gIEEgbGFi ZWwsIHN0b3JlZCBpbiBhICJjb25maWd1cmF0aW9uIGRhdGENCiAgICByZWdpb24iIG9uIHRoZSBk aW1tLCBkaXNhbWJpZ3VhdGVzIHdoaWNoIGRpbW0gYWRkcmVzc2VzIGFyZSBhY2Nlc3NlZA0KICAg IHRocm91Z2ggd2hpY2ggZXhjbHVzaXZlIGludGVyZmFjZS4NCiAgICANCiAgICBBZGQgaW5mcmFz dHJ1Y3R1cmUgdGhhdCBhbGxvd3MgdGhlIGtlcm5lbCB0byBibG9jayBtb2RpZmljYXRpb25zIHRv IGENCiAgICBsYWJlbCBpbiB0aGUgc2V0IHdoaWxlIGFueSBtZW1iZXIgZGltbSBpcyBhY3RpdmUu ICBOb3RlIHRoYXQgdGhpcyBpcw0KICAgIG1lYW50IG9ubHkgZm9yIGVuZm9yY2luZyAibm8gbW9k aWZpY2F0aW9ucyBvZiBhY3RpdmUgbGFiZWxzIiB2aWEgdGhlDQogICAgY29hcnNlIGlvY3RsIGNv bW1hbmQuICBBZGRpbmcvZGVsZXRpbmcgbmFtZXNwYWNlcyBmcm9tIGFuIGFjdGl2ZQ0KICAgIGlu dGVybGVhdmUgc2V0IGlzIGFsd2F5cyBwb3NzaWJsZSB2aWEgc3lzZnMuDQogICAgDQogICAgQW5v dGhlciBhc3BlY3Qgb2YgdHJhY2tpbmcgaW50ZXJsZWF2ZSBzZXRzIGlzIHRyYWNraW5nIHRoZWly IGludGVncml0eQ0KICAgIHdoZW4gRElNTXMgaW4gYSBzZXQgYXJlIHBoeXNpY2FsbHkgcmUtb3Jk ZXJlZC4gIEZvciB0aGlzIHB1cnBvc2Ugd2UNCiAgICBnZW5lcmF0ZSBhbiAiaW50ZXJsZWF2ZS1z ZXQgY29va2llIiB0aGF0IGNhbiBiZSByZWNvcmRlZCBpbiBhIGxhYmVsIGFuZA0KICAgIHZhbGlk YXRlZCBhZ2FpbnN0IHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uICBJdCBpcyB0aGUgYnVzIHBy b3ZpZGVyDQogICAgaW1wbGVtZW50YXRpb24ncyByZXNwb25zaWJpbGl0eSB0byBjYWxjdWxhdGUg dGhlIGludGVybGVhdmUgc2V0IGNvb2tpZQ0KICAgIGFuZCBhdHRhY2ggaXQgdG8gYSBnaXZlbiBy ZWdpb24uDQogICAgDQogICAgQ2M6IE5laWwgQnJvd24gPG5laWxiQHN1c2UuZGU+DQogICAgQ2M6 IDxsaW51eC1hY3BpQHZnZXIua2VybmVsLm9yZz4NCiAgICBDYzogR3JlZyBLSCA8Z3JlZ2toQGxp bnV4Zm91bmRhdGlvbi5vcmc+DQogICAgQ2M6IFJvYmVydCBNb29yZSA8cm9iZXJ0Lm1vb3JlQGlu dGVsLmNvbT4NCiAgICBDYzogUmFmYWVsIEouIFd5c29ja2kgPHJhZmFlbC5qLnd5c29ja2lAaW50 ZWwuY29tPg0KICAgIEFja2VkLWJ5OiBDaHJpc3RvcGggSGVsbHdpZyA8aGNoQGxzdC5kZT4NCiAg ICBBY2tlZC1ieTogUmFmYWVsIEouIFd5c29ja2kgPHJhZmFlbC5qLnd5c29ja2lAaW50ZWwuY29t Pg0KICAgIFNpZ25lZC1vZmYtYnk6IERhbiBXaWxsaWFtcyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwu Y29tPg0KDQpjb21taXQgNGE4MjZjODNkYjRlZGMwNDBkYTNhNjZkYmVmZDUzZjBjZmNmNDU3ZA0K QXV0aG9yOiBEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxpYW1zQGludGVsLmNvbT4NCkRhdGU6ICAg VHVlIEp1biA5IDE2OjA5OjM2IDIwMTUgLTA0MDANCg0KICAgIGxpYm52ZGltbTogbmFtZXNwYWNl IGluZGljZXM6IHJlYWQgYW5kIHZhbGlkYXRlDQogICAgDQogICAgVGhpcyBvbiBtZWRpYSBsYWJl bCBmb3JtYXQgWzFdIGNvbnNpc3RzIG9mIHR3byBpbmRleCBibG9ja3MgZm9sbG93ZWQgYnkNCiAg ICBhbiBhcnJheSBvZiBsYWJlbHMuICBOb25lIG9mIHRoZXNlIHN0cnVjdHVyZXMgYXJlIGV2ZXIg dXBkYXRlZCBpbiBwbGFjZS4NCiAgICBBIHNlcXVlbmNlIG51bWJlciB0cmFja3MgdGhlIGN1cnJl bnQgYWN0aXZlIGluZGV4IGFuZCB0aGUgbmV4dCBvbmUgdG8NCiAgICB3cml0ZSwgd2hpbGUgbGFi ZWxzIGFyZSB3cml0dGVuIHRvIGZyZWUgc2xvdHMuDQogICAgDQogICAgICAgICstLS0tLS0tLS0t LS0rDQogICAgICAgIHwgICAgICAgICAgICB8DQogICAgICAgIHwgIG5zaW5kZXgwICB8DQogICAg ICAgIHwgICAgICAgICAgICB8DQogICAgICAgICstLS0tLS0tLS0tLS0rDQogICAgICAgIHwgICAg ICAgICAgICB8DQogICAgICAgIHwgIG5zaW5kZXgxICB8DQogICAgICAgIHwgICAgICAgICAgICB8 DQogICAgICAgICstLS0tLS0tLS0tLS0rDQogICAgICAgIHwgICBsYWJlbDAgICB8DQogICAgICAg ICstLS0tLS0tLS0tLS0rDQogICAgICAgIHwgICBsYWJlbDEgICB8DQogICAgICAgICstLS0tLS0t LS0tLS0rDQogICAgICAgIHwgICAgICAgICAgICB8DQogICAgICAgICAuLi4ubnNsb3QuLi4NCiAg ICAgICAgfCAgICAgICAgICAgIHwNCiAgICAgICAgKy0tLS0tLS0tLS0tLSsNCiAgICAgICAgfCAg IGxhYmVsTiAgIHwNCiAgICAgICAgKy0tLS0tLS0tLS0tLSsNCiAgICANCiAgICBBZnRlciByZWFk aW5nIHZhbGlkIGxhYmVscywgc3RvcmUgdGhlIGRwYSByYW5nZXMgdGhleSBjbGFpbSBpbnRvDQog ICAgcGVyLWRpbW0gcmVzb3VyY2UgdHJlZXMuDQogICAgDQogICAgWzFdOiBodHRwOi8vcG1lbS5p by9kb2N1bWVudHMvTlZESU1NX05hbWVzcGFjZV9TcGVjLnBkZg0KICAgIA0KICAgIENjOiBOZWls IEJyb3duIDxuZWlsYkBzdXNlLmRlPg0KICAgIEFja2VkLWJ5OiBDaHJpc3RvcGggSGVsbHdpZyA8 aGNoQGxzdC5kZT4NCiAgICBTaWduZWQtb2ZmLWJ5OiBEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxp YW1zQGludGVsLmNvbT4NCg0KY29tbWl0IGJmOWJjY2MxNGMwNWRhZThjYWJhMjlkZjYxODdjNzMx NzEwZjUzODANCkF1dGhvcjogRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRlbC5jb20+ DQpEYXRlOiAgIFdlZCBKdW4gMTcgMTc6MTQ6NDYgMjAxNSAtMDQwMA0KDQogICAgbGlibnZkaW1t OiBwbWVtIGxhYmVsIHNldHMgYW5kIG5hbWVzcGFjZSBpbnN0YW50aWF0aW9uLg0KICAgIA0KICAg IEEgY29tcGxldGUgbGFiZWwgc2V0IGlzIGEgUE1FTS1sYWJlbCBwZXItZGltbSBwZXItaW50ZXJs ZWF2ZS1zZXQgd2hlcmUNCiAgICBhbGwgdGhlIFVVSURzIG1hdGNoIGFuZCB0aGUgaW50ZXJsZWF2 ZSBzZXQgY29va2llIG1hdGNoZXMgdGhlIGhvc3RpbmcNCiAgICBpbnRlcmxlYXZlIHNldC4NCiAg ICANCiAgICBQcmVzZW50IHN5c2ZzIGF0dHJpYnV0ZXMgZm9yIG1hbmlwdWxhdGlvbiBvZiBhIFBN RU0tbmFtZXNwYWNlJ3MNCiAgICAnYWx0X25hbWUnLCAndXVpZCcsIGFuZCAnc2l6ZScgYXR0cmli dXRlcy4gIEEgbGF0ZXIgcGF0Y2ggd2lsbCBtYWtlDQogICAgdGhlc2Ugc2V0dGluZ3MgcGVyc2lz dGVudCBieSB3cml0aW5nIGJhY2sgdGhlIGxhYmVsLg0KICAgIA0KICAgIE5vdGUgdGhhdCBQTUVN IGFsbG9jYXRpb25zIGdyb3cgZm9yd2FyZHMgZnJvbSB0aGUgc3RhcnQgb2YgYW4gaW50ZXJsZWF2 ZQ0KICAgIHNldCAobG93ZXN0IGRpbW0tcGh5c2ljYWwtYWRkcmVzcyAoRFBBKSkuICBCTEstbmFt ZXNwYWNlcyB0aGF0IGFsaWFzDQogICAgd2l0aCBhIFBNRU0gaW50ZXJsZWF2ZSBzZXQgd2lsbCBn cm93IGFsbG9jYXRpb25zIGJhY2t3YXJkIGZyb20gdGhlDQogICAgaGlnaGVzdCBEUEEuDQogICAg DQogICAgQ2M6IEdyZWcgS0ggPGdyZWdraEBsaW51eGZvdW5kYXRpb24ub3JnPg0KICAgIENjOiBO ZWlsIEJyb3duIDxuZWlsYkBzdXNlLmRlPg0KICAgIEFja2VkLWJ5OiBDaHJpc3RvcGggSGVsbHdp ZyA8aGNoQGxzdC5kZT4NCiAgICBTaWduZWQtb2ZmLWJ5OiBEYW4gV2lsbGlhbXMgPGRhbi5qLndp bGxpYW1zQGludGVsLmNvbT4NCg0KY29tbWl0IDFiNDBlMDlhMTIzMmRlNTM3YjE5M2ZhMWI2YjNl ZjE2ZDNhMWUzOTcNCkF1dGhvcjogRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRlbC5j b20+DQpEYXRlOiAgIEZyaSBNYXkgMSAxMzozNDowMSAyMDE1IC0wNDAwDQoNCiAgICBsaWJudmRp bW06IGJsayBsYWJlbHMgYW5kIG5hbWVzcGFjZSBpbnN0YW50aWF0aW9uDQogICAgDQogICAgQSBi bGsgbGFiZWwgc2V0IGRlc2NyaWJlcyBhIG5hbWVzcGFjZSBjb21wcmlzZWQgb2Ygb25lIG9yIG1v cmUNCiAgICBkaXNjb250aWd1b3VzIGRwYSByYW5nZXMgb24gYSBzaW5nbGUgZGltbS4gIFRoZXkg bWF5IGFsaWFzIHdpdGggb25lIG9yDQogICAgbW9yZSBwbWVtIGludGVybGVhdmUgc2V0cyB0aGF0 IGluY2x1ZGUgdGhlIGdpdmVuIGRpbW0uDQogICAgDQogICAgVGhpcyBpcyB0aGUgcnVudGltZS92 b2xhdGlsZSBjb25maWd1cmF0aW9uIGluZnJhc3RydWN0dXJlIGZvciBzeXNmcw0KICAgIG1hbmlw dWxhdGlvbiBvZiAnYWx0X25hbWUnLCAndXVpZCcsICdzaXplJywgYW5kICdzZWN0b3Jfc2l6ZScu ICBBIGxhdGVyDQogICAgcGF0Y2ggd2lsbCBtYWtlIHRoZXNlIHNldHRpbmdzIHBlcnNpc3RlbnQg Ynkgd3JpdGluZyBiYWNrIHRoZSBsYWJlbChzKS4NCiAgICANCiAgICBVbmxpa2UgcG1lbSBuYW1l c3BhY2VzLCBtdWx0aXBsZSBibGsgbmFtZXNwYWNlcyBjYW4gYmUgY3JlYXRlZCBwZXINCiAgICBy ZWdpb24uICBPbmNlIGEgYmxrIG5hbWVzcGFjZSBoYXMgYmVlbiBjcmVhdGVkIGEgbmV3IHNlZWQg ZGV2aWNlDQogICAgKHVuY29uZmlndXJlZCBjaGlsZCBvZiBhIHBhcmVudCBibGsgcmVnaW9uKSBp cyBpbnN0YW50aWF0ZWQuICBBcyBsb25nIGFzDQogICAgYSByZWdpb24gaGFzICdhdmFpbGFibGVf c2l6ZScgIT0gMCBuZXcgY2hpbGQgbmFtZXNwYWNlcyBtYXkgYmUgY3JlYXRlZC4NCiAgICANCiAg ICBDYzogR3JlZyBLSCA8Z3JlZ2toQGxpbnV4Zm91bmRhdGlvbi5vcmc+DQogICAgQ2M6IE5laWwg QnJvd24gPG5laWxiQHN1c2UuZGU+DQogICAgQWNrZWQtYnk6IENocmlzdG9waCBIZWxsd2lnIDxo Y2hAbHN0LmRlPg0KICAgIFNpZ25lZC1vZmYtYnk6IERhbiBXaWxsaWFtcyA8ZGFuLmoud2lsbGlh bXNAaW50ZWwuY29tPg0KDQpjb21taXQgZjUyNGJmMjcxYTVjZjEyYTQ0MjUzMTk0YWJjZjhiNjY4 OGZmNWI5ZA0KQXV0aG9yOiBEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxpYW1zQGludGVsLmNvbT4N CkRhdGU6ICAgU2F0IE1heSAzMCAxMjozNjowMiAyMDE1IC0wNDAwDQoNCiAgICBsaWJudmRpbW06 IHdyaXRlIHBtZW0gbGFiZWwgc2V0DQogICAgDQogICAgQWZ0ZXIgJ3V1aWQnLCAnc2l6ZScsIGFu ZCBvcHRpb25hbGx5ICdhbHRfbmFtZScgaGF2ZSBiZWVuIHNldCB0byB2YWxpZA0KICAgIHZhbHVl cyB0aGUgbGFiZWxzIG9uIHRoZSBkaW1tcyBjYW4gYmUgdXBkYXRlZC4NCiAgICANCiAgICBXcml0 ZSBwcm9jZWR1cmUgaXM6DQogICAgMS8gQWxsb2NhdGUgYW5kIHdyaXRlIG5ldyBsYWJlbHMgaW4g dGhlICJuZXh0IiBpbmRleA0KICAgIDIvIEZyZWUgdGhlIG9sZCBsYWJlbHMgaW4gdGhlIHdvcmtp bmcgY29weQ0KICAgIDMvIFdyaXRlIHRoZSBiaXRtYXAgYW5kIHRoZSBsYWJlbCBzcGFjZSBvbiB0 aGUgZGltbQ0KICAgIDQvIFdyaXRlIHRoZSBpbmRleCB0byBtYWtlIHRoZSB1cGRhdGUgdmFsaWQN CiAgICANCiAgICBMYWJlbCByYW5nZXMgZGlyZWN0bHkgbWlycm9yIHRoZSBkcGEgcmVzb3VyY2Ug dmFsdWVzIGZvciB0aGUgZ2l2ZW4NCiAgICBsYWJlbF9pZCBvZiB0aGUgbmFtZXNwYWNlLg0KICAg IA0KICAgIENjOiBHcmVnIEtIIDxncmVna2hAbGludXhmb3VuZGF0aW9uLm9yZz4NCiAgICBDYzog TmVpbCBCcm93biA8bmVpbGJAc3VzZS5kZT4NCiAgICBBY2tlZC1ieTogQ2hyaXN0b3BoIEhlbGx3 aWcgPGhjaEBsc3QuZGU+DQogICAgU2lnbmVkLW9mZi1ieTogRGFuIFdpbGxpYW1zIDxkYW4uai53 aWxsaWFtc0BpbnRlbC5jb20+DQoNCmNvbW1pdCAwYmExYzYzNDg5MmIzNTkwNzc5ODAzYTcwMWJj YjgyZThjMzJjYzdhDQpBdXRob3I6IERhbiBXaWxsaWFtcyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwu Y29tPg0KRGF0ZTogICBTYXQgTWF5IDMwIDEyOjM1OjM2IDIwMTUgLTA0MDANCg0KICAgIGxpYm52 ZGltbTogd3JpdGUgYmxrIGxhYmVsIHNldA0KICAgIA0KICAgIEFmdGVyICd1dWlkJywgJ3NpemUn LCAnc2VjdG9yX3NpemUnLCBhbmQgb3B0aW9uYWxseSAnYWx0X25hbWUnIGhhdmUgYmVlbg0KICAg IHNldCB0byB2YWxpZCB2YWx1ZXMgdGhlIGxhYmVscyBvbiB0aGUgZGltbSBjYW4gYmUgdXBkYXRl ZC4gIFRoZQ0KICAgIGRpZmZlcmVuY2Ugd2l0aCB0aGUgcG1lbSBjYXNlIGlzIHRoYXQgYmxrIG5h bWVzcGFjZXMgYXJlIGxpbWl0ZWQgdG8gb25lDQogICAgZGltbSBhbmQgY2FuIGNvdmVyIGRpc2Nv bnRpZ3VvdXMgcmFuZ2VzIGluIGRwYSBzcGFjZS4NCiAgICANCiAgICBBbHNvLCBhZnRlciBhbGxv Y2F0aW5nIGxhYmVsIHNsb3RzLCBpdCBpcyB1c2VmdWwgZm9yIHVzZXJzcGFjZSB0byBrbm93DQog ICAgaG93IG1hbnkgc2xvdHMgYXJlIGxlZnQuICBFeHBvcnQgdGhpcyBpbmZvcm1hdGlvbiBpbiBz eXNmcy4NCiAgICANCiAgICBDYzogR3JlZyBLSCA8Z3JlZ2toQGxpbnV4Zm91bmRhdGlvbi5vcmc+ DQogICAgQ2M6IE5laWwgQnJvd24gPG5laWxiQHN1c2UuZGU+DQogICAgQWNrZWQtYnk6IENocmlz dG9waCBIZWxsd2lnIDxoY2hAbHN0LmRlPg0KICAgIFNpZ25lZC1vZmYtYnk6IERhbiBXaWxsaWFt cyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tPg0KDQpjb21taXQgOGMyZjdlODY1OGRmMWQzYjdj YmZhNjI3MDY5NDFkMTRjNzE1ODIzYQ0KQXV0aG9yOiBEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxp YW1zQGludGVsLmNvbT4NCkRhdGU6ICAgVGh1IEp1biAyNSAwNDoyMDowNCAyMDE1IC0wNDAwDQoN CiAgICBsaWJudmRpbW06IGluZnJhc3RydWN0dXJlIGZvciBidHQgZGV2aWNlcw0KICAgIA0KICAg IE5WRElNTSBuYW1lc3BhY2VzLCBpbiBhZGRpdGlvbiB0byBhY2NlcHRpbmcgInN0cnVjdCBiaW8i IGJhc2VkIHJlcXVlc3RzLA0KICAgIGFsc28gaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBwZXJmb3Jt IGJ5dGUtYWxpZ25lZCBhY2Nlc3Nlcy4gIEJ5IGRlZmF1bHQNCiAgICBvbmx5IHRoZSBiaW8vYmxv Y2sgaW50ZXJmYWNlIGlzIHVzZWQuICBIb3dldmVyLCBpZiBhbm90aGVyIGRyaXZlciBjYW4NCiAg ICBtYWtlIGVmZmVjdGl2ZSB1c2Ugb2YgdGhlIGJ5dGUtYWxpZ25lZCBjYXBhYmlsaXR5IGl0IGNh biBjbGFpbSBuYW1lc3BhY2UNCiAgICBpbnRlcmZhY2UgYW5kIHVzZSB0aGUgYnl0ZS1hbGlnbmVk IC0+cndfYnl0ZXMoKSBpbnRlcmZhY2UuDQogICAgDQogICAgVGhlIEJUVCBkcml2ZXIgaXMgdGhl IGluaXRpYWwgZmlyc3QgY29uc3VtZXIgb2YgdGhpcyBtZWNoYW5pc20gdG8gYWxsb3cNCiAgICBh ZGRpbmcgYXRvbWljIHNlY3RvciB1cGRhdGUgc2VtYW50aWNzIHRvIGEgcG1lbSBvciBibGsgbmFt ZXNwYWNlLiAgVGhpcw0KICAgIHBhdGNoIGlzIHRoZSBzeXNmcyBpbmZyYXN0cnVjdHVyZSB0byBh bGxvdyBjb25maWd1cmluZyBhIEJUVCBpbnN0YW5jZQ0KICAgIGZvciBhIG5hbWVzcGFjZS4gIEVu YWJsaW5nIHRoYXQgQlRUIGFuZCBwZXJmb3JtaW5nIGkvbyBpcyBpbiBhDQogICAgc3Vic2VxdWVu dCBwYXRjaC4NCiAgICANCiAgICBDYzogR3JlZyBLSCA8Z3JlZ2toQGxpbnV4Zm91bmRhdGlvbi5v cmc+DQogICAgQ2M6IE5laWwgQnJvd24gPG5laWxiQHN1c2UuZGU+DQogICAgU2lnbmVkLW9mZi1i eTogRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRlbC5jb20+DQoNCmNvbW1pdCA1MjEy ZTExZmRlNGQ0MGZhNjI3NjY4YjRmMjIyMmQyMGRiNDg4ZjcxDQpBdXRob3I6IFZpc2hhbCBWZXJt YSA8dmlzaGFsLmwudmVybWFAaW50ZWwuY29tPg0KRGF0ZTogICBUaHUgSnVuIDI1IDA0OjIwOjMy IDIwMTUgLTA0MDANCg0KICAgIG5kX2J0dDogYXRvbWljIHNlY3RvciB1cGRhdGVzDQogICAgDQog ICAgQlRUIHN0YW5kcyBmb3IgQmxvY2sgVHJhbnNsYXRpb24gVGFibGUsIGFuZCBpcyBhIHdheSB0 byBwcm92aWRlIHBvd2VyDQogICAgZmFpbCBzZWN0b3IgYXRvbWljaXR5IHNlbWFudGljcyBmb3Ig YmxvY2sgZGV2aWNlcyB0aGF0IGhhdmUgdGhlIGFiaWxpdHkNCiAgICB0byBwZXJmb3JtIGJ5dGUg Z3JhbnVsYXJpdHkgSU8uIEl0IHJlbGllcyBvbiB0aGUgY2FwYWJpbGl0eSBvZiBsaWJudmRpbW0N CiAgICBuYW1lc3BhY2UgZGV2aWNlcyB0byBkbyBieXRlIGFsaWduZWQgSU8uDQogICAgDQogICAg VGhlIEJUVCB3b3JrcyBhcyBhIHN0YWNrZWQgYmxvY2tlZCBkZXZpY2UsIGFuZCByZXNlcnZlcyBh IGNodW5rIG9mIHNwYWNlDQogICAgZnJvbSB0aGUgYmFja2luZyBkZXZpY2UgZm9yIGl0cyBhY2Nv dW50aW5nIG1ldGFkYXRhLiBJdCBpcyBhIGJpby1iYXNlZA0KICAgIGRyaXZlciBiZWNhdXNlIGFs bCBJTyBpcyBkb25lIHN5bmNocm9ub3VzbHksIGFuZCB0aGVyZSBpcyBubyBxdWV1aW5nIG9yDQog ICAgYXN5bmNocm9ub3VzIGNvbXBsZXRpb25zIGF0IGVpdGhlciB0aGUgZGV2aWNlIG9yIHRoZSBk cml2ZXIgbGV2ZWwuDQogICAgDQogICAgVGhlIEJUVCB1c2VzICdsYW5lcycgdG8gaW5kZXggaW50 byB2YXJpb3VzICdvbi1kaXNrJyBkYXRhIHN0cnVjdHVyZXMsDQogICAgYW5kIGxhbmVzIGFsc28g YWN0IGFzIGEgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbSBpbiBjYXNlIHRoZXJlIGFyZSBtb3Jl DQogICAgQ1BVcyB0aGFuIGF2YWlsYWJsZSBsYW5lcy4gV2UgZGlkIGEgY29tcGFyaXNvbiBiZXR3 ZWVuIHR3byBsYW5lIGxvY2sNCiAgICBzdHJhdGVnaWVzIC0gZmlyc3Qgd2hlcmUgd2Uga2VwdCBh biBhdG9taWMgY291bnRlciBhcm91bmQgdGhhdCB0cmFja2VkDQogICAgd2hpY2ggd2FzIHRoZSBs YXN0IGxhbmUgdGhhdCB3YXMgdXNlZCwgYW5kICdvdXInIGxhbmUgd2FzIGRldGVybWluZWQgYnkN CiAgICBhdG9taWNhbGx5IGluY3JlbWVudGluZyB0aGF0LiBUaGF0IHdheSwgZm9yIHRoZSBucl9j cHVzID4gbnJfbGFuZXMgY2FzZSwNCiAgICB0aGVvcmV0aWNhbGx5LCBubyBDUFUgd291bGQgYmUg YmxvY2tlZCB3YWl0aW5nIGZvciBhIGxhbmUuIFRoZSBvdGhlcg0KICAgIHN0cmF0ZWd5IHdhcyB0 byB1c2UgdGhlIGNwdSBudW1iZXIgd2UncmUgc2NoZWR1bGVkIG9uIHRvIGFuZCBoYXNoIGl0IHRv DQogICAgYSBsYW5lIG51bWJlci4gVGhlb3JldGljYWxseSwgdGhpcyBjb3VsZCBibG9jayBhbiBJ TyB0aGF0IGNvdWxkJ3ZlDQogICAgb3RoZXJ3aXNlIHJ1biB1c2luZyBhIGRpZmZlcmVudCwgZnJl ZSBsYW5lLiBCdXQgc29tZSBmaW8gd29ya2xvYWRzDQogICAgc2hvd2VkIHRoYXQgdGhlIGRpcmVj dCBjcHUgLT4gbGFuZSBoYXNoIHBlcmZvcm1lZCBmYXN0ZXIgdGhhbiB0cmFja2luZw0KICAgICds YXN0IGxhbmUnIC0gbXkgcmVhc29uaW5nIGlzIHRoZSBjYWNoZSB0aHJhc2ggY2F1c2VkIGJ5IG1v dmluZyB0aGUNCiAgICBhdG9taWMgdmFyaWFibGUgbWFkZSB0aGF0IGFwcHJvYWNoIHNsb3dlciB0 aGFuIHNpbXBseSB3YWl0aW5nIG91dCB0aGUNCiAgICBpbi1wcm9ncmVzcyBJTy4gVGhpcyBzdXBw b3J0cyB0aGUgY29uY2x1c2lvbiB0aGF0IHRoZSBkcml2ZXIgY2FuIGJlIGENCiAgICB2ZXJ5IHNp bXBsZSBiaW8tYmFzZWQgb25lIHRoYXQgZG9lcyBzeW5jaHJvbm91cyBJT3MgaW5zdGVhZCBvZiBx dWV1aW5nLg0KICAgIA0KICAgIENjOiBBbmR5IEx1dG9taXJza2kgPGx1dG9AYW1hY2FwaXRhbC5u ZXQ+DQogICAgQ2M6IEJvYXogSGFycm9zaCA8Ym9hekBwbGV4aXN0b3IuY29tPg0KICAgIENjOiBI LiBQZXRlciBBbnZpbiA8aHBhQHp5dG9yLmNvbT4NCiAgICBDYzogSmVucyBBeGJvZSA8YXhib2VA ZmIuY29tPg0KICAgIENjOiBJbmdvIE1vbG5hciA8bWluZ29Aa2VybmVsLm9yZz4NCiAgICBDYzog Q2hyaXN0b3BoIEhlbGx3aWcgPGhjaEBsc3QuZGU+DQogICAgQ2M6IE5laWwgQnJvd24gPG5laWxi QHN1c2UuZGU+DQogICAgQ2M6IEplZmYgTW95ZXIgPGptb3llckByZWRoYXQuY29tPg0KICAgIENj OiBEYXZlIENoaW5uZXIgPGRhdmlkQGZyb21vcmJpdC5jb20+DQogICAgQ2M6IEdyZWcgS0ggPGdy ZWdraEBsaW51eGZvdW5kYXRpb24ub3JnPg0KICAgIFtqbW95ZXI6IGZpeCBubWkgd2F0Y2hkb2cg dGltZW91dCBpbiBidHRfbWFwX2luaXRdDQogICAgW2ptb3llcjogbW92ZSBidHQgaW5pdGlhbGl6 YXRpb24gdG8gbW9kdWxlIGxvYWQgcGF0aF0NCiAgICBbam1veWVyOiBmaXggbWVtb3J5IGxlYWsg aW4gdGhlIGJ0dCBpbml0aWFsaXphdGlvbiBwYXRoXQ0KICAgIFtqbW95ZXI6IERvbid0IG92ZXJ3 cml0ZSBjb3JydXB0ZWQgYXJlbmFzXQ0KICAgIFNpZ25lZC1vZmYtYnk6IFZpc2hhbCBWZXJtYSA8 dmlzaGFsLmwudmVybWFAbGludXguaW50ZWwuY29tPg0KICAgIFNpZ25lZC1vZmYtYnk6IERhbiBX aWxsaWFtcyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tPg0KDQpjb21taXQgMDQ3ZmM4YTFmOWE2 MzMwZWFjYzgwMzc0ZGZmMDg3ZTIwZGMyMzA0Yg0KQXV0aG9yOiBSb3NzIFp3aXNsZXIgPHJvc3Mu endpc2xlckBsaW51eC5pbnRlbC5jb20+DQpEYXRlOiAgIFRodSBKdW4gMjUgMDQ6MjE6MDIgMjAx NSAtMDQwMA0KDQogICAgbGlibnZkaW1tLCBuZml0LCBuZF9ibGs6IGRyaXZlciBmb3IgQkxLLW1v ZGUgYWNjZXNzIHBlcnNpc3RlbnQgbWVtb3J5DQogICAgDQogICAgVGhlIGxpYm52ZGltbSBpbXBs ZW1lbnRhdGlvbiBoYW5kbGVzIGFsbG9jYXRpbmcgZGltbSBhZGRyZXNzIHNwYWNlIChEUEEpDQog ICAgYmV0d2VlbiBQTUVNIGFuZCBCTEsgbW9kZSBpbnRlcmZhY2VzLiAgQWZ0ZXIgRFBBIGhhcyBi ZWVuIGFsbG9jYXRlZCBmcm9tDQogICAgYSBCTEstcmVnaW9uIHRvIGEgQkxLLW5hbWVzcGFjZSB0 aGUgbmRfYmxrIGRyaXZlciBhdHRhY2hlcyB0byBoYW5kbGUgSS9PDQogICAgYXMgYSBzdHJ1Y3Qg YmlvIGJhc2VkIGJsb2NrIGRldmljZS4gVW5saWtlIFBNRU0sIEJMSyBpcyByZXF1aXJlZCB0bw0K ICAgIGhhbmRsZSBwbGF0Zm9ybSBzcGVjaWZpYyBkZXRhaWxzIGxpa2UgbW1pbyByZWdpc3RlciBm b3JtYXRzIGFuZCBtZW1vcnkNCiAgICBjb250cm9sbGVyIGludGVybGVhdmUuICBGb3IgdGhpcyBy ZWFzb24gdGhlIGxpYm52ZGltbSBnZW5lcmljIG5kX2Jsaw0KICAgIGRyaXZlciBjYWxscyBiYWNr IGludG8gdGhlIGJ1cyBwcm92aWRlciB0byBjYXJyeSBvdXQgdGhlIEkvTy4NCiAgICANCiAgICBU aGlzIGluaXRpYWwgaW1wbGVtZW50YXRpb24gaGFuZGxlcyB0aGUgQkxLIGludGVyZmFjZSBkZWZp bmVkIGJ5IHRoZQ0KICAgIEFDUEkgNiBORklUIFsxXSBhbmQgdGhlIE5WRElNTSBEU00gSW50ZXJm YWNlIEV4YW1wbGUgWzJdIGNvbXBvc2VkIGZyb20NCiAgICBEQ1IgKGRpbW0gY29udHJvbCByZWdp b24pLCBCRFcgKGJsb2NrIGRhdGEgd2luZG93KSwgSURUIChpbnRlcmxlYXZlDQogICAgZGVzY3Jp cHRvcikgTkZJVCBzdHJ1Y3R1cmVzIGFuZCB0aGUgaGFyZHdhcmUgcmVnaXN0ZXIgZm9ybWF0Lg0K ICAgIFsxXTogaHR0cDovL3d3dy51ZWZpLm9yZy9zaXRlcy9kZWZhdWx0L2ZpbGVzL3Jlc291cmNl cy9BQ1BJXzYuMC5wZGYNCiAgICBbMl06IGh0dHA6Ly9wbWVtLmlvL2RvY3VtZW50cy9OVkRJTU1f RFNNX0ludGVyZmFjZV9FeGFtcGxlLnBkZg0KICAgIA0KICAgIENjOiBBbmR5IEx1dG9taXJza2kg PGx1dG9AYW1hY2FwaXRhbC5uZXQ+DQogICAgQ2M6IEJvYXogSGFycm9zaCA8Ym9hekBwbGV4aXN0 b3IuY29tPg0KICAgIENjOiBILiBQZXRlciBBbnZpbiA8aHBhQHp5dG9yLmNvbT4NCiAgICBDYzog SmVucyBBeGJvZSA8YXhib2VAZmIuY29tPg0KICAgIENjOiBJbmdvIE1vbG5hciA8bWluZ29Aa2Vy bmVsLm9yZz4NCiAgICBDYzogQ2hyaXN0b3BoIEhlbGx3aWcgPGhjaEBsc3QuZGU+DQogICAgU2ln bmVkLW9mZi1ieTogUm9zcyBad2lzbGVyIDxyb3NzLnp3aXNsZXJAbGludXguaW50ZWwuY29tPg0K ICAgIEFja2VkLWJ5OiBSYWZhZWwgSi4gV3lzb2NraSA8cmFmYWVsLmoud3lzb2NraUBpbnRlbC5j b20+DQogICAgU2lnbmVkLW9mZi1ieTogRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRl bC5jb20+DQoNCmNvbW1pdCA2YmM3NTYxOTNmZjYxYmY1ZTdiM2NmZWRmYmIwODczYmY0MGY4MDU1 DQpBdXRob3I6IERhbiBXaWxsaWFtcyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tPg0KRGF0ZTog ICBXZWQgSnVuIDE3IDE3OjIzOjMyIDIwMTUgLTA0MDANCg0KICAgIHRvb2xzL3Rlc3RpbmcvbnZk aW1tOiBsaWJudmRpbW0gdW5pdCB0ZXN0IGluZnJhc3RydWN0dXJlDQogICAgDQogICAgJ2xpYm52 ZGltbScgaXMgdGhlIGZpcnN0IGRyaXZlciBzdWItc3lzdGVtIGluIHRoZSBrZXJuZWwgdG8gaW1w bGVtZW50DQogICAgbW9ja2luZyBmb3IgdW5pdCB0ZXN0IGNvdmVyYWdlLiAgVGhlIG5maXRfdGVz dCBtb2R1bGUgZ2V0cyBidWlsdCBhcyBhbg0KICAgIGV4dGVybmFsIG1vZHVsZSBhbmQgYXJyYW5n ZXMgZm9yIGV4dGVybmFsIG1vZHVsZSByZXBsYWNlbWVudHMgb2YgbmZpdCwNCiAgICBsaWJudmRp bW0sIG5kX3BtZW0sIGFuZCBuZF9ibGsuICBUaGVzZSByZXBsYWNlbWVudHMgdXNlIHRoZSBsaW5r ZXINCiAgICAtLXdyYXAgb3B0aW9uIHRvIHJlZGlyZWN0IGNhbGxzIHRvIGlvcmVtYXAoKSArIHJl cXVlc3RfbWVtX3JlZ2lvbigpIHRvDQogICAgY3VzdG9tIGRlZmluZWQgdW5pdCB0ZXN0IHJlc291 cmNlcy4gIFRoZSBlbmQgcmVzdWx0IGlzIGEgZnVsbHkNCiAgICBmdW5jdGlvbmFsIG52ZGltbV9i dXMsIGFzIGZhciBhcyB1c2Vyc3BhY2UgaXMgY29uY2VybmVkLCBidXQgd2l0aCB0aGUNCiAgICBj YXBhYmlsaXR5IHRvIHBlcmZvcm0gb3RoZXJ3aXNlIGRlc3RydWN0aXZlIHRlc3RzIG9uIGVtdWxh dGVkIHJlc291cmNlcy4NCiAgICANCiAgICBROiBXaHkgbm90IHVzZSBRRU1VIGZvciB0aGlzIGVt dWxhdGlvbj8NCiAgICBRRU1VIGlzIG5vdCBzdWl0YWJsZSBmb3IgdW5pdCB0ZXN0aW5nLiAgUUVN VSdzIHJvbGUgaXMgdG8gZmFpdGhmdWxseQ0KICAgIGVtdWxhdGUgdGhlIHBsYXRmb3JtLiAgQSB1 bml0IHRlc3QncyByb2xlIGlzIHRvIHVuZmFpdGhmdWxseSBpbXBsZW1lbnQNCiAgICB0aGUgcGxh dGZvcm0gd2l0aCB0aGUgZ29hbCBvZiB0cmlnZ2VyaW5nIGJ1Z3MgaW4gdGhlIGNvcm5lcnMgb2Yg dGhlDQogICAgc3ViLXN5c3RlbSBpbXBsZW1lbnRhdGlvbi4gIEFzIGJ1Z3MgYXJlIGRpc2NvdmVy ZWQgaW4gcGxhdGZvcm1zLCBvciB0aGUNCiAgICBzdWItc3lzdGVtIGl0c2VsZiwgdGhlIHVuaXQg dGVzdHMgYXJlIGV4dGVuZGVkIHRvIGJhY2tzdG9wIGEgZml4IHdpdGggYQ0KICAgIHJlcHJvZHVj ZXIgdW5pdCB0ZXN0Lg0KICAgIA0KICAgIEFub3RoZXIgcHJvYmxlbSB3aXRoIFFFTVUgaXMgdGhh dCBpdCB3b3VsZCByZXF1aXJlIGNvb3JkaW5hdGlvbiBvZiAzDQogICAgc29mdHdhcmUgcHJvamVj dHMgaW5zdGVhZCBvZiAyIChrZXJuZWwgKyBsaWJuZGN0bCBbMV0pIHRvIG1haW50YWluIGFuZA0K ICAgIGV4ZWN1dGUgdGhlIHRlc3RzLiAgVGhlIGNoYW5jZXMgZm9yIGJpdCByb3QgYW5kIHRoZSBk aWZmaWN1bHR5IG9mDQogICAgZ2V0dGluZyB0aGUgdGVzdHMgcnVubmluZyBnb2VzIHVwIG5vbi1s aW5lYXJseSB0aGUgbW9yZSBjb21wb25lbnRzDQogICAgaW52b2x2ZWQuDQogICAgDQogICAgDQog ICAgUTogV2h5IHN1Ym1pdCB0aGlzIHRvIHRoZSBrZXJuZWwgdHJlZSBpbnN0ZWFkIG9mIGV4dGVy bmFsIG1vZHVsZXMgaW4NCiAgICAgICBsaWJuZGN0bD8NCiAgICBTaW1wbGUsIHRvIGFsbGV2aWF0 ZSB0aGUgc2FtZSByaXNrIHRoYXQgb3V0LW9mLXRyZWUgZXh0ZXJuYWwgbW9kdWxlcw0KICAgIGZh Y2UuICBVcGRhdGVzIHRvIGRyaXZlcnMvbnZkaW1tLyBjYW4gYmUgaW1tZWRpYXRlbHkgZXZhbHVh dGVkIHRvIHNlZSBpZg0KICAgIHRoZXkgaGF2ZSBhbnkgaW1wYWN0IG9uIHRvb2xzL3Rlc3Rpbmcv bnZkaW1tLy4NCiAgICANCiAgICANCiAgICBROiBXaGF0IGFyZSB0aGUgbmVnYXRpdmUgaW1wbGlj YXRpb25zIG9mIG1lcmdpbmcgdGhpcz8NCiAgICBJdCBpcyBhIHVuaXF1ZSBtYWludGVuYW5jZSBi dXJkZW4gYmVjYXVzZSB0aGUgcHVycG9zZSBvZiBtb2NraW5nIGFuDQogICAgaW50ZXJmYWNlIHRv IGVuYWJsZSBhIHVuaXQgdGVzdCBpcyB0byBwdXJwb3NlZnVsbHkgc2hvcnQgY2lyY3VpdCB0aGUN CiAgICBzZW1hbnRpY3Mgb2YgYSByb3V0aW5lIHRvIGVuYWJsZSB0ZXN0aW5nLiAgRm9yIGV4YW1w bGUNCiAgICBfX3dyYXBfaW9yZW1hcF9jYWNoZSgpIGZha2VzIHRoZSBwbWVtIGRyaXZlciBpbnRv ICJpb3JlbWFwKCknaW5nIiBhIHRlc3QNCiAgICByZXNvdXJjZSBidWZmZXIgYWxsb2NhdGVkIGJ5 IGRtYV9hbGxvY19jb2hlcmVudCgpLiAgVGhlIGZ1dHVyZQ0KICAgIG1haW50ZW5hbmNlIGJ1cmRl biBoaXRzIHdoZW4gc29tZW9uZSBjaGFuZ2VzIHRoZSBzZW1hbnRpY3Mgb2YNCiAgICBpb3JlbWFw X2NhY2hlKCkgYW5kIHdvbmRlcnMgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZSBmb3IgdGhlIHVu aXQgdGVzdC4NCiAgICANCiAgICBbMV06IGh0dHBzOi8vZ2l0aHViLmNvbS9wbWVtL25kY3RsDQog ICAgDQogICAgQ2M6IDxsaW51eC1hY3BpQHZnZXIua2VybmVsLm9yZz4NCiAgICBDYzogTHYgWmhl bmcgPGx2LnpoZW5nQGludGVsLmNvbT4NCiAgICBDYzogUm9iZXJ0IE1vb3JlIDxyb2JlcnQubW9v cmVAaW50ZWwuY29tPg0KICAgIENjOiBSYWZhZWwgSi4gV3lzb2NraSA8cmFmYWVsLmoud3lzb2Nr aUBpbnRlbC5jb20+DQogICAgQ2M6IENocmlzdG9waCBIZWxsd2lnIDxoY2hAbHN0LmRlPg0KICAg IFNpZ25lZC1vZmYtYnk6IERhbiBXaWxsaWFtcyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tPg0K DQpjb21taXQgYmMzMDE5NmY3MTVlZDNhOTRkMDUwZWY4YmM0NjVlNTY3YTYwNTBiZQ0KQXV0aG9y OiBEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxpYW1zQGludGVsLmNvbT4NCkRhdGU6ICAgVGh1IEp1 biAyNSAwNDo0ODoxOSAyMDE1IC0wNDAwDQoNCiAgICBsaWJudmRpbW06IE5vbi1Wb2xhdGlsZSBE ZXZpY2VzDQogICAgDQogICAgTWFpbnRhaW5lciBpbmZvcm1hdGlvbiBhbmQgZG9jdW1lbnRhdGlv biBmb3IgZHJpdmVycy9udmRpbW0NCiAgICANCiAgICBDYzogQW5keSBMdXRvbWlyc2tpIDxsdXRv QGFtYWNhcGl0YWwubmV0Pg0KICAgIENjOiBCb2F6IEhhcnJvc2ggPGJvYXpAcGxleGlzdG9yLmNv bT4NCiAgICBDYzogSC4gUGV0ZXIgQW52aW4gPGhwYUB6eXRvci5jb20+DQogICAgQ2M6IEplbnMg QXhib2UgPGF4Ym9lQGZiLmNvbT4NCiAgICBDYzogSW5nbyBNb2xuYXIgPG1pbmdvQGtlcm5lbC5v cmc+DQogICAgQ2M6IENocmlzdG9waCBIZWxsd2lnIDxoY2hAbHN0LmRlPg0KICAgIENjOiBOZWls IEJyb3duIDxuZWlsYkBzdXNlLmRlPg0KICAgIENjOiBHcmVnIEtIIDxncmVna2hAbGludXhmb3Vu ZGF0aW9uLm9yZz4NCiAgICBTaWduZWQtb2ZmLWJ5OiBEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxp YW1zQGludGVsLmNvbT4NCg0KY29tbWl0IGY2OGViMWU3MWE5Mjc2NWZmZDhlYjY4NDY2YTQxYjQ4 ZjJmYmJhMDQNCkF1dGhvcjogVmlzaGFsIFZlcm1hIDx2aXNoYWwubC52ZXJtYUBpbnRlbC5jb20+ DQpEYXRlOiAgIFR1ZSBNYXkgMTIgMTM6NDg6NTMgMjAxNSAtMDQwMA0KDQogICAgZnMvYmxvY2tf ZGV2LmM6IHNraXAgcndfcGFnZSBpZiBiZGV2IGhhcyBpbnRlZ3JpdHkNCiAgICANCiAgICBJZiBh IGJsb2NrIGRldmljZSBoYXMgYmlvIGludGVncml0eSBlbmFibGVkLCByd19wYWdlIHdpbGwgYnlw YXNzIHRoZQ0KICAgIGludGVncml0eSBwYXlsb2FkLCB3aGljaCBpcyB1bmRlc2lyYWJsZS4gU2tp cCByd19wYWdlIGlmIHRoaXMgaXMgdGhlDQogICAgY2FzZS4NCiAgICANCiAgICBDdXJyZW50bHkg YnJkIGFuZCB6cmFtIHByb3ZpZGUgcndfcGFnZSwgYW5kIHRoZSBwcm9wb3NlZCAnbmQnIGRyaXZl cnMNCiAgICB3aWxsIHRvby4NCiAgICANCiAgICBDYzogSmVucyBBeGJvZSA8YXhib2VAZmIuY29t Pg0KICAgIENjOiBNYXJ0aW4gSy4gUGV0ZXJzZW4gPG1hcnRpbi5wZXRlcnNlbkBvcmFjbGUuY29t Pg0KICAgIFN1Z2dlc3RlZC1ieTogTWF0dGhldyBXaWxjb3ggPG1hdHRoZXcuci53aWxjb3hAaW50 ZWwuY29tPg0KICAgIFNpZ25lZC1vZmYtYnk6IFZpc2hhbCBWZXJtYSA8dmlzaGFsLmwudmVybWFA bGludXguaW50ZWwuY29tPg0KICAgIFNpZ25lZC1vZmYtYnk6IERhbiBXaWxsaWFtcyA8ZGFuLmou d2lsbGlhbXNAaW50ZWwuY29tPg0KDQpjb21taXQgNDFjZDhiNzBjMzdhY2U0MDA3N2M4ZDZlYzBi NzRiOTgzMTc4YzE5Mg0KQXV0aG9yOiBWaXNoYWwgVmVybWEgPHZpc2hhbC5sLnZlcm1hQGludGVs LmNvbT4NCkRhdGU6ICAgVGh1IEp1biAyNSAwNDoyMTo1MiAyMDE1IC0wNDAwDQoNCiAgICBsaWJu dmRpbW0sIGJ0dDogYWRkIHN1cHBvcnQgZm9yIGJsayBpbnRlZ3JpdHkNCiAgICANCiAgICBTdXBw b3J0IG11bHRpcGxlIGJsb2NrIHNpemVzIChzZWN0b3IgKyBtZXRhZGF0YSkgdXNpbmcgdGhlIGJs ayBpbnRlZ3JpdHkNCiAgICBmcmFtZXdvcmsuIFRoaXMgcmVnaXN0ZXJzIGEgbmV3IGludGVncml0 eSB0ZW1wbGF0ZSB0aGF0IGRlZmluZXMgdGhlDQogICAgcHJvdGVjdGlvbiBpbmZvcm1hdGlvbiB0 dXBsZSBzaXplIGJhc2VkIG9uIHRoZSBjb25maWd1cmVkIG1ldGFkYXRhIHNpemUsDQogICAgYW5k IHNpbXBseSBhY3RzIGFzIGEgcGFzc3Rocm91Z2ggZm9yIHByb3RlY3Rpb24gaW5mb3JtYXRpb24g Z2VuZXJhdGVkIGJ5DQogICAgYW5vdGhlciBsYXllci4gVGhlIG1ldGFkYXRhIGlzIHdyaXR0ZW4g dG8gdGhlIHN0b3JhZ2UgYXMtaXMsIGFuZCByZWFkIGJhY2sNCiAgICB3aXRoIGVhY2ggc2VjdG9y Lg0KICAgIA0KICAgIFNpZ25lZC1vZmYtYnk6IFZpc2hhbCBWZXJtYSA8dmlzaGFsLmwudmVybWFA bGludXguaW50ZWwuY29tPg0KICAgIFNpZ25lZC1vZmYtYnk6IERhbiBXaWxsaWFtcyA8ZGFuLmou d2lsbGlhbXNAaW50ZWwuY29tPg0KDQpjb21taXQgZmNhZTY5NTczN2ZjYTA4NDljMThkYjgxNGQ5 ZDhkZTA1YzBmZDJhMg0KQXV0aG9yOiBWaXNoYWwgVmVybWEgPHZpc2hhbC5sLnZlcm1hQGludGVs LmNvbT4NCkRhdGU6ICAgVGh1IEp1biAyNSAwNDoyMjozOSAyMDE1IC0wNDAwDQoNCiAgICBsaWJu dmRpbW0sIGJsazogYWRkIHN1cHBvcnQgZm9yIGJsayBpbnRlZ3JpdHkNCiAgICANCiAgICBTdXBw b3J0IG11bHRpcGxlIGJsb2NrIHNpemVzIChzZWN0b3IgKyBtZXRhZGF0YSkgZm9yIG5kX2JsayBp biB0aGUNCiAgICBzYW1lIHdheSBhcyBkb25lIGZvciB0aGUgQlRULiBBZGQgdGhlIGlkZWEgb2Yg YW4gJ2ludGVybmFsJyBsYmFzaXplLA0KICAgIHdoaWNoIGlzIHByb3Blcmx5IGFsaWduZWQgYW5k IHBhZGRlZCwgYW5kIHN0b3JlIG1ldGFkYXRhIGluIHRoaXMgc3BhY2UuDQogICAgDQogICAgU2ln bmVkLW9mZi1ieTogVmlzaGFsIFZlcm1hIDx2aXNoYWwubC52ZXJtYUBsaW51eC5pbnRlbC5jb20+ DQogICAgU2lnbmVkLW9mZi1ieTogRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRlbC5j b20+DQoNCmNvbW1pdCA0M2QzZmEzYTA0OTExNjhhZDc2OWQyMGQ1Y2JhZTQ1NDkyNTA5ZDQzDQpB dXRob3I6IERhbiBXaWxsaWFtcyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tPg0KRGF0ZTogICBT YXQgTWF5IDE2IDEyOjI4OjUwIDIwMTUgLTA0MDANCg0KICAgIGxpYm52ZGltbSwgcG1lbTogZml4 IHVwIG1heF9od19zZWN0b3JzDQogICAgDQogICAgVGhlcmUgaXMgbm8gaGFyZHdhcmUgbGltaXQg dG8gZW5mb3JjZSBvbiB0aGUgc2l6ZSBvZiB0aGUgaS9vIHRoYXQgY2FuIGJlIHBhc3NlZA0KICAg IHRvIGFuIG52ZGltbSBibG9jayBkZXZpY2UsIHNvIHNldCBpdCB0byBVSU5UX01BWC4NCiAgICAN CiAgICBSZXZpZXdlZC1ieTogVmlzaGFsIFZlcm1hIDx2aXNoYWwubC52ZXJtYUBsaW51eC5pbnRl bC5jb20+DQogICAgU2lnbmVkLW9mZi1ieTogRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0Bp bnRlbC5jb20+DQoNCmNvbW1pdCBlZGM4NzBlNTQ2OTZiZWI5ZjM4MzVlY2I0MWE0ZTFjODRlZTQ1 ODRkDQpBdXRob3I6IERhbiBXaWxsaWFtcyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tPg0KRGF0 ZTogICBTYXQgTWF5IDE2IDEyOjI4OjUxIDIwMTUgLTA0MDANCg0KICAgIHBtZW06IG1ha2VfcmVx dWVzdCBjbGVhbnVwcw0KICAgIA0KICAgIFZhcmlvdXMgY2xlYW51cHM6DQogICAgDQogICAgMS8g S2lsbCB0aGUgQlVHX09OIHNpbmNlIHdlJ3ZlIGFscmVhZHkgdG9sZCB0aGUgYmxvY2sgbGF5ZXIg d2UgZG9uJ3QNCiAgICAgICBzdXBwb3J0IERJU0NBUkQgb24gYWxsIHRoZXNlIGRyaXZlcnMuDQog ICAgDQogICAgMi8gS2lsbCB0aGUgJ3J3JyB2YXJpYWJsZSwgbm8gbmVlZCB0byBjYWNoZSBpdC4N CiAgICANCiAgICAzLyBLaWxsIHRoZSBsb2NhbCAnc2VjdG9yJyB2YXJpYWJsZS4gIGJpb19mb3Jf ZWFjaF9zZWdtZW50KCkgaXMgYWxyZWFkeQ0KICAgICAgIGFkdmFuY2luZyB0aGUgaXRlcmF0b3In cyBzZWN0b3IgbnVtYmVyIGJ5IHRoZSBiaW9fdmVjIGxlbmd0aC4NCiAgICANCiAgICA0LyBLaWxs IHRoZSBjaGVjayBmb3IgYWNjZXNzaW5nIHBhc3QgdGhlIGVuZCBvZiBkZXZpY2UNCiAgICAgICBn ZW5lcmljX21ha2VfcmVxdWVzdF9jaGVja3MoKSBhbHJlYWR5IGRvZXMgdGhhdC4NCiAgICANCiAg ICBTdWdnZXN0ZWQtYnk6IENocmlzdG9waCBIZWxsd2lnIDxoY2hAbHN0LmRlPg0KICAgIFtoY2g6 IGtpbGwgYWNjZXNzIHBhc3QgZW5kIG9mIHRoZSBkZXZpY2UgY2hlY2tdDQogICAgUmV2aWV3ZWQt Ynk6IFZpc2hhbCBWZXJtYSA8dmlzaGFsLmwudmVybWFAbGludXguaW50ZWwuY29tPg0KICAgIFNp Z25lZC1vZmYtYnk6IERhbiBXaWxsaWFtcyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tPg0KDQpj b21taXQgZjBkYzA4OWNlMjE3ZTdiOThlMGQyMDc3YzU0OGZmMDgxMjllNzkxMQ0KQXV0aG9yOiBE YW4gV2lsbGlhbXMgPGRhbi5qLndpbGxpYW1zQGludGVsLmNvbT4NCkRhdGU6ICAgU2F0IE1heSAx NiAxMjoyODo1MyAyMDE1IC0wNDAwDQoNCiAgICBsaWJudmRpbW06IGVuYWJsZSBpb3N0YXQNCiAg ICANCiAgICBUaGlzIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgYXMgdGhlIG92ZXJoZWFkIGlzIHBy b2hpYml0aXZlLCBidXQgaWYgdGhlDQogICAgdXNlciB0YWtlcyB0aGUgYWN0aW9uIHRvIHR1cm4g aXQgb24gd2UnbGwgb2JsaWdlLg0KICAgIA0KICAgIFJldmlld2VkLWJ5OiBWaXNoYWwgVmVybWEg PHZpc2hhbC5sLnZlcm1hQGxpbnV4LmludGVsLmNvbT4NCiAgICBTaWduZWQtb2ZmLWJ5OiBEYW4g V2lsbGlhbXMgPGRhbi5qLndpbGxpYW1zQGludGVsLmNvbT4NCg0KY29tbWl0IDBmNTFjNGZhN2Y2 MDgzOGE4N2NkNDVlOGJhMTQ0ZGRkY2Q0YzA2NmMNCkF1dGhvcjogRGFuIFdpbGxpYW1zIDxkYW4u ai53aWxsaWFtc0BpbnRlbC5jb20+DQpEYXRlOiAgIFNhdCBNYXkgMTYgMTI6Mjg6NTQgMjAxNSAt MDQwMA0KDQogICAgcG1lbTogZmxhZyBwbWVtIGJsb2NrIGRldmljZXMgYXMgbm9uLXJvdGF0aW9u YWwNCiAgICANCiAgICAuLi5zaW5jZSB0aGV5IGFyZSBlZmZlY3RpdmVseSBTU0RzIGFzIGZhciBh cyB1c2Vyc3BhY2UgaXMgY29uY2VybmVkLg0KICAgIA0KICAgIFJldmlld2VkLWJ5OiBWaXNoYWwg VmVybWEgPHZpc2hhbC5sLnZlcm1hQGxpbnV4LmludGVsLmNvbT4NCiAgICBTaWduZWQtb2ZmLWJ5 OiBEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxpYW1zQGludGVsLmNvbT4NCg0KY29tbWl0IDU4MTM4 ODIwOTQwNTkwMmI1NmQwNTVmNjQ0YjRkZDEyNGEyMDYxMTINCkF1dGhvcjogRGFuIFdpbGxpYW1z IDxkYW4uai53aWxsaWFtc0BpbnRlbC5jb20+DQpEYXRlOiAgIFR1ZSBKdW4gMjMgMjA6MDg6MzQg MjAxNSAtMDQwMA0KDQogICAgbGlibnZkaW1tLCBuZml0OiBoYW5kbGUgdW5hcm1lZCBkaW1tcywg bWFyayBuYW1lc3BhY2VzIHJlYWQtb25seQ0KICAgIA0KICAgIFVwb24gZGV0ZWN0aW9uIG9mIGFu IHVuYXJtZWQgZGltbSBpbiBhIHJlZ2lvbiwgYXJyYW5nZSBmb3IgZGVzY2VuZGFudA0KICAgIEJU VCwgUE1FTSwgb3IgQkxLIGluc3RhbmNlcyB0byBiZSByZWFkLW9ubHkuICBBIGRpbW0gaXMgcHJp bWFyaWx5IG1hcmtlZA0KICAgICJ1bmFybWVkIiB2aWEgZmxhZ3MgcGFzc2VkIGJ5IHBsYXRmb3Jt IGZpcm13YXJlIChORklUKS4NCiAgICANCiAgICBUaGUgZmxhZ3MgaW4gdGhlIE5GSVQgbWVtb3J5 IGRldmljZSBzdWItc3RydWN0dXJlIGluZGljYXRlIHRoZSBzdGF0ZSBvZg0KICAgIHRoZSBkYXRh IG9uIHRoZSBudmRpbW0gcmVsYXRpdmUgdG8gaXRzIGVuZXJneSBzb3VyY2Ugb3IgbGFzdCAiZmx1 c2ggdG8NCiAgICBwZXJzaXN0ZW5jZSIuICBGb3IgdGhlIG1vc3QgcGFydCB0aGVyZSBpcyBub3Ro aW5nIHRoZSBkcml2ZXIgY2FuIGRvIGJ1dA0KICAgIGFkdmVydGlzZSB0aGUgc3RhdGUgb2YgdGhl c2UgZmxhZ3MgaW4gc3lzZnMgYW5kIGVtaXQgYSBtZXNzYWdlIGlmDQogICAgZmlybXdhcmUgaW5k aWNhdGVzIHRoYXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBkZXZpY2UgbWF5IGJlIGNvcnJ1cHRlZC4N CiAgICBIb3dldmVyLCBmb3IgdGhlIGNhc2Ugb2YgQUNQSV9ORklUX01FTV9BUk1FRCwgdGhlIGRy aXZlciBjYW4gYXJyYW5nZSBmb3INCiAgICB0aGUgYmxvY2sgZGV2aWNlcyBpbmNvcnBvcmF0aW5n IHRoYXQgbnZkaW1tIHRvIGJlIG1hcmtlZCByZWFkLW9ubHkuDQogICAgVGhpcyBpcyBhIHNhZmUg ZGVmYXVsdCBhcyB0aGUgZGF0YSBpcyBzdGlsbCBhdmFpbGFibGUgYW5kIG5ldyB3cml0ZXMgYXJl DQogICAgaGVsZCBvZmYgdW50aWwgdGhlIGFkbWluaXN0cmF0b3IgZWl0aGVyIGZvcmNlcyByZWFk LXdyaXRlIG1vZGUsIG9yIHRoZQ0KICAgIGVuZXJneSBzb3VyY2UgYmVjb21lcyBhcm1lZC4NCiAg ICANCiAgICBBICdyZWFkX29ubHknIGF0dHJpYnV0ZSBpcyBhZGRlZCB0byBSRUdJT04gZGV2aWNl cyB0byBhbGxvdyBmb3INCiAgICBvdmVycmlkaW5nIHRoZSBkZWZhdWx0IHJlYWQtb25seSBwb2xp Y3kgb2YgYWxsIGRlc2NlbmRhbnQgYmxvY2sgZGV2aWNlcy4NCiAgICANCiAgICBTaWduZWQtb2Zm LWJ5OiBEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxpYW1zQGludGVsLmNvbT4NCg0KY29tbWl0IDk5 NzU5ODY5ZmFmMTU0NzFjZmNlMjUxYmMxMzg4NDhkOGFmN2QxNjINCkF1dGhvcjogVG9zaGkgS2Fu aSA8dG9zaGkua2FuaUBocC5jb20+DQpEYXRlOiAgIEZyaSBKdW4gMTkgMTc6MTQ6MTUgMjAxNSAt MDYwMA0KDQogICAgYWNwaTogQWRkIGFjcGlfbWFwX3B4bV90b19vbmxpbmVfbm9kZSgpDQogICAg DQogICAgVGhlIGtlcm5lbCBpbml0aWFsaXplcyBDUFUgJiBtZW1vcnkncyBOVU1BIHRvcG9sb2d5 IGZyb20gQUNQSQ0KICAgIFNSQVQgdGFibGUuICBTb21lIG90aGVyIEFDUEkgdGFibGVzLCBzdWNo IGFzIE5GSVQgYW5kIERNQVIsIGFsc28NCiAgICBjb250YWluIHByb3hpbWl0eSBJRHMgZm9yIHRo ZWlyIGRldmljZSdzIE5VTUEgdG9wb2xvZ3kuICBUaGlzDQogICAgaW5mb3JtYXRpb24gY2FuIGJl IHVzZWQgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBvZiB0aGVzZSBkZXZpY2VzLg0KICAgIA0KICAg IFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhY3BpX21hcF9weG1fdG9fb25saW5lX25vZGUoKSwgd2hp Y2ggaXMNCiAgICBzaW1pbGFyIHRvIGFjcGlfbWFwX3B4bV90b19ub2RlKCksIGJ1dCBhbHdheXMg cmV0dXJucyBhbiBvbmxpbmUNCiAgICBub2RlLiAgV2hlbiB0aGUgbWFwcGVkIG5vZGUgZnJvbSBh IGdpdmVuIHByb3hpbWl0eSBJRCBpcyBvZmZsaW5lLA0KICAgIGl0IGxvb2tzIHVwIHRoZSBub2Rl IGRpc3RhbmNlIHRhYmxlIGFuZCByZXR1cm5zIHRoZSBuZWFyZXN0DQogICAgb25saW5lIG5vZGUu DQogICAgDQogICAgQUNQSSBkZXZpY2UgZHJpdmVycywgd2hpY2ggYXJlIGNhbGxlZCBhZnRlciB0 aGUgTlVNQSBpbml0aWFsaXphdGlvbg0KICAgIGhhcyBjb21wbGV0ZWQgaW4gdGhlIGtlcm5lbCwg Y2FuIGNhbGwgdGhpcyBpbnRlcmZhY2UgdG8gb2J0YWluIHRoZWlyDQogICAgZGV2aWNlIE5VTUEg dG9wb2xvZ3kgZnJvbSBBQ1BJIHRhYmxlcy4gIFN1Y2ggZHJpdmVycyBkbyBub3QgaGF2ZSB0bw0K ICAgIGRlYWwgd2l0aCBvZmZsaW5lIG5vZGVzLiAgQSBub2RlIG1heSBiZSBvZmZsaW5lIHdoZW4g YSBkZXZpY2UNCiAgICBwcm94aW1pdHkgSUQgaXMgdW5pcXVlLCBTUkFUIG1lbW9yeSBlbnRyeSBk b2VzIG5vdCBleGlzdCwgb3IgTlVNQSBpcw0KICAgIGRpc2FibGVkLCBleC4gIm51bWE9b2ZmIiBv biB4ODYuDQogICAgDQogICAgVGhpcyBwYXRjaCBhbHNvIG1vdmVzIHRoZSBweG0gcmFuZ2UgY2hl Y2sgZnJvbSBhY3BpX2dldF9ub2RlKCkgdG8NCiAgICBhY3BpX21hcF9weG1fdG9fbm9kZSgpLg0K ICAgIA0KICAgIFNpZ25lZC1vZmYtYnk6IFRvc2hpIEthbmkgPHRvc2hpLmthbmlAaHAuY29tPg0K ICAgIEFja2VkLWJ5OiBSYWZhZWwgSi4gV3lzb2NraSA8cmFmYWVsLmoud3lzb2NraUBpbnRlbC5j b20+Pg0KICAgIFNpZ25lZC1vZmYtYnk6IERhbiBXaWxsaWFtcyA8ZGFuLmoud2lsbGlhbXNAaW50 ZWwuY29tPg0KDQpjb21taXQgNDFkN2E2ZDYzN2UxNDQwZjU0MTBjYjQzYzI1YTNjNDEyNTU1NDBj NQ0KQXV0aG9yOiBUb3NoaSBLYW5pIDx0b3NoaS5rYW5pQGhwLmNvbT4NCkRhdGU6ICAgRnJpIEp1 biAxOSAxMjoxODozMyAyMDE1IC0wNjAwDQoNCiAgICBsaWJudmRpbW06IFNldCBudW1hX25vZGUg dG8gTlZESU1NIGRldmljZXMNCiAgICANCiAgICBBQ1BJIE5GSVQgdGFibGUgaGFzIFN5c3RlbSBQ aHlzaWNhbCBBZGRyZXNzIFJhbmdlIFN0cnVjdHVyZSBlbnRyaWVzIHRoYXQNCiAgICBkZXNjcmli ZSBhIHByb3hpbWl0eSBJRCBvZiBlYWNoIHJhbmdlIHdoZW4gQUNQSV9ORklUX1BST1hJTUlUWV9W QUxJRCBpcw0KICAgIHNldCBpbiB0aGUgZmxhZ3MuDQogICAgDQogICAgQ2hhbmdlIGFjcGlfbmZp dF9yZWdpc3Rlcl9yZWdpb24oKSB0byBtYXAgYSBwcm94aW1pdHkgSUQgdG8gaXRzIG5vZGUgSUQs DQogICAgYW5kIHNldCBpdCB0byBhIG5ldyBudW1hX25vZGUgZmllbGQgb2YgbmRfcmVnaW9uX2Rl c2MsIHdoaWNoIGlzIHRoZW4NCiAgICBjb252ZXllZCB0byB0aGUgbmRfcmVnaW9uIGRldmljZS4N CiAgICANCiAgICBUaGUgZGV2aWNlIGNvcmUgYXJyYW5nZXMgZm9yIGJ0dCBhbmQgbmFtZXNwYWNl IGRldmljZXMgdG8gaW5oZXJpdCB0aGVpcg0KICAgIG5vZGUgZnJvbSB0aGVpciBwYXJlbnQgcmVn aW9uLg0KICAgIA0KICAgIFNpZ25lZC1vZmYtYnk6IFRvc2hpIEthbmkgPHRvc2hpLmthbmlAaHAu Y29tPg0KICAgIFtkamJ3OiBtb3ZlIHNldF9kZXZfbm9kZSgpIGZyb20gcmVnaW9uLmMgdG8gYnVz LmNdDQogICAgU2lnbmVkLW9mZi1ieTogRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRl bC5jb20+DQoNCmNvbW1pdCA3NGFlNjZjM2IxNGZmYTk0YzhkMmRlYTIwMWNkZjhlNjIwM2QxM2Q1 DQpBdXRob3I6IFRvc2hpIEthbmkgPHRvc2hpLmthbmlAaHAuY29tPg0KRGF0ZTogICBGcmkgSnVu IDE5IDEyOjE4OjM0IDIwMTUgLTA2MDANCg0KICAgIGxpYm52ZGltbTogQWRkIHN5c2ZzIG51bWFf bm9kZSB0byBOVkRJTU0gZGV2aWNlcw0KICAgIA0KICAgIEFkZCBzdXBwb3J0IG9mIHN5c2ZzICdu dW1hX25vZGUnIHRvIEkvTy1yZWxhdGVkIE5WRElNTSBkZXZpY2VzDQogICAgdW5kZXIgL3N5cy9i dXMvbmQvZGV2aWNlcywgcmVnaW9uTiwgbmFtZXNwYWNlTi4wLCBhbmQgYnR0Ti54Lg0KICAgIA0K ICAgIEFuIGV4YW1wbGUgb2YgbnVtYV9ub2RlIHZhbHVlcyBvbiBhIDItc29ja2V0IHN5c3RlbSB3 aXRoIGEgc2luZ2xlDQogICAgTlZESU1NIHJhbmdlIG9uIGVhY2ggc29ja2V0IGlzIHNob3duIGJl bG93Lg0KICAgICAgL3N5cy9idXMvbmQvZGV2aWNlcw0KICAgICAgfC0tIGJ0dDAuMC9udW1hX25v ZGU6MA0KICAgICAgfC0tIGJ0dDEuMC9udW1hX25vZGU6MQ0KICAgICAgfC0tIGJ0dDEuMS9udW1h X25vZGU6MQ0KICAgICAgfC0tIG5hbWVzcGFjZTAuMC9udW1hX25vZGU6MA0KICAgICAgfC0tIG5h bWVzcGFjZTEuMC9udW1hX25vZGU6MQ0KICAgICAgfC0tIHJlZ2lvbjAvbnVtYV9ub2RlOjANCiAg ICAgIHwtLSByZWdpb24xL251bWFfbm9kZToxDQogICAgDQogICAgVGhlc2UgbnVtYV9ub2RlIGZp bGVzIGFyZSB0aGVuIGxpbmtlZCB1bmRlciB0aGUgYmxvY2sgY2xhc3Mgb2YNCiAgICB0aGVpciBk ZXZpY2UgbmFtZXMuDQogICAgICAvc3lzL2NsYXNzL2Jsb2NrL3BtZW0wL2RldmljZS9udW1hX25v ZGU6MA0KICAgICAgL3N5cy9jbGFzcy9ibG9jay9wbWVtMXMvZGV2aWNlL251bWFfbm9kZToxDQog ICAgDQogICAgVGhpcyBlbmFibGVzIG51bWFjdGwoOCkgdG8gYWNjZXB0ICdibG9jazonIGFuZCAn ZmlsZTonIHBhdGhzIG9mDQogICAgcG1lbSBhbmQgYnR0IGRldmljZXMgYXMgc2hvd24gaW4gdGhl IGV4YW1wbGVzIGJlbG93Lg0KICAgICAgbnVtYWN0bCAtLXByZWZlcnJlZCBibG9jazpwbWVtMCAt LXNob3cNCiAgICAgIG51bWFjdGwgLS1wcmVmZXJyZWQgZmlsZTovZGV2L3BtZW0xcyAtLXNob3cN CiAgICANCiAgICBTaWduZWQtb2ZmLWJ5OiBUb3NoaSBLYW5pIDx0b3NoaS5rYW5pQGhwLmNvbT4N CiAgICBTaWduZWQtb2ZmLWJ5OiBEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxpYW1zQGludGVsLmNv bT4NCg0KY29tbWl0IDYxMDMxOTUyZjRjODlkYmExMDY1ZjdhNWI5NDE5YmFkYjExMjU1NGMNCkF1 dGhvcjogUm9zcyBad2lzbGVyIDxyb3NzLnp3aXNsZXJAbGludXguaW50ZWwuY29tPg0KRGF0ZTog ICBUaHUgSnVuIDI1IDAzOjA4OjM5IDIwMTUgLTA0MDANCg0KICAgIGFyY2gsIHg4NjogcG1lbSBh cGkgZm9yIGVuc3VyaW5nIGR1cmFiaWxpdHkgb2YgcGVyc2lzdGVudCBtZW1vcnkgdXBkYXRlcw0K ICAgIA0KICAgIEJhc2VkIG9uIGFuIG9yaWdpbmFsIHBhdGNoIGJ5IFJvc3MgWndpc2xlciBbMV0u DQogICAgDQogICAgV3JpdGVzIHRvIHBlcnNpc3RlbnQgbWVtb3J5IGhhdmUgdGhlIHBvdGVudGlh bCB0byBiZSBwb3N0ZWQgdG8gY3B1DQogICAgY2FjaGUsIGNwdSB3cml0ZSBidWZmZXJzLCBhbmQg cGxhdGZvcm0gd3JpdGUgYnVmZmVycyAobWVtb3J5IGNvbnRyb2xsZXIpDQogICAgYmVmb3JlIGJl aW5nIGNvbW1pdHRlZCB0byBwZXJzaXN0ZW50IG1lZGlhLiAgUHJvdmlkZSBhcGlzLA0KICAgIG1l bWNweV90b19wbWVtKCksIHdtYl9wbWVtKCksIGFuZCBtZW1yZW1hcF9wbWVtKCksIHRvIHdyaXRl IGRhdGEgdG8NCiAgICBwbWVtIGFuZCBhc3NlcnQgdGhhdCBpdCBpcyBkdXJhYmxlIGluIFBNRU0g KGEgcGVyc2lzdGVudCBsaW5lYXIgYWRkcmVzcw0KICAgIHJhbmdlKS4gIEEgJ19fcG1lbScgYXR0 cmlidXRlIGlzIGFkZGVkIHNvIHNwYXJzZSBjYW4gdHJhY2sgcHJvcGVyIHVzYWdlDQogICAgb2Yg cG9pbnRlcnMgdG8gcG1lbS4NCiAgICANCiAgICBUaGlzIGNvbnRpbnVlcyB0aGUgc3RhdHVzIHF1 byBvZiBwbWVtIGJlaW5nIHg4NiBvbmx5IGZvciA0LjIsIGJ1dA0KICAgIHJld29ya3MgdG8gaW9y ZW1hcCwgYW5kIHdpZGVyIGltcGxlbWVudGF0aW9uIG9mIG1lbXJlbWFwKCkgd2lsbCBlbmFibGUN CiAgICBvdGhlciBhcmNocyBpbiA0LjMuDQogICAgDQogICAgWzFdOiBodHRwczovL2xpc3RzLjAx Lm9yZy9waXBlcm1haWwvbGludXgtbnZkaW1tLzIwMTUtTWF5LzAwMDkzMi5odG1sDQogICAgDQog ICAgQ2M6IFRob21hcyBHbGVpeG5lciA8dGdseEBsaW51dHJvbml4LmRlPg0KICAgIENjOiBJbmdv IE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4NCiAgICBDYzogIkguIFBldGVyIEFudmluIiA8aHBh QHp5dG9yLmNvbT4NCiAgICBTaWduZWQtb2ZmLWJ5OiBSb3NzIFp3aXNsZXIgPHJvc3Muendpc2xl ckBsaW51eC5pbnRlbC5jb20+DQogICAgW2RqYnc6IHZhcmlvdXMgcmV3b3Jrc10NCiAgICBTaWdu ZWQtb2ZmLWJ5OiBEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxpYW1zQGludGVsLmNvbT4NCg0K From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752953AbbFZVqm (ORCPT ); Fri, 26 Jun 2015 17:46:42 -0400 Received: from mga02.intel.com ([134.134.136.20]:52739 "EHLO mga02.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752729AbbFZVqa (ORCPT ); Fri, 26 Jun 2015 17:46:30 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.13,686,1427785200"; d="scan'208";a="595523697" From: "Williams, Dan J" To: "torvalds@linux-foundation.org" CC: "toshi.kani@hp.com" , "mingo@kernel.org" , "linux-kernel@vger.kernel.org" , "nicholas.w.moulin@linux.intel.com" , "Rudoff, Andy" , "jmoyer@redhat.com" , "tglx@linutronix.de" , "hch@lst.de" , "axboe@kernel.dk" , "Moore, Robert" , "Wysocki, Rafael J" , "hpa@zytor.com" , "linux-nvdimm@lists.01.org" , "axboe@fb.com" , "willy@linux.intel.com" , "bp@alien8.de" , "ross.zwisler@linux.intel.com" , "Verma, Vishal L" , "gregkh@linuxfoundation.org" , "luto@amacapital.net" , "linux-acpi@vger.kernel.org" , "akpm@linux-foundation.org" Subject: [GIT PULL] libnvdimm: non-volatile memory devices for 4.2 Thread-Topic: [GIT PULL] libnvdimm: non-volatile memory devices for 4.2 Thread-Index: AQHQsFmNo50QeBO4rEaXH7Ack16wjw== Date: Fri, 26 Jun 2015 21:46:26 +0000 Message-ID: <1435355182.18090.64.camel@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.22.254.138] Content-Type: text/plain; charset="utf-8" Content-ID: <742108056C3A7A4ABEF7F37AAE8FF96C@intel.com> MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by mail.home.local id t5QLknPd031558 Hi Linus, please pull from: git://git.kernel.org/pub/scm/linux/kernel/git/djbw/nvdimm tags/libnvdimm-for-4.2 ...to receive the new libnvdimm sub-system, related drivers, and x86 enabling. --- Earlier this week, in the ACPICA update, you merged the definition of the new ACPI 6.0 table describing platform non-volatile memory resources, NFIT (NVDIMM Firmware Interface Table). The specification for this table guided development of libnvdimm, a generic kernel sub-system in support of NVDIMM devices. The new ACPI_NFIT driver is the primary consumer of this library, and it also supports the existing X86_PMEM_LEGACY definition merged in v4.1. The implementation has been out for review since ACPI 6.0 was released which coincided with v4.1-rc1. We have iterated through a steady stream of tough, but ultimately for the betterment of the code base, review feedback. The code is merge ready as we have worked through all the coarse aspects of the architecture, primarily with Christoph, and have demonstrated a willingness and ability to quickly spin the implementation in response to review. It must be noted that the one aspect of this pull request that Christoph still has concerns, the external unit test infrastructure in tools/testing/nvdimm/, is the primary reason we have been able to spin the implementation with speed and confidence. The changelog for commit 6bc756193ff6 "tools/testing/nvdimm: libnvdimm unit test infrastructure" goes into more details of the rationale to include it. Suffice to say the potential maintenance burden of carrying driver test infrastructure in-tree is overshadowed by the benefits of demonstrating the implementation in the absence of hardware, catching bugs (the majority of them), and identifying incomplete enabling. Notably missing from this merge request are some of the wider arch cleanups (generic ioremap_cache()) and core kernel enabling (__pfn_t, kmap_atomic_pfn_t(), memremap(), etc...) updates that were identified in the course of development. Those will need to wait for 4.3. In the meantime this does include the new pmem api which hooks up the "pcommit" instruction that was previously merged in v4.1 and outlines what an architecture may need to implement to reliably support pmem. Please pull, full commit log below so you can see what has been explicitly acked. Thank you! --- The following changes since commit f3b6ced236259a87829b829e8e542ff53bfb9a4f: ACPICA: Fix for ill-formed GUID strings for NFIT tables. (2015-05-25 23:42:34 +0200) are available in the git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/djbw/nvdimm tags/libnvdimm-for-4.2 for you to fetch changes up to 61031952f4c89dba1065f7a5b9419badb112554c: arch, x86: pmem api for ensuring durability of persistent memory updates (2015-06-26 11:23:38 -0400) ---------------------------------------------------------------- The libnvdimm sub-system introduces, in addition to the libnvdimm-core, 4 drivers / enabling modules: NFIT: Instantiates an "nvdimm bus" with the core and registers memory devices (NVDIMMs) enumerated by the ACPI 6.0 NFIT (NVDIMM Firmware Interface table). After registering NVDIMMs the NFIT driver then registers "region" devices. A libnvdimm-region defines an access mode and the boundaries of persistent memory media. A region may span multiple NVDIMMs that are interleaved by the hardware memory controller. In turn, a libnvdimm-region can be carved into a "namespace" device and bound to the PMEM or BLK driver which will attach a Linux block device (disk) interface to the memory. PMEM: Initially merged in v4.1 this driver for contiguous spans of persistent memory address ranges is re-worked to drive PMEM-namespaces emitted by the libnvdimm-core. In this update the PMEM driver, on x86, gains the ability to assert that writes to persistent memory have been flushed all the way through the caches and buffers in the platform to persistent media. See memcpy_to_pmem() and wmb_pmem(). BLK: This new driver enables access to persistent memory media through "Block Data Windows" as defined by the NFIT. The primary difference of this driver to PMEM is that only a small window of persistent memory is mapped into system address space at any given point in time. Per-NVDIMM windows are reprogrammed at run time, per-I/O, to access different portions of the media. BLK-mode, by definition, does not support DAX. BTT: This is a library, optionally consumed by either PMEM or BLK, that converts a byte-accessible namespace into a disk with atomic sector update semantics (prevents sector tearing on crash or power loss). The sinister aspect of sector tearing is that most applications do not know they have a atomic sector dependency. At least today's disks rarely ever tear sectors and if they do one almost certainly gets a CRC error on access. NVDIMMs will always tear and always silently. Until an application is audited to be robust in the presence of sector-tearing the usage of BTT is recommended. Thanks to: Ross Zwisler, Jeff Moyer, Vishal Verma, Christoph Hellwig, Ingo Molnar, Neil Brown, Boaz Harrosh, Robert Elliott, Matthew Wilcox, Andy Rudoff, Linda Knippers, Toshi Kani, Nicholas Moulin, Rafael Wysocki, and Bob Moore. ---------------------------------------------------------------- Dan Williams (24): e820, efi: add ACPI 6.0 persistent memory types libnvdimm, nfit: initial libnvdimm infrastructure and NFIT support libnvdimm: control character device and nvdimm_bus sysfs attributes libnvdimm, nfit: dimm/memory-devices libnvdimm: control (ioctl) messages for nvdimm_bus and nvdimm devices libnvdimm, nvdimm: dimm driver and base libnvdimm device-driver infrastructure libnvdimm, nfit: regions (block-data-window, persistent memory, volatile memory) libnvdimm: support for legacy (non-aliasing) nvdimms libnvdimm, pmem: move pmem to drivers/nvdimm/ libnvdimm, pmem: add libnvdimm support to the pmem driver libnvdimm, nfit: add interleave-set state-tracking infrastructure libnvdimm: namespace indices: read and validate libnvdimm: pmem label sets and namespace instantiation. libnvdimm: blk labels and namespace instantiation libnvdimm: write pmem label set libnvdimm: write blk label set libnvdimm: infrastructure for btt devices tools/testing/nvdimm: libnvdimm unit test infrastructure libnvdimm: Non-Volatile Devices libnvdimm, pmem: fix up max_hw_sectors pmem: make_request cleanups libnvdimm: enable iostat pmem: flag pmem block devices as non-rotational libnvdimm, nfit: handle unarmed dimms, mark namespaces read-only Ross Zwisler (2): libnvdimm, nfit, nd_blk: driver for BLK-mode access persistent memory arch, x86: pmem api for ensuring durability of persistent memory updates Toshi Kani (3): acpi: Add acpi_map_pxm_to_online_node() libnvdimm: Set numa_node to NVDIMM devices libnvdimm: Add sysfs numa_node to NVDIMM devices Vishal Verma (4): nd_btt: atomic sector updates fs/block_dev.c: skip rw_page if bdev has integrity libnvdimm, btt: add support for blk integrity libnvdimm, blk: add support for blk integrity Documentation/nvdimm/btt.txt | 283 +++++ Documentation/nvdimm/nvdimm.txt | 808 ++++++++++++++ MAINTAINERS | 39 +- arch/arm64/kernel/efi.c | 1 + arch/ia64/kernel/efi.c | 4 + arch/x86/Kconfig | 4 + arch/x86/boot/compressed/eboot.c | 4 + arch/x86/include/asm/cacheflush.h | 72 ++ arch/x86/include/asm/io.h | 6 + arch/x86/include/uapi/asm/e820.h | 1 + arch/x86/kernel/e820.c | 28 +- arch/x86/kernel/pmem.c | 93 +- arch/x86/platform/efi/efi.c | 3 + drivers/Kconfig | 2 + drivers/Makefile | 1 + drivers/acpi/Kconfig | 26 + drivers/acpi/Makefile | 1 + drivers/acpi/nfit.c | 1587 ++++++++++++++++++++++++++++ drivers/acpi/nfit.h | 158 +++ drivers/acpi/numa.c | 50 +- drivers/block/Kconfig | 11 - drivers/block/Makefile | 1 - drivers/nvdimm/Kconfig | 68 ++ drivers/nvdimm/Makefile | 20 + drivers/nvdimm/blk.c | 384 +++++++ drivers/nvdimm/btt.c | 1479 ++++++++++++++++++++++++++ drivers/nvdimm/btt.h | 185 ++++ drivers/nvdimm/btt_devs.c | 425 ++++++++ drivers/nvdimm/bus.c | 730 +++++++++++++ drivers/nvdimm/core.c | 465 ++++++++ drivers/nvdimm/dimm.c | 102 ++ drivers/nvdimm/dimm_devs.c | 551 ++++++++++ drivers/nvdimm/label.c | 927 ++++++++++++++++ drivers/nvdimm/label.h | 141 +++ drivers/nvdimm/namespace_devs.c | 1870 +++++++++++++++++++++++++++++++++ drivers/nvdimm/nd-core.h | 83 ++ drivers/nvdimm/nd.h | 220 ++++ drivers/{block => nvdimm}/pmem.c | 227 ++-- drivers/nvdimm/region.c | 114 ++ drivers/nvdimm/region_devs.c | 787 ++++++++++++++ fs/block_dev.c | 4 +- include/linux/acpi.h | 5 + include/linux/compiler.h | 2 + include/linux/efi.h | 3 +- include/linux/libnvdimm.h | 151 +++ include/linux/nd.h | 151 +++ include/linux/pmem.h | 153 +++ include/uapi/linux/Kbuild | 1 + include/uapi/linux/ndctl.h | 197 ++++ lib/Kconfig | 3 + tools/testing/nvdimm/Kbuild | 40 + tools/testing/nvdimm/Makefile | 7 + tools/testing/nvdimm/config_check.c | 15 + tools/testing/nvdimm/test/Kbuild | 8 + tools/testing/nvdimm/test/iomap.c | 151 +++ tools/testing/nvdimm/test/nfit.c | 1116 ++++++++++++++++++++ tools/testing/nvdimm/test/nfit_test.h | 29 + 57 files changed, 13843 insertions(+), 154 deletions(-) create mode 100644 Documentation/nvdimm/btt.txt create mode 100644 Documentation/nvdimm/nvdimm.txt create mode 100644 drivers/acpi/nfit.c create mode 100644 drivers/acpi/nfit.h create mode 100644 drivers/nvdimm/Kconfig create mode 100644 drivers/nvdimm/Makefile create mode 100644 drivers/nvdimm/blk.c create mode 100644 drivers/nvdimm/btt.c create mode 100644 drivers/nvdimm/btt.h create mode 100644 drivers/nvdimm/btt_devs.c create mode 100644 drivers/nvdimm/bus.c create mode 100644 drivers/nvdimm/core.c create mode 100644 drivers/nvdimm/dimm.c create mode 100644 drivers/nvdimm/dimm_devs.c create mode 100644 drivers/nvdimm/label.c create mode 100644 drivers/nvdimm/label.h create mode 100644 drivers/nvdimm/namespace_devs.c create mode 100644 drivers/nvdimm/nd-core.h create mode 100644 drivers/nvdimm/nd.h rename drivers/{block => nvdimm}/pmem.c (50%) create mode 100644 drivers/nvdimm/region.c create mode 100644 drivers/nvdimm/region_devs.c create mode 100644 include/linux/libnvdimm.h create mode 100644 include/linux/nd.h create mode 100644 include/linux/pmem.h create mode 100644 include/uapi/linux/ndctl.h create mode 100644 tools/testing/nvdimm/Kbuild create mode 100644 tools/testing/nvdimm/Makefile create mode 100644 tools/testing/nvdimm/config_check.c create mode 100644 tools/testing/nvdimm/test/Kbuild create mode 100644 tools/testing/nvdimm/test/iomap.c create mode 100644 tools/testing/nvdimm/test/nfit.c create mode 100644 tools/testing/nvdimm/test/nfit_test.h commit ad5fb870c486d932a1749d7853dd70f436a7e03f Author: Dan Williams Date: Fri Apr 3 12:05:28 2015 -0400 e820, efi: add ACPI 6.0 persistent memory types ACPI 6.0 formalizes e820-type-7 and efi-type-14 as persistent memory. Mark it "reserved" and allow it to be claimed by a persistent memory device driver. This definition is in addition to the Linux kernel's existing type-12 definition that was recently added in support of shipping platforms with NVDIMM support that predate ACPI 6.0 (which now classifies type-12 as OEM reserved). Note, /proc/iomem can be consulted for differentiating legacy "Persistent Memory (legacy)" E820_PRAM vs standard "Persistent Memory" E820_PMEM. Cc: Boaz Harrosh Cc: Ingo Molnar Cc: Christoph Hellwig Cc: Andrew Morton Cc: Borislav Petkov Cc: H. Peter Anvin Cc: Jens Axboe Cc: Linus Torvalds Cc: Matthew Wilcox Cc: Thomas Gleixner Acked-by: Jeff Moyer Acked-by: Andy Lutomirski Reviewed-by: Ross Zwisler Acked-by: Christoph Hellwig Tested-by: Toshi Kani Signed-off-by: Dan Williams commit b94d5230d06eb930be82e67fb1a9a58271e78297 Author: Dan Williams Date: Tue May 19 22:54:31 2015 -0400 libnvdimm, nfit: initial libnvdimm infrastructure and NFIT support A struct nvdimm_bus is the anchor device for registering nvdimm resources and interfaces, for example, a character control device, nvdimm devices, and I/O region devices. The ACPI NFIT (NVDIMM Firmware Interface Table) is one possible platform description for such non-volatile memory resources in a system. The nfit.ko driver attaches to the "ACPI0012" device that indicates the presence of the NFIT and parses the table to register a struct nvdimm_bus instance. Cc: Cc: Lv Zheng Cc: Robert Moore Cc: Rafael J. Wysocki Acked-by: Jeff Moyer Acked-by: Christoph Hellwig Acked-by: Rafael J. Wysocki Tested-by: Toshi Kani Signed-off-by: Dan Williams commit 45def22c1fab85764646746ce38d45b2f3281fa5 Author: Dan Williams Date: Sun Apr 26 19:26:48 2015 -0400 libnvdimm: control character device and nvdimm_bus sysfs attributes The control device for a nvdimm_bus is registered as an "nd" class device. The expectation is that there will usually only be one "nd" bus registered under /sys/class/nd. However, we allow for the possibility of multiple buses and they will listed in discovery order as ndctl0...ndctlN. This character device hosts the ioctl for passing control messages. The initial command set has a 1:1 correlation with the commands listed in the by the "NFIT DSM Example" document [1], but this scheme is extensible to future command sets. Note, nd_ioctl() and the backing ->ndctl() implementation are defined in a subsequent patch. This is simply the initial registrations and sysfs attributes. [1]: http://pmem.io/documents/NVDIMM_DSM_Interface_Example.pdf Cc: Neil Brown Cc: Greg KH Cc: Cc: Robert Moore Cc: Rafael J. Wysocki Acked-by: Christoph Hellwig Acked-by: Rafael J. Wysocki Tested-by: Toshi Kani Signed-off-by: Dan Williams commit e6dfb2de47768efe8cc37c9a1863d2aff81440fb Author: Dan Williams Date: Sat Apr 25 03:56:17 2015 -0400 libnvdimm, nfit: dimm/memory-devices Enable nvdimm devices to be registered on a nvdimm_bus. The kernel assigned device id for nvdimm devicesis dynamic. If userspace needs a more static identifier it should consult a provider-specific attribute. In the case where NFIT is the provider, the 'nmemX/nfit/handle' or 'nmemX/nfit/serial' attributes may be used for this purpose. Cc: Neil Brown Cc: Cc: Greg KH Cc: Robert Moore Cc: Rafael J. Wysocki Acked-by: Christoph Hellwig Acked-by: Rafael J. Wysocki Tested-by: Toshi Kani Signed-off-by: Dan Williams commit 62232e45f4a265abb43f0acf16e58f5d0b6e1ec9 Author: Dan Williams Date: Mon Jun 8 14:27:06 2015 -0400 libnvdimm: control (ioctl) messages for nvdimm_bus and nvdimm devices Most discovery/configuration of the nvdimm-subsystem is done via sysfs attributes. However, some nvdimm_bus instances, particularly the ACPI.NFIT bus, define a small set of messages that can be passed to the platform. For convenience we derive the initial libnvdimm-ioctl command formats directly from the NFIT DSM Interface Example formats. ND_CMD_SMART: media health and diagnostics ND_CMD_GET_CONFIG_SIZE: size of the label space ND_CMD_GET_CONFIG_DATA: read label space ND_CMD_SET_CONFIG_DATA: write label space ND_CMD_VENDOR: vendor-specific command passthrough ND_CMD_ARS_CAP: report address-range-scrubbing capabilities ND_CMD_ARS_START: initiate scrubbing ND_CMD_ARS_STATUS: report on scrubbing state ND_CMD_SMART_THRESHOLD: configure alarm thresholds for smart events If a platform later defines different commands than this set it is straightforward to extend support to those formats. Most of the commands target a specific dimm. However, the address-range-scrubbing commands target the bus. The 'commands' attribute in sysfs of an nvdimm_bus, or nvdimm, enumerate the supported commands for that object. Cc: Cc: Robert Moore Cc: Rafael J. Wysocki Reported-by: Nicholas Moulin Acked-by: Christoph Hellwig Signed-off-by: Dan Williams commit 4d88a97aa9e8cfa6460aab119c5da60ad2267423 Author: Dan Williams Date: Sun May 31 14:41:48 2015 -0400 libnvdimm, nvdimm: dimm driver and base libnvdimm device-driver infrastructure * Implement the device-model infrastructure for loading modules and attaching drivers to nvdimm devices. This is a simple association of a nd-device-type number with a driver that has a bitmask of supported device types. To facilitate userspace bind/unbind operations 'modalias' and 'devtype', that also appear in the uevent, are added as generic sysfs attributes for all nvdimm devices. The reason for the device-type number is to support sub-types within a given parent devtype, be it a vendor-specific sub-type or otherwise. * The first consumer of this infrastructure is the driver for dimm devices. It simply uses control messages to retrieve and store the configuration-data image (label set) from each dimm. Note: nd_device_register() arranges for asynchronous registration of nvdimm bus devices by default. Cc: Greg KH Cc: Neil Brown Acked-by: Christoph Hellwig Tested-by: Toshi Kani Signed-off-by: Dan Williams commit 1f7df6f88b9245a7f2d0f8ecbc97dc88c8d0d8e1 Author: Dan Williams Date: Tue Jun 9 20:13:14 2015 -0400 libnvdimm, nfit: regions (block-data-window, persistent memory, volatile memory) A "region" device represents the maximum capacity of a BLK range (mmio block-data-window(s)), or a PMEM range (DAX-capable persistent memory or volatile memory), without regard for aliasing. Aliasing, in the dimm-local address space (DPA), is resolved by metadata on a dimm to designate which exclusive interface will access the aliased DPA ranges. Support for the per-dimm metadata/label arrvies is in a subsequent patch. The name format of "region" devices is "regionN" where, like dimms, N is a global ida index assigned at discovery time. This id is not reliable across reboots nor in the presence of hotplug. Look to attributes of the region or static id-data of the sub-namespace to generate a persistent name. However, if the platform configuration does not change it is reasonable to expect the same region id to be assigned at the next boot. "region"s have 2 generic attributes "size", and "mapping"s where: - size: the BLK accessible capacity or the span of the system physical address range in the case of PMEM. - mappingN: a tuple describing a dimm's contribution to the region's capacity in the format (,,). For a PMEM-region there will be at least one mapping per dimm in the interleave set. For a BLK-region there is only "mapping0" listing the starting DPA of the BLK-region and the available DPA capacity of that space (matches "size" above). The max number of mappings per "region" is hard coded per the constraints of sysfs attribute groups. That said the number of mappings per region should never exceed the maximum number of possible dimms in the system. If the current number turns out to not be enough then the "mappings" attribute clarifies how many there are supposed to be. "32 should be enough for anybody...". Cc: Neil Brown Cc: Cc: Greg KH Cc: Robert Moore Cc: Rafael J. Wysocki Acked-by: Christoph Hellwig Acked-by: Rafael J. Wysocki Tested-by: Toshi Kani Signed-off-by: Dan Williams commit 3d88002e4a7bd40f355550284c6cd140e6fe29dc Author: Dan Williams Date: Sun May 31 15:02:11 2015 -0400 libnvdimm: support for legacy (non-aliasing) nvdimms The libnvdimm region driver is an intermediary driver that translates non-volatile "region"s into "namespace" sub-devices that are surfaced by persistent memory block-device drivers (PMEM and BLK). ACPI 6 introduces the concept that a given nvdimm may simultaneously offer multiple access modes to its media through direct PMEM load/store access, or windowed BLK mode. Existing nvdimms mostly implement a PMEM interface, some offer a BLK-like mode, but never both as ACPI 6 defines. If an nvdimm is single interfaced, then there is no need for dimm metadata labels. For these devices we can take the region boundaries directly to create a child namespace device (nd_namespace_io). Acked-by: Christoph Hellwig Tested-by: Toshi Kani Signed-off-by: Dan Williams commit 18da2c9ee41a036bf470dbad73c18a815725d36e Author: Dan Williams Date: Tue Jun 9 14:13:37 2015 -0400 libnvdimm, pmem: move pmem to drivers/nvdimm/ Prepare the pmem driver to consume PMEM namespaces emitted by regions of an nvdimm_bus instance. No functional change. Acked-by: Christoph Hellwig Tested-by: Toshi Kani Signed-off-by: Dan Williams commit 9f53f9fa4ad1d8bddd4d14359cdabc531aedffe8 Author: Dan Williams Date: Tue Jun 9 15:33:45 2015 -0400 libnvdimm, pmem: add libnvdimm support to the pmem driver nd_pmem attaches to persistent memory regions and namespaces emitted by the libnvdimm subsystem, and, same as the original pmem driver, presents the system-physical-address range as a block device. The existing e820-type-12 to pmem setup is converted to an nvdimm_bus that emits an nd_namespace_io device. Note that the X in 'pmemX' is now derived from the parent region. This provides some stability to the pmem devices names from boot-to-boot. The minor numbers are also more predictable by passing 0 to alloc_disk(). Cc: Andy Lutomirski Cc: Boaz Harrosh Cc: H. Peter Anvin Cc: Jens Axboe Cc: Ingo Molnar Cc: Christoph Hellwig Signed-off-by: Ross Zwisler Acked-by: Christoph Hellwig Tested-by: Toshi Kani Signed-off-by: Dan Williams commit eaf961536e1622ad21247ac8d44acd48ba65566e Author: Dan Williams Date: Fri May 1 13:11:27 2015 -0400 libnvdimm, nfit: add interleave-set state-tracking infrastructure On platforms that have firmware support for reading/writing per-dimm label space, a portion of the dimm may be accessible via an interleave set PMEM mapping in addition to the dimm's BLK (block-data-window aperture(s)) interface. A label, stored in a "configuration data region" on the dimm, disambiguates which dimm addresses are accessed through which exclusive interface. Add infrastructure that allows the kernel to block modifications to a label in the set while any member dimm is active. Note that this is meant only for enforcing "no modifications of active labels" via the coarse ioctl command. Adding/deleting namespaces from an active interleave set is always possible via sysfs. Another aspect of tracking interleave sets is tracking their integrity when DIMMs in a set are physically re-ordered. For this purpose we generate an "interleave-set cookie" that can be recorded in a label and validated against the current configuration. It is the bus provider implementation's responsibility to calculate the interleave set cookie and attach it to a given region. Cc: Neil Brown Cc: Cc: Greg KH Cc: Robert Moore Cc: Rafael J. Wysocki Acked-by: Christoph Hellwig Acked-by: Rafael J. Wysocki Signed-off-by: Dan Williams commit 4a826c83db4edc040da3a66dbefd53f0cfcf457d Author: Dan Williams Date: Tue Jun 9 16:09:36 2015 -0400 libnvdimm: namespace indices: read and validate This on media label format [1] consists of two index blocks followed by an array of labels. None of these structures are ever updated in place. A sequence number tracks the current active index and the next one to write, while labels are written to free slots. +------------+ | | | nsindex0 | | | +------------+ | | | nsindex1 | | | +------------+ | label0 | +------------+ | label1 | +------------+ | | ....nslot... | | +------------+ | labelN | +------------+ After reading valid labels, store the dpa ranges they claim into per-dimm resource trees. [1]: http://pmem.io/documents/NVDIMM_Namespace_Spec.pdf Cc: Neil Brown Acked-by: Christoph Hellwig Signed-off-by: Dan Williams commit bf9bccc14c05dae8caba29df6187c731710f5380 Author: Dan Williams Date: Wed Jun 17 17:14:46 2015 -0400 libnvdimm: pmem label sets and namespace instantiation. A complete label set is a PMEM-label per-dimm per-interleave-set where all the UUIDs match and the interleave set cookie matches the hosting interleave set. Present sysfs attributes for manipulation of a PMEM-namespace's 'alt_name', 'uuid', and 'size' attributes. A later patch will make these settings persistent by writing back the label. Note that PMEM allocations grow forwards from the start of an interleave set (lowest dimm-physical-address (DPA)). BLK-namespaces that alias with a PMEM interleave set will grow allocations backward from the highest DPA. Cc: Greg KH Cc: Neil Brown Acked-by: Christoph Hellwig Signed-off-by: Dan Williams commit 1b40e09a1232de537b193fa1b6b3ef16d3a1e397 Author: Dan Williams Date: Fri May 1 13:34:01 2015 -0400 libnvdimm: blk labels and namespace instantiation A blk label set describes a namespace comprised of one or more discontiguous dpa ranges on a single dimm. They may alias with one or more pmem interleave sets that include the given dimm. This is the runtime/volatile configuration infrastructure for sysfs manipulation of 'alt_name', 'uuid', 'size', and 'sector_size'. A later patch will make these settings persistent by writing back the label(s). Unlike pmem namespaces, multiple blk namespaces can be created per region. Once a blk namespace has been created a new seed device (unconfigured child of a parent blk region) is instantiated. As long as a region has 'available_size' != 0 new child namespaces may be created. Cc: Greg KH Cc: Neil Brown Acked-by: Christoph Hellwig Signed-off-by: Dan Williams commit f524bf271a5cf12a44253194abcf8b6688ff5b9d Author: Dan Williams Date: Sat May 30 12:36:02 2015 -0400 libnvdimm: write pmem label set After 'uuid', 'size', and optionally 'alt_name' have been set to valid values the labels on the dimms can be updated. Write procedure is: 1/ Allocate and write new labels in the "next" index 2/ Free the old labels in the working copy 3/ Write the bitmap and the label space on the dimm 4/ Write the index to make the update valid Label ranges directly mirror the dpa resource values for the given label_id of the namespace. Cc: Greg KH Cc: Neil Brown Acked-by: Christoph Hellwig Signed-off-by: Dan Williams commit 0ba1c634892b3590779803a701bcb82e8c32cc7a Author: Dan Williams Date: Sat May 30 12:35:36 2015 -0400 libnvdimm: write blk label set After 'uuid', 'size', 'sector_size', and optionally 'alt_name' have been set to valid values the labels on the dimm can be updated. The difference with the pmem case is that blk namespaces are limited to one dimm and can cover discontiguous ranges in dpa space. Also, after allocating label slots, it is useful for userspace to know how many slots are left. Export this information in sysfs. Cc: Greg KH Cc: Neil Brown Acked-by: Christoph Hellwig Signed-off-by: Dan Williams commit 8c2f7e8658df1d3b7cbfa62706941d14c715823a Author: Dan Williams Date: Thu Jun 25 04:20:04 2015 -0400 libnvdimm: infrastructure for btt devices NVDIMM namespaces, in addition to accepting "struct bio" based requests, also have the capability to perform byte-aligned accesses. By default only the bio/block interface is used. However, if another driver can make effective use of the byte-aligned capability it can claim namespace interface and use the byte-aligned ->rw_bytes() interface. The BTT driver is the initial first consumer of this mechanism to allow adding atomic sector update semantics to a pmem or blk namespace. This patch is the sysfs infrastructure to allow configuring a BTT instance for a namespace. Enabling that BTT and performing i/o is in a subsequent patch. Cc: Greg KH Cc: Neil Brown Signed-off-by: Dan Williams commit 5212e11fde4d40fa627668b4f2222d20db488f71 Author: Vishal Verma Date: Thu Jun 25 04:20:32 2015 -0400 nd_btt: atomic sector updates BTT stands for Block Translation Table, and is a way to provide power fail sector atomicity semantics for block devices that have the ability to perform byte granularity IO. It relies on the capability of libnvdimm namespace devices to do byte aligned IO. The BTT works as a stacked blocked device, and reserves a chunk of space from the backing device for its accounting metadata. It is a bio-based driver because all IO is done synchronously, and there is no queuing or asynchronous completions at either the device or the driver level. The BTT uses 'lanes' to index into various 'on-disk' data structures, and lanes also act as a synchronization mechanism in case there are more CPUs than available lanes. We did a comparison between two lane lock strategies - first where we kept an atomic counter around that tracked which was the last lane that was used, and 'our' lane was determined by atomically incrementing that. That way, for the nr_cpus > nr_lanes case, theoretically, no CPU would be blocked waiting for a lane. The other strategy was to use the cpu number we're scheduled on to and hash it to a lane number. Theoretically, this could block an IO that could've otherwise run using a different, free lane. But some fio workloads showed that the direct cpu -> lane hash performed faster than tracking 'last lane' - my reasoning is the cache thrash caused by moving the atomic variable made that approach slower than simply waiting out the in-progress IO. This supports the conclusion that the driver can be a very simple bio-based one that does synchronous IOs instead of queuing. Cc: Andy Lutomirski Cc: Boaz Harrosh Cc: H. Peter Anvin Cc: Jens Axboe Cc: Ingo Molnar Cc: Christoph Hellwig Cc: Neil Brown Cc: Jeff Moyer Cc: Dave Chinner Cc: Greg KH [jmoyer: fix nmi watchdog timeout in btt_map_init] [jmoyer: move btt initialization to module load path] [jmoyer: fix memory leak in the btt initialization path] [jmoyer: Don't overwrite corrupted arenas] Signed-off-by: Vishal Verma Signed-off-by: Dan Williams commit 047fc8a1f9a6330eacc80374dff087e20dc2304b Author: Ross Zwisler Date: Thu Jun 25 04:21:02 2015 -0400 libnvdimm, nfit, nd_blk: driver for BLK-mode access persistent memory The libnvdimm implementation handles allocating dimm address space (DPA) between PMEM and BLK mode interfaces. After DPA has been allocated from a BLK-region to a BLK-namespace the nd_blk driver attaches to handle I/O as a struct bio based block device. Unlike PMEM, BLK is required to handle platform specific details like mmio register formats and memory controller interleave. For this reason the libnvdimm generic nd_blk driver calls back into the bus provider to carry out the I/O. This initial implementation handles the BLK interface defined by the ACPI 6 NFIT [1] and the NVDIMM DSM Interface Example [2] composed from DCR (dimm control region), BDW (block data window), IDT (interleave descriptor) NFIT structures and the hardware register format. [1]: http://www.uefi.org/sites/default/files/resources/ACPI_6.0.pdf [2]: http://pmem.io/documents/NVDIMM_DSM_Interface_Example.pdf Cc: Andy Lutomirski Cc: Boaz Harrosh Cc: H. Peter Anvin Cc: Jens Axboe Cc: Ingo Molnar Cc: Christoph Hellwig Signed-off-by: Ross Zwisler Acked-by: Rafael J. Wysocki Signed-off-by: Dan Williams commit 6bc756193ff61bf5e7b3cfedfbb0873bf40f8055 Author: Dan Williams Date: Wed Jun 17 17:23:32 2015 -0400 tools/testing/nvdimm: libnvdimm unit test infrastructure 'libnvdimm' is the first driver sub-system in the kernel to implement mocking for unit test coverage. The nfit_test module gets built as an external module and arranges for external module replacements of nfit, libnvdimm, nd_pmem, and nd_blk. These replacements use the linker --wrap option to redirect calls to ioremap() + request_mem_region() to custom defined unit test resources. The end result is a fully functional nvdimm_bus, as far as userspace is concerned, but with the capability to perform otherwise destructive tests on emulated resources. Q: Why not use QEMU for this emulation? QEMU is not suitable for unit testing. QEMU's role is to faithfully emulate the platform. A unit test's role is to unfaithfully implement the platform with the goal of triggering bugs in the corners of the sub-system implementation. As bugs are discovered in platforms, or the sub-system itself, the unit tests are extended to backstop a fix with a reproducer unit test. Another problem with QEMU is that it would require coordination of 3 software projects instead of 2 (kernel + libndctl [1]) to maintain and execute the tests. The chances for bit rot and the difficulty of getting the tests running goes up non-linearly the more components involved. Q: Why submit this to the kernel tree instead of external modules in libndctl? Simple, to alleviate the same risk that out-of-tree external modules face. Updates to drivers/nvdimm/ can be immediately evaluated to see if they have any impact on tools/testing/nvdimm/. Q: What are the negative implications of merging this? It is a unique maintenance burden because the purpose of mocking an interface to enable a unit test is to purposefully short circuit the semantics of a routine to enable testing. For example __wrap_ioremap_cache() fakes the pmem driver into "ioremap()'ing" a test resource buffer allocated by dma_alloc_coherent(). The future maintenance burden hits when someone changes the semantics of ioremap_cache() and wonders what the implications are for the unit test. [1]: https://github.com/pmem/ndctl Cc: Cc: Lv Zheng Cc: Robert Moore Cc: Rafael J. Wysocki Cc: Christoph Hellwig Signed-off-by: Dan Williams commit bc30196f715ed3a94d050ef8bc465e567a6050be Author: Dan Williams Date: Thu Jun 25 04:48:19 2015 -0400 libnvdimm: Non-Volatile Devices Maintainer information and documentation for drivers/nvdimm Cc: Andy Lutomirski Cc: Boaz Harrosh Cc: H. Peter Anvin Cc: Jens Axboe Cc: Ingo Molnar Cc: Christoph Hellwig Cc: Neil Brown Cc: Greg KH Signed-off-by: Dan Williams commit f68eb1e71a92765ffd8eb68466a41b48f2fbba04 Author: Vishal Verma Date: Tue May 12 13:48:53 2015 -0400 fs/block_dev.c: skip rw_page if bdev has integrity If a block device has bio integrity enabled, rw_page will bypass the integrity payload, which is undesirable. Skip rw_page if this is the case. Currently brd and zram provide rw_page, and the proposed 'nd' drivers will too. Cc: Jens Axboe Cc: Martin K. Petersen Suggested-by: Matthew Wilcox Signed-off-by: Vishal Verma Signed-off-by: Dan Williams commit 41cd8b70c37ace40077c8d6ec0b74b983178c192 Author: Vishal Verma Date: Thu Jun 25 04:21:52 2015 -0400 libnvdimm, btt: add support for blk integrity Support multiple block sizes (sector + metadata) using the blk integrity framework. This registers a new integrity template that defines the protection information tuple size based on the configured metadata size, and simply acts as a passthrough for protection information generated by another layer. The metadata is written to the storage as-is, and read back with each sector. Signed-off-by: Vishal Verma Signed-off-by: Dan Williams commit fcae695737fca0849c18db814d9d8de05c0fd2a2 Author: Vishal Verma Date: Thu Jun 25 04:22:39 2015 -0400 libnvdimm, blk: add support for blk integrity Support multiple block sizes (sector + metadata) for nd_blk in the same way as done for the BTT. Add the idea of an 'internal' lbasize, which is properly aligned and padded, and store metadata in this space. Signed-off-by: Vishal Verma Signed-off-by: Dan Williams commit 43d3fa3a0491168ad769d20d5cbae45492509d43 Author: Dan Williams Date: Sat May 16 12:28:50 2015 -0400 libnvdimm, pmem: fix up max_hw_sectors There is no hardware limit to enforce on the size of the i/o that can be passed to an nvdimm block device, so set it to UINT_MAX. Reviewed-by: Vishal Verma Signed-off-by: Dan Williams commit edc870e54696beb9f3835ecb41a4e1c84ee4584d Author: Dan Williams Date: Sat May 16 12:28:51 2015 -0400 pmem: make_request cleanups Various cleanups: 1/ Kill the BUG_ON since we've already told the block layer we don't support DISCARD on all these drivers. 2/ Kill the 'rw' variable, no need to cache it. 3/ Kill the local 'sector' variable. bio_for_each_segment() is already advancing the iterator's sector number by the bio_vec length. 4/ Kill the check for accessing past the end of device generic_make_request_checks() already does that. Suggested-by: Christoph Hellwig [hch: kill access past end of the device check] Reviewed-by: Vishal Verma Signed-off-by: Dan Williams commit f0dc089ce217e7b98e0d2077c548ff08129e7911 Author: Dan Williams Date: Sat May 16 12:28:53 2015 -0400 libnvdimm: enable iostat This is disabled by default as the overhead is prohibitive, but if the user takes the action to turn it on we'll oblige. Reviewed-by: Vishal Verma Signed-off-by: Dan Williams commit 0f51c4fa7f60838a87cd45e8ba144dddcd4c066c Author: Dan Williams Date: Sat May 16 12:28:54 2015 -0400 pmem: flag pmem block devices as non-rotational ...since they are effectively SSDs as far as userspace is concerned. Reviewed-by: Vishal Verma Signed-off-by: Dan Williams commit 581388209405902b56d055f644b4dd124a206112 Author: Dan Williams Date: Tue Jun 23 20:08:34 2015 -0400 libnvdimm, nfit: handle unarmed dimms, mark namespaces read-only Upon detection of an unarmed dimm in a region, arrange for descendant BTT, PMEM, or BLK instances to be read-only. A dimm is primarily marked "unarmed" via flags passed by platform firmware (NFIT). The flags in the NFIT memory device sub-structure indicate the state of the data on the nvdimm relative to its energy source or last "flush to persistence". For the most part there is nothing the driver can do but advertise the state of these flags in sysfs and emit a message if firmware indicates that the contents of the device may be corrupted. However, for the case of ACPI_NFIT_MEM_ARMED, the driver can arrange for the block devices incorporating that nvdimm to be marked read-only. This is a safe default as the data is still available and new writes are held off until the administrator either forces read-write mode, or the energy source becomes armed. A 'read_only' attribute is added to REGION devices to allow for overriding the default read-only policy of all descendant block devices. Signed-off-by: Dan Williams commit 99759869faf15471cfce251bc138848d8af7d162 Author: Toshi Kani Date: Fri Jun 19 17:14:15 2015 -0600 acpi: Add acpi_map_pxm_to_online_node() The kernel initializes CPU & memory's NUMA topology from ACPI SRAT table. Some other ACPI tables, such as NFIT and DMAR, also contain proximity IDs for their device's NUMA topology. This information can be used to improve performance of these devices. This patch introduces acpi_map_pxm_to_online_node(), which is similar to acpi_map_pxm_to_node(), but always returns an online node. When the mapped node from a given proximity ID is offline, it looks up the node distance table and returns the nearest online node. ACPI device drivers, which are called after the NUMA initialization has completed in the kernel, can call this interface to obtain their device NUMA topology from ACPI tables. Such drivers do not have to deal with offline nodes. A node may be offline when a device proximity ID is unique, SRAT memory entry does not exist, or NUMA is disabled, ex. "numa=off" on x86. This patch also moves the pxm range check from acpi_get_node() to acpi_map_pxm_to_node(). Signed-off-by: Toshi Kani Acked-by: Rafael J. Wysocki > Signed-off-by: Dan Williams commit 41d7a6d637e1440f5410cb43c25a3c41255540c5 Author: Toshi Kani Date: Fri Jun 19 12:18:33 2015 -0600 libnvdimm: Set numa_node to NVDIMM devices ACPI NFIT table has System Physical Address Range Structure entries that describe a proximity ID of each range when ACPI_NFIT_PROXIMITY_VALID is set in the flags. Change acpi_nfit_register_region() to map a proximity ID to its node ID, and set it to a new numa_node field of nd_region_desc, which is then conveyed to the nd_region device. The device core arranges for btt and namespace devices to inherit their node from their parent region. Signed-off-by: Toshi Kani [djbw: move set_dev_node() from region.c to bus.c] Signed-off-by: Dan Williams commit 74ae66c3b14ffa94c8d2dea201cdf8e6203d13d5 Author: Toshi Kani Date: Fri Jun 19 12:18:34 2015 -0600 libnvdimm: Add sysfs numa_node to NVDIMM devices Add support of sysfs 'numa_node' to I/O-related NVDIMM devices under /sys/bus/nd/devices, regionN, namespaceN.0, and bttN.x. An example of numa_node values on a 2-socket system with a single NVDIMM range on each socket is shown below. /sys/bus/nd/devices |-- btt0.0/numa_node:0 |-- btt1.0/numa_node:1 |-- btt1.1/numa_node:1 |-- namespace0.0/numa_node:0 |-- namespace1.0/numa_node:1 |-- region0/numa_node:0 |-- region1/numa_node:1 These numa_node files are then linked under the block class of their device names. /sys/class/block/pmem0/device/numa_node:0 /sys/class/block/pmem1s/device/numa_node:1 This enables numactl(8) to accept 'block:' and 'file:' paths of pmem and btt devices as shown in the examples below. numactl --preferred block:pmem0 --show numactl --preferred file:/dev/pmem1s --show Signed-off-by: Toshi Kani Signed-off-by: Dan Williams commit 61031952f4c89dba1065f7a5b9419badb112554c Author: Ross Zwisler Date: Thu Jun 25 03:08:39 2015 -0400 arch, x86: pmem api for ensuring durability of persistent memory updates Based on an original patch by Ross Zwisler [1]. Writes to persistent memory have the potential to be posted to cpu cache, cpu write buffers, and platform write buffers (memory controller) before being committed to persistent media. Provide apis, memcpy_to_pmem(), wmb_pmem(), and memremap_pmem(), to write data to pmem and assert that it is durable in PMEM (a persistent linear address range). A '__pmem' attribute is added so sparse can track proper usage of pointers to pmem. This continues the status quo of pmem being x86 only for 4.2, but reworks to ioremap, and wider implementation of memremap() will enable other archs in 4.3. [1]: https://lists.01.org/pipermail/linux-nvdimm/2015-May/000932.html Cc: Thomas Gleixner Cc: Ingo Molnar Cc: "H. Peter Anvin" Signed-off-by: Ross Zwisler [djbw: various reworks] Signed-off-by: Dan Williams {.n++%ݶw{.n+{G{ayʇڙ,jfhz_(階ݢj"mG?&~iOzv^m ?I