OgpldmFsICdleGVjIHBlcmwgLVMgJDAgJHsxKyIkQCJ9JwogICAgaWYgJHJ1bm5pbmdfdW5kZXJfc29tZV9zaGVsbDsKIyMKIyMgIENvbmZpZ3VyZS5wbCAtLSBPcGVuU1NMIHNvdXJjZSB0cmVlIGNvbmZpZ3VyYXRpb24gc2NyaXB0CiMjCgpyZXF1aXJlIDUuMDAwOwpldmFsICd1c2Ugc3RyaWN0Oyc7CgpwcmludCBTVERFUlIgIldhcm5pbmc6IHBlcmwgbW9kdWxlIHN0cmljdCBub3QgZm91bmQuXG4iIGlmICgkQCk7CgojIHNlZSBJTlNUQUxMIGZvciBpbnN0cnVjdGlvbnMuCgpteSAkdXNhZ2U9IlVzYWdlOiBDb25maWd1cmUucGwgW25vLTxjaXBoZXI+IC4uLl0gW2VuYWJsZS08Y2lwaGVyPiAuLi5dIFtleHBlcmltZW50YWwtPGNpcGhlcj4gLi4uXSBbLUR4eHhdIFstbHh4eF0gWy1MeHh4XSBbLWZ4eHhdIFstS3h4eF0gW25vLWh3LXh4eHxuby1od10gW1tuby1ddGhyZWFkc10gW1tuby1dc2hhcmVkXSBbW25vLV16bGlifHpsaWItZHluYW1pY10gW2VuYWJsZS1tb250YXNtXSBbbm8tYXNtXSBbbm8tZHNvXSBbbm8ta3JiNV0gWzM4Nl0gWy0tcHJlZml4PURJUl0gWy0tb3BlbnNzbGRpcj1PUEVOU1NMRElSXSBbLS13aXRoLXh4eFs9dnZ2XV0gWy0tdGVzdC1zYW5pdHldIG9zL2NvbXBpbGVyWzpmbGFnc11cbiI7CgojIE9wdGlvbnM6CiMKIyAtLW9wZW5zc2xkaXIgIGluc3RhbGwgT3BlblNTTCBpbiBPUEVOU1NMRElSIChEZWZhdWx0OiBESVIvc3NsIGlmIHRoZQojICAgICAgICAgICAgICAgLS1wcmVmaXggb3B0aW9uIGlzIGdpdmVuOyAvdXNyL2xvY2FsL3NzbCBvdGhlcndpc2UpCiMgLS1wcmVmaXggICAgICBwcmVmaXggZm9yIHRoZSBPcGVuU1NMIGluY2x1ZGUsIGxpYiBhbmQgYmluIGRpcmVjdG9yaWVzCiMgICAgICAgICAgICAgICAoRGVmYXVsdDogdGhlIE9QRU5TU0xESVIgZGlyZWN0b3J5KQojCiMgLS1pbnN0YWxsX3ByZWZpeCAgQWRkaXRpb25hbCBwcmVmaXggZm9yIHBhY2thZ2UgYnVpbGRlcnMgKGVtcHR5IGJ5CiMgICAgICAgICAgICAgICBkZWZhdWx0KS4gIFRoaXMgbmVlZG4ndCBiZSBzZXQgaW4gYWR2YW5jZSwgeW91IGNhbgojICAgICAgICAgICAgICAganVzdCBhcyB3ZWxsIHVzZSAibWFrZSBJTlNUQUxMX1BSRUZJWD0vd2hhdGV2ZXIgaW5zdGFsbCIuCiMKIyAtLXdpdGgta3JiNS1kaXIgIERlY2xhcmUgd2hlcmUgS2VyYmVyb3MgNSBsaXZlcy4gIFRoZSBsaWJyYXJpZXMgYXJlIGV4cGVjdGVkCiMJCXRvIGxpdmUgaW4gdGhlIHN1YmRpcmVjdG9yeSBsaWIvIGFuZCB0aGUgaGVhZGVyIGZpbGVzIGluCiMJCWluY2x1ZGUvLiAgQSB2YWx1ZSBpcyByZXF1aXJlZC4KIyAtLXdpdGgta3JiNS1saWIgIERlY2xhcmUgd2hlcmUgdGhlIEtlcmJlcm9zIDUgbGlicmFyaWVzIGxpdmUuICBBIHZhbHVlIGlzCiMJCXJlcXVpcmVkLgojCQkoRGVmYXVsdDogS1JCNV9ESVIvbGliKQojIC0td2l0aC1rcmI1LWluY2x1ZGUgIERlY2xhcmUgd2hlcmUgdGhlIEtlcmJlcm9zIDUgaGVhZGVyIGZpbGVzIGxpdmUuICBBCiMJCXZhbHVlIGlzIHJlcXVpcmVkLgojCQkoRGVmYXVsdDogS1JCNV9ESVIvaW5jbHVkZSkKIyAtLXdpdGgta3JiNS1mbGF2b3IgIERlY2xhcmUgd2hhdCBmbGF2b3Igb2YgS2VyYmVyb3MgNSBpcyB1c2VkLiAgQ3VycmVudGx5CiMJCXN1cHBvcnRlZCB2YWx1ZXMgYXJlICJNSVQiIGFuZCAiSGVpbWRhbCIuICBBIHZhbHVlIGlzIHJlcXVpcmVkLgojCiMgLS10ZXN0LXNhbml0eSBNYWtlIGEgbnVtYmVyIG9mIHNhbml0eSBjaGVja3Mgb24gdGhlIGRhdGEgaW4gdGhpcyBmaWxlLgojICAgICAgICAgICAgICAgVGhpcyBpcyBhIGRlYnVnZ2luZyB0b29sIGZvciBPcGVuU1NMIGRldmVsb3BlcnMuCiMKIyBuby1ody14eHggICAgIGRvIG5vdCBjb21waWxlIHN1cHBvcnQgZm9yIHNwZWNpZmljIGNyeXB0byBoYXJkd2FyZS4KIyAgICAgICAgICAgICAgIEdlbmVyaWMgT3BlblNTTC1zdHlsZSBtZXRob2RzIHJlbGF0aW5nIHRvIHRoaXMgc3VwcG9ydAojICAgICAgICAgICAgICAgYXJlIGFsd2F5cyBjb21waWxlZCBidXQgcmV0dXJuIE5VTEwgaWYgdGhlIGhhcmR3YXJlCiMgICAgICAgICAgICAgICBzdXBwb3J0IGlzbid0IGNvbXBpbGVkLgojIG5vLWh3ICAgICAgICAgZG8gbm90IGNvbXBpbGUgc3VwcG9ydCBmb3IgYW55IGNyeXB0byBoYXJkd2FyZS4KIyBbbm8tXXRocmVhZHMgIFtkb24ndF0gdHJ5IHRvIGNyZWF0ZSBhIGxpYnJhcnkgdGhhdCBpcyBzdWl0YWJsZSBmb3IKIyAgICAgICAgICAgICAgIG11bHRpdGhyZWFkZWQgYXBwbGljYXRpb25zIChkZWZhdWx0IGlzICJ0aHJlYWRzIiBpZiB3ZQojICAgICAgICAgICAgICAga25vdyBob3cgdG8gZG8gaXQpCiMgW25vLV1zaGFyZWQJW2Rvbid0XSB0cnkgdG8gY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgd2hlbiBzdXBwb3J0ZWQuCiMgbm8tYXNtICAgICAgICBkbyBub3QgdXNlIGFzc2VtYmxlcgojIG5vLWRzbyAgICAgICAgZG8gbm90IGNvbXBpbGUgaW4gYW55IG5hdGl2ZSBzaGFyZWQtbGlicmFyeSBtZXRob2RzLiBUaGlzCiMgICAgICAgICAgICAgICB3aWxsIGVuc3VyZSB0aGF0IGFsbCBtZXRob2RzIGp1c3QgcmV0dXJuIE5VTEwuCiMgbm8ta3JiNSAgICAgICBkbyBub3QgY29tcGlsZSBpbiBhbnkgS1JCNSBsaWJyYXJ5IG9yIGNvZGUuCiMgW25vLV16bGliICAgICBbZG9uJ3RdIGNvbXBpbGUgc3VwcG9ydCBmb3IgemxpYiBjb21wcmVzc2lvbi4KIyB6bGliLWR5bmFtaWMJTGlrZSAiemxpYiIsIGJ1dCB0aGUgemxpYiBsaWJyYXJ5IGlzIGV4cGVjdGVkIHRvIGJlIGEgc2hhcmVkCiMJCWxpYnJhcnkgYW5kIHdpbGwgYmUgbG9hZGVkIGluIHJ1bi10aW1lIGJ5IHRoZSBPcGVuU1NMIGxpYnJhcnkuCiMgZW5hYmxlLW1vbnRhc20gMC45LjggYnJhbmNoIG9ubHk6IGVuYWJsZSBNb250Z29tZXJ5IHg4NiBhc3NlbWJsZXIgYmFja3BvcnQKIyAgICAgICAgICAgICAgIGZyb20gMC45LjkKIyAzODYgICAgICAgICAgIGdlbmVyYXRlIDgwMzg2IGNvZGUKIyBuby1zc2UyCWRpc2FibGVzIElBLTMyIFNTRTIgY29kZSwgYWJvdmUgb3B0aW9uIGltcGxpZXMgbm8tc3NlMgojIG5vLTxjaXBoZXI+ICAgYnVpbGQgd2l0aG91dCBzcGVjaWZpZWQgYWxnb3JpdGhtIChyc2EsIGlkZWEsIHJjNSwgLi4uKQojIC08eHh4PiArPHh4eD4gY29tcGlsZXIgb3B0aW9ucyBhcmUgcGFzc2VkIHRocm91Z2ggCiMKIyBERUJVR19TQUZFU1RBQ0sgdXNlIHR5cGUtc2FmZSBzdGFja3MgdG8gZW5mb3JjZSB0eXBlLXNhZmV0eSBvbiBzdGFjayBpdGVtcwojCQlwcm92aWRlZCB0byBzdGFjayBjYWxscy4gR2VuZXJhdGVzIHVuaXF1ZSBzdGFjayBmdW5jdGlvbnMgZm9yCiMJCWVhY2ggcG9zc2libGUgc3RhY2sgdHlwZS4KIyBERVNfUFRSCXVzZSBwb2ludGVyIGxvb2t1cCB2cyBhcnJheXMgaW4gdGhlIERFUyBpbiBjcnlwdG8vZGVzL2Rlc19sb2NsLmgKIyBERVNfUklTQzEJdXNlIGRpZmZlcmVudCBERVNfRU5DUllQVCBtYWNybyB0aGF0IGhlbHBzIHJlZHVjZSByZWdpc3RlcgojCQlkZXBlbmRhbmNpZXMgYnV0IG5lZWRzIHRvIG1vcmUgcmVnaXN0ZXJzLCBnb29kIGZvciBSSVNDIENQVSdzCiMgREVTX1JJU0MyCUEgZGlmZmVyZW50IFJJU0MgdmFyaWFudC4KIyBERVNfVU5ST0xMCXVucm9sbCB0aGUgaW5uZXIgREVTIGxvb3AsIHNvbWV0aW1lcyBoZWxwcywgc29tdGltZXMgaGluZGVycy4KIyBERVNfSU5UCXVzZSAnaW50JyBpbnN0ZWFkIG9mICdsb25nJyBmb3IgREVTX0xPTkcgaW4gY3J5cHRvL2Rlcy9kZXMuaAojCQlUaGlzIGlzIHVzZWQgb24gdGhlIERFQyBBbHBoYSB3aGVyZSBsb25nIGlzIDggYnl0ZXMKIwkJYW5kIGludCBpcyA0CiMgQk5fTExPTkcJdXNlIHRoZSB0eXBlICdsb25nIGxvbmcnIGluIGNyeXB0by9ibi9ibi5oCiMgTUQyX0NIQVIJdXNlICdjaGFyJyBpbnN0ZWFkIG9mICdpbnQnIGZvciBNRDJfSU5UIGluIGNyeXB0by9tZDIvbWQyLmgKIyBNRDJfTE9ORwl1c2UgJ2xvbmcnIGluc3RlYWQgb2YgJ2ludCcgZm9yIE1EMl9JTlQgaW4gY3J5cHRvL21kMi9tZDIuaAojIElERUFfU0hPUlQJdXNlICdzaG9ydCcgaW5zdGVhZCBvZiAnaW50JyBmb3IgSURFQV9JTlQgaW4gY3J5cHRvL2lkZWEvaWRlYS5oCiMgSURFQV9MT05HCXVzZSAnbG9uZycgaW5zdGVhZCBvZiAnaW50JyBmb3IgSURFQV9JTlQgaW4gY3J5cHRvL2lkZWEvaWRlYS5oCiMgUkMyX1NIT1JUCXVzZSAnc2hvcnQnIGluc3RlYWQgb2YgJ2ludCcgZm9yIFJDMl9JTlQgaW4gY3J5cHRvL3JjMi9yYzIuaAojIFJDMl9MT05HCXVzZSAnbG9uZycgaW5zdGVhZCBvZiAnaW50JyBmb3IgUkMyX0lOVCBpbiBjcnlwdG8vcmMyL3JjMi5oCiMgUkM0X0NIQVIJdXNlICdjaGFyJyBpbnN0ZWFkIG9mICdpbnQnIGZvciBSQzRfSU5UIGluIGNyeXB0by9yYzQvcmM0LmgKIyBSQzRfTE9ORwl1c2UgJ2xvbmcnIGluc3RlYWQgb2YgJ2ludCcgZm9yIFJDNF9JTlQgaW4gY3J5cHRvL3JjNC9yYzQuaAojIFJDNF9JTkRFWAlkZWZpbmUgUkM0X0lOREVYIGluIGNyeXB0by9yYzQvcmM0X2xvY2wuaC4gIFRoaXMgdHVybnMgb24KIwkJYXJyYXkgbG9va3VwcyBpbnN0ZWFkIG9mIHBvaW50ZXIgdXNlLgojIFJDNF9DSFVOSwllbmFibGVzIGNvZGUgdGhhdCBoYW5kbGVzIGRhdGEgYWxpZ25lZCBhdCBsb25nIChuYXR1cmFsIENQVQojCQl3b3JkKSBib3VuZGFyeS4KIyBSQzRfQ0hVTktfTEwJZW5hYmxlcyBjb2RlIHRoYXQgaGFuZGxlcyBkYXRhIGFsaWduZWQgYXQgbG9uZyBsb25nIGJvdW5kYXJ5CiMJCShpbnRlbmRlZCBmb3IgNjQtYml0IENQVXMgcnVubmluZyAzMi1iaXQgT1MpLgojIEJGX1BUUgl1c2UgJ3BvaW50ZXIgYXJpdGhtYXRpYycgZm9yIEJsb3dmaXNoICh1bnNhZmUgb24gQWxwaGEpLgojIEJGX1BUUjIJaW50ZWwgc3BlY2lmaWMgdmVyc2lvbiAoZ2VuZXJpYyB2ZXJzaW9uIGlzIG1vcmUgZWZmaWNpZW50KS4KIwojIEZvbGxvd2luZyBhcmUgc2V0IGF1dG9tYXRpY2FsbHkgYnkgdGhpcyBzY3JpcHQKIwojIE1ENV9BU00JdXNlIHNvbWUgZXh0cmEgbWQ1IGFzc2VtYmVyLAojIFNIQTFfQVNNCXVzZSBzb21lIGV4dHJhIHNoYTEgYXNzZW1iZXIsIG11c3QgZGVmaW5lIExfRU5ESUFOIGZvciB4ODYKIyBSTUQxNjBfQVNNCXVzZSBzb21lIGV4dHJhIHJpcGVtZDE2MCBhc3NlbWJlciwKIyBTSEEyNTZfQVNNCXNoYTI1Nl9ibG9jayBpcyBpbXBsZW1lbnRlZCBpbiBhc3NlbWJsZXIKIyBTSEE1MTJfQVNNCXNoYTUxMl9ibG9jayBpcyBpbXBsZW1lbnRlZCBpbiBhc3NlbWJsZXIKIyBBRVNfQVNNCUFTRV9bZW58ZGVdY3J5cHQgaXMgaW1wbGVtZW50ZWQgaW4gYXNzZW1ibGVyCgpteSAkeDg2X2djY19kZXM9IkRFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEwiOwoKIyBNRDJfQ0hBUiBzbGFncyBwZW50aXVtIHByb3MKbXkgJHg4Nl9nY2Nfb3B0cz0iUkM0X0lOREVYIE1EMl9JTlQiOwoKIyBNT0RJRlkgVEhFU0UgUEFSQU1FVEVSUyBJRiBZT1UgQVJFIEdPSU5HIFRPIFVTRSBUSEUgJ3V0aWwvc3BlZWQuc2ggU0NSSVBUCiMgRG9uJ3Qgd29ycnkgYWJvdXQgdGhlc2Ugbm9ybWFsbHkKCm15ICR0Y2M9ImNjIjsKbXkgJHRmbGFncz0iLWZhc3QgLVhhIjsKbXkgJHRibl9tdWw9IiI7Cm15ICR0bGliPSItbG5zbCAtbHNvY2tldCI7CiMkYml0czE9IlNJWFRFRU5fQklUICI7CiMkYml0czI9IlRISVJUWV9UV09fQklUICI7Cm15ICRiaXRzMT0iVEhJUlRZX1RXT19CSVQgIjsKbXkgJGJpdHMyPSJTSVhUWV9GT1VSX0JJVCAiOwoKbXkgJHg4Nl9lbGZfYXNtPSJ4ODZjcHVpZC1lbGYubzpibjg2LWVsZi5vIGNvODYtZWxmLm8gTUFZQkUtTU84Ni1lbGYubzpkeDg2LWVsZi5vIHl4ODYtZWxmLm86YXg4Ni1lbGYubzpieDg2LWVsZi5vOm14ODYtZWxmLm86c3g4Ni1lbGYubyBzNTEyc3NlMi1lbGYubzpjeDg2LWVsZi5vOnJ4ODYtZWxmLm8gcmM0X3NrZXkubzpybTg2LWVsZi5vOnI1ODYtZWxmLm8iOwpteSAkeDg2X2NvZmZfYXNtPSJ4ODZjcHVpZC1jb2Yubzpibjg2LWNvZi5vIGNvODYtY29mLm8gTUFZQkUtTU84Ni1jb2YubzpkeDg2LWNvZi5vIHl4ODYtY29mLm86YXg4Ni1jb2YubzpieDg2LWNvZi5vOm14ODYtY29mLm86c3g4Ni1jb2YubyBzNTEyc3NlMi1jb2YubzpjeDg2LWNvZi5vOnJ4ODYtY29mLm8gcmM0X3NrZXkubzpybTg2LWNvZi5vOnI1ODYtY29mLm8iOwpteSAkeDg2X291dF9hc209Ing4NmNwdWlkLW91dC5vOmJuODYtb3V0Lm8gY284Ni1vdXQubyBNQVlCRS1NTzg2LW91dC5vOmR4ODYtb3V0Lm8geXg4Ni1vdXQubzpheDg2LW91dC5vOmJ4ODYtb3V0Lm86bXg4Ni1vdXQubzpzeDg2LW91dC5vIHM1MTJzc2UyLW91dC5vOmN4ODYtb3V0Lm86cng4Ni1vdXQubyByYzRfc2tleS5vOnJtODYtb3V0Lm86cjU4Ni1vdXQubyI7CgpteSAkeDg2XzY0X2FzbT0ieDg2XzY0Y3B1aWQubzp4ODZfNjQtZ2NjLm8geDg2XzY0LW1vbnQubzo6YWVzLXg4Nl82NC5vOjptZDUteDg2XzY0Lm86c2hhMS14ODZfNjQubyBzaGEyNTYteDg2XzY0Lm8gc2hhNTEyLXg4Nl82NC5vOjpyYzQteDg2XzY0Lm86OiI7Cm15ICRpYTY0X2FzbT0iOmJuLWlhNjQubzo6YWVzX2NvcmUubyBhZXNfY2JjLm8gYWVzLWlhNjQubzo6OnNoYTEtaWE2NC5vIHNoYTI1Ni1pYTY0Lm8gc2hhNTEyLWlhNjQubzo6cmM0LWlhNjQubyByYzRfc2tleS5vOjoiOwoKbXkgJG5vX2FzbT0iOjo6Ojo6Ojo6OiI7CgojIEFzIGZvciAkQlNEdGhyZWFkcy4gSWRlYSBpcyB0byBtYWludGFpbiAiY29sbGVjdGl2ZSIgc2V0IG9mIGZsYWdzLAojIHdoaWNoIHdvdWxkIGNvdmVyIGFsbCBCU0QgZmxhdm9ycy4gLXB0aHJlYWQgYXBwbGllcyB0byB0aGVtIGFsbCwgCiMgYnV0IGlzIHRyZWF0ZWQgZGlmZmVyZW50bHkuIE9wZW5CU0QgZXhwYW5kcyBpcyBhcyAtRF9QT1NJWF9USFJFQUQKIyAtbGNfciwgd2hpY2ggaXMgc3VmZmljaWVudC4gRnJlZUJTRCA0LnggZXhwYW5kcyBpdCBhcyAtbGNfciwKIyB3aGljaCBoYXMgdG8gYmUgYWNjb21wYW5pZWQgYnkgZXhwbGljaXQgLURfVEhSRUFEX1NBRkUgYW5kCiMgc29tZXRpbWVzIC1EX1JFRU5UUkFOVC4gRnJlZUJTRCA1LnggZXhwYW5kcyBpdCBhcyAtbGNfciwgd2hpY2gKIyBzZWVtcyB0byBiZSBzdWZmaWNpZW50PwpteSAkQlNEdGhyZWFkcz0iLXB0aHJlYWQgLURfVEhSRUFEX1NBRkUgLURfUkVFTlRSQU5UIjsKCiNjb25maWctc3RyaW5nCSRjYyA6ICRjZmxhZ3MgOiAkdW5pc3RkIDogJHRocmVhZF9jZmxhZyA6ICRzeXNfaWQgOiAkbGZsYWdzIDogJGJuX29wcyA6ICRjcHVpZF9vYmogOiAkYm5fb2JqIDogJGRlc19vYmogOiAkYWVzX29iaiA6ICRiZl9vYmogOiAkbWQ1X29iaiA6ICRzaGExX29iaiA6ICRjYXN0X29iaiA6ICRyYzRfb2JqIDogJHJtZDE2MF9vYmogOiAkcmM1X29iaiA6ICRkc29fc2NoZW1lIDogJHNoYXJlZF90YXJnZXQgOiAkc2hhcmVkX2NmbGFnIDogJHNoYXJlZF9sZGZsYWcgOiAkc2hhcmVkX2V4dGVuc2lvbiA6ICRyYW5saWIgOiAkYXJmbGFncwoKbXkgJXRhYmxlPSgKIyBGaWxlICdUQUJMRScgKGNyZWF0ZWQgYnkgJ21ha2UgVEFCTEUnKSBjb250YWlucyB0aGUgZGF0YSBmcm9tIHRoaXMgbGlzdCwKIyBmb3JtYXR0ZWQgZm9yIGJldHRlciByZWFkYWJpbGl0eS4KCgojImIiLAkJIiR7dGNjfToke3RmbGFnc306OiR7dGxpYn06JHtiaXRzMX06JHt0Ym5fbXVsfTo6IiwKIyJibC00Yy0yYyIsCSIke3RjY306JHt0ZmxhZ3N9Ojoke3RsaWJ9OiR7Yml0czF9Qk5fTExPTkcgUkM0X0NIQVIgTUQyX0NIQVI6JHt0Ym5fbXVsfTo6IiwKIyJibC00Yy1yaSIsCSIke3RjY306JHt0ZmxhZ3N9Ojoke3RsaWJ9OiR7Yml0czF9Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0lOREVYOiR7dGJuX211bH06OiIsCiMiYjItaXMtcmktZHAiLAkiJHt0Y2N9OiR7dGZsYWdzfTo6JHt0bGlifToke2JpdHMyfUlERUFfU0hPUlQgUkM0X0lOREVYIERFU19QVFI6JHt0Ym5fbXVsfTo6IiwKCiMgT3VyIGRldmVsb3BtZW50IGNvbmZpZ3MKInB1cmlmeSIsCSJwdXJpZnkgZ2NjOi1nIC1EUFVSSUZZIC1XYWxsOjoodW5rbm93bik6Oi1sc29ja2V0IC1sbnNsOjo6OiIsCiJkZWJ1ZyIsCSJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1ET1BFTlNTTF9OT19BU00gLWdnZGIgLWcyIC1XZm9ybWF0IC1Xc2hhZG93IC1XbWlzc2luZy1wcm90b3R5cGVzIC1XbWlzc2luZy1kZWNsYXJhdGlvbnMgLVdlcnJvcjo6KHVua25vd24pOjotbGVmZW5jZTo6OjoiLAoiZGVidWctYmVuIiwJImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUcgLURQRURBTlRJQyAtRERFQlVHX1NBRkVTVEFDSyAtTzIgLXBlZGFudGljIC1XYWxsIC1Xc2hhZG93IC1XZXJyb3IgLXBpcGU6Oih1bmtub3duKTo6Ojo6Ym44Ni1lbGYubyBjbzg2LWVsZi5vIiwKImRlYnVnLWJlbi1vcGVuYnNkIiwiZ2NjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRFBFREFOVElDIC1EREVCVUdfU0FGRVNUQUNLIC1ET1BFTlNTTF9PUEVOQlNEX0RFVl9DUllQVE8gLURPUEVOU1NMX05PX0FTTSAtTzIgLXBlZGFudGljIC1XYWxsIC1Xc2hhZG93IC1XZXJyb3IgLXBpcGU6Oih1bmtub3duKTo6OjoiLAoiZGVidWctYmVuLW9wZW5ic2QtZGVidWciLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1EUEVEQU5USUMgLURERUJVR19TQUZFU1RBQ0sgLURPUEVOU1NMX09QRU5CU0RfREVWX0NSWVBUTyAtRE9QRU5TU0xfTk9fQVNNIC1nMyAtTzIgLXBlZGFudGljIC1XYWxsIC1Xc2hhZG93IC1XZXJyb3IgLXBpcGU6Oih1bmtub3duKTo6OjoiLAoiZGVidWctYmVuLWRlYnVnIiwJImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUcgLURQRURBTlRJQyAtRERFQlVHX1NBRkVTVEFDSyAtZzMgLU8yIC1wZWRhbnRpYyAtV2FsbCAtV3NoYWRvdyAtV2Vycm9yIC1waXBlOjoodW5rbm93bik6Ojo6OjoiLAoiZGVidWctYmVuLXN0cmljdCIsCSJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1EQ09OU1RfU1RSSUNUIC1PMiAtV2FsbCAtV3NoYWRvdyAtV2Vycm9yIC1XcG9pbnRlci1hcml0aCAtV2Nhc3QtcXVhbCAtV3dyaXRlLXN0cmluZ3MgLXBpcGU6Oih1bmtub3duKTo6Ojo6OiIsCiJkZWJ1Zy1yc2UiLCJjYzotRFRFUk1JT1MgLURMX0VORElBTiAtcGlwZSAtTyAtZyAtZ2dkYjMgLVdhbGw6Oih1bmtub3duKTo6OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfSIsCiJkZWJ1Zy1ib2RvIiwJImdjYzotRExfRU5ESUFOIC1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQklPX1BBSVJfREVCVUcgLURQRURBTlRJQyAtZyAtbWFyY2g9aTQ4NiAtcGVkYW50aWMgLVdzaGFkb3cgLVdhbGwgLVdjYXN0LWFsaWduIC1Xc3RyaWN0LXByb3RvdHlwZXMgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVduby1sb25nLWxvbmcgLVd1bmRlZiAtV2NvbnZlcnNpb24gLXBpcGU6Oi1EX1JFRU5UUkFOVDo6OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfSIsCiJkZWJ1Zy11bGYiLCAiZ2NjOi1EVEVSTUlPUyAtRExfRU5ESUFOIC1tYXJjaD1pNDg2IC1XYWxsIC1EQk5fREVCVUcgLURCTl9ERUJVR19SQU5EIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUcgLURPUEVOU1NMX05PX0FTTSAtZyAtV2Zvcm1hdCAtV3NoYWRvdyAtV21pc3NpbmctcHJvdG90eXBlcyAtV21pc3NpbmctZGVjbGFyYXRpb25zOjo6Q1lHV0lOMzI6Ojoke25vX2FzbX06d2luMzI6Y3lnd2luLXNoYXJlZDo6Oi5kbGwiLAoiZGVidWctc3RldmU2NCIsICJnY2M6LW02NCAtRExfRU5ESUFOIC1EVEVSTUlPIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtRERFQlVHX1NBRkVTVEFDSyAtRENSWVBUT19NREVCVUdfQUxMIC1EUEVEQU5USUMgLURPUEVOU1NMX05PX0RFUFJFQ0FURUQgLWcgLXBlZGFudGljIC1XYWxsIC1XZXJyb3IgLVduby1sb25nLWxvbmcgLVdzaWduLWNvbXBhcmUgLURNRDMyX1JFR19UPWludDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIEJGX1BUUjIgREVTX0lOVCBERVNfVU5ST0xMOiR7eDg2XzY0X2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctc3RldmUzMiIsICJnY2M6LW0zMiAtRExfRU5ESUFOIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtRERFQlVHX1NBRkVTVEFDSyAtRENSWVBUT19NREVCVUdfQUxMIC1EUEVEQU5USUMgLURPUEVOU1NMX05PX0RFUFJFQ0FURUQgLWcgLXBlZGFudGljIC1Xbm8tbG9uZy1sb25nIC1XYWxsIC1XZXJyb3IgLVdzaGFkb3cgLXBpcGU6Oi1EX1JFRU5UUkFOVDo6LXJkeW5hbWljIC1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTMyOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImRlYnVnLXN0ZXZlIiwJImdjYzotRExfRU5ESUFOIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtRERFQlVHX1NBRkVTVEFDSyAtRENSWVBUT19NREVCVUdfQUxMIC1EUEVEQU5USUMgLW0zMiAtZyAtcGVkYW50aWMgLVduby1sb25nLWxvbmcgLVdhbGwgLVdlcnJvciAtV3NoYWRvdyAtcGlwZTo6LURfUkVFTlRSQU5UOjotcmR5bmFtaWMgLWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkIiwKImRlYnVnLXN0ZXZlLW9wdCIsCSJnY2M6LURMX0VORElBTiAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURERUJVR19TQUZFU1RBQ0sgLURDUllQVE9fTURFQlVHX0FMTCAtRFBFREFOVElDIC1tMzIgLU8zIC1nIC1wZWRhbnRpYyAtV25vLWxvbmctbG9uZyAtV2FsbCAtV2Vycm9yIC1Xc2hhZG93IC1waXBlOjotRF9SRUVOVFJBTlQ6Oi1yZHluYW1pYyAtbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQiLAoiZGVidWctc3RldmUtbGludXgtcHNldWRvNjQiLAkiZ2NjOi1ETF9FTkRJQU4gLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EREVCVUdfU0FGRVNUQUNLIC1EQ1JZUFRPX01ERUJVR19BTEwgLURPUEVOU1NMX05PX0FTTSAtZyAtbWNwdT1pNDg2IC1XYWxsIC1XZXJyb3IgLVdzaGFkb3cgLXBpcGU6Oi1EX1JFRU5UUkFOVDo6LXJkeW5hbWljIC1sZGw6U0lYVFlfRk9VUl9CSVQ6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZCIsCiJkZWJ1Zy1sZXZpdHRlLWxpbnV4LWVsZiIsImdjYzotRExFVklUVEVfREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fREVCVUcgLURCTl9ERUJVR19SQU5EIC1EQ1JZUFRPX01ERUJVRyAtREVOR0lORV9DT05GX0RFQlVHIC1ETF9FTkRJQU4gLURURVJNSU8gLURfUE9TSVhfU09VUkNFIC1EUEVEQU5USUMgLWdnZGIgLWczIC1tY3B1PWk0ODYgLXBlZGFudGljIC1hbnNpIC1XYWxsIC1Xc2hhZG93IC1XY2FzdC1hbGlnbiAtV3N0cmljdC1wcm90b3R5cGVzIC1XbWlzc2luZy1wcm90b3R5cGVzIC1Xbm8tbG9uZy1sb25nIC1XdW5kZWYgLVdjb252ZXJzaW9uIC1waXBlOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctbGV2aXR0ZS1saW51eC1ub2FzbSIsImdjYzotRExFVklUVEVfREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fREVCVUcgLURCTl9ERUJVR19SQU5EIC1EQ1JZUFRPX01ERUJVRyAtREVOR0lORV9DT05GX0RFQlVHIC1ET1BFTlNTTF9OT19BU00gLURMX0VORElBTiAtRFRFUk1JTyAtRF9QT1NJWF9TT1VSQ0UgLURQRURBTlRJQyAtZ2dkYiAtZzMgLW1jcHU9aTQ4NiAtcGVkYW50aWMgLWFuc2kgLVdhbGwgLVdzaGFkb3cgLVdjYXN0LWFsaWduIC1Xc3RyaWN0LXByb3RvdHlwZXMgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVduby1sb25nLWxvbmcgLVd1bmRlZiAtV2NvbnZlcnNpb24gLXBpcGU6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctbGV2aXR0ZS1saW51eC1lbGYtZXh0cmVtZSIsImdjYzotRExFVklUVEVfREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fREVCVUcgLURCTl9ERUJVR19SQU5EIC1EQ1JZUFRPX01ERUJVRyAtREVOR0lORV9DT05GX0RFQlVHIC1ETF9FTkRJQU4gLURURVJNSU8gLURfUE9TSVhfU09VUkNFIC1EUEVEQU5USUMgLWdnZGIgLWczIC1tY3B1PWk0ODYgLXBlZGFudGljIC1hbnNpIC1XYWxsIC1XIC1XdW5kZWYgLVdzaGFkb3cgLVdjYXN0LWFsaWduIC1Xc3RyaWN0LXByb3RvdHlwZXMgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVduby1sb25nLWxvbmcgLVd1bmRlZiAtV2NvbnZlcnNpb24gLXBpcGU6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1sZXZpdHRlLWxpbnV4LW5vYXNtLWV4dHJlbWUiLCJnY2M6LURMRVZJVFRFX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0RFQlVHIC1EQk5fREVCVUdfUkFORCAtRENSWVBUT19NREVCVUcgLURFTkdJTkVfQ09ORl9ERUJVRyAtRE9QRU5TU0xfTk9fQVNNIC1ETF9FTkRJQU4gLURURVJNSU8gLURfUE9TSVhfU09VUkNFIC1EUEVEQU5USUMgLWdnZGIgLWczIC1tY3B1PWk0ODYgLXBlZGFudGljIC1hbnNpIC1XYWxsIC1XIC1XdW5kZWYgLVdzaGFkb3cgLVdjYXN0LWFsaWduIC1Xc3RyaWN0LXByb3RvdHlwZXMgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVduby1sb25nLWxvbmcgLVd1bmRlZiAtV2NvbnZlcnNpb24gLXBpcGU6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctZ2VvZmYiLCJnY2M6LURCTl9ERUJVRyAtREJOX0RFQlVHX1JBTkQgLURCTl9TVFJJQ1QgLURQVVJJRlkgLURPUEVOU1NMX05PX0RFUFJFQ0FURUQgLURPUEVOU1NMX05PX0FTTSAtRE9QRU5TU0xfTk9fSU5MSU5FX0FTTSAtRExfRU5ESUFOIC1EVEVSTUlPIC1EUEVEQU5USUMgLU8xIC1nZ2RiMiAtV2FsbCAtV2Vycm9yIC1XdW5kZWYgLXBlZGFudGljIC1Xc2hhZG93IC1XcG9pbnRlci1hcml0aCAtV2JhZC1mdW5jdGlvbi1jYXN0IC1XY2FzdC1hbGlnbiAtV3NpZ24tY29tcGFyZSAtV21pc3NpbmctcHJvdG90eXBlcyAtV21pc3NpbmctZGVjbGFyYXRpb25zIC1Xbm8tbG9uZy1sb25nOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImRlYnVnLWxpbnV4LXBlbnRpdW0iLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURDUllQVE9fTURFQlVHIC1ETF9FTkRJQU4gLURURVJNSU8gLWcgLW1jcHU9cGVudGl1bSAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbiIsCiJkZWJ1Zy1saW51eC1wcHJvIiwiZ2NjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRExfRU5ESUFOIC1EVEVSTUlPIC1nIC1tY3B1PXBlbnRpdW1wcm8gLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY24iLAoiZGVidWctbGludXgtZWxmIiwiZ2NjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRExfRU5ESUFOIC1EVEVSTUlPIC1nIC1tYXJjaD1pNDg2IC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZWZlbmNlIC1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctbGludXgtZWxmLW5vZWZlbmNlIiwiZ2NjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRExfRU5ESUFOIC1EVEVSTUlPIC1nIC1tYXJjaD1pNDg2IC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGlzdCIsCQkiY2M6LU86Oih1bmtub3duKTo6Ojo6OiIsCgojIEJhc2ljIGNvbmZpZ3MgdGhhdCBzaG91bGQgd29yayBvbiBhbnkgKDMyIGFuZCBsZXNzIGJpdCkgYm94CiJnY2MiLAkJImdjYzotTzM6Oih1bmtub3duKTo6OkJOX0xMT05HOjo6IiwKImNjIiwJCSJjYzotTzo6KHVua25vd24pOjo6Ojo6IiwKCiMjIyNWT1MgQ29uZmlndXJhdGlvbnMKInZvcy1nY2MiLCJnY2M6LU8zIC1XYWxsIC1EX1BPU0lYX0NfU09VUkNFPTIwMDExMkwgLURfQlNEIC1EQl9FTkRJQU46Oih1bmtub3duKTpWT1M6LVdsLC1tYXA6Qk5fTExPTkc6JHtub19hc219Ojo6Ojouc286IiwKImRlYnVnLXZvcy1nY2MiLCJnY2M6LU8wIC1nIC1XYWxsIC1EX1BPU0lYX0NfU09VUkNFPTIwMDExMkwgLURfQlNEIC1EQl9FTkRJQU4gLURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURDUllQVE9fTURFQlVHOjoodW5rbm93bik6Vk9TOi1XbCwtbWFwOkJOX0xMT05HOiR7bm9fYXNtfTo6Ojo6LnNvOiIsCgojIyMjIFNvbGFyaXMgeDg2IHdpdGggR05VIEMgc2V0dXBzCiMgLURPUEVOU1NMX05PX0lOTElORV9BU00gc3dpdGNoZXMgb2ZmIGlubGluZSBhc3NlbWJsZXIuIFdlIGhhdmUgdG8gZG8gaXQKIyBoZXJlIGJlY2F1c2Ugd2hlbmV2ZXIgR05VIEMgaW5zdGFudGlhdGVzIGFuIGFzc2VtYmxlciB0ZW1wbGF0ZSBpdAojIHN1cnJvdW5kcyBpdCB3aXRoICNBUFAgI05PX0FQUCBjb21tZW50IHBhaXIgd2hpY2ggKGF0IGxlYXN0IFNvbGFyaXMKIyA3X3g4NikgL3Vzci9jY3MvYmluL2FzIGZhaWxzIHRvIGFzc2VtYmxlIHdpdGggIklsbGVnYWwgbW5lbW9uaWMiCiMgZXJyb3IgbWVzc2FnZS4KInNvbGFyaXMteDg2LWdjYyIsImdjYzotTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLW1hcmNoPXBlbnRpdW0gLVdhbGwgLURMX0VORElBTiAtRE9QRU5TU0xfTk9fSU5MSU5FX0FTTTo6LURfUkVFTlRSQU5UOjotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpzb2xhcmlzLXNoYXJlZDotZlBJQzotc2hhcmVkOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyAtc2hhcmVkIC1zdGF0aWMtbGliZ2NjIG1pZ2h0IGFwcGVhciBjb250cm92ZXJzaWFsLCBidXQgbW9kdWxlcyB0YWtlbgojIGZyb20gc3RhdGljIGxpYmdjYyBkbyBub3QgaGF2ZSByZWxvY2F0aW9ucyBhbmQgbGlua2luZyB0aGVtIGludG8gb3VyCiMgc2hhcmVkIG9iamVjdHMgZG9lc24ndCBoYXZlIGFueSBuZWdhdGl2ZSBzaWRlLWVmZmVjdHMuIE9uIHRoZSBjb250cmFyeSwKIyBkb2luZyBzbyBtYWtlcyBpdCBwb3NzaWJsZSB0byB1c2UgZ2NjIHNoYXJlZCBidWlsZCB3aXRoIFN1biBDLiBHaXZlbgojIHRoYXQgZ2NjIGdlbmVyYXRlcyBmYXN0ZXIgY29kZSBbdGhhbmtzIHRvIGlubGluZSBhc3NlbWJsZXJdLCBJIHdvdWxkCiMgYWN0dWFsbHkgcmVjb21tZW5kIHRvIGNvbnNpZGVyIHVzaW5nIGdjYyBzaGFyZWQgYnVpbGQgZXZlbiB3aXRoIHZlbmRvcgojIGNvbXBpbGVyOi0pCiMJCQkJCQk8YXBwcm9AZnkuY2hhbG1lcnMuc2U+CiJzb2xhcmlzNjQteDg2XzY0LWdjYyIsImdjYzotbTY0IC1PMyAtV2FsbCAtRExfRU5ESUFOIC1ETUQzMl9SRUdfVD1pbnQ6Oi1EX1JFRU5UUkFOVDo6LWxzb2NrZXQgLWxuc2wgLWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBCRl9QVFIyIERFU19JTlQgREVTX1VOUk9MTDoke3g4Nl82NF9hc219OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1mUElDOi1tNjQgLXNoYXJlZCAtc3RhdGljLWxpYmdjYzouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiAKIyMjIyBTb2xhcmlzIHg4NiB3aXRoIFN1biBDIHNldHVwcwoic29sYXJpcy14ODYtY2MiLCJjYzotZmFzdCAtTyAtWGE6Oi1EX1JFRU5UUkFOVDo6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1BUUiBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06ZGxmY246c29sYXJpcy1zaGFyZWQ6LUtQSUM6LUcgLWR5IC16IHRleHQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoic29sYXJpczY0LXg4Nl82NC1jYyIsImNjOi1mYXN0IC14YXJjaD1hbWQ2NCAteHN0cmNvbnN0IC1YYSAtRExfRU5ESUFOOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsIC1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgQkZfUFRSMiBERVNfSU5UIERFU19VTlJPTEw6JHt4ODZfNjRfYXNtfTpkbGZjbjpzb2xhcmlzLXNoYXJlZDotS1BJQzoteGFyY2g9YW1kNjQgLUcgLWR5IC16IHRleHQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoKIyMjIyBTUEFSQyBTb2xhcmlzIHdpdGggR05VIEMgc2V0dXBzCiJzb2xhcmlzLXNwYXJjdjctZ2NjIiwiZ2NjOi1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbCAtREJfRU5ESUFOIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDo6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6JHtub19hc219OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoic29sYXJpcy1zcGFyY3Y4LWdjYyIsImdjYzotbXY4IC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbCAtREJfRU5ESUFOIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDo6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6OnNwYXJjdjgubzpkZXNfZW5jLXNwYXJjLm8gZmNyeXB0X2Iubzo6Ojo6Ojo6OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAojIC1tMzIgc2hvdWxkIGJlIHNhZmUgdG8gYWRkIGFzIGxvbmcgYXMgZHJpdmVyIHJlY29nbml6ZXMgLW1jcHU9dWx0cmFzcGFyYwoic29sYXJpcy1zcGFyY3Y5LWdjYyIsImdjYzotbTMyIC1tY3B1PXVsdHJhc3BhcmMgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsIC1EQl9FTkRJQU4gLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOlVMVFJBU1BBUkM6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6OnNwYXJjdjhwbHVzLm86ZGVzX2VuYy1zcGFyYy5vIGZjcnlwdF9iLm86Ojo6Ojo6OjpkbGZjbjpzb2xhcmlzLXNoYXJlZDotZlBJQzotc2hhcmVkOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKInNvbGFyaXM2NC1zcGFyY3Y5LWdjYyIsImdjYzotbTY0IC1tY3B1PXVsdHJhc3BhcmMgLU8zIC1XYWxsIC1EQl9FTkRJQU46Oi1EX1JFRU5UUkFOVDpVTFRSQVNQQVJDOi1sc29ja2V0IC1sbnNsIC1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMIEJGX1BUUjo6OmRlc19lbmMtc3BhcmMubyBmY3J5cHRfYi5vOjo6Ojo6Ojo6ZGxmY246c29sYXJpcy1zaGFyZWQ6LWZQSUM6LW02NCAtc2hhcmVkOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyMjIwoiZGVidWctc29sYXJpcy1zcGFyY3Y4LWdjYyIsImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtRENSWVBUT19NREVCVUdfQUxMIC1PIC1nIC1tdjggLVdhbGwgLURCX0VORElBTjo6LURfUkVFTlRSQU5UOjotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjo6c3BhcmN2OC5vOjo6Ojo6Ojo6OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctc29sYXJpcy1zcGFyY3Y5LWdjYyIsImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtRENSWVBUT19NREVCVUdfQUxMIC1EUEVEQU5USUMgLU8gLWcgLW1jcHU9dWx0cmFzcGFyYyAtcGVkYW50aWMgLWFuc2kgLVdhbGwgLVdzaGFkb3cgLVduby1sb25nLWxvbmcgLURfX0VYVEVOU0lPTlNfXyAtREJfRU5ESUFOIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDpVTFRSQVNQQVJDOi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOjpzcGFyY3Y4cGx1cy5vOmRlc19lbmMtc3BhcmMubyBmY3J5cHRfYi5vOjo6Ojo6Ojo6ZGxmY246c29sYXJpcy1zaGFyZWQ6LWZQSUM6LXNoYXJlZDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCgojIyMjIFNQQVJDIFNvbGFyaXMgd2l0aCBTdW4gQyBzZXR1cHMKIyBTQzQuMCBkb2Vzbid0IHBhc3MgJ21ha2UgdGVzdCcsIHVwZ3JhZGUgdG8gU0M1LjAgb3IgU0M0LjIuCiMgU0M0LjIgaXMgb2ssIGJldHRlciB0aGFuIGdjYyBldmVuIG9uIGJuIGFzIGxvbmcgYXMgeW91IHRlbGwgaXQgLXhhcmNoPXY4CiMgU0M1LjAgbm90ZTogQ29tcGlsZXIgY29tbW9uIHBhdGNoIDEwNzM1Ny0wMSBvciBsYXRlciBpcyByZXF1aXJlZCEKInNvbGFyaXMtc3BhcmN2Ny1jYyIsImNjOi14TzUgLXhzdHJjb25zdCAteGRlcGVuZCAtWGEgLURCX0VORElBTiAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpzb2xhcmlzLXNoYXJlZDotS1BJQzotRyAtZHkgLXogdGV4dDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJzb2xhcmlzLXNwYXJjdjgtY2MiLCJjYzoteGFyY2g9djggLXhPNSAteHN0cmNvbnN0IC14ZGVwZW5kIC1YYSAtREJfRU5ESUFOIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDo6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCBCRl9QVFI6OnNwYXJjdjgubzpkZXNfZW5jLXNwYXJjLm8gZmNyeXB0X2Iubzo6Ojo6Ojo6OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1LUElDOi1HIC1keSAteiB0ZXh0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKInNvbGFyaXMtc3BhcmN2OS1jYyIsImNjOi14dGFyZ2V0PXVsdHJhIC14YXJjaD12OHBsdXMgLXhPNSAteHN0cmNvbnN0IC14ZGVwZW5kIC1YYSAtREJfRU5ESUFOIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDpVTFRSQVNQQVJDOi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LX0xMIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEwgQkZfUFRSOjpzcGFyY3Y4cGx1cy5vOmRlc19lbmMtc3BhcmMubyBmY3J5cHRfYi5vOjo6Ojo6Ojo6ZGxmY246c29sYXJpcy1zaGFyZWQ6LUtQSUM6LUcgLWR5IC16IHRleHQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoic29sYXJpczY0LXNwYXJjdjktY2MiLCJjYzoteHRhcmdldD11bHRyYSAteGFyY2g9djkgLXhPNSAteHN0cmNvbnN0IC14ZGVwZW5kIC1YYSAtREJfRU5ESUFOOjotRF9SRUVOVFJBTlQ6VUxUUkFTUEFSQzotbHNvY2tldCAtbG5zbCAtbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCBCRl9QVFI6OjpkZXNfZW5jLXNwYXJjLm8gZmNyeXB0X2Iubzo6Ojo6Ojo6OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1LUElDOi14YXJjaD12OSAtRyAtZHkgLXogdGV4dDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTovdXNyL2Njcy9iaW4vYXIgcnMiLAojIyMjCiJkZWJ1Zy1zb2xhcmlzLXNwYXJjdjgtY2MiLCJjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtRENSWVBUT19NREVCVUdfQUxMIC14YXJjaD12OCAtZyAtTyAteHN0cmNvbnN0IC1YYSAtREJfRU5ESUFOIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDo6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCBCRl9QVFI6OnNwYXJjdjgubzo6Ojo6Ojo6OjpkbGZjbjpzb2xhcmlzLXNoYXJlZDotS1BJQzotRyAtZHkgLXogdGV4dDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1zb2xhcmlzLXNwYXJjdjktY2MiLCJjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtRENSWVBUT19NREVCVUdfQUxMIC14dGFyZ2V0PXVsdHJhIC14YXJjaD12OHBsdXMgLWcgLU8gLXhzdHJjb25zdCAtWGEgLURCX0VORElBTiAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6VUxUUkFTUEFSQzotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOS19MTCBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMIEJGX1BUUjo6c3BhcmN2OHBsdXMubzo6Ojo6Ojo6OjpkbGZjbjpzb2xhcmlzLXNoYXJlZDotS1BJQzotRyAtZHkgLXogdGV4dDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsIAoKIyMjIyBTdW5PUyBjb25maWdzLCBhc3N1bWluZyBzcGFyYyBmb3IgdGhlIGdjYyBvbmUuCiMic3Vub3MtY2MiLCAiY2M6LU80IC1ETk9QUk9UTyAtRE5PQ09OU1Q6Oih1bmtub3duKTpTVU5PUzo6REVTX1VOUk9MTDoke25vX2FzbX06OiIsCiJzdW5vcy1nY2MiLCJnY2M6LU8zIC1tdjggLURzc2l6ZV90PWludDo6KHVua25vd24pOlNVTk9TOjpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBERVNfUFRSIERFU19SSVNDMToke25vX2FzbX06OiIsCgojIyMjIElSSVggNS54IGNvbmZpZ3MKIyAtbWlwczIgZmxhZyBpcyBhZGRlZCBieSAuL2NvbmZpZyB3aGVuIGFwcHJvcHJpYXRlLgoiaXJpeC1nY2MiLCJnY2M6LU8zIC1EVEVSTUlPUyAtREJfRU5ESUFOOjoodW5rbm93bik6OjpCTl9MTE9ORyBNRDJfQ0hBUiBSQzRfSU5ERVggUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgREVTX1JJU0MyIERFU19QVFIgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjppcml4LXNoYXJlZDo6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImlyaXgtY2MiLCAiY2M6LU8yIC11c2VfcmVhZG9ubHlfY29uc3QgLURURVJNSU9TIC1EQl9FTkRJQU46Oih1bmtub3duKTo6OkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUFRSIERFU19SSVNDMiBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06ZGxmY246aXJpeC1zaGFyZWQ6Ojouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiMjIyMgSVJJWCA2LnggY29uZmlncwojIE9ubHkgTjMyIGFuZCBONjQgQUJJcyBhcmUgc3VwcG9ydGVkLiBJZiB5b3UgbmVlZCBPMzIgQUJJIGJ1aWxkLCBpbnZva2UKIyAnLi9Db25maWd1cmUucGwgaXJpeC1jYyAtbzMyJyBtYW51YWxseS4KImlyaXgtbWlwczMtZ2NjIiwiZ2NjOi1tYWJpPW4zMiAtTzMgLURURVJNSU9TIC1EQl9FTkRJQU4gLURCTl9ESVYzVzo6LURfU0dJX01QX1NPVVJDRTo6Ok1EMl9DSEFSIFJDNF9JTkRFWCBSQzRfQ0hBUiBSQzRfQ0hVTktfTEwgREVTX1VOUk9MTCBERVNfUklTQzIgREVTX1BUUiBCRl9QVFIgU0lYVFlfRk9VUl9CSVQ6OmJuLW1pcHMzLm86Ojo6Ojo6Ojo6ZGxmY246aXJpeC1zaGFyZWQ6Oi1tYWJpPW4zMjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJpcml4LW1pcHMzLWNjIiwgImNjOi1uMzIgLW1pcHMzIC1PMiAtdXNlX3JlYWRvbmx5X2NvbnN0IC1HMCAtcmRhdGFfc2hhcmVkIC1EVEVSTUlPUyAtREJfRU5ESUFOIC1EQk5fRElWM1c6Oi1EX1NHSV9NUF9TT1VSQ0U6OjpERVNfUFRSIFJDNF9DSEFSIFJDNF9DSFVOS19MTCBERVNfUklTQzIgREVTX1VOUk9MTCBCRl9QVFIgU0lYVFlfRk9VUl9CSVQ6OmJuLW1pcHMzLm86Ojo6Ojo6Ojo6ZGxmY246aXJpeC1zaGFyZWQ6Oi1uMzI6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAojIE42NCBBQkkgYnVpbGRzLgoiaXJpeDY0LW1pcHM0LWdjYyIsImdjYzotbWFiaT02NCAtbWlwczQgLU8zIC1EVEVSTUlPUyAtREJfRU5ESUFOIC1EQk5fRElWM1c6Oi1EX1NHSV9NUF9TT1VSQ0U6OjpSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1JJU0MyIERFU19VTlJPTEwgU0lYVFlfRk9VUl9CSVRfTE9ORzo6Ym4tbWlwczMubzo6Ojo6Ojo6OjpkbGZjbjppcml4LXNoYXJlZDo6LW1hYmk9NjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiaXJpeDY0LW1pcHM0LWNjIiwgImNjOi02NCAtbWlwczQgLU8yIC11c2VfcmVhZG9ubHlfY29uc3QgLUcwIC1yZGF0YV9zaGFyZWQgLURURVJNSU9TIC1EQl9FTkRJQU4gLURCTl9ESVYzVzo6LURfU0dJX01QX1NPVVJDRTo6OlJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUklTQzIgREVTX1VOUk9MTCBTSVhUWV9GT1VSX0JJVF9MT05HOjpibi1taXBzMy5vOjo6Ojo6Ojo6OmRsZmNuOmlyaXgtc2hhcmVkOjotNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoKIyMjIyBVbmlmaWVkIEhQLVVYIEFOU0kgQyBjb25maWdzLgojIFNwZWNpYWwgbm90ZXM6CiMgLSBPcmlnaW5hbGx5IHdlIHdlcmUgb3B0aW1pemluZyBhdCArTzQgbGV2ZWwuIEl0IHNob3VsZCBiZSBub3RlZAojICAgdGhhdCB0aGUgb25seSBkaWZmZXJlbmNlIGJldHdlZW4gK08zIGFuZCArTzQgaXMgZ2xvYmFsIGludGVyLQojICAgcHJvY2VkdXJhbCBhbmFseXNpcy4gQXMgaXQgaGFzIHRvIGJlIHBlcmZvcm1lZCBkdXJpbmcgdGhlIGxpbmsKIyAgIHN0YWdlIHRoZSBjb21waWxlciBsZWF2ZXMgYmVoaW5kIGNlcnRhaW4gcHNldWRvLWNvZGUgaW4gbGliKi5hCiMgICB3aGljaCBtaWdodCBiZSByZWxlYXNlIG9yIGV2ZW4gcGF0Y2ggbGV2ZWwgc3BlY2lmaWMuIEdlbmVyYXRpbmcKIyAgIHRoZSBtYWNoaW5lIGNvZGUgZm9yIGFuZCBhbmFseXppbmcgdGhlICp3aG9sZSogcHJvZ3JhbSBhcHBlYXJzCiMgICB0byBiZSAqZXh0cmVtZWx5KiBtZW1vcnkgZGVtYW5kaW5nIHdoaWxlIHRoZSBwZXJmb3JtYW5jZSBnYWluIGlzCiMgICBhY3R1YWxseSBxdWVzdGlvbmFibGUuIFRoZSBzaXR1YXRpb24gaXMgaW50ZW5zaWZpZWQgYnkgdGhlIGRlZmF1bHQKIyAgIEhQLVVYIGRhdGEgc2V0IHNpemUgbGltaXQgKGluZmFtb3VzICdtYXhkc2l6JyB0dW5hYmxlKSBvZiA2NE1CCiMgICB3aGljaCBpcyB3YXkgdG9vIGxvdyBmb3IgK080LiBJbiBvdGhlciB3b3JkcywgZG9lc24ndCArTzMgbWFrZQojICAgbW9yZSBzZW5zZT8KIyAtIEtlZXAgaW4gbWluZCB0aGF0IHRoZSBIUCBjb21waWxlciBieSBkZWZhdWx0IGdlbmVyYXRlcyBjb2RlCiMgICBzdWl0YWJsZSBmb3IgZXhlY3V0aW9uIG9uIHRoZSBob3N0IHlvdSdyZSBjdXJyZW50bHkgY29tcGlsaW5nIGF0LgojICAgSWYgdGhlIHRvb2xraXQgaXMgbWVudCB0byBiZSB1c2VkIG9uIHZhcmlvdXMgUEEtUklTQyBwcm9jZXNzb3JzCiMgICBjb25zaWRlciAnLi9jb25maWcgK0RBcG9ydGFibGUnLgojIC0gK0RENjQgaXMgY2hvc2VuIGluIGZhdm91ciBvZiArREEyLjBXIGJlY2F1c2UgaXQncyBtZWFudCB0byBiZQojICAgY29tcGF0aWJsZSB3aXRoICpmdXR1cmUqIHJlbGVhc2VzLgojIC0gSWYgeW91IHJ1biAuL0NvbmZpZ3VyZS5wbCBocHV4LXBhcmlzYy1bZ11jYyBtYW51YWxseSBkb24ndCBmb3JnZXQgdG8KIyAgIHBhc3MgLURfUkVFTlRSQU5UIG9uIEhQLVVYIDEwIGFuZCBsYXRlci4KIyAtIC1ETUQzMl9YQVJSQVkgdHJpZ2dlcnMgd29ya2Fyb3VuZCBmb3IgY29tcGlsZXIgYnVnIHdlIHJhbiBpbnRvIGluCiMgICAzMi1iaXQgbWVzc2FnZSBkaWdlc3RzLiAoRm9yIHRoZSBtb21lbnQgb2YgdGhpcyB3cml0aW5nKSBIUCBDCiMgICBkb2Vzbid0IHNlZW0gdG8gImRpZ2VzdCIgdG9vIG1hbnkgbG9jYWwgdmFyaWFibGVzICh0aGV5IG1ha2UgImhpbSIKIyAgIGNoZXcgZm9yZXZlcjotKS4gRm9yIG1vcmUgZGV0YWlscyBsb29rLXVwIE1EMzJfWEFSUkFZIGNvbW1lbnQgaW4KIyAgIGNyeXB0by9zaGEvc2hhX2xjbC5oLgojCQkJCQk8YXBwcm9AZnkuY2hhbG1lcnMuc2U+CiMKIyBTaW5jZSB0aGVyZSBpcyBtZW50aW9uIG9mIHRoaXMgaW4gc2hsaWIvaHB1eDEwLWNjLnNoCiJocHV4LXBhcmlzYy1jYy1vNCIsImNjOi1BZSArTzQgK0VTbGl0IC16IC1EQl9FTkRJQU4gLURCTl9ESVYyVyAtRE1EMzJfWEFSUkFZOjotRF9SRUVOVFJBTlQ6Oi1sZGxkOkJOX0xMT05HIERFU19QVFIgREVTX1VOUk9MTCBERVNfUklTQzE6JHtub19hc219OmRsOmhwdXgtc2hhcmVkOitaOi1iOi5zbC5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImhwdXgtcGFyaXNjLWdjYyIsImdjYzotTzMgLURCX0VORElBTiAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6Oi1XbCwrcyAtbGRsZDpCTl9MTE9ORyBERVNfUFRSIERFU19VTlJPTEwgREVTX1JJU0MxOiR7bm9fYXNtfTpkbDpocHV4LXNoYXJlZDotZlBJQzotc2hhcmVkOi5zbC5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImhwdXgtcGFyaXNjMi1nY2MiLCJnY2M6LW1hcmNoPTIuMCAtTzMgLURCX0VORElBTiAtRF9SRUVOVFJBTlQ6Ojo6LVdsLCtzIC1sZGxkOlNJWFRZX0ZPVVJfQklUIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUFRSIERFU19VTlJPTEwgREVTX1JJU0MxOjpwYS1yaXNjMi5vOjo6Ojo6Ojo6OmRsOmhwdXgtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiaHB1eDY0LXBhcmlzYzItZ2NjIiwiZ2NjOi1PMyAtREJfRU5ESUFOIC1EX1JFRU5UUkFOVDo6OjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgTUQyX0NIQVIgUkM0X0lOREVYIFJDNF9DSEFSIERFU19VTlJPTEwgREVTX1JJU0MxIERFU19JTlQ6OnBhLXJpc2MyVy5vOjo6Ojo6Ojo6OmRsZmNuOmhwdXgtc2hhcmVkOi1mcGljOi1zaGFyZWQ6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoKIyBNb3JlIGF0dGVtcHRzIGF0IHVuaWZpZWQgMTAuWCBhbmQgMTEuWCB0YXJnZXRzIGZvciBIUCBDIGNvbXBpbGVyLgojCiMgQ2hyaXMgUnVlbW1sZXIgPHJ1ZW1tbGVyQGN1cC5ocC5jb20+CiMgS2V2aW4gU3RldmVzIDxrc0BocC5zZT4KImhwdXgtcGFyaXNjLWNjIiwiY2M6K08zICtPcHRyc19zdHJvbmdseV90eXBlZCAtQWUgK0VTbGl0IC1EQl9FTkRJQU4gLURCTl9ESVYyVyAtRE1EMzJfWEFSUkFZOjotRF9SRUVOVFJBTlQ6Oi1XbCwrcyAtbGRsZDpNRDJfQ0hBUiBSQzRfSU5ERVggUkM0X0NIQVIgREVTX1VOUk9MTCBERVNfUklTQzEgREVTX0lOVDoke25vX2FzbX06ZGw6aHB1eC1zaGFyZWQ6K1o6LWI6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiaHB1eC1wYXJpc2MxXzAtY2MiLCJjYzorREFwb3J0YWJsZSArTzMgK09wdHJzX3N0cm9uZ2x5X3R5cGVkIC1BZSArRVNsaXQgLURCX0VORElBTiAtRE1EMzJfWEFSUkFZOjotRF9SRUVOVFJBTlQ6Oi1XbCwrcyAtbGRsZDpNRDJfQ0hBUiBSQzRfSU5ERVggUkM0X0NIQVIgREVTX1VOUk9MTCBERVNfUklTQzEgREVTX0lOVDoke25vX2FzbX06ZGw6aHB1eC1zaGFyZWQ6K1o6LWI6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiaHB1eC1wYXJpc2MyLWNjIiwiY2M6K0RBMi4wICtEUzIuMCArTzMgK09wdHJzX3N0cm9uZ2x5X3R5cGVkIC1BZSArRVNsaXQgLURCX0VORElBTiAtRE1EMzJfWEFSUkFZIC1EX1JFRU5UUkFOVDo6OjotV2wsK3MgLWxkbGQ6U0lYVFlfRk9VUl9CSVQgTUQyX0NIQVIgUkM0X0lOREVYIFJDNF9DSEFSIERFU19VTlJPTEwgREVTX1JJU0MxIERFU19JTlQ6OnBhLXJpc2MyLm86Ojo6Ojo6Ojo6ZGw6aHB1eC1zaGFyZWQ6K1o6LWI6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiaHB1eDY0LXBhcmlzYzItY2MiLCJjYzorREQ2NCArTzMgK09wdHJzX3N0cm9uZ2x5X3R5cGVkIC1BZSArRVNsaXQgLURCX0VORElBTiAtRE1EMzJfWEFSUkFZIC1EX1JFRU5UUkFOVDo6OjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgTUQyX0NIQVIgUkM0X0lOREVYIFJDNF9DSEFSIERFU19VTlJPTEwgREVTX1JJU0MxIERFU19JTlQ6OnBhLXJpc2MyVy5vOjo6Ojo6Ojo6OmRsZmNuOmhwdXgtc2hhcmVkOitaOitERDY0IC1iOi5zbC5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKCiMgSFAvVVggSUEtNjQgdGFyZ2V0cwoiaHB1eC1pYTY0LWNjIiwiY2M6LUFlICtERDMyICtPMiArT2xpdD1hbGwgLXogLURCX0VORElBTiAtRF9SRUVOVFJBTlQ6Ojo6LWxkbDpTSVhUWV9GT1VSX0JJVCBNRDJfQ0hBUiBSQzRfSU5ERVggREVTX1VOUk9MTCBERVNfUklTQzEgREVTX0lOVDoke2lhNjRfYXNtfTpkbGZjbjpocHV4LXNoYXJlZDorWjorREQzMiAtYjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiMgRnJhbmsgR2V1cnRzIDxmcmFuay5nZXVydHNAbmwuYWJuYW1yby5jb20+IGhhcyBwYXRpZW50bHkgYXNzaXN0ZWQgd2l0aAojIHdpdGggZGVidWdnaW5nIG9mIHRoZSBmb2xsb3dpbmcgY29uZmlnLgoiaHB1eDY0LWlhNjQtY2MiLCJjYzotQWUgK0RENjQgK08zICtPbGl0PWFsbCAteiAtREJfRU5ESUFOIC1EX1JFRU5UUkFOVDo6OjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgTUQyX0NIQVIgUkM0X0lOREVYIERFU19VTlJPTEwgREVTX1JJU0MxIERFU19JTlQ6JHtpYTY0X2FzbX06ZGxmY246aHB1eC1zaGFyZWQ6K1o6K0RENjQgLWI6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAojIEdDQyBidWlsZHMuLi4KImhwdXgtaWE2NC1nY2MiLCJnY2M6LU8zIC1EQl9FTkRJQU4gLURfUkVFTlRSQU5UOjo6Oi1sZGw6U0lYVFlfRk9VUl9CSVQgTUQyX0NIQVIgUkM0X0lOREVYIERFU19VTlJPTEwgREVTX1JJU0MxIERFU19JTlQ6JHtpYTY0X2FzbX06ZGxmY246aHB1eC1zaGFyZWQ6LWZwaWM6LXNoYXJlZDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJocHV4NjQtaWE2NC1nY2MiLCJnY2M6LW1scDY0IC1PMyAtREJfRU5ESUFOIC1EX1JFRU5UUkFOVDo6OjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgTUQyX0NIQVIgUkM0X0lOREVYIERFU19VTlJPTEwgREVTX1JJU0MxIERFU19JTlQ6JHtpYTY0X2FzbX06ZGxmY246aHB1eC1zaGFyZWQ6LWZwaWM6LW1scDY0IC1zaGFyZWQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLCAKCiMgTGVnYWN5IEhQVVggOS5YIGNvbmZpZ3MuLi4KImhwdXgtY2MiLAkiY2M6LURCX0VORElBTiAtREJOX0RJVjJXIC1ETUQzMl9YQVJSQVkgLUFlICtFU2xpdCArTzIgLXo6Oih1bmtub3duKTo6LVdsLCtzIC1sZGxkOkRFU19QVFIgREVTX1VOUk9MTCBERVNfUklTQzE6JHtub19hc219OmRsOmhwdXgtc2hhcmVkOitaOi1iOi5zbC5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImhwdXgtZ2NjIiwJImdjYzotREJfRU5ESUFOIC1EQk5fRElWMlcgLU8zOjoodW5rbm93bik6Oi1XbCwrcyAtbGRsZDpERVNfUFRSIERFU19VTlJPTEwgREVTX1JJU0MxOiR7bm9fYXNtfTpkbDpocHV4LXNoYXJlZDotZlBJQzotc2hhcmVkOi5zbC5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKCiMjIyMgSFAgTVBFL2lYIGh0dHA6Ly9qYXp6LmV4dGVybmFsLmhwLmNvbS9zcmMvb3BlbnNzbC8KIk1QRS9pWC1nY2MiLAkiZ2NjOi1EX0VORElBTiAtREJOX0RJVjJXIC1PMyAtRF9QT1NJWF9TT1VSQ0UgLURfU09DS0VUX1NPVVJDRSAtSS9TWVNMT0cvUFVCOjoodW5rbm93bik6TVBFOi1ML1NZU0xPRy9QVUIgLWxzeXNsb2cgLWxzb2NrZXQgLWxjdXJzZXM6Qk5fTExPTkcgREVTX1BUUiBERVNfVU5ST0xMIERFU19SSVNDMTo6OiIsCgojIERFQyBBbHBoYSBPU0YvMS9UcnU2NCB0YXJnZXRzLgojCiMJIldoYXQncyBpbiBhIG5hbWU/IFRoYXQgd2hpY2ggd2UgY2FsbCBhIHJvc2UKIwkgQnkgYW55IG90aGVyIHdvcmQgd291bGQgc21lbGwgYXMgc3dlZXQuIgojCiMgLSBXaWxsaWFtIFNoYWtlc3BlYXJlLCAiUm9tZW8gJiBKdWxpZXQiLCBBY3QgSUksIHNjZW5lIElJLgojCiMgRm9yIGdjYywgdGhlIGZvbGxvd2luZyBnYXZlIGEgJTUwIHNwZWVkdXAgb24gYSAxNjQgb3ZlciB0aGUgJ0RFU19JTlQnIHZlcnNpb24KIwoib3NmMS1hbHBoYS1nY2MiLCAiZ2NjOi1PMzo6KHVua25vd24pOjo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX1VOUk9MTCBERVNfUklTQzE6JHtub19hc219OmRsZmNuOmFscGhhLW9zZjEtc2hhcmVkOjo6LnNvIiwKIm9zZjEtYWxwaGEtY2MiLCAgImNjOi1zdGQxIC10dW5lIGhvc3QgLU80IC1yZWFkb25seV9zdHJpbmdzOjoodW5rbm93bik6OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSzoke25vX2FzbX06ZGxmY246YWxwaGEtb3NmMS1zaGFyZWQ6Ojouc28iLAoidHJ1NjQtYWxwaGEtY2MiLCAiY2M6LXN0ZDEgLXR1bmUgaG9zdCAtZmFzdCAtcmVhZG9ubHlfc3RyaW5nczo6LXB0aHJlYWQ6OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSzoke25vX2FzbX06ZGxmY246YWxwaGEtb3NmMS1zaGFyZWQ6Oi1tc3ltOi5zbyIsCgojIyMjCiMjIyMgVmFyaWV0eSBvZiBMSU5VWDotKQojIyMjCiMgKi1nZW5lcmljKiBpcyBlbmRpYW4tbmV1dHJhbCB0YXJnZXQsIGJ1dCAuL2NvbmZpZyBpcyBmcmVlIHRvCiMgdGhyb3cgaW4gLURbQkxdX0VORElBTiwgd2hpY2hldmVyIGFwcHJvcHJpYXRlLi4uCiJsaW51eC1nZW5lcmljMzIiLCJnY2M6LURURVJNSU8gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoibGludXgtcHBjIiwJImdjYzotREJfRU5ESUFOIC1EVEVSTUlPIC1PMyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX1VOUk9MTDo6bGludXhfcHBjMzIubzo6Ojo6Ojo6OjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyMjIyBJQS0zMiB0YXJnZXRzLi4uCiJsaW51eC1pYTMyLWljYyIsCSJpY2M6LURMX0VORElBTiAtRFRFUk1JTyAtTzIgLW5vX2NwcHJ0OjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotS1BJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoibGludXgtZWxmIiwJImdjYzotRExfRU5ESUFOIC1EVEVSTUlPIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LWFvdXQiLAkiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1tYXJjaD1pNDg2IC1XYWxsOjoodW5rbm93bik6OjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfb3V0X2FzbX0iLAojIyMjCiJsaW51eC1nZW5lcmljNjQiLCJnY2M6LURURVJNSU8gLU8zIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJsaW51eC1wcGM2NCIsCSJnY2M6LW02NCAtREJfRU5ESUFOIC1EVEVSTUlPIC1PMyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19SSVNDMSBERVNfVU5ST0xMOjpsaW51eF9wcGM2NC5vOjo6Ojo6Ojo6OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTY0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LWlhNjQiLAkiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gLU8zIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTks6JHtpYTY0X2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJsaW51eC1pYTY0LWVjYyIsImVjYzotRExfRU5ESUFOIC1EVEVSTUlPIC1PMiAtV2FsbCAtbm9fY3BwcnQ6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSzoke2lhNjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LWlhNjQtaWNjIiwiaWNjOi1ETF9FTkRJQU4gLURURVJNSU8gLU8yIC1XYWxsIC1ub19jcHBydDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LOiR7aWE2NF9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoibGludXgteDg2XzY0IiwJImdjYzotbTY0IC1ETF9FTkRJQU4gLURURVJNSU8gLU8zIC1XYWxsIC1ETUQzMl9SRUdfVD1pbnQ6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBCRl9QVFIyIERFU19JTlQgREVTX1VOUk9MTDoke3g4Nl82NF9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTY0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyMjIyBTUEFSQyBMaW51eCBzZXR1cHMKIyBSYXkgTWlsbGVyIDxyYXkubWlsbGVyQGNvbXB1dGluZy1zZXJ2aWNlcy5veGZvcmQuYWMudWs+IGhhcyBwYXRpZW50bHkKIyBhc3Npc3RlZCB3aXRoIGRlYnVnZ2luZyBvZiBmb2xsb3dpbmcgdHdvIGNvbmZpZ3MuCiJsaW51eC1zcGFyY3Y4IiwiZ2NjOi1tdjggLURCX0VORElBTiAtRFRFUk1JTyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGwgLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjo6c3BhcmN2OC5vOmRlc19lbmMtc3BhcmMubyBmY3J5cHRfYi5vOjo6Ojo6Ojo6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiMgaXQncyBhIHJlYWwgbWVzcyB3aXRoIC1tY3B1PXVsdHJhc3BhcmMgb3B0aW9uIHVuZGVyIExpbnV4LCBidXQKIyAtV2EsLUF2OHBsdXMgc2hvdWxkIGRvIHRoZSB0cmljayBubyBtYXR0ZXIgd2hhdC4KImxpbnV4LXNwYXJjdjkiLCJnY2M6LW0zMiAtbWNwdT11bHRyYXNwYXJjIC1EQl9FTkRJQU4gLURURVJNSU8gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsIC1XYSwtQXY4cGx1cyAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6VUxUUkFTUEFSQzotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjo6c3BhcmN2OHBsdXMubzpkZXNfZW5jLXNwYXJjLm8gZmNyeXB0X2Iubzo6Ojo6Ojo6OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTMyOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyBHQ0MgMy4xIGlzIGEgcmVxdWlyZW1lbnQKImxpbnV4NjQtc3BhcmN2OSIsImdjYzotbTY0IC1tY3B1PXVsdHJhc3BhcmMgLURCX0VORElBTiAtRFRFUk1JTyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDpVTFRSQVNQQVJDOi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6Ojo6Ojo6Ojo6OjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiMjIyMgQWxwaGEgTGludXggd2l0aCBHTlUgQyBhbmQgQ29tcGFxIEMgc2V0dXBzCiMgU3BlY2lhbCBub3RlczoKIyAtIGxpbnV4LWFscGhhK2J3eC1nY2MgaXMgbWVudCB0byBiZSB1c2VkIGZyb20gLi9jb25maWcgb25seS4gSWYgeW91CiMgICBvdWdodCB0byBydW4gJy4vQ29uZmlndXJlLnBsIGxpbnV4LWFscGhhK2J3eC1nY2MnIG1hbnVhbGx5LCBkbwojICAgY29tcGxlbWVudCB0aGUgY29tbWFuZCBsaW5lIHdpdGggLW1jcHU9ZXY1NiwgLW1jcHU9ZXY2IG9yIHdoYXRldmVyCiMgICB3aGljaCBpcyBhcHByb3ByaWF0ZS4KIyAtIElmIHlvdSB1c2UgY2NjIGtlZXAgaW4gbWluZCB0aGF0IC1mYXN0IGltcGxpZXMgLWFyY2ggaG9zdCBhbmQgdGhlCiMgICBjb21waWxlciBpcyBmcmVlIHRvIGlzc3VlIGluc3RydWN0aW9ucyB3aGljaCBnb25uYSBtYWtlIGVsZGVyIENQVQojICAgY2hva2UuIElmIHlvdSB3aXNoIHRvIGJ1aWxkICJibGVuZGVkIiB0b29sa2l0LCBhZGQgLWFyY2ggZ2VuZXJpYwojICAgKmFmdGVyKiAtZmFzdCBhbmQgaW52b2tlICcuL0NvbmZpZ3VyZS5wbCBsaW51eC1hbHBoYS1jY2MnIG1hbnVhbGx5LgojCiMJCQkJCTxhcHByb0BmeS5jaGFsbWVycy5zZT4KIwoibGludXgtYWxwaGEtZ2NjIiwiZ2NjOi1PMyAtRExfRU5ESUFOIC1EVEVSTUlPOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX1JJU0MxIERFU19VTlJPTEw6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoibGludXgtYWxwaGErYnd4LWdjYyIsImdjYzotTzMgLURMX0VORElBTiAtRFRFUk1JTzo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19SSVNDMSBERVNfVU5ST0xMOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LWFscGhhLWNjYyIsImNjYzotZmFzdCAtcmVhZG9ubHlfc3RyaW5ncyAtRExfRU5ESUFOIC1EVEVSTUlPOjotRF9SRUVOVFJBTlQ6OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEw6JHtub19hc219IiwKImxpbnV4LWFscGhhK2J3eC1jY2MiLCJjY2M6LWZhc3QgLXJlYWRvbmx5X3N0cmluZ3MgLURMX0VORElBTiAtRFRFUk1JTzo6LURfUkVFTlRSQU5UOjo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMOiR7bm9fYXNtfSIsCgojIyMjICpCU0QgW2RvIHNlZSBjb21tZW50IGFib3V0ICR7QlNEdGhyZWFkc30gYWJvdmUhXQoiQlNELWdlbmVyaWMzMiIsImdjYzotRFRFUk1JT1MgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjoke0JTRHRocmVhZHN9Ojo6Qk5fTExPTkcgUkMyX0NIQVIgUkM0X0lOREVYIERFU19JTlQgREVTX1VOUk9MTDoke25vX2FzbX06ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIkJTRC14ODYiLAkiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU9TIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6JHtCU0R0aHJlYWRzfTo6OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9vdXRfYXNtfTpkbGZjbjpic2Qtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJCU0QteDg2LWVsZiIsCSJnY2M6LURMX0VORElBTiAtRFRFUk1JT1MgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjoke0JTRHRocmVhZHN9Ojo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmJzZC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImRlYnVnLUJTRC14ODYtZWxmIiwJImdjYzotRExfRU5ESUFOIC1EVEVSTUlPUyAtTzMgLVdhbGwgLWc6OiR7QlNEdGhyZWFkc306OjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246YnNkLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiQlNELXNwYXJjdjgiLAkiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU9TIC1PMyAtbXY4IC1XYWxsOjoke0JTRHRocmVhZHN9Ojo6Qk5fTExPTkcgUkMyX0NIQVIgUkM0X0lOREVYIERFU19JTlQgREVTX1VOUk9MTDo6c3BhcmN2OC5vOmRlc19lbmMtc3BhcmMubyBmY3J5cHRfYi5vOjo6Ojo6Ojo6ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKCiJCU0QtZ2VuZXJpYzY0IiwiZ2NjOi1EVEVSTUlPUyAtTzMgLVdhbGw6OiR7QlNEdGhyZWFkc306OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHtub19hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiMgLURNRDMyX1JFR19UPWludCBkb2Vzbid0IGFjdHVhbGx5IGJlbG9uZyBpbiBzcGFyYzY0IHRhcmdldCwgaXQKIyBzaW1wbHkgKmhhcHBlbnMqIHRvIHdvcmsgYXJvdW5kIGEgY29tcGlsZXIgYnVnIGluIGdjYyAzLjMuMywKIyB0cmlnZ2VyZWQgYnkgUklQRU1EMTYwIGNvZGUuCiJCU0Qtc3BhcmM2NCIsCSJnY2M6LURCX0VORElBTiAtRFRFUk1JT1MgLU8zIC1ETUQzMl9SRUdfVD1pbnQgLVdhbGw6OiR7QlNEdGhyZWFkc306OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDMl9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19QVFIgREVTX1JJU0MyIEJGX1BUUjo6OmRlc19lbmMtc3BhcmMubyBmY3J5cHRfYi5vOjo6Ojo6Ojo6ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIkJTRC1pYTY0IiwJImdjYzotRExfRU5ESUFOIC1EVEVSTUlPUyAtTzMgLVdhbGw6OiR7QlNEdGhyZWFkc306OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSzoke2lhNjRfYXNtfTpkbGZjbjpic2QtZ2NjLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiQlNELXg4Nl82NCIsCSJnY2M6LURMX0VORElBTiAtRFRFUk1JT1MgLU8zIC1ETUQzMl9SRUdfVD1pbnQgLVdhbGw6OiR7QlNEdGhyZWFkc306OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHt4ODZfNjRfYXNtfTpkbGZjbjpic2QtZ2NjLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoKImJzZGktZWxmLWdjYyIsICAgICAiZ2NjOi1EUEVSTDUgLURMX0VORElBTiAtZm9taXQtZnJhbWUtcG9pbnRlciAtTzMgLW1hcmNoPWk0ODYgLVdhbGw6Oih1bmtub3duKTo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKCiJuZXh0c3RlcCIsCSJjYzotTyAtV2FsbDo8bGliYy5oPjoodW5rbm93bik6OjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306OjoiLAoibmV4dHN0ZXAzLjMiLAkiY2M6LU8zIC1XYWxsOjxsaWJjLmg+Oih1bmtub3duKTo6OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfTo6OiIsCgojIE5DUiBNUC1SQVMgVU5JWCB2ZXIgMDIuMDMuMDEKIm5jci1zY2RlIiwiY2M6LU82IC1YYSAtSG9mZj1CRUhBVkVEIC02ODYgLUh3aWRlIC1IaXc6Oih1bmtub3duKTo6LWxzb2NrZXQgLWxuc2wgLWxjODk6JHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9Ojo6IiwKCiMgUU5YCiJxbng0IiwJImNjOi1ETF9FTkRJQU4gLURURVJNSU86Oih1bmtub3duKTo6OiR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToiLAoicW54NiIsCSJjYzotRExfRU5ESUFOIC1EVEVSTUlPUzo6KHVua25vd24pOjotbHNvY2tldDoke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306IiwKCiMjIyMgU0NPL0NhbGRlcmEgdGFyZ2V0cy4KIwojIE9yaWdpbmFsbHkgd2UgaGFkIGxpa2UgdW5peHdhcmUtKiwgdW5peHdhcmUtKi1wZW50aXVtLCB1bml4d2FyZS0qLXA2LCBldGMuCiMgTm93IHdlIG9ubHkgaGF2ZSBibGVuZGVkIHVuaXh3YXJlLSogYXMgaXQncyB0aGUgb25seSBvbmUgdXNlZCBieSAuL2NvbmZpZy4KIyBJZiB5b3Ugd2FudCB0byBvcHRpbWl6ZSBmb3IgcGFydGljdWxhciBtaWNyb2FyY2hpdGVjdHVyZSwgYnlwYXNzIC4vY29uZmlnCiMgYW5kICcuL0NvbmZpZ3VyZS5wbCB1bml4d2FyZS03IC1LcGVudGl1bV9wcm8nIG9yIHdoYXRldmVyIGFwcHJvcHJpYXRlLgojIE5vdGUgdGhhdCBub3QgYWxsIHRhcmdldHMgaW5jbHVkZSBhc3NlbWJsZXIgc3VwcG9ydC4gTW9zdGx5IGJlY2F1c2Ugb2YKIyBsYWNrIG9mIG1vdGl2YXRpb24gdG8gc3VwcG9ydCBvdXQtb2YtZGF0ZSBwbGF0Zm9ybXMgd2l0aCBvdXQtb2YtZGF0ZQojIGNvbXBpbGVyIGRyaXZlcnMgYW5kIGFzc2VtYmxlcnMuIFRpbSBSaWNlIDx0aW1AbXVsdGl0YWxlbnRzLm5ldD4gaGFzCiMgcGF0aWVudGx5IGFzc2lzdGVkIHRvIGRlYnVnIG1vc3Qgb2YgaXQuCiMKIyBVbml4V2FyZSAyLjB4IGZhaWxzIGRlc3Rlc3Qgd2l0aCAtTy4KInVuaXh3YXJlLTIuMCIsImNjOi1ERklMSU9fSCAtRE5PX1NUUklOR1NfSDo6LUt0aHJlYWQ6Oi1sc29ja2V0IC1sbnNsIC1scmVzb2x2IC1seDoke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306OjoiLAoidW5peHdhcmUtMi4xIiwiY2M6LU8gLURGSUxJT19IOjotS3RocmVhZDo6LWxzb2NrZXQgLWxuc2wgLWxyZXNvbHYgLWx4OiR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfTo6OiIsCiJ1bml4d2FyZS03IiwiY2M6LU8gLURGSUxJT19IIC1LYWxsb2NhOjotS3RocmVhZDo6LWxzb2NrZXQgLWxuc2w6Qk5fTExPTkcgTUQyX0NIQVIgUkM0X0lOREVYICR7eDg2X2djY19kZXN9OiR7eDg2X2VsZl9hc219OmRsZmNuOnN2cjUtc2hhcmVkOi1LcGljOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJ1bml4d2FyZS03LWdjYyIsImdjYzotRExfRU5ESUFOIC1ERklMSU9fSCAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLW1hcmNoPXBlbnRpdW0gLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxzb2NrZXQgLWxuc2w6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmdudS1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyBTQ08gNSAtIEJlbiBMYXVyaWUgPGJlbkBhbGdyb3VwLmNvLnVrPiBzYXlzIHRoZSAtTyBicmVha3MgdGhlIFNDTyBjYy4KInNjbzUtY2MiLCAgImNjOi1iZWxmOjoodW5rbm93bik6Oi1sc29ja2V0IC1sbnNsOiR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpzdnIzLXNoYXJlZDotS3BpYzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoic2NvNS1nY2MiLCAgImdjYzotTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXI6Oih1bmtub3duKTo6LWxzb2NrZXQgLWxuc2w6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOnN2cjMtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCgojIyMjIElCTSdzIEFJWC4KImFpeDMtY2MiLCAgImNjOi1PIC1EQl9FTkRJQU4gLXFtYXhtZW09MTYzODQ6Oih1bmtub3duKTpBSVg6OkJOX0xMT05HIFJDNF9DSEFSOjo6IiwKImFpeC1nY2MiLCAgImdjYzotTyAtREJfRU5ESUFOOjotcHRocmVhZDpBSVg6OkJOX0xMT05HIFJDNF9DSEFSOjphaXhfcHBjMzIubzo6Ojo6Ojo6OjpkbGZjbjphaXgtc2hhcmVkOjotc2hhcmVkIC1XbCwtRzouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6LVggMzIiLAoiYWl4NjQtZ2NjIiwiZ2NjOi1tYWl4NjQgLU8gLURCX0VORElBTjo6LXB0aHJlYWQ6QUlYOjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSOjphaXhfcHBjNjQubzo6Ojo6Ojo6OjpkbGZjbjphaXgtc2hhcmVkOjotbWFpeDY0IC1zaGFyZWQgLVdsLC1HOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjotWDY0IiwKIyBCZWxvdyB0YXJnZXRzIGFzc3VtZSBBSVggNS4gSWRlYSBpcyB0byBlZmZlY3RpdmVseSBkaXNyZWdhcmQgJE9CSkVDVF9NT0RFCiMgYXQgYnVpbGQgdGltZS4gJE9CSkVDVF9NT0RFIGlzIHJlc3BlY3RlZCBhdCAuL2NvbmZpZyBzdGFnZSEKImFpeC1jYyIsICAgImNjOi1xMzIgLU8gLURCX0VORElBTiAtcW1heG1lbT0xNjM4NCAtcXJvIC1xcm9jb25zdDo6LXF0aHJlYWRlZDpBSVg6OkJOX0xMT05HIFJDNF9DSEFSOjphaXhfcHBjMzIubzo6Ojo6Ojo6OjpkbGZjbjphaXgtc2hhcmVkOjotcTMyIC1HOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjotWCAzMiIsCiJhaXg2NC1jYyIsICJjYzotcTY0IC1PIC1EQl9FTkRJQU4gLXFtYXhtZW09MTYzODQgLXFybyAtcXJvY29uc3Q6Oi1xdGhyZWFkZWQ6QUlYOjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSOjphaXhfcHBjNjQubzo6Ojo6Ojo6OjpkbGZjbjphaXgtc2hhcmVkOjotcTY0IC1HOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjotWCA2NCIsCgojCiMgQ3JheSBUOTAgYW5kIHNpbWlsYXIgKFNEU0MpCiMgSXQncyBCaWctZW5kaWFuLCBidXQgdGhlIGFsZ29yaXRobXMgd29yayBwcm9wZXJseSB3aGVuIEJfRU5ESUFOIGlzIE5PVAojIGRlZmluZWQuICBUaGUgVDkwIGludHMgYW5kIGxvbmdzIGFyZSA4IGJ5dGVzIGxvbmcsIGFuZCBhcHBhcmVudGx5IHRoZQojIEJfRU5ESUFOIGNvZGUgYXNzdW1lcyA0IGJ5dGUgaW50cy4gIEZvcnR1bmF0ZWx5LCB0aGUgbm9uLUJfRU5ESUFOIGFuZAojIG5vbiBMX0VORElBTiBjb2RlIGFsaWducyB0aGUgYnl0ZXMgaW4gZWFjaCB3b3JkIGNvcnJlY3RseS4KIwojIFRoZSBCSVRfRklFTERfTElNSVRTIGRlZmluZSBpcyB0byBhdm9pZCB0d28gZmF0YWwgY29tcGlsZXIgZXJyb3JzOgojJ1Rha2luZyB0aGUgYWRkcmVzcyBvZiBhIGJpdCBmaWVsZCBpcyBub3QgYWxsb3dlZC4gJwojJ0FuIGV4cHJlc3Npb24gd2l0aCBiaXQgZmllbGQgZXhpc3RzIGFzIHRoZSBvcGVyYW5kIG9mICJzaXplb2YiICcKIyAod3JpdHRlbiBieSBXYXluZSBTY2hyb2VkZXIgPHNjaHJvZWRlQFNEU0MuRURVPikKIwojIGo5MCBpcyBjb25zaWRlcmVkIHRoZSBiYXNlIG1hY2hpbmUgdHlwZSBmb3IgdW5pY29zIG1hY2hpbmVzLAojIHNvIHRoaXMgY29uZmlndXJhdGlvbiBpcyBub3cgY2FsbGVkICJjcmF5LWo5MCIgLi4uCiJjcmF5LWo5MCIsICJjYzogLURCSVRfRklFTERfTElNSVRTIC1EVEVSTUlPUzo6KHVua25vd24pOkNSQVk6OlNJWFRZX0ZPVVJfQklUX0xPTkcgREVTX0lOVDo6OiIsCgojCiMgQ3JheSBUM0UgKFJlc2VhcmNoIENlbnRlciBKdWVsaWNoLCBiZWNrbWFuQGFjbC5sYW5sLmdvdikKIwojIFRoZSBCSVRfRklFTERfTElNSVRTIGRlZmluZSB3YXMgd3JpdHRlbiBmb3IgdGhlIEM5MCAoaXQgc2VlbXMpLiAgSSBhZGRlZAojIGFub3RoZXIgdXNlLiAgQmFzaWNhbGx5LCB0aGUgcHJvYmxlbSBpcyB0aGF0IHRoZSBUM0UgdXNlcyBzb21lIGJpdCBmaWVsZHMKIyBmb3Igc29tZSBzdF9hZGRyIHN0dWZmLCBhbmQgdGhlbiBzaXplb2YgYW5kIGFkZHJlc3Mtb2YgZmFpbHMKIyBJIGNvdWxkIG5vdCB1c2UgdGhlIGFtcy9hbHBoYS5vIG9wdGlvbiBiZWNhdXNlIHRoZSBDcmF5IGFzc2VtYmxlciwgJ2NhbScKIyBkaWQgbm90IGxpa2UgaXQuCiJjcmF5LXQzZSIsICJjYzogLURCSVRfRklFTERfTElNSVRTIC1EVEVSTUlPUzo6KHVua25vd24pOkNSQVk6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQ6OjoiLAoKIyBER1VYLCA4ODEwMC4KImRndXgtUjMtZ2NjIiwJImdjYzotTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXI6Oih1bmtub3duKTo6OlJDNF9JTkRFWCBERVNfVU5ST0xMOjo6IiwKImRndXgtUjQtZ2NjIiwJImdjYzotTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXI6Oih1bmtub3duKTo6LWxuc2wgLWxzb2NrZXQ6UkM0X0lOREVYIERFU19VTlJPTEw6OjoiLAoiZGd1eC1SNC14ODYtZ2NjIiwJImdjYzotTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLURMX0VORElBTjo6KHVua25vd24pOjotbG5zbCAtbHNvY2tldDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX0iLAoKIyBTaW5peC9SZWxpYW50VU5JWCBSTTQwMAojIE5PVEU6IFRoZSBDRFMrKyBDb21waWxlciB1cCB0byBWMi4wQnNvbWV0aGluZyBoYXMgdGhlIElSSVhfQ0NfQlVHIG9wdGltaXplciBwcm9ibGVtLiBCZXR0ZXIgdXNlIC1nICAqLwoiUmVsaWFudFVOSVgiLCJjYzotS1BJQyAtZyAtRFRFUk1JT1MgLURCX0VORElBTjo6LUt0aHJlYWQ6U05JOi1sc29ja2V0IC1sbnNsIC1sYyAtTC91c3IvdWNibGliIC1sdWNiOkJOX0xMT05HIERFU19QVFIgREVTX1JJU0MyIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpyZWxpYW50dW5peC1zaGFyZWQ6Ojouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJTSU5JWCIsImNjOi1POjoodW5rbm93bik6U05JOi1sc29ja2V0IC1sbnNsIC1sYyAtTC91c3IvdWNibGliIC1sdWNiOlJDNF9JTkRFWCBSQzRfQ0hBUjo6OiIsCiJTSU5JWC1OIiwiL3Vzci91Y2IvY2M6LU8yIC1taXNhbGlnbmVkOjoodW5rbm93bik6Oi1sdWNiOlJDNF9JTkRFWCBSQzRfQ0hBUjo6OiIsCgojIFNJRU1FTlMgQlMyMDAwL09TRDogYW4gRUJDRElDLWJhc2VkIG1haW5mcmFtZQoiQlMyMDAwLU9TRCIsImM4OTotTyAtWExMTUwgLVhMTE1LIC1YTCAtREJfRU5ESUFOIC1EVEVSTUlPUyAtRENIQVJTRVRfRUJDRElDOjoodW5rbm93bik6Oi1sc29ja2V0IC1sbnNsOlRISVJUWV9UV09fQklUIERFU19QVFIgREVTX1VOUk9MTCBNRDJfQ0hBUiBSQzRfSU5ERVggUkM0X0NIQVIgQkZfUFRSOjo6IiwKCiMgT1MvMzkwIFVuaXggYW4gRUJDRElDLWJhc2VkIFVuaXggc3lzdGVtIG9uIElCTSBtYWluZnJhbWUKIyBZb3UgbmVlZCB0byBjb21waWxlIHVzaW5nIHRoZSBjODkuc2ggd3JhcHBlciBpbiB0aGUgdG9vbHMgZGlyZWN0b3J5LCBiZWNhdXNlIHRoZQojIElCTSBjb21waWxlciBkb2VzIG5vdCBsaWtlIHRoZSAtTCBzd2l0Y2ggYWZ0ZXIgYW55IG9iamVjdCBtb2R1bGVzLgojCiJPUzM5MC1Vbml4IiwiYzg5LnNoOi1PIC1EQl9FTkRJQU4gLURDSEFSU0VUX0VCQ0RJQyAtRE5PX1NZU19QQVJBTV9IICAtRF9BTExfU09VUkNFOjoodW5rbm93bik6OjpUSElSVFlfVFdPX0JJVCBERVNfUFRSIERFU19VTlJPTEwgTUQyX0NIQVIgUkM0X0lOREVYIFJDNF9DSEFSIEJGX1BUUjo6OiIsCgojIFdpbjY0IHRhcmdldHMsIFdJTjY0SSBkZW5vdGVzIElBLTY0IGFuZCBXSU42NEEgLSBBTUQ2NAoiVkMtV0lONjRJIiwiY2w6Ojo6V0lONjRJOjpTSVhUWV9GT1VSX0JJVCBSQzRfQ0hVTktfTEwgREVTX0lOVCBFWFBPUlRfVkFSX0FTX0ZOOiR7bm9fYXNtfTp3aW4zMiIsCiJWQy1XSU42NEEiLCJjbDo6OjpXSU42NEE6OlNJWFRZX0ZPVVJfQklUIFJDNF9DSFVOS19MTCBERVNfSU5UIEVYUE9SVF9WQVJfQVNfRk46JHtub19hc219OndpbjMyIiwKCiMgVmlzdWFsIEMgdGFyZ2V0cwoiVkMtTlQiLCJjbDo6OjpXSU5OVDo6Qk5fTExPTkcgUkM0X0lOREVYIEVYUE9SVF9WQVJfQVNfRk4gJHt4ODZfZ2NjX29wdHN9OiR7bm9fYXNtfTp3aW4zMiIsCiJWQy1DRSIsImNsOjo6OldJTkNFOjpCTl9MTE9ORyBSQzRfSU5ERVggRVhQT1JUX1ZBUl9BU19GTiAke3g4Nl9nY2Nfb3B0c306JHtub19hc219OndpbjMyIiwKIlZDLVdJTjMyIiwiY2w6Ojo6V0lOMzI6OkJOX0xMT05HIFJDNF9JTkRFWCBFWFBPUlRfVkFSX0FTX0ZOICR7eDg2X2djY19vcHRzfToke25vX2FzbX06d2luMzIiLAoKIyBCb3JsYW5kIEMrKyA0LjUKIkJDLTMyIiwiYmNjMzI6Ojo6V0lOMzI6OkJOX0xMT05HIERFU19QVFIgUkM0X0lOREVYIEVYUE9SVF9WQVJfQVNfRk46JHtub19hc219OndpbjMyIiwKCiMgTWluR1cKIm1pbmd3IiwgImdjYzotbW5vLWN5Z3dpbiAtRExfRU5ESUFOIC1mb21pdC1mcmFtZS1wb2ludGVyIC1PMyAtbWFyY2g9aTQ4NiAtV2FsbCAtRF9XSU4zMl9XSU5OVD0weDMzMzo6Ok1JTkdXMzI6LWx3c29jazMyIC1sZ2RpMzI6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9IEVYUE9SVF9WQVJfQVNfRk46JHt4ODZfY29mZl9hc219OndpbjMyOmN5Z3dpbi1zaGFyZWQ6LURfV0lORExMIC1ET1BFTlNTTF9VU0VfQVBQTElOSzotbW5vLWN5Z3dpbiAtc2hhcmVkOi5kbGwuYSIsCgojIFVXSU4gCiJVV0lOIiwgImNjOi1EVEVSTUlPUyAtRExfRU5ESUFOIC1PIC1XYWxsOjo6VVdJTjo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7bm9fYXNtfTp3aW4zMiIsCgojIEN5Z3dpbgoiQ3lnd2luLXByZTEuMyIsICJnY2M6LURURVJNSU9TIC1ETF9FTkRJQU4gLWZvbWl0LWZyYW1lLXBvaW50ZXIgLU8zIC1tNDg2IC1XYWxsOjoodW5rbm93bik6Q1lHV0lOMzI6OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke25vX2FzbX06d2luMzIiLAoiQ3lnd2luIiwgImdjYzotRFRFUk1JT1MgLURMX0VORElBTiAtZm9taXQtZnJhbWUtcG9pbnRlciAtTzMgLW1hcmNoPWk0ODYgLVdhbGw6OjpDWUdXSU4zMjo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2NvZmZfYXNtfTpkbGZjbjpjeWd3aW4tc2hhcmVkOi1EX1dJTkRMTDotc2hhcmVkOi5kbGwuYSIsCiJkZWJ1Zy1DeWd3aW4iLCAiZ2NjOi1EVEVSTUlPUyAtRExfRU5ESUFOIC1tYXJjaD1pNDg2IC1XYWxsIC1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRE9QRU5TU0xfTk9fQVNNIC1nIC1XZm9ybWF0IC1Xc2hhZG93IC1XbWlzc2luZy1wcm90b3R5cGVzIC1XbWlzc2luZy1kZWNsYXJhdGlvbnMgLVdlcnJvcjo6OkNZR1dJTjMyOjo6JHtub19hc219OmRsZmNuOmN5Z3dpbi1zaGFyZWQ6LURfV0lORExMOi1zaGFyZWQ6LmRsbC5hIiwKCiMgTmV0V2FyZSBmcm9tIERhdmlkIFdhcmQgKGRzd2FyZEBub3ZlbGwuY29tKQojIHJlcXVpcmVzIGVpdGhlciBNZXRyb1dlcmtzIE5MTSBkZXZlbG9wbWVudCB0b29scywgb3IgZ2NjIC8gbmxtY29udgojIE5ldFdhcmUgZGVmYXVsdHMgc29ja2V0IGJpbyB0byBXaW5Tb2NrIHNvY2tldHMuIEhvd2V2ZXIsCiMgdGhlIGJ1aWxkcyBjYW4gYmUgY29uZmlndXJlZCB0byB1c2UgQlNEIHNvY2tldHMgaW5zdGVhZC4KIyBuZXR3YXJlLWNsaWIgPT4gbGVnYWN5IENMaWIgYy1ydW50aW1lIHN1cHBvcnQKIm5ldHdhcmUtY2xpYiIsICJtd2NjbmxtOjo6Ojo6JHt4ODZfZ2NjX29wdHN9OjoiLAoibmV0d2FyZS1jbGliLWJzZHNvY2siLCAibXdjY25sbTo6Ojo6OiR7eDg2X2djY19vcHRzfTo6IiwKIm5ldHdhcmUtY2xpYi1nY2MiLCAiaTU4Ni1uZXR3YXJlLWdjYzotbm9zdGRpbmMgLUkvbmRrL253c2RrL2luY2x1ZGUvbmxtIC1JL25kay93czI5NXNkay9pbmNsdWRlIC1ETF9FTkRJQU4gLURORVRXQVJFX0NMSUIgLURPUEVOU1NMX1NZU05BTUVfTkVUV0FSRSAtTzIgLVdhbGw6Ojo6OiR7eDg2X2djY19vcHRzfTo6IiwKIm5ldHdhcmUtY2xpYi1ic2Rzb2NrLWdjYyIsICJpNTg2LW5ldHdhcmUtZ2NjOi1ub3N0ZGluYyAtSS9uZGsvbndzZGsvaW5jbHVkZS9ubG0gLURORVRXQVJFX0JTRFNPQ0sgLURORVREQl9VU0VfSU5URVJORVQgLURMX0VORElBTiAtRE5FVFdBUkVfQ0xJQiAtRE9QRU5TU0xfU1lTTkFNRV9ORVRXQVJFIC1PMiAtV2FsbDo6Ojo6JHt4ODZfZ2NjX29wdHN9OjoiLAojIG5ldHdhcmUtbGliYyA9PiBMaWJDL05LUyBzdXBwb3J0CiJuZXR3YXJlLWxpYmMiLCAibXdjY25sbTo6Ojo6OkJOX0xMT05HICR7eDg2X2djY19vcHRzfTo6IiwKIm5ldHdhcmUtbGliYy1ic2Rzb2NrIiwgIm13Y2NubG06Ojo6OjpCTl9MTE9ORyAke3g4Nl9nY2Nfb3B0c306OiIsCiJuZXR3YXJlLWxpYmMtZ2NjIiwgImk1ODYtbmV0d2FyZS1nY2M6LW5vc3RkaW5jIC1JL25kay9saWJjL2luY2x1ZGUgLUkvbmRrL2xpYmMvaW5jbHVkZS93aW5zb2NrIC1ETF9FTkRJQU4gLURORVRXQVJFX0xJQkMgLURPUEVOU1NMX1NZU05BTUVfTkVUV0FSRSAtRFRFUk1JTyAtTzIgLVdhbGw6Ojo6OkJOX0xMT05HICR7eDg2X2djY19vcHRzfTo6IiwKIm5ldHdhcmUtbGliYy1ic2Rzb2NrLWdjYyIsICJpNTg2LW5ldHdhcmUtZ2NjOi1ub3N0ZGluYyAtSS9uZGsvbGliYy9pbmNsdWRlIC1ETkVUV0FSRV9CU0RTT0NLIC1ETF9FTkRJQU4gLURORVRXQVJFX0xJQkMgLURPUEVOU1NMX1NZU05BTUVfTkVUV0FSRSAtRFRFUk1JTyAtTzIgLVdhbGw6Ojo6OkJOX0xMT05HICR7eDg2X2djY19vcHRzfTo6IiwKCiMgREpHUFAKIkRKR1BQIiwgImdjYzotSS9kZXYvZW52L1dBVFRfUk9PVC9pbmMgLURURVJNSU9TIC1ETF9FTkRJQU4gLWZvbWl0LWZyYW1lLXBvaW50ZXIgLU8yIC1XYWxsOjo6TVNET1M6LUwvZGV2L2Vudi9XQVRUX1JPT1QvbGliIC1sd2F0dDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfb3V0X2FzbX06IiwKCiMgVWx0cml4IGZyb20gQmVybmhhcmQgU2ltb24gPHNpbW9uQHppZC50dXdpZW4uYWMuYXQ+CiJ1bHRyaXgtY2MiLCJjYzotc3RkMSAtTyAtT2xpbWl0IDI1MDAgLURMX0VORElBTjo6KHVua25vd24pOjo6Ojo6OiIsCiJ1bHRyaXgtZ2NjIiwiZ2NjOi1PMyAtRExfRU5ESUFOOjoodW5rbm93bik6OjpCTl9MTE9ORzo6OjoiLAojIEsmUiBDIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQ7IHlvdSBuZWVkIGdjYyBvbiBvbGQgVWx0cml4IGluc3RhbGxhdGlvbnMKIyMidWx0cml4IiwiY2M6LU8yIC1ETk9QUk9UTyAtRE5PQ09OU1QgLURMX0VORElBTjo6KHVua25vd24pOjo6Ojo6OiIsCgojIyMjIyBNYWNPUyBYIChhLmsuYS4gUmhhcHNvZHkgb3IgRGFyd2luKSBzZXR1cAoicmhhcHNvZHktcHBjLWNjIiwiY2M6LU8zIC1EQl9FTkRJQU46Oih1bmtub3duKTpNQUNPU1hfUkhBUFNPRFk6OkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06OiIsCiJkYXJ3aW4tcHBjLWNjIiwiY2M6LWFyY2ggcHBjIC1PMyAtREJfRU5ESUFOOjotRF9SRUVOVFJBTlQ6TUFDT1NYOi1XbCwtc2VhcmNoX3BhdGhzX2ZpcnN0JTpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6Om9zeF9wcGMzMi5vOjo6Ojo6Ojo6OmRsZmNuOmRhcndpbi1zaGFyZWQ6LWZQSUMgLWZuby1jb21tb246LWFyY2ggcHBjIC1keW5hbWljbGliOi5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpLmR5bGliIiwKImRhcndpbjY0LXBwYy1jYyIsImNjOi1hcmNoIHBwYzY0IC1PMyAtREJfRU5ESUFOOjotRF9SRUVOVFJBTlQ6TUFDT1NYOi1XbCwtc2VhcmNoX3BhdGhzX2ZpcnN0JTpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjo6b3N4X3BwYzY0Lm86Ojo6Ojo6Ojo6ZGxmY246ZGFyd2luLXNoYXJlZDotZlBJQyAtZm5vLWNvbW1vbjotYXJjaCBwcGM2NCAtZHluYW1pY2xpYjouXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKS5keWxpYiIsCiJkYXJ3aW4taTM4Ni1jYyIsImNjOi1hcmNoIGkzODYgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1ETF9FTkRJQU46Oi1EX1JFRU5UUkFOVDpNQUNPU1g6LVdsLC1zZWFyY2hfcGF0aHNfZmlyc3QlOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06ZGxmY246ZGFyd2luLXNoYXJlZDotZlBJQyAtZm5vLWNvbW1vbjotYXJjaCBpMzg2IC1keW5hbWljbGliOi5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpLmR5bGliIiwKImRlYnVnLWRhcndpbi1pMzg2LWNjIiwiY2M6LWFyY2ggaTM4NiAtZzMgLURMX0VORElBTjo6LURfUkVFTlRSQU5UOk1BQ09TWDotV2wsLXNlYXJjaF9wYXRoc19maXJzdCU6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpkYXJ3aW4tc2hhcmVkOi1mUElDIC1mbm8tY29tbW9uOi1hcmNoIGkzODYgLWR5bmFtaWNsaWI6LlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikuZHlsaWIiLAoiZGFyd2luNjQteDg2XzY0LWNjIiwiY2M6LWFyY2ggeDg2XzY0IC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtRExfRU5ESUFOIC1ETUQzMl9SRUdfVD1pbnQgLVdhbGw6Oi1EX1JFRU5UUkFOVDpNQUNPU1g6LVdsLC1zZWFyY2hfcGF0aHNfZmlyc3QlOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIEJGX1BUUjIgREVTX0lOVCBERVNfVU5ST0xMOiR7bm9fYXNtfTpkbGZjbjpkYXJ3aW4tc2hhcmVkOi1mUElDIC1mbm8tY29tbW9uOi1hcmNoIHg4Nl82NCAtZHluYW1pY2xpYjouXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKS5keWxpYiIsCiJkZWJ1Zy1kYXJ3aW4tcHBjLWNjIiwiY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURDUllQVE9fTURFQlVHIC1EQl9FTkRJQU4gLWcgLVdhbGwgLU86Oi1EX1JFRU5UUkFOVDpNQUNPU1g6OkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjo6b3N4X3BwYzMyLm86Ojo6Ojo6Ojo6ZGxmY246ZGFyd2luLXNoYXJlZDotZlBJQyAtZm5vLWNvbW1vbjotZHluYW1pY2xpYjouXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKS5keWxpYiIsCgojIyMjIyBBL1VYCiJhdXgzLWdjYyIsImdjYzotTzIgLURURVJNSU86Oih1bmtub3duKTpBVVg6LWxic2Q6UkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOjo6IiwKCiMjIyMjIFNvbnkgTkVXUy1PUyA0LngKIm5ld3NvczQtZ2NjIiwiZ2NjOi1PIC1EQl9FTkRJQU46Oih1bmtub3duKTpORVdTNDotbG1sZCAtbGliZXJ0eTpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCBCRl9QVFI6Ojo6IiwKCiMjIyMjIEdOVSBIdXJkCiJodXJkLXg4NiIsICAiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU9TIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtbWFyY2g9aTQ4NiAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUMiLAoKIyMjIyMgT1MvMiBFTVgKIk9TMi1FTVgiLCAiZ2NjOjo6Ojo6OjoiLAoKIyMjIyMgVnhXb3JrcyBmb3IgdmFyaW91cyB0YXJnZXRzCiJ2eHdvcmtzLXBwYzQwNSIsImNjcHBjOi1nIC1tc29mdC1mbG9hdCAtbWxvbmdjYWxsIC1EQ1BVPVBQQzQwNSAtSVwkKFdJTkRfQkFTRSkvdGFyZ2V0L2g6OjpWWFdPUktTOi1yOjo6OjoiLAoidnh3b3Jrcy1wcGM3NTAiLCJjY3BwYzotYW5zaSAtbm9zdGRpbmMgLURQUEM3NTAgLURfUkVFTlRSQU5UIC1mdm9sYXRpbGUgLWZuby1idWlsdGluIC1mbm8tZm9yLXNjb3BlIC1mc2lnbmVkLWNoYXIgLVdhbGwgLW1zb2Z0LWZsb2F0IC1tbG9uZ2NhbGwgLURDUFU9UFBDNjA0IC1JXCQoV0lORF9CQVNFKS90YXJnZXQvaCBcJChERUJVR19GTEFHKTo6OlZYV09SS1M6LXI6Ojo6OiIsCiJ2eHdvcmtzLXBwYzc1MC1kZWJ1ZyIsImNjcHBjOi1hbnNpIC1ub3N0ZGluYyAtRFBQQzc1MCAtRF9SRUVOVFJBTlQgLWZ2b2xhdGlsZSAtZm5vLWJ1aWx0aW4gLWZuby1mb3Itc2NvcGUgLWZzaWduZWQtY2hhciAtV2FsbCAtbXNvZnQtZmxvYXQgLW1sb25nY2FsbCAtRENQVT1QUEM2MDQgLUlcJChXSU5EX0JBU0UpL3RhcmdldC9oIC1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRFBFREFOVElDIC1EREVCVUdfU0FGRVNUQUNLIC1EREVCVUcgLWc6OjpWWFdPUktTOi1yOjo6OjoiLAoidnh3b3Jrcy1wcGM4NjAiLCJjY3BwYzotbm9zdGRpbmMgLW1zb2Z0LWZsb2F0IC1EQ1BVPVBQQzg2MCAtRE5PX1NUUklOR1NfSCAtSVwkKFdJTkRfQkFTRSkvdGFyZ2V0L2g6OjpWWFdPUktTOi1yOjo6OjoiLAoidnh3b3Jrcy1taXBzbGUiLCJjY21pcHM6LUJcJChXSU5EX0JBU0UpL2hvc3QvXCQoV0lORF9IT1NUX1RZUEUpL2xpYi9nY2MtbGliLyAtRExfRU5ESUFOIC1FTCAtV2wsLUVMIC1taXBzMiAtbW5vLWJyYW5jaC1saWtlbHkgLUcgMCAtZm5vLWJ1aWx0aW4gLW1zb2Z0LWZsb2F0IC1EQ1BVPU1JUFMzMiAtRE1JUFNFTCAtRE5PX1NUUklOR1NfSCAtSVwkKFdJTkRfQkFTRSkvdGFyZ2V0L2g6OjpWWFdPUktTOi1yOjoke25vX2FzbX06Ojo6OjpyYW5saWJtaXBzOiIsCgojIyMjIyBDb21wYXEgTm9uLVN0b3AgS2VybmVsIChUYW5kZW0pCiJ0YW5kZW0tYzg5IiwiYzg5Oi1XdyAtRF9fVEFOREVNIC1EX1hPUEVOX1NPVVJDRSAtRF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQ9MSAtRF9UQU5ERU1fU09VUkNFIC1EQl9FTkRJQU46Oih1bmtub3duKTo6OlRISVJUWV9UV09fQklUOjo6IiwKCik7CgpteSBATUsxTUZfQnVpbGRzPXF3KFZDLVdJTjY0SSBWQy1XSU42NEEKCQkgICAgVkMtTlQgVkMtQ0UgVkMtV0lOMzIKCQkgICAgQkMtMzIgT1MyLUVNWAoJCSAgICBuZXR3YXJlLWNsaWIgbmV0d2FyZS1jbGliLWJzZHNvY2sKCQkgICAgbmV0d2FyZS1saWJjIG5ldHdhcmUtbGliYy1ic2Rzb2NrKTsKCm15ICRpZHggPSAwOwpteSAkaWR4X2NjID0gJGlkeCsrOwpteSAkaWR4X2NmbGFncyA9ICRpZHgrKzsKbXkgJGlkeF91bmlzdGQgPSAkaWR4Kys7Cm15ICRpZHhfdGhyZWFkX2NmbGFnID0gJGlkeCsrOwpteSAkaWR4X3N5c19pZCA9ICRpZHgrKzsKbXkgJGlkeF9sZmxhZ3MgPSAkaWR4Kys7Cm15ICRpZHhfYm5fb3BzID0gJGlkeCsrOwpteSAkaWR4X2NwdWlkX29iaiA9ICRpZHgrKzsKbXkgJGlkeF9ibl9vYmogPSAkaWR4Kys7Cm15ICRpZHhfZGVzX29iaiA9ICRpZHgrKzsKbXkgJGlkeF9hZXNfb2JqID0gJGlkeCsrOwpteSAkaWR4X2JmX29iaiA9ICRpZHgrKzsKbXkgJGlkeF9tZDVfb2JqID0gJGlkeCsrOwpteSAkaWR4X3NoYTFfb2JqID0gJGlkeCsrOwpteSAkaWR4X2Nhc3Rfb2JqID0gJGlkeCsrOwpteSAkaWR4X3JjNF9vYmogPSAkaWR4Kys7Cm15ICRpZHhfcm1kMTYwX29iaiA9ICRpZHgrKzsKbXkgJGlkeF9yYzVfb2JqID0gJGlkeCsrOwpteSAkaWR4X2Rzb19zY2hlbWUgPSAkaWR4Kys7Cm15ICRpZHhfc2hhcmVkX3RhcmdldCA9ICRpZHgrKzsKbXkgJGlkeF9zaGFyZWRfY2ZsYWcgPSAkaWR4Kys7Cm15ICRpZHhfc2hhcmVkX2xkZmxhZyA9ICRpZHgrKzsKbXkgJGlkeF9zaGFyZWRfZXh0ZW5zaW9uID0gJGlkeCsrOwpteSAkaWR4X3JhbmxpYiA9ICRpZHgrKzsKbXkgJGlkeF9hcmZsYWdzID0gJGlkeCsrOwoKbXkgJHByZWZpeD0iIjsKbXkgJG9wZW5zc2xkaXI9IiI7Cm15ICRleGVfZXh0PSIiOwpteSAkaW5zdGFsbF9wcmVmaXg9IiI7Cm15ICRmaXBzbGliZGlyPSIvdXNyL2xvY2FsL3NzbC9maXBzLTEuMC9saWIvIjsKbXkgJG5vZmlwc2NhbmlzdGVyY2hlY2s9MDsKbXkgJGZpcHNkc289MDsKbXkgJGZpcHNjYW5pc3RlcmludGVybmFsPSJuIjsKbXkgJGJhc2VhZGRyPSIweEZCMDAwMDAiOwpteSAkbm9fdGhyZWFkcz0wOwpteSAkdGhyZWFkcz0wOwpteSAkbm9fc2hhcmVkPTA7ICMgYnV0ICJuby1zaGFyZWQiIGlzIGRlZmF1bHQKbXkgJHpsaWI9MTsgICAgICAjIGJ1dCAibm8temxpYiIgaXMgZGVmYXVsdApteSAkbm9fa3JiNT0wOyAgICMgYnV0ICJuby1rcmI1IiBpcyBpbXBsaWVkIHVubGVzcyAiLS13aXRoLWtyYjUtLi4uIiBpcyB1c2VkCm15ICRub19yZmMzNzc5PTE7ICMgYnV0ICJuby1yZmMzNzc5IiBpcyBkZWZhdWx0Cm15ICRtb250YXNtPTE7ICAgIyBidXQgIm5vLW1vbnRhc20iIGlzIGRlZmF1bHQKbXkgJG5vX2FzbT0wOwpteSAkbm9fZHNvPTA7Cm15ICRub19nbXA9MDsKbXkgQHNraXA9KCk7Cm15ICRNYWtlZmlsZT0iTWFrZWZpbGUiOwpteSAkZGVzX2xvY2w9ImNyeXB0by9kZXMvZGVzX2xvY2wuaCI7Cm15ICRkZXMJPSJjcnlwdG8vZGVzL2Rlcy5oIjsKbXkgJGJuCT0iY3J5cHRvL2JuL2JuLmgiOwpteSAkbWQyCT0iY3J5cHRvL21kMi9tZDIuaCI7Cm15ICRyYzQJPSJjcnlwdG8vcmM0L3JjNC5oIjsKbXkgJHJjNF9sb2NsPSJjcnlwdG8vcmM0L3JjNF9sb2NsLmgiOwpteSAkaWRlYQk9ImNyeXB0by9pZGVhL2lkZWEuaCI7Cm15ICRyYzIJPSJjcnlwdG8vcmMyL3JjMi5oIjsKbXkgJGJmCT0iY3J5cHRvL2JmL2JmX2xvY2wuaCI7Cm15ICRibl9hc20JPSJibl9hc20ubyI7Cm15ICRkZXNfZW5jPSJkZXNfZW5jLm8gZmNyeXB0X2IubyI7Cm15ICRmaXBzX2Rlc19lbmM9ImZpcHNfZGVzX2VuYy5vIjsKbXkgJGFlc19lbmM9ImFlc19jb3JlLm8gYWVzX2NiYy5vIjsKbXkgJGJmX2VuYwk9ImJmX2VuYy5vIjsKbXkgJGNhc3RfZW5jPSJjX2VuYy5vIjsKbXkgJHJjNF9lbmM9InJjNF9lbmMubyByYzRfc2tleS5vIjsKbXkgJHJjNV9lbmM9InJjNV9lbmMubyI7Cm15ICRtZDVfb2JqPSIiOwpteSAkc2hhMV9vYmo9IiI7Cm15ICRybWQxNjBfb2JqPSIiOwpteSAkcHJvY2Vzc29yPSIiOwpteSAkZGVmYXVsdF9yYW5saWI7Cm15ICRwZXJsOwpteSAkZmlwcz0wOwoKCiMgQWxsIG9mIHRoZSBmb2xsb3dpbmcgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCAoUkM1IHdhcyBlbmFibGVkIGJlZm9yZSAwLjkuOCk6CgpteSAlZGlzYWJsZWQgPSAoICMgIndoYXQiICAgICAgICAgPT4gImNvbW1lbnQiIFtvciBzcGVjaWFsIGtleXdvcmQgImV4cGVyaW1lbnRhbCJdCiAgICAgICAgICAgICAgICAgImNhbWVsbGlhIiAgICAgICA9PiAiZGVmYXVsdCIsCiAgICAgICAgICAgICAgICAgImNhcGllbmciICAgICAgICA9PiAiZGVmYXVsdCIsCiAgICAgICAgICAgICAgICAgImNtcyIgICAgICAgICAgICA9PiAiZGVmYXVsdCIsCiAgICAgICAgICAgICAgICAgImdtcCIgICAgICAgICAgICA9PiAiZGVmYXVsdCIsCiAgICAgICAgICAgICAgICAgImpwYWtlIiAgICAgICAgICA9PiAiZXhwZXJpbWVudGFsIiwKICAgICAgICAgICAgICAgICAibWRjMiIgICAgICAgICAgID0+ICJkZWZhdWx0IiwKICAgICAgICAgICAgICAgICAibW9udGFzbSIgICAgICAgID0+ICJkZWZhdWx0IiwgIyBleHBsaWNpdCBvcHRpb24gaW4gMC45Ljggb25seSAoaW1wbGljaXRseSBlbmFibGVkIGluIDAuOS45KQogICAgICAgICAgICAgICAgICJyYzUiICAgICAgICAgICAgPT4gImRlZmF1bHQiLAogICAgICAgICAgICAgICAgICJyZmMzNzc5IiAgICAgICAgPT4gImRlZmF1bHQiLAogICAgICAgICAgICAgICAgICJzZWVkIiAgICAgICAgICAgPT4gImRlZmF1bHQiLAogICAgICAgICAgICAgICAgICJzaGFyZWQiICAgICAgICAgPT4gImRlZmF1bHQiLAogICAgICAgICAgICAgICAgICJ6bGliIiAgICAgICAgICAgPT4gImRlZmF1bHQiLAogICAgICAgICAgICAgICAgICJ6bGliLWR5bmFtaWMiICAgPT4gImRlZmF1bHQiCiAgICAgICAgICAgICAgICk7Cm15IEBleHBlcmltZW50YWwgPSAoKTsKCiMgVGhpcyBpcyB3aGF0ICRkZXBmbGFncyB3aWxsIGxvb2sgbGlrZSB3aXRoIHRoZSBhYm92ZSBkZWZhdWx0cwojICh3ZSBuZWVkIHRoaXMgdG8gc2VlIGlmIHdlIHNob3VsZCBhZHZpc2UgdGhlIHVzZXIgdG8gcnVuICJtYWtlIGRlcGVuZCIpOgpteSAkZGVmYXVsdF9kZXBmbGFncyA9ICIgLURPUEVOU1NMX05PX0NBTUVMTElBIC1ET1BFTlNTTF9OT19DQVBJRU5HIC1ET1BFTlNTTF9OT19DTVMgLURPUEVOU1NMX05PX0dNUCAtRE9QRU5TU0xfTk9fSlBBS0UgLURPUEVOU1NMX05PX01EQzIgLURPUEVOU1NMX05PX1JDNSAtRE9QRU5TU0xfTk9fUkZDMzc3OSAtRE9QRU5TU0xfTk9fU0VFRCI7CgoKIyBFeHBsaWNpdCAibm8tLi4uIiBvcHRpb25zIHdpbGwgYmUgY29sbGVjdGVkIGluICVkaXNhYmxlZCBhbG9uZyB3aXRoIHRoZSBkZWZhdWx0cy4KIyBUbyByZW1vdmUgc29tZXRoaW5nIGZyb20gJWRpc2FibGVkLCB1c2UgImVuYWJsZS1mb28iICh1bmxlc3MgaXQncyBleHBlcmltZW50YWwpLgojIEZvciBzeW1tZXRyeSwgImRpc2FibGUtZm9vIiBpcyBhIHN5bm9ueW0gZm9yICJuby1mb28iLgoKIyBGb3IgZmVhdHVyZXMgY2FsbGVkICJleHBlcmltZW50YWwiIGhlcmUsIGEgbW9yZSBleHBsaWNpdCAiZXhwZXJpbWVudGFsLWZvbyIgaXMgbmVlZGVkIHRvIGVuYWJsZS4KIyBXZSB3aWxsIGNvbGxlY3Qgc3VjaCByZXF1ZXN0cyBpbiBAZXhwZXJpbWVudGFsLgojIFRvIGF2b2lkIGFjY2lkZW50YWwgdXNlIG9mIGV4cGVyaW1lbnRhbCBmZWF0dXJlcywgYXBwbGljYXRpb25zIHdpbGwgaGF2ZSB0byB1c2UgLURPUEVOU1NMX0VYUEVSSU1FTlRBTF9GT08uCgoKbXkgJG5vX3NzZTI9MDsKCiZ1c2FnZSBpZiAoJCNBUkdWIDwgMCk7CgpteSAkZmxhZ3M7Cm15ICRkZXBmbGFnczsKbXkgJG9wZW5zc2xfZXhwZXJpbWVudGFsX2RlZmluZXM7Cm15ICRvcGVuc3NsX2FsZ29yaXRobV9kZWZpbmVzOwpteSAkb3BlbnNzbF90aHJlYWRfZGVmaW5lczsKbXkgJG9wZW5zc2xfc3lzX2RlZmluZXM9IiI7Cm15ICRvcGVuc3NsX290aGVyX2RlZmluZXM7Cm15ICRsaWJzOwpteSAkbGlia3JiNT0iIjsKbXkgJHRhcmdldDsKbXkgJG9wdGlvbnM7Cm15ICRzeW1saW5rOwpteSAkbWFrZV9kZXBlbmQ9MDsKbXkgJXdpdGhhcmdzPSgpOwoKbXkgQGFyZ3Zjb3B5PUBBUkdWOwpteSAkYXJndnN0cmluZz0iIjsKbXkgJGFyZ3ZfdW5wcm9jZXNzZWQ9MTsKCndoaWxlKCRhcmd2X3VucHJvY2Vzc2VkKQoJewoJJGZsYWdzPSIiOwoJJGRlcGZsYWdzPSIiOwoJJG9wZW5zc2xfZXhwZXJpbWVudGFsX2RlZmluZXM9IiI7Cgkkb3BlbnNzbF9hbGdvcml0aG1fZGVmaW5lcz0iIjsKCSRvcGVuc3NsX3RocmVhZF9kZWZpbmVzPSIiOwoJJG9wZW5zc2xfc3lzX2RlZmluZXM9IiI7Cgkkb3BlbnNzbF9vdGhlcl9kZWZpbmVzPSIiOwoJJGxpYnM9IiI7CgkkdGFyZ2V0PSIiOwoJJG9wdGlvbnM9IiI7Cgkkc3ltbGluaz0xOwoKCSRhcmd2X3VucHJvY2Vzc2VkPTA7CgkkYXJndnN0cmluZz1qb2luKCcgJyxAYXJndmNvcHkpOwoKUFJPQ0VTU19BUkdTOgoJZm9yZWFjaCAoQGFyZ3Zjb3B5KQoJCXsKCQlzIC9eLW5vLS9uby0vOyAjIHNvbWUgcGVvcGxlIGp1c3QgY2FuJ3QgcmVhZCB0aGUgaW5zdHJ1Y3Rpb25zCgoJCSMgcmV3cml0ZSBzb21lIG9wdGlvbnMgaW4gImVuYWJsZS0uLi4iIGZvcm0KCQlzIC9eLT8tP3NoYXJlZCQvZW5hYmxlLXNoYXJlZC87CgkJcyAvXnRocmVhZHMkL2VuYWJsZS10aHJlYWRzLzsKCQlzIC9eemxpYiQvZW5hYmxlLXpsaWIvOwoJCXMgL156bGliLWR5bmFtaWMkL2VuYWJsZS16bGliLWR5bmFtaWMvOwoKCQlpZiAoL15uby0oLispJC8gfHwgL15kaXNhYmxlLSguKykkLykKCQkJewoJCQlpZiAoISgkZGlzYWJsZWR7JDF9IGVxICJleHBlcmltZW50YWwiKSkKCQkJCXsKCQkJCWlmICgkMSBlcSAic3NsIikKCQkJCQl7CgkJCQkJJGRpc2FibGVkeyJzc2wyIn0gPSAib3B0aW9uKHNzbCkiOwoJCQkJCSRkaXNhYmxlZHsic3NsMyJ9ID0gIm9wdGlvbihzc2wpIjsKCQkJCQl9CgkJCQllbHNpZiAoJDEgZXEgInRscyIpCgkJCQkJewoJCQkJCSRkaXNhYmxlZHsidGxzMSJ9ID0gIm9wdGlvbih0bHMpIgoJCQkJCX0KCQkJCWVsc2UKCQkJCQl7CgkJCQkJJGRpc2FibGVkeyQxfSA9ICJvcHRpb24iOwoJCQkJCX0KCQkJCX0KCQkJfQkJCQoJCWVsc2lmICgvXmVuYWJsZS0oLispJC8gfHwgL15leHBlcmltZW50YWwtKC4rKSQvKQoJCQl7CgkJCW15ICRhbGdvID0gJDE7CgkJCWlmICgkZGlzYWJsZWR7JGFsZ299IGVxICJleHBlcmltZW50YWwiKQoJCQkJewoJCQkJZGllICJZb3UgYXJlIHJlcXVlc3RpbmcgYW4gZXhwZXJpbWVudGFsIGZlYXR1cmU7IHBsZWFzZSBzYXkgJ2V4cGVyaW1lbnRhbC0kYWxnbycgaWYgeW91IGFyZSBzdXJlXG4iCgkJCQkJdW5sZXNzICgvXmV4cGVyaW1lbnRhbC0vKTsKCQkJCXB1c2ggQGV4cGVyaW1lbnRhbCwgJGFsZ287CgkJCQl9CgkJCWRlbGV0ZSAkZGlzYWJsZWR7JGFsZ299OwoKCQkJJHRocmVhZHMgPSAxIGlmICgkYWxnbyBlcSAidGhyZWFkcyIpOwoJCQl9CgkJZWxzaWYgKC9eLS10ZXN0LXNhbml0eSQvKQoJCQl7CgkJCWV4aXQoJnRlc3Rfc2FuaXR5KCkpOwoJCQl9CgkJZWxzaWYgKC9ecmVjb25maWd1cmUvIHx8IC9ecmVjb25mLykKCQkJewoJCQlpZiAob3BlbihJTiwiPCRNYWtlZmlsZSIpKQoJCQkJewoJCQkJd2hpbGUgKDxJTj4pCgkJCQkJewoJCQkJCWNob21wOwoJCQkJCWlmICgvXkNPTkZJR1VSRV9BUkdTPSguKikvKQoJCQkJCQl7CgkJCQkJCSRhcmd2c3RyaW5nPSQxOwoJCQkJCQlAYXJndmNvcHk9c3BsaXQoJyAnLCRhcmd2c3RyaW5nKTsKCQkJCQkJZGllICJJbmNvcnJlY3QgZGF0YSB0byByZWNvbmZpZ3VyZSwgcGxlYXNlIGRvIGEgbm9ybWFsIGNvbmZpZ3VyYXRpb25cbiIKCQkJCQkJCWlmIChncmVwKC9ecmVjb25mLyxAYXJndmNvcHkpKTsKCQkJCQkJcHJpbnQgIlJlY29uZmlndXJpbmcgd2l0aDogJGFyZ3ZzdHJpbmdcbiI7CgkJCQkJCSRhcmd2X3VucHJvY2Vzc2VkPTE7CgkJCQkJCWNsb3NlKElOKTsKCQkJCQkJbGFzdCBQUk9DRVNTX0FSR1M7CgkJCQkJCX0KCQkJCQl9CgkJCQljbG9zZShJTik7CgkJCQl9CgkJCWRpZSAiSW5zdWZmaWNpZW50IGRhdGEgdG8gcmVjb25maWd1cmUsIHBsZWFzZSBkbyBhIG5vcm1hbCBjb25maWd1cmF0aW9uXG4iOwoJCQl9CgkJZWxzaWYgKC9eMzg2JC8pCgkJCXsgJHByb2Nlc3Nvcj0zODY7IH0KCQllbHNpZiAoL15maXBzJC8pCgkJCXsKCQkJJGZpcHM9MTsKCQkgICAgICAgIH0KCQllbHNpZiAoL15yc2FyZWYkLykKCQkJewoJCQkjIE5vIFJTQXJlZiBzdXBwb3J0IGFueSBtb3JlIHNpbmNlIGl0J3Mgbm90IG5lZWRlZC4KCQkJIyBUaGUgY2hlY2sgZm9yIHRoZSBvcHRpb24gaXMgdGhlcmUgc28gc2NyaXB0cyBhcmVuJ3QKCQkJIyBicm9rZW4KCQkJfQoJCWVsc2lmICgvXm5vZmlwc2NhbmlzdGVyY2hlY2skLykKCQkJewoJCQkkZmlwcyA9IDE7CgkJCSRub2ZpcHNjYW5pc3RlcmNoZWNrID0gMTsKCQkJfQoJCWVsc2lmICgvXmZpcHNjYW5pc3RlcmJ1aWxkJC8pCgkJCXsKCQkJJGZpcHMgPSAxOwoJCQkkbm9maXBzY2FuaXN0ZXJjaGVjayA9IDE7CgkJCSRmaXBzbGliZGlyPSIiOwoJCQkkZmlwc2NhbmlzdGVyaW50ZXJuYWw9InkiOwoJCQl9CgkJZWxzaWYgKC9eZmlwc2RzbyQvKQoJCQl7CgkJCSRmaXBzID0gMTsKCQkJJG5vZmlwc2NhbmlzdGVyY2hlY2sgPSAxOwoJCQkkZmlwc2xpYmRpcj0iIjsKCQkJJGZpcHNjYW5pc3RlcmludGVybmFsPSJ5IjsKCQkJJGZpcHNkc28gPSAxOwoJCQl9CgkJZWxzaWYgKC9eWy0rXS8pCgkJCXsKCQkJaWYgKC9eLVtsTF0oLiopJC8pCgkJCQl7CgkJCQkkbGlicy49JF8uIiAiOwoJCQkJfQoJCQllbHNpZiAoL14tW14tXS8gb3IgL15cKy8pCgkJCQl7CgkJCQkkZmxhZ3MuPSRfLiIgIjsKCQkJCX0KCQkJZWxzaWYgKC9eLS1wcmVmaXg9KC4qKSQvKQoJCQkJewoJCQkJJHByZWZpeD0kMTsKCQkJCX0KCQkJZWxzaWYgKC9eLS1vcGVuc3NsZGlyPSguKikkLykKCQkJCXsKCQkJCSRvcGVuc3NsZGlyPSQxOwoJCQkJfQoJCQllbHNpZiAoL14tLWluc3RhbGwucHJlZml4PSguKikkLykKCQkJCXsKCQkJCSRpbnN0YWxsX3ByZWZpeD0kMTsKCQkJCX0KCQkJZWxzaWYgKC9eLS13aXRoLWtyYjUtKGRpcnxsaWJ8aW5jbHVkZXxmbGF2b3IpPSguKikkLykKCQkJCXsKCQkJCSR3aXRoYXJnc3sia3JiNS0iLiQxfT0kMjsKCQkJCX0KCQkJZWxzaWYgKC9eLS13aXRoLXpsaWItbGliPSguKikkLykKCQkJCXsKCQkJCSR3aXRoYXJnc3siemxpYi1saWIifT0kMTsKCQkJCX0KCQkJZWxzaWYgKC9eLS13aXRoLXpsaWItaW5jbHVkZT0oLiopJC8pCgkJCQl7CgkJCQkkd2l0aGFyZ3N7InpsaWItaW5jbHVkZSJ9PSItSSQxIjsKCQkJCX0KCQkJZWxzaWYgKC9eLS13aXRoLWZpcHNsaWJkaXI9KC4qKSQvKQoJCQkJewoJCQkJJGZpcHNsaWJkaXI9IiQxLyI7CgkJCQl9CgkJCWVsc2lmICgvXi0td2l0aC1iYXNlYWRkcj0oLiopJC8pCgkJCQl7CgkJCQkkYmFzZWFkZHI9IiQxIjsKCQkJCX0KCQkJZWxzZQoJCQkJewoJCQkJcHJpbnQgU1RERVJSICR1c2FnZTsKCQkJCWV4aXQoMSk7CgkJCQl9CgkJCX0KCQllbHNpZiAoJF8gPX4gL14oW146XSspOiguKykkLykKCQkJewoJCQlldmFsICJcJHRhYmxle1wkMX0gPSBcIiQyXCIiOyAjIGFsbG93ICR4eHggY29uc3RydWN0cyBpbiB0aGUgc3RyaW5nCgkJCSR0YXJnZXQ9JDE7CgkJCX0KCQllbHNlCgkJCXsKCQkJZGllICJ0YXJnZXQgYWxyZWFkeSBkZWZpbmVkIC0gJHRhcmdldCAob2ZmZW5kaW5nIGFyZzogJF8pXG4iIGlmICgkdGFyZ2V0IG5lICIiKTsKCQkJJHRhcmdldD0kXzsKCQkJfQoKCQl1bmxlc3MgKCRfIGVxICR0YXJnZXQgfHwgL15uby0vIHx8IC9eZGlzYWJsZS0vKQoJCQl7CgkJCSMgIm5vLS4uLiIgZm9sbG93cyBsYXRlciBhZnRlciBpbXBsaWVkIGRpc2FjdGl2YXRpb25zCgkJCSMgaGF2ZSBiZWVuIGRlcml2ZWQuICAoRG9uJ3QgdGFrZSB0aGlzIHRvbyBzZXJvaXVzbHksCgkJCSMgd2UgcmVhbGx5IG9ubHkgd3JpdGUgT1BUSU9OUyB0byB0aGUgTWFrZWZpbGUgb3V0IG9mCgkJCSMgbm9zdGFsZ2lhLikKCgkJCWlmICgkb3B0aW9ucyBlcSAiIikKCQkJCXsgJG9wdGlvbnMgPSAkXzsgfQoJCQllbHNlCgkJCQl7ICRvcHRpb25zIC49ICIgIi4kXzsgfQoJCQl9CgkJfQoJfQoKCgppZiAoJHByb2Nlc3NvciBlcSAiMzg2IikKCXsKCSRkaXNhYmxlZHsic3NlMiJ9ID0gImZvcmNlZCI7Cgl9CgppZiAoIWRlZmluZWQoJHdpdGhhcmdzeyJrcmI1LWZsYXZvciJ9KSB8fCAkd2l0aGFyZ3N7ImtyYjUtZmxhdm9yIn0gZXEgIiIpCgl7CgkkZGlzYWJsZWR7ImtyYjUifSA9ICJrcmI1LWZsYXZvciBub3Qgc3BlY2lmaWVkIjsKCX0KCmlmICghZGVmaW5lZCgkZGlzYWJsZWR7InpsaWItZHluYW1pYyJ9KSkKCXsKCSMgInpsaWItZHluYW1pYyIgd2FzIHNwZWNpZmljYWxseSBlbmFibGVkLCBzbyBlbmFibGUgInpsaWIiCglkZWxldGUgJGRpc2FibGVkeyJ6bGliIn07Cgl9CgppZiAoZGVmaW5lZCgkZGlzYWJsZWR7InJpam5kYWVsIn0pKQoJewoJJGRpc2FibGVkeyJhZXMifSA9ICJmb3JjZWQiOwoJfQppZiAoZGVmaW5lZCgkZGlzYWJsZWR7ImRlcyJ9KSkKCXsKCSRkaXNhYmxlZHsibWRjMiJ9ID0gImZvcmNlZCI7Cgl9CmlmIChkZWZpbmVkKCRkaXNhYmxlZHsiZWMifSkpCgl7CgkkZGlzYWJsZWR7ImVjZHNhIn0gPSAiZm9yY2VkIjsKCSRkaXNhYmxlZHsiZWNkaCJ9ID0gImZvcmNlZCI7Cgl9CgojIFNTTCAyLjAgcmVxdWlyZXMgTUQ1IGFuZCBSU0EKaWYgKGRlZmluZWQoJGRpc2FibGVkeyJtZDUifSkgfHwgZGVmaW5lZCgkZGlzYWJsZWR7InJzYSJ9KSkKCXsKCSRkaXNhYmxlZHsic3NsMiJ9ID0gImZvcmNlZCI7Cgl9CgojIFNTTCAzLjAgYW5kIFRMUyByZXF1aXJlcyBNRDUgYW5kIFNIQSBhbmQgZWl0aGVyIFJTQSBvciBEU0ErREgKaWYgKGRlZmluZWQoJGRpc2FibGVkeyJtZDUifSkgfHwgZGVmaW5lZCgkZGlzYWJsZWR7InNoYSJ9KQogICAgfHwgKGRlZmluZWQoJGRpc2FibGVkeyJyc2EifSkKICAgICAgICAmJiAoZGVmaW5lZCgkZGlzYWJsZWR7ImRzYSJ9KSB8fCBkZWZpbmVkKCRkaXNhYmxlZHsiZGgifSkpKSkKCXsKCSRkaXNhYmxlZHsic3NsMyJ9ID0gImZvcmNlZCI7CgkkZGlzYWJsZWR7InRsczEifSA9ICJmb3JjZWQiOwoJfQoKaWYgKGRlZmluZWQoJGRpc2FibGVkeyJ0bHMxIn0pKQoJewoJJGRpc2FibGVkeyJ0bHNleHQifSA9ICJmb3JjZWQiOwoJfQoKaWYgKCR0YXJnZXQgZXEgIlRBQkxFIikgewoJZm9yZWFjaCAkdGFyZ2V0IChzb3J0IGtleXMgJXRhYmxlKSB7CgkJcHJpbnRfdGFibGVfZW50cnkoJHRhcmdldCk7Cgl9CglleGl0IDA7Cn0KCmlmICgkdGFyZ2V0IGVxICJMSVNUIikgewoJZm9yZWFjaCAoc29ydCBrZXlzICV0YWJsZSkgewoJCXByaW50OwoJCXByaW50ICJcbiI7Cgl9CglleGl0IDA7Cn0KCmlmICgkdGFyZ2V0ID1+IG0vXkN5Z1dpbjMyKC0uKikkLykgewoJJHRhcmdldCA9ICJDeWd3aW4iLiQxOwp9CgpwcmludCAiQ29uZmlndXJpbmcgZm9yICR0YXJnZXRcbiI7CgomdXNhZ2UgaWYgKCFkZWZpbmVkKCR0YWJsZXskdGFyZ2V0fSkpOwoKbXkgQGZpZWxkcyA9IHNwbGl0KC9ccyo6XHMqLywkdGFibGV7JHRhcmdldH0gLiAiOiIgeCAzMCAsIC0xKTsKbXkgJGNjID0gJGZpZWxkc1skaWR4X2NjXTsKbXkgJGNmbGFncyA9ICRmaWVsZHNbJGlkeF9jZmxhZ3NdOwpteSAkdW5pc3RkID0gJGZpZWxkc1skaWR4X3VuaXN0ZF07Cm15ICR0aHJlYWRfY2ZsYWcgPSAkZmllbGRzWyRpZHhfdGhyZWFkX2NmbGFnXTsKbXkgJHN5c19pZCA9ICRmaWVsZHNbJGlkeF9zeXNfaWRdOwpteSAkbGZsYWdzID0gJGZpZWxkc1skaWR4X2xmbGFnc107Cm15ICRibl9vcHMgPSAkZmllbGRzWyRpZHhfYm5fb3BzXTsKbXkgJGNwdWlkX29iaiA9ICRmaWVsZHNbJGlkeF9jcHVpZF9vYmpdOwpteSAkYm5fb2JqID0gJGZpZWxkc1skaWR4X2JuX29ial07Cm15ICRkZXNfb2JqID0gJGZpZWxkc1skaWR4X2Rlc19vYmpdOwpteSAkYWVzX29iaiA9ICRmaWVsZHNbJGlkeF9hZXNfb2JqXTsKbXkgJGJmX29iaiA9ICRmaWVsZHNbJGlkeF9iZl9vYmpdOwpteSAkbWQ1X29iaiA9ICRmaWVsZHNbJGlkeF9tZDVfb2JqXTsKbXkgJHNoYTFfb2JqID0gJGZpZWxkc1skaWR4X3NoYTFfb2JqXTsKbXkgJGNhc3Rfb2JqID0gJGZpZWxkc1skaWR4X2Nhc3Rfb2JqXTsKbXkgJHJjNF9vYmogPSAkZmllbGRzWyRpZHhfcmM0X29ial07Cm15ICRybWQxNjBfb2JqID0gJGZpZWxkc1skaWR4X3JtZDE2MF9vYmpdOwpteSAkcmM1X29iaiA9ICRmaWVsZHNbJGlkeF9yYzVfb2JqXTsKbXkgJGRzb19zY2hlbWUgPSAkZmllbGRzWyRpZHhfZHNvX3NjaGVtZV07Cm15ICRzaGFyZWRfdGFyZ2V0ID0gJGZpZWxkc1skaWR4X3NoYXJlZF90YXJnZXRdOwpteSAkc2hhcmVkX2NmbGFnID0gJGZpZWxkc1skaWR4X3NoYXJlZF9jZmxhZ107Cm15ICRzaGFyZWRfbGRmbGFnID0gJGZpZWxkc1skaWR4X3NoYXJlZF9sZGZsYWddOwpteSAkc2hhcmVkX2V4dGVuc2lvbiA9ICRmaWVsZHNbJGlkeF9zaGFyZWRfZXh0ZW5zaW9uXTsKbXkgJHJhbmxpYiA9ICRmaWVsZHNbJGlkeF9yYW5saWJdOwpteSAkYXJmbGFncyA9ICRmaWVsZHNbJGlkeF9hcmZsYWdzXTsKCmlmICgkZmlwcykKCXsKCWRlbGV0ZSAkZGlzYWJsZWR7InNoYXJlZCJ9IGlmICgkZGlzYWJsZWR7InNoYXJlZCJ9IGVxICJkZWZhdWx0Iik7CgkkZGlzYWJsZWR7ImFzbSJ9PSJmb3JjZWQiCgkJaWYgKCR0YXJnZXQgIX4gIlZDXC0uKiIgJiYKCQkgICAgIiRjcHVpZF9vYmo6JGJuX29iajokYWVzX29iajokZGVzX29iajokc2hhMV9vYmoiIGVxICI6Ojo6Iik7Cgl9Cgpmb3JlYWNoIChzb3J0IEBleHBlcmltZW50YWwpCgl7CglteSAkQUxHTzsKCSgkQUxHTyA9ICRfKSA9fiB0ci9bYS16XS9bQS1aXS87CgoJIyBvcGVuc3NsY29uZi5oIHdpbGwgc2V0IE9QRU5TU0xfTk9fLi4uIHVubGVzcyBPUEVOU1NMX0VYUEVSSU1FTlRBTF8uLi4gaXMgZGVmaW5lZAoJJG9wZW5zc2xfZXhwZXJpbWVudGFsX2RlZmluZXMgLj0gIiNkZWZpbmUgT1BFTlNTTF9OT18kQUxHT1xuIjsKCSRjZmxhZ3MgLj0gIiAtRE9QRU5TU0xfRVhQRVJJTUVOVEFMXyRBTEdPIjsKCX0KCmZvcmVhY2ggKHNvcnQgKGtleXMgJWRpc2FibGVkKSkKCXsKCSRvcHRpb25zIC49ICIgbm8tJF8iOwoKCXByaW50ZiAiICAgIG5vLSUtMTJzICUtMTBzIiwgJF8sICJbJGRpc2FibGVkeyRffV0iOwoKCWlmICgvXmRzbyQvKQoJCXsgJG5vX2RzbyA9IDE7IH0KCWVsc2lmICgvXnRocmVhZHMkLykKCQl7ICRub190aHJlYWRzID0gMTsgfQoJZWxzaWYgKC9ec2hhcmVkJC8pCgkJeyAkbm9fc2hhcmVkID0gMTsgfQoJZWxzaWYgKC9eemxpYiQvKQoJCXsgJHpsaWIgPSAwOyB9CgllbHNpZiAoL15tb250YXNtJC8pCgkJeyAkbW9udGFzbSA9IDA7IH0KCWVsc2lmICgvXnN0YXRpYy1lbmdpbmUkLykKCQl7IH0KCWVsc2lmICgvXnpsaWItZHluYW1pYyQvKQoJCXsgfQoJZWxzaWYgKC9ec3ltbGlua3MkLykKCQl7ICRzeW1saW5rID0gMDsgfQoJZWxzaWYgKC9ec3NlMiQvKQoJCXsgJG5vX3NzZTIgPSAxOyB9CgllbHNlCgkJewoJCW15ICgkQUxHTywgJGFsZ28pOwoJCSgkQUxHTyA9ICRhbGdvID0gJF8pID1+IHRyL1thLXpdL1tBLVpdLzsKCgkJaWYgKC9eYXNtJC8gfHwgL15lcnIkLyB8fCAvXmh3JC8gfHwgL15ody0vKQoJCQl7CgkJCSRvcGVuc3NsX290aGVyX2RlZmluZXMgLj0gIiNkZWZpbmUgT1BFTlNTTF9OT18kQUxHT1xuIjsKCQkJcHJpbnQgIiBPUEVOU1NMX05PXyRBTEdPIjsKCQkKCQkJaWYgKC9eZXJyJC8pCXsgJGZsYWdzIC49ICItRE9QRU5TU0xfTk9fRVJSICI7IH0KCQkJZWxzaWYgKC9eYXNtJC8pCXsgJG5vX2FzbSA9IDE7IH0KCQkJfQoJCWVsc2UKCQkJewoJCQkkb3BlbnNzbF9hbGdvcml0aG1fZGVmaW5lcyAuPSAiI2RlZmluZSBPUEVOU1NMX05PXyRBTEdPXG4iOwoJCQlwcmludCAiIE9QRU5TU0xfTk9fJEFMR08iOwoKCQkJaWYgKC9ea3JiNSQvKQoJCQkJeyAkbm9fa3JiNSA9IDE7IH0KCQkJZWxzZQoJCQkJewoJCQkJcHVzaCBAc2tpcCwgJGFsZ287CgkJCQlwcmludCAiIChza2lwIGRpcikiOwoKCQkJCSRkZXBmbGFncyAuPSAiIC1ET1BFTlNTTF9OT18kQUxHTyI7CgkJCQl9CgkJCX0KCQl9CgoJcHJpbnQgIlxuIjsKCX0KCgpteSAkSXNNSzFNRj1zY2FsYXIgZ3JlcCAvXiR0YXJnZXQkLyxATUsxTUZfQnVpbGRzOwoKJElzTUsxTUY9MSBpZiAoJHRhcmdldCBlcSAibWluZ3ciICYmICReTyBuZSAiY3lnd2luIiAmJiAhaXNfbXN5cygpKTsKCiRub19zaGFyZWQgPSAwIGlmICgkZmlwc2RzbyAmJiAhJElzTUsxTUYpOwoKJGV4ZV9leHQ9Ii5leGUiIGlmICgkdGFyZ2V0IGVxICJDeWd3aW4iIHx8ICR0YXJnZXQgZXEgIkRKR1BQIiB8fCAkdGFyZ2V0IGVxICJtaW5ndyIpOwokZXhlX2V4dD0iLm5sbSIgaWYgKCR0YXJnZXQgPX4gL25ldHdhcmUvKTsKJGV4ZV9leHQ9Ii5wbSIgIGlmICgkdGFyZ2V0ID1+IC92b3MvKTsKaWYgKCRvcGVuc3NsZGlyIGVxICIiIGFuZCAkcHJlZml4IGVxICIiKQoJewoJaWYgKCRmaXBzKQoJCXsKCQkkb3BlbnNzbGRpcj0iL3Vzci9sb2NhbC9zc2wvZmlwcyI7CgkJfQoJZWxzZQoJCXsKCQkkb3BlbnNzbGRpcj0iL3Vzci9sb2NhbC9zc2wiOwoJCX0KCX0KJHByZWZpeD0kb3BlbnNzbGRpciBpZiAkcHJlZml4IGVxICIiOwoKJGRlZmF1bHRfcmFubGliPSAmd2hpY2goInJhbmxpYiIpIG9yICRkZWZhdWx0X3JhbmxpYj0idHJ1ZSI7CiRwZXJsPSRFTlZ7J1BFUkwnfSBvciAkcGVybD0md2hpY2goInBlcmw1Iikgb3IgJHBlcmw9JndoaWNoKCJwZXJsIikKICBvciAkcGVybD0icGVybCI7CgpjaG9wICRvcGVuc3NsZGlyIGlmICRvcGVuc3NsZGlyID1+IC9cLyQvOwpjaG9wICRwcmVmaXggaWYgJHByZWZpeCA9fiAvLlwvJC87Cgokb3BlbnNzbGRpcj0kcHJlZml4IC4gIi9zc2wiIGlmICRvcGVuc3NsZGlyIGVxICIiOwokb3BlbnNzbGRpcj0kcHJlZml4IC4gIi8iIC4gJG9wZW5zc2xkaXIgaWYgJG9wZW5zc2xkaXIgIX4gLyheXC98XlthLXpBLVpdOltcXFwvXSkvOwoKCnByaW50ICJJc01LMU1GPSRJc01LMU1GXG4iOwoKIyAnJScgaW4gJGxmbGFncyBpcyB1c2VkIHRvIHNwbGl0IGZsYWdzIHRvICJwcmUtIiBhbmQgcG9zdC1mbGFncwpteSAoJHByZWxmbGFncywkcG9zdGxmbGFncyk9c3BsaXQoJyUnLCRsZmxhZ3MpOwppZiAoZGVmaW5lZCgkcG9zdGxmbGFncykpCXsgJGxmbGFncz0kcG9zdGxmbGFnczsgIH0KZWxzZQkJCQl7ICRsZmxhZ3M9JHByZWxmbGFnczsgdW5kZWYgJHByZWxmbGFnczsgfQoKbXkgJG5vX3NoYXJlZF93YXJuPTA7Cm15ICRub191c2VyX2NmbGFncz0wOwoKaWYgKCRmbGFncyBuZSAiIikJeyAkY2ZsYWdzPSIkZmxhZ3MkY2ZsYWdzIjsgfQplbHNlCQkJeyAkbm9fdXNlcl9jZmxhZ3M9MTsgICAgICAgfQoKIyBLZXJiZXJvcyBzZXR0aW5ncy4gIFRoZSBmbGF2b3IgbXVzdCBiZSBwcm92aWRlZCBmcm9tIG91dHNpZGUsIGVpdGhlciB0aHJvdWdoCiMgdGhlIHNjcmlwdCAiY29uZmlnIiBvciBtYW51YWxseS4KaWYgKCEkbm9fa3JiNSkKCXsKCW15ICgkbHJlc29sdiwgJGxwYXRoLCAkbGV4dCk7CglpZiAoJHdpdGhhcmdzeyJrcmI1LWZsYXZvciJ9ID1+IC9eW0hoXWVpbWRhbCQvKQoJCXsKCQlkaWUgIlNvcnJ5LCBIZWltZGFsIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkXG4iOwoJCX0KCSMjIyMjIEhBQ0sgdG8gZm9yY2UgdXNlIG9mIEhlaW1kYWwuCgkjIyMjIyBXQVJOSU5HOiBTaW5jZSB3ZSBkb24ndCByZWFsbHkgaGF2ZSBhZGVxdWF0ZSBzdXBwb3J0IGZvciBIZWltZGFsLAoJIyMjIyMgICAgICAgICAgdXNpbmcgdGhpcyB3aWxsIGJyZWFrIHRoZSBidWlsZC4gIFlvdSdsbCBoYXZlIHRvIG1ha2UKCSMjIyMjICAgICAgICAgIGNoYW5nZXMgdG8gdGhlIHNvdXJjZSwgYW5kIGlmIHlvdSBkbywgcGxlYXNlIHNlbmQKCSMjIyMjICAgICAgICAgIHBhdGNoZXMgdG8gb3BlbnNzbC1kZXZAb3BlbnNzbC5vcmcKCWlmICgkd2l0aGFyZ3N7ImtyYjUtZmxhdm9yIn0gPX4gL15mb3JjZS1bSGhdZWltZGFsJC8pCgkJewoJCXdhcm4gIkhlaW1kYWwgaXNuJ3QgcmVhbGx5IHN1cHBvcnRlZC4gIFlvdXIgYnVpbGQgV0lMTCBicmVha1xuIjsKCQl3YXJuICJJZiB5b3UgZml4IHRoZSBwcm9ibGVtcywgcGxlYXNlIHNlbmQgYSBwYXRjaCB0byBvcGVuc3NsLWRldlxAb3BlbnNzbC5vcmdcbiI7CgkJJHdpdGhhcmdzeyJrcmI1LWRpciJ9ID0gIi91c3IvaGVpbWRhbCIKCQkJaWYgJHdpdGhhcmdzeyJrcmI1LWRpciJ9IGVxICIiOwoJCSR3aXRoYXJnc3sia3JiNS1saWIifSA9ICItTCIuJHdpdGhhcmdzeyJrcmI1LWRpciJ9LgoJCQkiL2xpYiAtbGdzc2FwaSAtbGtyYjUgLWxjb21fZXJyIgoJCQlpZiAkd2l0aGFyZ3N7ImtyYjUtbGliIn0gZXEgIiIgJiYgISRJc01LMU1GOwoJCSRjZmxhZ3M9Ii1ES1JCNV9IRUlNREFMICRjZmxhZ3MiOwoJCX0KCWlmICgkd2l0aGFyZ3N7ImtyYjUtZmxhdm9yIn0gPX4gL15bTW1dW0lpXVtUdF0vKQoJCXsKCQkkd2l0aGFyZ3N7ImtyYjUtZGlyIn0gPSAiL3Vzci9rZXJiZXJvcyIKCQkJaWYgJHdpdGhhcmdzeyJrcmI1LWRpciJ9IGVxICIiOwoJCSR3aXRoYXJnc3sia3JiNS1saWIifSA9ICItTCIuJHdpdGhhcmdzeyJrcmI1LWRpciJ9LgoJCQkiL2xpYiAtbGdzc2FwaV9rcmI1IC1sa3JiNSAtbGNvbV9lcnIgLWxrNWNyeXB0byIKCQkJaWYgJHdpdGhhcmdzeyJrcmI1LWxpYiJ9IGVxICIiICYmICEkSXNNSzFNRjsKCQkkY2ZsYWdzPSItREtSQjVfTUlUICRjZmxhZ3MiOwoJCSR3aXRoYXJnc3sia3JiNS1mbGF2b3IifSA9fiBzL15bTW1dW0lpXVtUdF1bLl8tXSovLzsKCQlpZiAoJHdpdGhhcmdzeyJrcmI1LWZsYXZvciJ9ID1+IC9eMVsuXy1dKlswMV0vKQoJCQl7CgkJCSRjZmxhZ3M9Ii1ES1JCNV9NSVRfT0xEMTEgJGNmbGFncyI7CgkJCX0KCQl9CglMUkVTT0xWOgoJZm9yZWFjaCAkbHBhdGggKCIvbGliIiwgIi91c3IvbGliIikKCQl7CgkJZm9yZWFjaCAkbGV4dCAoImEiLCAic28iKQoJCQl7CgkJCSRscmVzb2x2ID0gIiRscGF0aC9saWJyZXNvbHYuJGxleHQiOwoJCQlsYXN0IExSRVNPTFYJaWYgKC1yICIkbHJlc29sdiIpOwoJCQkkbHJlc29sdiA9ICIiOwoJCQl9CgkJfQoJJHdpdGhhcmdzeyJrcmI1LWxpYiJ9IC49ICIgLWxyZXNvbHYiCgkJaWYgKCIkbHJlc29sdiIgbmUgIiIpOwoJJHdpdGhhcmdzeyJrcmI1LWluY2x1ZGUifSA9ICItSSIuJHdpdGhhcmdzeyJrcmI1LWRpciJ9LiIvaW5jbHVkZSIKCQlpZiAkd2l0aGFyZ3N7ImtyYjUtaW5jbHVkZSJ9IGVxICIiICYmCgkJICAgJHdpdGhhcmdzeyJrcmI1LWRpciJ9IG5lICIiOwoJfQoKIyBUaGUgRFNPIGNvZGUgY3VycmVudGx5IGFsd2F5cyBpbXBsZW1lbnRzIGFsbCBmdW5jdGlvbnMgc28gdGhhdCBubwojIGFwcGxpY2F0aW9ucyB3aWxsIGhhdmUgdG8gd29ycnkgYWJvdXQgdGhhdCBmcm9tIGEgY29tcGlsYXRpb24gcG9pbnQKIyBvZiB2aWV3LiBIb3dldmVyLCB0aGUgIm1ldGhvZCJzIG1heSByZXR1cm4gemVybyB1bmxlc3MgdGhhdCBwbGF0Zm9ybQojIGhhcyBzdXBwb3J0IGNvbXBpbGVkIGluIGZvciB0aGVtLiBDdXJyZW50bHkgZWFjaCBtZXRob2QgaXMgZW5hYmxlZAojIGJ5IGEgZGVmaW5lICJEU09fPG5hbWU+IiAuLi4gd2UgdHJhbnNsYXRlIHRoZSAiZHNvX3NjaGVtZSIgY29uZmlnCiMgc3RyaW5nIGVudHJ5IGludG8gdXNpbmcgdGhlIGZvbGxvd2luZyBsb2dpYzsKbXkgJGRzb19jZmxhZ3M7CmlmICghJG5vX2RzbyAmJiAkZHNvX3NjaGVtZSBuZSAiIikKCXsKCSRkc29fc2NoZW1lID1+IHRyL1thLXpdL1tBLVpdLzsKCWlmICgkZHNvX3NjaGVtZSBlcSAiRExGQ04iKQoJCXsKCQkkZHNvX2NmbGFncyA9ICItRERTT19ETEZDTiAtREhBVkVfRExGQ05fSCI7CgkJfQoJZWxzaWYgKCRkc29fc2NoZW1lIGVxICJETEZDTl9OT19IIikKCQl7CgkJJGRzb19jZmxhZ3MgPSAiLUREU09fRExGQ04iOwoJCX0KCWVsc2UKCQl7CgkJJGRzb19jZmxhZ3MgPSAiLUREU09fJGRzb19zY2hlbWUiOwoJCX0KCSRjZmxhZ3MgPSAiJGRzb19jZmxhZ3MgJGNmbGFncyI7Cgl9CgpteSAkdGhyZWFkX2NmbGFnczsKbXkgJHRocmVhZF9kZWZpbmVzOwppZiAoJHRocmVhZF9jZmxhZyBuZSAiKHVua25vd24pIiAmJiAhJG5vX3RocmVhZHMpCgl7CgkjIElmIHdlIGtub3cgaG93IHRvIGRvIGl0LCBzdXBwb3J0IHRocmVhZHMgYnkgZGVmYXVsdC4KCSR0aHJlYWRzID0gMTsKCX0KaWYgKCR0aHJlYWRfY2ZsYWcgZXEgIih1bmtub3duKSIgJiYgJHRocmVhZHMpCgl7CgkjIElmIHRoZSB1c2VyIGFza2VkIGZvciAidGhyZWFkcyIsIFtzXWhlIGlzIGFsc28gZXhwZWN0ZWQgdG8KCSMgcHJvdmlkZSBhbnkgc3lzdGVtLWRlcGVuZGVudCBjb21waWxlciBvcHRpb25zIHRoYXQgYXJlCgkjIG5lY2Vzc2FyeS4KCWlmICgkbm9fdXNlcl9jZmxhZ3MpCgkJewoJCXByaW50ICJZb3UgYXNrZWQgZm9yIG11bHRpLXRocmVhZGluZyBzdXBwb3J0LCBidXQgZGlkbid0XG4iOwoJCXByaW50ICJwcm92aWRlIGFueSBzeXN0ZW0tc3BlY2lmaWMgY29tcGlsZXIgb3B0aW9uc1xuIjsKCQlleGl0KDEpOwoJCX0KCSR0aHJlYWRfY2ZsYWdzPSItRE9QRU5TU0xfVEhSRUFEUyAkY2ZsYWdzIiA7CgkkdGhyZWFkX2RlZmluZXMgLj0gIiNkZWZpbmUgT1BFTlNTTF9USFJFQURTXG4iOwoJfQplbHNlCgl7CgkkdGhyZWFkX2NmbGFncz0iLURPUEVOU1NMX1RIUkVBRFMgJHRocmVhZF9jZmxhZyAkY2ZsYWdzIjsKCSR0aHJlYWRfZGVmaW5lcyAuPSAiI2RlZmluZSBPUEVOU1NMX1RIUkVBRFNcbiI7CiMJbXkgJGRlZjsKIwlmb3JlYWNoICRkZWYgKHNwbGl0ICcgJywkdGhyZWFkX2NmbGFnKQojCQl7CiMJCWlmICgkZGVmID1+IHMvXi1ELy8gJiYgJGRlZiAhfiAvXl8vKQojCQkJewojCQkJJHRocmVhZF9kZWZpbmVzIC49ICIjZGVmaW5lICRkZWZcbiI7CiMJCQl9CiMJCX0KCX0JCgokbGZsYWdzPSIkbGlicyRsZmxhZ3MiIGlmICgkbGlicyBuZSAiIik7CgppZiAoJG5vX2FzbSkKCXsKCSRjcHVpZF9vYmo9JGJuX29iaj0kZGVzX29iaj0kYWVzX29iaj0kYmZfb2JqPSRjYXN0X29iaj0kcmM0X29iaj0kcmM1X29iaj0iIjsKCSRzaGExX29iaj0kbWQ1X29iaj0kcm1kMTYwX29iaj0iIjsKCSRjZmxhZ3M9fnMvXC1EW0JMXV9FTkRJQU4vLwkJaWYgKCRmaXBzKTsKCSR0aHJlYWRfY2ZsYWdzPX5zL1wtRFtCTF1fRU5ESUFOLy8JaWYgKCRmaXBzKTsKCX0KaWYgKCRtb250YXNtKQoJewoJJGJuX29iaiA9fiBzL01BWUJFLU1PODYtL21vODYtLzsKCX0KZWxzZQoJewoJJGJuX29iaiA9fiBzL01BWUJFLU1PODYtW2Etei5dKi8vOwoJfQoKaWYgKCEkbm9fc2hhcmVkKQoJewoJJGNhc3Rfb2JqPSIiOwkjIENBU1QgYXNzZW1ibGVyIGlzIG5vdCBQSUMKCX0KCmlmICgkdGhyZWFkcykKCXsKCSRjZmxhZ3M9JHRocmVhZF9jZmxhZ3M7Cgkkb3BlbnNzbF90aHJlYWRfZGVmaW5lcyAuPSAkdGhyZWFkX2RlZmluZXM7Cgl9CgppZiAoJHpsaWIpCgl7CgkkY2ZsYWdzID0gIi1EWkxJQiAkY2ZsYWdzIjsKCWlmIChkZWZpbmVkKCRkaXNhYmxlZHsiemxpYi1keW5hbWljIn0pKQoJCXsKCQkkbGZsYWdzID0gIiRsZmxhZ3MgLWx6IjsKCQl9CgllbHNlCgkJewoJCSRjZmxhZ3MgPSAiLURaTElCX1NIQVJFRCAkY2ZsYWdzIjsKCQl9Cgl9CgojIFlvdSB3aWxsIGZpbmQgc2hsaWJfbWFyazEgYW5kIHNobGliX21hcmsyIGV4cGxhaW5lZCBpbiBNYWtlZmlsZS5vcmcKbXkgJHNoYXJlZF9tYXJrID0gIiI7CmlmICgkc2hhcmVkX3RhcmdldCBlcSAiIikKCXsKCSRub19zaGFyZWRfd2FybiA9IDEgaWYgISRub19zaGFyZWQgJiYgISRmaXBzOwoJJG5vX3NoYXJlZCA9IDE7Cgl9CmlmICghJG5vX3NoYXJlZCkKCXsKCWlmICgkc2hhcmVkX2NmbGFnIG5lICIiKQoJCXsKCQkkY2ZsYWdzID0gIiRzaGFyZWRfY2ZsYWcgLURPUEVOU1NMX1BJQyAkY2ZsYWdzIjsKCQl9Cgl9CgppZiAoISRJc01LMU1GKQoJewoJaWYgKCRub19zaGFyZWQpCgkJewoJCSRvcGVuc3NsX290aGVyX2RlZmluZXMuPSIjZGVmaW5lIE9QRU5TU0xfTk9fRFlOQU1JQ19FTkdJTkVcbiI7CgkJfQoJZWxzZQoJCXsKCQkkb3BlbnNzbF9vdGhlcl9kZWZpbmVzLj0iI2RlZmluZSBPUEVOU1NMX05PX1NUQVRJQ19FTkdJTkVcbiI7CgkJfQoJfQoKJGNwdWlkX29iai49IiB1cGxpbmsubyB1cGxpbmstY29mLm8iIGlmICgkY2ZsYWdzID1+IC9cLURPUEVOU1NMX1VTRV9BUFBMSU5LLyk7CgojCiMgUGxhdGZvcm0gZml4LXVwcwojCmlmICgkdGFyZ2V0ID1+IC9cLWljYyQvKQkjIEludGVsIEMgY29tcGlsZXIKCXsKCW15ICRpY2N2ZXI9MDsKCWlmIChvcGVuKEZELCIkY2MgLVYgMj4mMSB8IikpCgkJewoJCXdoaWxlKDxGRD4pIHsgJGljY3Zlcj0kMSBpZiAoL1ZlcnNpb24gKFswLTldKylcLi8pOyB9CgkJY2xvc2UoRkQpOwoJCX0KCWlmICgkaWNjdmVyPj04KQoJCXsKCQkjIEVsaW1pbmF0ZSB1bm5lY2Vzc2FyeSBkZXBlbmRlbmN5IGZyb20gbGliaXJjLmEuIFRoaXMgaXMKCQkjIGVzc2VudGlhbCBmb3Igc2hhcmVkIGxpYnJhcnkgc3VwcG9ydCwgYXMgb3RoZXJ3aXNlCgkJIyBhcHBzL29wZW5zc2wgY2FuIGVuZCB1cCBpbiBlbmRsZXNzIGxvb3AgdXBvbiBzdGFydHVwLi4uCgkJJGNmbGFncy49IiAtRG1lbWNweT1fX2J1aWx0aW5fbWVtY3B5IC1EbWVtc2V0PV9fYnVpbHRpbl9tZW1zZXQiOwoJCX0KCWlmICgkaWNjdmVyPj05KQoJCXsKCQkkY2ZsYWdzLj0iIC1pLXN0YXRpYyI7CgkJJGNmbGFncz1+cy9cLW5vX2NwcHJ0Ly1uby1jcHBydC87CgkJfQoJaWYgKCRpY2N2ZXI+PTEwKQoJCXsKCQkkY2ZsYWdzPX5zL1wtaVwtc3RhdGljLy1zdGF0aWMtaW50ZWwvOwoJCX0KCX0KCiMgVW5saWtlIG90aGVyIE9TZXMgKGxpa2UgU29sYXJpcywgTGludXgsIFRydTY0LCBJUklYKSBCU0QgcnVuLXRpbWUKIyBsaW5rZXJzICh0ZXN0ZWQgT3BlbkJTRCwgTmV0QlNEIGFuZCBGcmVlQlNEKSAiZGVtYW5kIiBSUEFUSCBzZXQgb24KIyAuc28gb2JqZWN0cy4gQXBwYXJlbnRseSBhcHBsaWNhdGlvbiBSUEFUSCBpcyBub3QgZ2xvYmFsIGFuZCBkb2VzCiMgbm90IGFwcGx5IHRvIC5zbyBsaW5rZWQgd2l0aCBvdGhlciAuc28uIFByb2JsZW0gbWFuaWZlc3RzIGl0c2VsZgojIHdoZW4gbGlic3NsLnNvIGZhaWxzIHRvIGxvYWQgbGliY3J5cHRvLnNvLiBPbmUgY2FuIGFyZ3VlIHRoYXQgd2UKIyBzaG91bGQgZW5ncmF2ZSB0aGlzIGludG8gTWFrZWZpbGUuc2hhcmVkIHJ1bGVzIG9yIGludG8gQlNELSogY29uZmlnCiMgbGluZXMgYWJvdmUuIE1lYW53aGlsZSBsZXQncyB0cnkgdG8gYmUgY2F1dGlvdXMgYW5kIHBhc3MgLXJwYXRoIHRvCiMgbGlua2VyIG9ubHkgd2hlbiAtLXByZWZpeCBpcyBub3QgL3Vzci4KaWYgKCR0YXJnZXQgPX4gL15CU0RcLS8pCgl7Cgkkc2hhcmVkX2xkZmxhZy49IiAtV2wsLXJwYXRoLFwkKExJQlJQQVRIKSIgaWYgKCRwcmVmaXggIX4gbXxeL3VzclsvXSokfCk7Cgl9CgppZiAoJHN5c19pZCBuZSAiIikKCXsKCSMkY2ZsYWdzPSItRE9QRU5TU0xfU1lTTkFNRV8kc3lzX2lkICRjZmxhZ3MiOwoJJG9wZW5zc2xfc3lzX2RlZmluZXM9IiNkZWZpbmUgT1BFTlNTTF9TWVNOQU1FXyRzeXNfaWRcbiI7Cgl9CgppZiAoJHJhbmxpYiBlcSAiIikKCXsKCSRyYW5saWIgPSAkZGVmYXVsdF9yYW5saWI7Cgl9CgojbXkgKCRibjEpPXNwbGl0KC9ccysvLCRibl9vYmopOwojJGJuMSA9ICIiIHVubGVzcyBkZWZpbmVkICRibjE7CiMkYm4xPSRibl9hc20gdW5sZXNzICgkYm4xID1+IC9cLm8kLyk7CiMkYm5fb2JqPSIkYm4xIjsKCiRjcHVpZF9vYmo9IiIgaWYgKCRwcm9jZXNzb3IgZXEgIjM4NiIpOwoKJGJuX29iaiA9ICRibl9hc20gdW5sZXNzICRibl9vYmogbmUgIiI7CiMgYm44NiogaXMgdGhlIG9ubHkgb25lIGltcGxlbWVudGluZyBibl8qX3BhcnRfd29yZHMKJGNmbGFncy49IiAtRE9QRU5TU0xfQk5fQVNNX1BBUlRfV09SRFMiIGlmICgkYm5fb2JqID1+IC9ibjg2Lyk7CiRjZmxhZ3MuPSIgLURPUEVOU1NMX0lBMzJfU1NFMiIgaWYgKCEkbm9fc3NlMiAmJiAkYm5fb2JqID1+IC9ibjg2Lyk7CgokY2ZsYWdzLj0iIC1ET1BFTlNTTF9CTl9BU01fTU9OVCIgaWYgKCRibl9vYmogPX4gL1wtbW9udHxtbzg2XC0vKTsKCmlmICgkZmlwcykKCXsKCSRvcGVuc3NsX290aGVyX2RlZmluZXMuPSIjZGVmaW5lIE9QRU5TU0xfRklQU1xuIjsKCX0KCiRkZXNfb2JqPSRkZXNfZW5jCXVubGVzcyAoJGRlc19vYmogPX4gL1wubyQvKTsKJGJmX29iaj0kYmZfZW5jCQl1bmxlc3MgKCRiZl9vYmogPX4gL1wubyQvKTsKJGNhc3Rfb2JqPSRjYXN0X2VuYwl1bmxlc3MgKCRjYXN0X29iaiA9fiAvXC5vJC8pOwokcmM0X29iaj0kcmM0X2VuYwl1bmxlc3MgKCRyYzRfb2JqID1+IC9cLm8kLyk7CiRyYzVfb2JqPSRyYzVfZW5jCXVubGVzcyAoJHJjNV9vYmogPX4gL1wubyQvKTsKaWYgKCRzaGExX29iaiA9fiAvXC5vJC8pCgl7CiMJJHNoYTFfb2JqPSRzaGExX2VuYzsKCSRjZmxhZ3MuPSIgLURTSEExX0FTTSIgICBpZiAoJHNoYTFfb2JqID1+IC9zeDg2LyB8fCAkc2hhMV9vYmogPX4gL3NoYTEvKTsKCSRjZmxhZ3MuPSIgLURTSEEyNTZfQVNNIiBpZiAoJHNoYTFfb2JqID1+IC9zaGEyNTYvKTsKCSRjZmxhZ3MuPSIgLURTSEE1MTJfQVNNIiBpZiAoJHNoYTFfb2JqID1+IC9zaGE1MTIvKTsKCWlmICgkc2hhMV9vYmogPX4gL3NzZTIvKQoJICAgIHsJaWYgKCRub19zc2UyKQoJCXsgICAkc2hhMV9vYmogPX4gcy9cUypzc2UyXFMrLy87ICAgICAgICB9CgkJZWxzaWYgKCRjZmxhZ3MgIX4gL09QRU5TU0xfSUEzMl9TU0UyLykKCQl7ICAgJGNmbGFncy49IiAtRE9QRU5TU0xfSUEzMl9TU0UyIjsgICAgfQoJICAgIH0KCX0KaWYgKCRtZDVfb2JqID1+IC9cLm8kLykKCXsKIwkkbWQ1X29iaj0kbWQ1X2VuYzsKCSRjZmxhZ3MuPSIgLURNRDVfQVNNIjsKCX0KaWYgKCRybWQxNjBfb2JqID1+IC9cLm8kLykKCXsKIwkkcm1kMTYwX29iaj0kcm1kMTYwX2VuYzsKCSRjZmxhZ3MuPSIgLURSTUQxNjBfQVNNIjsKCX0KaWYgKCRhZXNfb2JqID1+IC9cLm8kLykKCXsKCSRjZmxhZ3MuPSIgLURBRVNfQVNNIjsKCX0KZWxzZQl7CgkkYWVzX29iaj0kYWVzX2VuYzsKCX0KCiMgIlN0cmluZ2lmeSIgdGhlIEMgZmxhZ3Mgc3RyaW5nLiAgVGhpcyBwZXJtaXRzIGl0IHRvIGJlIG1hZGUgcGFydCBvZiBhIHN0cmluZwojIGFuZCB3b3JrcyBhcyB3ZWxsIG9uIGNvbW1hbmQgbGluZXMuCiRjZmxhZ3MgPX4gcy8oW1xcXCJdKS9cXFwxL2c7CgpteSAkdmVyc2lvbiA9ICJ1bmtub3duIjsKbXkgJHZlcnNpb25fbnVtID0gInVua25vd24iOwpteSAkbWFqb3IgPSAidW5rbm93biI7Cm15ICRtaW5vciA9ICJ1bmtub3duIjsKbXkgJHNobGliX3ZlcnNpb25fbnVtYmVyID0gInVua25vd24iOwpteSAkc2hsaWJfdmVyc2lvbl9oaXN0b3J5ID0gInVua25vd24iOwpteSAkc2hsaWJfbWFqb3IgPSAidW5rbm93biI7Cm15ICRzaGxpYl9taW5vciA9ICJ1bmtub3duIjsKCm9wZW4oSU4sJzxjcnlwdG8vb3BlbnNzbHYuaCcpIHx8IGRpZSAidW5hYmxlIHRvIHJlYWQgb3BlbnNzbHYuaDokIVxuIjsKd2hpbGUgKDxJTj4pCgl7CgkkdmVyc2lvbj0kMSBpZiAvT1BFTlNTTC5WRVJTSU9OLlRFWFQuKk9wZW5TU0wgKFxTKykgLzsKCSR2ZXJzaW9uX251bT0kMSBpZiAvT1BFTlNTTC5WRVJTSU9OLk5VTUJFUi4qMHgoXFMrKS87Cgkkc2hsaWJfdmVyc2lvbl9udW1iZXI9JDEgaWYgL1NITElCX1ZFUlNJT05fTlVNQkVSICoiKFteIl0rKSIvOwoJJHNobGliX3ZlcnNpb25faGlzdG9yeT0kMSBpZiAvU0hMSUJfVkVSU0lPTl9ISVNUT1JZICoiKFteIl0qKSIvOwoJfQpjbG9zZShJTik7CmlmICgkc2hsaWJfdmVyc2lvbl9oaXN0b3J5IG5lICIiKSB7ICRzaGxpYl92ZXJzaW9uX2hpc3RvcnkgLj0gIjoiOyB9CgppZiAoJHZlcnNpb24gPX4gLyheWzAtOV0qKVwuKFswLTlcLl0qKS8pCgl7CgkkbWFqb3I9JDE7CgkkbWlub3I9JDI7Cgl9CgppZiAoJHNobGliX3ZlcnNpb25fbnVtYmVyID1+IC8oXlswLTldKilcLihbMC05XC5dKikvKQoJewoJJHNobGliX21ham9yPSQxOwoJJHNobGliX21pbm9yPSQyOwoJfQoKb3BlbihJTiwnPE1ha2VmaWxlLm9yZycpIHx8IGRpZSAidW5hYmxlIHRvIHJlYWQgTWFrZWZpbGUub3JnOiQhXG4iOwp1bmxpbmsoIiRNYWtlZmlsZS5uZXciKSB8fCBkaWUgInVuYWJsZSB0byByZW1vdmUgb2xkICRNYWtlZmlsZS5uZXc6JCFcbiIgaWYgLWUgIiRNYWtlZmlsZS5uZXciOwpvcGVuKE9VVCwiPiRNYWtlZmlsZS5uZXciKSB8fCBkaWUgInVuYWJsZSB0byBjcmVhdGUgJE1ha2VmaWxlLm5ldzokIVxuIjsKcHJpbnQgT1VUICIjIyMgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgZnJvbSBNYWtlZmlsZS5vcmcgYnkgQ29uZmlndXJlLnBsLlxuXG4iOwpteSAkc2RpcnM9MDsKd2hpbGUgKDxJTj4pCgl7CgljaG9tcDsKCSRzZGlycyA9IDEgaWYgL15TRElSUz0vOwoJaWYgKCRzZGlycykgewoJCW15ICRkaXI7CgkJZm9yZWFjaCAkZGlyIChAc2tpcCkgewoJCQlzLyhccykkZGlyXHMvJDEvOwoJCQlzL1xzJGRpciQvLzsKCQkJfQoJCX0KCSRzZGlycyA9IDAgdW5sZXNzIC9cXCQvOwoJcy9eVkVSU0lPTj0uKi9WRVJTSU9OPSR2ZXJzaW9uLzsKCXMvXk1BSk9SPS4qL01BSk9SPSRtYWpvci87CglzL15NSU5PUj0uKi9NSU5PUj0kbWlub3IvOwoJcy9eU0hMSUJfVkVSU0lPTl9OVU1CRVI9LiovU0hMSUJfVkVSU0lPTl9OVU1CRVI9JHNobGliX3ZlcnNpb25fbnVtYmVyLzsKCXMvXlNITElCX1ZFUlNJT05fSElTVE9SWT0uKi9TSExJQl9WRVJTSU9OX0hJU1RPUlk9JHNobGliX3ZlcnNpb25faGlzdG9yeS87CglzL15TSExJQl9NQUpPUj0uKi9TSExJQl9NQUpPUj0kc2hsaWJfbWFqb3IvOwoJcy9eU0hMSUJfTUlOT1I9LiovU0hMSUJfTUlOT1I9JHNobGliX21pbm9yLzsKCXMvXlNITElCX0VYVD0uKi9TSExJQl9FWFQ9JHNoYXJlZF9leHRlbnNpb24vOwoJcy9eSU5TVEFMTFRPUD0uKiQvSU5TVEFMTFRPUD0kcHJlZml4LzsKCXMvXk9QRU5TU0xESVI9LiokL09QRU5TU0xESVI9JG9wZW5zc2xkaXIvOwoJcy9eSU5TVEFMTF9QUkVGSVg9LiokL0lOU1RBTExfUFJFRklYPSRpbnN0YWxsX3ByZWZpeC87CglzL15QTEFURk9STT0uKiQvUExBVEZPUk09JHRhcmdldC87CglzL15PUFRJT05TPS4qJC9PUFRJT05TPSRvcHRpb25zLzsKCXMvXkNPTkZJR1VSRV9BUkdTPS4qJC9DT05GSUdVUkVfQVJHUz0kYXJndnN0cmluZy87CglzL15DQz0uKiQvQ0M9ICRjYy87CglzL15NQUtFREVQUFJPRz0uKiQvTUFLRURFUFBST0c9ICRjYy8gaWYgJGNjIGVxICJnY2MiOwoJcy9eQ0ZMQUc9LiokL0NGTEFHPSAkY2ZsYWdzLzsKCXMvXkRFUEZMQUc9LiokL0RFUEZMQUc9JGRlcGZsYWdzLzsKCXMvXlBFWF9MSUJTPS4qJC9QRVhfTElCUz0gJHByZWxmbGFncy87CglzL15FWF9MSUJTPS4qJC9FWF9MSUJTPSAkbGZsYWdzLzsKCXMvXkVYRV9FWFQ9LiokL0VYRV9FWFQ9ICRleGVfZXh0LzsKCXMvXkNQVUlEX09CSj0uKiQvQ1BVSURfT0JKPSAkY3B1aWRfb2JqLzsKCXMvXkJOX0FTTT0uKiQvQk5fQVNNPSAkYm5fb2JqLzsKCXMvXkRFU19FTkM9LiokL0RFU19FTkM9ICRkZXNfb2JqLzsKCXMvXkFFU19BU01fT0JKPS4qJC9BRVNfQVNNX09CSj0gJGFlc19vYmovOwoJcy9eQkZfRU5DPS4qJC9CRl9FTkM9ICRiZl9vYmovOwoJcy9eQ0FTVF9FTkM9LiokL0NBU1RfRU5DPSAkY2FzdF9vYmovOwoJcy9eUkM0X0VOQz0uKiQvUkM0X0VOQz0gJHJjNF9vYmovOwoJcy9eUkM1X0VOQz0uKiQvUkM1X0VOQz0gJHJjNV9vYmovOwoJcy9eTUQ1X0FTTV9PQko9LiokL01ENV9BU01fT0JKPSAkbWQ1X29iai87CglzL15TSEExX0FTTV9PQko9LiokL1NIQTFfQVNNX09CSj0gJHNoYTFfb2JqLzsKCXMvXlJNRDE2MF9BU01fT0JKPS4qJC9STUQxNjBfQVNNX09CSj0gJHJtZDE2MF9vYmovOwoJcy9eUFJPQ0VTU09SPS4qL1BST0NFU1NPUj0gJHByb2Nlc3Nvci87CglzL15SQU5MSUI9LiovUkFOTElCPSAkRU5WeydSQU5MSUInfS87CglzL15BUl9CSU49LiovQVJfQklOPSAkRU5WeydBUid9LzsKCXMvXkFSRkxBR1M9LiovQVJGTEFHUz0gJGFyZmxhZ3MvOwoJcy9eUEVSTD0uKi9QRVJMPSAkcGVybC87CglzL15LUkI1X0lOQ0xVREVTPS4qL0tSQjVfSU5DTFVERVM9JHdpdGhhcmdzeyJrcmI1LWluY2x1ZGUifS87CglzL15MSUJLUkI1PS4qL0xJQktSQjU9JHdpdGhhcmdzeyJrcmI1LWxpYiJ9LzsKCXMvXkxJQlpMSUI9LiovTElCWkxJQj0kd2l0aGFyZ3N7InpsaWItbGliIn0vOwoJcy9eWkxJQl9JTkNMVURFPS4qL1pMSUJfSU5DTFVERT0kd2l0aGFyZ3N7InpsaWItaW5jbHVkZSJ9LzsKCXMvXkZJUFNMSUJESVI9LiovRklQU0xJQkRJUj0kZmlwc2xpYmRpci87CglpZiAoJGZpcHNkc28pCgkJewoJCXMvXkZJUFNDQU5MSUI9LiovRklQU0NBTkxJQj1saWJmaXBzLzsKCQlzL15TSEFSRURfRklQUz0uKi9TSEFSRURfRklQUz1saWJmaXBzXCQoU0hMSUJfRVhUKS87CgkJcy9eU0hMSUJESVJTPS4qL1NITElCRElSUz0gY3J5cHRvIHNzbCBmaXBzLzsKCQl9CgllbHNlCgkJewoJCXMvXkZJUFNDQU5MSUI9LiovRklQU0NBTkxJQj1saWJjcnlwdG8vIGlmICRmaXBzOwoJCXMvXlNIQVJFRF9GSVBTPS4qL1NIQVJFRF9GSVBTPS87CgkJcy9eU0hMSUJESVJTPS4qL1NITElCRElSUz0gY3J5cHRvIHNzbC87CgkJfQoJcy9eRklQU0NBTklTVEVSSU5URVJOQUw9LiovRklQU0NBTklTVEVSSU5URVJOQUw9JGZpcHNjYW5pc3RlcmludGVybmFsLzsKCXMvXkJBU0VBRERSPS4qL0JBU0VBRERSPSRiYXNlYWRkci87CglzL15TSExJQl9UQVJHRVQ9LiovU0hMSUJfVEFSR0VUPSRzaGFyZWRfdGFyZ2V0LzsKCXMvXlNITElCX01BUks9LiovU0hMSUJfTUFSSz0kc2hhcmVkX21hcmsvOwoJcy9eU0hBUkVEX0xJQlM9LiovU0hBUkVEX0xJQlM9XCQoU0hBUkVEX0ZJUFMpIFwkKFNIQVJFRF9DUllQVE8pIFwkKFNIQVJFRF9TU0wpLyBpZiAoISRub19zaGFyZWQpOwoJaWYgKCRzaGFyZWRfZXh0ZW5zaW9uIG5lICIiICYmICRzaGFyZWRfZXh0ZW5zaW9uID1+IC9eXC5zKFtvbF0pXC5bXlwuXSokLykKCQl7CgkJbXkgJHNvdG1wID0gJDE7CgkJcy9eU0hBUkVEX0xJQlNfTElOS19FWFRTPS4qL1NIQVJFRF9MSUJTX0xJTktfRVhUUz0ucyRzb3RtcC87CgkJfQoJZWxzaWYgKCRzaGFyZWRfZXh0ZW5zaW9uIG5lICIiICYmICRzaGFyZWRfZXh0ZW5zaW9uID1+IC9eXC5bXlwuXSpcLmR5bGliJC8pCgkJewoJCXMvXlNIQVJFRF9MSUJTX0xJTktfRVhUUz0uKi9TSEFSRURfTElCU19MSU5LX0VYVFM9LmR5bGliLzsKCQl9CgllbHNpZiAoJHNoYXJlZF9leHRlbnNpb24gbmUgIiIgJiYgJHNoYXJlZF9leHRlbnNpb24gPX4gL15cLnMoW29sXSlcLlteXC5dKlwuW15cLl0qJC8pCgkJewoJCW15ICRzb3RtcCA9ICQxOwoJCXMvXlNIQVJFRF9MSUJTX0xJTktfRVhUUz0uKi9TSEFSRURfTElCU19MSU5LX0VYVFM9LnMkc290bXAuXCQoU0hMSUJfTUFKT1IpIC5zJHNvdG1wLzsKCQl9CgllbHNpZiAoJHNoYXJlZF9leHRlbnNpb24gbmUgIiIgJiYgJHNoYXJlZF9leHRlbnNpb24gPX4gL15cLlteXC5dKlwuW15cLl0qXC5keWxpYiQvKQoJCXsKCQlzL15TSEFSRURfTElCU19MSU5LX0VYVFM9LiovU0hBUkVEX0xJQlNfTElOS19FWFRTPS5cJChTSExJQl9NQUpPUikuZHlsaWIgLmR5bGliLzsKCQl9CglzL15TSEFSRURfTERGTEFHUz0uKi9TSEFSRURfTERGTEFHUz0kc2hhcmVkX2xkZmxhZy87CglwcmludCBPVVQgJF8uIlxuIjsKCX0KY2xvc2UoSU4pOwpjbG9zZShPVVQpOwpyZW5hbWUoJE1ha2VmaWxlLCIkTWFrZWZpbGUuYmFrIikgfHwgZGllICJ1bmFibGUgdG8gcmVuYW1lICRNYWtlZmlsZVxuIiBpZiAtZSAkTWFrZWZpbGU7CnJlbmFtZSgiJE1ha2VmaWxlLm5ldyIsJE1ha2VmaWxlKSB8fCBkaWUgInVuYWJsZSB0byByZW5hbWUgJE1ha2VmaWxlLm5ld1xuIjsKCnByaW50ICJDQyAgICAgICAgICAgID0kY2NcbiI7CnByaW50ICJDRkxBRyAgICAgICAgID0kY2ZsYWdzXG4iOwpwcmludCAiRVhfTElCUyAgICAgICA9JGxmbGFnc1xuIjsKcHJpbnQgIkNQVUlEX09CSiAgICAgPSRjcHVpZF9vYmpcbiI7CnByaW50ICJCTl9BU00gICAgICAgID0kYm5fb2JqXG4iOwpwcmludCAiREVTX0VOQyAgICAgICA9JGRlc19vYmpcbiI7CnByaW50ICJBRVNfQVNNX09CSiAgID0kYWVzX29ialxuIjsKcHJpbnQgIkJGX0VOQyAgICAgICAgPSRiZl9vYmpcbiI7CnByaW50ICJDQVNUX0VOQyAgICAgID0kY2FzdF9vYmpcbiI7CnByaW50ICJSQzRfRU5DICAgICAgID0kcmM0X29ialxuIjsKcHJpbnQgIlJDNV9FTkMgICAgICAgPSRyYzVfb2JqXG4iOwpwcmludCAiTUQ1X09CSl9BU00gICA9JG1kNV9vYmpcbiI7CnByaW50ICJTSEExX09CSl9BU00gID0kc2hhMV9vYmpcbiI7CnByaW50ICJSTUQxNjBfT0JKX0FTTT0kcm1kMTYwX29ialxuIjsKcHJpbnQgIlBST0NFU1NPUiAgICAgPSRwcm9jZXNzb3JcbiI7CnByaW50ICJBUl9CSU4gICAgICAgID0kRU5WeydBUid9XG4iOyAKcHJpbnQgIlJBTkxJQiAgICAgICAgPSRFTlZ7J1JBTkxJQid9XG4iOwpwcmludCAiQVJGTEFHUyAgICAgICA9JGFyZmxhZ3NcbiI7CnByaW50ICJQRVJMICAgICAgICAgID0kcGVybFxuIjsKcHJpbnQgIktSQjVfSU5DTFVERVMgPSIsJHdpdGhhcmdzeyJrcmI1LWluY2x1ZGUifSwiXG4iCglpZiAkd2l0aGFyZ3N7ImtyYjUtaW5jbHVkZSJ9IG5lICIiOwoKbXkgJGRlc19wdHI9MDsKbXkgJGRlc19yaXNjMT0wOwpteSAkZGVzX3Jpc2MyPTA7Cm15ICRkZXNfdW5yb2xsPTA7Cm15ICRibl9sbD0wOwpteSAkZGVmX2ludD0yOwpteSAkcmM0X2ludD0kZGVmX2ludDsKbXkgJG1kMl9pbnQ9JGRlZl9pbnQ7Cm15ICRpZGVhX2ludD0kZGVmX2ludDsKbXkgJHJjMl9pbnQ9JGRlZl9pbnQ7Cm15ICRyYzRfaWR4PTA7Cm15ICRyYzRfY2h1bms9MDsKbXkgJGJmX3B0cj0wOwpteSBAdHlwZT0oImNoYXIiLCJzaG9ydCIsImludCIsImxvbmciKTsKbXkgKCRiNjRsLCRiNjQsJGIzMiwkYjE2LCRiOCk9KDAsMCwxLDAsMCk7Cm15ICRleHBvcnRfdmFyX2FzX2ZuPTA7CgpteSAkZGVzX2ludDsKCmZvcmVhY2ggKHNvcnQgc3BsaXQoL1xzKy8sJGJuX29wcykpCgl7CgkkZGVzX3B0cj0xIGlmIC9ERVNfUFRSLzsKCSRkZXNfcmlzYzE9MSBpZiAvREVTX1JJU0MxLzsKCSRkZXNfcmlzYzI9MSBpZiAvREVTX1JJU0MyLzsKCSRkZXNfdW5yb2xsPTEgaWYgL0RFU19VTlJPTEwvOwoJJGRlc19pbnQ9MSBpZiAvREVTX0lOVC87CgkkYm5fbGw9MSBpZiAvQk5fTExPTkcvOwoJJHJjNF9pbnQ9MCBpZiAvUkM0X0NIQVIvOwoJJHJjNF9pbnQ9MyBpZiAvUkM0X0xPTkcvOwoJJHJjNF9pZHg9MSBpZiAvUkM0X0lOREVYLzsKCSRyYzRfY2h1bms9MSBpZiAvUkM0X0NIVU5LLzsKCSRyYzRfY2h1bms9MiBpZiAvUkM0X0NIVU5LX0xMLzsKCSRtZDJfaW50PTAgaWYgL01EMl9DSEFSLzsKCSRtZDJfaW50PTMgaWYgL01EMl9MT05HLzsKCSRpZGVhX2ludD0xIGlmIC9JREVBX1NIT1JULzsKCSRpZGVhX2ludD0zIGlmIC9JREVBX0xPTkcvOwoJJHJjMl9pbnQ9MSBpZiAvUkMyX1NIT1JULzsKCSRyYzJfaW50PTMgaWYgL1JDMl9MT05HLzsKCSRiZl9wdHI9MSBpZiAkXyBlcSAiQkZfUFRSIjsKCSRiZl9wdHI9MiBpZiAkXyBlcSAiQkZfUFRSMiI7CgkoJGI2NGwsJGI2NCwkYjMyLCRiMTYsJGI4KT0oMCwxLDAsMCwwKSBpZiAvU0lYVFlfRk9VUl9CSVQvOwoJKCRiNjRsLCRiNjQsJGIzMiwkYjE2LCRiOCk9KDEsMCwwLDAsMCkgaWYgL1NJWFRZX0ZPVVJfQklUX0xPTkcvOwoJKCRiNjRsLCRiNjQsJGIzMiwkYjE2LCRiOCk9KDAsMCwxLDAsMCkgaWYgL1RISVJUWV9UV09fQklULzsKCSgkYjY0bCwkYjY0LCRiMzIsJGIxNiwkYjgpPSgwLDAsMCwxLDApIGlmIC9TSVhURUVOX0JJVC87CgkoJGI2NGwsJGI2NCwkYjMyLCRiMTYsJGI4KT0oMCwwLDAsMCwxKSBpZiAvRUlHSFRfQklULzsKCSRleHBvcnRfdmFyX2FzX2ZuPTEgaWYgL0VYUE9SVF9WQVJfQVNfRk4vOwoJfQoKb3BlbihJTiwnPGNyeXB0by9vcGVuc3NsY29uZi5oLmluJykgfHwgZGllICJ1bmFibGUgdG8gcmVhZCBjcnlwdG8vb3BlbnNzbGNvbmYuaC5pbjokIVxuIjsKdW5saW5rKCJjcnlwdG8vb3BlbnNzbGNvbmYuaC5uZXciKSB8fCBkaWUgInVuYWJsZSB0byByZW1vdmUgb2xkIGNyeXB0by9vcGVuc3NsY29uZi5oLm5ldzokIVxuIiBpZiAtZSAiY3J5cHRvL29wZW5zc2xjb25mLmgubmV3IjsKb3BlbihPVVQsJz5jcnlwdG8vb3BlbnNzbGNvbmYuaC5uZXcnKSB8fCBkaWUgInVuYWJsZSB0byBjcmVhdGUgY3J5cHRvL29wZW5zc2xjb25mLmgubmV3OiQhXG4iOwpwcmludCBPVVQgIi8qIG9wZW5zc2xjb25mLmggKi9cbiI7CnByaW50IE9VVCAiLyogV0FSTklORzogR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgZnJvbSBvcGVuc3NsY29uZi5oLmluIGJ5IENvbmZpZ3VyZS5wbC4gKi9cblxuIjsKCnByaW50IE9VVCAiLyogT3BlblNTTCB3YXMgY29uZmlndXJlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3B0aW9uczogKi9cbiI7Cm15ICRvcGVuc3NsX2FsZ29yaXRobV9kZWZpbmVzX3RyYW5zID0gJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXM7CiRvcGVuc3NsX2V4cGVyaW1lbnRhbF9kZWZpbmVzID1+IHMvXlxzKiNccypkZWZpbmVccytPUEVOU1NMX05PXyguKikvI2lmbmRlZiBPUEVOU1NMX0VYUEVSSU1FTlRBTF8kMVxuIyBpZm5kZWYgT1BFTlNTTF9OT18kMVxuIyAgZGVmaW5lIE9QRU5TU0xfTk9fJDFcbiMgZW5kaWZcbiNlbmRpZi9tZzsKJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXNfdHJhbnMgPX4gcy9eXHMqI1xzKmRlZmluZVxzK09QRU5TU0xfKC4qKS8jIGlmIGRlZmluZWQoT1BFTlNTTF8kMSkgXCZcJiAhZGVmaW5lZCgkMSlcbiMgIGRlZmluZSAkMVxuIyBlbmRpZi9tZzsKJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXMgPX4gcy9eXHMqI1xzKmRlZmluZVxzKyguKikvI2lmbmRlZiAkMVxuIyBkZWZpbmUgJDFcbiNlbmRpZi9tZzsKJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXMgPSAiICAgLyogbm8gY2lwaGVycyBleGNsdWRlZCAqL1xuIiBpZiAkb3BlbnNzbF9hbGdvcml0aG1fZGVmaW5lcyBlcSAiIjsKJG9wZW5zc2xfdGhyZWFkX2RlZmluZXMgPX4gcy9eXHMqI1xzKmRlZmluZVxzKyguKikvI2lmbmRlZiAkMVxuIyBkZWZpbmUgJDFcbiNlbmRpZi9tZzsKJG9wZW5zc2xfc3lzX2RlZmluZXMgPX4gcy9eXHMqI1xzKmRlZmluZVxzKyguKikvI2lmbmRlZiAkMVxuIyBkZWZpbmUgJDFcbiNlbmRpZi9tZzsKJG9wZW5zc2xfb3RoZXJfZGVmaW5lcyA9fiBzL15ccyojXHMqZGVmaW5lXHMrKC4qKS8jaWZuZGVmICQxXG4jIGRlZmluZSAkMVxuI2VuZGlmL21nOwpwcmludCBPVVQgJG9wZW5zc2xfc3lzX2RlZmluZXM7CnByaW50IE9VVCAiI2lmbmRlZiBPUEVOU1NMX0RPSU5HX01BS0VERVBFTkRcblxuIjsKcHJpbnQgT1VUICRvcGVuc3NsX2V4cGVyaW1lbnRhbF9kZWZpbmVzOwpwcmludCBPVVQgIlxuIjsKcHJpbnQgT1VUICRvcGVuc3NsX2FsZ29yaXRobV9kZWZpbmVzOwpwcmludCBPVVQgIlxuI2VuZGlmIC8qIE9QRU5TU0xfRE9JTkdfTUFLRURFUEVORCAqL1xuXG4iOwpwcmludCBPVVQgJG9wZW5zc2xfdGhyZWFkX2RlZmluZXM7CnByaW50IE9VVCAkb3BlbnNzbF9vdGhlcl9kZWZpbmVzLCJcbiI7CgpwcmludCBPVVQgIi8qIFRoZSBPUEVOU1NMX05PXyogbWFjcm9zIGFyZSBhbHNvIGRlZmluZWQgYXMgTk9fKiBpZiB0aGUgYXBwbGljYXRpb25cbiI7CnByaW50IE9VVCAiICAgYXNrcyBmb3IgaXQuICBUaGlzIGlzIGEgdHJhbnNpZW50IGZlYXR1cmUgdGhhdCBpcyBwcm92aWRlZCBmb3IgdGhvc2VcbiI7CnByaW50IE9VVCAiICAgd2hvIGhhdmVuJ3QgaGFkIHRoZSB0aW1lIHRvIGRvIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGluIHRoZWlyXG4iOwpwcmludCBPVVQgIiAgIGFwcGxpY2F0aW9ucy4gICovXG4iOwpwcmludCBPVVQgIiNpZmRlZiBPUEVOU1NMX0FMR09SSVRITV9ERUZJTkVTXG4iOwpwcmludCBPVVQgJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXNfdHJhbnM7CnByaW50IE9VVCAiI2VuZGlmXG5cbiI7CgpwcmludCBPVVQgIiNkZWZpbmUgT1BFTlNTTF9DUFVJRF9PQkpcblxuIiBpZiAoJGNwdWlkX29iaik7Cgp3aGlsZSAoPElOPikKCXsKCWlmCSgvXiNkZWZpbmVccytPUEVOU1NMRElSLykKCQl7IHByaW50IE9VVCAiI2RlZmluZSBPUEVOU1NMRElSIFwiJG9wZW5zc2xkaXJcIlxuIjsgfQoJZWxzaWYJKC9eI2RlZmluZVxzK0VOR0lORVNESVIvKQoJCXsgcHJpbnQgT1VUICIjZGVmaW5lIEVOR0lORVNESVIgXCIkcHJlZml4L2xpYi9lbmdpbmVzXCJcbiI7IH0KCWVsc2lmCSgvXiMoKGRlZmluZSl8KHVuZGVmKSlccytPUEVOU1NMX0VYUE9SVF9WQVJfQVNfRlVOQ1RJT04vKQoJCXsgcHJpbnRmIE9VVCAiI3VuZGVmIE9QRU5TU0xfRVhQT1JUX1ZBUl9BU19GVU5DVElPTlxuIgoJCQlpZiAkZXhwb3J0X3Zhcl9hc19mbjsKCQkgIHByaW50ZiBPVVQgIiMlcyBPUEVOU1NMX0VYUE9SVF9WQVJfQVNfRlVOQ1RJT05cbiIsCgkJCSgkZXhwb3J0X3Zhcl9hc19mbik/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYJKC9eI2RlZmluZVxzK09QRU5TU0xfVU5JU1RELykKCQl7CgkJJHVuaXN0ZCA9ICI8dW5pc3RkLmg+IiBpZiAkdW5pc3RkIGVxICIiOwoJCXByaW50IE9VVCAiI2RlZmluZSBPUEVOU1NMX1VOSVNURCAkdW5pc3RkXG4iOwoJCX0KCWVsc2lmCSgvXiMoKGRlZmluZSl8KHVuZGVmKSlccytTSVhUWV9GT1VSX0JJVF9MT05HLykKCQl7IHByaW50ZiBPVVQgIiMlcyBTSVhUWV9GT1VSX0JJVF9MT05HXG4iLCgkYjY0bCk/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYJKC9eIygoZGVmaW5lKXwodW5kZWYpKVxzK1NJWFRZX0ZPVVJfQklULykKCQl7IHByaW50ZiBPVVQgIiMlcyBTSVhUWV9GT1VSX0JJVFxuIiwoJGI2NCk/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYJKC9eIygoZGVmaW5lKXwodW5kZWYpKVxzK1RISVJUWV9UV09fQklULykKCQl7IHByaW50ZiBPVVQgIiMlcyBUSElSVFlfVFdPX0JJVFxuIiwoJGIzMik/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYJKC9eIygoZGVmaW5lKXwodW5kZWYpKVxzK1NJWFRFRU5fQklULykKCQl7IHByaW50ZiBPVVQgIiMlcyBTSVhURUVOX0JJVFxuIiwoJGIxNik/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYJKC9eIygoZGVmaW5lKXwodW5kZWYpKVxzK0VJR0hUX0JJVC8pCgkJeyBwcmludGYgT1VUICIjJXMgRUlHSFRfQklUXG4iLCgkYjgpPyJkZWZpbmUiOiJ1bmRlZiI7IH0KCWVsc2lmCSgvXiMoKGRlZmluZSl8KHVuZGVmKSlccytCTl9MTE9OR1xzKiQvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIEJOX0xMT05HXG4iLCgkYm5fbGwpPyJkZWZpbmUiOiJ1bmRlZiI7IH0KCWVsc2lmCSgvXlwjZGVmaW5lXHMrREVTX0xPTkdccysuKi8pCgkJeyBwcmludGYgT1VUICIjZGVmaW5lIERFU19MT05HIHVuc2lnbmVkICVzXG4iLAoJCQkoJGRlc19pbnQpPydpbnQnOidsb25nJzsgfQoJZWxzaWYJKC9eXCMoZGVmaW5lfHVuZGVmKVxzK0RFU19QVFIvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIERFU19QVFJcbiIsKCRkZXNfcHRyKT8nZGVmaW5lJzondW5kZWYnOyB9CgllbHNpZgkoL15cIyhkZWZpbmV8dW5kZWYpXHMrREVTX1JJU0MxLykKCQl7IHByaW50ZiBPVVQgIiMlcyBERVNfUklTQzFcbiIsKCRkZXNfcmlzYzEpPydkZWZpbmUnOid1bmRlZic7IH0KCWVsc2lmCSgvXlwjKGRlZmluZXx1bmRlZilccytERVNfUklTQzIvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIERFU19SSVNDMlxuIiwoJGRlc19yaXNjMik/J2RlZmluZSc6J3VuZGVmJzsgfQoJZWxzaWYJKC9eXCMoZGVmaW5lfHVuZGVmKVxzK0RFU19VTlJPTEwvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIERFU19VTlJPTExcbiIsKCRkZXNfdW5yb2xsKT8nZGVmaW5lJzondW5kZWYnOyB9CgllbHNpZgkoL14jZGVmaW5lXHMrUkM0X0lOVFxzLykKCQl7IHByaW50ZiBPVVQgIiNkZWZpbmUgUkM0X0lOVCB1bnNpZ25lZCAlc1xuIiwkdHlwZVskcmM0X2ludF07IH0KCWVsc2lmCSgvXiN1bmRlZlxzK1JDNF9DSFVOSy8pCgkJewoJCXByaW50ZiBPVVQgIiN1bmRlZiBSQzRfQ0hVTktcbiIgaWYgJHJjNF9jaHVuaz09MDsKCQlwcmludGYgT1VUICIjZGVmaW5lIFJDNF9DSFVOSyB1bnNpZ25lZCBsb25nXG4iIGlmICRyYzRfY2h1bms9PTE7CgkJcHJpbnRmIE9VVCAiI2RlZmluZSBSQzRfQ0hVTksgdW5zaWduZWQgbG9uZyBsb25nXG4iIGlmICRyYzRfY2h1bms9PTI7CgkJfQoJZWxzaWYJKC9eIygoZGVmaW5lKXwodW5kZWYpKVxzK1JDNF9JTkRFWC8pCgkJeyBwcmludGYgT1VUICIjJXMgUkM0X0lOREVYXG4iLCgkcmM0X2lkeCk/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYgKC9eIyhkZWZpbmV8dW5kZWYpXHMrSTM4Nl9PTkxZLykKCQl7IHByaW50ZiBPVVQgIiMlcyBJMzg2X09OTFlcbiIsICgkcHJvY2Vzc29yIGVxICIzODYiKT8KCQkJImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYJKC9eI2RlZmluZVxzK01EMl9JTlRccy8pCgkJeyBwcmludGYgT1VUICIjZGVmaW5lIE1EMl9JTlQgdW5zaWduZWQgJXNcbiIsJHR5cGVbJG1kMl9pbnRdOyB9CgllbHNpZgkoL14jZGVmaW5lXHMrSURFQV9JTlRccy8pCgkJe3ByaW50ZiBPVVQgIiNkZWZpbmUgSURFQV9JTlQgdW5zaWduZWQgJXNcbiIsJHR5cGVbJGlkZWFfaW50XTt9CgllbHNpZgkoL14jZGVmaW5lXHMrUkMyX0lOVFxzLykKCQl7cHJpbnRmIE9VVCAiI2RlZmluZSBSQzJfSU5UIHVuc2lnbmVkICVzXG4iLCR0eXBlWyRyYzJfaW50XTt9CgllbHNpZiAoL14jKGRlZmluZXx1bmRlZilccytCRl9QVFIvKQoJCXsKCQlwcmludGYgT1VUICIjdW5kZWYgQkZfUFRSXG4iIGlmICRiZl9wdHIgPT0gMDsKCQlwcmludGYgT1VUICIjZGVmaW5lIEJGX1BUUlxuIiBpZiAkYmZfcHRyID09IDE7CgkJcHJpbnRmIE9VVCAiI2RlZmluZSBCRl9QVFIyXG4iIGlmICRiZl9wdHIgPT0gMjsKCSAgICAgICAgfQoJZWxzZQoJCXsgcHJpbnQgT1VUICRfOyB9Cgl9CmNsb3NlKElOKTsKY2xvc2UoT1VUKTsKcmVuYW1lKCJjcnlwdG8vb3BlbnNzbGNvbmYuaCIsImNyeXB0by9vcGVuc3NsY29uZi5oLmJhayIpIHx8IGRpZSAidW5hYmxlIHRvIHJlbmFtZSBjcnlwdG8vb3BlbnNzbGNvbmYuaFxuIiBpZiAtZSAiY3J5cHRvL29wZW5zc2xjb25mLmgiOwpyZW5hbWUoImNyeXB0by9vcGVuc3NsY29uZi5oLm5ldyIsImNyeXB0by9vcGVuc3NsY29uZi5oIikgfHwgZGllICJ1bmFibGUgdG8gcmVuYW1lIGNyeXB0by9vcGVuc3NsY29uZi5oLm5ld1xuIjsKCgojIEZpeCB0aGUgZGF0ZQoKcHJpbnQgIlNJWFRZX0ZPVVJfQklUX0xPTkcgbW9kZVxuIiBpZiAkYjY0bDsKcHJpbnQgIlNJWFRZX0ZPVVJfQklUIG1vZGVcbiIgaWYgJGI2NDsKcHJpbnQgIlRISVJUWV9UV09fQklUIG1vZGVcbiIgaWYgJGIzMjsKcHJpbnQgIlNJWFRFRU5fQklUIG1vZGVcbiIgaWYgJGIxNjsKcHJpbnQgIkVJR0hUX0JJVCBtb2RlXG4iIGlmICRiODsKcHJpbnQgIkRFU19QVFIgdXNlZFxuIiBpZiAkZGVzX3B0cjsKcHJpbnQgIkRFU19SSVNDMSB1c2VkXG4iIGlmICRkZXNfcmlzYzE7CnByaW50ICJERVNfUklTQzIgdXNlZFxuIiBpZiAkZGVzX3Jpc2MyOwpwcmludCAiREVTX1VOUk9MTCB1c2VkXG4iIGlmICRkZXNfdW5yb2xsOwpwcmludCAiREVTX0lOVCB1c2VkXG4iIGlmICRkZXNfaW50OwpwcmludCAiQk5fTExPTkcgbW9kZVxuIiBpZiAkYm5fbGw7CnByaW50ICJSQzQgdXNlcyB1JHR5cGVbJHJjNF9pbnRdXG4iIGlmICRyYzRfaW50ICE9ICRkZWZfaW50OwpwcmludCAiUkM0X0lOREVYIG1vZGVcbiIgaWYgJHJjNF9pZHg7CnByaW50ICJSQzRfQ0hVTksgaXMgdW5kZWZpbmVkXG4iIGlmICRyYzRfY2h1bms9PTA7CnByaW50ICJSQzRfQ0hVTksgaXMgdW5zaWduZWQgbG9uZ1xuIiBpZiAkcmM0X2NodW5rPT0xOwpwcmludCAiUkM0X0NIVU5LIGlzIHVuc2lnbmVkIGxvbmcgbG9uZ1xuIiBpZiAkcmM0X2NodW5rPT0yOwpwcmludCAiTUQyIHVzZXMgdSR0eXBlWyRtZDJfaW50XVxuIiBpZiAkbWQyX2ludCAhPSAkZGVmX2ludDsKcHJpbnQgIklERUEgdXNlcyB1JHR5cGVbJGlkZWFfaW50XVxuIiBpZiAkaWRlYV9pbnQgIT0gJGRlZl9pbnQ7CnByaW50ICJSQzIgdXNlcyB1JHR5cGVbJHJjMl9pbnRdXG4iIGlmICRyYzJfaW50ICE9ICRkZWZfaW50OwpwcmludCAiQkZfUFRSIHVzZWRcbiIgaWYgJGJmX3B0ciA9PSAxOyAKcHJpbnQgIkJGX1BUUjIgdXNlZFxuIiBpZiAkYmZfcHRyID09IDI7IAoKaWYoJElzTUsxTUYpIHsKCW9wZW4gKE9VVCwiPmNyeXB0by9idWlsZGluZi5oIikgfHwgZGllICJDYW4ndCBvcGVuIGJ1aWxkaW5mLmgiOwoJcHJpbnRmIE9VVCA8PEVPRjsKI2lmbmRlZiBNSzFNRl9CVUlMRAogIC8qIGF1dG8tZ2VuZXJhdGVkIGJ5IENvbmZpZ3VyZS5wbCBmb3IgY3J5cHRvL2N2ZXJzaW9uLmM6CiAgICogZm9yIFVuaXggYnVpbGRzLCBjcnlwdG8vTWFrZWZpbGUuc3NsIGdlbmVyYXRlcyBmdW5jdGlvbmFsIGRlZmluaXRpb25zOwogICAqIFdpbmRvd3MgYnVpbGRzIChhbmQgb3RoZXIgbWsxbWYgYnVpbGRzKSBjb21waWxlIGN2ZXJzaW9uLmMgd2l0aAogICAqIC1ETUsxTUZfQlVJTEQgYW5kIHVzZSBkZWZpbml0aW9ucyBhZGRlZCB0byB0aGlzIGZpbGUgYnkgdXRpbC9tazFtZi5wbC4gKi8KICAjZXJyb3IgIldpbmRvd3MgYnVpbGRzIChQTEFURk9STT0kdGFyZ2V0KSB1c2UgbWsxbWYucGwtY3JlYXRlZCBNYWtlZmlsZXMiCiNlbmRpZgpFT0YKCWNsb3NlKE9VVCk7Cn0gZWxzZSB7CglteSAkbWFrZV9jb21tYW5kID0gIm1ha2UgUEVSTD1cJyRwZXJsXCciOwoJbXkgJG1ha2VfdGFyZ2V0cyA9ICIiOwoJJG1ha2VfdGFyZ2V0cyAuPSAiIGxpbmtzIiBpZiAkc3ltbGluazsKCSRtYWtlX3RhcmdldHMgLj0gIiBkZXBlbmQiIGlmICRkZXBmbGFncyBuZSAkZGVmYXVsdF9kZXBmbGFncyAmJiAkbWFrZV9kZXBlbmQ7CgkkbWFrZV90YXJnZXRzIC49ICIgZ2VudGVzdHMiIGlmICRzeW1saW5rOwoJKHN5c3RlbSAkbWFrZV9jb21tYW5kLiRtYWtlX3RhcmdldHMpID09IDAgb3IgZXhpdCAkPwoJCWlmICRtYWtlX3RhcmdldHMgbmUgIiI7CglpZiAoICRwZXJsID1+IG1AXi9AKSB7CgkgICAgJmRvZmlsZSgidG9vbHMvY19yZWhhc2giLCRwZXJsLCdeIyEvJywgJyMhJXMnLCdebXkgXCRkaXI7JCcsICdteSAkZGlyID0gIicgLiAkb3BlbnNzbGRpciAuICciOycpOwoJICAgICZkb2ZpbGUoImFwcHMvQ0EucGwiLCRwZXJsLCdeIyEvJywgJyMhJXMnKTsKCX0gZWxzZSB7CgkgICAgIyBObyBwYXRoIGZvciBQZXJsIGtub3duIC4uLgoJICAgICZkb2ZpbGUoInRvb2xzL2NfcmVoYXNoIiwnL3Vzci9sb2NhbC9iaW4vcGVybCcsJ14jIS8nLCAnIyElcycsJ15teSBcJGRpcjskJywgJ215ICRkaXIgPSAiJyAuICRvcGVuc3NsZGlyIC4gJyI7Jyk7CgkgICAgJmRvZmlsZSgiYXBwcy9DQS5wbCIsJy91c3IvbG9jYWwvYmluL3BlcmwnLCdeIyEvJywgJyMhJXMnKTsKCX0KCWlmICgkZGVwZmxhZ3MgbmUgJGRlZmF1bHRfZGVwZmxhZ3MgJiYgISRtYWtlX2RlcGVuZCkgewoJCXByaW50IDw8RU9GOwoKU2luY2UgeW91J3ZlIGRpc2FibGVkIG9yIGVuYWJsZWQgYXQgbGVhc3Qgb25lIGFsZ29yaXRobSwgeW91IG5lZWQgdG8gZG8KdGhlIGZvbGxvd2luZyBiZWZvcmUgYnVpbGRpbmc6CgoJbWFrZSBkZXBlbmQKRU9GCgl9Cn0KCiMgY3JlYXRlIHRoZSBtcy92ZXJzaW9uMzIucmMgZmlsZSBpZiBuZWVkZWQKaWYgKCRJc01LMU1GICYmICgkdGFyZ2V0ICF+IC9ebmV0d2FyZS8pKSB7CglteSAoJHYxLCAkdjIsICR2MywgJHY0KTsKCWlmICgkdmVyc2lvbl9udW0gPX4gLyheWzAtOWEtZl17MX0pKFswLTlhLWZdezJ9KShbMC05YS1mXXsyfSkoWzAtOWEtZl17Mn0pL2kpIHsKCQkkdjE9aGV4ICQxOwoJCSR2Mj1oZXggJDI7CgkJJHYzPWhleCAkMzsKCQkkdjQ9aGV4ICQ0OwoJfQoJb3BlbiAoT1VULCI+bXMvdmVyc2lvbjMyLnJjIikgfHwgZGllICJDYW4ndCBvcGVuIG1zL3ZlcnNpb24zMi5yYyI7CglwcmludCBPVVQgPDxFT0Y7CiNpbmNsdWRlIDx3aW52ZXIuaD4KCkxBTkdVQUdFIDB4MDksMHgwMQoKMSBWRVJTSU9OSU5GTwogIEZJTEVWRVJTSU9OICR2MSwkdjIsJHYzLCR2NAogIFBST0RVQ1RWRVJTSU9OICR2MSwkdjIsJHYzLCR2NAogIEZJTEVGTEFHU01BU0sgMHgzZkwKI2lmZGVmIF9ERUJVRwogIEZJTEVGTEFHUyAweDAxTAojZWxzZQogIEZJTEVGTEFHUyAweDAwTAojZW5kaWYKICBGSUxFT1MgVk9TX19XSU5ET1dTMzIKICBGSUxFVFlQRSBWRlRfRExMCiAgRklMRVNVQlRZUEUgMHgwTApCRUdJTgogICAgQkxPQ0sgIlN0cmluZ0ZpbGVJbmZvIgogICAgQkVHSU4KCUJMT0NLICIwNDA5MDRiMCIKCUJFR0lOCiNpZiBkZWZpbmVkKEZJUFMpCgkgICAgVkFMVUUgIkNvbW1lbnRzIiwgIldBUk5JTkc6IFRFU1QgVkVSU0lPTiBPTkxZICoqKk5PVCoqKiBGSVBTIDE0MC0yIFZBTElEQVRFRC5cXDAiCiNlbmRpZgoJICAgIC8vIFJlcXVpcmVkOgkgICAgCgkgICAgVkFMVUUgIkNvbXBhbnlOYW1lIiwgIlRoZSBPcGVuU1NMIFByb2plY3QsIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvXFwwIgojaWYgZGVmaW5lZChGSVBTKQoJICAgIFZBTFVFICJGaWxlRGVzY3JpcHRpb24iLCAiVEVTVCBVTlZBTElEQVRFRCBGSVBTMTQwLTIgRExMXFwwIgojZWxzZQoJICAgIFZBTFVFICJGaWxlRGVzY3JpcHRpb24iLCAiT3BlblNTTCBTaGFyZWQgTGlicmFyeVxcMCIKI2VuZGlmCgkgICAgVkFMVUUgIkZpbGVWZXJzaW9uIiwgIiR2ZXJzaW9uXFwwIgojaWYgZGVmaW5lZChDUllQVE8pCgkgICAgVkFMVUUgIkludGVybmFsTmFtZSIsICJsaWJlYXkzMlxcMCIKCSAgICBWQUxVRSAiT3JpZ2luYWxGaWxlbmFtZSIsICJsaWJlYXkzMi5kbGxcXDAiCiNlbGlmIGRlZmluZWQoU1NMKQoJICAgIFZBTFVFICJJbnRlcm5hbE5hbWUiLCAic3NsZWF5MzJcXDAiCgkgICAgVkFMVUUgIk9yaWdpbmFsRmlsZW5hbWUiLCAic3NsZWF5MzIuZGxsXFwwIgojZWxpZiBkZWZpbmVkKEZJUFMpCgkgICAgVkFMVUUgIkludGVybmFsTmFtZSIsICJsaWJvc3NsZmlwc1xcMCIKCSAgICBWQUxVRSAiT3JpZ2luYWxGaWxlbmFtZSIsICJsaWJvc3NsZmlwcy5kbGxcXDAiCiNlbmRpZgoJICAgIFZBTFVFICJQcm9kdWN0TmFtZSIsICJUaGUgT3BlblNTTCBUb29sa2l0XFwwIgoJICAgIFZBTFVFICJQcm9kdWN0VmVyc2lvbiIsICIkdmVyc2lvblxcMCIKCSAgICAvLyBPcHRpb25hbDoKCSAgICAvL1ZBTFVFICJDb21tZW50cyIsICJcXDAiCgkgICAgVkFMVUUgIkxlZ2FsQ29weXJpZ2h0IiwgIkNvcHlyaWdodCCpIDE5OTgtMjAwNyBUaGUgT3BlblNTTCBQcm9qZWN0LiBDb3B5cmlnaHQgqSAxOTk1LTE5OTggRXJpYyBBLiBZb3VuZywgVGltIEouIEh1ZHNvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cXDAiCgkgICAgLy9WQUxVRSAiTGVnYWxUcmFkZW1hcmtzIiwgIlxcMCIKCSAgICAvL1ZBTFVFICJQcml2YXRlQnVpbGQiLCAiXFwwIgoJICAgIC8vVkFMVUUgIlNwZWNpYWxCdWlsZCIsICJcXDAiCglFTkQKICAgIEVORAogICAgQkxPQ0sgIlZhckZpbGVJbmZvIgogICAgQkVHSU4KICAgICAgICBWQUxVRSAiVHJhbnNsYXRpb24iLCAweDQwOSwgMHg0YjAKICAgIEVORApFTkQKRU9GCgljbG9zZShPVVQpOwogIH0KICAKcHJpbnQgPDxFT0Y7CgpDb25maWd1cmVkIGZvciAkdGFyZ2V0LgpFT0YKCnByaW50IDw8XEVPRiBpZiAoISRub190aHJlYWRzICYmICEkdGhyZWFkcyk7CgpUaGUgbGlicmFyeSBjb3VsZCBub3QgYmUgY29uZmlndXJlZCBmb3Igc3VwcG9ydGluZyBtdWx0aS10aHJlYWRlZAphcHBsaWNhdGlvbnMgYXMgdGhlIGNvbXBpbGVyIG9wdGlvbnMgcmVxdWlyZWQgb24gdGhpcyBzeXN0ZW0gYXJlIG5vdCBrbm93bi4KU2VlIGZpbGUgSU5TVEFMTCBmb3IgZGV0YWlscyBpZiB5b3UgbmVlZCBtdWx0aS10aHJlYWRpbmcuCkVPRgoKcHJpbnQgPDxcRU9GIGlmICgkbm9fc2hhcmVkX3dhcm4pOwoKWW91IGdhdmUgdGhlIG9wdGlvbiAnc2hhcmVkJy4gIE5vcm1hbGx5LCB0aGF0IHdvdWxkIGdpdmUgeW91IHNoYXJlZCBsaWJyYXJpZXMuClVuZm9ydHVuYXRlbHksIHRoZSBPcGVuU1NMIGNvbmZpZ3VyYXRpb24gZG9lc24ndCBpbmNsdWRlIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQKZm9yIHRoaXMgcGxhdGZvcm0geWV0LCBzbyBpdCB3aWxsIHByZXRlbmQgeW91IGdhdmUgdGhlIG9wdGlvbiAnbm8tc2hhcmVkJy4gIElmCnlvdSBjYW4gaW5mb3JtIHRoZSBkZXZlbG9wcGVycyAob3BlbnNzbC1kZXZcQG9wZW5zc2wub3JnKSBob3cgdG8gc3VwcG9ydCBzaGFyZWQKbGlicmFyaWVzIG9uIHRoaXMgcGxhdGZvcm0sIHRoZXkgd2lsbCBhdCBsZWFzdCBsb29rIGF0IGl0IGFuZCB0cnkgdGhlaXIgYmVzdAooYnV0IHBsZWFzZSBmaXJzdCBtYWtlIHN1cmUgeW91IGhhdmUgdHJpZWQgd2l0aCBhIGN1cnJlbnQgdmVyc2lvbiBvZiBPcGVuU1NMKS4KRU9GCgpwcmludCA8PFxFT0YgaWYgKCRmaXBzY2FuaXN0ZXJpbnRlcm5hbCBlcSAieSIpOwoKV0FSTklORzogT3BlblNTTCBoYXMgYmVlbiBjb25maWd1cmVkIHVzaW5nIHVuc3VwcG9ydGVkIG9wdGlvbihzKSB0byBpbnRlcm5hbGx5CmdlbmVyYXRlIGEgZmlwc2NhbmlzdGVyLm8gb2JqZWN0IG1vZHVsZSBmb3IgVEVTVElORyBQVVJQT1NFUyBPTkxZOyB0aGF0CmNvbXBpbGVkIG1vZHVsZSBpcyBOT1QgRklQUyAxNDAtMiB2YWxpZGF0ZWQgYW5kIENBTk5PVCBiZSB1c2VkIHRvIHJlcGxhY2UgdGhlCk9wZW5TU0wgRklQUyBPYmplY3QgTW9kdWxlIGFzIGlkZW50aWZpZWQgYnkgdGhlIENNVlAKKGh0dHA6Ly9jc3JjLm5pc3QuZ292L2NyeXB0dmFsLykgaW4gYW55IGFwcGxpY2F0aW9uIHJlcXVpcmluZyB0aGUgdXNlIG9mIEZJUFMKMTQwLTIgdmFsaWRhdGVkIHNvZnR3YXJlLiAKClRoaXMgaXMgYW4gT3BlblNTTCAwLjkuOCB0ZXN0IHZlcnNpb24uCgpTZWUgdGhlIGZpbGUgUkVBRE1FLkZJUFMgZm9yIGRldGFpbHMgb2YgaG93IHRvIGJ1aWxkIGEgdGVzdCBsaWJyYXJ5LgoKRU9GCgpleGl0KDApOwoKc3ViIHVzYWdlCgl7CglwcmludCBTVERFUlIgJHVzYWdlOwoJcHJpbnQgU1RERVJSICJcbnBpY2sgb3MvY29tcGlsZXIgZnJvbTpcbiI7CglteSAkaj0wOwoJbXkgJGk7CiAgICAgICAgbXkgJGs9MDsKCWZvcmVhY2ggJGkgKHNvcnQga2V5cyAldGFibGUpCgkJewoJCW5leHQgaWYgJGkgPX4gL15kZWJ1Zy87CgkJJGsgKz0gbGVuZ3RoKCRpKSArIDE7CgkJaWYgKCRrID4gNzgpCgkJCXsKCQkJcHJpbnQgU1RERVJSICJcbiI7CgkJCSRrPWxlbmd0aCgkaSk7CgkJCX0KCQlwcmludCBTVERFUlIgJGkgLiAiICI7CgkJfQoJZm9yZWFjaCAkaSAoc29ydCBrZXlzICV0YWJsZSkKCQl7CgkJbmV4dCBpZiAkaSAhfiAvXmRlYnVnLzsKCQkkayArPSBsZW5ndGgoJGkpICsgMTsKCQlpZiAoJGsgPiA3OCkKCQkJewoJCQlwcmludCBTVERFUlIgIlxuIjsKCQkJJGs9bGVuZ3RoKCRpKTsKCQkJfQoJCXByaW50IFNUREVSUiAkaSAuICIgIjsKCQl9CglwcmludCBTVERFUlIgIlxuXG5OT1RFOiBJZiBpbiBkb3VidCwgb24gVW5peC1pc2ggc3lzdGVtcyB1c2UgJy4vY29uZmlnJy5cbiI7CglleGl0KDEpOwoJfQoKc3ViIHdoaWNoCgl7CglteSgkbmFtZSk9QF87CglteSAkcGF0aDsKCWZvcmVhY2ggJHBhdGggKHNwbGl0IC86LywgJEVOVntQQVRIfSkKCQl7CgkJaWYgKC1mICIkcGF0aC8kbmFtZSRleGVfZXh0IiBhbmQgLXggXykKCQkJewoJCQlyZXR1cm4gIiRwYXRoLyRuYW1lJGV4ZV9leHQiIHVubGVzcyAoJG5hbWUgZXEgInBlcmwiIGFuZAoJCQkgc3lzdGVtKCIkcGF0aC8kbmFtZSRleGVfZXh0IC1lICIgLiAnXCdleGl0KCRdPDUuMCk7XCcnKSk7CgkJCX0KCQl9Cgl9CgpzdWIgZG9maWxlCgl7CglteSAkZjsgbXkgJHA7IG15ICVtOyBteSBAYTsgbXkgJGs7IG15ICRmZjsKCSgkZiwkcCwlbSk9QF87CgoJb3BlbihJTiwiPCRmLmluIikgfHwgb3BlbihJTiwiPCRmIikgfHwgZGllICJ1bmFibGUgdG8gb3BlbiAkZjokIVxuIjsKCUBhPTxJTj47CgljbG9zZShJTik7Cglmb3JlYWNoICRrIChrZXlzICVtKQoJCXsKCQlncmVwKC8kay8gJiYgKCRfPXNwcmludGYoJG17JGt9LiJcbiIsJHApKSxAYSk7CgkJfQoJb3BlbihPVVQsIj4kZi5uZXciKSB8fCBkaWUgInVuYWJsZSB0byBvcGVuICRmLm5ldzokIVxuIjsKCXByaW50IE9VVCBAYTsKCWNsb3NlKE9VVCk7CglyZW5hbWUoJGYsIiRmLmJhayIpIHx8IGRpZSAidW5hYmxlIHRvIHJlbmFtZSAkZlxuIiBpZiAtZSAkZjsKCXJlbmFtZSgiJGYubmV3IiwkZikgfHwgZGllICJ1bmFibGUgdG8gcmVuYW1lICRmLm5ld1xuIjsKCX0KCnN1YiBwcmludF90YWJsZV9lbnRyeQoJewoJbXkgJHRhcmdldCA9IHNoaWZ0OwoKCShteSAkY2MsbXkgJGNmbGFncyxteSAkdW5pc3RkLG15ICR0aHJlYWRfY2ZsYWcsbXkgJHN5c19pZCxteSAkbGZsYWdzLAoJbXkgJGJuX29wcyxteSAkY3B1aWRfb2JqLG15ICRibl9vYmosbXkgJGRlc19vYmosbXkgJGFlc19vYmosIG15ICRiZl9vYmosCglteSAkbWQ1X29iaixteSAkc2hhMV9vYmosbXkgJGNhc3Rfb2JqLG15ICRyYzRfb2JqLG15ICRybWQxNjBfb2JqLAoJbXkgJHJjNV9vYmosbXkgJGRzb19zY2hlbWUsbXkgJHNoYXJlZF90YXJnZXQsbXkgJHNoYXJlZF9jZmxhZywKCW15ICRzaGFyZWRfbGRmbGFnLG15ICRzaGFyZWRfZXh0ZW5zaW9uLG15ICRyYW5saWIsbXkgJGFyZmxhZ3MpPQoJc3BsaXQoL1xzKjpccyovLCR0YWJsZXskdGFyZ2V0fSAuICI6IiB4IDMwICwgLTEpOwoJCQkKCXByaW50IDw8RU9GCgoqKiogJHRhcmdldApcJGNjICAgICAgICAgICA9ICRjYwpcJGNmbGFncyAgICAgICA9ICRjZmxhZ3MKXCR1bmlzdGQgICAgICAgPSAkdW5pc3RkClwkdGhyZWFkX2NmbGFnID0gJHRocmVhZF9jZmxhZwpcJHN5c19pZCAgICAgICA9ICRzeXNfaWQKXCRsZmxhZ3MgICAgICAgPSAkbGZsYWdzClwkYm5fb3BzICAgICAgID0gJGJuX29wcwpcJGNwdWlkX29iaiAgICA9ICRjcHVpZF9vYmoKXCRibl9vYmogICAgICAgPSAkYm5fb2JqClwkZGVzX29iaiAgICAgID0gJGRlc19vYmoKXCRhZXNfb2JqICAgICAgPSAkYWVzX29iagpcJGJmX29iaiAgICAgICA9ICRiZl9vYmoKXCRtZDVfb2JqICAgICAgPSAkbWQ1X29iagpcJHNoYTFfb2JqICAgICA9ICRzaGExX29iagpcJGNhc3Rfb2JqICAgICA9ICRjYXN0X29iagpcJHJjNF9vYmogICAgICA9ICRyYzRfb2JqClwkcm1kMTYwX29iaiAgID0gJHJtZDE2MF9vYmoKXCRyYzVfb2JqICAgICAgPSAkcmM1X29iagpcJGRzb19zY2hlbWUgICA9ICRkc29fc2NoZW1lClwkc2hhcmVkX3RhcmdldD0gJHNoYXJlZF90YXJnZXQKXCRzaGFyZWRfY2ZsYWcgPSAkc2hhcmVkX2NmbGFnClwkc2hhcmVkX2xkZmxhZyA9ICRzaGFyZWRfbGRmbGFnClwkc2hhcmVkX2V4dGVuc2lvbiA9ICRzaGFyZWRfZXh0ZW5zaW9uClwkcmFubGliICAgICAgID0gJHJhbmxpYgpcJGFyZmxhZ3MgICAgICA9ICRhcmZsYWdzCkVPRgoJfQoKc3ViIHRlc3Rfc2FuaXR5Cgl7CglteSAkZXJyb3JjbnQgPSAwOwoKCXByaW50IFNUREVSUiAiPSIgeCA3MCwgIlxuIjsKCXByaW50IFNUREVSUiAiPT09IFNBTklUWSBURVNUSU5HIVxuIjsKCXByaW50IFNUREVSUiAiPT09IE5vIGNvbmZpZ3VyYXRpb24gd2lsbCBiZSBkb25lLCBhbGwgb3RoZXIgYXJndW1lbnRzIHdpbGwgYmUgaWdub3JlZCFcbiI7CglwcmludCBTVERFUlIgIj0iIHggNzAsICJcbiI7CgoJZm9yZWFjaCAkdGFyZ2V0IChzb3J0IGtleXMgJXRhYmxlKQoJCXsKCQlAZmllbGRzID0gc3BsaXQoL1xzKjpccyovLCR0YWJsZXskdGFyZ2V0fSAuICI6IiB4IDMwICwgLTEpOwoKCQlpZiAoJGZpZWxkc1skaWR4X2Rzb19zY2hlbWUtMV0gPX4gL14oZGx8ZGxmY258d2luMzJ8dm1zKSQvKQoJCQl7CgkJCSRlcnJvcmNudCsrOwoJCQlwcmludCBTVERFUlIgIlNBTklUWSBFUlJPUjogJyR0YXJnZXQnIGhhcyB0aGUgZHNvX3NjaGVtZSBbJGlkeF9kc29fc2NoZW1lXSB2YWx1ZXNcbiI7CgkJCXByaW50IFNUREVSUiAiICAgICAgICAgICAgICBpbiB0aGUgcHJldmlvdXMgZmllbGRcbiI7CgkJCX0KCQllbHNpZiAoJGZpZWxkc1skaWR4X2Rzb19zY2hlbWUrMV0gPX4gL14oZGx8ZGxmY258d2luMzJ8dm1zKSQvKQoJCQl7CgkJCSRlcnJvcmNudCsrOwoJCQlwcmludCBTVERFUlIgIlNBTklUWSBFUlJPUjogJyR0YXJnZXQnIGhhcyB0aGUgZHNvX3NjaGVtZSBbJGlkeF9kc29fc2NoZW1lXSB2YWx1ZXNcbiI7CgkJCXByaW50IFNUREVSUiAiICAgICAgICAgICAgICBpbiB0aGUgZm9sbG93aW5nIGZpZWxkXG4iOwoJCQl9CgkJZWxzaWYgKCRmaWVsZHNbJGlkeF9kc29fc2NoZW1lXSAhfiAvXihkbHxkbGZjbnx3aW4zMnx2bXN8KSQvKQoJCQl7CgkJCSRlcnJvcmNudCsrOwoJCQlwcmludCBTVERFUlIgIlNBTklUWSBFUlJPUjogJyR0YXJnZXQnIGhhcyB0aGUgZHNvX3NjaGVtZSBbJGlkeF9kc29fc2NoZW1lXSBmaWVsZCA9ICIsJGZpZWxkc1skaWR4X2Rzb19zY2hlbWVdLCJcbiI7CgkJCXByaW50IFNUREVSUiAiICAgICAgICAgICAgICB2YWxpZCB2YWx1ZXMgYXJlICdkbCcsICdkbGZjbicsICd3aW4zMicgYW5kICd2bXMnXG4iOwoJCQl9CgkJfQoJcHJpbnQgU1RERVJSICJObyBzYW5pdHkgZXJyb3JzIGRldGVjdGVkIVxuIiBpZiAkZXJyb3JjbnQgPT0gMDsKCXJldHVybiAkZXJyb3JjbnQ7Cgl9CgojIEF0dGVtcHQgdG8gZGV0ZWN0IE1TWVMgZW52aXJvbm1lbnQKCnN1YiBpc19tc3lzCgl7CglyZXR1cm4gMSBpZiAoZXhpc3RzICRFTlZ7IlRFUk0ifSAmJiAkRU5WeyJURVJNIn0gZXEgIm1zeXMiKTsKCXJldHVybiAwOwoJfQo=