From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH i-g-t] scripts/trace.pl: Optimize event parsing and processing Date: Wed, 20 Dec 2017 09:54:23 +0000 Message-ID: References: <20171219111539.11231-1-tvrtko.ursulin@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id EC70B89DD2 for ; Wed, 20 Dec 2017 09:54:26 +0000 (UTC) In-Reply-To: Content-Language: en-GB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: John Harrison , Tvrtko Ursulin , Intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Ck9uIDE5LzEyLzIwMTcgMTY6MjMsIEpvaG4gSGFycmlzb24gd3JvdGU6Cj4gT24gMTIvMTkvMjAx NyAzOjE1IEFNLCBUdnJ0a28gVXJzdWxpbiB3cm90ZToKPj4gRnJvbTogVHZydGtvIFVyc3VsaW4g PHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KPj4KPj4gQSBjb3VwbGUgb2Ygc21hbGwgb3B0aW1p emF0aW9ucyB3aGljaCBhbHRvZ2V0aGVyIGJyaW5nIGFyb3VuZCAzMCUKPj4gaW1wcm92ZW1lbnQg aW4gbXkgdGVzdGluZy4KPj4KPj4gMS4gRG8gbGVzcyBzdHJpbmcgcHJvY2Vzc2luZyBvbiB0cmFj ZXBvaW50cyBuYW1lcyBhbmQgcHVzaCBtb3JlIG9mIHRoZQo+PiDCoMKgwqAgY2hlY2sgaW50byB0 aGUgaWYtbGFkZGVyLgo+Pgo+PiAyLiBQdWxsIG91dCBjb21tb24gZGIga2V5IGFuZCBjdHggcHJv Y2Vzc2luZyBhbmQgY2FjaGUgY29tbW9uIHZhbHVlcyBpbgo+PiDCoMKgwqAgbG9jYWwgdmFycy4K Pj4KPj4gMy4gS2V5IHZhbHVlIHBhaXIgcGFyc2luZyBpcyBmYXN0ZXIgd2l0aCBhIHJlZ2V4cC4K Pj4KPj4gNC4gQXZvaWQgc29ydGluZyB0aGUgZGIgaGFzaCBtdWx0aXBsZSB0aW1lcyBpZiBwb3Nz aWJsZS4KPj4KPj4gU2lnbmVkLW9mZi1ieTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGlu QGludGVsLmNvbT4KPj4gQ2M6IEpvaG4gSGFycmlzb24gPEpvaG4uQy5IYXJyaXNvbkBpbnRlbC5j b20+Cj4+IC0tLQo+PiDCoCBzY3JpcHRzL3RyYWNlLnBsIHwgMTE0IAo+PiArKysrKysrKysrKysr KysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4+IMKgIDEgZmlsZSBj aGFuZ2VkLCA0OSBpbnNlcnRpb25zKCspLCA2NSBkZWxldGlvbnMoLSkKPj4gLS0tCj4+IEpvaG4g cGxlYXNlIGNoZWNrIGlmIHRoaXMgaGVscHMgd2l0aCB5b3VyIG1vbnN0ZXIgdHJhY2VzIGJlZm9y ZSB3ZSBkZWNpZGUKPj4gaWYgaXQgaXMgd29ydGggcHV0dGluZyB0aGlzIGluLiBXZWxsLCB0aGVy ZSBpc24ndCBtdWNoIG9mIGEgZG93bnNpZGUKPj4gZXhjZXB0IHRvdWNoaW5nIHNvbWV0aGluZyB3 aGljaCB3b3JrcyBhbmQgcmlza2luZyBicmVha2luZyBpdC4KPj4KPj4gZGlmZiAtLWdpdCBhL3Nj cmlwdHMvdHJhY2UucGwgYi9zY3JpcHRzL3RyYWNlLnBsCj4+IGluZGV4IDk4ZTRhOTg0M2E0My4u NTQ2M2UxZmQxOTU0IDEwMDc1NQo+PiAtLS0gYS9zY3JpcHRzL3RyYWNlLnBsCj4+ICsrKyBiL3Nj cmlwdHMvdHJhY2UucGwKPj4gQEAgLTM1NiwxMTAgKzM1Niw5MSBAQCBteSAkcHJldl9mcmVxID0g MDsKPj4gwqAgbXkgJHByZXZfZnJlcV90cyA9IDA7Cj4+IMKgIHdoaWxlICg8Pikgewo+PiDCoMKg wqDCoMKgIG15IEBmaWVsZHM7Cj4+IC3CoMKgwqAgbXkgQHRtcDsKPj4gwqDCoMKgwqDCoCBteSAk dHBfbmFtZTsKPj4gLcKgwqDCoCBteSAkdGltZTsKPj4gwqDCoMKgwqDCoCBteSAldHA7Cj4+IC3C oMKgwqAgbXkgJGtleTsKPj4gK8KgwqDCoCBteSAoJHRpbWUsICRjdHgsICRyaW5nLCAkc2Vxbm8s ICRvcmlnX2N0eCwgJGtleSk7Cj4+IMKgwqDCoMKgwqAgY2hvbXA7Cj4+IMKgwqDCoMKgwqAgQGZp ZWxkcyA9IHNwbGl0ICcgJzsKPj4gK8KgwqDCoCBjaG9wICRmaWVsZHNbM107Cj4+ICvCoMKgwqAg JHRpbWUgPSBpbnQoJGZpZWxkc1szXSAqIDEwMDAwMDAuMCk7Cj4+ICsKPj4gwqDCoMKgwqDCoCAk dHBfbmFtZSA9ICRmaWVsZHNbNF07Cj4+IC3CoMKgwqAgQHRtcCA9IHNwbGl0ICc6JywgJHRwX25h bWUsIDI7Cj4+IC3CoMKgwqAgbmV4dCB1bmxlc3MgJHRtcFswXSBlcSAnaTkxNSc7Cj4+IC3CoMKg wqAgJHRwX25hbWUgPSAkdG1wWzFdOwo+PiAtwqDCoMKgIGNob3AgJHRwX25hbWU7Cj4+IC3CoMKg wqAgY2hvcCAkZmllbGRzWzNdOwo+PiAtwqDCoMKgICR0aW1lID0gJGZpZWxkc1szXSAqIDEwMDAw MDAuMDsKPj4gwqDCoMKgwqDCoCBzcGxpY2UgQGZpZWxkcywgMCwgNTsKPj4gwqDCoMKgwqDCoCBm b3JlYWNoIG15ICRmIChAZmllbGRzKSB7Cj4+IC3CoMKgwqDCoMKgwqDCoCBteSBAa3YgPSBzcGxp dCAnPXwsJywgJGY7Cj4+IC0KPj4gLcKgwqDCoMKgwqDCoMKgICRrdlswXSA9ICdnbG9iYWwnIGlm ICRrdlswXSBlcSAnZ2xvYmFsX3NlcW5vJzsKPj4gK8KgwqDCoMKgwqDCoMKgIG15ICgkaywgJHYp Owo+PiAtwqDCoMKgwqDCoMKgwqAgJHRweyRrdlswXX0gPSAka3ZbMV07Cj4+ICvCoMKgwqDCoMKg wqDCoCAoJGssICR2KSA9ICgkZiA9fiAvXihcUyspPShcZCspLyk7Cj4gSSByZWNhbGwgc29tZXRo aW5nIGFib3V0IHVzaW5nICgpIHNlbGVjdGlvbiBpcyBzbG93ZXIgdGhhbiB1c2luZyAKPiBwcmUt ZGVmaW5lZCB2YWx1ZXMuIEUuZy4KPiAgwqAgJGYgPX4gbS89LzsgKCRrLCAkdikgPSAoJGAsICQn KTsKPiAKPiBPciBkbyB5b3Ugc3BlY2lmaWNhbGx5IG5lZWQgdGhlIGZpbHRlcmluZyBvZiBvbmx5 IG1hdGNoaW5nIG51bWVyaWMgdmFsdWVzPwoKSXQgZG9lc24ndCBtYXR0ZXIgYXQgdGhlIG1vbWVu dCwgYWxsIHRoZSBzY3JpcHQgdG91Y2hlcyBqdXN0IGhhcHBlbnMgdG8gCmJlIG51bWVyaWMgc28g ZWl0aGVyIHdheSB3b3Jrcy4gSSBkaWQgbm90IGtub3cgb2YgdGhpcyB0cmljayBhbmQgaXQgaXMg CmluZGVlZCBtYXJnaW5hbGx5IGZhc3Rlci4gU28gSSd2ZSBzZW50IGFuIHVwZGF0ZSB3aXRoIGl0 IGluY2x1ZGVkLgoKV2hhdCB3YXMgdGhlIGVmZmVjdCBvZiBhbGwgdGhpcyBvbiB5b3VyIGJpZyB0 cmFjZXM/IEkgYW0gb25seSB0ZXN0aW5nIAp3aXRoIGEgc21hbGxlciBvbmUgd2hpY2ggZ29lcyBm cm9tIH4zLjNzIHRvIH4yLjJzLiBPbiBhIGxhcmdlciB0cmFjZSBpdCAKbWlnaHQgYmUgbm9uLWxp bmVhciBnYWlucyBkdWUgdG8gZG91YmxlIHNvcnQgYXZvaWRhbmNlLCB1bmxlc3MgdGhlcmUgCndp bGwgYmUgc29tZSBvdGhlciBlZmZlY3RzIHRvIGNhbmNlbCB0aGF0IG91dC4KCj4+ICvCoMKgwqDC oMKgwqDCoCBuZXh0IHVubGVzcyBkZWZpbmVkICRrOwo+PiArwqDCoMKgwqDCoMKgwqAgJGsgPSAn Z2xvYmFsJyBpZiAkayBlcSAnZ2xvYmFsX3NlcW5vJzsKPj4gK8KgwqDCoMKgwqDCoMKgICR0cHsk a30gPSAkdjsKPj4gwqDCoMKgwqDCoCB9Cj4+IMKgwqDCoMKgwqAgbmV4dCBpZiBleGlzdHMgJHRw eydyaW5nJ30gYW5kIGV4aXN0cyAkaWdub3JlX3Jpbmd7JHRweydyaW5nJ319Owo+PiAtwqDCoMKg IGlmICgkdHBfbmFtZSBlcSAnaTkxNV9nZW1fcmVxdWVzdF93YWl0X2JlZ2luJykgewo+PiAtwqDC oMKgwqDCoMKgwqAgbXkgJXJ3Owo+PiArwqDCoMKgIGlmIChleGlzdHMgJHRweydyaW5nJ30gYW5k IGV4aXN0cyAkdHB7J2N0eCd9IGFuZCBleGlzdHMgCj4+ICR0cHsnc2Vxbm8nfSkgewo+PiArwqDC oMKgwqDCoMKgwqAgJHJpbmcgPSAkdHB7J3JpbmcnfTsKPj4gK8KgwqDCoMKgwqDCoMKgICRjdHgg PSAkdHB7J2N0eCd9Owo+PiArwqDCoMKgwqDCoMKgwqAgJHNlcW5vID0gJHRweydzZXFubyd9Owo+ PiArCj4+ICvCoMKgwqDCoMKgwqDCoCAkb3JpZ19jdHggPSAkY3R4Owo+PiArwqDCoMKgwqDCoMKg wqAgJGN0eCA9IHNhbml0aXplX2N0eCgkY3R4LCAkcmluZyk7Cj4+ICvCoMKgwqDCoMKgwqDCoCAk a2V5ID0gZGJfa2V5KCRyaW5nLCAkY3R4LCAkc2Vxbm8pOwo+PiArwqDCoMKgIH0KPj4gLcKgwqDC oMKgwqDCoMKgICR0cHsnY3R4J30gPSBzYW5pdGl6ZV9jdHgoJHRweydjdHgnfSwgJHRweydyaW5n J30pOwo+PiAtwqDCoMKgwqDCoMKgwqAgJGtleSA9IGRiX2tleSgkdHB7J3JpbmcnfSwgJHRweydj dHgnfSwgJHRweydzZXFubyd9KTsKPj4gK8KgwqDCoCBpZiAoJHRwX25hbWUgZXEgJ2k5MTU6aTkx NV9nZW1fcmVxdWVzdF93YWl0X2JlZ2luOicpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIG15ICVydzsK Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIG5leHQgaWYgZXhpc3RzICRyZXF3YWl0eyRrZXl9Owo+PiDC oMKgwqDCoMKgwqDCoMKgwqAgJHJ3eydrZXknfSA9ICRrZXk7Cj4+IC3CoMKgwqDCoMKgwqDCoCAk cnd7J3JpbmcnfSA9ICR0cHsncmluZyd9Owo+PiAtwqDCoMKgwqDCoMKgwqAgJHJ3eydzZXFubyd9 ID0gJHRweydzZXFubyd9Owo+PiAtwqDCoMKgwqDCoMKgwqAgJHJ3eydjdHgnfSA9ICR0cHsnY3R4 J307Cj4+ICvCoMKgwqDCoMKgwqDCoCAkcnd7J3JpbmcnfSA9ICRyaW5nOwo+PiArwqDCoMKgwqDC oMKgwqAgJHJ3eydzZXFubyd9ID0gJHNlcW5vOwo+PiArwqDCoMKgwqDCoMKgwqAgJHJ3eydjdHgn fSA9ICRjdHg7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCAkcnd7J3N0YXJ0J30gPSAkdGltZTsKPj4g wqDCoMKgwqDCoMKgwqDCoMKgICRyZXF3YWl0eyRrZXl9ID0gXCVydzsKPj4gLcKgwqDCoMKgwqDC oMKgIG5leHQ7Cj4+IC3CoMKgwqAgfSBlbHNpZiAoJHRwX25hbWUgZXEgJ2k5MTVfZ2VtX3JlcXVl c3Rfd2FpdF9lbmQnKSB7Cj4+IC3CoMKgwqDCoMKgwqDCoCAkdHB7J2N0eCd9ID0gc2FuaXRpemVf Y3R4KCR0cHsnY3R4J30sICR0cHsncmluZyd9KTsKPj4gLcKgwqDCoMKgwqDCoMKgICRrZXkgPSBk Yl9rZXkoJHRweydyaW5nJ30sICR0cHsnY3R4J30sICR0cHsnc2Vxbm8nfSk7Cj4+IC0KPj4gK8Kg wqDCoCB9IGVsc2lmICgkdHBfbmFtZSBlcSAnaTkxNTppOTE1X2dlbV9yZXF1ZXN0X3dhaXRfZW5k OicpIHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIG5leHQgdW5sZXNzIGV4aXN0cyAkcmVxd2FpdHsk a2V5fTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgICRyZXF3YWl0eyRrZXl9LT57J2VuZCd9ID0gJHRp bWU7Cj4+IC3CoMKgwqDCoMKgwqDCoCBuZXh0Owo+PiAtwqDCoMKgIH0gZWxzaWYgKCR0cF9uYW1l IGVxICdpOTE1X2dlbV9yZXF1ZXN0X2FkZCcpIHsKPj4gLcKgwqDCoMKgwqDCoMKgIG15ICRvcmln X2N0eCA9ICR0cHsnY3R4J307Cj4+IC0KPj4gLcKgwqDCoMKgwqDCoMKgICR0cHsnY3R4J30gPSBz YW5pdGl6ZV9jdHgoJHRweydjdHgnfSwgJHRweydyaW5nJ30pOwo+PiAtwqDCoMKgwqDCoMKgwqAg JGtleSA9IGRiX2tleSgkdHB7J3JpbmcnfSwgJHRweydjdHgnfSwgJHRweydzZXFubyd9KTsKPj4g LQo+PiArwqDCoMKgIH0gZWxzaWYgKCR0cF9uYW1lIGVxICdpOTE1Omk5MTVfZ2VtX3JlcXVlc3Rf YWRkOicpIHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChleGlzdHMgJHF1ZXVleyRrZXl9KSB7 Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICRjdHhkYnskb3JpZ19jdHh9Kys7Cj4+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgICR0cHsnY3R4J30gPSBzYW5pdGl6ZV9jdHgoJHRweydjdHgn fSwgJHRweydyaW5nJ30pOwo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAka2V5ID0gZGJfa2V5 KCR0cHsncmluZyd9LCAkdHB7J2N0eCd9LCAkdHB7J3NlcW5vJ30pOwo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAkY3R4ID0gc2FuaXRpemVfY3R4KCRjdHgsICRyaW5nKTsKPiBUaGlzIGJpdCBv cmlnaW5hbGx5IHdvcmtlZCBvbiAkb3JpZ19jdHggbm90ICRjdHggKGkuZS4sIGJlZm9yZSB5b3Vy IAo+IHByZXZpb3VzIHJlZmFjdG9yaW5nIHBhdGNoKS4gV2hpY2ggc2hvdWxkIGl0IGJlPyBXaWxs IGEgZG91YmxlIAo+IHNhbml0aXNhdGlvbiBzdGVwIHdvcmsgYXMgaW50ZW5kZWQ/IEkgZG9uJ3Qg YWN0dWFsbHkgaGl0IHRoaXMgbGluZSBpbiAKPiBhbnkgb2YgdGhlIHJ1bnMgSSd2ZSBkb25lLgoK WWVhaCB3ZWxsIHNwb3R0ZWQsIGNvcHkgYW5kIHBhc3RlIGVycm9yIGFuZCBmaXggc2VudC4gUi1i IHdvdWxkIGJlIGNvb2wgCm9uIGl0LgoKVGhpcyBvbmx5IHRyaWdnZXJzIGlmIHlvdSB0cmFjZSBz b21ldGhpbmcgd2hpY2ggY3JlYXRlcyBhbmQgZGVzdHJveXMgCmNvbnRleHRzIGR1ZSBjb250ZXh0 IGlkIHJlY3ljbGluZy4gSGVyZSBpdCBhdXRvLWRldGVjdHMgYW4gaW1wb3NzaWJsZSAKY29uZGl0 aW9uIGFuZCBkZWR1Y2VzIGl0IG11c3QgYmUgYSBuZXcgY29udGV4dCwgc28gaXQgYXNzaWducyBh IG5ldyAKc3VmZml4IHRvIGl0LgoKUmVnYXJkcywKClR2cnRrbwoKPiAKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgJGtleSA9IGRiX2tleSgkcmluZywgJGN0eCwgJHNlcW5vKTsKPj4gwqDCoMKg wqDCoMKgwqDCoMKgIH0KPj4gwqDCoMKgwqDCoMKgwqDCoMKgICRxdWV1ZXska2V5fSA9ICR0aW1l Owo+PiAtwqDCoMKgwqDCoMKgwqAgbmV4dDsKPj4gLcKgwqDCoCB9IGVsc2lmICgkdHBfbmFtZSBl cSAnaTkxNV9nZW1fcmVxdWVzdF9zdWJtaXQnKSB7Cj4+IC3CoMKgwqDCoMKgwqDCoCAkdHB7J2N0 eCd9ID0gc2FuaXRpemVfY3R4KCR0cHsnY3R4J30sICR0cHsncmluZyd9KTsKPj4gLcKgwqDCoMKg wqDCoMKgICRrZXkgPSBkYl9rZXkoJHRweydyaW5nJ30sICR0cHsnY3R4J30sICR0cHsnc2Vxbm8n fSk7Cj4+IC0KPj4gK8KgwqDCoCB9IGVsc2lmICgkdHBfbmFtZSBlcSAnaTkxNTppOTE1X2dlbV9y ZXF1ZXN0X3N1Ym1pdDonKSB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBkaWUgaWYgZXhpc3RzICRz dWJtaXR7JGtleX07Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBkaWUgdW5sZXNzIGV4aXN0cyAkcXVl dWV7JGtleX07Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCAkc3VibWl0eyRrZXl9ID0gJHRpbWU7Cj4+ IC3CoMKgwqDCoMKgwqDCoCBuZXh0Owo+PiAtwqDCoMKgIH0gZWxzaWYgKCR0cF9uYW1lIGVxICdp OTE1X2dlbV9yZXF1ZXN0X2luJykgewo+PiArwqDCoMKgIH0gZWxzaWYgKCR0cF9uYW1lIGVxICdp OTE1Omk5MTVfZ2VtX3JlcXVlc3RfaW46Jykgewo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgbXkgJXJl cTsKPj4gLcKgwqDCoMKgwqDCoMKgICR0cHsnY3R4J30gPSBzYW5pdGl6ZV9jdHgoJHRweydjdHgn fSwgJHRweydyaW5nJ30pOwo+PiAtwqDCoMKgwqDCoMKgwqAgJGtleSA9IGRiX2tleSgkdHB7J3Jp bmcnfSwgJHRweydjdHgnfSwgJHRweydzZXFubyd9KTsKPj4gLQo+PiDCoMKgwqDCoMKgwqDCoMKg wqAgZGllIGlmIGV4aXN0cyAkZGJ7JGtleX07Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBkaWUgdW5s ZXNzIGV4aXN0cyAkcXVldWV7JGtleX07Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBkaWUgdW5sZXNz IGV4aXN0cyAkc3VibWl0eyRrZXl9Owo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgJHJlcXsnc3RhcnQn fSA9ICR0aW1lOwo+PiAtwqDCoMKgwqDCoMKgwqAgJHJlcXsncmluZyd9ID0gJHRweydyaW5nJ307 Cj4+IC3CoMKgwqDCoMKgwqDCoCAkcmVxeydzZXFubyd9ID0gJHRweydzZXFubyd9Owo+PiAtwqDC oMKgwqDCoMKgwqAgJHJlcXsnY3R4J30gPSAkdHB7J2N0eCd9Owo+PiAtwqDCoMKgwqDCoMKgwqAg JHJlcXsnbmFtZSd9ID0gJHRweydjdHgnfSAuICcvJyAuICR0cHsnc2Vxbm8nfTsKPj4gK8KgwqDC oMKgwqDCoMKgICRyZXF7J3JpbmcnfSA9ICRyaW5nOwo+PiArwqDCoMKgwqDCoMKgwqAgJHJlcXsn c2Vxbm8nfSA9ICRzZXFubzsKPj4gK8KgwqDCoMKgwqDCoMKgICRyZXF7J2N0eCd9ID0gJGN0eDsK Pj4gK8KgwqDCoMKgwqDCoMKgICRyZXF7J25hbWUnfSA9ICRjdHggLiAnLycgLiAkc2Vxbm87Cj4+ IMKgwqDCoMKgwqDCoMKgwqDCoCAkcmVxeydnbG9iYWwnfSA9ICR0cHsnZ2xvYmFsJ307Cj4+IMKg wqDCoMKgwqDCoMKgwqDCoCAkcmVxeydwb3J0J30gPSAkdHB7J3BvcnQnfTsKPj4gwqDCoMKgwqDC oMKgwqDCoMKgICRyZXF7J3F1ZXVlJ30gPSAkcXVldWV7JGtleX07Cj4+IMKgwqDCoMKgwqDCoMKg wqDCoCAkcmVxeydzdWJtaXQtZGVsYXknfSA9ICRzdWJtaXR7JGtleX0gLSAkcXVldWV7JGtleX07 Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCAkcmVxeydleGVjdXRlLWRlbGF5J30gPSAkcmVxeydzdGFy dCd9IC0gJHN1Ym1pdHska2V5fTsKPj4gLcKgwqDCoMKgwqDCoMKgICRyaW5nc3skdHB7J3Jpbmcn fX0gPSAkZ2lkKysgdW5sZXNzIGV4aXN0cyAkcmluZ3N7JHRweydyaW5nJ319Owo+PiAtwqDCoMKg wqDCoMKgwqAgJHJpbmdtYXB7JHJpbmdzeyR0cHsncmluZyd9fX0gPSAkdHB7J3JpbmcnfTsKPj4g K8KgwqDCoMKgwqDCoMKgICRyaW5nc3skcmluZ30gPSAkZ2lkKysgdW5sZXNzIGV4aXN0cyAkcmlu Z3N7JHJpbmd9Owo+PiArwqDCoMKgwqDCoMKgwqAgJHJpbmdtYXB7JHJpbmdzeyRyaW5nfX0gPSAk cmluZzsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgICRkYnska2V5fSA9IFwlcmVxOwo+PiAtwqDCoMKg wqDCoMKgwqAgbmV4dDsKPj4gLcKgwqDCoCB9IGVsc2lmICgkdHBfbmFtZSBlcSAnaTkxNV9nZW1f cmVxdWVzdF9vdXQnKSB7Cj4+IC3CoMKgwqDCoMKgwqDCoCBteSAkZ2tleSA9IGdsb2JhbF9rZXko JHRweydyaW5nJ30sICR0cHsnZ2xvYmFsJ30pOwo+PiAtCj4+IC3CoMKgwqDCoMKgwqDCoCAkdHB7 J2N0eCd9ID0gc2FuaXRpemVfY3R4KCR0cHsnY3R4J30sICR0cHsncmluZyd9KTsKPj4gLcKgwqDC oMKgwqDCoMKgICRrZXkgPSBkYl9rZXkoJHRweydyaW5nJ30sICR0cHsnY3R4J30sICR0cHsnc2Vx bm8nfSk7Cj4+ICvCoMKgwqAgfSBlbHNpZiAoJHRwX25hbWUgZXEgJ2k5MTU6aTkxNV9nZW1fcmVx dWVzdF9vdXQ6Jykgewo+PiArwqDCoMKgwqDCoMKgwqAgbXkgJGdrZXkgPSBnbG9iYWxfa2V5KCRy aW5nLCAkdHB7J2dsb2JhbCd9KTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGRpZSB1bmxlc3MgZXhp c3RzICRkYnska2V5fTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGRpZSB1bmxlc3MgZXhpc3RzICRk Ynska2V5fS0+eydzdGFydCd9Owo+PiBAQCAtNDc2LDE1ICs0NTcsMTIgQEAgd2hpbGUgKDw+KSB7 Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCAkZGJ7JGtleX0t PnsnZHVyYXRpb24nfSA9ICRkYnska2V5fS0+eydub3RpZnknfSAtIAo+PiAkZGJ7JGtleX0tPnsn c3RhcnQnfTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgICRkYnska2V5fS0+eydjb250ZXh0LWNvbXBs ZXRlLWRlbGF5J30gPSAkZGJ7JGtleX0tPnsnZW5kJ30gLSAKPj4gJGRieyRrZXl9LT57J25vdGlm eSd9Owo+PiAtwqDCoMKgwqDCoMKgwqAgbmV4dDsKPj4gLcKgwqDCoCB9IGVsc2lmICgkdHBfbmFt ZSBlcSAnaW50ZWxfZW5naW5lX25vdGlmeScpIHsKPj4gLcKgwqDCoMKgwqDCoMKgICRub3RpZnl7 Z2xvYmFsX2tleSgkdHB7J3JpbmcnfSwgJHRweydzZXFubyd9KX0gPSAkdGltZTsKPj4gLcKgwqDC oMKgwqDCoMKgIG5leHQ7Cj4+IC3CoMKgwqAgfSBlbHNpZiAoJHRwX25hbWUgZXEgJ2ludGVsX2dw dV9mcmVxX2NoYW5nZScpIHsKPj4gK8KgwqDCoCB9IGVsc2lmICgkdHBfbmFtZSBlcSAnaW50ZWxf ZW5naW5lX25vdGlmeTonKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCAkbm90aWZ5e2dsb2JhbF9rZXko JHJpbmcsICRzZXFubyl9ID0gJHRpbWU7Cj4+ICvCoMKgwqAgfSBlbHNpZiAoJHRwX25hbWUgZXEg J2k5MTU6aW50ZWxfZ3B1X2ZyZXFfY2hhbmdlOicpIHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHB1 c2ggQGZyZXFzLCBbJHByZXZfZnJlcV90cywgJHRpbWUsICRwcmV2X2ZyZXFdIGlmICRwcmV2X2Zy ZXE7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCAkcHJldl9mcmVxX3RzID0gJHRpbWU7Cj4+IMKgwqDC oMKgwqDCoMKgwqDCoCAkcHJldl9mcmVxID0gJHRweyduZXdfZnJlcSd9Owo+PiAtwqDCoMKgwqDC oMKgwqAgbmV4dDsKPj4gwqDCoMKgwqDCoCB9Cj4+IMKgIH0KPj4gQEAgLTU1Nyw3ICs1MzUsMTAg QEAgbXkgKCVzdWJtaXRfYXZnLCAlZXhlY3V0ZV9hdmcsICVjdHhzYXZlX2F2Zyk7Cj4+IMKgIG15 ICRsYXN0X3RzID0gMDsKPj4gwqAgbXkgJGZpcnN0X3RzOwo+PiAtZm9yZWFjaCBteSAka2V5IChz b3J0IHskZGJ7JGF9LT57J3N0YXJ0J30gPD0+ICRkYnskYn0tPnsnc3RhcnQnfX0gCj4+IGtleXMg JWRiKSB7Cj4+ICtteSBAc29ydGVkX2tleXMgPSBzb3J0IHskZGJ7JGF9LT57J3N0YXJ0J30gPD0+ ICRkYnskYn0tPnsnc3RhcnQnfX0gCj4+IGtleXMgJWRiOwo+PiArbXkgJHJlX3NvcnQgPSAwOwo+ PiArCj4+ICtmb3JlYWNoIG15ICRrZXkgKEBzb3J0ZWRfa2V5cykgewo+PiDCoMKgwqDCoMKgIG15 ICRyaW5nID0gJGRieyRrZXl9LT57J3JpbmcnfTsKPj4gwqDCoMKgwqDCoCBteSAkZW5kID0gJGRi eyRrZXl9LT57J2VuZCd9Owo+PiBAQCAtNTg1LDYgKzU2Niw3IEBAIGZvcmVhY2ggbXkgJGtleSAo c29ydCB7JGRieyRhfS0+eydzdGFydCd9IDw9PiAKPj4gJGRieyRifS0+eydzdGFydCd9fSBrZXlz ICVkYikgewo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgIyAyMHVzIHRvbGVyYW5jZQo+PiDCoMKgwqDC oMKgwqDCoMKgwqAgaWYgKGV4aXN0cyAkZGJ7JG5leHRfa2V5fSBhbmQgJGRieyRuZXh0X2tleX0t Pnsnc3RhcnQnfSA8IAo+PiAkc3RhcnQgKyAyMCkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAkcmVfc29ydCA9IDE7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICRkYnskbmV4dF9r ZXl9LT57J3N0YXJ0J30gPSAkc3RhcnQgKyAKPj4gJGRieyRrZXl9LT57J2R1cmF0aW9uJ307Cj4+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICRkYnskbmV4dF9rZXl9LT57J3N0YXJ0J30gPSAk ZGJ7JG5leHRfa2V5fS0+eydlbmQnfSBpZiAKPj4gJGRieyRuZXh0X2tleX0tPnsnc3RhcnQnfSA+ ICRkYnskbmV4dF9rZXl9LT57J2VuZCd9Owo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAk ZGJ7JG5leHRfa2V5fS0+eydkdXJhdGlvbid9ID0gCj4+ICRkYnskbmV4dF9rZXl9LT57J25vdGlm eSd9IC0gJGRieyRuZXh0X2tleX0tPnsnc3RhcnQnfTsKPj4gQEAgLTYwMSw2ICs1ODMsOCBAQCBm b3JlYWNoIG15ICRrZXkgKHNvcnQgeyRkYnskYX0tPnsnc3RhcnQnfSA8PT4gCj4+ICRkYnskYn0t Pnsnc3RhcnQnfX0ga2V5cyAlZGIpIHsKPj4gwqDCoMKgwqDCoCAkY3R4c2F2ZV9hdmd7JHJpbmd9 ICs9ICRkYnska2V5fS0+eydlbmQnfSAtICRkYnska2V5fS0+eydub3RpZnknfTsKPj4gwqAgfQo+ PiArQHNvcnRlZF9rZXlzID0gc29ydCB7JGRieyRhfS0+eydzdGFydCd9IDw9PiAkZGJ7JGJ9LT57 J3N0YXJ0J319IGtleXMgCj4+ICVkYiBpZiAkcmVfc29ydDsKPj4gKwo+PiDCoCBmb3JlYWNoIG15 ICRyaW5nIChrZXlzICViYXRjaF9hdmcpIHsKPj4gwqDCoMKgwqDCoCAkYmF0Y2hfYXZneyRyaW5n fSAvPSAkYmF0Y2hfY291bnR7JHJpbmd9Owo+PiDCoMKgwqDCoMKgICRiYXRjaF90b3RhbF9hdmd7 JHJpbmd9IC89ICRiYXRjaF9jb3VudHskcmluZ307Cj4+IEBAIC02MTYsNyArNjAwLDcgQEAgZm9y ZWFjaCBteSAkZ2lkIChzb3J0IGtleXMgJXJpbmdzKSB7Cj4+IMKgwqDCoMKgwqAgbXkgKEBzXywg QGVfKTsKPj4gwqDCoMKgwqDCoCAjIEV4dHJhY3QgYWxsIEdQVSBidXN5IGludGVydmFscyBhbmQg c29ydCB0aGVtLgo+PiAtwqDCoMKgIGZvcmVhY2ggbXkgJGtleSAoc29ydCB7JGRieyRhfS0+eydz dGFydCd9IDw9PiAkZGJ7JGJ9LT57J3N0YXJ0J319IAo+PiBrZXlzICVkYikgewo+PiArwqDCoMKg IGZvcmVhY2ggbXkgJGtleSAoQHNvcnRlZF9rZXlzKSB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBu ZXh0IHVubGVzcyAkZGJ7JGtleX0tPnsncmluZyd9ID09ICRyaW5nOwo+PiDCoMKgwqDCoMKgwqDC oMKgwqAgcHVzaCBAc18sICRkYnska2V5fS0+eydzdGFydCd9Owo+PiDCoMKgwqDCoMKgwqDCoMKg wqAgcHVzaCBAZV8sICRkYnska2V5fS0+eydlbmQnfTsKPj4gQEAgLTY2MCw3ICs2NDQsNyBAQCBt eSBAZ3B1X2ludGVydmFsczsKPj4gwqAgbXkgKEBzXywgQGVfKTsKPj4gwqAgIyBFeHRyYWN0IGFs bCBHUFUgYnVzeSBpbnRlcnZhbHMgYW5kIHNvcnQgdGhlbS4KPj4gLWZvcmVhY2ggbXkgJGtleSAo c29ydCB7JGRieyRhfS0+eydzdGFydCd9IDw9PiAkZGJ7JGJ9LT57J3N0YXJ0J319IAo+PiBrZXlz ICVkYikgewo+PiArZm9yZWFjaCBteSAka2V5IChAc29ydGVkX2tleXMpIHsKPj4gwqDCoMKgwqDC oCBwdXNoIEBzXywgJGRieyRrZXl9LT57J3N0YXJ0J307Cj4+IMKgwqDCoMKgwqAgcHVzaCBAZV8s ICRkYnska2V5fS0+eydlbmQnfTsKPj4gwqDCoMKgwqDCoCBkaWUgaWYgJGRieyRrZXl9LT57J3N0 YXJ0J30gPiAkZGJ7JGtleX0tPnsnZW5kJ307Cj4gCj4gX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KPiBJbnRlbC1nZnggbWFpbGluZyBsaXN0Cj4gSW50ZWwt Z2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2ludGVsLWdmeAo=