From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wm1-f52.google.com (mail-wm1-f52.google.com [209.85.128.52]) by mx.groups.io with SMTP id smtpd.msgproc02-g2.6480.1792849351434381986 for ; Sat, 24 Oct 2026 06:42:31 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@gmail.com header.s=20251104 header.b=Kta5uTuG; spf=pass (domain: gmail.com, ip: 209.85.128.52, mailfrom: adrian.freihofer@gmail.com) Received: by mail-wm1-f52.google.com with SMTP id 5b1f17b1804b1-4a210470b49so13017825e9.2 for ; Sat, 24 Oct 2026 06:42:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1792849349; x=1793454149; darn=lists.openembedded.org; h=mime-version:user-agent:content-transfer-encoding:content-type :references:in-reply-to:date:to:from:subject:message-id:from:to:cc :subject:date:message-id:reply-to:content-type; bh=gvYsbA9VhxAIsTtnjNxbRYxFDRwNKulMzVOcklc1QRw=; b=Kta5uTuGUbwCEnGLYYz+EvX1EoC3FB6OwT14w0vDD+SeYPC+HLShOu/fKFbkBFnAFK hbonD/0Xpdt24yIMcA2tYDA8BEY1xTrKBvLZdi4gVMDs9CAa+tp5ujfY7F5OsyvKqA7C TkspoW3jS2pC/FWAnrztRHnpycau8XDfnLlG2ahUnLD4/uDFtTxaBuk+2x7/R8s+4ad1 egwN6igZGmu2luRU0U4lDWIREQN/EZoT6B7FMi8+yukMQh78mOBwzGrLT7rLVBWI1qjN MIQmwmTeT/KdCsZ4oId35LB80/f5eYAv+y3DtUa7dkex5QubcuW42ZAmVn165GnA+Xxn xnRg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792849349; x=1793454149; h=mime-version:user-agent:content-transfer-encoding:content-type :references:in-reply-to:date:to:from:subject:message-id:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=gvYsbA9VhxAIsTtnjNxbRYxFDRwNKulMzVOcklc1QRw=; b=Yf5bhNUznbIvoT25hv/HWWzRfHvyqfvQEBH4z21cLQsDPtH/arMQ2BN59vfihnh7fW DYpYgiwxgsg+XICm3YZgXeUMqkiSbiNPHPFRurYp9zAbUd7idJ+/SVAUs/JACQXfuNzb cVKNl3h+8+nUZ6LKH66qR6+tPJ8mATSHWnus0fRW8aKOU7EtOxkyUUmOb5I+jiC+2qYm xNTQrEUSRZL5+VNQ7hzD0tVHAgYs1RosSUSVl4gyBSi9OdR5F+MB0rSNyix4bn04Bwvo dM+9e2KVzDxag1VesEuW6cQ6sV6C74vvE/n+sQNNd2DEEhuz0Gm1MCBN/RgDuxBoUFBT VPFw== X-Forwarded-Encrypted: i=1; AKwUvBy7IvcTspjHezSG3IAmvzhwCo2kbmqF2RD8k6u5rbzCt619wHcArLrlmjT438yjHHX5JgfKf5JdotzXIfOa+yYrrw==@lists.openembedded.org X-Gm-Message-State: AFq9FYJVn+CLjwBBm+7XsRxH8wsw+wZQJ+6NxKVfbZubwHUYIQiOjo8E JdaT3qpJ6oAZNi/CJt7ezHQOKdBLeB7hjA8gX2ECxbHHRcOSmO0zjKHnqamZbQ== X-Gm-Gg: AYBFou2xR5674R04r44YzNkcMUT4l8DBC3Ah+0XIuorBQOVcGF5OuMvBbT1mWyRM63Q l05O3gFKDBMC0kbddZr1RUTVfjhMATcPSOgr8LHjWRIiCNJCRODWwxm16cjk0uWUuIC7SpDQWXp WLS29Kf1svbofGCAkE65E6pHhidKfQVhZBFOoQ/OIq4p/BBuGppM3dYcBH1Geq1go/B5oXZb1NY evEhZbrVIj7jPRDJ/qk6/rxRmBEKeuhE7AG+x5f6E0YlJFRfH+up0OK2+SDp4DHt0vXsbXFkU2p 7ALPBhnRMyBI8/JsB2kzG3p1d7cwwWdeu/Xk/4h9BzQJjU87OMPzu98CsaWQqMEimZbKBldOr4p IcaE59NhwmFsjILJj+3J9P28EvtcZteidd3UndYhgse7qvpfLINd0SosPQHDOyzII8jmBSRa7U5 IWcQB0Y2F5TaDmSGiEjz7gZcpmdNXyRG8Mt2k4ZR8mdEjfBIh04Se+OkNPwb3y/i6ED8yqelThv q5/YrYg63eHl16vrW2JENgWMJpLPdTAs5VMF8kM894tdhlmiki0jAGKh/Dc/JM8zDL3guW1MRbE fkOovBXzeUHHZWhrQWEU4Y8JnYC4 X-Received: by 2002:a05:600c:3155:b0:4a2:1cc:6551 with SMTP id 5b1f17b1804b1-4a35accc591mr34167075e9.35.1792849349084; Sat, 24 Oct 2026 06:42:29 -0700 (PDT) Return-Path: Received: from ?IPv6:2a02:169:59a6:0:55c4:f628:91f3:4287? ([2a02:169:59a6:0:55c4:f628:91f3:4287]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4a35a08643dsm45601215e9.4.2026.10.24.06.42.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 24 Oct 2026 06:42:28 -0700 (PDT) Message-ID: Subject: Re: [OE-core] [PATCH v2 4/4] oe.fitimage: Add custom configurations and harden multi-kernel handling From: "adrian.freihofer@gmail.com" To: vgharaee@gmail.com, openembedded-core@lists.openembedded.org Date: Sat, 24 Oct 2026 15:42:27 +0200 In-Reply-To: <20261020133551.90185-5-vgharaee@gmail.com> References: <20261020133551.90185-1-vgharaee@gmail.com> <20261020133551.90185-5-vgharaee@gmail.com> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 User-Agent: Evolution 3.60.2 (3.60.2-2.fc44) MIME-Version: 1.0 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by lin-tor-korg-lkml-alma10-1 with HTTPS for ; Sat, 24 Oct 2026 13:42:34 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/248593 T24gVHVlLCAyMDI2LTEwLTIwIGF0IDE1OjM1ICswMjAwLCBWYWhpZCBHaGFyYWVlIHZpYQpsaXN0 cy5vcGVuZW1iZWRkZWQub3JnIHdyb3RlOgo+IEZyb206IFZhaGlkIEdoYXJhZWUgPHZnaGFyYWVl QGdtYWlsLmNvbT4KPiAKPiBPbmUgY2FuIG5vdyBhZGQgY29uZmlncyB0aGF0IHBvaW50IHRvIGFu eSBrZXJuZWwgbm9kZSBhbmQsCj4gb3B0aW9uYWxseSwgYSBEVEIgd2l0aCBmaXRpbWFnZV9lbWl0 X3NlY3Rpb25fY29uZmlnX2N1c3RvbSgpLiBUaGUKPiBkZWZhdWx0Cj4gY29uZmlnIHN0aWxsIGNh biBiZSBjaG9zZW4gYnkgbmFtZSB3aXRoCj4gZml0aW1hZ2Vfc2V0X2RlZmF1bHRfY29uZmlnKCku Cj4gCj4gVGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBpcyBub3cgc3RvcmVkIGFuZCB3cml0dGVu IHRvIHRoZSBJVFMgb25jZSwKPiBpbgo+IHdyaXRlX2l0c19maWxlKCkuIEJlZm9yZSwgZml0aW1h Z2Vfc2V0X2RlZmF1bHRfY29uZmlnKCkgaGFkIHRvCj4gb3ZlcndyaXRlCj4gdGhlIHByb3BlcnR5 IHRoYXQgZml0aW1hZ2VfZW1pdF9zZWN0aW9uX2NvbmZpZygpIGhhZCBhbHJlYWR5IHNldC4KClRo aXMgc2VlbXMgdG8gZGVzY3JpYmUgdGhlIGNoYW5nZXMgY29tcGFyZWQgdG8gYW4gZWFybGllciBy ZXZpc2lvbiBvZgp0aGUgc2VyaWVzLCBub3QgdG8gbWFzdGVyOiBmaXRpbWFnZV9zZXRfZGVmYXVs dF9jb25maWcoKSBkb2VzIG5vdApleGlzdCBpbiBtYXN0ZXIsIGFuZCBuZWl0aGVyIGRvZXMgdGhl ICJmZHQtIiBuYW1lIGJhc2VkIGxvb2t1cAptZW50aW9uZWQgYmVsb3cuIE9uIHRoZSBvdGhlciBo YW5kLCB0aGUgbWVzc2FnZSBkb2VzIG5vdCBtZW50aW9uIHRoZQpiaWdnZXN0IHBhcnQgb2YgdGhl IHBhdGNoLCB0aGUgRklUX0tFUk5FTFMgLyBGSVRfQ09ORklHUyBzdXBwb3J0IGluCmtlcm5lbC1m aXQtaW1hZ2UuYmJjbGFzcy4KCkl0IG1pZ2h0IGJlIGVhc2llciB0byByZXZpZXcgd2l0aCB0aGlz IHNwbGl0OgoxLiBrZXJuZWwtZml0LWltYWdlOiBtdWx0aXBsZSBrZXJuZWxzLCBjdXN0b20gY29u ZmlndXJhdGlvbnMsIGRlZmF1bHQKICAgY29uZmlndXJhdGlvbiBhbmQgdW5pcXVlIG5vZGUgaWRz IGluIG9lL2ZpdGltYWdlLnB5CjIuIGtlcm5lbC1maXQtaW1hZ2U6IHN1cHBvcnQgRklUX0tFUk5F TFMsIEZJVF9DT05GSUdTIGFuZAogICBGSVRfQ09ORl9ERUZBVUxUIChjbGFzcyBhbmQgaW1hZ2Ut Zml0aW1hZ2UuY29uZiB0b2dldGhlcikKMy4gb2Utc2VsZnRlc3Q6IGZpdGltYWdlOiB0ZXN0cyBm b3IgbXVsdGlwbGUga2VybmVscwoKPiAKPiBEVEJzIGFuZCBEVEIgc3ltbGluayBhbGlhc2VzIGFy ZSBub3cgbG9va2VkIHVwIGJ5IHRoZSBpZCB0aGV5IHdlcmUKPiBhZGRlZAo+IHdpdGguIEJlZm9y ZSwgdGhlIGxvb2t1cCBkZXBlbmRlZCBvbiB0aGUgImZkdC0iIG5vZGUgbmFtZSBvciB0aGUKPiBh bGlhcwo+IG5hbWUuCj4gCj4gVGVzdGVkIHdpdGggb2Utc2VsZnRlc3QgLXIgZml0aW1hZ2UuRml0 SW1hZ2VQeVRlc3RzLgo+IAo+IFNpZ25lZC1vZmYtYnk6IFZhaGlkIEdoYXJhZWUgPHZnaGFyYWVl QGdtYWlsLmNvbT4KPiAtLS0KPiDCoG1ldGEvY2xhc3Nlcy1yZWNpcGUva2VybmVsLWZpdC1pbWFn ZS5iYmNsYXNzIHwgMTI5Cj4gKysrKysrKysrKysrKysrKystLQo+IMKgbWV0YS9saWIvb2UvZml0 aW1hZ2UucHnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgIDY2 ICsrKysrKysrKy0KPiDCoDIgZmlsZXMgY2hhbmdlZCwgMTc1IGluc2VydGlvbnMoKyksIDIwIGRl bGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMtcmVjaXBlL2tlcm5lbC1m aXQtaW1hZ2UuYmJjbGFzcwo+IGIvbWV0YS9jbGFzc2VzLXJlY2lwZS9rZXJuZWwtZml0LWltYWdl LmJiY2xhc3MKPiBpbmRleCA3YjJiY2Q0NjczLi40YWJkYWIwYTRhIDEwMDY0NAo+IC0tLSBhL21l dGEvY2xhc3Nlcy1yZWNpcGUva2VybmVsLWZpdC1pbWFnZS5iYmNsYXNzCj4gKysrIGIvbWV0YS9j bGFzc2VzLXJlY2lwZS9rZXJuZWwtZml0LWltYWdlLmJiY2xhc3MKPiBAQCAtMjksMjAgKzI5LDUy IEBAIHB5dGhvbiAoKSB7Cj4gwqDCoMKgwqDCoMKgwqDCoCBkLmFwcGVuZFZhckZsYWcoJ2RvX2Nv bXBpbGUnLCAnZGVwZW5kcycsICcKPiB2aXJ0dWFsL2R0Yjpkb19wb3B1bGF0ZV9zeXNyb290JykK PiDCoMKgwqDCoMKgwqDCoMKgIGQuc2V0VmFyKCdFWFRFUk5BTF9LRVJORUxfREVWSUNFVFJFRScs Cj4gIiR7UkVDSVBFX1NZU1JPT1R9L2Jvb3QvZGV2aWNldHJlZSIpCj4gwqAKPiAtwqDCoMKgICMg UGFyc2UgbG9hZGFibGVzIGNvbmZpZwo+IC3CoMKgwqAgbG9hZGFibGVzID0gZC5nZXRWYXIoJ0ZJ VF9MT0FEQUJMRVMnKQo+IC3CoMKgwqAgaWYgbG9hZGFibGVzOgo+IC3CoMKgwqDCoMKgwqDCoCAj IENoZWNrIHRoYXQgdGhlIGxvYWRhYmxlcyBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBhcmUgbm90 Cj4gc2V0IGRpcmVjdGx5Cj4gLcKgwqDCoMKgwqDCoMKgICMgZGlyZWN0bHksIHRoZW4gYXNzaWdu IHRoZW0gYSBzeW50aGV0aWMgdmFsdWUgZm9yCj4gdGVzdGFiaWxpdHkgcHVycG9zZXMKPiAtwqDC oMKgwqDCoMKgwqAgZm9yIHYgaW4gWydGSVRfTE9BREFCTEVfQVJDSCcsICdGSVRfTE9BREFCTEVf Q09NUFJFU1NJT04nLAo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICdGSVRf TE9BREFCTEVfREVTQ1JJUFRJT04nLAo+ICdGSVRfTE9BREFCTEVfRU5UUllQT0lOVCcsCj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJ0ZJVF9MT0FEQUJMRV9GSUxFTkFNRScs Cj4gJ0ZJVF9MT0FEQUJMRV9MT0FEQUREUkVTUycsCj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgJ0ZJVF9MT0FEQUJMRV9PUycsICdGSVRfTE9BREFCTEVfVFlQRSddOgo+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIGQuZ2V0VmFyKHYpOgo+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcmFpc2UgYmIucGFyc2UuU2tpcFJlY2lwZSgiWW91IGNhbm5vdCB1c2Ug JXMgYXMgYQo+IHZhcmlhYmxlLCB5b3UgY2FuIG9ubHkgc2V0IGZsYWdzLiIgJSB2KQo+IC0KPiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzeW50X3ZhbHVlID0gIiA/ICIuam9pbihbIGQuZ2V0VmFy RmxhZyh2LCBsb2FkYWJsZSkgb3IKPiAiIiBmb3IgbG9hZGFibGUgaW4gbG9hZGFibGVzLnNwbGl0 KCkgXSkKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkLnNldFZhcih2LCBzeW50X3ZhbHVlKQo+ ICvCoMKgwqAgIyBQYXJzZSBsb2FkYWJsZXMsIGFkZGl0aW9uYWwga2VybmVscyBhbmQgYWRkaXRp b25hbAo+IGNvbmZpZ3VyYXRpb25zCj4gK8KgwqDCoCBmb3IgaXRlbXNfdmFyLCBmbGFnX3ZhcnMg aW4gKAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICgnRklUX0xPQURBQkxFUycsIFsnRklUX0xP QURBQkxFX0FSQ0gnLAo+ICdGSVRfTE9BREFCTEVfQ09NUFJFU1NJT04nLAo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJ0ZJVF9M T0FEQUJMRV9ERVNDUklQVElPTicsCj4gJ0ZJVF9MT0FEQUJMRV9FTlRSWVBPSU5UJywKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ICdGSVRfTE9BREFCTEVfRklMRU5BTUUnLAo+ICdGSVRfTE9BREFCTEVfTE9BREFERFJFU1MnLAo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgJ0ZJVF9MT0FEQUJMRV9PUycsCj4gJ0ZJVF9MT0FEQUJMRV9UWVBFJ10pLAo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgICgnRklUX0tFUk5FTFMnLCBbJ0ZJVF9LRVJORUxfQ09NUFJFU1NJ T04nLAo+ICdGSVRfS0VSTkVMX0RFUExPWURJUicsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICdGSVRfS0VSTkVMX0RFU0NSSVBUSU9O JywKPiAnRklUX0tFUk5FTF9FTlRSWVBPSU5UJywKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJ0ZJVF9LRVJORUxfRklMRU5BTUUnLAo+ ICdGSVRfS0VSTkVMX0xPQURBRERSRVNTJywKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJ0ZJVF9LRVJORUxfTVVMVElDT05GSUcnLAo+ ICdGSVRfS0VSTkVMX1JFQ0lQRScsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICdGSVRfS0VSTkVMX1RZUEUnXSksCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgKCdGSVRfQ09ORklHUycsIFsnRklUX0NPTkZJR19EVEInLAo+ICdGSVRf Q09ORklHX0tFUk5FTCddKSk6Cj4gK8KgwqDCoMKgwqDCoMKgIGl0ZW1zID0gZC5nZXRWYXIoaXRl bXNfdmFyKQoKZG9fY29tcGlsZSBvbmx5IHJlYWRzIHRoZXNlIHNldHRpbmdzIGFzIGZsYWdzIHdp dGggbm9uLWxpdGVyYWwgZmxhZwpuYW1lcywgZS5nLiBkLmdldFZhckZsYWcoJ0ZJVF9LRVJORUxf TE9BREFERFJFU1MnLCBrZXJuZWwpLCBhbmQgbmV2ZXIKcmVhZHMgdGhlIHZhbHVlcyBvZiB0aGUg dmFyaWFibGVzLiBCaXRiYWtlIGNhbm5vdCB0cmFjayBzdWNoIGFjY2Vzc2VzLApzbyB0aGUgRklU X0tFUk5FTF8qIGFuZCBGSVRfQ09ORklHXyogZmxhZ3MgYXJlIG5vdCBwYXJ0IG9mIHRoZQpkb19j b21waWxlIHNpZ25hdHVyZS4gQ2hhbmdpbmcgZS5nLiBGSVRfS0VSTkVMX0xPQURBRERSRVNTW2tl cm5lbC1ydF0Kb3IgRklUX0NPTkZJR19EVEJbcnRdIGRvZXMgbm90IHRyaWdnZXIgYSByZWJ1aWxk LCBhbmQgYSBzdGFsZSBmaXRJbWFnZQppcyByZXVzZWQuIEkgdmVyaWZpZWQgdGhpcyBieSBjb21w YXJpbmcgdGhlIGRvX2NvbXBpbGUgYmFzZWhhc2ggd2l0aAp0aW5mb2lsLgoKRklUX0xPQURBQkxF XyogaGFzIGhhZCB0aGUgc2FtZSBwcm9ibGVtIHNpbmNlIDI1MzU0MjdkOGRlMAooImtlcm5lbC1m aXQtaW1hZ2U6IHN1cHBvcnQgYXJiaXRyYXJ5IGxvYWRhYmxlcyIpLCB3aGljaCBpcyBhbHNvIGlu CndyeW5vc2UuIEknbGwgc2VuZCBhIHNlcGFyYXRlIHBhdGNoIGZvciBtYXN0ZXIgd2hpY2ggZml4 ZXMgaXQgZm9yIHRoZQpsb2FkYWJsZXMgYnkgYWRkaW5nIHRoZSB2YXJpYWJsZXMgdG8gdGhlIGRv X2NvbXBpbGUgdmFyZGVwcyBpbiB0aGlzCmxvb3A6CgogICAgZC5hcHBlbmRWYXJGbGFnKCdkb19j b21waWxlJywgJ3ZhcmRlcHMnLCAnICcgKyB2KQoKSWYgeW91IHJlYmFzZSBvbnRvIGl0IGFuZCBr ZWVwIHRoYXQgbGluZSBpbiB5b3VyIGdlbmVyaWMgbG9vcCwKRklUX0tFUk5FTF8qIGFuZCBGSVRf Q09ORklHXyogYXJlIGNvdmVyZWQgdG9vLiBJIHRyaWVkIHRoaXMgbG9jYWxseToKdGhlIGhhc2gg dGhlbiBjaGFuZ2VzIGZvciBib3RoIGtlcm5lbCBhbmQgY29uZmlnIGZsYWdzLiBCZWNhdXNlIHRo ZQp2YWx1ZXMgYXJlIHJlYWQgd2l0aCBnZXRWYXJGbGFnKHYsIGl0ZW0sIEZhbHNlKSwgc29tZXRo aW5nIGxpa2UKRklUX0tFUk5FTF9ERVBMT1lESVJba2VybmVsLXJ0XSA9ICIke1RPUERJUn0vdG1w LXJ0Ly4uLiIgZG9lc24ndCBsZWFrCmFic29sdXRlIHBhdGhzIGludG8gdGhlIHNpZ25hdHVyZS4g VGhhdCBpcyBhIGdvb2QgcmVhc29uIGZvciB0aGUKZXhwYW5kPUZhbHNlIGNoYW5nZSwgc28gcGxl YXNlIG1lbnRpb24gaXQgaW4gdGhlIGNvbW1pdCBtZXNzYWdlLgoKPiArwqDCoMKgwqDCoMKgwqAg aWYgaXRlbXM6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIyBDaGVjayB0aGF0IHRoZSBjb25m aWd1cmF0aW9uIHZhcmlhYmxlcyBhcmUgbm90IHNldAo+IGRpcmVjdGx5LAo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICMgdGhlbiBhc3NpZ24gdGhlbSBhIHN5bnRoZXRpYyB2YWx1ZSBmb3IgdGVz dGFiaWxpdHkKPiBwdXJwb3Nlcwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZvciB2IGluIGZs YWdfdmFyczoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIGQuZ2V0VmFyKHYp Ogo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByYWlzZSBiYi5wYXJz ZS5Ta2lwUmVjaXBlKCJZb3UgY2Fubm90IHVzZSAlcyBhcwo+IGEgdmFyaWFibGUsIHlvdSBjYW4g b25seSBzZXQgZmxhZ3MuIiAlIHYpCj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgc3ludF92YWx1ZSA9ICIgPyAiLmpvaW4oWyBkLmdldFZhckZsYWcodiwgaXRlbSwKPiBGYWxz ZSkgb3IgIiIgZm9yIGl0ZW0gaW4gaXRlbXMuc3BsaXQoKSBdKQo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgZC5zZXRWYXIodiwgc3ludF92YWx1ZSkKPiArCj4gK8KgwqDCoCAjIEFk ZGl0aW9uYWwga2VybmVscyBtYXkgYmUgZGVwbG95ZWQgYnkgYW5vdGhlciByZWNpcGUsIGJ5IGEK PiByZWNpcGUgb2YKPiArwqDCoMKgICMgYW5vdGhlciBtdWx0aWNvbmZpZyBvciBiZSBwcm92aWRl ZCBhcyBwcmVidWlsdCBmaWxlcwo+ICvCoMKgwqAga2VybmVscyA9IChkLmdldFZhcignRklUX0tF Uk5FTFMnKSBvciAiIikuc3BsaXQoKQo+ICvCoMKgwqAgaWYgImtlcm5lbC0xIiBpbiBrZXJuZWxz Ogo+ICvCoMKgwqDCoMKgwqDCoCBiYi5mYXRhbCgiRklUX0tFUk5FTFMgbXVzdCBub3QgY29udGFp biBrZXJuZWwtMSwgaXQgaXMKPiByZXNlcnZlZCBmb3IgdmlydHVhbC9rZXJuZWwiKQoKVGhlIGV4 aXN0aW5nIGNoZWNrcyBpbiB0aGlzIGZ1bmN0aW9uIHJhaXNlIFNraXBSZWNpcGUsIHdoaWxlIHRo ZSBuZXcKb25lcyB1c2UgYmIuZmF0YWwoKSwgd2hpY2ggYWJvcnRzIHBhcnNpbmcgZm9yIGV2ZXJ5 IHRhcmdldC4gUGxlYXNlCmVpdGhlciBtYWtlIHRoaXMgY29uc2lzdGVudCBvciBleHBsYWluIHdo eSBhIGZhdGFsIGVycm9yIGlzIHByZWZlcnJlZC4KCj4gK8KgwqDCoCBkdXBsaWNhdGVzID0gc29y dGVkKHNldChrIGZvciBrIGluIGtlcm5lbHMgaWYga2VybmVscy5jb3VudChrKSA+Cj4gMSkpCj4g K8KgwqDCoCBpZiBkdXBsaWNhdGVzOgo+ICvCoMKgwqDCoMKgwqDCoCBiYi5mYXRhbCgiRklUX0tF Uk5FTFMgY29udGFpbnMgZHVwbGljYXRlIGVudHJpZXM6ICVzIiAlICcKPiAnLmpvaW4oZHVwbGlj YXRlcykpCj4gK8KgwqDCoCBmb3Iga2VybmVsIGluIGtlcm5lbHM6Cj4gK8KgwqDCoMKgwqDCoMKg IHJlY2lwZSA9IGQuZ2V0VmFyRmxhZygnRklUX0tFUk5FTF9SRUNJUEUnLCBrZXJuZWwpCj4gK8Kg wqDCoMKgwqDCoMKgIG1jID0gZC5nZXRWYXJGbGFnKCdGSVRfS0VSTkVMX01VTFRJQ09ORklHJywg a2VybmVsKQo+ICvCoMKgwqDCoMKgwqDCoCBpZiBtYzoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBpZiBub3QgZC5nZXRWYXJGbGFnKCdGSVRfS0VSTkVMX0RFUExPWURJUicsIGtlcm5lbCk6Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBiYi5mYXRhbCgiRklUX0tFUk5FTF9ERVBM T1lESVJbJXNdIG11c3QgYmUgc2V0IGlmCj4gRklUX0tFUk5FTF9NVUxUSUNPTkZJR1slc10gaXMg c2V0IiAlIChrZXJuZWwsIGtlcm5lbCkpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZC5hcHBl bmRWYXJGbGFnKCdkb19jb21waWxlJywgJ21jZGVwZW5kcycsICcKPiBtYzolczolczolczpkb19k ZXBsb3knICUKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIChkLmdldFZhcignQkJfQ1VSUkVOVF9NQycpLCBtYywgcmVjaXBlCj4gb3IgJ3Zp cnR1YWwva2VybmVsJykpCj4gK8KgwqDCoMKgwqDCoMKgIGVsaWYgcmVjaXBlOgo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGQuYXBwZW5kVmFyRmxhZygnZG9fY29tcGlsZScsICdkZXBlbmRzJywg JyAlczpkb19kZXBsb3knCj4gJSByZWNpcGUpCj4gK8KgwqDCoMKgwqDCoMKgIGVsc2U6Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgbm90IGQuZ2V0VmFyRmxhZygnRklUX0tFUk5FTF9GSUxF TkFNRScsIGtlcm5lbCk6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBiYi5mYXRh bCgiRklUX0tFUk5FTF9GSUxFTkFNRVslc10gbXVzdCBiZSBzZXQgaWYKPiBuZWl0aGVyIEZJVF9L RVJORUxfUkVDSVBFWyVzXSBub3IgRklUX0tFUk5FTF9NVUxUSUNPTkZJR1slc10gaXMgc2V0Igo+ ICUgKGtlcm5lbCwga2VybmVsLCBrZXJuZWwpKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGtl cm5lbF9wYXRoID0gZml0X2tlcm5lbF9wYXRoKGQsIGtlcm5lbCkKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBkLmFwcGVuZFZhckZsYWcoJ2RvX2NvbXBpbGUnLCAnZmlsZS1jaGVja3N1bXMnLCAn ICVzOiVzJwo+ICUgKGtlcm5lbF9wYXRoLCBvcy5wYXRoLmV4aXN0cyhrZXJuZWxfcGF0aCkpKQo+ IMKgfQo+IMKgCj4gwqBkb19jb25maWd1cmVbbm9leGVjXSA9ICIxIgo+IEBAIC02Miw2ICs5NCwz MCBAQCBkZWYgYXBwbHlfZHRidmVuZG9yZWQoZCxkdGIpOgo+IMKgwqDCoMKgwqDCoMKgwqAgbWFw cGVkX25hbWUgPSBkdGIucmVwbGFjZSgnLycsICdfJykKPiDCoMKgwqDCoCByZXR1cm4gbWFwcGVk X25hbWUKPiDCoAo+ICtkZWYgZml0X2tlcm5lbF9wYXRoKGQsIGtlcm5lbCk6Cj4gK8KgwqDCoCBm aWxlbmFtZSA9IGQuZ2V0VmFyRmxhZygnRklUX0tFUk5FTF9GSUxFTkFNRScsIGtlcm5lbCkgb3IK PiAibGludXguYmluIgo+ICvCoMKgwqAgZGVwbG95ZGlyID0gZC5nZXRWYXJGbGFnKCdGSVRfS0VS TkVMX0RFUExPWURJUicsIGtlcm5lbCkgb3IKPiBkLmdldFZhcignREVQTE9ZX0RJUl9JTUFHRScp Cj4gK8KgwqDCoCByZXR1cm4gb3MucGF0aC5qb2luKGRlcGxveWRpciwgZmlsZW5hbWUpCj4gKwo+ ICtkZWYgZml0X2tlcm5lbF9kZXBsb3llZF9maWxlcyhkLCByZWNpcGUpOgo+ICvCoMKgwqAgIiIi UmV0dXJuIHRoZSByZWFsIHBhdGhzIG9mIGFsbCBmaWxlcyBkZXBsb3llZCBieSBkb19kZXBsb3kg b2YKPiByZWNpcGUgKFBOIG9yIFBST1ZJREVTKSBpbiB0aGlzIG11bHRpY29uZmlnIiIiCj4gK8Kg wqDCoCBpbXBvcnQgYmIucnVucXVldWUKPiArwqDCoMKgIG1jID0gZC5nZXRWYXIoJ0JCX0NVUlJF TlRfTUMnKSBvciAiIgo+ICvCoMKgwqAgdGFza2RlcGRhdGEgPSBkLmdldFZhcignQkJfVEFTS0RF UERBVEEnLCBGYWxzZSkKPiArwqDCoMKgIHBucyA9IHNldChkZXAucG4gZm9yIHRpZCwgZGVwIGlu IHRhc2tkZXBkYXRhLml0ZW1zKCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgZGVw LnRhc2tuYW1lID09ICJkb19kZXBsb3kiIGFuZAo+IGJiLnJ1bnF1ZXVlLm1jX2Zyb21fdGlkKHRp ZCkgPT0gbWMgYW5kCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChkZXAucG4g PT0gcmVjaXBlIG9yIHJlY2lwZSBpbiBkZXAucHJvdmlkZXMpKQo+ICvCoMKgwqAgaWYgbGVuKHBu cykgIT0gMToKPiArwqDCoMKgwqDCoMKgwqAgYmIuZmF0YWwoIkNvdWxkIG5vdCBpZGVudGlmeSB0 aGUgZG9fZGVwbG95IGRlcGVuZGVuY3kKPiBwcm92aWRpbmcgJXMgKGZvdW5kOiAlcykiICUgKHJl Y2lwZSwgJyAnLmpvaW4oc29ydGVkKHBucykpIG9yCj4gIm5vbmUiKSkKPiArwqDCoMKgIHBuID0g cG5zLnBvcCgpCj4gK8KgwqDCoCBmb3IgYXJjaCBpbiBkLmdldFZhcignU1NUQVRFX0FSQ0hTJyku c3BsaXQoKToKPiArwqDCoMKgwqDCoMKgwqAgbWFuaWZlc3QgPSBvcy5wYXRoLmpvaW4oZC5nZXRW YXIoJ1NTVEFURV9NQU5JRkVTVFMnKSwKPiAibWFuaWZlc3QtJXMtJXMuZGVwbG95IiAlIChhcmNo LCBwbikpCj4gK8KgwqDCoMKgwqDCoMKgIGlmIG9zLnBhdGguZXhpc3RzKG1hbmlmZXN0KToKClBh cnNpbmcgQkJfVEFTS0RFUERBVEEgYW5kIHRoZSBzc3RhdGUtY29udHJvbCBtYW5pZmVzdHMgdGll cyB0aGUgY2xhc3MKdG8gc3N0YXRlIGludGVybmFscy4gU2luY2UgdGhlIGZpcnN0IG1hbmlmZXN0 IGZvdW5kIGluIFNTVEFURV9BUkNIUwp3aW5zLCB0aGlzIGNvdWxkIGFsc28gcGljayB1cCBhIHN0 YWxlIG1hbmlmZXN0IGFmdGVyIGEgUEFDS0FHRV9BUkNICmNoYW5nZS4gSSdkIHN1Z2dlc3QgZHJv cHBpbmcgdGhpcyBjaGVjaywgb3IgYXQgbGVhc3QgdHVybmluZyBpdCBpbnRvIGEKd2FybmluZy4g VGhlIGRvX2RlcGxveSBkZXBlbmRlbmN5IGFscmVhZHkgbWFrZXMgc3VyZSB0aGF0IHRoZSBmaWxl CmV4aXN0cyBhbmQgdGhhdCBpdHMgY2hhbmdlcyBhcmUgdHJhY2tlZC4KCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgd2l0aCBvcGVuKG1hbmlmZXN0KSBhcyBmOgo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcmV0dXJuIHNldChvcy5wYXRoLnJlYWxwYXRoKGxpbmUpIGZvciBsaW5l IGluCj4gZi5yZWFkKCkuc3BsaXRsaW5lcygpIGlmIGxpbmUgYW5kIG5vdCBsaW5lLmVuZHN3aXRo KCcvJykpCj4gK8KgwqDCoCBiYi5mYXRhbCgiTm8gZGVwbG95IG1hbmlmZXN0IGZvdW5kIGZvciAl cyIgJSBwbikKPiArZml0X2tlcm5lbF9kZXBsb3llZF9maWxlc1t2YXJkZXBzZXhjbHVkZV0gPSAi QkJfVEFTS0RFUERBVEEKPiBTU1RBVEVfQVJDSFMiCj4gKwo+IMKgcHl0aG9uIGRvX2NvbXBpbGUo KSB7Cj4gwqDCoMKgwqAgaW1wb3J0IHNodXRpbAo+IMKgwqDCoMKgIGltcG9ydCBvZS5maXRpbWFn ZQo+IEBAIC05NSw2ICsxNTEsMzkgQEAgcHl0aG9uIGRvX2NvbXBpbGUoKSB7Cj4gwqDCoMKgwqDC oMKgwqDCoCBkLmdldFZhcignVUJPT1RfTE9BREFERFJFU1MnKSwgZC5nZXRWYXIoJ1VCT09UX0VO VFJZUE9JTlQnKSwKPiDCoMKgwqDCoMKgwqDCoMKgIGQuZ2V0VmFyKCdVQk9PVF9NS0lNQUdFX0tF Uk5FTF9UWVBFJyksCj4gZC5nZXRWYXIoIlVCT09UX0VOVFJZU1lNQk9MIikpCj4gwqAKPiArwqDC oMKgICMgUHJlcGFyZSBhZGRpdGlvbmFsIGtlcm5lbCBpbWFnZSBzZWN0aW9ucwo+ICvCoMKgwqAg Zm9yIGtlcm5lbCBpbiBkLmdldFZhcignRklUX0tFUk5FTFMnKS5zcGxpdCgpOgo+ICvCoMKgwqDC oMKgwqDCoCByZWNpcGUgPSBkLmdldFZhckZsYWcoJ0ZJVF9LRVJORUxfUkVDSVBFJywga2VybmVs KQo+ICvCoMKgwqDCoMKgwqDCoCBtYyA9IGQuZ2V0VmFyRmxhZygnRklUX0tFUk5FTF9NVUxUSUNP TkZJRycsIGtlcm5lbCkKPiArwqDCoMKgwqDCoMKgwqAga2VybmVsX3BhdGggPSBmaXRfa2VybmVs X3BhdGgoZCwga2VybmVsKQo+ICvCoMKgwqDCoMKgwqDCoCBpZiBub3Qgb3MucGF0aC5leGlzdHMo a2VybmVsX3BhdGgpOgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJiLmZhdGFsKCJGaWxlIGZv ciBrZXJuZWwgJXMgbm90IGZvdW5kIGF0ICVzIiAlIChrZXJuZWwsCj4ga2VybmVsX3BhdGgpKQo+ ICvCoMKgwqDCoMKgwqDCoCAjIEFydGlmYWN0cyBvZiBhbm90aGVyIG11bHRpY29uZmlnIGNhbm5v dCBiZSB2ZXJpZmllZCwgaXRzCj4gRklUX0tFUk5FTF9ERVBMT1lESVIgaXMgdHJ1c3RlZAo+ICvC oMKgwqDCoMKgwqDCoCBkZXBsb3llZCA9IE5vbmUKPiArwqDCoMKgwqDCoMKgwqAgaWYgcmVjaXBl IGFuZCBub3QgbWM6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGVwbG95ZWQgPSBmaXRfa2Vy bmVsX2RlcGxveWVkX2ZpbGVzKGQsIHJlY2lwZSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBp ZiBvcy5wYXRoLnJlYWxwYXRoKGtlcm5lbF9wYXRoKSBub3QgaW4gZGVwbG95ZWQ6Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBiYi5mYXRhbCgiRmlsZSBmb3Iga2VybmVsICVzIGF0 ICVzIGlzIG5vdCBkZXBsb3llZAo+IGJ5ICVzIiAlIChrZXJuZWwsIGtlcm5lbF9wYXRoLCByZWNp cGUpKQo+ICvCoMKgwqDCoMKgwqDCoCBrZXJuZWxfZmlsZSA9ICJsaW51eC0lcy5iaW4iICUga2Vy bmVsCj4gK8KgwqDCoMKgwqDCoMKgIHNodXRpbC5jb3B5ZmlsZShrZXJuZWxfcGF0aCwga2VybmVs X2ZpbGUpCj4gKwo+ICvCoMKgwqDCoMKgwqDCoCBrZXJuZWxfY29tcCA9IGQuZ2V0VmFyRmxhZygn RklUX0tFUk5FTF9DT01QUkVTU0lPTicsIGtlcm5lbCkKPiArwqDCoMKgwqDCoMKgwqAgaWYgbm90 IGtlcm5lbF9jb21wOgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGtlcm5lbF9jb21wID0gIm5v bmUiCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIyBsaW51eF9jb21wIG9ubHkgZGVzY3JpYmVz IGxpbnV4LmJpbiB3cml0dGVuIGJ5IGtlcm5lbC0KPiBmaXQtZXh0cmEtYXJ0aWZhY3RzIG9mIHRo ZSBzYW1lIHJlY2lwZQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChyZWNpcGUgb3IgbWMp IGFuZCBvcy5wYXRoLmJhc2VuYW1lKGtlcm5lbF9wYXRoKSA9PQo+ICJsaW51eC5iaW4iOgo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAga2VybmVsX2NvbXBfcGF0aCA9Cj4gb3MucGF0 aC5qb2luKG9zLnBhdGguZGlybmFtZShrZXJuZWxfcGF0aCksICJsaW51eF9jb21wIikKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhrZXJuZWxf Y29tcF9wYXRoKSBvciBcCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgKGRlcGxveWVkIGlzIG5vdCBOb25lIGFuZAo+IG9zLnBhdGgucmVhbHBhdGgoa2Vy bmVsX2NvbXBfcGF0aCkgbm90IGluIGRlcGxveWVkKToKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgYmIuZmF0YWwoIiVzIG5vdCBmb3VuZCBvciBub3QgZGVwbG95ZWQg YnkgdGhlCj4ga2VybmVsIHJlY2lwZSwgc2V0IEZJVF9LRVJORUxfQ09NUFJFU1NJT05bJXNdIiAl IChrZXJuZWxfY29tcF9wYXRoLAo+IGtlcm5lbCkpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCB3aXRoIG9wZW4oa2VybmVsX2NvbXBfcGF0aCkgYXMga2VybmVsX2NvbXBfZjoKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAga2VybmVsX2NvbXAgPSBrZXJu ZWxfY29tcF9mLnJlYWQoKS5zdHJpcCgpCj4gK8KgwqDCoMKgwqDCoMKgIHJvb3Rfbm9kZS5maXRp bWFnZV9lbWl0X3NlY3Rpb25fa2VybmVsKGtlcm5lbCwga2VybmVsX2ZpbGUsCj4ga2VybmVsX2Nv bXAsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZC5nZXRWYXJGbGFnKCdGSVRfS0VSTkVMX0xP QURBRERSRVNTJywga2VybmVsKSBvcgo+IGQuZ2V0VmFyKCdVQk9PVF9MT0FEQUREUkVTUycpLAo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGQuZ2V0VmFyRmxhZygnRklUX0tFUk5FTF9FTlRSWVBP SU5UJywga2VybmVsKSBvcgo+IGQuZ2V0VmFyKCdVQk9PVF9FTlRSWVBPSU5UJyksCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgZC5nZXRWYXJGbGFnKCdGSVRfS0VSTkVMX1RZUEUnLCBrZXJuZWwp IG9yCj4gZC5nZXRWYXIoJ1VCT09UX01LSU1BR0VfS0VSTkVMX1RZUEUnKSwKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBkZXNjcmlwdGlvbj1kLmdldFZhckZsYWcoJ0ZJVF9LRVJORUxfREVTQ1JJ UFRJT04nLAo+IGtlcm5lbCkgb3IgIkxpbnV4IGtlcm5lbCIpCj4gKwo+IMKgwqDCoMKgICMgUHJl cGFyZSBhIERUQiBpbWFnZSBzZWN0aW9uCj4gwqDCoMKgwqAga2VybmVsX2RldmljZXRyZWUgPSBk LmdldFZhcignS0VSTkVMX0RFVklDRVRSRUUnKQo+IMKgwqDCoMKgIGV4dGVybmFsX2tlcm5lbF9k ZXZpY2V0cmVlID0KPiBkLmdldFZhcigiRVhURVJOQUxfS0VSTkVMX0RFVklDRVRSRUUiKQo+IEBA IC0yMTAsNiArMjk5LDE4IEBAIHB5dGhvbiBkb19jb21waWxlKCkgewo+IMKgwqDCoMKgICMgR2Vu ZXJhdGUgdGhlIGNvbmZpZ3VyYXRpb24gc2VjdGlvbgo+IMKgwqDCoMKgIHJvb3Rfbm9kZS5maXRp bWFnZV9lbWl0X3NlY3Rpb25fY29uZmlnKGRlZmF1bHRfZHRiLAo+IGQuZ2V0VmFyKCJGSVRfQ09O Rl9NQVBQSU5HUyIpKQo+IMKgCj4gK8KgwqDCoCAjIEdlbmVyYXRlIGFkZGl0aW9uYWwgY29uZmln dXJhdGlvbnMsIGUuZy4gcmVmZXJyaW5nIHRvCj4gYWRkaXRpb25hbCBrZXJuZWxzCj4gK8KgwqDC oCBmb3IgY29uZiBpbiBkLmdldFZhcignRklUX0NPTkZJR1MnKS5zcGxpdCgpOgo+ICvCoMKgwqDC oMKgwqDCoCBjb25mX2R0YiA9IGQuZ2V0VmFyRmxhZygnRklUX0NPTkZJR19EVEInLCBjb25mKQo+ ICvCoMKgwqDCoMKgwqDCoCBpZiBjb25mX2R0YjoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBj b25mX2R0YiA9IGFwcGx5X2R0YnZlbmRvcmVkKGQsIGNvbmZfZHRiKQoKTWlub3I6IHdpdGggS0VS TkVMX0RUQlZFTkRPUkVEID0gIjEiLCBhIERUQiBmcm9tIEtFUk5FTF9ERVZJQ0VUUkVFIGlzCnNr aXBwZWQgaWYgaXQncyBhbHNvIGluIEVYVEVSTkFMX0tFUk5FTF9ERVZJQ0VUUkVFLCBhbmQgaXMg dGhlbgpyZWdpc3RlcmVkIHVuZGVyIGl0cyBiYXNlbmFtZS4gQSBGSVRfQ09ORklHX0RUQiB3cml0 dGVuIGFzIGluCktFUk5FTF9ERVZJQ0VUUkVFIGRvZXMgbm90IG1hdGNoIGluIHRoYXQgY2FzZS4K ClJlZ2FyZHMsCkFkcmlhbgoKCj4gK8KgwqDCoMKgwqDCoMKgIHJvb3Rfbm9kZS5maXRpbWFnZV9l bWl0X3NlY3Rpb25fY29uZmlnX2N1c3RvbShjb25mLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGQuZ2V0VmFyRmxhZygnRklUX0NPTkZJR19LRVJORUwnLCBjb25mKSwgY29uZl9kdGIpCj4gKwo+ ICvCoMKgwqAgZml0X2NvbmZfZGVmYXVsdCA9IGQuZ2V0VmFyKCdGSVRfQ09ORl9ERUZBVUxUJykK PiArwqDCoMKgIGlmIGZpdF9jb25mX2RlZmF1bHQ6Cj4gK8KgwqDCoMKgwqDCoMKgIHJvb3Rfbm9k ZS5maXRpbWFnZV9zZXRfZGVmYXVsdF9jb25maWcoZml0X2NvbmZfZGVmYXVsdCkKPiArCj4gwqDC oMKgwqAgIyBXcml0ZSB0aGUgaXRzIGZpbGUKPiDCoMKgwqDCoCByb290X25vZGUud3JpdGVfaXRz X2ZpbGUoaXRzZmlsZSkKPiDCoAo+IGRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZS9maXRpbWFnZS5w eSBiL21ldGEvbGliL29lL2ZpdGltYWdlLnB5Cj4gaW5kZXggOTFjY2MzMWQ0Ni4uYzA2MjQxM2Y1 MiAxMDA2NDQKPiAtLS0gYS9tZXRhL2xpYi9vZS9maXRpbWFnZS5weQo+ICsrKyBiL21ldGEvbGli L29lL2ZpdGltYWdlLnB5Cj4gQEAgLTE0Nyw4ICsxNDcsMTEgQEAgY2xhc3MgSXRzTm9kZUNvbmZp Z3VyYXRpb24oSXRzTm9kZSk6Cj4gwqBjbGFzcyBJdHNOb2RlUm9vdEtlcm5lbChJdHNOb2RlKToK PiDCoMKgwqDCoCAiIiJDcmVhdGUgRklUIGltYWdlcyBmb3IgdGhlIGtlcm5lbAo+IMKgCj4gLcKg wqDCoCBDdXJyZW50bHkgb25seSBhIHNpbmdsZSBrZXJuZWwgKG5vIGxlc3Mgb3IgbW9yZSkgY2Fu IGJlIGFkZGVkIHRvCj4gdGhlIEZJVAo+IC3CoMKgwqAgaW1hZ2UgYWxvbmcgd2l0aCAwIG9yIG1v cmUgZGV2aWNlIHRyZWVzIGFuZCAwIG9yIDEgcmFtZGlzay4KPiArwqDCoMKgIE9uZSBvciBtb3Jl IGtlcm5lbHMgY2FuIGJlIGFkZGVkIHRvIHRoZSBGSVQgaW1hZ2UgYWxvbmcgd2l0aCAwCj4gb3Ig bW9yZQo+ICvCoMKgwqAgZGV2aWNlIHRyZWVzIGFuZCAwIG9yIDEgcmFtZGlzay4gVGhlIGZpcnN0 IGtlcm5lbCBhZGRlZCBpcyB0aGUKPiBkZWZhdWx0Cj4gK8KgwqDCoCBrZXJuZWwgcmVmZXJlbmNl ZCBieSB0aGUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgY29uZmlndXJhdGlvbnMuCj4gK8KgwqDC oCBBZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb25zIHJlZmVycmluZyB0byBvdGhlciBrZXJuZWxzIGNh biBiZQo+IGFkZGVkIHdpdGgKPiArwqDCoMKgIGZpdGltYWdlX2VtaXRfc2VjdGlvbl9jb25maWdf Y3VzdG9tKCkuCj4gwqAKPiDCoMKgwqDCoCBJZiBhIGRldmljZSB0cmVlIGluY2x1ZGVkIGluIHRo ZSBGSVQgaW1hZ2UsIHRoZSBkZWZhdWx0Cj4gY29uZmlndXJhdGlvbiBpcyB0aGUKPiDCoMKgwqDC oCBmaXJ0IERUQi4gSWYgdGhlcmUgaXMgbm8gZHRiIHByZXNlbnQgdGhhbiB0aGUgZGVmYXVsdAo+ IGNvbmZpZ3VhdGlvbiB0aGUga2VybmVsLgo+IEBAIC0xOTIsNiArMTk1LDkgQEAgY2xhc3MgSXRz Tm9kZVJvb3RLZXJuZWwoSXRzTm9kZSk6Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgIHNlbGYuX2R0 YnMgPSBbXQo+IMKgwqDCoMKgwqDCoMKgwqAgc2VsZi5fZHRiX2FsaWFzID0gW10KPiArwqDCoMKg wqDCoMKgwqAgIyBEVEIgaWRzIGFzIHBhc3NlZCB0byBmaXRpbWFnZV9lbWl0X3NlY3Rpb25fZHRi KF9hbGlhcykKPiBtYXBwZWQgdG8gdGhlaXIgbm9kZXMKPiArwqDCoMKgwqDCoMKgwqAgc2VsZi5f ZHRic19ieV9pZCA9IHt9Cj4gK8KgwqDCoMKgwqDCoMKgIHNlbGYuX2RlZmF1bHRfY29uZiA9IE5v bmUKPiDCoMKgwqDCoMKgwqDCoMKgIHNlbGYuX2tlcm5lbCA9IE5vbmUKPiDCoMKgwqDCoMKgwqDC oMKgIHNlbGYuX2tlcm5lbHMgPSB7fQo+IMKgwqDCoMKgwqDCoMKgwqAgc2VsZi5fcmFtZGlzayA9 IE5vbmUKPiBAQCAtMjEzLDExICsyMTksMTggQEAgY2xhc3MgSXRzTm9kZVJvb3RLZXJuZWwoSXRz Tm9kZSk6Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYmIuZmF0YWwoIkZJVCBp bWFnZSBzaWduaW5nIGlzIGVuYWJsZWQgZm9yCj4gaW5kaXZpZHVhbCBpbWFnZXMgYnV0IG5vIGlt YWdlIGtleSBuYW1lIGlzIHByb3ZpZGVkLiIpCj4gwqAKPiDCoMKgwqDCoCBkZWYgd3JpdGVfaXRz X2ZpbGUoc2VsZiwgaXRzZmlsZSk6Cj4gK8KgwqDCoMKgwqDCoMKgIGlmIHNlbGYuX2RlZmF1bHRf Y29uZjoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzZWxmLmNvbmZpZ3VyYXRpb25zLmFkZF9w cm9wZXJ0eSgnZGVmYXVsdCcsCj4gc2VsZi5fZGVmYXVsdF9jb25mKQo+IMKgwqDCoMKgwqDCoMKg wqAgd2l0aCBvcGVuKGl0c2ZpbGUsICd3JykgYXMgZjoKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgZi53cml0ZSgiL2R0cy12MS87XG5cbiIpCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNl bGYuZW1pdChmLCAwKQo+IMKgCj4gK8KgwqDCoCBkZWYgX2NoZWNrX2ltYWdlX2lkX3VuaXF1ZShz ZWxmLCBpbWFnZV9pZCk6Cj4gK8KgwqDCoMKgwqDCoMKgIGlmIGFueShub2RlLm5hbWUgPT0gaW1h Z2VfaWQgZm9yIG5vZGUgaW4KPiBzZWxmLmltYWdlcy5zdWJfbm9kZXMpOgo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGJiLmZhdGFsKCJJbWFnZSBub2RlICclcycgYWxyZWFkeSBleGlzdHMgaW4g dGhlIElUUwo+IGZpbGUuIiAlIGltYWdlX2lkKQo+ICsKPiDCoMKgwqDCoCBkZWYgaXRzX2FkZF9u b2RlX2ltYWdlKHNlbGYsIGltYWdlX2lkLCBkZXNjcmlwdGlvbiwgaW1hZ2VfdHlwZSwKPiBjb21w cmVzc2lvbiwgb3B0X3Byb3BzKToKPiArwqDCoMKgwqDCoMKgwqAgc2VsZi5fY2hlY2tfaW1hZ2Vf aWRfdW5pcXVlKGltYWdlX2lkKQo+IMKgwqDCoMKgwqDCoMKgwqAgaW1hZ2Vfbm9kZSA9IEl0c05v ZGVJbWFnZSgKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW1hZ2VfaWQsCj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHNlbGYuaW1hZ2VzLAo+IEBAIC0yNDIsNiArMjU1LDcgQEAgY2xhc3Mg SXRzTm9kZVJvb3RLZXJuZWwoSXRzTm9kZSk6Cj4gwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gaW1h Z2Vfbm9kZQo+IMKgCj4gwqDCoMKgwqAgZGVmIGl0c19hZGRfbm9kZV9kdGIoc2VsZiwgaW1hZ2Vf aWQsIGRlc2NyaXB0aW9uLCBpbWFnZV90eXBlLAo+IGNvbXByZXNzaW9uLCBvcHRfcHJvcHMsIGNv bXBhdGlibGUpOgo+ICvCoMKgwqDCoMKgwqDCoCBzZWxmLl9jaGVja19pbWFnZV9pZF91bmlxdWUo aW1hZ2VfaWQpCj4gwqDCoMKgwqDCoMKgwqDCoCBkdGJfbm9kZSA9IEl0c05vZGVEdGIoCj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGltYWdlX2lkLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBzZWxmLmltYWdlcywKPiBAQCAtMjY3LDcgKzI4MSw3IEBAIGNsYXNzIEl0c05vZGVSb290S2Vy bmVsKEl0c05vZGUpOgo+IMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGR0Yl9ub2RlCj4gwqAKPiDC oMKgwqDCoCBkZWYgZml0aW1hZ2VfZW1pdF9zZWN0aW9uX2tlcm5lbChzZWxmLCBrZXJuZWxfaWQs IGtlcm5lbF9wYXRoLAo+IGNvbXByZXNzaW9uLAo+IC3CoMKgwqDCoMKgwqDCoCBsb2FkLCBlbnRy eXBvaW50LCBta2ltYWdlX2tlcm5lbF90eXBlLCBlbnRyeXN5bWJvbD1Ob25lKToKPiArwqDCoMKg wqDCoMKgwqAgbG9hZCwgZW50cnlwb2ludCwgbWtpbWFnZV9rZXJuZWxfdHlwZSwgZW50cnlzeW1i b2w9Tm9uZSwKPiBkZXNjcmlwdGlvbj0iTGludXgga2VybmVsIik6Cj4gwqDCoMKgwqDCoMKgwqDC oCAiIiJFbWl0IHRoZSBmaXRJbWFnZSBJVFMga2VybmVsIHNlY3Rpb24iIiIKPiDCoMKgwqDCoMKg wqDCoMKgIGlmIGtlcm5lbF9pZCBpbiBzZWxmLl9rZXJuZWxzOgo+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBiYi5mYXRhbCgiS2VybmVsIHNlY3Rpb24gJyVzJyBhbHJlYWR5IGV4aXN0cyBpbiB0 aGUgSVRTCj4gZmlsZS4iICUga2VybmVsX2lkKQo+IEBAIC0yOTAsNyArMzA0LDcgQEAgY2xhc3Mg SXRzTm9kZVJvb3RLZXJuZWwoSXRzTm9kZSk6Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgIGtlcm5l bF9ub2RlID0gc2VsZi5pdHNfYWRkX25vZGVfaW1hZ2UoCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGtlcm5lbF9pZCwKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiTGludXgga2VybmVsIiwK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkZXNjcmlwdGlvbiwKPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgbWtpbWFnZV9rZXJuZWxfdHlwZSwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg Y29tcHJlc3Npb24sCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG9wdF9wcm9wcywKPiBAQCAt MzAzLDYgKzMxNyw4IEBAIGNsYXNzIEl0c05vZGVSb290S2VybmVsKEl0c05vZGUpOgo+IMKgwqDC oMKgIGRlZiBmaXRpbWFnZV9lbWl0X3NlY3Rpb25fZHRiKHNlbGYsIGR0Yl9pZCwgZHRiX3BhdGgs Cj4gZHRiX2xvYWRhZGRyZXNzPU5vbmUsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZHRib19sb2FkYWRkcmVzcz1O b25lLAo+IGFkZF9jb21wYXRpYmxlPUZhbHNlKToKPiDCoMKgwqDCoMKgwqDCoMKgICIiIkVtaXQg dGhlIGZpdEltYWdlIElUUyBEVEIgc2VjdGlvbiIiIgo+ICvCoMKgwqDCoMKgwqDCoCBpZiBkdGJf aWQgaW4gc2VsZi5fZHRic19ieV9pZDoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBiYi5mYXRh bCgiRFRCICclcycgYWxyZWFkeSBleGlzdHMgaW4gdGhlIElUUyBmaWxlLiIgJQo+IGR0Yl9pZCkK PiDCoMKgwqDCoMKgwqDCoMKgIGxvYWQ9Tm9uZQo+IMKgwqDCoMKgwqDCoMKgwqAgZHRiX2V4dCA9 IG9zLnBhdGguc3BsaXRleHQoZHRiX3BhdGgpWzFdCj4gwqDCoMKgwqDCoMKgwqDCoCBpZiBkdGJf ZXh0ID09ICIuZHRibyI6Cj4gQEAgLTMzMiw5ICszNDgsMTIgQEAgY2xhc3MgSXRzTm9kZVJvb3RL ZXJuZWwoSXRzTm9kZSk6Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbXBhdGlibGUKPiDC oMKgwqDCoMKgwqDCoMKgICkKPiDCoMKgwqDCoMKgwqDCoMKgIHNlbGYuX2R0YnMuYXBwZW5kKGR0 Yl9ub2RlKQo+ICvCoMKgwqDCoMKgwqDCoCBzZWxmLl9kdGJzX2J5X2lkW2R0Yl9pZF0gPSBkdGJf bm9kZQo+IMKgCj4gwqDCoMKgwqAgZGVmIGZpdGltYWdlX2VtaXRfc2VjdGlvbl9kdGJfYWxpYXMo c2VsZiwgZHRiX2FsaWFzX2lkLAo+IGR0Yl9wYXRoLCBhZGRfY29tcGF0aWJsZT1GYWxzZSk6Cj4g wqDCoMKgwqDCoMKgwqDCoCAiIiJBZGQgYSBjb25maWd1cmF0aW9uIG5vZGUgcmVmZXJyaW5nIHRv IGFub3RoZXIgRFRCIiIiCj4gK8KgwqDCoMKgwqDCoMKgIGlmIGR0Yl9hbGlhc19pZCBpbiBzZWxm Ll9kdGJzX2J5X2lkOgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJiLmZhdGFsKCJEVEIgJyVz JyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgSVRTIGZpbGUuIiAlCj4gZHRiX2FsaWFzX2lkKQo+IMKg wqDCoMKgwqDCoMKgwqAgIyBQcmVzZXJ2ZSB0aGUgRFRCJ3MgY29tcGF0aWJsZSBzdHJpbmcgdG8g YmUgYWRkZWQgdG8gdGhlCj4gY29uZmlndXJhdGlvbiBub2RlCj4gwqDCoMKgwqDCoMKgwqDCoCBj b21wYXRpYmxlID0gTm9uZQo+IMKgwqDCoMKgwqDCoMKgwqAgaWYgYWRkX2NvbXBhdGlibGU6Cj4g QEAgLTM0Myw2ICszNjIsNyBAQCBjbGFzcyBJdHNOb2RlUm9vdEtlcm5lbChJdHNOb2RlKToKPiDC oMKgwqDCoMKgwqDCoMKgIGR0Yl9pZCA9IG9zLnBhdGguYmFzZW5hbWUoZHRiX3BhdGgpCj4gwqDC oMKgwqDCoMKgwqDCoCBkdGJfYWxpYXNfbm9kZSA9IEl0c05vZGVEdGJBbGlhcygiZmR0LSIgKyBk dGJfaWQsCj4gZHRiX2FsaWFzX2lkLCBjb21wYXRpYmxlKQo+IMKgwqDCoMKgwqDCoMKgwqAgc2Vs Zi5fZHRiX2FsaWFzLmFwcGVuZChkdGJfYWxpYXNfbm9kZSkKPiArwqDCoMKgwqDCoMKgwqAgc2Vs Zi5fZHRic19ieV9pZFtkdGJfYWxpYXNfaWRdID0gZHRiX2FsaWFzX25vZGUKPiDCoAo+IMKgwqDC oMKgIGRlZiBmaXRpbWFnZV9lbWl0X3NlY3Rpb25fYm9vdF9zY3JpcHQoc2VsZiwgYm9vdHNjcl9p ZCwKPiBib290c2NyX3BhdGgpOgo+IMKgwqDCoMKgwqDCoMKgwqAgIiIiRW1pdCB0aGUgZml0SW1h Z2UgSVRTIHUtYm9vdCBzY3JpcHQgc2VjdGlvbiIiIgo+IEBAIC01NjcsMTMgKzU4Nyw0NyBAQCBj bGFzcyBJdHNOb2RlUm9vdEtlcm5lbChJdHNOb2RlKToKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCApCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYmIuZmF0YWwo IkZJVCBjb25maWd1cmF0aW9uIG1hcHBpbmcocykgbm90IG1hdGNoZWQKPiB3aXRoIGFueSBEVEI6 ICVzIiAlICcsICcuam9pbih1bnVzZWRfY29uZikpCj4gwqDCoMKgwqDCoMKgwqDCoCBlbHNlOgo+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgICMgQ3VycmVudGx5IGV4YWN0bHkgb25lIGtlcm5lbCBp cyBzdXBwb3J0ZWQuCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIyBXaXRob3V0IERUQnMsIGVt aXQgb25lIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBkZWZhdWx0Cj4ga2VybmVsCj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHNlbGYuX2ZpdGltYWdlX2VtaXRfb25lX3NlY3Rpb25fY29uZmlnKHNl bGYuX2NvbmZfcHJlZml4Cj4gKyAiMSIpCj4gwqAKPiDCoMKgwqDCoMKgwqDCoMKgIGRlZmF1bHRf Y29uZiA9IHNlbGYuY29uZmlndXJhdGlvbnMuc3ViX25vZGVzWzBdLm5hbWUKPiDCoMKgwqDCoMKg wqDCoMKgIGlmIGRlZmF1bHRfZHRiX2ltYWdlIGFuZCBzZWxmLl9kdGJzOgo+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBkZWZhdWx0X2NvbmYgPSBzZWxmLl9jb25mX3ByZWZpeCArIGRlZmF1bHRf ZHRiX2ltYWdlCj4gLcKgwqDCoMKgwqDCoMKgIHNlbGYuY29uZmlndXJhdGlvbnMuYWRkX3Byb3Bl cnR5KCdkZWZhdWx0JywgZGVmYXVsdF9jb25mKQo+ICvCoMKgwqDCoMKgwqDCoCBzZWxmLl9kZWZh dWx0X2NvbmYgPSBkZWZhdWx0X2NvbmYKPiArCj4gK8KgwqDCoCBkZWYgZml0aW1hZ2VfZW1pdF9z ZWN0aW9uX2NvbmZpZ19jdXN0b20oc2VsZiwgY29uZl9pZCwKPiBrZXJuZWxfaWQ9Tm9uZSwgZHRi X2lkPU5vbmUpOgoKZml0aW1hZ2VfZW1pdF9zZWN0aW9uX2NvbmZpZygpIHN0aWxsIHBpY2tzCmNv bmZpZ3VyYXRpb25zLnN1Yl9ub2Rlc1swXSBhcyB0aGUgZGVmYXVsdC4gSWYgYSBjYWxsZXIgZW1p dHMgY3VzdG9tCmNvbmZpZ3VyYXRpb25zIGZpcnN0LCBvbmUgb2YgdGhlbSBzaWxlbnRseSBiZWNv bWVzIHRoZSBkZWZhdWx0LiBBIG5vdGUKaW4gdGhlIGRvY3N0cmluZyBvciBhIGNoZWNrIHdvdWxk IGhlbHAuCgpBcyBtZW50aW9uZWQgaW4gMS80OiB3aXRoIGFuIG92ZXJsYXkgYXMgRklUX0NPTkZJ R19EVEJbeF0sCkZJVF9DT05GSUdfS0VSTkVMW3hdIGlzIHNpbGVudGx5IGlnbm9yZWQuIFRoaXMg ZnVuY3Rpb24gd291bGQgYmUgYQpnb29kIHBsYWNlIHRvIGZhaWwgaW4gdGhhdCBjYXNlLgoKCj4g K8KgwqDCoMKgwqDCoMKgICIiIkVtaXQgYW4gYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIG5vZGUg Zm9yIGEgc3BlY2lmaWMKPiBrZXJuZWwgYW5kIG9wdGlvbmFsIERUQgo+ICsKPiArwqDCoMKgwqDC oMKgwqAga2VybmVsX2lkIGlzIHRoZSBuYW1lIG9mIGEga2VybmVsIGltYWdlIG5vZGUsIHRoZSBk ZWZhdWx0Cj4ga2VybmVsIGlzIHVzZWQgaWYgbm90IHNldC4KPiArwqDCoMKgwqDCoMKgwqAgZHRi X2lkIGlzIHRoZSBpZCBwYXNzZWQgdG8gZml0aW1hZ2VfZW1pdF9zZWN0aW9uX2R0YiBvcgo+IGZp dGltYWdlX2VtaXRfc2VjdGlvbl9kdGJfYWxpYXMuCj4gK8KgwqDCoMKgwqDCoMKgICIiIgo+ICvC oMKgwqDCoMKgwqDCoCBjb25mX25vZGVfbmFtZSA9IHNlbGYuX2NvbmZfcHJlZml4ICsgY29uZl9p ZAo+ICvCoMKgwqDCoMKgwqDCoCBpZiBhbnkoY29uZi5uYW1lID09IGNvbmZfbm9kZV9uYW1lIGZv ciBjb25mIGluCj4gc2VsZi5jb25maWd1cmF0aW9ucy5zdWJfbm9kZXMpOgo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGJiLmZhdGFsKCJGSVQgY29uZmlndXJhdGlvbiAnJXMnIGFscmVhZHkgZXhp c3RzIGluIHRoZQo+IElUUyBmaWxlLiIgJSBjb25mX25vZGVfbmFtZSkKPiArCj4gK8KgwqDCoMKg wqDCoMKgIGtlcm5lbCA9IE5vbmUKPiArwqDCoMKgwqDCoMKgwqAgaWYga2VybmVsX2lkOgo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGtlcm5lbCA9IHNlbGYuX2tlcm5lbHMuZ2V0KGtlcm5lbF9p ZCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiBub3Qga2VybmVsOgo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgYmIuZmF0YWwoIkZJVCBjb25maWd1cmF0aW9uICclcycgcmVm ZXJzIHRvIHVua25vd24KPiBrZXJuZWwgJyVzJy4gQXZhaWxhYmxlIGtlcm5lbHM6ICVzIiAlCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoY29uZl9u b2RlX25hbWUsIGtlcm5lbF9pZCwgJwo+ICcuam9pbihzZWxmLl9rZXJuZWxzKSkpCj4gKwo+ICvC oMKgwqDCoMKgwqDCoCBkdGIgPSBOb25lCj4gK8KgwqDCoMKgwqDCoMKgIGlmIGR0Yl9pZDoKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkdGIgPSBzZWxmLl9kdGJzX2J5X2lkLmdldChkdGJfaWQp Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgbm90IGR0YjoKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGJiLmZhdGFsKCJGSVQgY29uZmlndXJhdGlvbiAnJXMnIHJlZmVycyB0 byB1bmtub3duCj4gRFRCICclcycuIEF2YWlsYWJsZSBEVEJzOiAlcyIgJQo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKGNvbmZfbm9kZV9uYW1lLCBk dGJfaWQsICcKPiAnLmpvaW4oc2VsZi5fZHRic19ieV9pZCkpKQo+ICsKPiArwqDCoMKgwqDCoMKg wqAgc2VsZi5fZml0aW1hZ2VfZW1pdF9vbmVfc2VjdGlvbl9jb25maWcoY29uZl9ub2RlX25hbWUs IGR0YiwKPiBrZXJuZWwpCj4gKwo+ICvCoMKgwqAgZGVmIGZpdGltYWdlX3NldF9kZWZhdWx0X2Nv bmZpZyhzZWxmLCBjb25mX2lkKToKPiArwqDCoMKgwqDCoMKgwqAgIiIiU2VsZWN0IHRoZSBkZWZh dWx0IGNvbmZpZ3VyYXRpb24sIG92ZXJyaWRpbmcgdGhlIG9uZQo+IGNob3NlbiBieSBmaXRpbWFn ZV9lbWl0X3NlY3Rpb25fY29uZmlnIiIiCj4gK8KgwqDCoMKgwqDCoMKgIGNvbmZfbm9kZV9uYW1l ID0gc2VsZi5fY29uZl9wcmVmaXggKyBjb25mX2lkCj4gK8KgwqDCoMKgwqDCoMKgIGlmIG5vdCBh bnkoY29uZi5uYW1lID09IGNvbmZfbm9kZV9uYW1lIGZvciBjb25mIGluCj4gc2VsZi5jb25maWd1 cmF0aW9ucy5zdWJfbm9kZXMpOgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJiLmZhdGFsKCJG SVQgZGVmYXVsdCBjb25maWd1cmF0aW9uICclcycgZG9lcyBub3QgZXhpc3QuCj4gQXZhaWxhYmxl IGNvbmZpZ3VyYXRpb25zOiAlcyIgJQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIChjb25mX25vZGVfbmFtZSwgJyAnLmpvaW4oY29uZi5uYW1lIGZvciBjb25mIGlu Cj4gc2VsZi5jb25maWd1cmF0aW9ucy5zdWJfbm9kZXMpKSkKPiArwqDCoMKgwqDCoMKgwqAgc2Vs Zi5fZGVmYXVsdF9jb25mID0gY29uZl9ub2RlX25hbWUKPiDCoAo+IMKgwqDCoMKgIGRlZiBydW5f bWtpbWFnZV9hc3NlbWJsZShzZWxmLCBpdHNmaWxlLCBmaXRmaWxlKToKPiDCoMKgwqDCoMKgwqDC oMKgIGNtZCA9IFsKPiAKPiAtPS09LT0tPS09LT0tPS09LT0tPS09LQo+IExpbmtzOiBZb3UgcmVj ZWl2ZSBhbGwgbWVzc2FnZXMgc2VudCB0byB0aGlzIGdyb3VwLgo+IFZpZXcvUmVwbHkgT25saW5l ICgjMjQ4MjkxKToKPiBodHRwczovL2xpc3RzLm9wZW5lbWJlZGRlZC5vcmcvZy9vcGVuZW1iZWRk ZWQtY29yZS9tZXNzYWdlLzI0ODI5MQo+IE11dGUgVGhpcyBUb3BpYzogaHR0cHM6Ly9saXN0cy5v cGVuZW1iZWRkZWQub3JnL210LzEyMTg0OTA3Mi80NDU0NTgyCj4gR3JvdXAgT3duZXI6IG9wZW5l bWJlZGRlZC1jb3JlK293bmVyQGxpc3RzLm9wZW5lbWJlZGRlZC5vcmcKPiBVbnN1YnNjcmliZToK PiBodHRwczovL2xpc3RzLm9wZW5lbWJlZGRlZC5vcmcvZy9vcGVuZW1iZWRkZWQtY29yZS91bnN1 YsKgWwo+IGFkcmlhbi5mcmVpaG9mZXJAZ21haWwuY29tXQo+IC09LT0tPS09LT0tPS09LT0tPS09 LT0tCg==