OgpldmFsICdleGVjIHBlcmwgLVMgJDAgJHsxKyIkQCJ9JwogICAgaWYgJHJ1bm5pbmdfdW5kZXJfc29tZV9zaGVsbDsKIyMKIyMgIENvbmZpZ3VyZSAtLSBPcGVuU1NMIHNvdXJjZSB0cmVlIGNvbmZpZ3VyYXRpb24gc2NyaXB0CiMjCgpyZXF1aXJlIDUuMDAwOwp1c2Ugc3RyaWN0OwoKIyBzZWUgSU5TVEFMTCBmb3IgaW5zdHJ1Y3Rpb25zLgoKbXkgJHVzYWdlPSJVc2FnZTogQ29uZmlndXJlIFtuby08Y2lwaGVyPiAuLi5dIFtlbmFibGUtPGNpcGhlcj4gLi4uXSBbZXhwZXJpbWVudGFsLTxjaXBoZXI+IC4uLl0gWy1EeHh4XSBbLWx4eHhdIFstTHh4eF0gWy1meHh4XSBbLUt4eHhdIFtuby1ody14eHh8bm8taHddIFtbbm8tXXRocmVhZHNdIFtbbm8tXXNoYXJlZF0gW1tuby1demxpYnx6bGliLWR5bmFtaWNdIFtuby1hc21dIFtuby1kc29dIFtuby1rcmI1XSBbc2N0cF0gWzM4Nl0gWy0tcHJlZml4PURJUl0gWy0tb3BlbnNzbGRpcj1PUEVOU1NMRElSXSBbLS13aXRoLXh4eFs9dnZ2XV0gWy0tdGVzdC1zYW5pdHldIG9zL2NvbXBpbGVyWzpmbGFnc11cbiI7CgojIE9wdGlvbnM6CiMKIyAtLW9wZW5zc2xkaXIgIGluc3RhbGwgT3BlblNTTCBpbiBPUEVOU1NMRElSIChEZWZhdWx0OiBESVIvc3NsIGlmIHRoZQojICAgICAgICAgICAgICAgLS1wcmVmaXggb3B0aW9uIGlzIGdpdmVuOyAvdXNyL2xvY2FsL3NzbCBvdGhlcndpc2UpCiMgLS1wcmVmaXggICAgICBwcmVmaXggZm9yIHRoZSBPcGVuU1NMIGluY2x1ZGUsIGxpYiBhbmQgYmluIGRpcmVjdG9yaWVzCiMgICAgICAgICAgICAgICAoRGVmYXVsdDogdGhlIE9QRU5TU0xESVIgZGlyZWN0b3J5KQojCiMgLS1pbnN0YWxsX3ByZWZpeCAgQWRkaXRpb25hbCBwcmVmaXggZm9yIHBhY2thZ2UgYnVpbGRlcnMgKGVtcHR5IGJ5CiMgICAgICAgICAgICAgICBkZWZhdWx0KS4gIFRoaXMgbmVlZG4ndCBiZSBzZXQgaW4gYWR2YW5jZSwgeW91IGNhbgojICAgICAgICAgICAgICAganVzdCBhcyB3ZWxsIHVzZSAibWFrZSBJTlNUQUxMX1BSRUZJWD0vd2hhdGV2ZXIgaW5zdGFsbCIuCiMKIyAtLXdpdGgta3JiNS1kaXIgIERlY2xhcmUgd2hlcmUgS2VyYmVyb3MgNSBsaXZlcy4gIFRoZSBsaWJyYXJpZXMgYXJlIGV4cGVjdGVkCiMJCXRvIGxpdmUgaW4gdGhlIHN1YmRpcmVjdG9yeSBsaWIvIGFuZCB0aGUgaGVhZGVyIGZpbGVzIGluCiMJCWluY2x1ZGUvLiAgQSB2YWx1ZSBpcyByZXF1aXJlZC4KIyAtLXdpdGgta3JiNS1saWIgIERlY2xhcmUgd2hlcmUgdGhlIEtlcmJlcm9zIDUgbGlicmFyaWVzIGxpdmUuICBBIHZhbHVlIGlzCiMJCXJlcXVpcmVkLgojCQkoRGVmYXVsdDogS1JCNV9ESVIvbGliKQojIC0td2l0aC1rcmI1LWluY2x1ZGUgIERlY2xhcmUgd2hlcmUgdGhlIEtlcmJlcm9zIDUgaGVhZGVyIGZpbGVzIGxpdmUuICBBCiMJCXZhbHVlIGlzIHJlcXVpcmVkLgojCQkoRGVmYXVsdDogS1JCNV9ESVIvaW5jbHVkZSkKIyAtLXdpdGgta3JiNS1mbGF2b3IgIERlY2xhcmUgd2hhdCBmbGF2b3Igb2YgS2VyYmVyb3MgNSBpcyB1c2VkLiAgQ3VycmVudGx5CiMJCXN1cHBvcnRlZCB2YWx1ZXMgYXJlICJNSVQiIGFuZCAiSGVpbWRhbCIuICBBIHZhbHVlIGlzIHJlcXVpcmVkLgojCiMgLS10ZXN0LXNhbml0eSBNYWtlIGEgbnVtYmVyIG9mIHNhbml0eSBjaGVja3Mgb24gdGhlIGRhdGEgaW4gdGhpcyBmaWxlLgojICAgICAgICAgICAgICAgVGhpcyBpcyBhIGRlYnVnZ2luZyB0b29sIGZvciBPcGVuU1NMIGRldmVsb3BlcnMuCiMKIyAtLWNyb3NzLWNvbXBpbGUtcHJlZml4IEFkZCBzcGVjaWZpZWQgcHJlZml4IHRvIGJpbnV0aWxzIGNvbXBvbmVudHMuCiMKIyBuby1ody14eHggICAgIGRvIG5vdCBjb21waWxlIHN1cHBvcnQgZm9yIHNwZWNpZmljIGNyeXB0byBoYXJkd2FyZS4KIyAgICAgICAgICAgICAgIEdlbmVyaWMgT3BlblNTTC1zdHlsZSBtZXRob2RzIHJlbGF0aW5nIHRvIHRoaXMgc3VwcG9ydAojICAgICAgICAgICAgICAgYXJlIGFsd2F5cyBjb21waWxlZCBidXQgcmV0dXJuIE5VTEwgaWYgdGhlIGhhcmR3YXJlCiMgICAgICAgICAgICAgICBzdXBwb3J0IGlzbid0IGNvbXBpbGVkLgojIG5vLWh3ICAgICAgICAgZG8gbm90IGNvbXBpbGUgc3VwcG9ydCBmb3IgYW55IGNyeXB0byBoYXJkd2FyZS4KIyBbbm8tXXRocmVhZHMgIFtkb24ndF0gdHJ5IHRvIGNyZWF0ZSBhIGxpYnJhcnkgdGhhdCBpcyBzdWl0YWJsZSBmb3IKIyAgICAgICAgICAgICAgIG11bHRpdGhyZWFkZWQgYXBwbGljYXRpb25zIChkZWZhdWx0IGlzICJ0aHJlYWRzIiBpZiB3ZQojICAgICAgICAgICAgICAga25vdyBob3cgdG8gZG8gaXQpCiMgW25vLV1zaGFyZWQJW2Rvbid0XSB0cnkgdG8gY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgd2hlbiBzdXBwb3J0ZWQuCiMgbm8tYXNtICAgICAgICBkbyBub3QgdXNlIGFzc2VtYmxlcgojIG5vLWRzbyAgICAgICAgZG8gbm90IGNvbXBpbGUgaW4gYW55IG5hdGl2ZSBzaGFyZWQtbGlicmFyeSBtZXRob2RzLiBUaGlzCiMgICAgICAgICAgICAgICB3aWxsIGVuc3VyZSB0aGF0IGFsbCBtZXRob2RzIGp1c3QgcmV0dXJuIE5VTEwuCiMgbm8ta3JiNSAgICAgICBkbyBub3QgY29tcGlsZSBpbiBhbnkgS1JCNSBsaWJyYXJ5IG9yIGNvZGUuCiMgW25vLV16bGliICAgICBbZG9uJ3RdIGNvbXBpbGUgc3VwcG9ydCBmb3IgemxpYiBjb21wcmVzc2lvbi4KIyB6bGliLWR5bmFtaWMJTGlrZSAiemxpYiIsIGJ1dCB0aGUgemxpYiBsaWJyYXJ5IGlzIGV4cGVjdGVkIHRvIGJlIGEgc2hhcmVkCiMJCWxpYnJhcnkgYW5kIHdpbGwgYmUgbG9hZGVkIGluIHJ1bi10aW1lIGJ5IHRoZSBPcGVuU1NMIGxpYnJhcnkuCiMgc2N0cCAgICAgICAgICBpbmNsdWRlIFNDVFAgc3VwcG9ydAojIDM4NiAgICAgICAgICAgZ2VuZXJhdGUgODAzODYgY29kZQojIG5vLXNzZTIJZGlzYWJsZXMgSUEtMzIgU1NFMiBjb2RlLCBhYm92ZSBvcHRpb24gaW1wbGllcyBuby1zc2UyCiMgbm8tPGNpcGhlcj4gICBidWlsZCB3aXRob3V0IHNwZWNpZmllZCBhbGdvcml0aG0gKHJzYSwgaWRlYSwgcmM1LCAuLi4pCiMgLTx4eHg+ICs8eHh4PiBjb21waWxlciBvcHRpb25zIGFyZSBwYXNzZWQgdGhyb3VnaCAKIwojIERFQlVHX1NBRkVTVEFDSyB1c2UgdHlwZS1zYWZlIHN0YWNrcyB0byBlbmZvcmNlIHR5cGUtc2FmZXR5IG9uIHN0YWNrIGl0ZW1zCiMJCXByb3ZpZGVkIHRvIHN0YWNrIGNhbGxzLiBHZW5lcmF0ZXMgdW5pcXVlIHN0YWNrIGZ1bmN0aW9ucyBmb3IKIwkJZWFjaCBwb3NzaWJsZSBzdGFjayB0eXBlLgojIERFU19QVFIJdXNlIHBvaW50ZXIgbG9va3VwIHZzIGFycmF5cyBpbiB0aGUgREVTIGluIGNyeXB0by9kZXMvZGVzX2xvY2wuaAojIERFU19SSVNDMQl1c2UgZGlmZmVyZW50IERFU19FTkNSWVBUIG1hY3JvIHRoYXQgaGVscHMgcmVkdWNlIHJlZ2lzdGVyCiMJCWRlcGVuZGFuY2llcyBidXQgbmVlZHMgdG8gbW9yZSByZWdpc3RlcnMsIGdvb2QgZm9yIFJJU0MgQ1BVJ3MKIyBERVNfUklTQzIJQSBkaWZmZXJlbnQgUklTQyB2YXJpYW50LgojIERFU19VTlJPTEwJdW5yb2xsIHRoZSBpbm5lciBERVMgbG9vcCwgc29tZXRpbWVzIGhlbHBzLCBzb210aW1lcyBoaW5kZXJzLgojIERFU19JTlQJdXNlICdpbnQnIGluc3RlYWQgb2YgJ2xvbmcnIGZvciBERVNfTE9ORyBpbiBjcnlwdG8vZGVzL2Rlcy5oCiMJCVRoaXMgaXMgdXNlZCBvbiB0aGUgREVDIEFscGhhIHdoZXJlIGxvbmcgaXMgOCBieXRlcwojCQlhbmQgaW50IGlzIDQKIyBCTl9MTE9ORwl1c2UgdGhlIHR5cGUgJ2xvbmcgbG9uZycgaW4gY3J5cHRvL2JuL2JuLmgKIyBNRDJfQ0hBUgl1c2UgJ2NoYXInIGluc3RlYWQgb2YgJ2ludCcgZm9yIE1EMl9JTlQgaW4gY3J5cHRvL21kMi9tZDIuaAojIE1EMl9MT05HCXVzZSAnbG9uZycgaW5zdGVhZCBvZiAnaW50JyBmb3IgTUQyX0lOVCBpbiBjcnlwdG8vbWQyL21kMi5oCiMgSURFQV9TSE9SVAl1c2UgJ3Nob3J0JyBpbnN0ZWFkIG9mICdpbnQnIGZvciBJREVBX0lOVCBpbiBjcnlwdG8vaWRlYS9pZGVhLmgKIyBJREVBX0xPTkcJdXNlICdsb25nJyBpbnN0ZWFkIG9mICdpbnQnIGZvciBJREVBX0lOVCBpbiBjcnlwdG8vaWRlYS9pZGVhLmgKIyBSQzJfU0hPUlQJdXNlICdzaG9ydCcgaW5zdGVhZCBvZiAnaW50JyBmb3IgUkMyX0lOVCBpbiBjcnlwdG8vcmMyL3JjMi5oCiMgUkMyX0xPTkcJdXNlICdsb25nJyBpbnN0ZWFkIG9mICdpbnQnIGZvciBSQzJfSU5UIGluIGNyeXB0by9yYzIvcmMyLmgKIyBSQzRfQ0hBUgl1c2UgJ2NoYXInIGluc3RlYWQgb2YgJ2ludCcgZm9yIFJDNF9JTlQgaW4gY3J5cHRvL3JjNC9yYzQuaAojIFJDNF9MT05HCXVzZSAnbG9uZycgaW5zdGVhZCBvZiAnaW50JyBmb3IgUkM0X0lOVCBpbiBjcnlwdG8vcmM0L3JjNC5oCiMgUkM0X0lOREVYCWRlZmluZSBSQzRfSU5ERVggaW4gY3J5cHRvL3JjNC9yYzRfbG9jbC5oLiAgVGhpcyB0dXJucyBvbgojCQlhcnJheSBsb29rdXBzIGluc3RlYWQgb2YgcG9pbnRlciB1c2UuCiMgUkM0X0NIVU5LCWVuYWJsZXMgY29kZSB0aGF0IGhhbmRsZXMgZGF0YSBhbGlnbmVkIGF0IGxvbmcgKG5hdHVyYWwgQ1BVCiMJCXdvcmQpIGJvdW5kYXJ5LgojIFJDNF9DSFVOS19MTAllbmFibGVzIGNvZGUgdGhhdCBoYW5kbGVzIGRhdGEgYWxpZ25lZCBhdCBsb25nIGxvbmcgYm91bmRhcnkKIwkJKGludGVuZGVkIGZvciA2NC1iaXQgQ1BVcyBydW5uaW5nIDMyLWJpdCBPUykuCiMgQkZfUFRSCXVzZSAncG9pbnRlciBhcml0aG1hdGljJyBmb3IgQmxvd2Zpc2ggKHVuc2FmZSBvbiBBbHBoYSkuCiMgQkZfUFRSMglpbnRlbCBzcGVjaWZpYyB2ZXJzaW9uIChnZW5lcmljIHZlcnNpb24gaXMgbW9yZSBlZmZpY2llbnQpLgojCiMgRm9sbG93aW5nIGFyZSBzZXQgYXV0b21hdGljYWxseSBieSB0aGlzIHNjcmlwdAojCiMgTUQ1X0FTTQl1c2Ugc29tZSBleHRyYSBtZDUgYXNzZW1iZXIsCiMgU0hBMV9BU00JdXNlIHNvbWUgZXh0cmEgc2hhMSBhc3NlbWJlciwgbXVzdCBkZWZpbmUgTF9FTkRJQU4gZm9yIHg4NgojIFJNRDE2MF9BU00JdXNlIHNvbWUgZXh0cmEgcmlwZW1kMTYwIGFzc2VtYmVyLAojIFNIQTI1Nl9BU00Jc2hhMjU2X2Jsb2NrIGlzIGltcGxlbWVudGVkIGluIGFzc2VtYmxlcgojIFNIQTUxMl9BU00Jc2hhNTEyX2Jsb2NrIGlzIGltcGxlbWVudGVkIGluIGFzc2VtYmxlcgojIEFFU19BU00JQVNFX1tlbnxkZV1jcnlwdCBpcyBpbXBsZW1lbnRlZCBpbiBhc3NlbWJsZXIKCiMgTWluaW11bSB3YXJuaW5nIG9wdGlvbnMuLi4gYW55IGNvbnRyaWJ1dGlvbnMgdG8gT3BlblNTTCBzaG91bGQgYXQgbGVhc3QgZ2V0CiMgcGFzdCB0aGVzZS4gCgpteSAkZ2NjX2RldnRlYW1fd2FybiA9ICItV2FsbCAtcGVkYW50aWMgLURQRURBTlRJQyAtV25vLWxvbmctbG9uZyAtV3NpZ24tY29tcGFyZSAtV21pc3NpbmctcHJvdG90eXBlcyAtV3NoYWRvdyAtV2Zvcm1hdCAtV2Vycm9yIC1EQ1JZUFRPX01ERUJVR19BTEwgLURDUllQVE9fTURFQlVHX0FCT1JUIC1EUkVGX0NIRUNLIC1ET1BFTlNTTF9OT19ERVBSRUNBVEVEIjsKCiMgV2FybiB0aGF0ICJtYWtlIGRlcGVuZCIgc2hvdWxkIGJlIHJ1bj8KbXkgJHdhcm5fbWFrZV9kZXBlbmQgPSAwOwoKbXkgJGNsYW5nX2RldnRlYW1fd2FybiA9ICItV25vLXVudXNlZC1wYXJhbWV0ZXIgLVduby1taXNzaW5nLWZpZWxkLWluaXRpYWxpemVycyAtV25vLWxhbmd1YWdlLWV4dGVuc2lvbi10b2tlbiAtV25vLWV4dGVuZGVkLW9mZnNldG9mIC1RdW51c2VkLWFyZ3VtZW50cyI7CgpteSAkc3RyaWN0X3dhcm5pbmdzID0gMDsKCm15ICR4ODZfZ2NjX2Rlcz0iREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCI7CgojIE1EMl9DSEFSIHNsYWdzIHBlbnRpdW0gcHJvcwpteSAkeDg2X2djY19vcHRzPSJSQzRfSU5ERVggTUQyX0lOVCI7CgojIE1PRElGWSBUSEVTRSBQQVJBTUVURVJTIElGIFlPVSBBUkUgR09JTkcgVE8gVVNFIFRIRSAndXRpbC9zcGVlZC5zaCBTQ1JJUFQKIyBEb24ndCB3b3JyeSBhYm91dCB0aGVzZSBub3JtYWxseQoKbXkgJHRjYz0iY2MiOwpteSAkdGZsYWdzPSItZmFzdCAtWGEiOwpteSAkdGJuX211bD0iIjsKbXkgJHRsaWI9Ii1sbnNsIC1sc29ja2V0IjsKIyRiaXRzMT0iU0lYVEVFTl9CSVQgIjsKIyRiaXRzMj0iVEhJUlRZX1RXT19CSVQgIjsKbXkgJGJpdHMxPSJUSElSVFlfVFdPX0JJVCAiOwpteSAkYml0czI9IlNJWFRZX0ZPVVJfQklUICI7CgpteSAkeDg2X2FzbT0ieDg2Y3B1aWQubzpibi01ODYubyBjby01ODYubyB4ODYtbW9udC5vIHg4Ni1nZjJtLm86ZGVzLTU4Ni5vIGNyeXB0NTg2Lm86YWVzLTU4Ni5vIHZwYWVzLXg4Ni5vIGFlc25pLXg4Ni5vOmJmLTU4Ni5vOm1kNS01ODYubzpzaGExLTU4Ni5vIHNoYTI1Ni01ODYubyBzaGE1MTItNTg2Lm86Y2FzdC01ODYubzpyYzQtNTg2Lm86cm1kLTU4Ni5vOnJjNS01ODYubzp3cF9ibG9jay5vIHdwLW1teC5vOmNtbGwteDg2Lm86Z2hhc2gteDg2Lm86IjsKCm15ICR4ODZfZWxmX2FzbT0iJHg4Nl9hc206ZWxmIjsKCm15ICR4ODZfNjRfYXNtPSJ4ODZfNjRjcHVpZC5vOng4Nl82NC1nY2MubyB4ODZfNjQtbW9udC5vIHg4Nl82NC1tb250NS5vIHg4Nl82NC1nZjJtLm8gbW9kZXhwNTEyLXg4Nl82NC5vOjphZXMteDg2XzY0Lm8gdnBhZXMteDg2XzY0Lm8gYnNhZXMteDg2XzY0Lm8gYWVzbmkteDg2XzY0Lm8gYWVzbmktc2hhMS14ODZfNjQubzo6bWQ1LXg4Nl82NC5vOnNoYTEteDg2XzY0Lm8gc2hhMjU2LXg4Nl82NC5vIHNoYTUxMi14ODZfNjQubzo6cmM0LXg4Nl82NC5vIHJjNC1tZDUteDg2XzY0Lm86Ojp3cC14ODZfNjQubzpjbWxsLXg4Nl82NC5vIGNtbGxfbWlzYy5vOmdoYXNoLXg4Nl82NC5vOiI7Cm15ICRpYTY0X2FzbT0iaWE2NGNwdWlkLm86Ym4taWE2NC5vIGlhNjQtbW9udC5vOjphZXNfY29yZS5vIGFlc19jYmMubyBhZXMtaWE2NC5vOjptZDUtaWE2NC5vOnNoYTEtaWE2NC5vIHNoYTI1Ni1pYTY0Lm8gc2hhNTEyLWlhNjQubzo6cmM0LWlhNjQubyByYzRfc2tleS5vOjo6OjpnaGFzaC1pYTY0Lm86OnZvaWQiOwpteSAkc3BhcmN2OV9hc209InNwYXJjdjljYXAubyBzcGFyY2NwdWlkLm86Ym4tc3BhcmN2OS5vIHNwYXJjdjktbW9udC5vIHNwYXJjdjlhLW1vbnQubzpkZXNfZW5jLXNwYXJjLm8gZmNyeXB0X2IubzphZXNfY29yZS5vIGFlc19jYmMubyBhZXMtc3BhcmN2OS5vOjo6c2hhMS1zcGFyY3Y5Lm8gc2hhMjU2LXNwYXJjdjkubyBzaGE1MTItc3BhcmN2OS5vOjo6Ojo6OmdoYXNoLXNwYXJjdjkubzo6dm9pZCI7Cm15ICRzcGFyY3Y4X2FzbT0iOnNwYXJjdjgubzpkZXNfZW5jLXNwYXJjLm8gZmNyeXB0X2Iubzo6Ojo6Ojo6Ojo6Ojp2b2lkIjsKbXkgJGFscGhhX2FzbT0iYWxwaGFjcHVpZC5vOmJuX2FzbS5vIGFscGhhLW1vbnQubzo6Ojo6c2hhMS1hbHBoYS5vOjo6Ojo6OmdoYXNoLWFscGhhLm86OnZvaWQiOwpteSAkbWlwczMyX2FzbT0iOmJuLW1pcHMubzo6YWVzX2NiYy5vIGFlcy1taXBzLm86OjpzaGExLW1pcHMubyBzaGEyNTYtbWlwcy5vOjo6Ojo6OjoiOwpteSAkbWlwczY0X2FzbT0iOmJuLW1pcHMubyBtaXBzLW1vbnQubzo6YWVzX2NiYy5vIGFlcy1taXBzLm86OjpzaGExLW1pcHMubyBzaGEyNTYtbWlwcy5vIHNoYTUxMi1taXBzLm86Ojo6Ojo6OiI7Cm15ICRzMzkweF9hc209InMzOTB4Y2FwLm8gczM5MHhjcHVpZC5vOmJuLXMzOTB4Lm8gczM5MHgtbW9udC5vIHMzOTB4LWdmMm0ubzo6YWVzLXMzOTB4Lm8gYWVzLWN0ci5vIGFlcy14dHMubzo6OnNoYTEtczM5MHgubyBzaGEyNTYtczM5MHgubyBzaGE1MTItczM5MHgubzo6cmM0LXMzOTB4Lm86Ojo6OmdoYXNoLXMzOTB4Lm86IjsKbXkgJGFybXY0X2FzbT0iYXJtY2FwLm8gYXJtdjRjcHVpZC5vOmJuX2FzbS5vIGFybXY0LW1vbnQubyBhcm12NC1nZjJtLm86OmFlc19jYmMubyBhZXMtYXJtdjQubzo6OnNoYTEtYXJtdjQtbGFyZ2UubyBzaGEyNTYtYXJtdjQubyBzaGE1MTItYXJtdjQubzo6Ojo6OjpnaGFzaC1hcm12NC5vOjp2b2lkIjsKbXkgJHBhcmlzYzExX2FzbT0icGFyaXNjaWQubzpibl9hc20ubyBwYXJpc2MtbW9udC5vOjphZXNfY29yZS5vIGFlc19jYmMubyBhZXMtcGFyaXNjLm86OjpzaGExLXBhcmlzYy5vIHNoYTI1Ni1wYXJpc2MubyBzaGE1MTItcGFyaXNjLm86OnJjNC1wYXJpc2Mubzo6Ojo6Z2hhc2gtcGFyaXNjLm86OjMyIjsKbXkgJHBhcmlzYzIwX2FzbT0icGFyaXNjaWQubzpwYS1yaXNjMlcubyBwYXJpc2MtbW9udC5vOjphZXNfY29yZS5vIGFlc19jYmMubyBhZXMtcGFyaXNjLm86OjpzaGExLXBhcmlzYy5vIHNoYTI1Ni1wYXJpc2MubyBzaGE1MTItcGFyaXNjLm86OnJjNC1wYXJpc2Mubzo6Ojo6Z2hhc2gtcGFyaXNjLm86OjY0IjsKbXkgJHBwYzMyX2FzbT0icHBjY3B1aWQubyBwcGNjYXAubzpibi1wcGMubyBwcGMtbW9udC5vIHBwYzY0LW1vbnQubzo6YWVzX2NvcmUubyBhZXNfY2JjLm8gYWVzLXBwYy5vOjo6c2hhMS1wcGMubyBzaGEyNTYtcHBjLm86Ojo6Ojo6OiI7Cm15ICRwcGM2NF9hc209InBwY2NwdWlkLm8gcHBjY2FwLm86Ym4tcHBjLm8gcHBjLW1vbnQubyBwcGM2NC1tb250Lm86OmFlc19jb3JlLm8gYWVzX2NiYy5vIGFlcy1wcGMubzo6OnNoYTEtcHBjLm8gc2hhMjU2LXBwYy5vIHNoYTUxMi1wcGMubzo6Ojo6Ojo6IjsKbXkgJG5vX2FzbT0iOjo6Ojo6Ojo6Ojo6Ojo6dm9pZCI7CgojIEFzIGZvciAkQlNEdGhyZWFkcy4gSWRlYSBpcyB0byBtYWludGFpbiAiY29sbGVjdGl2ZSIgc2V0IG9mIGZsYWdzLAojIHdoaWNoIHdvdWxkIGNvdmVyIGFsbCBCU0QgZmxhdm9ycy4gLXB0aHJlYWQgYXBwbGllcyB0byB0aGVtIGFsbCwgCiMgYnV0IGlzIHRyZWF0ZWQgZGlmZmVyZW50bHkuIE9wZW5CU0QgZXhwYW5kcyBpcyBhcyAtRF9QT1NJWF9USFJFQUQKIyAtbGNfciwgd2hpY2ggaXMgc3VmZmljaWVudC4gRnJlZUJTRCA0LnggZXhwYW5kcyBpdCBhcyAtbGNfciwKIyB3aGljaCBoYXMgdG8gYmUgYWNjb21wYW5pZWQgYnkgZXhwbGljaXQgLURfVEhSRUFEX1NBRkUgYW5kCiMgc29tZXRpbWVzIC1EX1JFRU5UUkFOVC4gRnJlZUJTRCA1LnggZXhwYW5kcyBpdCBhcyAtbGNfciwgd2hpY2gKIyBzZWVtcyB0byBiZSBzdWZmaWNpZW50PwpteSAkQlNEdGhyZWFkcz0iLXB0aHJlYWQgLURfVEhSRUFEX1NBRkUgLURfUkVFTlRSQU5UIjsKCiNjb25maWctc3RyaW5nCSRjYyA6ICRjZmxhZ3MgOiAkdW5pc3RkIDogJHRocmVhZF9jZmxhZyA6ICRzeXNfaWQgOiAkbGZsYWdzIDogJGJuX29wcyA6ICRjcHVpZF9vYmogOiAkYm5fb2JqIDogJGRlc19vYmogOiAkYWVzX29iaiA6ICRiZl9vYmogOiAkbWQ1X29iaiA6ICRzaGExX29iaiA6ICRjYXN0X29iaiA6ICRyYzRfb2JqIDogJHJtZDE2MF9vYmogOiAkcmM1X29iaiA6ICR3cF9vYmogOiAkY21sbF9vYmogOiAkbW9kZXNfb2JqIDogJGVuZ2luZXNfb2JqIDogJGRzb19zY2hlbWUgOiAkc2hhcmVkX3RhcmdldCA6ICRzaGFyZWRfY2ZsYWcgOiAkc2hhcmVkX2xkZmxhZyA6ICRzaGFyZWRfZXh0ZW5zaW9uIDogJHJhbmxpYiA6ICRhcmZsYWdzIDogJG11bHRpbGliCgpteSAldGFibGU9KAojIEZpbGUgJ1RBQkxFJyAoY3JlYXRlZCBieSAnbWFrZSBUQUJMRScpIGNvbnRhaW5zIHRoZSBkYXRhIGZyb20gdGhpcyBsaXN0LAojIGZvcm1hdHRlZCBmb3IgYmV0dGVyIHJlYWRhYmlsaXR5LgoKCiMiYiIsCQkiJHt0Y2N9OiR7dGZsYWdzfTo6JHt0bGlifToke2JpdHMxfToke3Ribl9tdWx9OjoiLAojImJsLTRjLTJjIiwJIiR7dGNjfToke3RmbGFnc306OiR7dGxpYn06JHtiaXRzMX1CTl9MTE9ORyBSQzRfQ0hBUiBNRDJfQ0hBUjoke3Ribl9tdWx9OjoiLAojImJsLTRjLXJpIiwJIiR7dGNjfToke3RmbGFnc306OiR7dGxpYn06JHtiaXRzMX1CTl9MTE9ORyBSQzRfQ0hBUiBSQzRfSU5ERVg6JHt0Ym5fbXVsfTo6IiwKIyJiMi1pcy1yaS1kcCIsCSIke3RjY306JHt0ZmxhZ3N9Ojoke3RsaWJ9OiR7Yml0czJ9SURFQV9TSE9SVCBSQzRfSU5ERVggREVTX1BUUjoke3Ribl9tdWx9OjoiLAoKIyBPdXIgZGV2ZWxvcG1lbnQgY29uZmlncwoicHVyaWZ5IiwJInB1cmlmeSBnY2M6LWcgLURQVVJJRlkgLVdhbGw6Oih1bmtub3duKTo6LWxzb2NrZXQgLWxuc2w6Ojo6IiwKImRlYnVnIiwJImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUcgLURPUEVOU1NMX05PX0FTTSAtZ2dkYiAtZzIgLVdmb3JtYXQgLVdzaGFkb3cgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyAtV2Vycm9yOjoodW5rbm93bik6Oi1sZWZlbmNlOjo6OiIsCiJkZWJ1Zy1iZW4iLAkiZ2NjOiRnY2NfZGV2dGVhbV93YXJuIC1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRERFQlVHX1NBRkVTVEFDSyAtTzIgLXBpcGU6Oih1bmtub3duKTo6Ojo6IiwKImRlYnVnLWJlbi1vcGVuYnNkIiwiZ2NjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRFBFREFOVElDIC1EREVCVUdfU0FGRVNUQUNLIC1ET1BFTlNTTF9PUEVOQlNEX0RFVl9DUllQVE8gLURPUEVOU1NMX05PX0FTTSAtTzIgLXBlZGFudGljIC1XYWxsIC1Xc2hhZG93IC1XZXJyb3IgLXBpcGU6Oih1bmtub3duKTo6OjoiLAoiZGVidWctYmVuLW9wZW5ic2QtZGVidWciLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1EUEVEQU5USUMgLURERUJVR19TQUZFU1RBQ0sgLURPUEVOU1NMX09QRU5CU0RfREVWX0NSWVBUTyAtRE9QRU5TU0xfTk9fQVNNIC1nMyAtTzIgLXBlZGFudGljIC1XYWxsIC1Xc2hhZG93IC1XZXJyb3IgLXBpcGU6Oih1bmtub3duKTo6OjoiLAoiZGVidWctYmVuLWRlYnVnIiwJImdjYzQ0OiRnY2NfZGV2dGVhbV93YXJuIC1EQk5fREVCVUcgLURDT05GX0RFQlVHIC1EREVCVUdfU0FGRVNUQUNLIC1EREVCVUdfVU5VU0VEIC1nMyAtTzIgLXBpcGU6Oih1bmtub3duKTo6Ojo6OiIsCiJkZWJ1Zy1iZW4tZGVidWctNjQiLAkiZ2NjOiRnY2NfZGV2dGVhbV93YXJuIC1Xbm8tZXJyb3I9b3Zlcmxlbmd0aC1zdHJpbmdzIC1EQk5fREVCVUcgLURDT05GX0RFQlVHIC1EREVCVUdfU0FGRVNUQUNLIC1EREVCVUdfVU5VU0VEIC1nMyAtTzMgLXBpcGU6OiR7QlNEdGhyZWFkc306OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHt4ODZfNjRfYXNtfTplbGY6ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImRlYnVnLWJlbi1tYWNvcyIsCSJjYzokZ2NjX2RldnRlYW1fd2FybiAtYXJjaCBpMzg2IC1EQk5fREVCVUcgLURDT05GX0RFQlVHIC1EREVCVUdfU0FGRVNUQUNLIC1EREVCVUdfVU5VU0VEIC1ET1BFTlNTTF9USFJFQURTIC1EX1JFRU5UUkFOVCAtRERTT19ETEZDTiAtREhBVkVfRExGQ05fSCAtTzMgLURMX0VORElBTiAtZzMgLXBpcGU6Oih1bmtub3duKTo6LVdsLC1zZWFyY2hfcGF0aHNfZmlyc3Q6Ojo6IiwKImRlYnVnLWJlbi1tYWNvcy1nY2M0NiIsCSJnY2MtbXAtNC42OiRnY2NfZGV2dGVhbV93YXJuIC1XY29udmVyc2lvbiAtREJOX0RFQlVHIC1EQ09ORl9ERUJVRyAtRERFQlVHX1NBRkVTVEFDSyAtRERFQlVHX1VOVVNFRCAtRE9QRU5TU0xfVEhSRUFEUyAtRF9SRUVOVFJBTlQgLUREU09fRExGQ04gLURIQVZFX0RMRkNOX0ggLU8zIC1ETF9FTkRJQU4gLWczIC1waXBlOjoodW5rbm93bik6Ojo6OjoiLAoiZGVidWctYmVuLWRhcndpbjY0IiwiY2M6JGdjY19kZXZ0ZWFtX3dhcm4gLVduby1sYW5ndWFnZS1leHRlbnNpb24tdG9rZW4gLVduby1leHRlbmRlZC1vZmZzZXRvZiAtYXJjaCB4ODZfNjQgLU8zIC1ETF9FTkRJQU4gLVdhbGw6Oi1EX1JFRU5UUkFOVDpNQUNPU1g6LVdsLC1zZWFyY2hfcGF0aHNfZmlyc3QlOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDoiLmV2YWx7bXkgJGFzbT0keDg2XzY0X2FzbTskYXNtPX5zL3JjNFwtW146XSsvLzskYXNtfS4iOm1hY29zeDpkbGZjbjpkYXJ3aW4tc2hhcmVkOi1mUElDIC1mbm8tY29tbW9uOi1hcmNoIHg4Nl82NCAtZHluYW1pY2xpYjouXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKS5keWxpYiIsCiJkZWJ1Zy1iZW4tbm8tb3B0IiwJImdjYzogLVdhbGwgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVdzdHJpY3QtcHJvdG90eXBlcyAtV21pc3NpbmctZGVjbGFyYXRpb25zIC1EREVCVUdfU0FGRVNUQUNLIC1EQ1JZUFRPX01ERUJVRyAtV2Vycm9yIC1ETF9FTkRJQU4gLURURVJNSU9TIC1XYWxsIC1nMzo6KHVua25vd24pOjo6Ojo6IiwKImRlYnVnLWJlbi1zdHJpY3QiLAkiZ2NjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRENPTlNUX1NUUklDVCAtTzIgLVdhbGwgLVdzaGFkb3cgLVdlcnJvciAtV3BvaW50ZXItYXJpdGggLVdjYXN0LXF1YWwgLVd3cml0ZS1zdHJpbmdzIC1waXBlOjoodW5rbm93bik6Ojo6OjoiLAoiZGVidWctcnNlIiwiY2M6LURURVJNSU9TIC1ETF9FTkRJQU4gLXBpcGUgLU8gLWcgLWdnZGIzIC1XYWxsOjoodW5rbm93bik6OjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX0iLAoiZGVidWctYm9kbyIsCSJnY2M6JGdjY19kZXZ0ZWFtX3dhcm4gLVduby1lcnJvcj1vdmVybGVuZ3RoLXN0cmluZ3MgLURCTl9ERUJVRyAtREJOX0RFQlVHX1JBTkQgLURDT05GX0RFQlVHIC1EQklPX1BBSVJfREVCVUcgLW02NCAtRExfRU5ESUFOIC1EVEVSTUlPIC1nIC1ETUQzMl9SRUdfVD1pbnQ6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHt4ODZfNjRfYXNtfTplbGY6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6Ojo2NCIsCiJkZWJ1Zy11bGYiLCAiZ2NjOi1EVEVSTUlPUyAtRExfRU5ESUFOIC1tYXJjaD1pNDg2IC1XYWxsIC1EQk5fREVCVUcgLURCTl9ERUJVR19SQU5EIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUcgLURPUEVOU1NMX05PX0FTTSAtZyAtV2Zvcm1hdCAtV3NoYWRvdyAtV21pc3NpbmctcHJvdG90eXBlcyAtV21pc3NpbmctZGVjbGFyYXRpb25zOjo6Q1lHV0lOMzI6Ojoke25vX2FzbX06d2luMzI6Y3lnd2luLXNoYXJlZDo6Oi5kbGwiLAoiZGVidWctc3RldmU2NCIsICJnY2M6JGdjY19kZXZ0ZWFtX3dhcm4gLW02NCAtRExfRU5ESUFOIC1EVEVSTUlPIC1EQ09ORl9ERUJVRyAtRERFQlVHX1NBRkVTVEFDSyAtV25vLW92ZXJsZW5ndGgtc3RyaW5ncyAtZzo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDoke3g4Nl82NF9hc219OmVsZjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1zdGV2ZTMyIiwgImdjYzokZ2NjX2RldnRlYW1fd2FybiAtbTMyIC1ETF9FTkRJQU4gLURDT05GX0RFQlVHIC1EREVCVUdfU0FGRVNUQUNLIC1nIC1waXBlOjotRF9SRUVOVFJBTlQ6Oi1yZHluYW1pYyAtbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW0zMjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1zdGV2ZS1vcHQiLCAiZ2NjOiRnY2NfZGV2dGVhbV93YXJuIC1tNjQgLU8zIC1ETF9FTkRJQU4gLURURVJNSU8gLURDT05GX0RFQlVHIC1EREVCVUdfU0FGRVNUQUNLIC1nOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7eDg2XzY0X2FzbX06ZWxmOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTY0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImRlYnVnLWxldml0dGUtbGludXgtZWxmIiwiZ2NjOi1ETEVWSVRURV9ERUJVRyAtREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtRENSWVBUT19NREVCVUcgLURMX0VORElBTiAtZ2dkYiAtZzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1sZXZpdHRlLWxpbnV4LW5vYXNtIiwiZ2NjOi1ETEVWSVRURV9ERUJVRyAtREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtRENSWVBUT19NREVCVUcgLURPUEVOU1NMX05PX0FTTSAtRExfRU5ESUFOIC1nZ2RiIC1nMyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1sZXZpdHRlLWxpbnV4LWVsZi1leHRyZW1lIiwiZ2NjOi1ETEVWSVRURV9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9ERUJVRyAtREJOX0RFQlVHX1JBTkQgLURDUllQVE9fTURFQlVHIC1ERU5HSU5FX0NPTkZfREVCVUcgLURMX0VORElBTiAtRFBFREFOVElDIC1nZ2RiIC1nMyAtcGVkYW50aWMgLWFuc2kgLVdhbGwgLVcgLVd1bmRlZiAtV3NoYWRvdyAtV2Nhc3QtYWxpZ24gLVdzdHJpY3QtcHJvdG90eXBlcyAtV21pc3NpbmctcHJvdG90eXBlcyAtV25vLWxvbmctbG9uZyAtV3VuZGVmIC1XY29udmVyc2lvbiAtcGlwZTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImRlYnVnLWxldml0dGUtbGludXgtbm9hc20tZXh0cmVtZSIsImdjYzotRExFVklUVEVfREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fREVCVUcgLURCTl9ERUJVR19SQU5EIC1EQ1JZUFRPX01ERUJVRyAtREVOR0lORV9DT05GX0RFQlVHIC1ET1BFTlNTTF9OT19BU00gLURMX0VORElBTiAtRFBFREFOVElDIC1nZ2RiIC1nMyAtcGVkYW50aWMgLWFuc2kgLVdhbGwgLVcgLVd1bmRlZiAtV3NoYWRvdyAtV2Nhc3QtYWxpZ24gLVdzdHJpY3QtcHJvdG90eXBlcyAtV21pc3NpbmctcHJvdG90eXBlcyAtV25vLWxvbmctbG9uZyAtV3VuZGVmIC1XY29udmVyc2lvbiAtcGlwZTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1nZW9mZjMyIiwiZ2NjOi1EQk5fREVCVUcgLURCTl9ERUJVR19SQU5EIC1EQk5fU1RSSUNUIC1EUFVSSUZZIC1ET1BFTlNTTF9OT19ERVBSRUNBVEVEIC1ET1BFTlNTTF9OT19BU00gLURPUEVOU1NMX05PX0lOTElORV9BU00gLURMX0VORElBTiAtRFRFUk1JTyAtRFBFREFOVElDIC1PMSAtZ2dkYjIgLVdhbGwgLVdlcnJvciAtV3VuZGVmIC1wZWRhbnRpYyAtV3NoYWRvdyAtV3BvaW50ZXItYXJpdGggLVdiYWQtZnVuY3Rpb24tY2FzdCAtV2Nhc3QtYWxpZ24gLVdzaWduLWNvbXBhcmUgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyAtV25vLWxvbmctbG9uZzo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImRlYnVnLWdlb2ZmNjQiLCJnY2M6LURCTl9ERUJVRyAtREJOX0RFQlVHX1JBTkQgLURCTl9TVFJJQ1QgLURQVVJJRlkgLURPUEVOU1NMX05PX0RFUFJFQ0FURUQgLURPUEVOU1NMX05PX0FTTSAtRE9QRU5TU0xfTk9fSU5MSU5FX0FTTSAtRExfRU5ESUFOIC1EVEVSTUlPIC1EUEVEQU5USUMgLU8xIC1nZ2RiMiAtV2FsbCAtV2Vycm9yIC1XdW5kZWYgLXBlZGFudGljIC1Xc2hhZG93IC1XcG9pbnRlci1hcml0aCAtV2JhZC1mdW5jdGlvbi1jYXN0IC1XY2FzdC1hbGlnbiAtV3NpZ24tY29tcGFyZSAtV21pc3NpbmctcHJvdG90eXBlcyAtV21pc3NpbmctZGVjbGFyYXRpb25zIC1Xbm8tbG9uZy1sb25nOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1saW51eC1wZW50aXVtIiwiZ2NjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRExfRU5ESUFOIC1nIC1tY3B1PXBlbnRpdW0gLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY24iLAoiZGVidWctbGludXgtcHBybyIsImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUcgLURMX0VORElBTiAtZyAtbWNwdT1wZW50aXVtcHJvIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuIiwKImRlYnVnLWxpbnV4LWVsZiIsImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUcgLURMX0VORElBTiAtZyAtbWFyY2g9aTQ4NiAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGVmZW5jZSAtbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImRlYnVnLWxpbnV4LWVsZi1ub2VmZW5jZSIsImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUcgLURMX0VORElBTiAtZyAtbWFyY2g9aTQ4NiAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImRlYnVnLWxpbnV4LWlhMzItYWVzIiwgImdjYzotREFFU19FWFBFUklNRU5UQUwgLURMX0VORElBTiAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306eDg2Y3B1aWQubzpibi01ODYubyBjby01ODYubyB4ODYtbW9udC5vOmRlcy01ODYubyBjcnlwdDU4Ni5vOmFlc194ODZjb3JlLm8gYWVzX2NiYy5vIGFlc25pLXg4Ni5vOmJmLTU4Ni5vOm1kNS01ODYubzpzaGExLTU4Ni5vIHNoYTI1Ni01ODYubyBzaGE1MTItNTg2Lm86Y2FzdC01ODYubzpyYzQtNTg2Lm86cm1kLTU4Ni5vOnJjNS01ODYubzp3cF9ibG9jay5vIHdwLW1teC5vOjpnaGFzaC14ODYubzo6ZWxmOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctbGludXgtZ2VuZXJpYzMyIiwiZ2NjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtZyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImRlYnVnLWxpbnV4LWdlbmVyaWM2NCIsImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtRENSWVBUT19NREVCVUcgLWcgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImRlYnVnLWxpbnV4LXg4Nl82NCIsImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtRENSWVBUT19NREVCVUcgLW02NCAtRExfRU5ESUFOIC1nIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7eDg2XzY0X2FzbX06ZWxmOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTY0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6NjQiLAoiZGVidWctbGludXgteDg2XzY0LWNsYW5nIiwiY2xhbmc6IC1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtbTY0IC1ETF9FTkRJQU4gLWcgLVdhbGwgLVF1bnVzZWQtYXJndW1lbnRzOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7eDg2XzY0X2FzbX06ZWxmOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTY0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6NjQiLAoiZGlzdCIsCQkiY2M6LU86Oih1bmtub3duKTo6Ojo6OiIsCgojIEJhc2ljIGNvbmZpZ3MgdGhhdCBzaG91bGQgd29yayBvbiBhbnkgKDMyIGFuZCBsZXNzIGJpdCkgYm94CiJnY2MiLAkJImdjYzotTzM6Oih1bmtub3duKTo6OkJOX0xMT05HOjo6IiwKImNjIiwJCSJjYzotTzo6KHVua25vd24pOjo6Ojo6IiwKCiMjIyNWT1MgQ29uZmlndXJhdGlvbnMKInZvcy1nY2MiLCJnY2M6LU8zIC1XYWxsIC1ET1BFTlNTTF9TWVNOQU1FX1ZPUyAtRF9QT1NJWF9DX1NPVVJDRT0yMDAxMTJMIC1EX0JTRCAtRF9WT1NfRVhURU5ERURfTkFNRVMgLURCX0VORElBTjo6KHVua25vd24pOlZPUzotV2wsLW1hcDpCTl9MTE9ORzoke25vX2FzbX06Ojo6Oi5zbzoiLAoiZGVidWctdm9zLWdjYyIsImdjYzotTzAgLWcgLVdhbGwgLURPUEVOU1NMX1NZU05BTUVfVk9TIC1EX1BPU0lYX0NfU09VUkNFPTIwMDExMkwgLURfQlNEIC1EX1ZPU19FWFRFTkRFRF9OQU1FUyAtREJfRU5ESUFOIC1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQ1JZUFRPX01ERUJVRzo6KHVua25vd24pOlZPUzotV2wsLW1hcDpCTl9MTE9ORzoke25vX2FzbX06Ojo6Oi5zbzoiLAoKIyMjIyBTb2xhcmlzIHg4NiB3aXRoIEdOVSBDIHNldHVwcwojIC1ET1BFTlNTTF9OT19JTkxJTkVfQVNNIHN3aXRjaGVzIG9mZiBpbmxpbmUgYXNzZW1ibGVyLiBXZSBoYXZlIHRvIGRvIGl0CiMgaGVyZSBiZWNhdXNlIHdoZW5ldmVyIEdOVSBDIGluc3RhbnRpYXRlcyBhbiBhc3NlbWJsZXIgdGVtcGxhdGUgaXQKIyBzdXJyb3VuZHMgaXQgd2l0aCAjQVBQICNOT19BUFAgY29tbWVudCBwYWlyIHdoaWNoIChhdCBsZWFzdCBTb2xhcmlzCiMgN194ODYpIC91c3IvY2NzL2Jpbi9hcyBmYWlscyB0byBhc3NlbWJsZSB3aXRoICJJbGxlZ2FsIG1uZW1vbmljIgojIGVycm9yIG1lc3NhZ2UuCiJzb2xhcmlzLXg4Ni1nY2MiLCJnY2M6LU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1tYXJjaD1wZW50aXVtIC1XYWxsIC1ETF9FTkRJQU4gLURPUEVOU1NMX05PX0lOTElORV9BU006Oi1EX1JFRU5UUkFOVDo6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246c29sYXJpcy1zaGFyZWQ6LWZQSUM6LXNoYXJlZDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiMgLXNoYXJlZCAtc3RhdGljLWxpYmdjYyBtaWdodCBhcHBlYXIgY29udHJvdmVyc2lhbCwgYnV0IG1vZHVsZXMgdGFrZW4KIyBmcm9tIHN0YXRpYyBsaWJnY2MgZG8gbm90IGhhdmUgcmVsb2NhdGlvbnMgYW5kIGxpbmtpbmcgdGhlbSBpbnRvIG91cgojIHNoYXJlZCBvYmplY3RzIGRvZXNuJ3QgaGF2ZSBhbnkgbmVnYXRpdmUgc2lkZS1lZmZlY3RzLiBPbiB0aGUgY29udHJhcnksCiMgZG9pbmcgc28gbWFrZXMgaXQgcG9zc2libGUgdG8gdXNlIGdjYyBzaGFyZWQgYnVpbGQgd2l0aCBTdW4gQy4gR2l2ZW4KIyB0aGF0IGdjYyBnZW5lcmF0ZXMgZmFzdGVyIGNvZGUgW3RoYW5rcyB0byBpbmxpbmUgYXNzZW1ibGVyXSwgSSB3b3VsZAojIGFjdHVhbGx5IHJlY29tbWVuZCB0byBjb25zaWRlciB1c2luZyBnY2Mgc2hhcmVkIGJ1aWxkIGV2ZW4gd2l0aCB2ZW5kb3IKIyBjb21waWxlcjotKQojCQkJCQkJPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPgoic29sYXJpczY0LXg4Nl82NC1nY2MiLCJnY2M6LW02NCAtTzMgLVdhbGwgLURMX0VORElBTjo6LURfUkVFTlRSQU5UOjotbHNvY2tldCAtbG5zbCAtbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDoke3g4Nl82NF9hc219OmVsZjpkbGZjbjpzb2xhcmlzLXNoYXJlZDotZlBJQzotbTY0IC1zaGFyZWQgLXN0YXRpYy1saWJnY2M6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6OjovNjQiLAogCiMjIyMgU29sYXJpcyB4ODYgd2l0aCBTdW4gQyBzZXR1cHMKInNvbGFyaXMteDg2LWNjIiwiY2M6LWZhc3QgLU8gLVhhOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19QVFIgREVTX1VOUk9MTCBCRl9QVFI6JHtub19hc219OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1LUElDOi1HIC1keSAteiB0ZXh0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKInNvbGFyaXM2NC14ODZfNjQtY2MiLCJjYzotZmFzdCAteGFyY2g9YW1kNjQgLXhzdHJjb25zdCAtWGEgLURMX0VORElBTjo6LURfUkVFTlRSQU5UOjotbHNvY2tldCAtbG5zbCAtbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDoke3g4Nl82NF9hc219OmVsZjpkbGZjbjpzb2xhcmlzLXNoYXJlZDotS1BJQzoteGFyY2g9YW1kNjQgLUcgLWR5IC16IHRleHQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6OjovNjQiLAoKIyMjIyBTUEFSQyBTb2xhcmlzIHdpdGggR05VIEMgc2V0dXBzCiJzb2xhcmlzLXNwYXJjdjctZ2NjIiwiZ2NjOi1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbCAtREJfRU5ESUFOIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDo6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6JHtub19hc219OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoic29sYXJpcy1zcGFyY3Y4LWdjYyIsImdjYzotbWNwdT12OCAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGwgLURCX0VORElBTiAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OF9hc219OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAojIC1tMzIgc2hvdWxkIGJlIHNhZmUgdG8gYWRkIGFzIGxvbmcgYXMgZHJpdmVyIHJlY29nbml6ZXMgLW1jcHU9dWx0cmFzcGFyYwoic29sYXJpcy1zcGFyY3Y5LWdjYyIsImdjYzotbTMyIC1tY3B1PXVsdHJhc3BhcmMgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsIC1EQl9FTkRJQU4gLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOlVMVFJBU1BBUkM6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6JHtzcGFyY3Y5X2FzbX06ZGxmY246c29sYXJpcy1zaGFyZWQ6LWZQSUM6LXNoYXJlZDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJzb2xhcmlzNjQtc3BhcmN2OS1nY2MiLCJnY2M6LW02NCAtbWNwdT11bHRyYXNwYXJjIC1PMyAtV2FsbCAtREJfRU5ESUFOOjotRF9SRUVOVFJBTlQ6VUxUUkFTUEFSQzotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OV9hc219OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1mUElDOi1tNjQgLXNoYXJlZDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6Oi82NCIsCiMjIyMKImRlYnVnLXNvbGFyaXMtc3BhcmN2OC1nY2MiLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHX0FMTCAtTyAtZyAtbWNwdT12OCAtV2FsbCAtREJfRU5ESUFOOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OF9hc219OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctc29sYXJpcy1zcGFyY3Y5LWdjYyIsImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUdfQUxMIC1EUEVEQU5USUMgLU8gLWcgLW1jcHU9dWx0cmFzcGFyYyAtcGVkYW50aWMgLWFuc2kgLVdhbGwgLVdzaGFkb3cgLVduby1sb25nLWxvbmcgLURfX0VYVEVOU0lPTlNfXyAtREJfRU5ESUFOIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDpVTFRSQVNQQVJDOi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OV9hc219OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoKIyMjIyBTUEFSQyBTb2xhcmlzIHdpdGggU3VuIEMgc2V0dXBzCiMgU0M0LjAgZG9lc24ndCBwYXNzICdtYWtlIHRlc3QnLCB1cGdyYWRlIHRvIFNDNS4wIG9yIFNDNC4yLgojIFNDNC4yIGlzIG9rLCBiZXR0ZXIgdGhhbiBnY2MgZXZlbiBvbiBibiBhcyBsb25nIGFzIHlvdSB0ZWxsIGl0IC14YXJjaD12OAojIFNDNS4wIG5vdGU6IENvbXBpbGVyIGNvbW1vbiBwYXRjaCAxMDczNTctMDEgb3IgbGF0ZXIgaXMgcmVxdWlyZWQhCiJzb2xhcmlzLXNwYXJjdjctY2MiLCJjYzoteE81IC14c3RyY29uc3QgLXhkZXBlbmQgLVhhIC1EQl9FTkRJQU4gLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOjotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06ZGxmY246c29sYXJpcy1zaGFyZWQ6LUtQSUM6LUcgLWR5IC16IHRleHQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoic29sYXJpcy1zcGFyY3Y4LWNjIiwiY2M6LXhhcmNoPXY4IC14TzUgLXhzdHJjb25zdCAteGRlcGVuZCAtWGEgLURCX0VORElBTiAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OF9hc219OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1LUElDOi1HIC1keSAteiB0ZXh0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKInNvbGFyaXMtc3BhcmN2OS1jYyIsImNjOi14dGFyZ2V0PXVsdHJhIC14YXJjaD12OHBsdXMgLXhPNSAteHN0cmNvbnN0IC14ZGVwZW5kIC1YYSAtREJfRU5ESUFOIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDpVTFRSQVNQQVJDOi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LX0xMIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OV9hc219OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1LUElDOi1HIC1keSAteiB0ZXh0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKInNvbGFyaXM2NC1zcGFyY3Y5LWNjIiwiY2M6LXh0YXJnZXQ9dWx0cmEgLXhhcmNoPXY5IC14TzUgLXhzdHJjb25zdCAteGRlcGVuZCAtWGEgLURCX0VORElBTjo6LURfUkVFTlRSQU5UOlVMVFJBU1BBUkM6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjlfYXNtfTpkbGZjbjpzb2xhcmlzLXNoYXJlZDotS1BJQzoteGFyY2g9djkgLUcgLWR5IC16IHRleHQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6OjovNjQiLAojIyMjCiJkZWJ1Zy1zb2xhcmlzLXNwYXJjdjgtY2MiLCJjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUdfQUxMIC14YXJjaD12OCAtZyAtTyAteHN0cmNvbnN0IC1YYSAtREJfRU5ESUFOIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDo6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCBCRl9QVFI6JHtzcGFyY3Y4X2FzbX06ZGxmY246c29sYXJpcy1zaGFyZWQ6LUtQSUM6LUcgLWR5IC16IHRleHQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctc29sYXJpcy1zcGFyY3Y5LWNjIiwiY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHX0FMTCAteHRhcmdldD11bHRyYSAteGFyY2g9djhwbHVzIC1nIC1PIC14c3RyY29uc3QgLVhhIC1EQl9FTkRJQU4gLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOlVMVFJBU1BBUkM6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTktfTEwgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCBCRl9QVFI6JHtzcGFyY3Y5X2FzbX06ZGxmY246c29sYXJpcy1zaGFyZWQ6LUtQSUM6LUcgLWR5IC16IHRleHQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLCAKCiMjIyMgU3VuT1MgY29uZmlncywgYXNzdW1pbmcgc3BhcmMgZm9yIHRoZSBnY2Mgb25lLgojInN1bm9zLWNjIiwgImNjOi1PNCAtRE5PUFJPVE8gLUROT0NPTlNUOjoodW5rbm93bik6U1VOT1M6OkRFU19VTlJPTEw6JHtub19hc219OjoiLAoic3Vub3MtZ2NjIiwiZ2NjOi1PMyAtbWNwdT12OCAtRHNzaXplX3Q9aW50OjoodW5rbm93bik6U1VOT1M6OkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIERFU19QVFIgREVTX1JJU0MxOiR7bm9fYXNtfTo6IiwKCiMjIyMgSVJJWCA1LnggY29uZmlncwojIC1taXBzMiBmbGFnIGlzIGFkZGVkIGJ5IC4vY29uZmlnIHdoZW4gYXBwcm9wcmlhdGUuCiJpcml4LWdjYyIsImdjYzotTzMgLURCX0VORElBTjo6KHVua25vd24pOjo6Qk5fTExPTkcgTUQyX0NIQVIgUkM0X0lOREVYIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIERFU19SSVNDMiBERVNfUFRSIEJGX1BUUjoke21pcHMzMl9hc219Om8zMjpkbGZjbjppcml4LXNoYXJlZDo6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImlyaXgtY2MiLCAiY2M6LU8yIC11c2VfcmVhZG9ubHlfY29uc3QgLURCX0VORElBTjo6KHVua25vd24pOjo6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19QVFIgREVTX1JJU0MyIERFU19VTlJPTEwgQkZfUFRSOiR7bWlwczMyX2FzbX06bzMyOmRsZmNuOmlyaXgtc2hhcmVkOjo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAojIyMjIElSSVggNi54IGNvbmZpZ3MKIyBPbmx5IE4zMiBhbmQgTjY0IEFCSXMgYXJlIHN1cHBvcnRlZC4gSWYgeW91IG5lZWQgTzMyIEFCSSBidWlsZCwgaW52b2tlCiMgJy4vQ29uZmlndXJlIGlyaXgtY2MgLW8zMicgbWFudWFsbHkuCiJpcml4LW1pcHMzLWdjYyIsImdjYzotbWFiaT1uMzIgLU8zIC1EQl9FTkRJQU4gLURCTl9ESVYzVzo6LURfU0dJX01QX1NPVVJDRTo6Ok1EMl9DSEFSIFJDNF9JTkRFWCBSQzRfQ0hBUiBSQzRfQ0hVTktfTEwgREVTX1VOUk9MTCBERVNfUklTQzIgREVTX1BUUiBCRl9QVFIgU0lYVFlfRk9VUl9CSVQ6JHttaXBzNjRfYXNtfTpuMzI6ZGxmY246aXJpeC1zaGFyZWQ6Oi1tYWJpPW4zMjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6OjMyIiwKImlyaXgtbWlwczMtY2MiLCAiY2M6LW4zMiAtbWlwczMgLU8yIC11c2VfcmVhZG9ubHlfY29uc3QgLUcwIC1yZGF0YV9zaGFyZWQgLURCX0VORElBTiAtREJOX0RJVjNXOjotRF9TR0lfTVBfU09VUkNFOjo6REVTX1BUUiBSQzRfQ0hBUiBSQzRfQ0hVTktfTEwgREVTX1JJU0MyIERFU19VTlJPTEwgQkZfUFRSIFNJWFRZX0ZPVVJfQklUOiR7bWlwczY0X2FzbX06bjMyOmRsZmNuOmlyaXgtc2hhcmVkOjotbjMyOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6MzIiLAojIE42NCBBQkkgYnVpbGRzLgoiaXJpeDY0LW1pcHM0LWdjYyIsImdjYzotbWFiaT02NCAtbWlwczQgLU8zIC1EQl9FTkRJQU4gLURCTl9ESVYzVzo6LURfU0dJX01QX1NPVVJDRTo6OlJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUklTQzIgREVTX1VOUk9MTCBTSVhUWV9GT1VSX0JJVF9MT05HOiR7bWlwczY0X2FzbX06NjQ6ZGxmY246aXJpeC1zaGFyZWQ6Oi1tYWJpPTY0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6NjQiLAoiaXJpeDY0LW1pcHM0LWNjIiwgImNjOi02NCAtbWlwczQgLU8yIC11c2VfcmVhZG9ubHlfY29uc3QgLUcwIC1yZGF0YV9zaGFyZWQgLURCX0VORElBTiAtREJOX0RJVjNXOjotRF9TR0lfTVBfU09VUkNFOjo6UkM0X0NIQVIgUkM0X0NIVU5LIERFU19SSVNDMiBERVNfVU5ST0xMIFNJWFRZX0ZPVVJfQklUX0xPTkc6JHttaXBzNjRfYXNtfTo2NDpkbGZjbjppcml4LXNoYXJlZDo6LTY0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6NjQiLAoKIyMjIyBVbmlmaWVkIEhQLVVYIEFOU0kgQyBjb25maWdzLgojIFNwZWNpYWwgbm90ZXM6CiMgLSBPcmlnaW5hbGx5IHdlIHdlcmUgb3B0aW1pemluZyBhdCArTzQgbGV2ZWwuIEl0IHNob3VsZCBiZSBub3RlZAojICAgdGhhdCB0aGUgb25seSBkaWZmZXJlbmNlIGJldHdlZW4gK08zIGFuZCArTzQgaXMgZ2xvYmFsIGludGVyLQojICAgcHJvY2VkdXJhbCBhbmFseXNpcy4gQXMgaXQgaGFzIHRvIGJlIHBlcmZvcm1lZCBkdXJpbmcgdGhlIGxpbmsKIyAgIHN0YWdlIHRoZSBjb21waWxlciBsZWF2ZXMgYmVoaW5kIGNlcnRhaW4gcHNldWRvLWNvZGUgaW4gbGliKi5hCiMgICB3aGljaCBtaWdodCBiZSByZWxlYXNlIG9yIGV2ZW4gcGF0Y2ggbGV2ZWwgc3BlY2lmaWMuIEdlbmVyYXRpbmcKIyAgIHRoZSBtYWNoaW5lIGNvZGUgZm9yIGFuZCBhbmFseXppbmcgdGhlICp3aG9sZSogcHJvZ3JhbSBhcHBlYXJzCiMgICB0byBiZSAqZXh0cmVtZWx5KiBtZW1vcnkgZGVtYW5kaW5nIHdoaWxlIHRoZSBwZXJmb3JtYW5jZSBnYWluIGlzCiMgICBhY3R1YWxseSBxdWVzdGlvbmFibGUuIFRoZSBzaXR1YXRpb24gaXMgaW50ZW5zaWZpZWQgYnkgdGhlIGRlZmF1bHQKIyAgIEhQLVVYIGRhdGEgc2V0IHNpemUgbGltaXQgKGluZmFtb3VzICdtYXhkc2l6JyB0dW5hYmxlKSBvZiA2NE1CCiMgICB3aGljaCBpcyB3YXkgdG9vIGxvdyBmb3IgK080LiBJbiBvdGhlciB3b3JkcywgZG9lc24ndCArTzMgbWFrZQojICAgbW9yZSBzZW5zZT8KIyAtIEtlZXAgaW4gbWluZCB0aGF0IHRoZSBIUCBjb21waWxlciBieSBkZWZhdWx0IGdlbmVyYXRlcyBjb2RlCiMgICBzdWl0YWJsZSBmb3IgZXhlY3V0aW9uIG9uIHRoZSBob3N0IHlvdSdyZSBjdXJyZW50bHkgY29tcGlsaW5nIGF0LgojICAgSWYgdGhlIHRvb2xraXQgaXMgbWVudCB0byBiZSB1c2VkIG9uIHZhcmlvdXMgUEEtUklTQyBwcm9jZXNzb3JzCiMgICBjb25zaWRlciAnLi9jb25maWcgK0RBcG9ydGFibGUnLgojIC0gK0RENjQgaXMgY2hvc2VuIGluIGZhdm91ciBvZiArREEyLjBXIGJlY2F1c2UgaXQncyBtZWFudCB0byBiZQojICAgY29tcGF0aWJsZSB3aXRoICpmdXR1cmUqIHJlbGVhc2VzLgojIC0gSWYgeW91IHJ1biAuL0NvbmZpZ3VyZSBocHV4LXBhcmlzYy1bZ11jYyBtYW51YWxseSBkb24ndCBmb3JnZXQgdG8KIyAgIHBhc3MgLURfUkVFTlRSQU5UIG9uIEhQLVVYIDEwIGFuZCBsYXRlci4KIyAtIC1ETUQzMl9YQVJSQVkgdHJpZ2dlcnMgd29ya2Fyb3VuZCBmb3IgY29tcGlsZXIgYnVnIHdlIHJhbiBpbnRvIGluCiMgICAzMi1iaXQgbWVzc2FnZSBkaWdlc3RzLiAoRm9yIHRoZSBtb21lbnQgb2YgdGhpcyB3cml0aW5nKSBIUCBDCiMgICBkb2Vzbid0IHNlZW0gdG8gImRpZ2VzdCIgdG9vIG1hbnkgbG9jYWwgdmFyaWFibGVzICh0aGV5IG1ha2UgImhpbSIKIyAgIGNoZXcgZm9yZXZlcjotKS4gRm9yIG1vcmUgZGV0YWlscyBsb29rLXVwIE1EMzJfWEFSUkFZIGNvbW1lbnQgaW4KIyAgIGNyeXB0by9zaGEvc2hhX2xjbC5oLgojCQkJCQk8YXBwcm9AZnkuY2hhbG1lcnMuc2U+CiMKIyBTaW5jZSB0aGVyZSBpcyBtZW50aW9uIG9mIHRoaXMgaW4gc2hsaWIvaHB1eDEwLWNjLnNoCiJocHV4LXBhcmlzYy1jYy1vNCIsImNjOi1BZSArTzQgK0VTbGl0IC16IC1EQl9FTkRJQU4gLURCTl9ESVYyVyAtRE1EMzJfWEFSUkFZOjotRF9SRUVOVFJBTlQ6Oi1sZGxkOkJOX0xMT05HIERFU19QVFIgREVTX1VOUk9MTCBERVNfUklTQzE6JHtub19hc219OmRsOmhwdXgtc2hhcmVkOitaOi1iOi5zbC5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImhwdXgtcGFyaXNjLWdjYyIsImdjYzotTzMgLURCX0VORElBTiAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6Oi1XbCwrcyAtbGRsZDpCTl9MTE9ORyBERVNfUFRSIERFU19VTlJPTEwgREVTX1JJU0MxOiR7bm9fYXNtfTpkbDpocHV4LXNoYXJlZDotZlBJQzotc2hhcmVkOi5zbC5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImhwdXgtcGFyaXNjMV8xLWdjYyIsImdjYzotTzMgLURCX0VORElBTiAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6Oi1XbCwrcyAtbGRsZDpCTl9MTE9ORyBERVNfUFRSIERFU19VTlJPTEwgREVTX1JJU0MxOiR7cGFyaXNjMTFfYXNtfTpkbDpocHV4LXNoYXJlZDotZlBJQzotc2hhcmVkOi5zbC5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6L3BhMS4xIiwKImhwdXgtcGFyaXNjMi1nY2MiLCJnY2M6LW1hcmNoPTIuMCAtTzMgLURCX0VORElBTiAtRF9SRUVOVFJBTlQ6Ojo6LVdsLCtzIC1sZGxkOlNJWFRZX0ZPVVJfQklUIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUFRSIERFU19VTlJPTEwgREVTX1JJU0MxOiIuZXZhbHtteSAkYXNtPSRwYXJpc2MyMF9hc207JGFzbT1+cy8yV1wuLzJcLi87JGFzbT1+cy86NjQvOjMyLzskYXNtfS4iOmRsOmhwdXgtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6OjovcGEyMF8zMiIsCiJocHV4NjQtcGFyaXNjMi1nY2MiLCJnY2M6LU8zIC1EQl9FTkRJQU4gLURfUkVFTlRSQU5UOjo6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBNRDJfQ0hBUiBSQzRfSU5ERVggUkM0X0NIQVIgREVTX1VOUk9MTCBERVNfUklTQzEgREVTX0lOVDo6cGEtcmlzYzJXLm86Ojo6Ojo6Ojo6Ojo6OnZvaWQ6ZGxmY246aHB1eC1zaGFyZWQ6LWZwaWM6LXNoYXJlZDouc2wuXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6Oi9wYTIwXzY0IiwKCiMgTW9yZSBhdHRlbXB0cyBhdCB1bmlmaWVkIDEwLlggYW5kIDExLlggdGFyZ2V0cyBmb3IgSFAgQyBjb21waWxlci4KIwojIENocmlzIFJ1ZW1tbGVyIDxydWVtbWxlckBjdXAuaHAuY29tPgojIEtldmluIFN0ZXZlcyA8a3NAaHAuc2U+CiJocHV4LXBhcmlzYy1jYyIsImNjOitPMyArT3B0cnNfc3Ryb25nbHlfdHlwZWQgLUFlICtFU2xpdCAtREJfRU5ESUFOIC1EQk5fRElWMlcgLURNRDMyX1hBUlJBWTo6LURfUkVFTlRSQU5UOjotV2wsK3MgLWxkbGQ6TUQyX0NIQVIgUkM0X0lOREVYIFJDNF9DSEFSIERFU19VTlJPTEwgREVTX1JJU0MxIERFU19JTlQ6JHtub19hc219OmRsOmhwdXgtc2hhcmVkOitaOi1iOi5zbC5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImhwdXgtcGFyaXNjMV8xLWNjIiwiY2M6K0RBMS4xICtPMyArT3B0cnNfc3Ryb25nbHlfdHlwZWQgLUFlICtFU2xpdCAtREJfRU5ESUFOIC1ETUQzMl9YQVJSQVk6Oi1EX1JFRU5UUkFOVDo6LVdsLCtzIC1sZGxkOk1EMl9DSEFSIFJDNF9JTkRFWCBSQzRfQ0hBUiBERVNfVU5ST0xMIERFU19SSVNDMSBERVNfSU5UOiR7cGFyaXNjMTFfYXNtfTpkbDpocHV4LXNoYXJlZDorWjotYjouc2wuXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6Oi9wYTEuMSIsCiJocHV4LXBhcmlzYzItY2MiLCJjYzorREEyLjAgK0RTMi4wICtPMyArT3B0cnNfc3Ryb25nbHlfdHlwZWQgLUFlICtFU2xpdCAtREJfRU5ESUFOIC1ETUQzMl9YQVJSQVkgLURfUkVFTlRSQU5UOjo6Oi1XbCwrcyAtbGRsZDpTSVhUWV9GT1VSX0JJVCBNRDJfQ0hBUiBSQzRfSU5ERVggUkM0X0NIQVIgREVTX1VOUk9MTCBERVNfUklTQzEgREVTX0lOVDoiLmV2YWx7bXkgJGFzbT0kcGFyaXNjMjBfYXNtOyRhc209fnMvMldcLi8yXC4vOyRhc209fnMvOjY0LzozMi87JGFzbX0uIjpkbDpocHV4LXNoYXJlZDorWjotYjouc2wuXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6Oi9wYTIwXzMyIiwKImhwdXg2NC1wYXJpc2MyLWNjIiwiY2M6K0RENjQgK08zICtPcHRyc19zdHJvbmdseV90eXBlZCAtQWUgK0VTbGl0IC1EQl9FTkRJQU4gLURNRDMyX1hBUlJBWSAtRF9SRUVOVFJBTlQ6Ojo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIE1EMl9DSEFSIFJDNF9JTkRFWCBSQzRfQ0hBUiBERVNfVU5ST0xMIERFU19SSVNDMSBERVNfSU5UOiR7cGFyaXNjMjBfYXNtfTpkbGZjbjpocHV4LXNoYXJlZDorWjorREQ2NCAtYjouc2wuXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6Oi9wYTIwXzY0IiwKCiMgSFAvVVggSUEtNjQgdGFyZ2V0cwoiaHB1eC1pYTY0LWNjIiwiY2M6LUFlICtERDMyICtPMiArT2xpdD1hbGwgLXogLURCX0VORElBTiAtRF9SRUVOVFJBTlQ6Ojo6LWxkbDpTSVhUWV9GT1VSX0JJVCBNRDJfQ0hBUiBSQzRfSU5ERVggREVTX1VOUk9MTCBERVNfUklTQzEgREVTX0lOVDoke2lhNjRfYXNtfTpkbGZjbjpocHV4LXNoYXJlZDorWjorREQzMiAtYjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6Oi9ocHV4MzIiLAojIEZyYW5rIEdldXJ0cyA8ZnJhbmsuZ2V1cnRzQG5sLmFibmFtcm8uY29tPiBoYXMgcGF0aWVudGx5IGFzc2lzdGVkIHdpdGgKIyB3aXRoIGRlYnVnZ2luZyBvZiB0aGUgZm9sbG93aW5nIGNvbmZpZy4KImhwdXg2NC1pYTY0LWNjIiwiY2M6LUFlICtERDY0ICtPMyArT2xpdD1hbGwgLXogLURCX0VORElBTiAtRF9SRUVOVFJBTlQ6Ojo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIE1EMl9DSEFSIFJDNF9JTkRFWCBERVNfVU5ST0xMIERFU19SSVNDMSBERVNfSU5UOiR7aWE2NF9hc219OmRsZmNuOmhwdXgtc2hhcmVkOitaOitERDY0IC1iOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6L2hwdXg2NCIsCiMgR0NDIGJ1aWxkcy4uLgoiaHB1eC1pYTY0LWdjYyIsImdjYzotTzMgLURCX0VORElBTiAtRF9SRUVOVFJBTlQ6Ojo6LWxkbDpTSVhUWV9GT1VSX0JJVCBNRDJfQ0hBUiBSQzRfSU5ERVggREVTX1VOUk9MTCBERVNfUklTQzEgREVTX0lOVDoke2lhNjRfYXNtfTpkbGZjbjpocHV4LXNoYXJlZDotZnBpYzotc2hhcmVkOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6L2hwdXgzMiIsCiJocHV4NjQtaWE2NC1nY2MiLCJnY2M6LW1scDY0IC1PMyAtREJfRU5ESUFOIC1EX1JFRU5UUkFOVDo6OjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgTUQyX0NIQVIgUkM0X0lOREVYIERFU19VTlJPTEwgREVTX1JJU0MxIERFU19JTlQ6JHtpYTY0X2FzbX06ZGxmY246aHB1eC1zaGFyZWQ6LWZwaWM6LW1scDY0IC1zaGFyZWQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6OjovaHB1eDY0IiwgCgojIExlZ2FjeSBIUFVYIDkuWCBjb25maWdzLi4uCiJocHV4LWNjIiwJImNjOi1EQl9FTkRJQU4gLURCTl9ESVYyVyAtRE1EMzJfWEFSUkFZIC1BZSArRVNsaXQgK08yIC16OjoodW5rbm93bik6Oi1XbCwrcyAtbGRsZDpERVNfUFRSIERFU19VTlJPTEwgREVTX1JJU0MxOiR7bm9fYXNtfTpkbDpocHV4LXNoYXJlZDorWjotYjouc2wuXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJocHV4LWdjYyIsCSJnY2M6LURCX0VORElBTiAtREJOX0RJVjJXIC1PMzo6KHVua25vd24pOjotV2wsK3MgLWxkbGQ6REVTX1BUUiBERVNfVU5ST0xMIERFU19SSVNDMToke25vX2FzbX06ZGw6aHB1eC1zaGFyZWQ6LWZQSUM6LXNoYXJlZDouc2wuXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCgojIyMjIEhQIE1QRS9pWCBodHRwOi8vamF6ei5leHRlcm5hbC5ocC5jb20vc3JjL29wZW5zc2wvCiJNUEUvaVgtZ2NjIiwJImdjYzotRF9FTkRJQU4gLURCTl9ESVYyVyAtTzMgLURfUE9TSVhfU09VUkNFIC1EX1NPQ0tFVF9TT1VSQ0UgLUkvU1lTTE9HL1BVQjo6KHVua25vd24pOk1QRTotTC9TWVNMT0cvUFVCIC1sc3lzbG9nIC1sc29ja2V0IC1sY3Vyc2VzOkJOX0xMT05HIERFU19QVFIgREVTX1VOUk9MTCBERVNfUklTQzE6OjoiLAoKIyBERUMgQWxwaGEgT1NGLzEvVHJ1NjQgdGFyZ2V0cy4KIwojCSJXaGF0J3MgaW4gYSBuYW1lPyBUaGF0IHdoaWNoIHdlIGNhbGwgYSByb3NlCiMJIEJ5IGFueSBvdGhlciB3b3JkIHdvdWxkIHNtZWxsIGFzIHN3ZWV0LiIKIwojIC0gV2lsbGlhbSBTaGFrZXNwZWFyZSwgIlJvbWVvICYgSnVsaWV0IiwgQWN0IElJLCBzY2VuZSBJSS4KIwojIEZvciBnY2MsIHRoZSBmb2xsb3dpbmcgZ2F2ZSBhICU1MCBzcGVlZHVwIG9uIGEgMTY0IG92ZXIgdGhlICdERVNfSU5UJyB2ZXJzaW9uCiMKIm9zZjEtYWxwaGEtZ2NjIiwgImdjYzotTzM6Oih1bmtub3duKTo6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19VTlJPTEwgREVTX1JJU0MxOiR7YWxwaGFfYXNtfTpkbGZjbjphbHBoYS1vc2YxLXNoYXJlZDo6Oi5zbyIsCiJvc2YxLWFscGhhLWNjIiwgICJjYzotc3RkMSAtdHVuZSBob3N0IC1PNCAtcmVhZG9ubHlfc3RyaW5nczo6KHVua25vd24pOjo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTks6JHthbHBoYV9hc219OmRsZmNuOmFscGhhLW9zZjEtc2hhcmVkOjo6LnNvIiwKInRydTY0LWFscGhhLWNjIiwgImNjOi1zdGQxIC10dW5lIGhvc3QgLWZhc3QgLXJlYWRvbmx5X3N0cmluZ3M6Oi1wdGhyZWFkOjo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTks6JHthbHBoYV9hc219OmRsZmNuOmFscGhhLW9zZjEtc2hhcmVkOjotbXN5bTouc28iLAoKIyMjIwojIyMjIFZhcmlldHkgb2YgTElOVVg6LSkKIyMjIwojICotZ2VuZXJpYyogaXMgZW5kaWFuLW5ldXRyYWwgdGFyZ2V0LCBidXQgLi9jb25maWcgaXMgZnJlZSB0bwojIHRocm93IGluIC1EW0JMXV9FTkRJQU4sIHdoaWNoZXZlciBhcHByb3ByaWF0ZS4uLgoibGludXgtZ2VuZXJpYzMyIiwiZ2NjOi1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LXBwYyIsCSJnY2M6LURCX0VORElBTiAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1JJU0MxIERFU19VTlJPTEw6JHtwcGMzMl9hc219OmxpbnV4MzI6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiMgSXQncyBiZWxpZXZlZCB0aGF0IG1ham9yaXR5IG9mIEFSTSB0b29sY2hhaW5zIHByZWRlZmluZSBhcHByb3ByaWF0ZSAtbWFyY2guCiMgSWYgeW91IGNvbXBpbGVyIGRvZXMgbm90LCBkbyBjb21wbGVtZW50IGNvbmZpZyBjb21tYW5kIGxpbmUgd2l0aCBvbmUhCiJsaW51eC1hcm12NCIsCSJnY2M6LU8zIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHthcm12NF9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAojIyMjIElBLTMyIHRhcmdldHMuLi4KImxpbnV4LWlhMzItaWNjIiwJImljYzotRExfRU5ESUFOIC1PMiAtbm9fY3BwcnQ6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1LUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJsaW51eC1lbGYiLAkiZ2NjOi1ETF9FTkRJQU4gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoibGludXgtYW91dCIsCSJnY2M6LURMX0VORElBTiAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLW1hcmNoPWk0ODYgLVdhbGw6Oih1bmtub3duKTo6OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9hc219OmEub3V0IiwKIyMjIwoibGludXgtZ2VuZXJpYzY0IiwiZ2NjOi1PMyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoibGludXgtcHBjNjQiLAkiZ2NjOi1tNjQgLURCX0VORElBTiAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX1VOUk9MTDoke3BwYzY0X2FzbX06bGludXg2NDpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6OjY0IiwKImxpbnV4LWlhNjQiLAkiZ2NjOi1ETF9FTkRJQU4gLU8zIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX1VOUk9MTCBERVNfSU5UOiR7aWE2NF9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoibGludXgtaWE2NC1lY2MiLCJlY2M6LURMX0VORElBTiAtTzIgLVdhbGwgLW5vX2NwcHJ0OjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVDoke2lhNjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LWlhNjQtaWNjIiwiaWNjOi1ETF9FTkRJQU4gLU8yIC1XYWxsIC1ub19jcHBydDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19SSVNDMSBERVNfSU5UOiR7aWE2NF9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoibGludXgteDg2XzY0IiwJImdjYzotbTY0IC1ETF9FTkRJQU4gLU8zIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7eDg2XzY0X2FzbX06ZWxmOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTY0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6NjQiLAoibGludXgteDg2XzY0LWNsYW5nIiwiY2xhbmc6IC1tNjQgLURMX0VORElBTiAtTzMgLVdhbGwgLVF1bnVzZWQtYXJndW1lbnRzOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7eDg2XzY0X2FzbX06ZWxmOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTY0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6NjQiLAoibGludXg2NC1zMzkweCIsCSJnY2M6LW02NCAtREJfRU5ESUFOIC1PMyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDoke3MzOTB4X2FzbX06NjQ6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6Ojo2NCIsCiMjIyMgU28gY2FsbGVkICJoaWdoZ3BycyIgdGFyZ2V0IGZvciB6L0FyY2hpdGVjdHVyZSBDUFVzCiMgIkhpZ2hncHJzIiBpcyBrZXJuZWwgZmVhdHVyZSBmaXJzdCBpbXBsZW1lbnRlZCBpbiBMaW51eCAyLjYuMzIsIHNlZQojIC9wcm9jL2NwdWluZm8uIFRoZSBpZGVhIGlzIHRvIHByZXNlcnZlIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBvZgojIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMgbm90IG9ubHkgdXBvbiAzMi1iaXQgcHJvY2VzcyBjb250ZXh0CiMgc3dpdGNoLCBidXQgZXZlbiBvbiBhc3luY2hyb25vdXMgc2lnbmFsIGRlbGl2ZXJ5IHRvIHN1Y2ggcHJvY2Vzcy4KIyBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGRlcGxveSA2NC1iaXQgaW5zdHJ1Y3Rpb25zIGV2ZW4gaW4gbGVnYWN5CiMgYXBwbGljYXRpb24gY29udGV4dCBhbmQgYWNoaWV2ZSBiZXR0ZXIgW29yIHNob3VsZCB3ZSBzYXkgYWRlcXVhdGVdCiMgcGVyZm9ybWFuY2UuIFRoZSBidWlsZCBpcyBiaW5hcnkgY29tcGF0aWJsZSB3aXRoIGxpbnV4LWdlbmVyaWMzMiwKIyBhbmQgdGhlIGlkZWEgaXMgdG8gYmUgYWJsZSB0byBpbnN0YWxsIHRoZSByZXN1bHRpbmcgbGliY3J5cHRvLnNvCiMgYWxvbmdzaWRlIGdlbmVyaWMgb25lLCBlLmcuIGFzIC9saWIvaGlnaGdwcnMvbGliY3J5cHRvLnNvLngueSwgZm9yCiMgbGRjb25maWcgYW5kIHJ1bi10aW1lIGxpbmtlciB0byBhdXRvZGlzY292ZXIuIFVuZm9ydHVuYXRlbHkgaXQKIyBkb2Vzbid0IHdvcmsganVzdCB5ZXQsIGJlY2F1c2Ugb2YgY291cGxlIG9mIGJ1Z3MgaW4gZ2xpYmMKIyBzeXNkZXBzL3MzOTAvZGwtcHJvY2luZm8uYyBhZmZlY3RpbmcgbGRjb25maWcgYW5kIGxkLnNvLjEuLi4KImxpbnV4MzItczM5MHgiLAkiZ2NjOi1tMzEgLVdhLC1temFyY2ggLURCX0VORElBTiAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiIuZXZhbHtteSAkYXNtPSRzMzkweF9hc207JGFzbT1+cy9iblwtczM5MHhcLm8vYm5fYXNtLm8vOyRhc219LiI6MzE6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tMzE6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6OjovaGlnaGdwcnMiLAojIyMjIFNQQVJDIExpbnV4IHNldHVwcwojIFJheSBNaWxsZXIgPHJheS5taWxsZXJAY29tcHV0aW5nLXNlcnZpY2VzLm94Zm9yZC5hYy51az4gaGFzIHBhdGllbnRseQojIGFzc2lzdGVkIHdpdGggZGVidWdnaW5nIG9mIGZvbGxvd2luZyB0d28gY29uZmlncy4KImxpbnV4LXNwYXJjdjgiLCJnY2M6LW1jcHU9djggLURCX0VORElBTiAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGwgLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjhfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyBpdCdzIGEgcmVhbCBtZXNzIHdpdGggLW1jcHU9dWx0cmFzcGFyYyBvcHRpb24gdW5kZXIgTGludXgsIGJ1dAojIC1XYSwtQXY4cGx1cyBzaG91bGQgZG8gdGhlIHRyaWNrIG5vIG1hdHRlciB3aGF0LgoibGludXgtc3BhcmN2OSIsImdjYzotbTMyIC1tY3B1PXVsdHJhc3BhcmMgLURCX0VORElBTiAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGwgLVdhLC1BdjhwbHVzIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDpVTFRSQVNQQVJDOi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OV9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTMyOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyBHQ0MgMy4xIGlzIGEgcmVxdWlyZW1lbnQKImxpbnV4NjQtc3BhcmN2OSIsImdjYzotbTY0IC1tY3B1PXVsdHJhc3BhcmMgLURCX0VORElBTiAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDpVTFRSQVNQQVJDOi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCBCRl9QVFI6JHtzcGFyY3Y5X2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6Ojo2NCIsCiMjIyMgQWxwaGEgTGludXggd2l0aCBHTlUgQyBhbmQgQ29tcGFxIEMgc2V0dXBzCiMgU3BlY2lhbCBub3RlczoKIyAtIGxpbnV4LWFscGhhK2J3eC1nY2MgaXMgbWVudCB0byBiZSB1c2VkIGZyb20gLi9jb25maWcgb25seS4gSWYgeW91CiMgICBvdWdodCB0byBydW4gJy4vQ29uZmlndXJlIGxpbnV4LWFscGhhK2J3eC1nY2MnIG1hbnVhbGx5LCBkbwojICAgY29tcGxlbWVudCB0aGUgY29tbWFuZCBsaW5lIHdpdGggLW1jcHU9ZXY1NiwgLW1jcHU9ZXY2IG9yIHdoYXRldmVyCiMgICB3aGljaCBpcyBhcHByb3ByaWF0ZS4KIyAtIElmIHlvdSB1c2UgY2NjIGtlZXAgaW4gbWluZCB0aGF0IC1mYXN0IGltcGxpZXMgLWFyY2ggaG9zdCBhbmQgdGhlCiMgICBjb21waWxlciBpcyBmcmVlIHRvIGlzc3VlIGluc3RydWN0aW9ucyB3aGljaCBnb25uYSBtYWtlIGVsZGVyIENQVQojICAgY2hva2UuIElmIHlvdSB3aXNoIHRvIGJ1aWxkICJibGVuZGVkIiB0b29sa2l0LCBhZGQgLWFyY2ggZ2VuZXJpYwojICAgKmFmdGVyKiAtZmFzdCBhbmQgaW52b2tlICcuL0NvbmZpZ3VyZSBsaW51eC1hbHBoYS1jY2MnIG1hbnVhbGx5LgojCiMJCQkJCTxhcHByb0BmeS5jaGFsbWVycy5zZT4KIwoibGludXgtYWxwaGEtZ2NjIiwiZ2NjOi1PMyAtRExfRU5ESUFOOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX1JJU0MxIERFU19VTlJPTEw6JHthbHBoYV9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoibGludXgtYWxwaGErYnd4LWdjYyIsImdjYzotTzMgLURMX0VORElBTjo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19SSVNDMSBERVNfVU5ST0xMOiR7YWxwaGFfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LWFscGhhLWNjYyIsImNjYzotZmFzdCAtcmVhZG9ubHlfc3RyaW5ncyAtRExfRU5ESUFOOjotRF9SRUVOVFJBTlQ6OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEw6JHthbHBoYV9hc219IiwKImxpbnV4LWFscGhhK2J3eC1jY2MiLCJjY2M6LWZhc3QgLXJlYWRvbmx5X3N0cmluZ3MgLURMX0VORElBTjo6LURfUkVFTlRSQU5UOjo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMOiR7YWxwaGFfYXNtfSIsCgojIEFuZHJvaWQ6IGxpbnV4LSogYnV0IHdpdGhvdXQgcG9pbnRlcnMgdG8gaGVhZGVycyBhbmQgbGlicy4KImFuZHJvaWQiLCJnY2M6LW1hbmRyb2lkIC1JXCQoQU5EUk9JRF9ERVYpL2luY2x1ZGUgLUJcJChBTkRST0lEX0RFVikvbGliIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImFuZHJvaWQteDg2IiwiZ2NjOi1tYW5kcm9pZCAtSVwkKEFORFJPSURfREVWKS9pbmNsdWRlIC1CXCQoQU5EUk9JRF9ERVYpL2xpYiAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306Ii5ldmFse215ICRhc209JHt4ODZfZWxmX2FzbX07JGFzbT1+cy86ZWxmLzphbmRyb2lkLzskYXNtfS4iOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiYW5kcm9pZC1hcm12NyIsImdjYzotbWFyY2g9YXJtdjctYSAtbWFuZHJvaWQgLUlcJChBTkRST0lEX0RFVikvaW5jbHVkZSAtQlwkKEFORFJPSURfREVWKS9saWIgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHthcm12NF9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoKIyMjIyAqQlNEIFtkbyBzZWUgY29tbWVudCBhYm91dCAke0JTRHRocmVhZHN9IGFib3ZlIV0KIkJTRC1nZW5lcmljMzIiLCJnY2M6LU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjoke0JTRHRocmVhZHN9Ojo6Qk5fTExPTkcgUkMyX0NIQVIgUkM0X0lOREVYIERFU19JTlQgREVTX1VOUk9MTDoke25vX2FzbX06ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIkJTRC14ODYiLAkiZ2NjOi1ETF9FTkRJQU4gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjoke0JTRHRocmVhZHN9Ojo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2FzbX06YS5vdXQ6ZGxmY246YnNkLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiQlNELXg4Ni1lbGYiLAkiZ2NjOi1ETF9FTkRJQU4gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjoke0JTRHRocmVhZHN9Ojo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmJzZC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImRlYnVnLUJTRC14ODYtZWxmIiwJImdjYzotRExfRU5ESUFOIC1PMyAtV2FsbCAtZzo6JHtCU0R0aHJlYWRzfTo6OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpic2Qtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJCU0Qtc3BhcmN2OCIsCSJnY2M6LURCX0VORElBTiAtTzMgLW1jcHU9djggLVdhbGw6OiR7QlNEdGhyZWFkc306OjpCTl9MTE9ORyBSQzJfQ0hBUiBSQzRfSU5ERVggREVTX0lOVCBERVNfVU5ST0xMOiR7c3BhcmN2OF9hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCgoiQlNELWdlbmVyaWM2NCIsImdjYzotTzMgLVdhbGw6OiR7QlNEdGhyZWFkc306OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHtub19hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiMgLURNRDMyX1JFR19UPWludCBkb2Vzbid0IGFjdHVhbGx5IGJlbG9uZyBpbiBzcGFyYzY0IHRhcmdldCwgaXQKIyBzaW1wbHkgKmhhcHBlbnMqIHRvIHdvcmsgYXJvdW5kIGEgY29tcGlsZXIgYnVnIGluIGdjYyAzLjMuMywKIyB0cmlnZ2VyZWQgYnkgUklQRU1EMTYwIGNvZGUuCiJCU0Qtc3BhcmM2NCIsCSJnY2M6LURCX0VORElBTiAtTzMgLURNRDMyX1JFR19UPWludCAtV2FsbDo6JHtCU0R0aHJlYWRzfTo6OkJOX0xMT05HIFJDMl9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19QVFIgREVTX1JJU0MyIEJGX1BUUjoke3NwYXJjdjlfYXNtfTpkbGZjbjpic2QtZ2NjLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiQlNELWlhNjQiLAkiZ2NjOi1ETF9FTkRJQU4gLU8zIC1XYWxsOjoke0JTRHRocmVhZHN9Ojo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX1VOUk9MTCBERVNfSU5UOiR7aWE2NF9hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJCU0QteDg2XzY0IiwJImdjYzotRExfRU5ESUFOIC1PMyAtV2FsbDo6JHtCU0R0aHJlYWRzfTo6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDoke3g4Nl82NF9hc219OmVsZjpkbGZjbjpic2QtZ2NjLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoKImJzZGktZWxmLWdjYyIsICAgICAiZ2NjOi1EUEVSTDUgLURMX0VORElBTiAtZm9taXQtZnJhbWUtcG9pbnRlciAtTzMgLW1hcmNoPWk0ODYgLVdhbGw6Oih1bmtub3duKTo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKCiJuZXh0c3RlcCIsCSJjYzotTyAtV2FsbDo8bGliYy5oPjoodW5rbm93bik6OjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306OjoiLAoibmV4dHN0ZXAzLjMiLAkiY2M6LU8zIC1XYWxsOjxsaWJjLmg+Oih1bmtub3duKTo6OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfTo6OiIsCgojIE5DUiBNUC1SQVMgVU5JWCB2ZXIgMDIuMDMuMDEKIm5jci1zY2RlIiwiY2M6LU82IC1YYSAtSG9mZj1CRUhBVkVEIC02ODYgLUh3aWRlIC1IaXc6Oih1bmtub3duKTo6LWxzb2NrZXQgLWxuc2wgLWxjODk6JHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9Ojo6IiwKCiMgUU5YCiJxbng0IiwJImNjOi1ETF9FTkRJQU4gLURURVJNSU86Oih1bmtub3duKTo6OiR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToiLAoiUU5YNiIsICAgICAgICJnY2M6Ojo6Oi1sc29ja2V0Ojoke25vX2FzbX06ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIlFOWDYtaTM4NiIsICAiZ2NjOi1ETF9FTkRJQU4gLU8yIC1XYWxsOjo6Oi1sc29ja2V0OiR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpic2QtZ2NjLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoKIyBCZU9TCiJiZW9zLXg4Ni1yNSIsICAgImdjYzotRExfRU5ESUFOIC1EVEVSTUlPUyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLW1jcHU9cGVudGl1bSAtV2FsbDo6LURfUkVFTlRSQU5UOkJFT1M6LWxiZSAtbG5ldDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06YmVvczpiZW9zLXNoYXJlZDotZlBJQyAtRFBJQzotc2hhcmVkOi5zbyIsCiJiZW9zLXg4Ni1ib25lIiwgImdjYzotRExfRU5ESUFOIC1EVEVSTUlPUyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLW1jcHU9cGVudGl1bSAtV2FsbDo6LURfUkVFTlRSQU5UOkJFT1M6LWxiZSAtbGJpbmQgLWxzb2NrZXQ6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmJlb3M6YmVvcy1zaGFyZWQ6LWZQSUM6LXNoYXJlZDouc28iLAoKIyMjIyBTQ08vQ2FsZGVyYSB0YXJnZXRzLgojCiMgT3JpZ2luYWxseSB3ZSBoYWQgbGlrZSB1bml4d2FyZS0qLCB1bml4d2FyZS0qLXBlbnRpdW0sIHVuaXh3YXJlLSotcDYsIGV0Yy4KIyBOb3cgd2Ugb25seSBoYXZlIGJsZW5kZWQgdW5peHdhcmUtKiBhcyBpdCdzIHRoZSBvbmx5IG9uZSB1c2VkIGJ5IC4vY29uZmlnLgojIElmIHlvdSB3YW50IHRvIG9wdGltaXplIGZvciBwYXJ0aWN1bGFyIG1pY3JvYXJjaGl0ZWN0dXJlLCBieXBhc3MgLi9jb25maWcKIyBhbmQgJy4vQ29uZmlndXJlIHVuaXh3YXJlLTcgLUtwZW50aXVtX3Bybycgb3Igd2hhdGV2ZXIgYXBwcm9wcmlhdGUuCiMgTm90ZSB0aGF0IG5vdCBhbGwgdGFyZ2V0cyBpbmNsdWRlIGFzc2VtYmxlciBzdXBwb3J0LiBNb3N0bHkgYmVjYXVzZSBvZgojIGxhY2sgb2YgbW90aXZhdGlvbiB0byBzdXBwb3J0IG91dC1vZi1kYXRlIHBsYXRmb3JtcyB3aXRoIG91dC1vZi1kYXRlCiMgY29tcGlsZXIgZHJpdmVycyBhbmQgYXNzZW1ibGVycy4gVGltIFJpY2UgPHRpbUBtdWx0aXRhbGVudHMubmV0PiBoYXMKIyBwYXRpZW50bHkgYXNzaXN0ZWQgdG8gZGVidWcgbW9zdCBvZiBpdC4KIwojIFVuaXhXYXJlIDIuMHggZmFpbHMgZGVzdGVzdCB3aXRoIC1PLgoidW5peHdhcmUtMi4wIiwiY2M6LURGSUxJT19IIC1ETk9fU1RSSU5HU19IOjotS3RocmVhZDo6LWxzb2NrZXQgLWxuc2wgLWxyZXNvbHYgLWx4OiR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfTo6OiIsCiJ1bml4d2FyZS0yLjEiLCJjYzotTyAtREZJTElPX0g6Oi1LdGhyZWFkOjotbHNvY2tldCAtbG5zbCAtbHJlc29sdiAtbHg6JHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9Ojo6IiwKInVuaXh3YXJlLTciLCJjYzotTyAtREZJTElPX0ggLUthbGxvY2E6Oi1LdGhyZWFkOjotbHNvY2tldCAtbG5zbDpCTl9MTE9ORyBNRDJfQ0hBUiBSQzRfSU5ERVggJHt4ODZfZ2NjX2Rlc306JHt4ODZfZWxmX2FzbX06ZGxmY246c3ZyNS1zaGFyZWQ6LUtwaWM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKInVuaXh3YXJlLTctZ2NjIiwiZ2NjOi1ETF9FTkRJQU4gLURGSUxJT19IIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtbWFyY2g9cGVudGl1bSAtV2FsbDo6LURfUkVFTlRSQU5UOjotbHNvY2tldCAtbG5zbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246Z251LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAojIFNDTyA1IC0gQmVuIExhdXJpZSA8YmVuQGFsZ3JvdXAuY28udWs+IHNheXMgdGhlIC1PIGJyZWFrcyB0aGUgU0NPIGNjLgoic2NvNS1jYyIsICAiY2M6LWJlbGY6Oih1bmtub3duKTo6LWxzb2NrZXQgLWxuc2w6JHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOnN2cjMtc2hhcmVkOi1LcGljOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJzY281LWdjYyIsICAiZ2NjOi1PMyAtZm9taXQtZnJhbWUtcG9pbnRlcjo6KHVua25vd24pOjotbHNvY2tldCAtbG5zbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246c3ZyMy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKCiMjIyMgSUJNJ3MgQUlYLgoiYWl4My1jYyIsICAiY2M6LU8gLURCX0VORElBTiAtcW1heG1lbT0xNjM4NDo6KHVua25vd24pOkFJWDo6Qk5fTExPTkcgUkM0X0NIQVI6OjoiLAoiYWl4LWdjYyIsICAiZ2NjOi1PIC1EQl9FTkRJQU46Oi1wdGhyZWFkOkFJWDo6Qk5fTExPTkcgUkM0X0NIQVI6JHtwcGMzMl9hc219OmFpeDMyOmRsZmNuOmFpeC1zaGFyZWQ6Oi1zaGFyZWQgLVdsLC1HOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjotWDMyIiwKImFpeDY0LWdjYyIsImdjYzotbWFpeDY0IC1PIC1EQl9FTkRJQU46Oi1wdGhyZWFkOkFJWDo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUjoke3BwYzY0X2FzbX06YWl4NjQ6ZGxmY246YWl4LXNoYXJlZDo6LW1haXg2NCAtc2hhcmVkIC1XbCwtRzouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6LVg2NCIsCiMgQmVsb3cgdGFyZ2V0cyBhc3N1bWUgQUlYIDUuIElkZWEgaXMgdG8gZWZmZWN0aXZlbHkgZGlzcmVnYXJkICRPQkpFQ1RfTU9ERQojIGF0IGJ1aWxkIHRpbWUuICRPQkpFQ1RfTU9ERSBpcyByZXNwZWN0ZWQgYXQgLi9jb25maWcgc3RhZ2UhCiJhaXgtY2MiLCAgICJjYzotcTMyIC1PIC1EQl9FTkRJQU4gLXFtYXhtZW09MTYzODQgLXFybyAtcXJvY29uc3Q6Oi1xdGhyZWFkZWQgLURfVEhSRUFEX1NBRkU6QUlYOjpCTl9MTE9ORyBSQzRfQ0hBUjoke3BwYzMyX2FzbX06YWl4MzI6ZGxmY246YWl4LXNoYXJlZDo6LXEzMiAtRzouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6LVggMzIiLAoiYWl4NjQtY2MiLCAiY2M6LXE2NCAtTyAtREJfRU5ESUFOIC1xbWF4bWVtPTE2Mzg0IC1xcm8gLXFyb2NvbnN0OjotcXRocmVhZGVkIC1EX1RIUkVBRF9TQUZFOkFJWDo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUjoke3BwYzY0X2FzbX06YWl4NjQ6ZGxmY246YWl4LXNoYXJlZDo6LXE2NCAtRzouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6LVggNjQiLAoKIwojIENyYXkgVDkwIGFuZCBzaW1pbGFyIChTRFNDKQojIEl0J3MgQmlnLWVuZGlhbiwgYnV0IHRoZSBhbGdvcml0aG1zIHdvcmsgcHJvcGVybHkgd2hlbiBCX0VORElBTiBpcyBOT1QKIyBkZWZpbmVkLiAgVGhlIFQ5MCBpbnRzIGFuZCBsb25ncyBhcmUgOCBieXRlcyBsb25nLCBhbmQgYXBwYXJlbnRseSB0aGUKIyBCX0VORElBTiBjb2RlIGFzc3VtZXMgNCBieXRlIGludHMuICBGb3J0dW5hdGVseSwgdGhlIG5vbi1CX0VORElBTiBhbmQKIyBub24gTF9FTkRJQU4gY29kZSBhbGlnbnMgdGhlIGJ5dGVzIGluIGVhY2ggd29yZCBjb3JyZWN0bHkuCiMKIyBUaGUgQklUX0ZJRUxEX0xJTUlUUyBkZWZpbmUgaXMgdG8gYXZvaWQgdHdvIGZhdGFsIGNvbXBpbGVyIGVycm9yczoKIydUYWtpbmcgdGhlIGFkZHJlc3Mgb2YgYSBiaXQgZmllbGQgaXMgbm90IGFsbG93ZWQuICcKIydBbiBleHByZXNzaW9uIHdpdGggYml0IGZpZWxkIGV4aXN0cyBhcyB0aGUgb3BlcmFuZCBvZiAic2l6ZW9mIiAnCiMgKHdyaXR0ZW4gYnkgV2F5bmUgU2Nocm9lZGVyIDxzY2hyb2VkZUBTRFNDLkVEVT4pCiMKIyBqOTAgaXMgY29uc2lkZXJlZCB0aGUgYmFzZSBtYWNoaW5lIHR5cGUgZm9yIHVuaWNvcyBtYWNoaW5lcywKIyBzbyB0aGlzIGNvbmZpZ3VyYXRpb24gaXMgbm93IGNhbGxlZCAiY3JheS1qOTAiIC4uLgoiY3JheS1qOTAiLCAiY2M6IC1EQklUX0ZJRUxEX0xJTUlUUyAtRFRFUk1JT1M6Oih1bmtub3duKTpDUkFZOjpTSVhUWV9GT1VSX0JJVF9MT05HIERFU19JTlQ6OjoiLAoKIwojIENyYXkgVDNFIChSZXNlYXJjaCBDZW50ZXIgSnVlbGljaCwgYmVja21hbkBhY2wubGFubC5nb3YpCiMKIyBUaGUgQklUX0ZJRUxEX0xJTUlUUyBkZWZpbmUgd2FzIHdyaXR0ZW4gZm9yIHRoZSBDOTAgKGl0IHNlZW1zKS4gIEkgYWRkZWQKIyBhbm90aGVyIHVzZS4gIEJhc2ljYWxseSwgdGhlIHByb2JsZW0gaXMgdGhhdCB0aGUgVDNFIHVzZXMgc29tZSBiaXQgZmllbGRzCiMgZm9yIHNvbWUgc3RfYWRkciBzdHVmZiwgYW5kIHRoZW4gc2l6ZW9mIGFuZCBhZGRyZXNzLW9mIGZhaWxzCiMgSSBjb3VsZCBub3QgdXNlIHRoZSBhbXMvYWxwaGEubyBvcHRpb24gYmVjYXVzZSB0aGUgQ3JheSBhc3NlbWJsZXIsICdjYW0nCiMgZGlkIG5vdCBsaWtlIGl0LgoiY3JheS10M2UiLCAiY2M6IC1EQklUX0ZJRUxEX0xJTUlUUyAtRFRFUk1JT1M6Oih1bmtub3duKTpDUkFZOjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UOjo6IiwKCiMgREdVWCwgODgxMDAuCiJkZ3V4LVIzLWdjYyIsCSJnY2M6LU8zIC1mb21pdC1mcmFtZS1wb2ludGVyOjoodW5rbm93bik6OjpSQzRfSU5ERVggREVTX1VOUk9MTDo6OiIsCiJkZ3V4LVI0LWdjYyIsCSJnY2M6LU8zIC1mb21pdC1mcmFtZS1wb2ludGVyOjoodW5rbm93bik6Oi1sbnNsIC1sc29ja2V0OlJDNF9JTkRFWCBERVNfVU5ST0xMOjo6IiwKImRndXgtUjQteDg2LWdjYyIsCSJnY2M6LU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1ETF9FTkRJQU46Oih1bmtub3duKTo6LWxuc2wgLWxzb2NrZXQ6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219IiwKCiMgU2luaXgvUmVsaWFudFVOSVggUk00MDAKIyBOT1RFOiBUaGUgQ0RTKysgQ29tcGlsZXIgdXAgdG8gVjIuMEJzb21ldGhpbmcgaGFzIHRoZSBJUklYX0NDX0JVRyBvcHRpbWl6ZXIgcHJvYmxlbS4gQmV0dGVyIHVzZSAtZyAgKi8KIlJlbGlhbnRVTklYIiwiY2M6LUtQSUMgLWcgLURURVJNSU9TIC1EQl9FTkRJQU46Oi1LdGhyZWFkOlNOSTotbHNvY2tldCAtbG5zbCAtbGMgLUwvdXNyL3VjYmxpYiAtbHVjYjpCTl9MTE9ORyBERVNfUFRSIERFU19SSVNDMiBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06ZGxmY246cmVsaWFudHVuaXgtc2hhcmVkOjo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiU0lOSVgiLCJjYzotTzo6KHVua25vd24pOlNOSTotbHNvY2tldCAtbG5zbCAtbGMgLUwvdXNyL3VjYmxpYiAtbHVjYjpSQzRfSU5ERVggUkM0X0NIQVI6OjoiLAoiU0lOSVgtTiIsIi91c3IvdWNiL2NjOi1PMiAtbWlzYWxpZ25lZDo6KHVua25vd24pOjotbHVjYjpSQzRfSU5ERVggUkM0X0NIQVI6OjoiLAoKIyBTSUVNRU5TIEJTMjAwMC9PU0Q6IGFuIEVCQ0RJQy1iYXNlZCBtYWluZnJhbWUKIkJTMjAwMC1PU0QiLCJjODk6LU8gLVhMTE1MIC1YTExNSyAtWEwgLURCX0VORElBTiAtRENIQVJTRVRfRUJDRElDOjoodW5rbm93bik6Oi1sc29ja2V0IC1sbnNsOlRISVJUWV9UV09fQklUIERFU19QVFIgREVTX1VOUk9MTCBNRDJfQ0hBUiBSQzRfSU5ERVggUkM0X0NIQVIgQkZfUFRSOjo6IiwKCiMgT1MvMzkwIFVuaXggYW4gRUJDRElDLWJhc2VkIFVuaXggc3lzdGVtIG9uIElCTSBtYWluZnJhbWUKIyBZb3UgbmVlZCB0byBjb21waWxlIHVzaW5nIHRoZSBjODkuc2ggd3JhcHBlciBpbiB0aGUgdG9vbHMgZGlyZWN0b3J5LCBiZWNhdXNlIHRoZQojIElCTSBjb21waWxlciBkb2VzIG5vdCBsaWtlIHRoZSAtTCBzd2l0Y2ggYWZ0ZXIgYW55IG9iamVjdCBtb2R1bGVzLgojCiJPUzM5MC1Vbml4IiwiYzg5LnNoOi1PIC1EQl9FTkRJQU4gLURDSEFSU0VUX0VCQ0RJQyAtRE5PX1NZU19QQVJBTV9IICAtRF9BTExfU09VUkNFOjoodW5rbm93bik6OjpUSElSVFlfVFdPX0JJVCBERVNfUFRSIERFU19VTlJPTEwgTUQyX0NIQVIgUkM0X0lOREVYIFJDNF9DSEFSIEJGX1BUUjo6OiIsCgojIFZpc3VhbCBDIHRhcmdldHMKIwojIFdpbjY0IHRhcmdldHMsIFdJTjY0SSBkZW5vdGVzIElBLTY0IGFuZCBXSU42NEEgLSBBTUQ2NAoiVkMtV0lONjRJIiwiY2w6LVczIC1HczAgLUd5IC1ub2xvZ28gLURPUEVOU1NMX1NZU05BTUVfV0lOMzIgLURXSU4zMl9MRUFOX0FORF9NRUFOIC1ETF9FTkRJQU4gLURVTklDT0RFIC1EX1VOSUNPREUgLURfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU6OjpXSU42NEk6OlNJWFRZX0ZPVVJfQklUIFJDNF9DSFVOS19MTCBERVNfSU5UIEVYUE9SVF9WQVJfQVNfRk46aWE2NGNwdWlkLm86aWE2NC5vIGlhNjQtbW9udC5vOjphZXNfY29yZS5vIGFlc19jYmMubyBhZXMtaWE2NC5vOjptZDUtaWE2NC5vOnNoYTEtaWE2NC5vIHNoYTI1Ni1pYTY0Lm8gc2hhNTEyLWlhNjQubzo6Ojo6OjpnaGFzaC1pYTY0Lm86Omlhczp3aW4zMiIsCiJWQy1XSU42NEEiLCJjbDotVzMgLUdzMCAtR3kgLW5vbG9nbyAtRE9QRU5TU0xfU1lTTkFNRV9XSU4zMiAtRFdJTjMyX0xFQU5fQU5EX01FQU4gLURMX0VORElBTiAtRFVOSUNPREUgLURfVU5JQ09ERSAtRF9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTo6OldJTjY0QTo6U0lYVFlfRk9VUl9CSVQgUkM0X0NIVU5LX0xMIERFU19JTlQgRVhQT1JUX1ZBUl9BU19GTjoiLmV2YWx7bXkgJGFzbT0keDg2XzY0X2FzbTskYXNtPX5zL3g4Nl82NC1nY2NcLm8vYm5fYXNtLm8vOyRhc219LiI6YXV0bzp3aW4zMiIsCiJkZWJ1Zy1WQy1XSU42NEkiLCJjbDotVzMgLUdzMCAtR3kgLVppIC1ub2xvZ28gLURPUEVOU1NMX1NZU05BTUVfV0lOMzIgLURXSU4zMl9MRUFOX0FORF9NRUFOIC1ETF9FTkRJQU4gLURVTklDT0RFIC1EX1VOSUNPREUgLURfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU6OjpXSU42NEk6OlNJWFRZX0ZPVVJfQklUIFJDNF9DSFVOS19MTCBERVNfSU5UIEVYUE9SVF9WQVJfQVNfRk46aWE2NGNwdWlkLm86aWE2NC5vOjphZXNfY29yZS5vIGFlc19jYmMubyBhZXMtaWE2NC5vOjptZDUtaWE2NC5vOnNoYTEtaWE2NC5vIHNoYTI1Ni1pYTY0Lm8gc2hhNTEyLWlhNjQubzo6Ojo6OjpnaGFzaC1pYTY0Lm86Omlhczp3aW4zMiIsCiJkZWJ1Zy1WQy1XSU42NEEiLCJjbDotVzMgLUdzMCAtR3kgLVppIC1ub2xvZ28gLURPUEVOU1NMX1NZU05BTUVfV0lOMzIgLURXSU4zMl9MRUFOX0FORF9NRUFOIC1ETF9FTkRJQU4gLURVTklDT0RFIC1EX1VOSUNPREUgLURfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU6OjpXSU42NEE6OlNJWFRZX0ZPVVJfQklUIFJDNF9DSFVOS19MTCBERVNfSU5UIEVYUE9SVF9WQVJfQVNfRk46Ii5ldmFse215ICRhc209JHg4Nl82NF9hc207JGFzbT1+cy94ODZfNjQtZ2NjXC5vL2JuX2FzbS5vLzskYXNtfS4iOmF1dG86d2luMzIiLAojIHg4NiBXaW4zMiB0YXJnZXQgZGVmYXVsdHMgdG8gQU5TSSBBUEksIGlmIHlvdSB3YW50IFVOSUNPREUsIGNvbXBsZW1lbnQKIyAncGVybCBDb25maWd1cmUgVkMtV0lOMzInIHdpdGggJy1EVU5JQ09ERSAtRF9VTklDT0RFJwoiVkMtV0lOMzIiLCJjbDotVzMgLUdzMCAtR0YgLUd5IC1ub2xvZ28gLURPUEVOU1NMX1NZU05BTUVfV0lOMzIgLURXSU4zMl9MRUFOX0FORF9NRUFOIC1ETF9FTkRJQU4gLURfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU6OjpXSU4zMjo6Qk5fTExPTkcgUkM0X0lOREVYIEVYUE9SVF9WQVJfQVNfRk4gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2FzbX06d2luMzJuOndpbjMyIiwKIyBVbmlmaWVkIENFIHRhcmdldAoiZGVidWctVkMtV0lOMzIiLCJjbDotVzMgLUdzMCAtR0YgLUd5IC1aaSAtbm9sb2dvIC1ET1BFTlNTTF9TWVNOQU1FX1dJTjMyIC1EV0lOMzJfTEVBTl9BTkRfTUVBTiAtRExfRU5ESUFOIC1EX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFOjo6V0lOMzI6OkJOX0xMT05HIFJDNF9JTkRFWCBFWFBPUlRfVkFSX0FTX0ZOICR7eDg2X2djY19vcHRzfToke3g4Nl9hc219OndpbjMybjp3aW4zMiIsCiJWQy1DRSIsImNsOjo6OldJTkNFOjpCTl9MTE9ORyBSQzRfSU5ERVggRVhQT1JUX1ZBUl9BU19GTiAke3g4Nl9nY2Nfb3B0c306JHtub19hc219OndpbjMyIiwKCiMgQm9ybGFuZCBDKysgNC41CiJCQy0zMiIsImJjYzMyOjo6OldJTjMyOjpCTl9MTE9ORyBERVNfUFRSIFJDNF9JTkRFWCBFWFBPUlRfVkFSX0FTX0ZOOiR7bm9fYXNtfTp3aW4zMiIsCgojIE1pbkdXCiJtaW5ndyIsICJnY2M6LW1uby1jeWd3aW4gLURMX0VORElBTiAtRFdJTjMyX0xFQU5fQU5EX01FQU4gLWZvbWl0LWZyYW1lLXBvaW50ZXIgLU8zIC1tYXJjaD1pNDg2IC1XYWxsOjotRF9NVDpNSU5HVzMyOi1sd3MyXzMyIC1sZ2RpMzIgLWxjcnlwdDMyOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfSBFWFBPUlRfVkFSX0FTX0ZOOiR7eDg2X2FzbX06Y29mZjp3aW4zMjpjeWd3aW4tc2hhcmVkOi1EX1dJTkRMTCAtRE9QRU5TU0xfVVNFX0FQUExJTks6LW1uby1jeWd3aW46LmRsbC5hIiwKIyBBcyBmb3IgT1BFTlNTTF9VU0VfQVBQTElOSy4gQXBwbGluayBtYWtlcyBpdCBwb3NzaWJsZSB0byB1c2UgLmRsbAojIGNvbXBpbGVkIHdpdGggb25lIGNvbXBpbGVyIHdpdGggYXBwbGljYXRpb24gY29tcGlsZWQgd2l0aCBhbm90aGVyCiMgY29tcGlsZXIuIEl0J3MgcG9zc2libGUgdG8gZW5nYWdlIEFwcGxpbmsgc3VwcG9ydCBpbiBtaW5ndzY0IGJ1aWxkLAojIGJ1dCBpdCdzIG5vdCBkb25lLCBiZWNhdXNlIHRpbGwgbWluZ3c2NCBzdXBwb3J0cyBzdHJ1Y3R1cmVkIGV4Y2VwdGlvbgojIGhhbmRsaW5nLCBvbmUgY2FuJ3Qgc2VyaW91c2x5IGNvbnNpZGVyIGl0cyBiaW5hcmllcyBmb3IgdXNpbmcgd2l0aAojIG5vbi1taW5ndzY0IHJ1bi10aW1lIGVudmlyb25tZW50LiBBbmQgYXMgbWluZ3c2NCBpcyBhbHdheXMgY29uc2lzdGVudAojIHdpdGggaXRzZWxmLCBBcHBsaW5rIGlzIG5ldmVyIGVuZ2FnZWQgYW5kIGNhbiBhcyB3ZWxsIGJlIG9taXR0ZWQuCiJtaW5ndzY0IiwgImdjYzotbW5vLWN5Z3dpbiAtRExfRU5ESUFOIC1PMyAtV2FsbCAtRFdJTjMyX0xFQU5fQU5EX01FQU4gLURVTklDT0RFIC1EX1VOSUNPREU6Oi1EX01UOk1JTkdXNjQ6LWx3czJfMzIgLWxnZGkzMiAtbGNyeXB0MzI6U0lYVFlfRk9VUl9CSVQgUkM0X0NIVU5LX0xMIERFU19JTlQgRVhQT1JUX1ZBUl9BU19GTjoke3g4Nl82NF9hc219Om1pbmd3NjQ6d2luMzI6Y3lnd2luLXNoYXJlZDotRF9XSU5ETEw6LW1uby1jeWd3aW46LmRsbC5hIiwKCiMgVVdJTiAKIlVXSU4iLCAiY2M6LURURVJNSU9TIC1ETF9FTkRJQU4gLU8gLVdhbGw6OjpVV0lOOjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHtub19hc219OndpbjMyIiwKCiMgQ3lnd2luCiJDeWd3aW4tcHJlMS4zIiwgImdjYzotRFRFUk1JT1MgLURMX0VORElBTiAtZm9taXQtZnJhbWUtcG9pbnRlciAtTzMgLW00ODYgLVdhbGw6Oih1bmtub3duKTpDWUdXSU4zMjo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7bm9fYXNtfTp3aW4zMiIsCiJDeWd3aW4iLCAiZ2NjOi1EVEVSTUlPUyAtRExfRU5ESUFOIC1mb21pdC1mcmFtZS1wb2ludGVyIC1PMyAtbWFyY2g9aTQ4NiAtV2FsbDo6OkNZR1dJTjMyOjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfYXNtfTpjb2ZmOmRsZmNuOmN5Z3dpbi1zaGFyZWQ6LURfV0lORExMOi1zaGFyZWQ6LmRsbC5hIiwKImRlYnVnLUN5Z3dpbiIsICJnY2M6LURURVJNSU9TIC1ETF9FTkRJQU4gLW1hcmNoPWk0ODYgLVdhbGwgLURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1ET1BFTlNTTF9OT19BU00gLWcgLVdmb3JtYXQgLVdzaGFkb3cgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyAtV2Vycm9yOjo6Q1lHV0lOMzI6Ojoke25vX2FzbX06ZGxmY246Y3lnd2luLXNoYXJlZDotRF9XSU5ETEw6LXNoYXJlZDouZGxsLmEiLAoKIyBOZXRXYXJlIGZyb20gRGF2aWQgV2FyZCAoZHN3YXJkQG5vdmVsbC5jb20pCiMgcmVxdWlyZXMgZWl0aGVyIE1ldHJvV2Vya3MgTkxNIGRldmVsb3BtZW50IHRvb2xzLCBvciBnY2MgLyBubG1jb252CiMgTmV0V2FyZSBkZWZhdWx0cyBzb2NrZXQgYmlvIHRvIFdpblNvY2sgc29ja2V0cy4gSG93ZXZlciwKIyB0aGUgYnVpbGRzIGNhbiBiZSBjb25maWd1cmVkIHRvIHVzZSBCU0Qgc29ja2V0cyBpbnN0ZWFkLgojIG5ldHdhcmUtY2xpYiA9PiBsZWdhY3kgQ0xpYiBjLXJ1bnRpbWUgc3VwcG9ydAoibmV0d2FyZS1jbGliIiwgIm13Y2NubG06Ojo6Ojoke3g4Nl9nY2Nfb3B0c306OiIsCiJuZXR3YXJlLWNsaWItYnNkc29jayIsICJtd2NjbmxtOjo6Ojo6JHt4ODZfZ2NjX29wdHN9OjoiLAoibmV0d2FyZS1jbGliLWdjYyIsICJpNTg2LW5ldHdhcmUtZ2NjOi1ub3N0ZGluYyAtSS9uZGsvbndzZGsvaW5jbHVkZS9ubG0gLUkvbmRrL3dzMjk1c2RrL2luY2x1ZGUgLURMX0VORElBTiAtRE5FVFdBUkVfQ0xJQiAtRE9QRU5TU0xfU1lTTkFNRV9ORVRXQVJFIC1PMiAtV2FsbDo6Ojo6JHt4ODZfZ2NjX29wdHN9OjoiLAoibmV0d2FyZS1jbGliLWJzZHNvY2stZ2NjIiwgImk1ODYtbmV0d2FyZS1nY2M6LW5vc3RkaW5jIC1JL25kay9ud3Nkay9pbmNsdWRlL25sbSAtRE5FVFdBUkVfQlNEU09DSyAtRE5FVERCX1VTRV9JTlRFUk5FVCAtRExfRU5ESUFOIC1ETkVUV0FSRV9DTElCIC1ET1BFTlNTTF9TWVNOQU1FX05FVFdBUkUgLU8yIC1XYWxsOjo6Ojoke3g4Nl9nY2Nfb3B0c306OiIsCiMgbmV0d2FyZS1saWJjID0+IExpYkMvTktTIHN1cHBvcnQKIm5ldHdhcmUtbGliYyIsICJtd2NjbmxtOjo6Ojo6Qk5fTExPTkcgJHt4ODZfZ2NjX29wdHN9OjoiLAoibmV0d2FyZS1saWJjLWJzZHNvY2siLCAibXdjY25sbTo6Ojo6OkJOX0xMT05HICR7eDg2X2djY19vcHRzfTo6IiwKIm5ldHdhcmUtbGliYy1nY2MiLCAiaTU4Ni1uZXR3YXJlLWdjYzotbm9zdGRpbmMgLUkvbmRrL2xpYmMvaW5jbHVkZSAtSS9uZGsvbGliYy9pbmNsdWRlL3dpbnNvY2sgLURMX0VORElBTiAtRE5FVFdBUkVfTElCQyAtRE9QRU5TU0xfU1lTTkFNRV9ORVRXQVJFIC1EVEVSTUlPIC1PMiAtV2FsbDo6Ojo6Qk5fTExPTkcgJHt4ODZfZ2NjX29wdHN9OjoiLAoibmV0d2FyZS1saWJjLWJzZHNvY2stZ2NjIiwgImk1ODYtbmV0d2FyZS1nY2M6LW5vc3RkaW5jIC1JL25kay9saWJjL2luY2x1ZGUgLURORVRXQVJFX0JTRFNPQ0sgLURMX0VORElBTiAtRE5FVFdBUkVfTElCQyAtRE9QRU5TU0xfU1lTTkFNRV9ORVRXQVJFIC1EVEVSTUlPIC1PMiAtV2FsbDo6Ojo6Qk5fTExPTkcgJHt4ODZfZ2NjX29wdHN9OjoiLAoKIyBESkdQUAoiREpHUFAiLCAiZ2NjOi1JL2Rldi9lbnYvV0FUVF9ST09UL2luYyAtRFRFUk1JTyAtRExfRU5ESUFOIC1mb21pdC1mcmFtZS1wb2ludGVyIC1PMiAtV2FsbDo6Ok1TRE9TOi1ML2Rldi9lbnYvV0FUVF9ST09UL2xpYiAtbHdhdHQ6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2FzbX06YS5vdXQ6IiwKCiMgVWx0cml4IGZyb20gQmVybmhhcmQgU2ltb24gPHNpbW9uQHppZC50dXdpZW4uYWMuYXQ+CiJ1bHRyaXgtY2MiLCJjYzotc3RkMSAtTyAtT2xpbWl0IDI1MDAgLURMX0VORElBTjo6KHVua25vd24pOjo6Ojo6OiIsCiJ1bHRyaXgtZ2NjIiwiZ2NjOi1PMyAtRExfRU5ESUFOOjoodW5rbm93bik6OjpCTl9MTE9ORzo6OjoiLAojIEsmUiBDIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQ7IHlvdSBuZWVkIGdjYyBvbiBvbGQgVWx0cml4IGluc3RhbGxhdGlvbnMKIyMidWx0cml4IiwiY2M6LU8yIC1ETk9QUk9UTyAtRE5PQ09OU1QgLURMX0VORElBTjo6KHVua25vd24pOjo6Ojo6OiIsCgojIyMjIyBNYWNPUyBYIChhLmsuYS4gUmhhcHNvZHkgb3IgRGFyd2luKSBzZXR1cAoicmhhcHNvZHktcHBjLWNjIiwiY2M6LU8zIC1EQl9FTkRJQU46Oih1bmtub3duKTpNQUNPU1hfUkhBUFNPRFk6OkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06OiIsCiJkYXJ3aW4tcHBjLWNjIiwiY2M6LWFyY2ggcHBjIC1PMyAtREJfRU5ESUFOIC1XYSwtZm9yY2VfY3B1c3VidHlwZV9BTEw6Oi1EX1JFRU5UUkFOVDpNQUNPU1g6LVdsLC1zZWFyY2hfcGF0aHNfZmlyc3QlOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke3BwYzMyX2FzbX06b3N4MzI6ZGxmY246ZGFyd2luLXNoYXJlZDotZlBJQyAtZm5vLWNvbW1vbjotYXJjaCBwcGMgLWR5bmFtaWNsaWI6LlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikuZHlsaWIiLAoiZGFyd2luNjQtcHBjLWNjIiwiY2M6LWFyY2ggcHBjNjQgLU8zIC1EQl9FTkRJQU46Oi1EX1JFRU5UUkFOVDpNQUNPU1g6LVdsLC1zZWFyY2hfcGF0aHNfZmlyc3QlOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7cHBjNjRfYXNtfTpvc3g2NDpkbGZjbjpkYXJ3aW4tc2hhcmVkOi1mUElDIC1mbm8tY29tbW9uOi1hcmNoIHBwYzY0IC1keW5hbWljbGliOi5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpLmR5bGliIiwKImRhcndpbi1pMzg2LWNjIiwiY2M6LWFyY2ggaTM4NiAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLURMX0VORElBTjo6LURfUkVFTlRSQU5UOk1BQ09TWDotV2wsLXNlYXJjaF9wYXRoc19maXJzdCU6Qk5fTExPTkcgUkM0X0lOVCBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6Ii5ldmFse215ICRhc209JHg4Nl9hc207JGFzbT1+cy9jYXN0XC01ODZcLm8vLzskYXNtfS4iOm1hY29zeDpkbGZjbjpkYXJ3aW4tc2hhcmVkOi1mUElDIC1mbm8tY29tbW9uOi1hcmNoIGkzODYgLWR5bmFtaWNsaWI6LlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikuZHlsaWIiLAoiZGVidWctZGFyd2luLWkzODYtY2MiLCJjYzotYXJjaCBpMzg2IC1nMyAtRExfRU5ESUFOOjotRF9SRUVOVFJBTlQ6TUFDT1NYOi1XbCwtc2VhcmNoX3BhdGhzX2ZpcnN0JTpCTl9MTE9ORyBSQzRfSU5UIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke3g4Nl9hc219Om1hY29zeDpkbGZjbjpkYXJ3aW4tc2hhcmVkOi1mUElDIC1mbm8tY29tbW9uOi1hcmNoIGkzODYgLWR5bmFtaWNsaWI6LlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikuZHlsaWIiLAoiZGFyd2luNjQteDg2XzY0LWNjIiwiY2M6LWFyY2ggeDg2XzY0IC1PMyAtRExfRU5ESUFOIC1XYWxsOjotRF9SRUVOVFJBTlQ6TUFDT1NYOi1XbCwtc2VhcmNoX3BhdGhzX2ZpcnN0JTpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6Ii5ldmFse215ICRhc209JHg4Nl82NF9hc207JGFzbT1+cy9yYzRcLVteOl0rLy87JGFzbX0uIjptYWNvc3g6ZGxmY246ZGFyd2luLXNoYXJlZDotZlBJQyAtZm5vLWNvbW1vbjotYXJjaCB4ODZfNjQgLWR5bmFtaWNsaWI6LlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikuZHlsaWIiLAoiZGVidWctZGFyd2luLXBwYy1jYyIsImNjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtREJfRU5ESUFOIC1nIC1XYWxsIC1POjotRF9SRUVOVFJBTlQ6TUFDT1NYOjpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6JHtwcGMzMl9hc219Om9zeDMyOmRsZmNuOmRhcndpbi1zaGFyZWQ6LWZQSUM6LWR5bmFtaWNsaWI6LlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikuZHlsaWIiLAojIGlQaG9uZU9TL2lPUwoiaXBob25lb3MtY3Jvc3MiLCJsbHZtLWdjYzotTzMgLWlzeXNyb290IFwkKENST1NTX1RPUCkvU0RLcy9cJChDUk9TU19TREspIC1mb21pdC1mcmFtZS1wb2ludGVyIC1mbm8tY29tbW9uOjotRF9SRUVOVFJBTlQ6aU9TOi1XbCwtc2VhcmNoX3BhdGhzX2ZpcnN0JTpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6JHtub19hc219OmRsZmNuOmRhcndpbi1zaGFyZWQ6LWZQSUMgLWZuby1jb21tb246LWR5bmFtaWNsaWI6LlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikuZHlsaWIiLAoKIyMjIyMgQS9VWAoiYXV4My1nY2MiLCJnY2M6LU8yIC1EVEVSTUlPOjoodW5rbm93bik6QVVYOi1sYnNkOlJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjo6OiIsCgojIyMjIyBTb255IE5FV1MtT1MgNC54CiJuZXdzb3M0LWdjYyIsImdjYzotTyAtREJfRU5ESUFOOjoodW5rbm93bik6TkVXUzQ6LWxtbGQgLWxpYmVydHk6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEwgQkZfUFRSOjo6OiIsCgojIyMjIyBHTlUgSHVyZAoiaHVyZC14ODYiLCAgImdjYzotRExfRU5ESUFOIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtbWFyY2g9aTQ4NiAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUMiLAoKIyMjIyMgT1MvMiBFTVgKIk9TMi1FTVgiLCAiZ2NjOjo6Ojo6OjoiLAoKIyMjIyMgVnhXb3JrcyBmb3IgdmFyaW91cyB0YXJnZXRzCiJ2eHdvcmtzLXBwYzYweCIsImNjcHBjOi1EX1JFRU5UUkFOVCAtbXJ0cCAtbWhhcmQtZmxvYXQgLW1zdHJpY3QtYWxpZ24gLWZuby1pbXBsaWNpdC1mcCAtRFBQQzMyX2ZwNjB4IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4gLWZuby1zdHJpY3QtYWxpYXNpbmcgLVdhbGwgLURDUFU9UFBDMzIgLURUT09MX0ZBTUlMWT1nbnUgLURUT09MPWdudSAtSVwkKFdJTkRfQkFTRSkvdGFyZ2V0L3Vzci9oIC1JXCQoV0lORF9CQVNFKS90YXJnZXQvdXNyL2gvd3JuL2NvcmVpcDo6OlZYV09SS1M6LVdsLC0tZGVmc3ltLF9fd3JzX3J0cF9iYXNlPTB4ZTAwMDAwMDAgLUwgXCQoV0lORF9CQVNFKS90YXJnZXQvdXNyL2xpYi9wcGMvUFBDMzIvY29tbW9uOjo6OjoiLAoidnh3b3Jrcy1wcGNnZW4iLCJjY3BwYzotRF9SRUVOVFJBTlQgLW1ydHAgLW1zb2Z0LWZsb2F0IC1tc3RyaWN0LWFsaWduIC1PMSAtZm5vLWJ1aWx0aW4gLWZuby1zdHJpY3QtYWxpYXNpbmcgLVdhbGwgLURDUFU9UFBDMzIgLURUT09MX0ZBTUlMWT1nbnUgLURUT09MPWdudSAtSVwkKFdJTkRfQkFTRSkvdGFyZ2V0L3Vzci9oIC1JXCQoV0lORF9CQVNFKS90YXJnZXQvdXNyL2gvd3JuL2NvcmVpcDo6OlZYV09SS1M6LVdsLC0tZGVmc3ltLF9fd3JzX3J0cF9iYXNlPTB4ZTAwMDAwMDAgLUwgXCQoV0lORF9CQVNFKS90YXJnZXQvdXNyL2xpYi9wcGMvUFBDMzIvc2Zjb21tb246Ojo6OiIsCiJ2eHdvcmtzLXBwYzQwNSIsImNjcHBjOi1nIC1tc29mdC1mbG9hdCAtbWxvbmdjYWxsIC1EQ1BVPVBQQzQwNSAtSVwkKFdJTkRfQkFTRSkvdGFyZ2V0L2g6OjpWWFdPUktTOi1yOjo6OjoiLAoidnh3b3Jrcy1wcGM3NTAiLCJjY3BwYzotYW5zaSAtbm9zdGRpbmMgLURQUEM3NTAgLURfUkVFTlRSQU5UIC1mdm9sYXRpbGUgLWZuby1idWlsdGluIC1mbm8tZm9yLXNjb3BlIC1mc2lnbmVkLWNoYXIgLVdhbGwgLW1zb2Z0LWZsb2F0IC1tbG9uZ2NhbGwgLURDUFU9UFBDNjA0IC1JXCQoV0lORF9CQVNFKS90YXJnZXQvaCBcJChERUJVR19GTEFHKTo6OlZYV09SS1M6LXI6Ojo6OiIsCiJ2eHdvcmtzLXBwYzc1MC1kZWJ1ZyIsImNjcHBjOi1hbnNpIC1ub3N0ZGluYyAtRFBQQzc1MCAtRF9SRUVOVFJBTlQgLWZ2b2xhdGlsZSAtZm5vLWJ1aWx0aW4gLWZuby1mb3Itc2NvcGUgLWZzaWduZWQtY2hhciAtV2FsbCAtbXNvZnQtZmxvYXQgLW1sb25nY2FsbCAtRENQVT1QUEM2MDQgLUlcJChXSU5EX0JBU0UpL3RhcmdldC9oIC1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRFBFREFOVElDIC1EREVCVUdfU0FGRVNUQUNLIC1EREVCVUcgLWc6OjpWWFdPUktTOi1yOjo6OjoiLAoidnh3b3Jrcy1wcGM4NjAiLCJjY3BwYzotbm9zdGRpbmMgLW1zb2Z0LWZsb2F0IC1EQ1BVPVBQQzg2MCAtRE5PX1NUUklOR1NfSCAtSVwkKFdJTkRfQkFTRSkvdGFyZ2V0L2g6OjpWWFdPUktTOi1yOjo6OjoiLAoidnh3b3Jrcy1zaW1saW51eCIsImNjcGVudGl1bTotQlwkKFdJTkRfQkFTRSkvaG9zdC9cJChXSU5EX0hPU1RfVFlQRSkvbGliL2djYy1saWIvIC1EX1ZTQl9DT05GSUdfRklMRT1cIlwkKFdJTkRfQkFTRSkvdGFyZ2V0L2xpYi9oL2NvbmZpZy92c2JDb25maWcuaFwiIC1ETF9FTkRJQU4gLURDUFU9U0lNTElOVVggLURUT09MX0ZBTUlMWT1nbnUgLURUT09MPWdudSAtZm5vLWJ1aWx0aW4gLWZuby1kZWZlci1wb3AgLUROT19TVFJJTkdTX0ggLUlcJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JXCQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIC1ET1BFTlNTTF9OT19IV19QQURMT0NLOjo6VlhXT1JLUzotcjo6JHtub19hc219Ojo6Ojo6cmFubGlicGVudGl1bToiLAoidnh3b3Jrcy1taXBzIiwiY2NtaXBzOi1tcnRwIC1taXBzMiAtTyAtRyAwIC1CXCQoV0lORF9CQVNFKS9ob3N0L1wkKFdJTkRfSE9TVF9UWVBFKS9saWIvZ2NjLWxpYi8gLURfVlNCX0NPTkZJR19GSUxFPVwiXCQoV0lORF9CQVNFKS90YXJnZXQvbGliL2gvY29uZmlnL3ZzYkNvbmZpZy5oXCIgLURDUFU9TUlQUzMyIC1tc29mdC1mbG9hdCAtbW5vLWJyYW5jaC1saWtlbHkgLURUT09MX0ZBTUlMWT1nbnUgLURUT09MPWdudSAtZm5vLWJ1aWx0aW4gLWZuby1kZWZlci1wb3AgLUROT19TVFJJTkdTX0ggLUlcJChXSU5EX0JBU0UpL3RhcmdldC91c3IvaCAtSVwkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcDo6LURfUkVFTlRSQU5UOlZYV09SS1M6LVdsLC0tZGVmc3ltLF9fd3JzX3J0cF9iYXNlPTB4ZTAwMDAwMDAgLUwgXCQoV0lORF9CQVNFKS90YXJnZXQvdXNyL2xpYi9taXBzL01JUFNJMzIvc2Zjb21tb246OiR7bWlwczMyX2FzbX06bzMyOjo6Ojo6cmFubGlibWlwczoiLAoKIyMjIyMgQ29tcGFxIE5vbi1TdG9wIEtlcm5lbCAoVGFuZGVtKQoidGFuZGVtLWM4OSIsImM4OTotV3cgLURfX1RBTkRFTSAtRF9YT1BFTl9TT1VSQ0UgLURfWE9QRU5fU09VUkNFX0VYVEVOREVEPTEgLURfVEFOREVNX1NPVVJDRSAtREJfRU5ESUFOOjoodW5rbm93bik6OjpUSElSVFlfVFdPX0JJVDo6OiIsCgojIHVDbGludXgKInVDbGludXgtZGlzdCIsIiRFTlZ7J0NDJ306XCQoQ0ZMQUdTKTo6LURfUkVFTlRSQU5UOjpcJChMREZMQUdTKSBcJChMRExJQlMpOkJOX0xMT05HOiR7bm9fYXNtfTokRU5WeydMSUJTU0xfZGxmY24nfTpsaW51eC1zaGFyZWQ6LWZQSUM6LXNoYXJlZDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTokRU5WeydSQU5MSUInfTo6IiwKInVDbGludXgtZGlzdDY0IiwiJEVOVnsnQ0MnfTpcJChDRkxBR1MpOjotRF9SRUVOVFJBTlQ6OlwkKExERkxBR1MpIFwkKExETElCUyk6U0lYVFlfRk9VUl9CSVRfTE9ORzoke25vX2FzbX06JEVOVnsnTElCU1NMX2RsZmNuJ306bGludXgtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6JEVOVnsnUkFOTElCJ306OiIsCgopOwoKbXkgQE1LMU1GX0J1aWxkcz1xdyhWQy1XSU42NEkgVkMtV0lONjRBCgkJICAgIGRlYnVnLVZDLVdJTjY0SSBkZWJ1Zy1WQy1XSU42NEEKCQkgICAgVkMtTlQgVkMtQ0UgVkMtV0lOMzIgZGVidWctVkMtV0lOMzIKCQkgICAgQkMtMzIgCgkJICAgIG5ldHdhcmUtY2xpYiBuZXR3YXJlLWNsaWItYnNkc29jawoJCSAgICBuZXR3YXJlLWxpYmMgbmV0d2FyZS1saWJjLWJzZHNvY2spOwoKbXkgJGlkeCA9IDA7Cm15ICRpZHhfY2MgPSAkaWR4Kys7Cm15ICRpZHhfY2ZsYWdzID0gJGlkeCsrOwpteSAkaWR4X3VuaXN0ZCA9ICRpZHgrKzsKbXkgJGlkeF90aHJlYWRfY2ZsYWcgPSAkaWR4Kys7Cm15ICRpZHhfc3lzX2lkID0gJGlkeCsrOwpteSAkaWR4X2xmbGFncyA9ICRpZHgrKzsKbXkgJGlkeF9ibl9vcHMgPSAkaWR4Kys7Cm15ICRpZHhfY3B1aWRfb2JqID0gJGlkeCsrOwpteSAkaWR4X2JuX29iaiA9ICRpZHgrKzsKbXkgJGlkeF9kZXNfb2JqID0gJGlkeCsrOwpteSAkaWR4X2Flc19vYmogPSAkaWR4Kys7Cm15ICRpZHhfYmZfb2JqID0gJGlkeCsrOwpteSAkaWR4X21kNV9vYmogPSAkaWR4Kys7Cm15ICRpZHhfc2hhMV9vYmogPSAkaWR4Kys7Cm15ICRpZHhfY2FzdF9vYmogPSAkaWR4Kys7Cm15ICRpZHhfcmM0X29iaiA9ICRpZHgrKzsKbXkgJGlkeF9ybWQxNjBfb2JqID0gJGlkeCsrOwpteSAkaWR4X3JjNV9vYmogPSAkaWR4Kys7Cm15ICRpZHhfd3Bfb2JqID0gJGlkeCsrOwpteSAkaWR4X2NtbGxfb2JqID0gJGlkeCsrOwpteSAkaWR4X21vZGVzX29iaiA9ICRpZHgrKzsKbXkgJGlkeF9lbmdpbmVzX29iaiA9ICRpZHgrKzsKbXkgJGlkeF9wZXJsYXNtX3NjaGVtZSA9ICRpZHgrKzsKbXkgJGlkeF9kc29fc2NoZW1lID0gJGlkeCsrOwpteSAkaWR4X3NoYXJlZF90YXJnZXQgPSAkaWR4Kys7Cm15ICRpZHhfc2hhcmVkX2NmbGFnID0gJGlkeCsrOwpteSAkaWR4X3NoYXJlZF9sZGZsYWcgPSAkaWR4Kys7Cm15ICRpZHhfc2hhcmVkX2V4dGVuc2lvbiA9ICRpZHgrKzsKbXkgJGlkeF9yYW5saWIgPSAkaWR4Kys7Cm15ICRpZHhfYXJmbGFncyA9ICRpZHgrKzsKbXkgJGlkeF9tdWx0aWxpYiA9ICRpZHgrKzsKCm15ICRwcmVmaXg9IiI7Cm15ICRsaWJkaXI9IiI7Cm15ICRvcGVuc3NsZGlyPSIiOwpteSAkZXhlX2V4dD0iIjsKbXkgJGluc3RhbGxfcHJlZml4PSAiJEVOVnsnSU5TVEFMTF9QUkVGSVgnfSI7Cm15ICRjcm9zc19jb21waWxlX3ByZWZpeD0iIjsKbXkgJGZpcHNkaXI9Ii91c3IvbG9jYWwvc3NsL2ZpcHMtMi4wIjsKbXkgJGZpcHNsaWJkaXI9IiI7Cm15ICRiYXNlYWRkcj0iMHhGQjAwMDAwIjsKbXkgJG5vX3RocmVhZHM9MDsKbXkgJHRocmVhZHM9MDsKbXkgJG5vX3NoYXJlZD0wOyAjIGJ1dCAibm8tc2hhcmVkIiBpcyBkZWZhdWx0Cm15ICR6bGliPTE7ICAgICAgIyBidXQgIm5vLXpsaWIiIGlzIGRlZmF1bHQKbXkgJG5vX2tyYjU9MDsgICAjIGJ1dCAibm8ta3JiNSIgaXMgaW1wbGllZCB1bmxlc3MgIi0td2l0aC1rcmI1LS4uLiIgaXMgdXNlZApteSAkbm9fcmZjMzc3OT0xOyAjIGJ1dCAibm8tcmZjMzc3OSIgaXMgZGVmYXVsdApteSAkbm9fYXNtPTA7Cm15ICRub19kc289MDsKbXkgJG5vX2dtcD0wOwpteSBAc2tpcD0oKTsKbXkgJE1ha2VmaWxlPSJNYWtlZmlsZSI7Cm15ICRkZXNfbG9jbD0iY3J5cHRvL2Rlcy9kZXNfbG9jbC5oIjsKbXkgJGRlcwk9ImNyeXB0by9kZXMvZGVzLmgiOwpteSAkYm4JPSJjcnlwdG8vYm4vYm4uaCI7Cm15ICRtZDIJPSJjcnlwdG8vbWQyL21kMi5oIjsKbXkgJHJjNAk9ImNyeXB0by9yYzQvcmM0LmgiOwpteSAkcmM0X2xvY2w9ImNyeXB0by9yYzQvcmM0X2xvY2wuaCI7Cm15ICRpZGVhCT0iY3J5cHRvL2lkZWEvaWRlYS5oIjsKbXkgJHJjMgk9ImNyeXB0by9yYzIvcmMyLmgiOwpteSAkYmYJPSJjcnlwdG8vYmYvYmZfbG9jbC5oIjsKbXkgJGJuX2FzbQk9ImJuX2FzbS5vIjsKbXkgJGRlc19lbmM9ImRlc19lbmMubyBmY3J5cHRfYi5vIjsKbXkgJGFlc19lbmM9ImFlc19jb3JlLm8gYWVzX2NiYy5vIjsKbXkgJGJmX2VuYwk9ImJmX2VuYy5vIjsKbXkgJGNhc3RfZW5jPSJjX2VuYy5vIjsKbXkgJHJjNF9lbmM9InJjNF9lbmMubyByYzRfc2tleS5vIjsKbXkgJHJjNV9lbmM9InJjNV9lbmMubyI7Cm15ICRtZDVfb2JqPSIiOwpteSAkc2hhMV9vYmo9IiI7Cm15ICRybWQxNjBfb2JqPSIiOwpteSAkY21sbF9lbmM9ImNhbWVsbGlhLm8gY21sbF9taXNjLm8gY21sbF9jYmMubyI7Cm15ICRwcm9jZXNzb3I9IiI7Cm15ICRkZWZhdWx0X3JhbmxpYjsKbXkgJHBlcmw7Cm15ICRmaXBzPTA7CgppZiAoZXhpc3RzICRFTlZ7RklQU0RJUn0pCgl7CgkkZmlwc2RpciA9ICRFTlZ7RklQU0RJUn07CgkkZmlwc2RpciA9fiBzL1wvJC8vOwoJfQoKIyBBbGwgb2YgdGhlIGZvbGxvd2luZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IChSQzUgd2FzIGVuYWJsZWQgYmVmb3JlIDAuOS44KToKCm15ICVkaXNhYmxlZCA9ICggIyAid2hhdCIgICAgICAgICA9PiAiY29tbWVudCIgW29yIHNwZWNpYWwga2V5d29yZCAiZXhwZXJpbWVudGFsIl0KCQkgImVjX25pc3RwXzY0X2djY18xMjgiID0+ICJkZWZhdWx0IiwKCQkgImdtcCIJCSAgPT4gImRlZmF1bHQiLAoJCSAianBha2UiICAgICAgICAgID0+ICJleHBlcmltZW50YWwiLAoJCSAibWQyIiAgICAgICAgICAgID0+ICJkZWZhdWx0IiwKCQkgInJjNSIgICAgICAgICAgICA9PiAiZGVmYXVsdCIsCgkJICJyZmMzNzc5IgkgID0+ICJkZWZhdWx0IiwKCQkgInNjdHAiICAgICAgID0+ICJkZWZhdWx0IiwKCQkgInNoYXJlZCIgICAgICAgICA9PiAiZGVmYXVsdCIsCgkJICJzdG9yZSIJICA9PiAiZXhwZXJpbWVudGFsIiwKCQkgInVuaXQtdGVzdCIJICA9PiAiZGVmYXVsdCIsCgkJICJ6bGliIiAgICAgICAgICAgPT4gImRlZmF1bHQiLAoJCSAiemxpYi1keW5hbWljIiAgID0+ICJkZWZhdWx0IgoJICAgICAgICk7Cm15IEBleHBlcmltZW50YWwgPSAoKTsKCiMgVGhpcyBpcyB3aGF0ICRkZXBmbGFncyB3aWxsIGxvb2sgbGlrZSB3aXRoIHRoZSBhYm92ZSBkZWZhdWx0cwojICh3ZSBuZWVkIHRoaXMgdG8gc2VlIGlmIHdlIHNob3VsZCBhZHZpc2UgdGhlIHVzZXIgdG8gcnVuICJtYWtlIGRlcGVuZCIpOgpteSAkZGVmYXVsdF9kZXBmbGFncyA9ICIgLURPUEVOU1NMX05PX0VDX05JU1RQXzY0X0dDQ18xMjggLURPUEVOU1NMX05PX0dNUCAtRE9QRU5TU0xfTk9fSlBBS0UgLURPUEVOU1NMX05PX01EMiAtRE9QRU5TU0xfTk9fUkM1IC1ET1BFTlNTTF9OT19SRkMzNzc5IC1ET1BFTlNTTF9OT19TQ1RQIC1ET1BFTlNTTF9OT19TVE9SRSAtRE9QRU5TU0xfTk9fVU5JVF9URVNUIjsKCiMgRXhwbGljaXQgIm5vLS4uLiIgb3B0aW9ucyB3aWxsIGJlIGNvbGxlY3RlZCBpbiAlZGlzYWJsZWQgYWxvbmcgd2l0aCB0aGUgZGVmYXVsdHMuCiMgVG8gcmVtb3ZlIHNvbWV0aGluZyBmcm9tICVkaXNhYmxlZCwgdXNlICJlbmFibGUtZm9vIiAodW5sZXNzIGl0J3MgZXhwZXJpbWVudGFsKS4KIyBGb3Igc3ltbWV0cnksICJkaXNhYmxlLWZvbyIgaXMgYSBzeW5vbnltIGZvciAibm8tZm9vIi4KCiMgRm9yIGZlYXR1cmVzIGNhbGxlZCAiZXhwZXJpbWVudGFsIiBoZXJlLCBhIG1vcmUgZXhwbGljaXQgImV4cGVyaW1lbnRhbC1mb28iIGlzIG5lZWRlZCB0byBlbmFibGUuCiMgV2Ugd2lsbCBjb2xsZWN0IHN1Y2ggcmVxdWVzdHMgaW4gQGV4cGVyaW1lbnRhbC4KIyBUbyBhdm9pZCBhY2NpZGVudGFsIHVzZSBvZiBleHBlcmltZW50YWwgZmVhdHVyZXMsIGFwcGxpY2F0aW9ucyB3aWxsIGhhdmUgdG8gdXNlIC1ET1BFTlNTTF9FWFBFUklNRU5UQUxfRk9PLgoKCm15ICRub19zc2UyPTA7CgomdXNhZ2UgaWYgKCQjQVJHViA8IDApOwoKbXkgJGZsYWdzOwpteSAkZGVwZmxhZ3M7Cm15ICRvcGVuc3NsX2V4cGVyaW1lbnRhbF9kZWZpbmVzOwpteSAkb3BlbnNzbF9hbGdvcml0aG1fZGVmaW5lczsKbXkgJG9wZW5zc2xfdGhyZWFkX2RlZmluZXM7Cm15ICRvcGVuc3NsX3N5c19kZWZpbmVzPSIiOwpteSAkb3BlbnNzbF9vdGhlcl9kZWZpbmVzOwpteSAkbGliczsKbXkgJGxpYmtyYjU9IiI7Cm15ICR0YXJnZXQ7Cm15ICRvcHRpb25zOwpteSAkc3ltbGluazsKbXkgJG1ha2VfZGVwZW5kPTA7Cm15ICV3aXRoYXJncz0oKTsKCm15IEBhcmd2Y29weT1AQVJHVjsKbXkgJGFyZ3ZzdHJpbmc9IiI7Cm15ICRhcmd2X3VucHJvY2Vzc2VkPTE7Cgp3aGlsZSgkYXJndl91bnByb2Nlc3NlZCkKCXsKCSRmbGFncz0iIjsKCSRkZXBmbGFncz0iIjsKCSRvcGVuc3NsX2V4cGVyaW1lbnRhbF9kZWZpbmVzPSIiOwoJJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXM9IiI7Cgkkb3BlbnNzbF90aHJlYWRfZGVmaW5lcz0iIjsKCSRvcGVuc3NsX3N5c19kZWZpbmVzPSIiOwoJJG9wZW5zc2xfb3RoZXJfZGVmaW5lcz0iIjsKCSRsaWJzPSIiOwoJJHRhcmdldD0iIjsKCSRvcHRpb25zPSIiOwoJJHN5bWxpbms9MTsKCgkkYXJndl91bnByb2Nlc3NlZD0wOwoJJGFyZ3ZzdHJpbmc9am9pbignICcsQGFyZ3Zjb3B5KTsKClBST0NFU1NfQVJHUzoKCWZvcmVhY2ggKEBhcmd2Y29weSkKCQl7CgkJcyAvXi1uby0vbm8tLzsgIyBzb21lIHBlb3BsZSBqdXN0IGNhbid0IHJlYWQgdGhlIGluc3RydWN0aW9ucwoKCQkjIHJld3JpdGUgc29tZSBvcHRpb25zIGluICJlbmFibGUtLi4uIiBmb3JtCgkJcyAvXi0/LT9zaGFyZWQkL2VuYWJsZS1zaGFyZWQvOwoJCXMgL15zY3RwJC9lbmFibGUtc2N0cC87CgkJcyAvXnRocmVhZHMkL2VuYWJsZS10aHJlYWRzLzsKCQlzIC9eemxpYiQvZW5hYmxlLXpsaWIvOwoJCXMgL156bGliLWR5bmFtaWMkL2VuYWJsZS16bGliLWR5bmFtaWMvOwoKCQlpZiAoL15uby0oLispJC8gfHwgL15kaXNhYmxlLSguKykkLykKCQkJewoJCQlpZiAoISgkZGlzYWJsZWR7JDF9IGVxICJleHBlcmltZW50YWwiKSkKCQkJCXsKCQkJCWlmICgkMSBlcSAic3NsIikKCQkJCQl7CgkJCQkJJGRpc2FibGVkeyJzc2wyIn0gPSAib3B0aW9uKHNzbCkiOwoJCQkJCSRkaXNhYmxlZHsic3NsMyJ9ID0gIm9wdGlvbihzc2wpIjsKCQkJCQl9CgkJCQllbHNpZiAoJDEgZXEgInRscyIpCgkJCQkJewoJCQkJCSRkaXNhYmxlZHsidGxzMSJ9ID0gIm9wdGlvbih0bHMpIgoJCQkJCX0KCQkJCWVsc2lmICgkMSBlcSAic3NsMy1tZXRob2QiKQoJCQkJCXsKCQkJCQkkZGlzYWJsZWR7InNzbDMtbWV0aG9kIn0gPSAib3B0aW9uKHNzbCkiOwoJCQkJCSRkaXNhYmxlZHsic3NsMyJ9ID0gIm9wdGlvbihzc2wpIjsKCQkJCQl9CgkJCQllbHNlCgkJCQkJewoJCQkJCSRkaXNhYmxlZHskMX0gPSAib3B0aW9uIjsKCQkJCQl9CgkJCQl9CQkJCgkJCX0KCQllbHNpZiAoL15lbmFibGUtKC4rKSQvIHx8IC9eZXhwZXJpbWVudGFsLSguKykkLykKCQkJewoJCQlteSAkYWxnbyA9ICQxOwoJCQlpZiAoJGRpc2FibGVkeyRhbGdvfSBlcSAiZXhwZXJpbWVudGFsIikKCQkJCXsKCQkJCWRpZSAiWW91IGFyZSByZXF1ZXN0aW5nIGFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlOyBwbGVhc2Ugc2F5ICdleHBlcmltZW50YWwtJGFsZ28nIGlmIHlvdSBhcmUgc3VyZVxuIgoJCQkJCXVubGVzcyAoL15leHBlcmltZW50YWwtLyk7CgkJCQlwdXNoIEBleHBlcmltZW50YWwsICRhbGdvOwoJCQkJfQoJCQlkZWxldGUgJGRpc2FibGVkeyRhbGdvfTsKCgkJCSR0aHJlYWRzID0gMSBpZiAoJGFsZ28gZXEgInRocmVhZHMiKTsKCQkJfQoJCWVsc2lmICgvXi0tdGVzdC1zYW5pdHkkLykKCQkJewoJCQlleGl0KCZ0ZXN0X3Nhbml0eSgpKTsKCQkJfQoJCWVsc2lmICgvXi0tc3RyaWN0LXdhcm5pbmdzLykKCQkJewoJCQkkc3RyaWN0X3dhcm5pbmdzID0gMTsKCQkJfQoJCWVsc2lmICgvXnJlY29uZmlndXJlLyB8fCAvXnJlY29uZi8pCgkJCXsKCQkJaWYgKG9wZW4oSU4sIjwkTWFrZWZpbGUiKSkKCQkJCXsKCQkJCXdoaWxlICg8SU4+KQoJCQkJCXsKCQkJCQljaG9tcDsKCQkJCQlpZiAoL15DT05GSUdVUkVfQVJHUz0oLiopLykKCQkJCQkJewoJCQkJCQkkYXJndnN0cmluZz0kMTsKCQkJCQkJQGFyZ3Zjb3B5PXNwbGl0KCcgJywkYXJndnN0cmluZyk7CgkJCQkJCWRpZSAiSW5jb3JyZWN0IGRhdGEgdG8gcmVjb25maWd1cmUsIHBsZWFzZSBkbyBhIG5vcm1hbCBjb25maWd1cmF0aW9uXG4iCgkJCQkJCQlpZiAoZ3JlcCgvXnJlY29uZi8sQGFyZ3Zjb3B5KSk7CgkJCQkJCXByaW50ICJSZWNvbmZpZ3VyaW5nIHdpdGg6ICRhcmd2c3RyaW5nXG4iOwoJCQkJCQkkYXJndl91bnByb2Nlc3NlZD0xOwoJCQkJCQljbG9zZShJTik7CgkJCQkJCWxhc3QgUFJPQ0VTU19BUkdTOwoJCQkJCQl9CgkJCQkJfQoJCQkJY2xvc2UoSU4pOwoJCQkJfQoJCQlkaWUgIkluc3VmZmljaWVudCBkYXRhIHRvIHJlY29uZmlndXJlLCBwbGVhc2UgZG8gYSBub3JtYWwgY29uZmlndXJhdGlvblxuIjsKCQkJfQoJCWVsc2lmICgvXjM4NiQvKQoJCQl7ICRwcm9jZXNzb3I9Mzg2OyB9CgkJZWxzaWYgKC9eZmlwcyQvKQoJCQl7CgkJCSRmaXBzPTE7CgkJCX0KCQllbHNpZiAoL15yc2FyZWYkLykKCQkJewoJCQkjIE5vIFJTQXJlZiBzdXBwb3J0IGFueSBtb3JlIHNpbmNlIGl0J3Mgbm90IG5lZWRlZC4KCQkJIyBUaGUgY2hlY2sgZm9yIHRoZSBvcHRpb24gaXMgdGhlcmUgc28gc2NyaXB0cyBhcmVuJ3QKCQkJIyBicm9rZW4KCQkJfQoJCWVsc2lmICgvXlstK10vKQoJCQl7CgkJCWlmICgvXi1bbExdKC4qKSQvIG9yIC9eLVdsLC8pCgkJCQl7CgkJCQkkbGlicy49JF8uIiAiOwoJCQkJfQoJCQllbHNpZiAoL14tW14tXS8gb3IgL15cKy8pCgkJCQl7CgkJCQkkXyA9fiBzLyUoWzAtOWEtZl17MSwyfSkvY2hyKGhleCgkMSkpL2dlaTsKCQkJCSRmbGFncy49JF8uIiAiOwoJCQkJfQoJCQllbHNpZiAoL14tLXByZWZpeD0oLiopJC8pCgkJCQl7CgkJCQkkcHJlZml4PSQxOwoJCQkJfQoJCQllbHNpZiAoL14tLWxpYmRpcj0oLiopJC8pCgkJCQl7CgkJCQkkbGliZGlyPSQxOwoJCQkJfQoJCQllbHNpZiAoL14tLW9wZW5zc2xkaXI9KC4qKSQvKQoJCQkJewoJCQkJJG9wZW5zc2xkaXI9JDE7CgkJCQl9CgkJCWVsc2lmICgvXi0taW5zdGFsbC5wcmVmaXg9KC4qKSQvKQoJCQkJewoJCQkJJGluc3RhbGxfcHJlZml4PSQxOwoJCQkJfQoJCQllbHNpZiAoL14tLXdpdGgta3JiNS0oZGlyfGxpYnxpbmNsdWRlfGZsYXZvcik9KC4qKSQvKQoJCQkJewoJCQkJJHdpdGhhcmdzeyJrcmI1LSIuJDF9PSQyOwoJCQkJfQoJCQllbHNpZiAoL14tLXdpdGgtemxpYi1saWI9KC4qKSQvKQoJCQkJewoJCQkJJHdpdGhhcmdzeyJ6bGliLWxpYiJ9PSQxOwoJCQkJfQoJCQllbHNpZiAoL14tLXdpdGgtemxpYi1pbmNsdWRlPSguKikkLykKCQkJCXsKCQkJCSR3aXRoYXJnc3siemxpYi1pbmNsdWRlIn09Ii1JJDEiOwoJCQkJfQoJCQllbHNpZiAoL14tLXdpdGgtZmlwc2Rpcj0oLiopJC8pCgkJCQl7CgkJCQkkZmlwc2Rpcj0iJDEiOwoJCQkJfQoJCQllbHNpZiAoL14tLXdpdGgtZmlwc2xpYmRpcj0oLiopJC8pCgkJCQl7CgkJCQkkZmlwc2xpYmRpcj0iJDEiOwoJCQkJfQoJCQllbHNpZiAoL14tLXdpdGgtYmFzZWFkZHI9KC4qKSQvKQoJCQkJewoJCQkJJGJhc2VhZGRyPSIkMSI7CgkJCQl9CgkJCWVsc2lmICgvXi0tY3Jvc3MtY29tcGlsZS1wcmVmaXg9KC4qKSQvKQoJCQkJewoJCQkJJGNyb3NzX2NvbXBpbGVfcHJlZml4PSQxOwoJCQkJfQoJCQllbHNlCgkJCQl7CgkJCQlwcmludCBTVERFUlIgJHVzYWdlOwoJCQkJZXhpdCgxKTsKCQkJCX0KCQkJfQoJCWVsc2lmICgkXyA9fiAvXihbXjpdKyk6KC4rKSQvKQoJCQl7CgkJCWV2YWwgIlwkdGFibGV7XCQxfSA9IFwiJDJcIiI7ICMgYWxsb3cgJHh4eCBjb25zdHJ1Y3RzIGluIHRoZSBzdHJpbmcKCQkJJHRhcmdldD0kMTsKCQkJfQoJCWVsc2UKCQkJewoJCQlkaWUgInRhcmdldCBhbHJlYWR5IGRlZmluZWQgLSAkdGFyZ2V0IChvZmZlbmRpbmcgYXJnOiAkXylcbiIgaWYgKCR0YXJnZXQgbmUgIiIpOwoJCQkkdGFyZ2V0PSRfOwoJCQl9CgoJCXVubGVzcyAoJF8gZXEgJHRhcmdldCB8fCAvXm5vLS8gfHwgL15kaXNhYmxlLS8pCgkJCXsKCQkJIyAibm8tLi4uIiBmb2xsb3dzIGxhdGVyIGFmdGVyIGltcGxpZWQgZGlzYWN0aXZhdGlvbnMKCQkJIyBoYXZlIGJlZW4gZGVyaXZlZC4gIChEb24ndCB0YWtlIHRoaXMgdG9vIHNlcm9pdXNseSwKCQkJIyB3ZSByZWFsbHkgb25seSB3cml0ZSBPUFRJT05TIHRvIHRoZSBNYWtlZmlsZSBvdXQgb2YKCQkJIyBub3N0YWxnaWEuKQoKCQkJaWYgKCRvcHRpb25zIGVxICIiKQoJCQkJeyAkb3B0aW9ucyA9ICRfOyB9CgkJCWVsc2UKCQkJCXsgJG9wdGlvbnMgLj0gIiAiLiRfOyB9CgkJCX0KCQl9Cgl9CgoKCmlmICgkcHJvY2Vzc29yIGVxICIzODYiKQoJewoJJGRpc2FibGVkeyJzc2UyIn0gPSAiZm9yY2VkIjsKCX0KCmlmICghZGVmaW5lZCgkd2l0aGFyZ3N7ImtyYjUtZmxhdm9yIn0pIHx8ICR3aXRoYXJnc3sia3JiNS1mbGF2b3IifSBlcSAiIikKCXsKCSRkaXNhYmxlZHsia3JiNSJ9ID0gImtyYjUtZmxhdm9yIG5vdCBzcGVjaWZpZWQiOwoJfQoKaWYgKCFkZWZpbmVkKCRkaXNhYmxlZHsiemxpYi1keW5hbWljIn0pKQoJewoJIyAiemxpYi1keW5hbWljIiB3YXMgc3BlY2lmaWNhbGx5IGVuYWJsZWQsIHNvIGVuYWJsZSAiemxpYiIKCWRlbGV0ZSAkZGlzYWJsZWR7InpsaWIifTsKCX0KCmlmIChkZWZpbmVkKCRkaXNhYmxlZHsicmlqbmRhZWwifSkpCgl7CgkkZGlzYWJsZWR7ImFlcyJ9ID0gImZvcmNlZCI7Cgl9CmlmIChkZWZpbmVkKCRkaXNhYmxlZHsiZGVzIn0pKQoJewoJJGRpc2FibGVkeyJtZGMyIn0gPSAiZm9yY2VkIjsKCX0KaWYgKGRlZmluZWQoJGRpc2FibGVkeyJlYyJ9KSkKCXsKCSRkaXNhYmxlZHsiZWNkc2EifSA9ICJmb3JjZWQiOwoJJGRpc2FibGVkeyJlY2RoIn0gPSAiZm9yY2VkIjsKCX0KCiMgU1NMIDIuMCByZXF1aXJlcyBNRDUgYW5kIFJTQQppZiAoZGVmaW5lZCgkZGlzYWJsZWR7Im1kNSJ9KSB8fCBkZWZpbmVkKCRkaXNhYmxlZHsicnNhIn0pKQoJewoJJGRpc2FibGVkeyJzc2wyIn0gPSAiZm9yY2VkIjsKCX0KCmlmICgkZmlwcyAmJiAkZmlwc2xpYmRpciBlcSAiIikKCXsKCSRmaXBzbGliZGlyID0gJGZpcHNkaXIgLiAiL2xpYi8iOwoJfQoKIyBSU0FYIEVOR0lORSBzZXRzIGRlZmF1bHQgbm9uLUZJUFMgUlNBIG1ldGhvZC4KaWYgKCRmaXBzKQoJewoJJGRpc2FibGVkeyJyc2F4In0gPSAiZm9yY2VkIjsKCX0KCiMgU1NMIDMuMCBhbmQgVExTIHJlcXVpcmVzIE1ENSBhbmQgU0hBIGFuZCBlaXRoZXIgUlNBIG9yIERTQStESAppZiAoZGVmaW5lZCgkZGlzYWJsZWR7Im1kNSJ9KSB8fCBkZWZpbmVkKCRkaXNhYmxlZHsic2hhIn0pCiAgICB8fCAoZGVmaW5lZCgkZGlzYWJsZWR7InJzYSJ9KQogICAgICAgICYmIChkZWZpbmVkKCRkaXNhYmxlZHsiZHNhIn0pIHx8IGRlZmluZWQoJGRpc2FibGVkeyJkaCJ9KSkpKQoJewoJJGRpc2FibGVkeyJzc2wzIn0gPSAiZm9yY2VkIjsKCSRkaXNhYmxlZHsidGxzMSJ9ID0gImZvcmNlZCI7Cgl9CgppZiAoZGVmaW5lZCgkZGlzYWJsZWR7InRsczEifSkpCgl7CgkkZGlzYWJsZWR7InRsc2V4dCJ9ID0gImZvcmNlZCI7Cgl9CgppZiAoZGVmaW5lZCgkZGlzYWJsZWR7ImVjIn0pIHx8IGRlZmluZWQoJGRpc2FibGVkeyJkc2EifSkKICAgIHx8IGRlZmluZWQoJGRpc2FibGVkeyJkaCJ9KSkKCXsKCSRkaXNhYmxlZHsiZ29zdCJ9ID0gImZvcmNlZCI7Cgl9CgojIFNSUCBhbmQgSEVBUlRCRUFUUyByZXF1aXJlIFRMU0VYVAppZiAoZGVmaW5lZCgkZGlzYWJsZWR7InRsc2V4dCJ9KSkKCXsKCSRkaXNhYmxlZHsic3JwIn0gPSAiZm9yY2VkIjsKCSRkaXNhYmxlZHsiaGVhcnRiZWF0cyJ9ID0gImZvcmNlZCI7Cgl9CgppZiAoJHRhcmdldCBlcSAiVEFCTEUiKSB7Cglmb3JlYWNoICR0YXJnZXQgKHNvcnQga2V5cyAldGFibGUpIHsKCQlwcmludF90YWJsZV9lbnRyeSgkdGFyZ2V0KTsKCX0KCWV4aXQgMDsKfQoKaWYgKCR0YXJnZXQgZXEgIkxJU1QiKSB7Cglmb3JlYWNoIChzb3J0IGtleXMgJXRhYmxlKSB7CgkJcHJpbnQ7CgkJcHJpbnQgIlxuIjsKCX0KCWV4aXQgMDsKfQoKaWYgKCR0YXJnZXQgPX4gbS9eQ3lnV2luMzIoLS4qKSQvKSB7CgkkdGFyZ2V0ID0gIkN5Z3dpbiIuJDE7Cn0KCnByaW50ICJDb25maWd1cmluZyBmb3IgJHRhcmdldFxuIjsKCiZ1c2FnZSBpZiAoIWRlZmluZWQoJHRhYmxleyR0YXJnZXR9KSk7CgoKZm9yZWFjaCAoc29ydCAoa2V5cyAlZGlzYWJsZWQpKQoJewoJJG9wdGlvbnMgLj0gIiBuby0kXyI7CgoJcHJpbnRmICIgICAgbm8tJS0xMnMgJS0xMHMiLCAkXywgIlskZGlzYWJsZWR7JF99XSI7CgoJaWYgKC9eZHNvJC8pCgkJeyAkbm9fZHNvID0gMTsgfQoJZWxzaWYgKC9edGhyZWFkcyQvKQoJCXsgJG5vX3RocmVhZHMgPSAxOyB9CgllbHNpZiAoL15zaGFyZWQkLykKCQl7ICRub19zaGFyZWQgPSAxOyB9CgllbHNpZiAoL156bGliJC8pCgkJeyAkemxpYiA9IDA7IH0KCWVsc2lmICgvXnN0YXRpYy1lbmdpbmUkLykKCQl7IH0KCWVsc2lmICgvXnpsaWItZHluYW1pYyQvKQoJCXsgfQoJZWxzaWYgKC9ec3ltbGlua3MkLykKCQl7ICRzeW1saW5rID0gMDsgfQoJZWxzaWYgKC9ec3NlMiQvKQoJCXsgJG5vX3NzZTIgPSAxOyB9CgllbHNlCgkJewoJCW15ICgkQUxHTywgJGFsZ28pOwoJCSgkQUxHTyA9ICRhbGdvID0gJF8pID1+IHRyL1tcLWEtel0vW19BLVpdLzsKCgkJaWYgKC9eYXNtJC8gfHwgL15lcnIkLyB8fCAvXmh3JC8gfHwgL15ody0vKQoJCQl7CgkJCSRvcGVuc3NsX290aGVyX2RlZmluZXMgLj0gIiNkZWZpbmUgT1BFTlNTTF9OT18kQUxHT1xuIjsKCQkJcHJpbnQgIiBPUEVOU1NMX05PXyRBTEdPIjsKCQkKCQkJaWYgKC9eZXJyJC8pCXsgJGZsYWdzIC49ICItRE9QRU5TU0xfTk9fRVJSICI7IH0KCQkJZWxzaWYgKC9eYXNtJC8pCXsgJG5vX2FzbSA9IDE7IH0KCQkJfQoJCWVsc2UKCQkJewoJCQkkb3BlbnNzbF9hbGdvcml0aG1fZGVmaW5lcyAuPSAiI2RlZmluZSBPUEVOU1NMX05PXyRBTEdPXG4iOwoJCQlwcmludCAiIE9QRU5TU0xfTk9fJEFMR08iOwoKCQkJaWYgKC9ea3JiNSQvKQoJCQkJeyAkbm9fa3JiNSA9IDE7IH0KCQkJZWxzZQoJCQkJewoJCQkJcHVzaCBAc2tpcCwgJGFsZ287CgkJCQkjIGZpeC11cCBjcnlwdG8vZGlyZWN0b3J5IG5hbWUocykKCQkJCUBza2lwWyQjc2tpcF09Indocmxwb29sIiBpZiAkYWxnbyBlcSAid2hpcmxwb29sIjsKCQkJCXByaW50ICIgKHNraXAgZGlyKSI7CgoJCQkJJGRlcGZsYWdzIC49ICIgLURPUEVOU1NMX05PXyRBTEdPIjsKCQkJCX0KCQkJfQoJCX0KCglwcmludCAiXG4iOwoJfQoKbXkgJGV4cF9jZmxhZ3MgPSAiIjsKZm9yZWFjaCAoc29ydCBAZXhwZXJpbWVudGFsKQoJewoJbXkgJEFMR087CgkoJEFMR08gPSAkXykgPX4gdHIvW2Etel0vW0EtWl0vOwoKCSMgb3BlbnNzbGNvbmYuaCB3aWxsIHNldCBPUEVOU1NMX05PXy4uLiB1bmxlc3MgT1BFTlNTTF9FWFBFUklNRU5UQUxfLi4uIGlzIGRlZmluZWQKCSRvcGVuc3NsX2V4cGVyaW1lbnRhbF9kZWZpbmVzIC49ICIjZGVmaW5lIE9QRU5TU0xfTk9fJEFMR09cbiI7CgkkZXhwX2NmbGFncyAuPSAiIC1ET1BFTlNTTF9FWFBFUklNRU5UQUxfJEFMR08iOwoJfQoKbXkgJElzTUsxTUY9c2NhbGFyIGdyZXAgL14kdGFyZ2V0JC8sQE1LMU1GX0J1aWxkczsKCiRleGVfZXh0PSIuZXhlIiBpZiAoJHRhcmdldCBlcSAiQ3lnd2luIiB8fCAkdGFyZ2V0IGVxICJESkdQUCIgfHwgJHRhcmdldCA9fiAvXm1pbmd3Lyk7CiRleGVfZXh0PSIubmxtIiBpZiAoJHRhcmdldCA9fiAvbmV0d2FyZS8pOwokZXhlX2V4dD0iLnBtIiAgaWYgKCR0YXJnZXQgPX4gL3Zvcy8pOwokb3BlbnNzbGRpcj0iL3Vzci9sb2NhbC9zc2wiIGlmICgkb3BlbnNzbGRpciBlcSAiIiBhbmQgJHByZWZpeCBlcSAiIik7CiRwcmVmaXg9JG9wZW5zc2xkaXIgaWYgJHByZWZpeCBlcSAiIjsKCiRkZWZhdWx0X3JhbmxpYj0gJndoaWNoKCJyYW5saWIiKSBvciAkZGVmYXVsdF9yYW5saWI9InRydWUiOwokcGVybD0kRU5WeydQRVJMJ30gb3IgJHBlcmw9JndoaWNoKCJwZXJsNSIpIG9yICRwZXJsPSZ3aGljaCgicGVybCIpCiAgb3IgJHBlcmw9InBlcmwiOwpteSAkbWFrZSA9ICRFTlZ7J01BS0UnfSB8fCAibWFrZSI7CgokY3Jvc3NfY29tcGlsZV9wcmVmaXg9JEVOVnsnQ1JPU1NfQ09NUElMRSd9IGlmICRjcm9zc19jb21waWxlX3ByZWZpeCBlcSAiIjsKCmNob3AgJG9wZW5zc2xkaXIgaWYgJG9wZW5zc2xkaXIgPX4gL1wvJC87CmNob3AgJHByZWZpeCBpZiAkcHJlZml4ID1+IC8uXC8kLzsKCiRvcGVuc3NsZGlyPSRwcmVmaXggLiAiL3NzbCIgaWYgJG9wZW5zc2xkaXIgZXEgIiI7CiRvcGVuc3NsZGlyPSRwcmVmaXggLiAiLyIgLiAkb3BlbnNzbGRpciBpZiAkb3BlbnNzbGRpciAhfiAvKF5cL3xeW2EtekEtWl06W1xcXC9dKS87CgoKcHJpbnQgIklzTUsxTUY9JElzTUsxTUZcbiI7CgpteSBAZmllbGRzID0gc3BsaXQoL1xzKjpccyovLCR0YWJsZXskdGFyZ2V0fSAuICI6IiB4IDMwICwgLTEpOwpteSAkY2MgPSAkZmllbGRzWyRpZHhfY2NdOwojIEFsbG93IGVudmlyb25tZW50IENDIHRvIG92ZXJyaWRlIGNvbXBpbGVyLi4uCmlmKCRFTlZ7Q0N9KSB7CiAgICAkY2MgPSAkRU5We0NDfTsKfQpteSAkY2ZsYWdzID0gJGZpZWxkc1skaWR4X2NmbGFnc107Cm15ICR1bmlzdGQgPSAkZmllbGRzWyRpZHhfdW5pc3RkXTsKbXkgJHRocmVhZF9jZmxhZyA9ICRmaWVsZHNbJGlkeF90aHJlYWRfY2ZsYWddOwpteSAkc3lzX2lkID0gJGZpZWxkc1skaWR4X3N5c19pZF07Cm15ICRsZmxhZ3MgPSAkZmllbGRzWyRpZHhfbGZsYWdzXTsKbXkgJGJuX29wcyA9ICRmaWVsZHNbJGlkeF9ibl9vcHNdOwpteSAkY3B1aWRfb2JqID0gJGZpZWxkc1skaWR4X2NwdWlkX29ial07Cm15ICRibl9vYmogPSAkZmllbGRzWyRpZHhfYm5fb2JqXTsKbXkgJGRlc19vYmogPSAkZmllbGRzWyRpZHhfZGVzX29ial07Cm15ICRhZXNfb2JqID0gJGZpZWxkc1skaWR4X2Flc19vYmpdOwpteSAkYmZfb2JqID0gJGZpZWxkc1skaWR4X2JmX29ial07Cm15ICRtZDVfb2JqID0gJGZpZWxkc1skaWR4X21kNV9vYmpdOwpteSAkc2hhMV9vYmogPSAkZmllbGRzWyRpZHhfc2hhMV9vYmpdOwpteSAkY2FzdF9vYmogPSAkZmllbGRzWyRpZHhfY2FzdF9vYmpdOwpteSAkcmM0X29iaiA9ICRmaWVsZHNbJGlkeF9yYzRfb2JqXTsKbXkgJHJtZDE2MF9vYmogPSAkZmllbGRzWyRpZHhfcm1kMTYwX29ial07Cm15ICRyYzVfb2JqID0gJGZpZWxkc1skaWR4X3JjNV9vYmpdOwpteSAkd3Bfb2JqID0gJGZpZWxkc1skaWR4X3dwX29ial07Cm15ICRjbWxsX29iaiA9ICRmaWVsZHNbJGlkeF9jbWxsX29ial07Cm15ICRtb2Rlc19vYmogPSAkZmllbGRzWyRpZHhfbW9kZXNfb2JqXTsKbXkgJGVuZ2luZXNfb2JqID0gJGZpZWxkc1skaWR4X2VuZ2luZXNfb2JqXTsKbXkgJHBlcmxhc21fc2NoZW1lID0gJGZpZWxkc1skaWR4X3Blcmxhc21fc2NoZW1lXTsKbXkgJGRzb19zY2hlbWUgPSAkZmllbGRzWyRpZHhfZHNvX3NjaGVtZV07Cm15ICRzaGFyZWRfdGFyZ2V0ID0gJGZpZWxkc1skaWR4X3NoYXJlZF90YXJnZXRdOwpteSAkc2hhcmVkX2NmbGFnID0gJGZpZWxkc1skaWR4X3NoYXJlZF9jZmxhZ107Cm15ICRzaGFyZWRfbGRmbGFnID0gJGZpZWxkc1skaWR4X3NoYXJlZF9sZGZsYWddOwpteSAkc2hhcmVkX2V4dGVuc2lvbiA9ICRmaWVsZHNbJGlkeF9zaGFyZWRfZXh0ZW5zaW9uXTsKbXkgJHJhbmxpYiA9ICRFTlZ7J1JBTkxJQid9IHx8ICRmaWVsZHNbJGlkeF9yYW5saWJdOwpteSAkYXIgPSAkRU5WeydBUid9IHx8ICJhciI7Cm15ICRhcmZsYWdzID0gJGZpZWxkc1skaWR4X2FyZmxhZ3NdOwpteSAkbXVsdGlsaWIgPSAkZmllbGRzWyRpZHhfbXVsdGlsaWJdOwoKIyBpZiAkcHJlZml4L2xpYiRtdWx0aWxpYiBpcyBub3QgYW4gZXhpc3RpbmcgZGlyZWN0b3J5LCB0aGVuCiMgYXNzdW1lIHRoYXQgaXQncyBub3Qgc2VhcmNoZWQgYnkgbGlua2VyIGF1dG9tYXRpY2FsbHksIGluCiMgd2hpY2ggY2FzZSBhZGRpbmcgJG11bHRpbGliIHN1ZmZpeCBjYXVzZXMgbW9yZSBncmllZiB0aGFuCiMgd2UncmUgcmVhZHkgdG8gdG9sZXJhdGUsIHNvIGRvbid0Li4uCiRtdWx0aWxpYj0iIiBpZiAhLWQgIiRwcmVmaXgvbGliJG11bHRpbGliIjsKCiRsaWJkaXI9ImxpYiRtdWx0aWxpYiIgaWYgJGxpYmRpciBlcSAiIjsKCiRjZmxhZ3MgPSAiJGNmbGFncyRleHBfY2ZsYWdzIjsKCiMgJyUnIGluICRsZmxhZ3MgaXMgdXNlZCB0byBzcGxpdCBmbGFncyB0byAicHJlLSIgYW5kIHBvc3QtZmxhZ3MKbXkgKCRwcmVsZmxhZ3MsJHBvc3RsZmxhZ3MpPXNwbGl0KCclJywkbGZsYWdzKTsKaWYgKGRlZmluZWQoJHBvc3RsZmxhZ3MpKQl7ICRsZmxhZ3M9JHBvc3RsZmxhZ3M7CX0KZWxzZQkJCQl7ICRsZmxhZ3M9JHByZWxmbGFnczsgdW5kZWYgJHByZWxmbGFnczsJfQoKaWYgKCR0YXJnZXQgPX4gL15taW5ndy8gJiYgYCRjYyAtLXRhcmdldC1oZWxwIDI+JjFgICF+IG0vXC1tbm9cLWN5Z3dpbi9tKQoJewoJJGNmbGFncyA9fiBzL1wtbW5vXC1jeWd3aW5ccyovLzsKCSRzaGFyZWRfbGRmbGFnID1+IHMvXC1tbm9cLWN5Z3dpblxzKi8vOwoJfQoKbXkgJG5vX3NoYXJlZF93YXJuPTA7Cm15ICRub191c2VyX2NmbGFncz0wOwoKaWYgKCRmbGFncyBuZSAiIikJeyAkY2ZsYWdzPSIkZmxhZ3MkY2ZsYWdzIjsgfQplbHNlCQkJeyAkbm9fdXNlcl9jZmxhZ3M9MTsgICAgICAgfQoKIyBLZXJiZXJvcyBzZXR0aW5ncy4gIFRoZSBmbGF2b3IgbXVzdCBiZSBwcm92aWRlZCBmcm9tIG91dHNpZGUsIGVpdGhlciB0aHJvdWdoCiMgdGhlIHNjcmlwdCAiY29uZmlnIiBvciBtYW51YWxseS4KaWYgKCEkbm9fa3JiNSkKCXsKCW15ICgkbHJlc29sdiwgJGxwYXRoLCAkbGV4dCk7CglpZiAoJHdpdGhhcmdzeyJrcmI1LWZsYXZvciJ9ID1+IC9eW0hoXWVpbWRhbCQvKQoJCXsKCQlkaWUgIlNvcnJ5LCBIZWltZGFsIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkXG4iOwoJCX0KCSMjIyMjIEhBQ0sgdG8gZm9yY2UgdXNlIG9mIEhlaW1kYWwuCgkjIyMjIyBXQVJOSU5HOiBTaW5jZSB3ZSBkb24ndCByZWFsbHkgaGF2ZSBhZGVxdWF0ZSBzdXBwb3J0IGZvciBIZWltZGFsLAoJIyMjIyMgICAgICAgICAgdXNpbmcgdGhpcyB3aWxsIGJyZWFrIHRoZSBidWlsZC4gIFlvdSdsbCBoYXZlIHRvIG1ha2UKCSMjIyMjICAgICAgICAgIGNoYW5nZXMgdG8gdGhlIHNvdXJjZSwgYW5kIGlmIHlvdSBkbywgcGxlYXNlIHNlbmQKCSMjIyMjICAgICAgICAgIHBhdGNoZXMgdG8gb3BlbnNzbC1kZXZAb3BlbnNzbC5vcmcKCWlmICgkd2l0aGFyZ3N7ImtyYjUtZmxhdm9yIn0gPX4gL15mb3JjZS1bSGhdZWltZGFsJC8pCgkJewoJCXdhcm4gIkhlaW1kYWwgaXNuJ3QgcmVhbGx5IHN1cHBvcnRlZC4gIFlvdXIgYnVpbGQgV0lMTCBicmVha1xuIjsKCQl3YXJuICJJZiB5b3UgZml4IHRoZSBwcm9ibGVtcywgcGxlYXNlIHNlbmQgYSBwYXRjaCB0byBvcGVuc3NsLWRldlxAb3BlbnNzbC5vcmdcbiI7CgkJJHdpdGhhcmdzeyJrcmI1LWRpciJ9ID0gIi91c3IvaGVpbWRhbCIKCQkJaWYgJHdpdGhhcmdzeyJrcmI1LWRpciJ9IGVxICIiOwoJCSR3aXRoYXJnc3sia3JiNS1saWIifSA9ICItTCIuJHdpdGhhcmdzeyJrcmI1LWRpciJ9LgoJCQkiL2xpYiAtbGdzc2FwaSAtbGtyYjUgLWxjb21fZXJyIgoJCQlpZiAkd2l0aGFyZ3N7ImtyYjUtbGliIn0gZXEgIiIgJiYgISRJc01LMU1GOwoJCSRjZmxhZ3M9Ii1ES1JCNV9IRUlNREFMICRjZmxhZ3MiOwoJCX0KCWlmICgkd2l0aGFyZ3N7ImtyYjUtZmxhdm9yIn0gPX4gL15bTW1dW0lpXVtUdF0vKQoJCXsKCQkkd2l0aGFyZ3N7ImtyYjUtZGlyIn0gPSAiL3Vzci9rZXJiZXJvcyIKCQkJaWYgJHdpdGhhcmdzeyJrcmI1LWRpciJ9IGVxICIiOwoJCSR3aXRoYXJnc3sia3JiNS1saWIifSA9ICItTCIuJHdpdGhhcmdzeyJrcmI1LWRpciJ9LgoJCQkiL2xpYiAtbGdzc2FwaV9rcmI1IC1sa3JiNSAtbGNvbV9lcnIgLWxrNWNyeXB0byIKCQkJaWYgJHdpdGhhcmdzeyJrcmI1LWxpYiJ9IGVxICIiICYmICEkSXNNSzFNRjsKCQkkY2ZsYWdzPSItREtSQjVfTUlUICRjZmxhZ3MiOwoJCSR3aXRoYXJnc3sia3JiNS1mbGF2b3IifSA9fiBzL15bTW1dW0lpXVtUdF1bLl8tXSovLzsKCQlpZiAoJHdpdGhhcmdzeyJrcmI1LWZsYXZvciJ9ID1+IC9eMVsuXy1dKlswMV0vKQoJCQl7CgkJCSRjZmxhZ3M9Ii1ES1JCNV9NSVRfT0xEMTEgJGNmbGFncyI7CgkJCX0KCQl9CglMUkVTT0xWOgoJZm9yZWFjaCAkbHBhdGggKCIvbGliIiwgIi91c3IvbGliIikKCQl7CgkJZm9yZWFjaCAkbGV4dCAoImEiLCAic28iKQoJCQl7CgkJCSRscmVzb2x2ID0gIiRscGF0aC9saWJyZXNvbHYuJGxleHQiOwoJCQlsYXN0IExSRVNPTFYJaWYgKC1yICIkbHJlc29sdiIpOwoJCQkkbHJlc29sdiA9ICIiOwoJCQl9CgkJfQoJJHdpdGhhcmdzeyJrcmI1LWxpYiJ9IC49ICIgLWxyZXNvbHYiCgkJaWYgKCIkbHJlc29sdiIgbmUgIiIpOwoJJHdpdGhhcmdzeyJrcmI1LWluY2x1ZGUifSA9ICItSSIuJHdpdGhhcmdzeyJrcmI1LWRpciJ9LiIvaW5jbHVkZSIKCQlpZiAkd2l0aGFyZ3N7ImtyYjUtaW5jbHVkZSJ9IGVxICIiICYmCgkJICAgJHdpdGhhcmdzeyJrcmI1LWRpciJ9IG5lICIiOwoJfQoKIyBUaGUgRFNPIGNvZGUgY3VycmVudGx5IGFsd2F5cyBpbXBsZW1lbnRzIGFsbCBmdW5jdGlvbnMgc28gdGhhdCBubwojIGFwcGxpY2F0aW9ucyB3aWxsIGhhdmUgdG8gd29ycnkgYWJvdXQgdGhhdCBmcm9tIGEgY29tcGlsYXRpb24gcG9pbnQKIyBvZiB2aWV3LiBIb3dldmVyLCB0aGUgIm1ldGhvZCJzIG1heSByZXR1cm4gemVybyB1bmxlc3MgdGhhdCBwbGF0Zm9ybQojIGhhcyBzdXBwb3J0IGNvbXBpbGVkIGluIGZvciB0aGVtLiBDdXJyZW50bHkgZWFjaCBtZXRob2QgaXMgZW5hYmxlZAojIGJ5IGEgZGVmaW5lICJEU09fPG5hbWU+IiAuLi4gd2UgdHJhbnNsYXRlIHRoZSAiZHNvX3NjaGVtZSIgY29uZmlnCiMgc3RyaW5nIGVudHJ5IGludG8gdXNpbmcgdGhlIGZvbGxvd2luZyBsb2dpYzsKbXkgJGRzb19jZmxhZ3M7CmlmICghJG5vX2RzbyAmJiAkZHNvX3NjaGVtZSBuZSAiIikKCXsKCSRkc29fc2NoZW1lID1+IHRyL1thLXpdL1tBLVpdLzsKCWlmICgkZHNvX3NjaGVtZSBlcSAiRExGQ04iKQoJCXsKCQkkZHNvX2NmbGFncyA9ICItRERTT19ETEZDTiAtREhBVkVfRExGQ05fSCI7CgkJfQoJZWxzaWYgKCRkc29fc2NoZW1lIGVxICJETEZDTl9OT19IIikKCQl7CgkJJGRzb19jZmxhZ3MgPSAiLUREU09fRExGQ04iOwoJCX0KCWVsc2UKCQl7CgkJJGRzb19jZmxhZ3MgPSAiLUREU09fJGRzb19zY2hlbWUiOwoJCX0KCSRjZmxhZ3MgPSAiJGRzb19jZmxhZ3MgJGNmbGFncyI7Cgl9CgpteSAkdGhyZWFkX2NmbGFnczsKbXkgJHRocmVhZF9kZWZpbmVzOwppZiAoJHRocmVhZF9jZmxhZyBuZSAiKHVua25vd24pIiAmJiAhJG5vX3RocmVhZHMpCgl7CgkjIElmIHdlIGtub3cgaG93IHRvIGRvIGl0LCBzdXBwb3J0IHRocmVhZHMgYnkgZGVmYXVsdC4KCSR0aHJlYWRzID0gMTsKCX0KaWYgKCR0aHJlYWRfY2ZsYWcgZXEgIih1bmtub3duKSIgJiYgJHRocmVhZHMpCgl7CgkjIElmIHRoZSB1c2VyIGFza2VkIGZvciAidGhyZWFkcyIsIFtzXWhlIGlzIGFsc28gZXhwZWN0ZWQgdG8KCSMgcHJvdmlkZSBhbnkgc3lzdGVtLWRlcGVuZGVudCBjb21waWxlciBvcHRpb25zIHRoYXQgYXJlCgkjIG5lY2Vzc2FyeS4KCWlmICgkbm9fdXNlcl9jZmxhZ3MpCgkJewoJCXByaW50ICJZb3UgYXNrZWQgZm9yIG11bHRpLXRocmVhZGluZyBzdXBwb3J0LCBidXQgZGlkbid0XG4iOwoJCXByaW50ICJwcm92aWRlIGFueSBzeXN0ZW0tc3BlY2lmaWMgY29tcGlsZXIgb3B0aW9uc1xuIjsKCQlleGl0KDEpOwoJCX0KCSR0aHJlYWRfY2ZsYWdzPSItRE9QRU5TU0xfVEhSRUFEUyAkY2ZsYWdzIiA7CgkkdGhyZWFkX2RlZmluZXMgLj0gIiNkZWZpbmUgT1BFTlNTTF9USFJFQURTXG4iOwoJfQplbHNlCgl7CgkkdGhyZWFkX2NmbGFncz0iLURPUEVOU1NMX1RIUkVBRFMgJHRocmVhZF9jZmxhZyAkY2ZsYWdzIjsKCSR0aHJlYWRfZGVmaW5lcyAuPSAiI2RlZmluZSBPUEVOU1NMX1RIUkVBRFNcbiI7CiMJbXkgJGRlZjsKIwlmb3JlYWNoICRkZWYgKHNwbGl0ICcgJywkdGhyZWFkX2NmbGFnKQojCQl7CiMJCWlmICgkZGVmID1+IHMvXi1ELy8gJiYgJGRlZiAhfiAvXl8vKQojCQkJewojCQkJJHRocmVhZF9kZWZpbmVzIC49ICIjZGVmaW5lICRkZWZcbiI7CiMJCQl9CiMJCX0KCX0JCgokbGZsYWdzPSIkbGlicyRsZmxhZ3MiIGlmICgkbGlicyBuZSAiIik7CgppZiAoJG5vX2FzbSkKCXsKCSRjcHVpZF9vYmo9JGJuX29iaj0KCSRkZXNfb2JqPSRhZXNfb2JqPSRiZl9vYmo9JGNhc3Rfb2JqPSRyYzRfb2JqPSRyYzVfb2JqPSRjbWxsX29iaj0KCSRtb2Rlc19vYmo9JHNoYTFfb2JqPSRtZDVfb2JqPSRybWQxNjBfb2JqPSR3cF9vYmo9JGVuZ2luZXNfb2JqPSIiOwoJfQoKaWYgKCEkbm9fc2hhcmVkKQoJewoJJGNhc3Rfb2JqPSIiOwkjIENBU1QgYXNzZW1ibGVyIGlzIG5vdCBQSUMKCX0KCmlmICgkdGhyZWFkcykKCXsKCSRjZmxhZ3M9JHRocmVhZF9jZmxhZ3M7Cgkkb3BlbnNzbF90aHJlYWRfZGVmaW5lcyAuPSAkdGhyZWFkX2RlZmluZXM7Cgl9CgppZiAoJHpsaWIpCgl7CgkkY2ZsYWdzID0gIi1EWkxJQiAkY2ZsYWdzIjsKCWlmIChkZWZpbmVkKCRkaXNhYmxlZHsiemxpYi1keW5hbWljIn0pKQoJCXsKCQlpZiAoZGVmaW5lZCgkd2l0aGFyZ3N7InpsaWItbGliIn0pKQoJCQl7CgkJCSRsZmxhZ3MgPSAiJGxmbGFncyAtTCIgLiAkd2l0aGFyZ3N7InpsaWItbGliIn0gLiAiIC1seiI7CgkJCX0KCQllbHNlCgkJCXsKCQkJJGxmbGFncyA9ICIkbGZsYWdzIC1seiI7CgkJCX0KCQl9CgllbHNlCgkJewoJCSRjZmxhZ3MgPSAiLURaTElCX1NIQVJFRCAkY2ZsYWdzIjsKCQl9Cgl9CgojIFlvdSB3aWxsIGZpbmQgc2hsaWJfbWFyazEgYW5kIHNobGliX21hcmsyIGV4cGxhaW5lZCBpbiBNYWtlZmlsZS5vcmcKbXkgJHNoYXJlZF9tYXJrID0gIiI7CmlmICgkc2hhcmVkX3RhcmdldCBlcSAiIikKCXsKCSRub19zaGFyZWRfd2FybiA9IDEgaWYgISRub19zaGFyZWQ7Cgkkbm9fc2hhcmVkID0gMTsKCX0KaWYgKCEkbm9fc2hhcmVkKQoJewoJaWYgKCRzaGFyZWRfY2ZsYWcgbmUgIiIpCgkJewoJCSRjZmxhZ3MgPSAiJHNoYXJlZF9jZmxhZyAtRE9QRU5TU0xfUElDICRjZmxhZ3MiOwoJCX0KCX0KCmlmICghJElzTUsxTUYpCgl7CgkjIGFkZCB7bm8tfXN0YXRpYy1lbmdpbmUgdG8gb3B0aW9ucyB0byBhbGxvdyBta2RlZi5wbCB0byB3b3JrIHdpdGhvdXQgZXh0cmEgYXJndW1lbnRzCglpZiAoJG5vX3NoYXJlZCkKCQl7CgkJJG9wZW5zc2xfb3RoZXJfZGVmaW5lcy49IiNkZWZpbmUgT1BFTlNTTF9OT19EWU5BTUlDX0VOR0lORVxuIjsKCQkkb3B0aW9ucy49IiBzdGF0aWMtZW5naW5lIjsKCQl9CgllbHNlCgkJewoJCSRvcGVuc3NsX290aGVyX2RlZmluZXMuPSIjZGVmaW5lIE9QRU5TU0xfTk9fU1RBVElDX0VOR0lORVxuIjsKCQkkb3B0aW9ucy49IiBuby1zdGF0aWMtZW5naW5lIjsKCQl9Cgl9CgokY3B1aWRfb2JqLj0iIHVwbGluay5vIHVwbGluay14ODYubyIgaWYgKCRjZmxhZ3MgPX4gL1wtRE9QRU5TU0xfVVNFX0FQUExJTksvKTsKCiMKIyBQbGF0Zm9ybSBmaXgtdXBzCiMKaWYgKCR0YXJnZXQgPX4gL1wtaWNjJC8pCSMgSW50ZWwgQyBjb21waWxlcgoJewoJbXkgJGljY3Zlcj0wOwoJaWYgKG9wZW4oRkQsIiRjYyAtViAyPiYxIHwiKSkKCQl7CgkJd2hpbGUoPEZEPikgeyAkaWNjdmVyPSQxIGlmICgvVmVyc2lvbiAoWzAtOV0rKVwuLyk7IH0KCQljbG9zZShGRCk7CgkJfQoJaWYgKCRpY2N2ZXI+PTgpCgkJewoJCSMgRWxpbWluYXRlIHVubmVjZXNzYXJ5IGRlcGVuZGVuY3kgZnJvbSBsaWJpcmMuYS4gVGhpcyBpcwoJCSMgZXNzZW50aWFsIGZvciBzaGFyZWQgbGlicmFyeSBzdXBwb3J0LCBhcyBvdGhlcndpc2UKCQkjIGFwcHMvb3BlbnNzbCBjYW4gZW5kIHVwIGluIGVuZGxlc3MgbG9vcCB1cG9uIHN0YXJ0dXAuLi4KCQkkY2ZsYWdzLj0iIC1EbWVtY3B5PV9fYnVpbHRpbl9tZW1jcHkgLURtZW1zZXQ9X19idWlsdGluX21lbXNldCI7CgkJfQoJaWYgKCRpY2N2ZXI+PTkpCgkJewoJCSRjZmxhZ3MuPSIgLWktc3RhdGljIjsKCQkkY2ZsYWdzPX5zL1wtbm9fY3BwcnQvLW5vLWNwcHJ0LzsKCQl9CglpZiAoJGljY3Zlcj49MTApCgkJewoJCSRjZmxhZ3M9fnMvXC1pXC1zdGF0aWMvLXN0YXRpYy1pbnRlbC87CgkJfQoJfQoKIyBVbmxpa2Ugb3RoZXIgT1NlcyAobGlrZSBTb2xhcmlzLCBMaW51eCwgVHJ1NjQsIElSSVgpIEJTRCBydW4tdGltZQojIGxpbmtlcnMgKHRlc3RlZCBPcGVuQlNELCBOZXRCU0QgYW5kIEZyZWVCU0QpICJkZW1hbmQiIFJQQVRIIHNldCBvbgojIC5zbyBvYmplY3RzLiBBcHBhcmVudGx5IGFwcGxpY2F0aW9uIFJQQVRIIGlzIG5vdCBnbG9iYWwgYW5kIGRvZXMKIyBub3QgYXBwbHkgdG8gLnNvIGxpbmtlZCB3aXRoIG90aGVyIC5zby4gUHJvYmxlbSBtYW5pZmVzdHMgaXRzZWxmCiMgd2hlbiBsaWJzc2wuc28gZmFpbHMgdG8gbG9hZCBsaWJjcnlwdG8uc28uIE9uZSBjYW4gYXJndWUgdGhhdCB3ZQojIHNob3VsZCBlbmdyYXZlIHRoaXMgaW50byBNYWtlZmlsZS5zaGFyZWQgcnVsZXMgb3IgaW50byBCU0QtKiBjb25maWcKIyBsaW5lcyBhYm92ZS4gTWVhbndoaWxlIGxldCdzIHRyeSB0byBiZSBjYXV0aW91cyBhbmQgcGFzcyAtcnBhdGggdG8KIyBsaW5rZXIgb25seSB3aGVuIC0tcHJlZml4IGlzIG5vdCAvdXNyLgppZiAoJHRhcmdldCA9fiAvXkJTRFwtLykKCXsKCSRzaGFyZWRfbGRmbGFnLj0iIC1XbCwtcnBhdGgsXCRcJChMSUJSUEFUSCkiIGlmICgkcHJlZml4ICF+IG18Xi91c3JbL10qJHwpOwoJfQoKaWYgKCRzeXNfaWQgbmUgIiIpCgl7CgkjJGNmbGFncz0iLURPUEVOU1NMX1NZU05BTUVfJHN5c19pZCAkY2ZsYWdzIjsKCSRvcGVuc3NsX3N5c19kZWZpbmVzPSIjZGVmaW5lIE9QRU5TU0xfU1lTTkFNRV8kc3lzX2lkXG4iOwoJfQoKaWYgKCRyYW5saWIgZXEgIiIpCgl7CgkkcmFubGliID0gJGRlZmF1bHRfcmFubGliOwoJfQoKI215ICgkYm4xKT1zcGxpdCgvXHMrLywkYm5fb2JqKTsKIyRibjEgPSAiIiB1bmxlc3MgZGVmaW5lZCAkYm4xOwojJGJuMT0kYm5fYXNtIHVubGVzcyAoJGJuMSA9fiAvXC5vJC8pOwojJGJuX29iaj0iJGJuMSI7CgokY3B1aWRfb2JqPSIiIGlmICgkcHJvY2Vzc29yIGVxICIzODYiKTsKCiRibl9vYmogPSAkYm5fYXNtIHVubGVzcyAkYm5fb2JqIG5lICIiOwojIGJuLTU4NiBpcyB0aGUgb25seSBvbmUgaW1wbGVtZW50aW5nIGJuXypfcGFydF93b3JkcwokY2ZsYWdzLj0iIC1ET1BFTlNTTF9CTl9BU01fUEFSVF9XT1JEUyIgaWYgKCRibl9vYmogPX4gL2JuLTU4Ni8pOwokY2ZsYWdzLj0iIC1ET1BFTlNTTF9JQTMyX1NTRTIiIGlmICghJG5vX3NzZTIgJiYgJGJuX29iaiA9fiAvODYvKTsKCiRjZmxhZ3MuPSIgLURPUEVOU1NMX0JOX0FTTV9NT05UIiBpZiAoJGJuX29iaiA9fiAvLW1vbnQvKTsKJGNmbGFncy49IiAtRE9QRU5TU0xfQk5fQVNNX01PTlQ1IiBpZiAoJGJuX29iaiA9fiAvLW1vbnQ1Lyk7CiRjZmxhZ3MuPSIgLURPUEVOU1NMX0JOX0FTTV9HRjJtIiBpZiAoJGJuX29iaiA9fiAvLWdmMm0vKTsKCmlmICgkZmlwcykKCXsKCSRvcGVuc3NsX290aGVyX2RlZmluZXMuPSIjZGVmaW5lIE9QRU5TU0xfRklQU1xuIjsKCSRjZmxhZ3MgLj0gIiAtSVwkKEZJUFNESVIpL2luY2x1ZGUiOwoJfQoKJGNwdWlkX29iaj0ibWVtX2Nsci5vIgl1bmxlc3MgKCRjcHVpZF9vYmogPX4gL1wubyQvKTsKJGRlc19vYmo9JGRlc19lbmMJdW5sZXNzICgkZGVzX29iaiA9fiAvXC5vJC8pOwokYmZfb2JqPSRiZl9lbmMJCXVubGVzcyAoJGJmX29iaiA9fiAvXC5vJC8pOwokY2FzdF9vYmo9JGNhc3RfZW5jCXVubGVzcyAoJGNhc3Rfb2JqID1+IC9cLm8kLyk7CiRyYzRfb2JqPSRyYzRfZW5jCXVubGVzcyAoJHJjNF9vYmogPX4gL1wubyQvKTsKJHJjNV9vYmo9JHJjNV9lbmMJdW5sZXNzICgkcmM1X29iaiA9fiAvXC5vJC8pOwppZiAoJHNoYTFfb2JqID1+IC9cLm8kLykKCXsKIwkkc2hhMV9vYmo9JHNoYTFfZW5jOwoJJGNmbGFncy49IiAtRFNIQTFfQVNNIiAgIGlmICgkc2hhMV9vYmogPX4gL3N4ODYvIHx8ICRzaGExX29iaiA9fiAvc2hhMS8pOwoJJGNmbGFncy49IiAtRFNIQTI1Nl9BU00iIGlmICgkc2hhMV9vYmogPX4gL3NoYTI1Ni8pOwoJJGNmbGFncy49IiAtRFNIQTUxMl9BU00iIGlmICgkc2hhMV9vYmogPX4gL3NoYTUxMi8pOwoJaWYgKCRzaGExX29iaiA9fiAvc3NlMi8pCgkgICAgewlpZiAoJG5vX3NzZTIpCgkJeyAgICRzaGExX29iaiA9fiBzL1xTKnNzZTJcUysvLzsgICAgICAgIH0KCQllbHNpZiAoJGNmbGFncyAhfiAvT1BFTlNTTF9JQTMyX1NTRTIvKQoJCXsgICAkY2ZsYWdzLj0iIC1ET1BFTlNTTF9JQTMyX1NTRTIiOyAgICB9CgkgICAgfQoJfQppZiAoJG1kNV9vYmogPX4gL1wubyQvKQoJewojCSRtZDVfb2JqPSRtZDVfZW5jOwoJJGNmbGFncy49IiAtRE1ENV9BU00iOwoJfQppZiAoJHJtZDE2MF9vYmogPX4gL1wubyQvKQoJewojCSRybWQxNjBfb2JqPSRybWQxNjBfZW5jOwoJJGNmbGFncy49IiAtRFJNRDE2MF9BU00iOwoJfQppZiAoJGFlc19vYmogPX4gL1wubyQvKQoJewoJJGNmbGFncy49IiAtREFFU19BU00iOwoJIyBhZXMtY3RyLm8gaXMgbm90IGEgcmVhbCBmaWxlLCBvbmx5IGluZGljYXRpb24gdGhhdCBhc3NlbWJsZXIKCSMgbW9kdWxlIGltcGxlbWVudHMgQUVTX2N0cjMyX2VuY3J5cHQuLi4KCSRjZmxhZ3MuPSIgLURBRVNfQ1RSX0FTTSIgaWYgKCRhZXNfb2JqID1+IHMvXHMqYWVzXC1jdHJcLm8vLyk7CgkjIGFlcy14dHMubyBpbmRpY2F0ZXMgcHJlc2Vuc2Ugb2YgQUVTX3h0c19bZW58ZGVdY3J5cHQuLi4KCSRjZmxhZ3MuPSIgLURBRVNfWFRTX0FTTSIgaWYgKCRhZXNfb2JqID1+IHMvXHMqYWVzXC14dHNcLm8vLyk7CgkkYWVzX29iaiA9fiBzL1xzKih2cGFlc3xhZXNuaSlcLXg4Nlwuby8vZyBpZiAoJG5vX3NzZTIpOwoJJGNmbGFncy49IiAtRFZQQUVTX0FTTSIgaWYgKCRhZXNfb2JqID1+IG0vdnBhZXMvKTsKCSRjZmxhZ3MuPSIgLURCU0FFU19BU00iIGlmICgkYWVzX29iaiA9fiBtL2JzYWVzLyk7Cgl9CmVsc2UJewoJJGFlc19vYmo9JGFlc19lbmM7Cgl9CiR3cF9vYmo9IiIgaWYgKCR3cF9vYmogPX4gL21teC8gJiYgJHByb2Nlc3NvciBlcSAiMzg2Iik7CmlmICgkd3Bfb2JqID1+IC9cLm8kLyAmJiAhJGRpc2FibGVkeyJ3aGlybHBvb2wifSkKCXsKCSRjZmxhZ3MuPSIgLURXSElSTFBPT0xfQVNNIjsKCX0KZWxzZQl7Cgkkd3Bfb2JqPSJ3cF9ibG9jay5vIjsKCX0KJGNtbGxfb2JqPSRjbWxsX2VuYwl1bmxlc3MgKCRjbWxsX29iaiA9fiAvLm8kLyk7CmlmICgkbW9kZXNfb2JqID1+IC9naGFzaC8pCgl7CgkkY2ZsYWdzLj0iIC1ER0hBU0hfQVNNIjsKCX0KCiMgIlN0cmluZ2lmeSIgdGhlIEMgZmxhZ3Mgc3RyaW5nLiAgVGhpcyBwZXJtaXRzIGl0IHRvIGJlIG1hZGUgcGFydCBvZiBhIHN0cmluZwojIGFuZCB3b3JrcyBhcyB3ZWxsIG9uIGNvbW1hbmQgbGluZXMuCiRjZmxhZ3MgPX4gcy8oW1xcXCJdKS9cXFwxL2c7CgpteSAkdmVyc2lvbiA9ICJ1bmtub3duIjsKbXkgJHZlcnNpb25fbnVtID0gInVua25vd24iOwpteSAkbWFqb3IgPSAidW5rbm93biI7Cm15ICRtaW5vciA9ICJ1bmtub3duIjsKbXkgJHNobGliX3ZlcnNpb25fbnVtYmVyID0gInVua25vd24iOwpteSAkc2hsaWJfdmVyc2lvbl9oaXN0b3J5ID0gInVua25vd24iOwpteSAkc2hsaWJfbWFqb3IgPSAidW5rbm93biI7Cm15ICRzaGxpYl9taW5vciA9ICJ1bmtub3duIjsKCm9wZW4oSU4sJzxjcnlwdG8vb3BlbnNzbHYuaCcpIHx8IGRpZSAidW5hYmxlIHRvIHJlYWQgb3BlbnNzbHYuaDokIVxuIjsKd2hpbGUgKDxJTj4pCgl7CgkkdmVyc2lvbj0kMSBpZiAvT1BFTlNTTC5WRVJTSU9OLlRFWFQuKk9wZW5TU0wgKFxTKykgLzsKCSR2ZXJzaW9uX251bT0kMSBpZiAvT1BFTlNTTC5WRVJTSU9OLk5VTUJFUi4qMHgoXFMrKS87Cgkkc2hsaWJfdmVyc2lvbl9udW1iZXI9JDEgaWYgL1NITElCX1ZFUlNJT05fTlVNQkVSICoiKFteIl0rKSIvOwoJJHNobGliX3ZlcnNpb25faGlzdG9yeT0kMSBpZiAvU0hMSUJfVkVSU0lPTl9ISVNUT1JZICoiKFteIl0qKSIvOwoJfQpjbG9zZShJTik7CmlmICgkc2hsaWJfdmVyc2lvbl9oaXN0b3J5IG5lICIiKSB7ICRzaGxpYl92ZXJzaW9uX2hpc3RvcnkgLj0gIjoiOyB9CgppZiAoJHZlcnNpb24gPX4gLyheWzAtOV0qKVwuKFswLTlcLl0qKS8pCgl7CgkkbWFqb3I9JDE7CgkkbWlub3I9JDI7Cgl9CgppZiAoJHNobGliX3ZlcnNpb25fbnVtYmVyID1+IC8oXlswLTldKilcLihbMC05XC5dKikvKQoJewoJJHNobGliX21ham9yPSQxOwoJJHNobGliX21pbm9yPSQyOwoJfQoKaWYgKCRzdHJpY3Rfd2FybmluZ3MpCgl7CglteSAkZWNjID0gJGNjOwoJJGVjYyA9ICJjbGFuZyIgaWYgYCRjYyAtLXZlcnNpb24gMj4mMWAgPX4gL2NsYW5nLzsKCW15ICR3b3B0OwoJZGllICJFUlJPUiAtLXN0cmljdC13YXJuaW5ncyByZXF1aXJlcyBnY2Mgb3IgY2xhbmciIHVubGVzcyAoJGVjYyA9fiAvZ2NjJC8gb3IgJGVjYyA9fiAvY2xhbmckLyk7Cglmb3JlYWNoICR3b3B0IChzcGxpdCAvXHMrLywgJGdjY19kZXZ0ZWFtX3dhcm4pCgkJewoJCSRjZmxhZ3MgLj0gIiAkd29wdCIgdW5sZXNzICgkY2ZsYWdzID1+IC8oXnxccykkd29wdChcc3wkKS8pCgkJfQoJaWYgKCRlY2MgZXEgImNsYW5nIikKCQl7CgkJZm9yZWFjaCAkd29wdCAoc3BsaXQgL1xzKy8sICRjbGFuZ19kZXZ0ZWFtX3dhcm4pCgkJCXsKCQkJJGNmbGFncyAuPSAiICR3b3B0IiB1bmxlc3MgKCRjZmxhZ3MgPX4gLyhefFxzKSR3b3B0KFxzfCQpLykKCQkJfQoJCX0KCX0KCm9wZW4oSU4sJzxNYWtlZmlsZS5vcmcnKSB8fCBkaWUgInVuYWJsZSB0byByZWFkIE1ha2VmaWxlLm9yZzokIVxuIjsKdW5saW5rKCIkTWFrZWZpbGUubmV3IikgfHwgZGllICJ1bmFibGUgdG8gcmVtb3ZlIG9sZCAkTWFrZWZpbGUubmV3OiQhXG4iIGlmIC1lICIkTWFrZWZpbGUubmV3IjsKb3BlbihPVVQsIj4kTWFrZWZpbGUubmV3IikgfHwgZGllICJ1bmFibGUgdG8gY3JlYXRlICRNYWtlZmlsZS5uZXc6JCFcbiI7CnByaW50IE9VVCAiIyMjIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGZyb20gTWFrZWZpbGUub3JnIGJ5IENvbmZpZ3VyZS5cblxuIjsKbXkgJHNkaXJzPTA7CndoaWxlICg8SU4+KQoJewoJY2hvbXA7Cgkkc2RpcnMgPSAxIGlmIC9eU0RJUlM9LzsKCWlmICgkc2RpcnMpIHsKCQlteSAkZGlyOwoJCWZvcmVhY2ggJGRpciAoQHNraXApIHsKCQkJcy8oXHMpJGRpciAvJDEvOwoJCQlzL1xzJGRpciQvLzsKCQkJfQoJCX0KCSRzZGlycyA9IDAgdW5sZXNzIC9cXCQvOwogICAgICAgIHMvZW5naW5lcyAvLyBpZiAoL15ESVJTPS8gJiYgJGRpc2FibGVkeyJlbmdpbmUifSk7CglzL2NjZ29zdC8vIGlmICgvXkVOR0RJUlM9LyAmJiAkZGlzYWJsZWR7Imdvc3QifSk7CglzL15WRVJTSU9OPS4qL1ZFUlNJT049JHZlcnNpb24vOwoJcy9eTUFKT1I9LiovTUFKT1I9JG1ham9yLzsKCXMvXk1JTk9SPS4qL01JTk9SPSRtaW5vci87CglzL15TSExJQl9WRVJTSU9OX05VTUJFUj0uKi9TSExJQl9WRVJTSU9OX05VTUJFUj0kc2hsaWJfdmVyc2lvbl9udW1iZXIvOwoJcy9eU0hMSUJfVkVSU0lPTl9ISVNUT1JZPS4qL1NITElCX1ZFUlNJT05fSElTVE9SWT0kc2hsaWJfdmVyc2lvbl9oaXN0b3J5LzsKCXMvXlNITElCX01BSk9SPS4qL1NITElCX01BSk9SPSRzaGxpYl9tYWpvci87CglzL15TSExJQl9NSU5PUj0uKi9TSExJQl9NSU5PUj0kc2hsaWJfbWlub3IvOwoJcy9eU0hMSUJfRVhUPS4qL1NITElCX0VYVD0kc2hhcmVkX2V4dGVuc2lvbi87CglzL15JTlNUQUxMVE9QPS4qJC9JTlNUQUxMVE9QPSRwcmVmaXgvOwoJcy9eTVVMVElMSUI9LiokL01VTFRJTElCPSRtdWx0aWxpYi87CglzL15PUEVOU1NMRElSPS4qJC9PUEVOU1NMRElSPSRvcGVuc3NsZGlyLzsKCXMvXkxJQkRJUj0uKiQvTElCRElSPSRsaWJkaXIvOwoJcy9eSU5TVEFMTF9QUkVGSVg9LiokL0lOU1RBTExfUFJFRklYPSRpbnN0YWxsX3ByZWZpeC87CglzL15QTEFURk9STT0uKiQvUExBVEZPUk09JHRhcmdldC87CglzL15PUFRJT05TPS4qJC9PUFRJT05TPSRvcHRpb25zLzsKCXMvXkNPTkZJR1VSRV9BUkdTPS4qJC9DT05GSUdVUkVfQVJHUz0kYXJndnN0cmluZy87CglpZiAoJGNyb3NzX2NvbXBpbGVfcHJlZml4KQoJCXsKCQlzL15DQz0uKiQvQ1JPU1NfQ09NUElMRT0gJGNyb3NzX2NvbXBpbGVfcHJlZml4XG5DQz0gXCRcKENST1NTX0NPTVBJTEVcKSRjYy87CgkJcy9eQVI9XHMqL0FSPSBcJFwoQ1JPU1NfQ09NUElMRVwpLzsKCQlzL15OTT1ccyovTk09IFwkXChDUk9TU19DT01QSUxFXCkvOwoJCXMvXlJBTkxJQj1ccyovUkFOTElCPSBcJFwoQ1JPU1NfQ09NUElMRVwpLzsKCQlzL15NQUtFREVQUFJPRz0uKiQvTUFLRURFUFBST0c9IFwkXChDUk9TU19DT01QSUxFXCkkY2MvIGlmICRjYyBlcSAiZ2NjIjsKCQl9CgllbHNlCXsKCQlzL15DQz0uKiQvQ0M9ICRjYy87CgkJcy9eQVI9XHMqYXIvQVI9ICRhci87CgkJcy9eUkFOTElCPS4qL1JBTkxJQj0gJHJhbmxpYi87CgkJcy9eTUFLRURFUFBST0c9LiokL01BS0VERVBQUk9HPSAkY2MvIGlmICRjYyBlcSAiZ2NjIjsKCQl9CglzL15DRkxBRz0uKiQvQ0ZMQUc9ICRjZmxhZ3MvOwoJcy9eREVQRkxBRz0uKiQvREVQRkxBRz0kZGVwZmxhZ3MvOwoJcy9eUEVYX0xJQlM9LiokL1BFWF9MSUJTPSAkcHJlbGZsYWdzLzsKCXMvXkVYX0xJQlM9LiokL0VYX0xJQlM9ICRsZmxhZ3MvOwoJcy9eRVhFX0VYVD0uKiQvRVhFX0VYVD0gJGV4ZV9leHQvOwoJcy9eQ1BVSURfT0JKPS4qJC9DUFVJRF9PQko9ICRjcHVpZF9vYmovOwoJcy9eQk5fQVNNPS4qJC9CTl9BU009ICRibl9vYmovOwoJcy9eREVTX0VOQz0uKiQvREVTX0VOQz0gJGRlc19vYmovOwoJcy9eQUVTX0VOQz0uKiQvQUVTX0VOQz0gJGFlc19vYmovOwoJcy9eQkZfRU5DPS4qJC9CRl9FTkM9ICRiZl9vYmovOwoJcy9eQ0FTVF9FTkM9LiokL0NBU1RfRU5DPSAkY2FzdF9vYmovOwoJcy9eUkM0X0VOQz0uKiQvUkM0X0VOQz0gJHJjNF9vYmovOwoJcy9eUkM1X0VOQz0uKiQvUkM1X0VOQz0gJHJjNV9vYmovOwoJcy9eTUQ1X0FTTV9PQko9LiokL01ENV9BU01fT0JKPSAkbWQ1X29iai87CglzL15TSEExX0FTTV9PQko9LiokL1NIQTFfQVNNX09CSj0gJHNoYTFfb2JqLzsKCXMvXlJNRDE2MF9BU01fT0JKPS4qJC9STUQxNjBfQVNNX09CSj0gJHJtZDE2MF9vYmovOwoJcy9eV1BfQVNNX09CSj0uKiQvV1BfQVNNX09CSj0gJHdwX29iai87CglzL15DTUxMX0VOQz0uKiQvQ01MTF9FTkM9ICRjbWxsX29iai87CglzL15NT0RFU19BU01fT0JKLj0qJC9NT0RFU19BU01fT0JKPSAkbW9kZXNfb2JqLzsKCXMvXkVOR0lORVNfQVNNX09CSi49KiQvRU5HSU5FU19BU01fT0JKPSAkZW5naW5lc19vYmovOwoJcy9eUEVSTEFTTV9TQ0hFTUU9LiokL1BFUkxBU01fU0NIRU1FPSAkcGVybGFzbV9zY2hlbWUvOwoJcy9eUFJPQ0VTU09SPS4qL1BST0NFU1NPUj0gJHByb2Nlc3Nvci87CglzL15BUkZMQUdTPS4qL0FSRkxBR1M9ICRhcmZsYWdzLzsKCXMvXlBFUkw9LiovUEVSTD0gJHBlcmwvOwoJcy9eS1JCNV9JTkNMVURFUz0uKi9LUkI1X0lOQ0xVREVTPSR3aXRoYXJnc3sia3JiNS1pbmNsdWRlIn0vOwoJcy9eTElCS1JCNT0uKi9MSUJLUkI1PSR3aXRoYXJnc3sia3JiNS1saWIifS87CglzL15MSUJaTElCPS4qL0xJQlpMSUI9JHdpdGhhcmdzeyJ6bGliLWxpYiJ9LzsKCXMvXlpMSUJfSU5DTFVERT0uKi9aTElCX0lOQ0xVREU9JHdpdGhhcmdzeyJ6bGliLWluY2x1ZGUifS87CgoJcy9eRklQU0RJUj0uKi9GSVBTRElSPSRmaXBzZGlyLzsKCXMvXkZJUFNMSUJESVI9LiovRklQU0xJQkRJUj0kZmlwc2xpYmRpci87CglzL15GSVBTQ0FOTElCPS4qL0ZJUFNDQU5MSUI9bGliY3J5cHRvLyBpZiAkZmlwczsKCXMvXkJBU0VBRERSPS4qL0JBU0VBRERSPSRiYXNlYWRkci87CgoJcy9eU0hMSUJfVEFSR0VUPS4qL1NITElCX1RBUkdFVD0kc2hhcmVkX3RhcmdldC87CglzL15TSExJQl9NQVJLPS4qL1NITElCX01BUks9JHNoYXJlZF9tYXJrLzsKCXMvXlNIQVJFRF9MSUJTPS4qL1NIQVJFRF9MSUJTPVwkKFNIQVJFRF9DUllQVE8pIFwkKFNIQVJFRF9TU0wpLyBpZiAoISRub19zaGFyZWQpOwoJaWYgKCRzaGFyZWRfZXh0ZW5zaW9uIG5lICIiICYmICRzaGFyZWRfZXh0ZW5zaW9uID1+IC9eXC5zKFtvbF0pXC5bXlwuXSokLykKCQl7CgkJbXkgJHNvdG1wID0gJDE7CgkJcy9eU0hBUkVEX0xJQlNfTElOS19FWFRTPS4qL1NIQVJFRF9MSUJTX0xJTktfRVhUUz0ucyRzb3RtcC87CgkJfQoJZWxzaWYgKCRzaGFyZWRfZXh0ZW5zaW9uIG5lICIiICYmICRzaGFyZWRfZXh0ZW5zaW9uID1+IC9eXC5bXlwuXSpcLmR5bGliJC8pCgkJewoJCXMvXlNIQVJFRF9MSUJTX0xJTktfRVhUUz0uKi9TSEFSRURfTElCU19MSU5LX0VYVFM9LmR5bGliLzsKCQl9CgllbHNpZiAoJHNoYXJlZF9leHRlbnNpb24gbmUgIiIgJiYgJHNoYXJlZF9leHRlbnNpb24gPX4gL15cLnMoW29sXSlcLlteXC5dKlwuW15cLl0qJC8pCgkJewoJCW15ICRzb3RtcCA9ICQxOwoJCXMvXlNIQVJFRF9MSUJTX0xJTktfRVhUUz0uKi9TSEFSRURfTElCU19MSU5LX0VYVFM9LnMkc290bXAuXCQoU0hMSUJfTUFKT1IpIC5zJHNvdG1wLzsKCQl9CgllbHNpZiAoJHNoYXJlZF9leHRlbnNpb24gbmUgIiIgJiYgJHNoYXJlZF9leHRlbnNpb24gPX4gL15cLlteXC5dKlwuW15cLl0qXC5keWxpYiQvKQoJCXsKCQlzL15TSEFSRURfTElCU19MSU5LX0VYVFM9LiovU0hBUkVEX0xJQlNfTElOS19FWFRTPS5cJChTSExJQl9NQUpPUikuZHlsaWIgLmR5bGliLzsKCQl9CglzL15TSEFSRURfTERGTEFHUz0uKi9TSEFSRURfTERGTEFHUz0kc2hhcmVkX2xkZmxhZy87CglwcmludCBPVVQgJF8uIlxuIjsKCX0KY2xvc2UoSU4pOwpjbG9zZShPVVQpOwpyZW5hbWUoJE1ha2VmaWxlLCIkTWFrZWZpbGUuYmFrIikgfHwgZGllICJ1bmFibGUgdG8gcmVuYW1lICRNYWtlZmlsZVxuIiBpZiAtZSAkTWFrZWZpbGU7CnJlbmFtZSgiJE1ha2VmaWxlLm5ldyIsJE1ha2VmaWxlKSB8fCBkaWUgInVuYWJsZSB0byByZW5hbWUgJE1ha2VmaWxlLm5ld1xuIjsKCnByaW50ICJDQyAgICAgICAgICAgID0kY2NcbiI7CnByaW50ICJDRkxBRyAgICAgICAgID0kY2ZsYWdzXG4iOwpwcmludCAiRVhfTElCUyAgICAgICA9JGxmbGFnc1xuIjsKcHJpbnQgIkNQVUlEX09CSiAgICAgPSRjcHVpZF9vYmpcbiI7CnByaW50ICJCTl9BU00gICAgICAgID0kYm5fb2JqXG4iOwpwcmludCAiREVTX0VOQyAgICAgICA9JGRlc19vYmpcbiI7CnByaW50ICJBRVNfRU5DICAgICAgID0kYWVzX29ialxuIjsKcHJpbnQgIkJGX0VOQyAgICAgICAgPSRiZl9vYmpcbiI7CnByaW50ICJDQVNUX0VOQyAgICAgID0kY2FzdF9vYmpcbiI7CnByaW50ICJSQzRfRU5DICAgICAgID0kcmM0X29ialxuIjsKcHJpbnQgIlJDNV9FTkMgICAgICAgPSRyYzVfb2JqXG4iOwpwcmludCAiTUQ1X09CSl9BU00gICA9JG1kNV9vYmpcbiI7CnByaW50ICJTSEExX09CSl9BU00gID0kc2hhMV9vYmpcbiI7CnByaW50ICJSTUQxNjBfT0JKX0FTTT0kcm1kMTYwX29ialxuIjsKcHJpbnQgIkNNTExfRU5DICAgICAgPSRjbWxsX29ialxuIjsKcHJpbnQgIk1PREVTX09CSiAgICAgPSRtb2Rlc19vYmpcbiI7CnByaW50ICJFTkdJTkVTX09CSiAgID0kZW5naW5lc19vYmpcbiI7CnByaW50ICJQUk9DRVNTT1IgICAgID0kcHJvY2Vzc29yXG4iOwpwcmludCAiUkFOTElCICAgICAgICA9JHJhbmxpYlxuIjsKcHJpbnQgIkFSRkxBR1MgICAgICAgPSRhcmZsYWdzXG4iOwpwcmludCAiUEVSTCAgICAgICAgICA9JHBlcmxcbiI7CnByaW50ICJLUkI1X0lOQ0xVREVTID0iLCR3aXRoYXJnc3sia3JiNS1pbmNsdWRlIn0sIlxuIgoJaWYgJHdpdGhhcmdzeyJrcmI1LWluY2x1ZGUifSBuZSAiIjsKCm15ICRkZXNfcHRyPTA7Cm15ICRkZXNfcmlzYzE9MDsKbXkgJGRlc19yaXNjMj0wOwpteSAkZGVzX3Vucm9sbD0wOwpteSAkYm5fbGw9MDsKbXkgJGRlZl9pbnQ9MjsKbXkgJHJjNF9pbnQ9JGRlZl9pbnQ7Cm15ICRtZDJfaW50PSRkZWZfaW50OwpteSAkaWRlYV9pbnQ9JGRlZl9pbnQ7Cm15ICRyYzJfaW50PSRkZWZfaW50OwpteSAkcmM0X2lkeD0wOwpteSAkcmM0X2NodW5rPTA7Cm15ICRiZl9wdHI9MDsKbXkgQHR5cGU9KCJjaGFyIiwic2hvcnQiLCJpbnQiLCJsb25nIik7Cm15ICgkYjY0bCwkYjY0LCRiMzIsJGIxNiwkYjgpPSgwLDAsMSwwLDApOwpteSAkZXhwb3J0X3Zhcl9hc19mbj0wOwoKbXkgJGRlc19pbnQ7Cgpmb3JlYWNoIChzb3J0IHNwbGl0KC9ccysvLCRibl9vcHMpKQoJewoJJGRlc19wdHI9MSBpZiAvREVTX1BUUi87CgkkZGVzX3Jpc2MxPTEgaWYgL0RFU19SSVNDMS87CgkkZGVzX3Jpc2MyPTEgaWYgL0RFU19SSVNDMi87CgkkZGVzX3Vucm9sbD0xIGlmIC9ERVNfVU5ST0xMLzsKCSRkZXNfaW50PTEgaWYgL0RFU19JTlQvOwoJJGJuX2xsPTEgaWYgL0JOX0xMT05HLzsKCSRyYzRfaW50PTAgaWYgL1JDNF9DSEFSLzsKCSRyYzRfaW50PTMgaWYgL1JDNF9MT05HLzsKCSRyYzRfaWR4PTEgaWYgL1JDNF9JTkRFWC87CgkkcmM0X2NodW5rPTEgaWYgL1JDNF9DSFVOSy87CgkkcmM0X2NodW5rPTIgaWYgL1JDNF9DSFVOS19MTC87CgkkbWQyX2ludD0wIGlmIC9NRDJfQ0hBUi87CgkkbWQyX2ludD0zIGlmIC9NRDJfTE9ORy87CgkkaWRlYV9pbnQ9MSBpZiAvSURFQV9TSE9SVC87CgkkaWRlYV9pbnQ9MyBpZiAvSURFQV9MT05HLzsKCSRyYzJfaW50PTEgaWYgL1JDMl9TSE9SVC87CgkkcmMyX2ludD0zIGlmIC9SQzJfTE9ORy87CgkkYmZfcHRyPTEgaWYgJF8gZXEgIkJGX1BUUiI7CgkkYmZfcHRyPTIgaWYgJF8gZXEgIkJGX1BUUjIiOwoJKCRiNjRsLCRiNjQsJGIzMiwkYjE2LCRiOCk9KDAsMSwwLDAsMCkgaWYgL1NJWFRZX0ZPVVJfQklULzsKCSgkYjY0bCwkYjY0LCRiMzIsJGIxNiwkYjgpPSgxLDAsMCwwLDApIGlmIC9TSVhUWV9GT1VSX0JJVF9MT05HLzsKCSgkYjY0bCwkYjY0LCRiMzIsJGIxNiwkYjgpPSgwLDAsMSwwLDApIGlmIC9USElSVFlfVFdPX0JJVC87CgkoJGI2NGwsJGI2NCwkYjMyLCRiMTYsJGI4KT0oMCwwLDAsMSwwKSBpZiAvU0lYVEVFTl9CSVQvOwoJKCRiNjRsLCRiNjQsJGIzMiwkYjE2LCRiOCk9KDAsMCwwLDAsMSkgaWYgL0VJR0hUX0JJVC87CgkkZXhwb3J0X3Zhcl9hc19mbj0xIGlmIC9FWFBPUlRfVkFSX0FTX0ZOLzsKCX0KCm9wZW4oSU4sJzxjcnlwdG8vb3BlbnNzbGNvbmYuaC5pbicpIHx8IGRpZSAidW5hYmxlIHRvIHJlYWQgY3J5cHRvL29wZW5zc2xjb25mLmguaW46JCFcbiI7CnVubGluaygiY3J5cHRvL29wZW5zc2xjb25mLmgubmV3IikgfHwgZGllICJ1bmFibGUgdG8gcmVtb3ZlIG9sZCBjcnlwdG8vb3BlbnNzbGNvbmYuaC5uZXc6JCFcbiIgaWYgLWUgImNyeXB0by9vcGVuc3NsY29uZi5oLm5ldyI7Cm9wZW4oT1VULCc+Y3J5cHRvL29wZW5zc2xjb25mLmgubmV3JykgfHwgZGllICJ1bmFibGUgdG8gY3JlYXRlIGNyeXB0by9vcGVuc3NsY29uZi5oLm5ldzokIVxuIjsKcHJpbnQgT1VUICIvKiBvcGVuc3NsY29uZi5oICovXG4iOwpwcmludCBPVVQgIi8qIFdBUk5JTkc6IEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGZyb20gb3BlbnNzbGNvbmYuaC5pbiBieSBDb25maWd1cmUuICovXG5cbiI7CgpwcmludCBPVVQgIiNpZmRlZiAgX19jcGx1c3BsdXNcbiI7CnByaW50IE9VVCAiZXh0ZXJuIFwiQ1wiIHtcbiI7CnByaW50IE9VVCAiI2VuZGlmXG4iOwpwcmludCBPVVQgIi8qIE9wZW5TU0wgd2FzIGNvbmZpZ3VyZWQgd2l0aCB0aGUgZm9sbG93aW5nIG9wdGlvbnM6ICovXG4iOwpteSAkb3BlbnNzbF9hbGdvcml0aG1fZGVmaW5lc190cmFucyA9ICRvcGVuc3NsX2FsZ29yaXRobV9kZWZpbmVzOwokb3BlbnNzbF9leHBlcmltZW50YWxfZGVmaW5lcyA9fiBzL15ccyojXHMqZGVmaW5lXHMrT1BFTlNTTF9OT18oLiopLyNpZm5kZWYgT1BFTlNTTF9FWFBFUklNRU5UQUxfJDFcbiMgaWZuZGVmIE9QRU5TU0xfTk9fJDFcbiMgIGRlZmluZSBPUEVOU1NMX05PXyQxXG4jIGVuZGlmXG4jZW5kaWYvbWc7CiRvcGVuc3NsX2FsZ29yaXRobV9kZWZpbmVzX3RyYW5zID1+IHMvXlxzKiNccypkZWZpbmVccytPUEVOU1NMXyguKikvIyBpZiBkZWZpbmVkKE9QRU5TU0xfJDEpIFwmXCYgIWRlZmluZWQoJDEpXG4jICBkZWZpbmUgJDFcbiMgZW5kaWYvbWc7CiRvcGVuc3NsX2FsZ29yaXRobV9kZWZpbmVzID1+IHMvXlxzKiNccypkZWZpbmVccysoLiopLyNpZm5kZWYgJDFcbiMgZGVmaW5lICQxXG4jZW5kaWYvbWc7CiRvcGVuc3NsX2FsZ29yaXRobV9kZWZpbmVzID0gIiAgIC8qIG5vIGNpcGhlcnMgZXhjbHVkZWQgKi9cbiIgaWYgJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXMgZXEgIiI7CiRvcGVuc3NsX3RocmVhZF9kZWZpbmVzID1+IHMvXlxzKiNccypkZWZpbmVccysoLiopLyNpZm5kZWYgJDFcbiMgZGVmaW5lICQxXG4jZW5kaWYvbWc7CiRvcGVuc3NsX3N5c19kZWZpbmVzID1+IHMvXlxzKiNccypkZWZpbmVccysoLiopLyNpZm5kZWYgJDFcbiMgZGVmaW5lICQxXG4jZW5kaWYvbWc7CiRvcGVuc3NsX290aGVyX2RlZmluZXMgPX4gcy9eXHMqI1xzKmRlZmluZVxzKyguKikvI2lmbmRlZiAkMVxuIyBkZWZpbmUgJDFcbiNlbmRpZi9tZzsKcHJpbnQgT1VUICRvcGVuc3NsX3N5c19kZWZpbmVzOwpwcmludCBPVVQgIiNpZm5kZWYgT1BFTlNTTF9ET0lOR19NQUtFREVQRU5EXG5cbiI7CnByaW50IE9VVCAkb3BlbnNzbF9leHBlcmltZW50YWxfZGVmaW5lczsKcHJpbnQgT1VUICJcbiI7CnByaW50IE9VVCAkb3BlbnNzbF9hbGdvcml0aG1fZGVmaW5lczsKcHJpbnQgT1VUICJcbiNlbmRpZiAvKiBPUEVOU1NMX0RPSU5HX01BS0VERVBFTkQgKi9cblxuIjsKcHJpbnQgT1VUICRvcGVuc3NsX3RocmVhZF9kZWZpbmVzOwpwcmludCBPVVQgJG9wZW5zc2xfb3RoZXJfZGVmaW5lcywiXG4iOwoKcHJpbnQgT1VUICIvKiBUaGUgT1BFTlNTTF9OT18qIG1hY3JvcyBhcmUgYWxzbyBkZWZpbmVkIGFzIE5PXyogaWYgdGhlIGFwcGxpY2F0aW9uXG4iOwpwcmludCBPVVQgIiAgIGFza3MgZm9yIGl0LiAgVGhpcyBpcyBhIHRyYW5zaWVudCBmZWF0dXJlIHRoYXQgaXMgcHJvdmlkZWQgZm9yIHRob3NlXG4iOwpwcmludCBPVVQgIiAgIHdobyBoYXZlbid0IGhhZCB0aGUgdGltZSB0byBkbyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBpbiB0aGVpclxuIjsKcHJpbnQgT1VUICIgICBhcHBsaWNhdGlvbnMuICAqL1xuIjsKcHJpbnQgT1VUICIjaWZkZWYgT1BFTlNTTF9BTEdPUklUSE1fREVGSU5FU1xuIjsKcHJpbnQgT1VUICRvcGVuc3NsX2FsZ29yaXRobV9kZWZpbmVzX3RyYW5zOwpwcmludCBPVVQgIiNlbmRpZlxuXG4iOwoKcHJpbnQgT1VUICIjZGVmaW5lIE9QRU5TU0xfQ1BVSURfT0JKXG5cbiIgaWYgKCRjcHVpZF9vYmogbmUgIm1lbV9jbHIubyIpOwoKd2hpbGUgKDxJTj4pCgl7CglpZgkoL14jZGVmaW5lXHMrT1BFTlNTTERJUi8pCgkJewoJCW15ICRmb28gPSAkb3BlbnNzbGRpcjsKCQkkZm9vID1+IHMvXFwvXFxcXC9nOwoJCXByaW50IE9VVCAiI2RlZmluZSBPUEVOU1NMRElSIFwiJGZvb1wiXG4iOwoJCX0KCWVsc2lmCSgvXiNkZWZpbmVccytFTkdJTkVTRElSLykKCQl7CgkJbXkgJGZvbyA9ICIkcHJlZml4LyRsaWJkaXIvZW5naW5lcyI7CgkJJGZvbyA9fiBzL1xcL1xcXFwvZzsKCQlwcmludCBPVVQgIiNkZWZpbmUgRU5HSU5FU0RJUiBcIiRmb29cIlxuIjsKCQl9CgllbHNpZgkoL14jKChkZWZpbmUpfCh1bmRlZikpXHMrT1BFTlNTTF9FWFBPUlRfVkFSX0FTX0ZVTkNUSU9OLykKCQl7IHByaW50ZiBPVVQgIiN1bmRlZiBPUEVOU1NMX0VYUE9SVF9WQVJfQVNfRlVOQ1RJT05cbiIKCQkJaWYgJGV4cG9ydF92YXJfYXNfZm47CgkJICBwcmludGYgT1VUICIjJXMgT1BFTlNTTF9FWFBPUlRfVkFSX0FTX0ZVTkNUSU9OXG4iLAoJCQkoJGV4cG9ydF92YXJfYXNfZm4pPyJkZWZpbmUiOiJ1bmRlZiI7IH0KCWVsc2lmCSgvXiNkZWZpbmVccytPUEVOU1NMX1VOSVNURC8pCgkJewoJCSR1bmlzdGQgPSAiPHVuaXN0ZC5oPiIgaWYgJHVuaXN0ZCBlcSAiIjsKCQlwcmludCBPVVQgIiNkZWZpbmUgT1BFTlNTTF9VTklTVEQgJHVuaXN0ZFxuIjsKCQl9CgllbHNpZgkoL14jKChkZWZpbmUpfCh1bmRlZikpXHMrU0lYVFlfRk9VUl9CSVRfTE9ORy8pCgkJeyBwcmludGYgT1VUICIjJXMgU0lYVFlfRk9VUl9CSVRfTE9OR1xuIiwoJGI2NGwpPyJkZWZpbmUiOiJ1bmRlZiI7IH0KCWVsc2lmCSgvXiMoKGRlZmluZSl8KHVuZGVmKSlccytTSVhUWV9GT1VSX0JJVC8pCgkJeyBwcmludGYgT1VUICIjJXMgU0lYVFlfRk9VUl9CSVRcbiIsKCRiNjQpPyJkZWZpbmUiOiJ1bmRlZiI7IH0KCWVsc2lmCSgvXiMoKGRlZmluZSl8KHVuZGVmKSlccytUSElSVFlfVFdPX0JJVC8pCgkJeyBwcmludGYgT1VUICIjJXMgVEhJUlRZX1RXT19CSVRcbiIsKCRiMzIpPyJkZWZpbmUiOiJ1bmRlZiI7IH0KCWVsc2lmCSgvXiMoKGRlZmluZSl8KHVuZGVmKSlccytTSVhURUVOX0JJVC8pCgkJeyBwcmludGYgT1VUICIjJXMgU0lYVEVFTl9CSVRcbiIsKCRiMTYpPyJkZWZpbmUiOiJ1bmRlZiI7IH0KCWVsc2lmCSgvXiMoKGRlZmluZSl8KHVuZGVmKSlccytFSUdIVF9CSVQvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIEVJR0hUX0JJVFxuIiwoJGI4KT8iZGVmaW5lIjoidW5kZWYiOyB9CgllbHNpZgkoL14jKChkZWZpbmUpfCh1bmRlZikpXHMrQk5fTExPTkdccyokLykKCQl7IHByaW50ZiBPVVQgIiMlcyBCTl9MTE9OR1xuIiwoJGJuX2xsKT8iZGVmaW5lIjoidW5kZWYiOyB9CgllbHNpZgkoL15cI2RlZmluZVxzK0RFU19MT05HXHMrLiovKQoJCXsgcHJpbnRmIE9VVCAiI2RlZmluZSBERVNfTE9ORyB1bnNpZ25lZCAlc1xuIiwKCQkJKCRkZXNfaW50KT8naW50JzonbG9uZyc7IH0KCWVsc2lmCSgvXlwjKGRlZmluZXx1bmRlZilccytERVNfUFRSLykKCQl7IHByaW50ZiBPVVQgIiMlcyBERVNfUFRSXG4iLCgkZGVzX3B0cik/J2RlZmluZSc6J3VuZGVmJzsgfQoJZWxzaWYJKC9eXCMoZGVmaW5lfHVuZGVmKVxzK0RFU19SSVNDMS8pCgkJeyBwcmludGYgT1VUICIjJXMgREVTX1JJU0MxXG4iLCgkZGVzX3Jpc2MxKT8nZGVmaW5lJzondW5kZWYnOyB9CgllbHNpZgkoL15cIyhkZWZpbmV8dW5kZWYpXHMrREVTX1JJU0MyLykKCQl7IHByaW50ZiBPVVQgIiMlcyBERVNfUklTQzJcbiIsKCRkZXNfcmlzYzIpPydkZWZpbmUnOid1bmRlZic7IH0KCWVsc2lmCSgvXlwjKGRlZmluZXx1bmRlZilccytERVNfVU5ST0xMLykKCQl7IHByaW50ZiBPVVQgIiMlcyBERVNfVU5ST0xMXG4iLCgkZGVzX3Vucm9sbCk/J2RlZmluZSc6J3VuZGVmJzsgfQoJZWxzaWYJKC9eI2RlZmluZVxzK1JDNF9JTlRccy8pCgkJeyBwcmludGYgT1VUICIjZGVmaW5lIFJDNF9JTlQgdW5zaWduZWQgJXNcbiIsJHR5cGVbJHJjNF9pbnRdOyB9CgllbHNpZgkoL14jdW5kZWZccytSQzRfQ0hVTksvKQoJCXsKCQlwcmludGYgT1VUICIjdW5kZWYgUkM0X0NIVU5LXG4iIGlmICRyYzRfY2h1bms9PTA7CgkJcHJpbnRmIE9VVCAiI2RlZmluZSBSQzRfQ0hVTksgdW5zaWduZWQgbG9uZ1xuIiBpZiAkcmM0X2NodW5rPT0xOwoJCXByaW50ZiBPVVQgIiNkZWZpbmUgUkM0X0NIVU5LIHVuc2lnbmVkIGxvbmcgbG9uZ1xuIiBpZiAkcmM0X2NodW5rPT0yOwoJCX0KCWVsc2lmCSgvXiMoKGRlZmluZSl8KHVuZGVmKSlccytSQzRfSU5ERVgvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIFJDNF9JTkRFWFxuIiwoJHJjNF9pZHgpPyJkZWZpbmUiOiJ1bmRlZiI7IH0KCWVsc2lmICgvXiMoZGVmaW5lfHVuZGVmKVxzK0kzODZfT05MWS8pCgkJeyBwcmludGYgT1VUICIjJXMgSTM4Nl9PTkxZXG4iLCAoJHByb2Nlc3NvciBlcSAiMzg2Iik/CgkJCSJkZWZpbmUiOiJ1bmRlZiI7IH0KCWVsc2lmCSgvXiNkZWZpbmVccytNRDJfSU5UXHMvKQoJCXsgcHJpbnRmIE9VVCAiI2RlZmluZSBNRDJfSU5UIHVuc2lnbmVkICVzXG4iLCR0eXBlWyRtZDJfaW50XTsgfQoJZWxzaWYJKC9eI2RlZmluZVxzK0lERUFfSU5UXHMvKQoJCXtwcmludGYgT1VUICIjZGVmaW5lIElERUFfSU5UIHVuc2lnbmVkICVzXG4iLCR0eXBlWyRpZGVhX2ludF07fQoJZWxzaWYJKC9eI2RlZmluZVxzK1JDMl9JTlRccy8pCgkJe3ByaW50ZiBPVVQgIiNkZWZpbmUgUkMyX0lOVCB1bnNpZ25lZCAlc1xuIiwkdHlwZVskcmMyX2ludF07fQoJZWxzaWYgKC9eIyhkZWZpbmV8dW5kZWYpXHMrQkZfUFRSLykKCQl7CgkJcHJpbnRmIE9VVCAiI3VuZGVmIEJGX1BUUlxuIiBpZiAkYmZfcHRyID09IDA7CgkJcHJpbnRmIE9VVCAiI2RlZmluZSBCRl9QVFJcbiIgaWYgJGJmX3B0ciA9PSAxOwoJCXByaW50ZiBPVVQgIiNkZWZpbmUgQkZfUFRSMlxuIiBpZiAkYmZfcHRyID09IDI7CgkgICAgICAgIH0KCWVsc2UKCQl7IHByaW50IE9VVCAkXzsgfQoJfQpjbG9zZShJTik7CnByaW50IE9VVCAiI2lmZGVmICBfX2NwbHVzcGx1c1xuIjsKcHJpbnQgT1VUICJ9XG4iOwpwcmludCBPVVQgIiNlbmRpZlxuIjsKY2xvc2UoT1VUKTsKcmVuYW1lKCJjcnlwdG8vb3BlbnNzbGNvbmYuaCIsImNyeXB0by9vcGVuc3NsY29uZi5oLmJhayIpIHx8IGRpZSAidW5hYmxlIHRvIHJlbmFtZSBjcnlwdG8vb3BlbnNzbGNvbmYuaFxuIiBpZiAtZSAiY3J5cHRvL29wZW5zc2xjb25mLmgiOwpyZW5hbWUoImNyeXB0by9vcGVuc3NsY29uZi5oLm5ldyIsImNyeXB0by9vcGVuc3NsY29uZi5oIikgfHwgZGllICJ1bmFibGUgdG8gcmVuYW1lIGNyeXB0by9vcGVuc3NsY29uZi5oLm5ld1xuIjsKCgojIEZpeCB0aGUgZGF0ZQoKcHJpbnQgIlNJWFRZX0ZPVVJfQklUX0xPTkcgbW9kZVxuIiBpZiAkYjY0bDsKcHJpbnQgIlNJWFRZX0ZPVVJfQklUIG1vZGVcbiIgaWYgJGI2NDsKcHJpbnQgIlRISVJUWV9UV09fQklUIG1vZGVcbiIgaWYgJGIzMjsKcHJpbnQgIlNJWFRFRU5fQklUIG1vZGVcbiIgaWYgJGIxNjsKcHJpbnQgIkVJR0hUX0JJVCBtb2RlXG4iIGlmICRiODsKcHJpbnQgIkRFU19QVFIgdXNlZFxuIiBpZiAkZGVzX3B0cjsKcHJpbnQgIkRFU19SSVNDMSB1c2VkXG4iIGlmICRkZXNfcmlzYzE7CnByaW50ICJERVNfUklTQzIgdXNlZFxuIiBpZiAkZGVzX3Jpc2MyOwpwcmludCAiREVTX1VOUk9MTCB1c2VkXG4iIGlmICRkZXNfdW5yb2xsOwpwcmludCAiREVTX0lOVCB1c2VkXG4iIGlmICRkZXNfaW50OwpwcmludCAiQk5fTExPTkcgbW9kZVxuIiBpZiAkYm5fbGw7CnByaW50ICJSQzQgdXNlcyB1JHR5cGVbJHJjNF9pbnRdXG4iIGlmICRyYzRfaW50ICE9ICRkZWZfaW50OwpwcmludCAiUkM0X0lOREVYIG1vZGVcbiIgaWYgJHJjNF9pZHg7CnByaW50ICJSQzRfQ0hVTksgaXMgdW5kZWZpbmVkXG4iIGlmICRyYzRfY2h1bms9PTA7CnByaW50ICJSQzRfQ0hVTksgaXMgdW5zaWduZWQgbG9uZ1xuIiBpZiAkcmM0X2NodW5rPT0xOwpwcmludCAiUkM0X0NIVU5LIGlzIHVuc2lnbmVkIGxvbmcgbG9uZ1xuIiBpZiAkcmM0X2NodW5rPT0yOwpwcmludCAiTUQyIHVzZXMgdSR0eXBlWyRtZDJfaW50XVxuIiBpZiAkbWQyX2ludCAhPSAkZGVmX2ludDsKcHJpbnQgIklERUEgdXNlcyB1JHR5cGVbJGlkZWFfaW50XVxuIiBpZiAkaWRlYV9pbnQgIT0gJGRlZl9pbnQ7CnByaW50ICJSQzIgdXNlcyB1JHR5cGVbJHJjMl9pbnRdXG4iIGlmICRyYzJfaW50ICE9ICRkZWZfaW50OwpwcmludCAiQkZfUFRSIHVzZWRcbiIgaWYgJGJmX3B0ciA9PSAxOyAKcHJpbnQgIkJGX1BUUjIgdXNlZFxuIiBpZiAkYmZfcHRyID09IDI7IAoKaWYoJElzTUsxTUYpIHsKCW9wZW4gKE9VVCwiPmNyeXB0by9idWlsZGluZi5oIikgfHwgZGllICJDYW4ndCBvcGVuIGJ1aWxkaW5mLmgiOwoJcHJpbnRmIE9VVCA8PEVPRjsKI2lmbmRlZiBNSzFNRl9CVUlMRAogIC8qIGF1dG8tZ2VuZXJhdGVkIGJ5IENvbmZpZ3VyZSBmb3IgY3J5cHRvL2N2ZXJzaW9uLmM6CiAgICogZm9yIFVuaXggYnVpbGRzLCBjcnlwdG8vTWFrZWZpbGUuc3NsIGdlbmVyYXRlcyBmdW5jdGlvbmFsIGRlZmluaXRpb25zOwogICAqIFdpbmRvd3MgYnVpbGRzIChhbmQgb3RoZXIgbWsxbWYgYnVpbGRzKSBjb21waWxlIGN2ZXJzaW9uLmMgd2l0aAogICAqIC1ETUsxTUZfQlVJTEQgYW5kIHVzZSBkZWZpbml0aW9ucyBhZGRlZCB0byB0aGlzIGZpbGUgYnkgdXRpbC9tazFtZi5wbC4gKi8KICAjZXJyb3IgIldpbmRvd3MgYnVpbGRzIChQTEFURk9STT0kdGFyZ2V0KSB1c2UgbWsxbWYucGwtY3JlYXRlZCBNYWtlZmlsZXMiCiNlbmRpZgpFT0YKCWNsb3NlKE9VVCk7Cn0gZWxzZSB7CglteSAkbWFrZV9jb21tYW5kID0gIiRtYWtlIFBFUkw9XCckcGVybFwnIjsKCW15ICRtYWtlX3RhcmdldHMgPSAiIjsKCSRtYWtlX3RhcmdldHMgLj0gIiBsaW5rcyIgaWYgJHN5bWxpbms7CgkkbWFrZV90YXJnZXRzIC49ICIgZGVwZW5kIiBpZiAkZGVwZmxhZ3MgbmUgJGRlZmF1bHRfZGVwZmxhZ3MgJiYgJG1ha2VfZGVwZW5kOwoJJG1ha2VfdGFyZ2V0cyAuPSAiIGdlbnRlc3RzIiBpZiAkc3ltbGluazsKCShzeXN0ZW0gJG1ha2VfY29tbWFuZC4kbWFrZV90YXJnZXRzKSA9PSAwIG9yIGV4aXQgJD8KCQlpZiAkbWFrZV90YXJnZXRzIG5lICIiOwoJaWYgKCAkcGVybCA9fiBtQF4vQCkgewoJICAgICZkb2ZpbGUoInRvb2xzL2NfcmVoYXNoIiwkcGVybCwnXiMhLycsICcjISVzJywnXm15IFwkZGlyOyQnLCAnbXkgJGRpciA9ICInIC4gJG9wZW5zc2xkaXIgLiAnIjsnLCAnXm15IFwkcHJlZml4OyQnLCAnbXkgJHByZWZpeCA9ICInIC4gJHByZWZpeCAuICciOycpOwoJICAgICZkb2ZpbGUoImFwcHMvQ0EucGwiLCRwZXJsLCdeIyEvJywgJyMhJXMnKTsKCX0gZWxzZSB7CgkgICAgIyBObyBwYXRoIGZvciBQZXJsIGtub3duIC4uLgoJICAgICZkb2ZpbGUoInRvb2xzL2NfcmVoYXNoIiwnL3Vzci9sb2NhbC9iaW4vcGVybCcsJ14jIS8nLCAnIyElcycsJ15teSBcJGRpcjskJywgJ215ICRkaXIgPSAiJyAuICRvcGVuc3NsZGlyIC4gJyI7JywgICdebXkgXCRwcmVmaXg7JCcsICdteSAkcHJlZml4ID0gIicgLiAkcHJlZml4IC4gJyI7Jyk7CgkgICAgJmRvZmlsZSgiYXBwcy9DQS5wbCIsJy91c3IvbG9jYWwvYmluL3BlcmwnLCdeIyEvJywgJyMhJXMnKTsKCX0KCWlmICgkZGVwZmxhZ3MgbmUgJGRlZmF1bHRfZGVwZmxhZ3MgJiYgISRtYWtlX2RlcGVuZCkgewogICAgICAgICAgICAkd2Fybl9tYWtlX2RlcGVuZCsrOwogICAgICAgIH0KfQoKIyBjcmVhdGUgdGhlIG1zL3ZlcnNpb24zMi5yYyBmaWxlIGlmIG5lZWRlZAppZiAoJElzTUsxTUYgJiYgKCR0YXJnZXQgIX4gL15uZXR3YXJlLykpIHsKCW15ICgkdjEsICR2MiwgJHYzLCAkdjQpOwoJaWYgKCR2ZXJzaW9uX251bSA9fiAvKF5bMC05YS1mXXsxfSkoWzAtOWEtZl17Mn0pKFswLTlhLWZdezJ9KShbMC05YS1mXXsyfSkvaSkgewoJCSR2MT1oZXggJDE7CgkJJHYyPWhleCAkMjsKCQkkdjM9aGV4ICQzOwoJCSR2ND1oZXggJDQ7Cgl9CglvcGVuIChPVVQsIj5tcy92ZXJzaW9uMzIucmMiKSB8fCBkaWUgIkNhbid0IG9wZW4gbXMvdmVyc2lvbjMyLnJjIjsKCXByaW50IE9VVCA8PEVPRjsKI2luY2x1ZGUgPHdpbnZlci5oPgoKTEFOR1VBR0UgMHgwOSwweDAxCgoxIFZFUlNJT05JTkZPCiAgRklMRVZFUlNJT04gJHYxLCR2MiwkdjMsJHY0CiAgUFJPRFVDVFZFUlNJT04gJHYxLCR2MiwkdjMsJHY0CiAgRklMRUZMQUdTTUFTSyAweDNmTAojaWZkZWYgX0RFQlVHCiAgRklMRUZMQUdTIDB4MDFMCiNlbHNlCiAgRklMRUZMQUdTIDB4MDBMCiNlbmRpZgogIEZJTEVPUyBWT1NfX1dJTkRPV1MzMgogIEZJTEVUWVBFIFZGVF9ETEwKICBGSUxFU1VCVFlQRSAweDBMCkJFR0lOCiAgICBCTE9DSyAiU3RyaW5nRmlsZUluZm8iCiAgICBCRUdJTgoJQkxPQ0sgIjA0MDkwNGIwIgoJQkVHSU4KCSAgICAvLyBSZXF1aXJlZDoJICAgIAoJICAgIFZBTFVFICJDb21wYW55TmFtZSIsICJUaGUgT3BlblNTTCBQcm9qZWN0LCBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL1xcMCIKCSAgICBWQUxVRSAiRmlsZURlc2NyaXB0aW9uIiwgIk9wZW5TU0wgU2hhcmVkIExpYnJhcnlcXDAiCgkgICAgVkFMVUUgIkZpbGVWZXJzaW9uIiwgIiR2ZXJzaW9uXFwwIgojaWYgZGVmaW5lZChDUllQVE8pCgkgICAgVkFMVUUgIkludGVybmFsTmFtZSIsICJsaWJlYXkzMlxcMCIKCSAgICBWQUxVRSAiT3JpZ2luYWxGaWxlbmFtZSIsICJsaWJlYXkzMi5kbGxcXDAiCiNlbGlmIGRlZmluZWQoU1NMKQoJICAgIFZBTFVFICJJbnRlcm5hbE5hbWUiLCAic3NsZWF5MzJcXDAiCgkgICAgVkFMVUUgIk9yaWdpbmFsRmlsZW5hbWUiLCAic3NsZWF5MzIuZGxsXFwwIgojZW5kaWYKCSAgICBWQUxVRSAiUHJvZHVjdE5hbWUiLCAiVGhlIE9wZW5TU0wgVG9vbGtpdFxcMCIKCSAgICBWQUxVRSAiUHJvZHVjdFZlcnNpb24iLCAiJHZlcnNpb25cXDAiCgkgICAgLy8gT3B0aW9uYWw6CgkgICAgLy9WQUxVRSAiQ29tbWVudHMiLCAiXFwwIgoJICAgIFZBTFVFICJMZWdhbENvcHlyaWdodCIsICJDb3B5cmlnaHQgqSAxOTk4LTIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gQ29weXJpZ2h0IKkgMTk5NS0xOTk4IEVyaWMgQS4gWW91bmcsIFRpbSBKLiBIdWRzb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXFwwIgoJICAgIC8vVkFMVUUgIkxlZ2FsVHJhZGVtYXJrcyIsICJcXDAiCgkgICAgLy9WQUxVRSAiUHJpdmF0ZUJ1aWxkIiwgIlxcMCIKCSAgICAvL1ZBTFVFICJTcGVjaWFsQnVpbGQiLCAiXFwwIgoJRU5ECiAgICBFTkQKICAgIEJMT0NLICJWYXJGaWxlSW5mbyIKICAgIEJFR0lOCiAgICAgICAgVkFMVUUgIlRyYW5zbGF0aW9uIiwgMHg0MDksIDB4NGIwCiAgICBFTkQKRU5ECkVPRgoJY2xvc2UoT1VUKTsKICB9CiAgCnByaW50IDw8RU9GOwoKQ29uZmlndXJlZCBmb3IgJHRhcmdldC4KRU9GCgpwcmludCA8PFxFT0YgaWYgKCEkbm9fdGhyZWFkcyAmJiAhJHRocmVhZHMpOwoKVGhlIGxpYnJhcnkgY291bGQgbm90IGJlIGNvbmZpZ3VyZWQgZm9yIHN1cHBvcnRpbmcgbXVsdGktdGhyZWFkZWQKYXBwbGljYXRpb25zIGFzIHRoZSBjb21waWxlciBvcHRpb25zIHJlcXVpcmVkIG9uIHRoaXMgc3lzdGVtIGFyZSBub3Qga25vd24uClNlZSBmaWxlIElOU1RBTEwgZm9yIGRldGFpbHMgaWYgeW91IG5lZWQgbXVsdGktdGhyZWFkaW5nLgpFT0YKCnByaW50IDw8XEVPRiBpZiAoJG5vX3NoYXJlZF93YXJuKTsKCllvdSBnYXZlIHRoZSBvcHRpb24gJ3NoYXJlZCcsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybSwgc28Kd2Ugd2lsbCBwcmV0ZW5kIHlvdSBnYXZlIHRoZSBvcHRpb24gJ25vLXNoYXJlZCcuICBJZiB5b3Uga25vdyBob3cgdG8gaW1wbGVtZW50CnNoYXJlZCBsaWJyYXJpZXMsIHBsZWFzZSBsZXQgdXMga25vdyAoYnV0IHBsZWFzZSBmaXJzdCBtYWtlIHN1cmUgeW91IGhhdmUKdHJpZWQgd2l0aCBhIGN1cnJlbnQgdmVyc2lvbiBvZiBPcGVuU1NMKS4KRU9GCgpwcmludCA8PEVPRiBpZiAoJHdhcm5fbWFrZV9kZXBlbmQpOwoKKioqIEJlY2F1c2Ugb2YgY29uZmlndXJhdGlvbiBjaGFuZ2VzLCB5b3UgTVVTVCBkbyB0aGUgZm9sbG93aW5nIGJlZm9yZQoqKiogYnVpbGRpbmc6CgoJbWFrZSBkZXBlbmQKRU9GCgpleGl0KDApOwoKc3ViIHVzYWdlCgl7CglwcmludCBTVERFUlIgJHVzYWdlOwoJcHJpbnQgU1RERVJSICJcbnBpY2sgb3MvY29tcGlsZXIgZnJvbTpcbiI7CglteSAkaj0wOwoJbXkgJGk7CiAgICAgICAgbXkgJGs9MDsKCWZvcmVhY2ggJGkgKHNvcnQga2V5cyAldGFibGUpCgkJewoJCW5leHQgaWYgJGkgPX4gL15kZWJ1Zy87CgkJJGsgKz0gbGVuZ3RoKCRpKSArIDE7CgkJaWYgKCRrID4gNzgpCgkJCXsKCQkJcHJpbnQgU1RERVJSICJcbiI7CgkJCSRrPWxlbmd0aCgkaSk7CgkJCX0KCQlwcmludCBTVERFUlIgJGkgLiAiICI7CgkJfQoJZm9yZWFjaCAkaSAoc29ydCBrZXlzICV0YWJsZSkKCQl7CgkJbmV4dCBpZiAkaSAhfiAvXmRlYnVnLzsKCQkkayArPSBsZW5ndGgoJGkpICsgMTsKCQlpZiAoJGsgPiA3OCkKCQkJewoJCQlwcmludCBTVERFUlIgIlxuIjsKCQkJJGs9bGVuZ3RoKCRpKTsKCQkJfQoJCXByaW50IFNUREVSUiAkaSAuICIgIjsKCQl9CglwcmludCBTVERFUlIgIlxuXG5OT1RFOiBJZiBpbiBkb3VidCwgb24gVW5peC1pc2ggc3lzdGVtcyB1c2UgJy4vY29uZmlnJy5cbiI7CglleGl0KDEpOwoJfQoKc3ViIHdoaWNoCgl7CglteSgkbmFtZSk9QF87CglteSAkcGF0aDsKCWZvcmVhY2ggJHBhdGggKHNwbGl0IC86LywgJEVOVntQQVRIfSkKCQl7CgkJaWYgKC1mICIkcGF0aC8kbmFtZSRleGVfZXh0IiBhbmQgLXggXykKCQkJewoJCQlyZXR1cm4gIiRwYXRoLyRuYW1lJGV4ZV9leHQiIHVubGVzcyAoJG5hbWUgZXEgInBlcmwiIGFuZAoJCQkgc3lzdGVtKCIkcGF0aC8kbmFtZSRleGVfZXh0IC1lICIgLiAnXCdleGl0KCRdPDUuMCk7XCcnKSk7CgkJCX0KCQl9Cgl9CgpzdWIgZG9maWxlCgl7CglteSAkZjsgbXkgJHA7IG15ICVtOyBteSBAYTsgbXkgJGs7IG15ICRmZjsKCSgkZiwkcCwlbSk9QF87CgoJb3BlbihJTiwiPCRmLmluIikgfHwgb3BlbihJTiwiPCRmIikgfHwgZGllICJ1bmFibGUgdG8gb3BlbiAkZjokIVxuIjsKCUBhPTxJTj47CgljbG9zZShJTik7Cglmb3JlYWNoICRrIChrZXlzICVtKQoJCXsKCQlncmVwKC8kay8gJiYgKCRfPXNwcmludGYoJG17JGt9LiJcbiIsJHApKSxAYSk7CgkJfQoJb3BlbihPVVQsIj4kZi5uZXciKSB8fCBkaWUgInVuYWJsZSB0byBvcGVuICRmLm5ldzokIVxuIjsKCXByaW50IE9VVCBAYTsKCWNsb3NlKE9VVCk7CglyZW5hbWUoJGYsIiRmLmJhayIpIHx8IGRpZSAidW5hYmxlIHRvIHJlbmFtZSAkZlxuIiBpZiAtZSAkZjsKCXJlbmFtZSgiJGYubmV3IiwkZikgfHwgZGllICJ1bmFibGUgdG8gcmVuYW1lICRmLm5ld1xuIjsKCX0KCnN1YiBwcmludF90YWJsZV9lbnRyeQoJewoJbXkgJHRhcmdldCA9IHNoaWZ0OwoKCShteSAkY2MsbXkgJGNmbGFncyxteSAkdW5pc3RkLG15ICR0aHJlYWRfY2ZsYWcsbXkgJHN5c19pZCxteSAkbGZsYWdzLAoJbXkgJGJuX29wcyxteSAkY3B1aWRfb2JqLG15ICRibl9vYmosbXkgJGRlc19vYmosbXkgJGFlc19vYmosIG15ICRiZl9vYmosCglteSAkbWQ1X29iaixteSAkc2hhMV9vYmosbXkgJGNhc3Rfb2JqLG15ICRyYzRfb2JqLG15ICRybWQxNjBfb2JqLAoJbXkgJHJjNV9vYmosbXkgJHdwX29iaixteSAkY21sbF9vYmosbXkgJG1vZGVzX29iaiwgbXkgJGVuZ2luZXNfb2JqLAoJbXkgJHBlcmxhc21fc2NoZW1lLG15ICRkc29fc2NoZW1lLG15ICRzaGFyZWRfdGFyZ2V0LG15ICRzaGFyZWRfY2ZsYWcsCglteSAkc2hhcmVkX2xkZmxhZyxteSAkc2hhcmVkX2V4dGVuc2lvbixteSAkcmFubGliLG15ICRhcmZsYWdzLG15ICRtdWx0aWxpYik9CglzcGxpdCgvXHMqOlxzKi8sJHRhYmxleyR0YXJnZXR9IC4gIjoiIHggMzAgLCAtMSk7CgkJCQoJcHJpbnQgPDxFT0YKCioqKiAkdGFyZ2V0ClwkY2MgICAgICAgICAgID0gJGNjClwkY2ZsYWdzICAgICAgID0gJGNmbGFncwpcJHVuaXN0ZCAgICAgICA9ICR1bmlzdGQKXCR0aHJlYWRfY2ZsYWcgPSAkdGhyZWFkX2NmbGFnClwkc3lzX2lkICAgICAgID0gJHN5c19pZApcJGxmbGFncyAgICAgICA9ICRsZmxhZ3MKXCRibl9vcHMgICAgICAgPSAkYm5fb3BzClwkY3B1aWRfb2JqICAgID0gJGNwdWlkX29iagpcJGJuX29iaiAgICAgICA9ICRibl9vYmoKXCRkZXNfb2JqICAgICAgPSAkZGVzX29iagpcJGFlc19vYmogICAgICA9ICRhZXNfb2JqClwkYmZfb2JqICAgICAgID0gJGJmX29iagpcJG1kNV9vYmogICAgICA9ICRtZDVfb2JqClwkc2hhMV9vYmogICAgID0gJHNoYTFfb2JqClwkY2FzdF9vYmogICAgID0gJGNhc3Rfb2JqClwkcmM0X29iaiAgICAgID0gJHJjNF9vYmoKXCRybWQxNjBfb2JqICAgPSAkcm1kMTYwX29iagpcJHJjNV9vYmogICAgICA9ICRyYzVfb2JqClwkd3Bfb2JqICAgICAgID0gJHdwX29iagpcJGNtbGxfb2JqICAgICA9ICRjbWxsX29iagpcJG1vZGVzX29iaiAgICA9ICRtb2Rlc19vYmoKXCRlbmdpbmVzX29iaiAgPSAkZW5naW5lc19vYmoKXCRwZXJsYXNtX3NjaGVtZSA9ICRwZXJsYXNtX3NjaGVtZQpcJGRzb19zY2hlbWUgICA9ICRkc29fc2NoZW1lClwkc2hhcmVkX3RhcmdldD0gJHNoYXJlZF90YXJnZXQKXCRzaGFyZWRfY2ZsYWcgPSAkc2hhcmVkX2NmbGFnClwkc2hhcmVkX2xkZmxhZyA9ICRzaGFyZWRfbGRmbGFnClwkc2hhcmVkX2V4dGVuc2lvbiA9ICRzaGFyZWRfZXh0ZW5zaW9uClwkcmFubGliICAgICAgID0gJHJhbmxpYgpcJGFyZmxhZ3MgICAgICA9ICRhcmZsYWdzClwkbXVsdGlsaWIgICAgID0gJG11bHRpbGliCkVPRgoJfQoKc3ViIHRlc3Rfc2FuaXR5Cgl7CglteSAkZXJyb3JjbnQgPSAwOwoKCXByaW50IFNUREVSUiAiPSIgeCA3MCwgIlxuIjsKCXByaW50IFNUREVSUiAiPT09IFNBTklUWSBURVNUSU5HIVxuIjsKCXByaW50IFNUREVSUiAiPT09IE5vIGNvbmZpZ3VyYXRpb24gd2lsbCBiZSBkb25lLCBhbGwgb3RoZXIgYXJndW1lbnRzIHdpbGwgYmUgaWdub3JlZCFcbiI7CglwcmludCBTVERFUlIgIj0iIHggNzAsICJcbiI7CgoJZm9yZWFjaCAkdGFyZ2V0IChzb3J0IGtleXMgJXRhYmxlKQoJCXsKCQlAZmllbGRzID0gc3BsaXQoL1xzKjpccyovLCR0YWJsZXskdGFyZ2V0fSAuICI6IiB4IDMwICwgLTEpOwoKCQlpZiAoJGZpZWxkc1skaWR4X2Rzb19zY2hlbWUtMV0gPX4gL14oYmVvc3xkbHxkbGZjbnx3aW4zMnx2bXMpJC8pCgkJCXsKCQkJJGVycm9yY250Kys7CgkJCXByaW50IFNUREVSUiAiU0FOSVRZIEVSUk9SOiAnJHRhcmdldCcgaGFzIHRoZSBkc29fc2NoZW1lIFskaWR4X2Rzb19zY2hlbWVdIHZhbHVlc1xuIjsKCQkJcHJpbnQgU1RERVJSICIgICAgICAgICAgICAgIGluIHRoZSBwcmV2aW91cyBmaWVsZFxuIjsKCQkJfQoJCWVsc2lmICgkZmllbGRzWyRpZHhfZHNvX3NjaGVtZSsxXSA9fiAvXihiZW9zfGRsfGRsZmNufHdpbjMyfHZtcykkLykKCQkJewoJCQkkZXJyb3JjbnQrKzsKCQkJcHJpbnQgU1RERVJSICJTQU5JVFkgRVJST1I6ICckdGFyZ2V0JyBoYXMgdGhlIGRzb19zY2hlbWUgWyRpZHhfZHNvX3NjaGVtZV0gdmFsdWVzXG4iOwoJCQlwcmludCBTVERFUlIgIiAgICAgICAgICAgICAgaW4gdGhlIGZvbGxvd2luZyBmaWVsZFxuIjsKCQkJfQoJCWVsc2lmICgkZmllbGRzWyRpZHhfZHNvX3NjaGVtZV0gIX4gL14oYmVvc3xkbHxkbGZjbnx3aW4zMnx2bXN8KSQvKQoJCQl7CgkJCSRlcnJvcmNudCsrOwoJCQlwcmludCBTVERFUlIgIlNBTklUWSBFUlJPUjogJyR0YXJnZXQnIGhhcyB0aGUgZHNvX3NjaGVtZSBbJGlkeF9kc29fc2NoZW1lXSBmaWVsZCA9ICIsJGZpZWxkc1skaWR4X2Rzb19zY2hlbWVdLCJcbiI7CgkJCXByaW50IFNUREVSUiAiICAgICAgICAgICAgICB2YWxpZCB2YWx1ZXMgYXJlICdiZW9zJywgJ2RsJywgJ2RsZmNuJywgJ3dpbjMyJyBhbmQgJ3ZtcydcbiI7CgkJCX0KCQl9CglwcmludCBTVERFUlIgIk5vIHNhbml0eSBlcnJvcnMgZGV0ZWN0ZWQhXG4iIGlmICRlcnJvcmNudCA9PSAwOwoJcmV0dXJuICRlcnJvcmNudDsKCX0K