From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ian Jackson Subject: =?utf-8?q?=5BPATCH_04/27=5D_autoconf=3A_trim_the_conf?= =?utf-8?q?igure_script=3B_use_autoheader?= Date: Fri, 11 May 2012 18:57:49 +0100 Message-ID: <1336759092-2432-5-git-send-email-ian.jackson@eu.citrix.com> References: <1336759092-2432-1-git-send-email-ian.jackson@eu.citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1336759092-2432-1-git-send-email-ian.jackson@eu.citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xen.org Cc: Roger Pau Monne , Ian Jackson List-Id: xen-devel@lists.xenproject.org UmVtb3ZlIGEgbG90IG9mIHVubmVjZXNzYXJ5IHRlc3RzLiAgU3BlY2lmaWNhbGx5LCB3ZSBubyBs b25nZXIgdGVzdApmb3Igc3RhbmRhcmQgUE9TSVggZmFjaWxpdGllcyB3aGljaCB3ZSBleHBlY3Qg dG8gYmUgcHJvdmlkZWQKZXZlcnl3aGVyZSBhbmQgd2hpY2ggd2UgZG9uJ3QgaW4gYW55IGNhc2Ug aGF2ZSBhbnkgYWx0ZXJuYXRpdmUgZm9yLgoKU3dpdGNoIHRvIGdlbmVyYXRpbmcgY29uZmlnLmgu aW4gd2l0aCBhdXRvaGVhZGVyLgoKU2lnbmVkLW9mZi1ieTogSWFuIEphY2tzb24gPGlhbi5qYWNr c29uQGV1LmNpdHJpeC5jb20+CkFja2VkLWJ5OiBJYW4gQ2FtcGJlbGwgPGlhbi5jYW1wYmVsbEBj aXRyaXguY29tPgpDYzogUm9nZXIgUGF1IE1vbm5lIDxyb2dlci5wYXVAZW50ZWwudXBjLmVkdT4K CkNoYW5nZXMgc2luY2Ugdjc6CiAqIFJlbW92ZWQgQVhfQ0hFQ0tfUFRZRlVOQ1MgKHNudWNrIGlu IGZyb20gcHJldmlvdXMgcGF0Y2gpCi0tLQogYXV0b2dlbi5zaCAgICAgICAgIHwgICAgMSArCiB0 b29scy9jb25maWcuaC5pbiAgfCAgIDczICstCiB0b29scy9jb25maWd1cmUgICAgfCA4ODI1ICsr KysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHRvb2xz L2NvbmZpZ3VyZS5hYyB8ICAgNjAgKy0KIDQgZmlsZXMgY2hhbmdlZCwgMjk4MSBpbnNlcnRpb25z KCspLCA1OTc4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2F1dG9nZW4uc2ggYi9hdXRvZ2Vu LnNoCmluZGV4IGMyODhiNzEuLjU4YTcxY2UgMTAwNzU1Ci0tLSBhL2F1dG9nZW4uc2gKKysrIGIv YXV0b2dlbi5zaApAQCAtMSwzICsxLDQgQEAKICMhL2Jpbi9zaCAtZQogY2QgdG9vbHMKIGF1dG9j b25mCithdXRvaGVhZGVyCmRpZmYgLS1naXQgYS90b29scy9jb25maWcuaC5pbiBiL3Rvb2xzL2Nv bmZpZy5oLmluCmluZGV4IGY4Zjk2ZGMuLjE3Yzg5MTMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2NvbmZp Zy5oLmluCisrKyBiL3Rvb2xzL2NvbmZpZy5oLmluCkBAIC0xLDE5ICsxLDY0IEBACi0vKgotICog Q29weXJpZ2h0IChDKSAyMDEyCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hl ZAotICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyLjEgb25seS4g d2l0aCB0aGUgc3BlY2lhbAotICogZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIGZp bGUgTElDRU5TRS4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgTGVz c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqLworLyogY29u ZmlnLmguaW4uICBHZW5lcmF0ZWQgZnJvbSBjb25maWd1cmUuYWMgYnkgYXV0b2hlYWRlci4gICov CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8aW50dHlwZXMuaD4gaGVhZGVyIGZp bGUuICovCisjdW5kZWYgSEFWRV9JTlRUWVBFU19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBo YXZlIHRoZSBgY3J5cHRvJyBsaWJyYXJ5ICgtbGNyeXB0bykuICovCisjdW5kZWYgSEFWRV9MSUJD UllQVE8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB5YWpsJyBsaWJyYXJ5ICgt bHlhamwpLiAqLworI3VuZGVmIEhBVkVfTElCWUFKTAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3Ug aGF2ZSB0aGUgYHonIGxpYnJhcnkgKC1seikuICovCisjdW5kZWYgSEFWRV9MSUJaCisKKy8qIERl ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bWVtb3J5Lmg+IGhlYWRlciBmaWxlLiAqLworI3Vu ZGVmIEhBVkVfTUVNT1JZX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRp bnQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TVERJTlRfSAorCisvKiBEZWZpbmUg dG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGxpYi5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBI QVZFX1NURExJQl9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5ncy5o PiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NUUklOR1NfSAorCisvKiBEZWZpbmUgdG8g MSBpZiB5b3UgaGF2ZSB0aGUgPHN0cmluZy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZF X1NUUklOR19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3N0YXQuaD4g aGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfU1RBVF9ICisKKy8qIERlZmluZSB0byAx IGlmIHlvdSBoYXZlIHRoZSA8c3lzL3R5cGVzLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhB VkVfU1lTX1RZUEVTX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1bmlzdGQu aD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9VTklTVERfSAogCiAvKiBEZWZpbmUgdG8g MSBpZiB5b3UgaGF2ZSB0aGUgPHlhamwveWFqbF92ZXJzaW9uLmg+IGhlYWRlciBmaWxlLiAqLwog I3VuZGVmIEhBVkVfWUFKTF9ZQUpMX1ZFUlNJT05fSAogCi0vKiBEZWZpbmUgY3Vyc2VzIGhlYWRl ciB0byBpbmNsdWRlLiAqLworLyogRGVmaW5lIGN1cnNlcyBoZWFkZXIgdG8gdXNlICovCiAjdW5k ZWYgSU5DTFVERV9DVVJTRVNfSAorCisvKiBEZWZpbmUgdG8gdGhlIGFkZHJlc3Mgd2hlcmUgYnVn IHJlcG9ydHMgZm9yIHRoaXMgcGFja2FnZSBzaG91bGQgYmUgc2VudC4gKi8KKyN1bmRlZiBQQUNL QUdFX0JVR1JFUE9SVAorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBvZiB0aGlzIHBhY2th Z2UuICovCisjdW5kZWYgUEFDS0FHRV9OQU1FCisKKy8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1l IGFuZCB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KKyN1bmRlZiBQQUNLQUdFX1NUUklORwor CisvKiBEZWZpbmUgdG8gdGhlIG9uZSBzeW1ib2wgc2hvcnQgbmFtZSBvZiB0aGlzIHBhY2thZ2Uu ICovCisjdW5kZWYgUEFDS0FHRV9UQVJOQU1FCisKKy8qIERlZmluZSB0byB0aGUgaG9tZSBwYWdl IGZvciB0aGlzIHBhY2thZ2UuICovCisjdW5kZWYgUEFDS0FHRV9VUkwKKworLyogRGVmaW5lIHRv IHRoZSB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KKyN1bmRlZiBQQUNLQUdFX1ZFUlNJT04K KworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIEFOU0kgQyBoZWFkZXIgZmlsZXMuICov CisjdW5kZWYgU1REQ19IRUFERVJTCmRpZmYgLS1naXQgYS90b29scy9jb25maWd1cmUgYi90b29s cy9jb25maWd1cmUKaW5kZXggODk3ZTA2MS4uZDg5MThmZSAxMDA3NTUKLS0tIGEvdG9vbHMvY29u ZmlndXJlCisrKyBiL3Rvb2xzL2NvbmZpZ3VyZQpAQCAtNTk1LDEyICs1OTUsOCBAQCBhY19pbmNs dWRlc19kZWZhdWx0PSJcCiAjIGluY2x1ZGUgPHVuaXN0ZC5oPgogI2VuZGlmIgogCi1hY19oZWFk ZXJfbGlzdD0KLWFjX2Z1bmNfbGlzdD0KIGFjX3N1YnN0X3ZhcnM9J0xUTElCT0JKUwotUE9XX0xJ QgogTElCT0JKUwotQUxMT0NBCiBsaWJpY29udgogUFRIUkVBRF9MSUJTCiBQVEhSRUFEX0xERkxB R1MKQEAgLTYxNiw2ICs2MTIsOSBAQCBQS0dfQ09ORklHX0xJQkRJUgogUEtHX0NPTkZJR19QQVRI CiBQS0dfQ09ORklHCiBDVVJTRVNfTElCUworRUdSRVAKK0dSRVAKK0NQUAogcHljb25maWcKIFBZ VEhPTlBBVEgKIE9DQU1MQlVJTEQKQEAgLTYzNSw4ICs2MzQsMTMgQEAgSU5TVEFMTF9EQVRBCiBJ TlNUQUxMX1NDUklQVAogSU5TVEFMTF9QUk9HUkFNCiBTRVRfTUFLRQotTE5fUwotU0VECitPQkpF WFQKK0VYRUVYVAorYWNfY3RfQ0MKK0NQUEZMQUdTCitMREZMQUdTCitDRkxBR1MKK0NDCiBJQVNM CiBCQ0MKIExEODYKQEAgLTY2NSwyNCArNjY5LDYgQEAgeGVuYXBpCiB2dHBtCiBtb25pdG9ycwog Z2l0aHR0cAotaG9zdF9vcwotaG9zdF92ZW5kb3IKLWhvc3RfY3B1Ci1ob3N0Ci1idWlsZF9vcwot YnVpbGRfdmVuZG9yCi1idWlsZF9jcHUKLWJ1aWxkCi1FR1JFUAotR1JFUAotQ1BQCi1PQkpFWFQK LUVYRUVYVAotYWNfY3RfQ0MKLUNQUEZMQUdTCi1MREZMQUdTCi1DRkxBR1MKLUNDCiB0YXJnZXRf YWxpYXMKIGhvc3RfYWxpYXMKIGJ1aWxkX2FsaWFzCkBAIC03NDAsMTIgKzcyNiw2IEBAIGVuYWJs ZV9kZWJ1ZwogICAgICAgYWNfcHJlY2lvdXNfdmFycz0nYnVpbGRfYWxpYXMKIGhvc3RfYWxpYXMK IHRhcmdldF9hbGlhcwotQ0MKLUNGTEFHUwotTERGTEFHUwotTElCUwotQ1BQRkxBR1MKLUNQUAog UFJFUEVORF9JTkNMVURFUwogUFJFUEVORF9MSUIKIEFQUEVORF9JTkNMVURFUwpAQCAtNzYyLDYg Kzc0MiwxMiBAQCBBUzg2CiBMRDg2CiBCQ0MKIElBU0wKK0NDCitDRkxBR1MKK0xERkxBR1MKK0xJ QlMKK0NQUEZMQUdTCitDUFAKIFBLR19DT05GSUcKIFBLR19DT05GSUdfUEFUSAogUEtHX0NPTkZJ R19MSUJESVIKQEAgLTEzNjUsMTAgKzEzNTEsNiBAQCBGaW5lIHR1bmluZyBvZiB0aGUgaW5zdGFs bGF0aW9uIGRpcmVjdG9yaWVzOgogX0FDRU9GCiAKICAgY2F0IDw8XF9BQ0VPRgotCi1TeXN0ZW0g dHlwZXM6Ci0gIC0tYnVpbGQ9QlVJTEQgICAgIGNvbmZpZ3VyZSBmb3IgYnVpbGRpbmcgb24gQlVJ TEQgW2d1ZXNzZWRdCi0gIC0taG9zdD1IT1NUICAgICAgIGNyb3NzLWNvbXBpbGUgdG8gYnVpbGQg cHJvZ3JhbXMgdG8gcnVuIG9uIEhPU1QgW0JVSUxEXQogX0FDRU9GCiBmaQogCkBAIC0xMzk5LDE0 ICsxMzgxLDYgQEAgT3B0aW9uYWwgRmVhdHVyZXM6CiAgIC0tZGlzYWJsZS1kZWJ1ZyAgICAgICAg IERpc2FibGUgZGVidWcgYnVpbGQgb2YgdG9vbHMgKGRlZmF1bHQgaXMgRU5BQkxFRCkKIAogU29t ZSBpbmZsdWVudGlhbCBlbnZpcm9ubWVudCB2YXJpYWJsZXM6Ci0gIENDICAgICAgICAgIEMgY29t cGlsZXIgY29tbWFuZAotICBDRkxBR1MgICAgICBDIGNvbXBpbGVyIGZsYWdzCi0gIExERkxBR1Mg ICAgIGxpbmtlciBmbGFncywgZS5nLiAtTDxsaWIgZGlyPiBpZiB5b3UgaGF2ZSBsaWJyYXJpZXMg aW4gYQotICAgICAgICAgICAgICBub25zdGFuZGFyZCBkaXJlY3RvcnkgPGxpYiBkaXI+Ci0gIExJ QlMgICAgICAgIGxpYnJhcmllcyB0byBwYXNzIHRvIHRoZSBsaW5rZXIsIGUuZy4gLWw8bGlicmFy eT4KLSAgQ1BQRkxBR1MgICAgKE9iamVjdGl2ZSkgQy9DKysgcHJlcHJvY2Vzc29yIGZsYWdzLCBl LmcuIC1JPGluY2x1ZGUgZGlyPiBpZgotICAgICAgICAgICAgICB5b3UgaGF2ZSBoZWFkZXJzIGlu IGEgbm9uc3RhbmRhcmQgZGlyZWN0b3J5IDxpbmNsdWRlIGRpcj4KLSAgQ1BQICAgICAgICAgQyBw cmVwcm9jZXNzb3IKICAgUFJFUEVORF9JTkNMVURFUwogICAgICAgICAgICAgICBMaXN0IG9mIGlu Y2x1ZGUgZm9sZGVycyB0byBwcmVwZW5kIHRvIENGTEFHUyAod2l0aG91dCAtSSkKICAgUFJFUEVO RF9MSUIgTGlzdCBvZiBsaWJyYXJ5IGZvbGRlcnMgdG8gcHJlcGVuZCB0byBMREZMQUdTICh3aXRo b3V0IC1MKQpAQCAtMTQyNSw2ICsxMzk5LDE0IEBAIFNvbWUgaW5mbHVlbnRpYWwgZW52aXJvbm1l bnQgdmFyaWFibGVzOgogICBMRDg2ICAgICAgICBQYXRoIHRvIGxkODYgdG9vbAogICBCQ0MgICAg ICAgICBQYXRoIHRvIGJjYyB0b29sCiAgIElBU0wgICAgICAgIFBhdGggdG8gaWFzbCB0b29sCisg IENDICAgICAgICAgIEMgY29tcGlsZXIgY29tbWFuZAorICBDRkxBR1MgICAgICBDIGNvbXBpbGVy IGZsYWdzCisgIExERkxBR1MgICAgIGxpbmtlciBmbGFncywgZS5nLiAtTDxsaWIgZGlyPiBpZiB5 b3UgaGF2ZSBsaWJyYXJpZXMgaW4gYQorICAgICAgICAgICAgICBub25zdGFuZGFyZCBkaXJlY3Rv cnkgPGxpYiBkaXI+CisgIExJQlMgICAgICAgIGxpYnJhcmllcyB0byBwYXNzIHRvIHRoZSBsaW5r ZXIsIGUuZy4gLWw8bGlicmFyeT4KKyAgQ1BQRkxBR1MgICAgKE9iamVjdGl2ZSkgQy9DKysgcHJl cHJvY2Vzc29yIGZsYWdzLCBlLmcuIC1JPGluY2x1ZGUgZGlyPiBpZgorICAgICAgICAgICAgICB5 b3UgaGF2ZSBoZWFkZXJzIGluIGEgbm9uc3RhbmRhcmQgZGlyZWN0b3J5IDxpbmNsdWRlIGRpcj4K KyAgQ1BQICAgICAgICAgQyBwcmVwcm9jZXNzb3IKICAgUEtHX0NPTkZJRyAgcGF0aCB0byBwa2ct Y29uZmlnIHV0aWxpdHkKICAgUEtHX0NPTkZJR19QQVRICiAgICAgICAgICAgICAgIGRpcmVjdG9y aWVzIHRvIGFkZCB0byBwa2ctY29uZmlnJ3Mgc2VhcmNoIHBhdGgKQEAgLTE3OTcsMzExICsxNzc5 LDYgQEAgZmkKICAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCiAKIH0gIyBhY19mbl9jX3Ry eV9saW5rCi0KLSMgYWNfZm5fY19jaGVja19mdW5jIExJTkVOTyBGVU5DIFZBUgotIyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFRlc3RzIHdoZXRoZXIgRlVOQyBleGlzdHMs IHNldHRpbmcgdGhlIGNhY2hlIHZhcmlhYmxlIFZBUiBhY2NvcmRpbmdseQotYWNfZm5fY19jaGVj a19mdW5jICgpCi17Ci0gIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3Rh Y2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKLSAgeyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJDIiID4mNQotJGFzX2VjaG9fbiAi Y2hlY2tpbmcgZm9yICQyLi4uICIgPiY2OyB9Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JDMrc2V0fVwi IiA9IHNldDsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGNh dCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVm cy5oLiAgKi8KLS8qIERlZmluZSAkMiB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8 bGltaXRzLmg+IGRlY2xhcmVzICQyLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRz Lmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lICQyIGlubm9jdW91c18kMgot Ci0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkg ZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkMiAoKTsg YmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBp cyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5k aW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMu aD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiAkMgotCi0v KiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4K LSAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBh IEdDQwotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0 aWxsIGFwcGx5LiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi1j aGFyICQyICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlv bnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAg U29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5n IHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5l ZCBfX3N0dWJfJDIgfHwgZGVmaW5lZCBfX3N0dWJfX18kMgotY2hva2UgbWUKLSNlbmRpZgotCi1p bnQKLW1haW4gKCkKLXsKLXJldHVybiAkMiAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VP RgotaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBldmFsICIkMz15ZXMi Ci1lbHNlCi0gIGV2YWwgIiQzPW5vIgotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0 ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0 Ci1maQotZXZhbCBhY19yZXM9XCQkMwotCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1Ci0kYXNfZWNobyAiJGFjX3JlcyIg PiY2OyB9Ci0gIGV2YWwgJGFzX2xpbmVub19zdGFjazsgdGVzdCAieCRhc19saW5lbm9fc3RhY2si ID0geCAmJiB7IGFzX2xpbmVubz07IHVuc2V0IGFzX2xpbmVubzt9Ci0KLX0gIyBhY19mbl9jX2No ZWNrX2Z1bmMKLQotIyBhY19mbl9jX2NoZWNrX3R5cGUgTElORU5PIFRZUEUgVkFSIElOQ0xVREVT Ci0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgVGVzdHMg d2hldGhlciBUWVBFIGV4aXN0cyBhZnRlciBoYXZpbmcgaW5jbHVkZWQgSU5DTFVERVMsIHNldHRp bmcgY2FjaGUKLSMgdmFyaWFibGUgVkFSIGFjY29yZGluZ2x5LgotYWNfZm5fY19jaGVja190eXBl ICgpCi17Ci0gIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNf bGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJDIiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tp bmcgZm9yICQyLi4uICIgPiY2OyB9Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JDMrc2V0fVwiIiA9IHNl dDsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGV2YWwgIiQz PW5vIgotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBl bmQgY29uZmRlZnMuaC4gICovCi0kNAotaW50Ci1tYWluICgpCi17Ci1pZiAoc2l6ZW9mICgkMikp Ci0JIHJldHVybiAwOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3Ry eV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0Yg PmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSQ0Ci1pbnQKLW1haW4g KCkKLXsKLWlmIChzaXplb2YgKCgkMikpKQotCSAgICByZXR1cm4gMDsKLSAgOwotICByZXR1cm4g MDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgot Ci1lbHNlCi0gIGV2YWwgIiQzPXllcyIKLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25m dGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0 LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1ldmFsIGFjX3Jl cz1cJCQzCi0JICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog cmVzdWx0OiAkYWNfcmVzIiA+JjUKLSRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KLSAgZXZhbCAk YXNfbGluZW5vX3N0YWNrOyB0ZXN0ICJ4JGFzX2xpbmVub19zdGFjayIgPSB4ICYmIHsgYXNfbGlu ZW5vPTsgdW5zZXQgYXNfbGluZW5vO30KLQotfSAjIGFjX2ZuX2NfY2hlY2tfdHlwZQotCi0jIGFj X2ZuX2NfZmluZF9pbnRYX3QgTElORU5PIEJJVFMgVkFSCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCi0jIEZpbmRzIGEgc2lnbmVkIGludGVnZXIgdHlwZSB3aXRoIHdpZHRo IEJJVFMsIHNldHRpbmcgY2FjaGUgdmFyaWFibGUgVkFSCi0jIGFjY29yZGluZ2x5LgotYWNfZm5f Y19maW5kX2ludFhfdCAoKQotewotICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGlu ZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCi0gIHsgJGFzX2VjaG8g IiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGludCQyX3QiID4mNQot JGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGludCQyX3QuLi4gIiA+JjY7IH0KLWlmIGV2YWwgInRl c3QgXCJcJHskMytzZXR9XCIiID0gc2V0OyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkg IiA+JjYKLWVsc2UKLSAgZXZhbCAiJDM9bm8iCi0gICAgICMgT3JkZXIgaXMgaW1wb3J0YW50IC0g bmV2ZXIgY2hlY2sgYSB0eXBlIHRoYXQgaXMgcG90ZW50aWFsbHkgc21hbGxlcgotICAgICAjIHRo YW4gaGFsZiBvZiB0aGUgZXhwZWN0ZWQgdGFyZ2V0IHdpZHRoLgotICAgICBmb3IgYWNfdHlwZSBp biBpbnQkMl90ICdpbnQnICdsb25nIGludCcgXAotCSAnbG9uZyBsb25nIGludCcgJ3Nob3J0IGlu dCcgJ3NpZ25lZCBjaGFyJzsgZG8KLSAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5j b25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVm YXVsdAotCSAgICAgZW51bSB7IE4gPSAkMiAvIDIgLSAxIH07Ci1pbnQKLW1haW4gKCkKLXsKLXN0 YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKDAgPCAoJGFjX3R5cGUpICgoKCgoJGFjX3R5 cGUpIDEgPDwgTikgPDwgTikgLSAxKSAqIDIgKyAxKSldOwotdGVzdF9hcnJheSBbMF0gPSAwCi0K LSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJ TkVOTyI7IHRoZW4gOgotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNf ZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotCSAgICAg ICAgZW51bSB7IE4gPSAkMiAvIDIgLSAxIH07Ci1pbnQKLW1haW4gKCkKLXsKLXN0YXRpYyBpbnQg dGVzdF9hcnJheSBbMSAtIDIgKiAhKCgkYWNfdHlwZSkgKCgoKCgkYWNfdHlwZSkgMSA8PCBOKSA8 PCBOKSAtIDEpICogMiArIDEpCi0JCSA8ICgkYWNfdHlwZSkgKCgoKCgkYWNfdHlwZSkgMSA8PCBO KSA8PCBOKSAtIDEpICogMiArIDIpKV07Ci10ZXN0X2FycmF5IFswXSA9IDAKLQotICA7Ci0gIHJl dHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhl biA6Ci0KLWVsc2UKLSAgY2FzZSAkYWNfdHlwZSBpbiAjKAotICBpbnQkMl90KSA6Ci0gICAgZXZh bCAiJDM9eWVzIiA7OyAjKAotICAqKSA6Ci0gICAgZXZhbCAiJDM9XCRhY190eXBlIiA7OwotZXNh YwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRl c3QuJGFjX2V4dAotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpl eHQgY29uZnRlc3QuJGFjX2V4dAotICAgICAgIGlmIGV2YWwgdGVzdCBcInhcJCIkMyJcIiA9IHgi bm8iOyB0aGVuIDoKLQotZWxzZQotICBicmVhawotZmkKLSAgICAgZG9uZQotZmkKLWV2YWwgYWNf cmVzPVwkJDMKLQkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99 OiByZXN1bHQ6ICRhY19yZXMiID4mNQotJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQotICBldmFs ICRhc19saW5lbm9fc3RhY2s7IHRlc3QgIngkYXNfbGluZW5vX3N0YWNrIiA9IHggJiYgeyBhc19s aW5lbm89OyB1bnNldCBhc19saW5lbm87fQotCi19ICMgYWNfZm5fY19maW5kX2ludFhfdAotCi0j IGFjX2ZuX2NfY2hlY2tfbWVtYmVyIExJTkVOTyBBR0dSIE1FTUJFUiBWQVIgSU5DTFVERVMKLSMg LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBU cmllcyB0byBmaW5kIGlmIHRoZSBmaWVsZCBNRU1CRVIgZXhpc3RzIGluIHR5cGUgQUdHUiwgYWZ0 ZXIgaW5jbHVkaW5nCi0jIElOQ0xVREVTLCBzZXR0aW5nIGNhY2hlIHZhcmlhYmxlIFZBUiBhY2Nv cmRpbmdseS4KLWFjX2ZuX2NfY2hlY2tfbWVtYmVyICgpCi17Ci0gIGFzX2xpbmVubz0ke2FzX2xp bmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3Rh Y2sKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBm b3IgJDIuJDMiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICQyLiQzLi4uICIgPiY2OyB9 Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JDQrc2V0fVwiIiA9IHNldDsgdGhlbiA6Ci0gICRhc19lY2hv X24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNv bmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSQ1Ci1pbnQKLW1haW4gKCkK LXsKLXN0YXRpYyAkMiBhY19hZ2dyOwotaWYgKGFjX2FnZ3IuJDMpCi1yZXR1cm4gMDsKLSAgOwot ICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7 IHRoZW4gOgotICBldmFsICIkND15ZXMiCi1lbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNF T0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSQ1Ci1pbnQKLW1h aW4gKCkKLXsKLXN0YXRpYyAkMiBhY19hZ2dyOwotaWYgKHNpemVvZiBhY19hZ2dyLiQzKQotcmV0 dXJuIDA7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBp bGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgZXZhbCAiJDQ9eWVzIgotZWxzZQotICBldmFsICIkND1u byIKLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0 ZXN0LiRhY19leHQKLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2Jq ZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1ldmFsIGFjX3Jlcz1cJCQ0Ci0JICAgICAgIHsgJGFz X2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUK LSRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KLSAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyB0ZXN0 ICJ4JGFzX2xpbmVub19zdGFjayIgPSB4ICYmIHsgYXNfbGluZW5vPTsgdW5zZXQgYXNfbGluZW5v O30KLQotfSAjIGFjX2ZuX2NfY2hlY2tfbWVtYmVyCi0KLSMgYWNfZm5fY19maW5kX3VpbnRYX3Qg TElORU5PIEJJVFMgVkFSCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot IyBGaW5kcyBhbiB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUgd2l0aCB3aWR0aCBCSVRTLCBzZXR0aW5n IGNhY2hlIHZhcmlhYmxlIFZBUgotIyBhY2NvcmRpbmdseS4KLWFjX2ZuX2NfZmluZF91aW50WF90 ICgpCi17Ci0gIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNf bGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgdWludCQyX3QiID4mNQotJGFzX2VjaG9fbiAi Y2hlY2tpbmcgZm9yIHVpbnQkMl90Li4uICIgPiY2OyB9Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JDMr c2V0fVwiIiA9IHNldDsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNl Ci0gIGV2YWwgIiQzPW5vIgotICAgICAjIE9yZGVyIGlzIGltcG9ydGFudCAtIG5ldmVyIGNoZWNr IGEgdHlwZSB0aGF0IGlzIHBvdGVudGlhbGx5IHNtYWxsZXIKLSAgICAgIyB0aGFuIGhhbGYgb2Yg dGhlIGV4cGVjdGVkIHRhcmdldCB3aWR0aC4KLSAgICAgZm9yIGFjX3R5cGUgaW4gdWludCQyX3Qg J3Vuc2lnbmVkIGludCcgJ3Vuc2lnbmVkIGxvbmcgaW50JyBcCi0JICd1bnNpZ25lZCBsb25nIGxv bmcgaW50JyAndW5zaWduZWQgc2hvcnQgaW50JyAndW5zaWduZWQgY2hhcic7IGRvCi0gICAgICAg Y2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZk ZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotc3RhdGlj IGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKCgkYWNfdHlwZSkgLTEgPj4gKCQyIC8gMiAtIDEp KSA+PiAoJDIgLyAyIC0gMSkgPT0gMyldOwotdGVzdF9hcnJheSBbMF0gPSAwCi0KLSAgOwotICBy ZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRo ZW4gOgotICBjYXNlICRhY190eXBlIGluICMoCi0gIHVpbnQkMl90KSA6Ci0gICAgZXZhbCAiJDM9 eWVzIiA7OyAjKAotICAqKSA6Ci0gICAgZXZhbCAiJDM9XCRhY190eXBlIiA7OwotZXNhYwotZmkK LXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFj X2V4dAotICAgICAgIGlmIGV2YWwgdGVzdCBcInhcJCIkMyJcIiA9IHgibm8iOyB0aGVuIDoKLQot ZWxzZQotICBicmVhawotZmkKLSAgICAgZG9uZQotZmkKLWV2YWwgYWNfcmVzPVwkJDMKLQkgICAg ICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19y ZXMiID4mNQotJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQotICBldmFsICRhc19saW5lbm9fc3Rh Y2s7IHRlc3QgIngkYXNfbGluZW5vX3N0YWNrIiA9IHggJiYgeyBhc19saW5lbm89OyB1bnNldCBh c19saW5lbm87fQotCi19ICMgYWNfZm5fY19maW5kX3VpbnRYX3QKIGNhdCA+Y29uZmlnLmxvZyA8 PF9BQ0VPRgogVGhpcyBmaWxlIGNvbnRhaW5zIGFueSBtZXNzYWdlcyBwcm9kdWNlZCBieSBjb21w aWxlcnMgd2hpbGUKIHJ1bm5pbmcgY29uZmlndXJlLCB0byBhaWQgZGVidWdnaW5nIGlmIGNvbmZp Z3VyZSBtYWtlcyBhIG1pc3Rha2UuCkBAIC0yMzg2LDExICsyMDYzLDYgQEAgJGFzX2VjaG8gIiRh c19tZTogY3JlYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CiAgID4kY2FjaGVfZmlsZQog ZmkKIAotYXNfZm5fYXBwZW5kIGFjX2hlYWRlcl9saXN0ICIgc3lzL3RpbWUuaCIKLWFzX2ZuX2Fw cGVuZCBhY19oZWFkZXJfbGlzdCAiIHVuaXN0ZC5oIgotYXNfZm5fYXBwZW5kIGFjX2Z1bmNfbGlz dCAiIGFsYXJtIgotYXNfZm5fYXBwZW5kIGFjX2hlYWRlcl9saXN0ICIgc3RkbGliLmgiCi1hc19m bl9hcHBlbmQgYWNfaGVhZGVyX2xpc3QgIiBzeXMvcGFyYW0uaCIKICMgQ2hlY2sgdGhhdCB0aGUg cHJlY2lvdXMgdmFyaWFibGVzIHNhdmVkIGluIHRoZSBjYWNoZSBoYXZlIGtlcHQgdGhlIHNhbWUK ICMgdmFsdWUuCiBhY19jYWNoZV9jb3JydXB0ZWQ9ZmFsc2UKQEAgLTI1MDgsMTczMCArMjE4MCw0 MCBAQCBBUFBFTkRfSU5DTFVERVMgYW5kIEFQUEVORF9MSUIgaW5zdGVhZCB3aGVuIHBvc3NpYmxl LiIgPiYyO30KIAogZmkKIAotYWNfZXh0PWMKLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCi1hY19j b21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1h Y19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZM QUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9j X2NvbXBpbGVyX2dudQotaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAjIEV4 dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9Z2NjIiwgc28gaXQgY2Fu IGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4 fWdjYzsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99 OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRh Y193b3JkLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7 IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1u ICIkQ0MiOyB0aGVuCi0gIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJp ZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9S Ci1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXog IiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVj dXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRh Y19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7 IH07IHRoZW4KLSAgICBhY19jdl9wcm9nX0NDPSIke2FjX3Rvb2xfcHJlZml4fWdjYyIKLSAgICAk YXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193 b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlG Uz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1DQz0kYWNfY3ZfcHJvZ19DQwotaWYgdGVzdCAtbiAi JENDIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJl c3VsdDogJENDIiA+JjUKLSRhc19lY2hvICIkQ0MiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hv ICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8g Im5vIiA+JjY7IH0KLWZpCi0KLQotZmkKLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX0NDIjsgdGhl bgotICBhY19jdF9DQz0kQ0MKLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJnY2MiLCBz byBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IGdjYzsgYWNf d29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2lu ZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4u ICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQ0Mrc2V0fSIgPSBzZXQ7IHRo ZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIk YWNfY3RfQ0MiOyB0aGVuCi0gIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19jdF9DQyIgIyBMZXQg dGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9 JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVf SUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0 IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIHsgdGVzdCAtZiAiJGFz X2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29y ZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSAgICBhY19jdl9wcm9nX2FjX2N0X0NDPSJnY2MiCi0g ICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8k YWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25l Ci1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotYWNfY3RfQ0M9JGFjX2N2X3Byb2dfYWNfY3Rf Q0MKLWlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9DQyIgPiY1Ci0kYXNfZWNobyAiJGFj X2N0X0NDIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRM SU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0gIGlm IHRlc3QgIngkYWNfY3RfQ0MiID0geDsgdGhlbgotICAgIENDPSIiCi0gIGVsc2UKLSAgICBjYXNl ICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCi15ZXM6KQoteyAkYXNfZWNobyAi JGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBu b3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FS TklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+ JjI7fQotYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci1lc2FjCi0gICAgQ0M9JGFjX2N0X0NDCi0gIGZp Ci1lbHNlCi0gIENDPSIkYWNfY3ZfcHJvZ19DQyIKLWZpCi0KLWlmIHRlc3QgLXogIiRDQyI7IHRo ZW4KLSAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICAgIyBF eHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWNjIiwgc28gaXQgY2Fu IGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4 fWNjOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFj X3dvcmQuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsg dGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4g IiRDQyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlk ZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IK LWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAi JGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1 dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFj X2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0Ijsg fTsgdGhlbgotICAgIGFjX2N2X3Byb2dfQ0M9IiR7YWNfdG9vbF9wcmVmaXh9Y2MiCi0gICAgJGFz X2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29y ZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9 JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotQ0M9JGFjX2N2X3Byb2dfQ0MKLWlmIHRlc3QgLW4gIiRD QyI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1 bHQ6ICRDQyIgPiY1Ci0kYXNfZWNobyAiJENDIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAi JGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJu byIgPiY2OyB9Ci1maQotCi0KLSAgZmkKLWZpCi1pZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCi0gICMg RXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5h bWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IGNjOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNf ZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNf Y3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIg PiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19DQz0iJEND IiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLSAgYWNfcHJvZ19yZWpl Y3RlZD1ubwotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2Rp ciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAm JiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRl bnNpb25zOyBkbwotICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQi ICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0g ICAgaWYgdGVzdCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPSAiL3Vzci91Y2IvY2Mi OyB0aGVuCi0gICAgICAgYWNfcHJvZ19yZWplY3RlZD15ZXMKLSAgICAgICBjb250aW51ZQotICAg ICBmaQotICAgIGFjX2N2X3Byb2dfQ0M9ImNjIgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQot ICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1pZiB0 ZXN0ICRhY19wcm9nX3JlamVjdGVkID0geWVzOyB0aGVuCi0gICMgV2UgZm91bmQgYSBib2dvbiBp biB0aGUgcGF0aCwgc28gbWFrZSBzdXJlIHdlIG5ldmVyIHVzZSBpdC4KLSAgc2V0IGR1bW15ICRh Y19jdl9wcm9nX0NDCi0gIHNoaWZ0Ci0gIGlmIHRlc3QgJCMgIT0gMDsgdGhlbgotICAgICMgV2Ug Y2hvc2UgYSBkaWZmZXJlbnQgY29tcGlsZXIgZnJvbSB0aGUgYm9ndXMgb25lLgotICAgICMgSG93 ZXZlciwgaXQgaGFzIHRoZSBzYW1lIGJhc2VuYW1lLCBzbyB0aGUgYm9nb24gd2lsbCBiZSBjaG9z ZW4KLSAgICAjIGZpcnN0IGlmIHdlIHNldCBDQyB0byBqdXN0IHRoZSBiYXNlbmFtZTsgdXNlIHRo ZSBmdWxsIGZpbGUgbmFtZS4KLSAgICBzaGlmdAotICAgIGFjX2N2X3Byb2dfQ0M9IiRhc19kaXIv JGFjX3dvcmQkezErJyAnfSRAIgotICBmaQotZmkKLWZpCi1maQotQ0M9JGFjX2N2X3Byb2dfQ0MK LWlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1Ci0kYXNfZWNobyAiJENDIiA+JjY7IH0KLWVsc2UK LSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+ JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLWZpCi1pZiB0ZXN0IC16ICIkQ0MiOyB0 aGVuCi0gIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgZm9yIGFjX3Byb2cg aW4gY2wuZXhlCi0gIGRvCi0gICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9v bF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3Mu Ci1zZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKLXsgJGFzX2Vj aG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+ JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgdGVz dCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNh Y2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgotICBhY19jdl9wcm9n X0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2 ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8K LSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAg IGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBp ZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3gg IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19D Qz0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xp bmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0g ICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1m aQotQ0M9JGFjX2N2X3Byb2dfQ0MKLWlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgeyAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1Ci0kYXNfZWNo byAiJENDIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRM SU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLSAg ICB0ZXN0IC1uICIkQ0MiICYmIGJyZWFrCi0gIGRvbmUKLWZpCi1pZiB0ZXN0IC16ICIkQ0MiOyB0 aGVuCi0gIGFjX2N0X0NDPSRDQwotICBmb3IgYWNfcHJvZyBpbiBjbC5leGUKLWRvCi0gICMgRXh0 cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFt IG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCi17ICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIg PiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmIHRl c3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9DQytzZXR9IiA9IHNldDsgdGhlbiA6Ci0gICRhc19lY2hv X24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4K LSAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX2N0X0NDIiAjIExldCB0aGUgdXNlciBvdmVycmlk ZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IK LWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAi JGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1 dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFj X2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0Ijsg fTsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19wcm9nIgotICAgICRhc19lY2hv ICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNf ZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19z YXZlX0lGUwotCi1maQotZmkKLWFjX2N0X0NDPSRhY19jdl9wcm9nX2FjX2N0X0NDCi1pZiB0ZXN0 IC1uICIkYWNfY3RfQ0MiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0k TElORU5PfTogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQotJGFzX2VjaG8gIiRhY19jdF9DQyIgPiY2 OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVz dWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotCi0gIHRlc3QgLW4gIiRh Y19jdF9DQyIgJiYgYnJlYWsKLWRvbmUKLQotICBpZiB0ZXN0ICJ4JGFjX2N0X0NDIiA9IHg7IHRo ZW4KLSAgICBDQz0iIgotICBlbHNlCi0gICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29s X3dhcm5lZCBpbgoteWVzOikKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlw bGV0IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5v dCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KLWFjX3Rvb2xfd2FybmVkPXllcyA7 OwotZXNhYwotICAgIENDPSRhY19jdF9DQwotICBmaQotZmkKLQotZmkKLQotCi10ZXN0IC16ICIk Q0MiICYmIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjog aW4gXGAkYWNfcHdkJzoiID4mNQotJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3 ZCc6IiA+JjI7fQotYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgQyBjb21waWxlciBmb3Vu ZCBpbiBcJFBBVEgKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5P IiA1IDsgfQotCi0jIFByb3ZpZGUgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tcGlsZXIu Ci0kYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQyBj b21waWxlciB2ZXJzaW9uIiA+JjUKLXNldCBYICRhY19jb21waWxlCi1hY19jb21waWxlcj0kMgot Zm9yIGFjX29wdGlvbiBpbiAtLXZlcnNpb24gLXYgLVYgLXF2ZXJzaW9uOyBkbwotICB7IHsgYWNf dHJ5PSIkYWNfY29tcGlsZXIgJGFjX29wdGlvbiA+JjUiCi1jYXNlICIoKCRhY190cnkiIGluCi0g ICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlf ZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xp bmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCi0kYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsg fSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlciAkYWNfb3B0aW9uID4mNSIpIDI+Y29uZnRlc3Qu ZXJyCi0gIGFjX3N0YXR1cz0kPwotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAg IHNlZCAnMTBhXAotLi4uIHJlc3Qgb2Ygc3RkZXJyIG91dHB1dCBkZWxldGVkIC4uLgotICAgICAg ICAgMTBxJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQotICAgIGNhdCBjb25mdGVzdC5lcjEg PiY1Ci0gIGZpCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKLSAgJGFzX2VjaG8g IiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRl c3QgJGFjX3N0YXR1cyA9IDA7IH0KLWRvbmUKLQotY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+ Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkK LXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1hY19jbGVhbl9maWxlc19zYXZlPSRh Y19jbGVhbl9maWxlcwotYWNfY2xlYW5fZmlsZXM9IiRhY19jbGVhbl9maWxlcyBhLm91dCBhLm91 dC5kU1lNIGEuZXhlIGIub3V0IgotIyBUcnkgdG8gY3JlYXRlIGFuIGV4ZWN1dGFibGUgd2l0aG91 dCAtbyBmaXJzdCwgZGlzcmVnYXJkIGEub3V0LgotIyBJdCB3aWxsIGhlbHAgdXMgZGlhZ25vc2Ug YnJva2VuIGNvbXBpbGVycywgYW5kIGZpbmRpbmcgb3V0IGFuIGludHVpdGlvbgotIyBvZiBleGVl eHQuCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdo ZXRoZXIgdGhlIEMgY29tcGlsZXIgd29ya3MiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hl dGhlciB0aGUgQyBjb21waWxlciB3b3Jrcy4uLiAiID4mNjsgfQotYWNfbGlua19kZWZhdWx0PWAk YXNfZWNobyAiJGFjX2xpbmsiIHwgc2VkICdzLyAtbyAqY29uZnRlc3RbXiBdKi8vJ2AKLQotIyBU aGUgcG9zc2libGUgb3V0cHV0IGZpbGVzOgotYWNfZmlsZXM9ImEub3V0IGNvbmZ0ZXN0LmV4ZSBj b25mdGVzdCBhLmV4ZSBhX291dC5leGUgYi5vdXQgY29uZnRlc3QuKiIKLQotYWNfcm1maWxlcz0K LWZvciBhY19maWxlIGluICRhY19maWxlcwotZG8KLSAgY2FzZSAkYWNfZmlsZSBpbgotICAgICou JGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8 ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICouZFNZTSB8ICoubyB8ICoub2JqICkgOzsKLSAgICAq ICkgYWNfcm1maWxlcz0iJGFjX3JtZmlsZXMgJGFjX2ZpbGUiOzsKLSAgZXNhYwotZG9uZQotcm0g LWYgJGFjX3JtZmlsZXMKLQotaWYgeyB7IGFjX3RyeT0iJGFjX2xpbmtfZGVmYXVsdCIKLWNhc2Ug IigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3Ry eTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCBhY190cnlfZWNobz0i XCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKLSRhc19lY2hv ICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQotICAoZXZhbCAiJGFjX2xpbmtfZGVmYXVsdCIpIDI+JjUK LSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuIDoK LSAgIyBBdXRvY29uZi0yLjEzIGNvdWxkIHNldCB0aGUgYWNfY3ZfZXhlZXh0IHZhcmlhYmxlIHRv IGBubycuCi0jIFNvIGlnbm9yZSBhIHZhbHVlIG9mIGBubycsIG90aGVyd2lzZSB0aGlzIHdvdWxk IGxlYWQgdG8gYEVYRUVYVCA9IG5vJwotIyBpbiBhIE1ha2VmaWxlLiAgV2Ugc2hvdWxkIG5vdCBv dmVycmlkZSBhY19jdl9leGVleHQgaWYgaXQgd2FzIGNhY2hlZCwKLSMgc28gdGhhdCB0aGUgdXNl ciBjYW4gc2hvcnQtY2lyY3VpdCB0aGlzIHRlc3QgZm9yIGNvbXBpbGVycyB1bmtub3duIHRvCi0j IEF1dG9jb25mLgotZm9yIGFjX2ZpbGUgaW4gJGFjX2ZpbGVzICcnCi1kbwotICB0ZXN0IC1mICIk YWNfZmlsZSIgfHwgY29udGludWUKLSAgY2FzZSAkYWNfZmlsZSBpbgotICAgICouJGFjX2V4dCB8 ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwg Ki5tYXAgfCAqLmluZiB8ICouZFNZTSB8ICoubyB8ICoub2JqICkKLQk7OwotICAgIFthYl0ub3V0 ICkKLQkjIFdlIGZvdW5kIHRoZSBkZWZhdWx0IGV4ZWN1dGFibGUsIGJ1dCBleGVleHQ9JycgaXMg bW9zdAotCSMgY2VydGFpbmx5IHJpZ2h0LgotCWJyZWFrOzsKLSAgICAqLiogKQotCWlmIHRlc3Qg IiR7YWNfY3ZfZXhlZXh0K3NldH0iID0gc2V0ICYmIHRlc3QgIiRhY19jdl9leGVleHQiICE9IG5v OwotCXRoZW4gOjsgZWxzZQotCSAgIGFjX2N2X2V4ZWV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJ1te Ll0qXChcLi4qXCknYAotCWZpCi0JIyBXZSBzZXQgYWNfY3ZfZXhlZXh0IGhlcmUgYmVjYXVzZSB0 aGUgbGF0ZXIgdGVzdCBmb3IgaXQgaXMgbm90Ci0JIyBzYWZlOiBjcm9zcyBjb21waWxlcnMgbWF5 IG5vdCBhZGQgdGhlIHN1ZmZpeCBpZiBnaXZlbiBhbiBgLW8nCi0JIyBhcmd1bWVudCwgc28gd2Ug bWF5IG5lZWQgdG8ga25vdyBpdCBhdCB0aGF0IHBvaW50IGFscmVhZHkuCi0JIyBFdmVuIGlmIHRo aXMgc2VjdGlvbiBsb29rcyBjcnVmdHk6IGl0IGhhcyB0aGUgYWR2YW50YWdlIG9mCi0JIyBhY3R1 YWxseSB3b3JraW5nLgotCWJyZWFrOzsKLSAgICAqICkKLQlicmVhazs7Ci0gIGVzYWMKLWRvbmUK LXRlc3QgIiRhY19jdl9leGVleHQiID0gbm8gJiYgYWNfY3ZfZXhlZXh0PQotCi1lbHNlCi0gIGFj X2ZpbGU9JycKLWZpCi1pZiB0ZXN0IC16ICIkYWNfZmlsZSI7IHRoZW4gOgotICB7ICRhc19lY2hv ICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8g Im5vIiA+JjY7IH0KLSRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQot c2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi17IHsgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKLSRhc19l Y2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KLWFzX2ZuX2Vycm9yIDc3 ICJDIGNvbXBpbGVyIGNhbm5vdCBjcmVhdGUgZXhlY3V0YWJsZXMKLVNlZSBcYGNvbmZpZy5sb2cn IGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1IDsgfQotZWxzZQotICB7ICRhc19lY2hvICIk YXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5 ZXMiID4mNjsgfQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog Y2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgZGVmYXVsdCBvdXRwdXQgZmlsZSBuYW1lIiA+JjUKLSRh c19lY2hvX24gImNoZWNraW5nIGZvciBDIGNvbXBpbGVyIGRlZmF1bHQgb3V0cHV0IGZpbGUgbmFt ZS4uLiAiID4mNjsgfQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBy ZXN1bHQ6ICRhY19maWxlIiA+JjUKLSRhc19lY2hvICIkYWNfZmlsZSIgPiY2OyB9Ci1hY19leGVl eHQ9JGFjX2N2X2V4ZWV4dAotCi1ybSAtZiAtciBhLm91dCBhLm91dC5kU1lNIGEuZXhlIGNvbmZ0 ZXN0JGFjX2N2X2V4ZWV4dCBiLm91dAotYWNfY2xlYW5fZmlsZXM9JGFjX2NsZWFuX2ZpbGVzX3Nh dmUKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9y IHN1ZmZpeCBvZiBleGVjdXRhYmxlcyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3Igc3Vm Zml4IG9mIGV4ZWN1dGFibGVzLi4uICIgPiY2OyB9Ci1pZiB7IHsgYWNfdHJ5PSIkYWNfbGluayIK LWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1c JGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCBhY190cnlf ZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKLSRh c19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQotICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1Ci0g IGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBc JD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbiA6Ci0g ICMgSWYgYm90aCBgY29uZnRlc3QuZXhlJyBhbmQgYGNvbmZ0ZXN0JyBhcmUgYHByZXNlbnQnICh3 ZWxsLCBvYnNlcnZhYmxlKQotIyBjYXRjaCBgY29uZnRlc3QuZXhlJy4gIEZvciBpbnN0YW5jZSB3 aXRoIEN5Z3dpbiwgYGxzIGNvbmZ0ZXN0JyB3aWxsCi0jIHdvcmsgcHJvcGVybHkgKGkuZS4sIHJl ZmVyIHRvIGBjb25mdGVzdC5leGUnKSwgd2hpbGUgaXQgd29uJ3Qgd2l0aAotIyBgcm0nLgotZm9y IGFjX2ZpbGUgaW4gY29uZnRlc3QuZXhlIGNvbmZ0ZXN0IGNvbmZ0ZXN0Lio7IGRvCi0gIHRlc3Qg LWYgIiRhY19maWxlIiB8fCBjb250aW51ZQotICBjYXNlICRhY19maWxlIGluCi0gICAgKi4kYWNf ZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5i YmcgfCAqLm1hcCB8ICouaW5mIHwgKi5kU1lNIHwgKi5vIHwgKi5vYmogKSA7OwotICAgICouKiAp IGFjX2N2X2V4ZWV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJ1teLl0qXChcLi4qXCknYAotCSAgYnJl YWs7OwotICAgICogKSBicmVhazs7Ci0gIGVzYWMKLWRvbmUKLWVsc2UKLSAgeyB7ICRhc19lY2hv ICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1 Ci0kYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Ci1hc19mbl9l cnJvciAkPyAiY2Fubm90IGNvbXB1dGUgc3VmZml4IG9mIGV4ZWN1dGFibGVzOiBjYW5ub3QgY29t cGlsZSBhbmQgbGluawotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5F Tk8iIDUgOyB9Ci1maQotcm0gLWYgY29uZnRlc3QgY29uZnRlc3QkYWNfY3ZfZXhlZXh0Ci17ICRh c19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2V4ZWV4 dCIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2V4ZWV4dCIgPiY2OyB9Ci0KLXJtIC1mIGNvbmZ0ZXN0 LiRhY19leHQKLUVYRUVYVD0kYWNfY3ZfZXhlZXh0Ci1hY19leGVleHQ9JEVYRUVYVAotY2F0IGNv bmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmgu ICAqLwotI2luY2x1ZGUgPHN0ZGlvLmg+Ci1pbnQKLW1haW4gKCkKLXsKLUZJTEUgKmYgPSBmb3Bl biAoImNvbmZ0ZXN0Lm91dCIsICJ3Iik7Ci0gcmV0dXJuIGZlcnJvciAoZikgfHwgZmNsb3NlIChm KSAhPSAwOwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWFjX2NsZWFuX2ZpbGVzPSIk YWNfY2xlYW5fZmlsZXMgY29uZnRlc3Qub3V0IgotIyBDaGVjayB0aGF0IHRoZSBjb21waWxlciBw cm9kdWNlcyBleGVjdXRhYmxlcyB3ZSBjYW4gcnVuLiAgSWYgbm90LCBlaXRoZXIKLSMgdGhlIGNv bXBpbGVyIGlzIGJyb2tlbiwgb3Igd2UgY3Jvc3MgY29tcGlsZS4KLXsgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgY3Jvc3MgY29t cGlsaW5nIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIGNyb3NzIGNv bXBpbGluZy4uLiAiID4mNjsgfQotaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgIT0geWVzOyB0 aGVuCi0gIHsgeyBhY190cnk9IiRhY19saW5rIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIq IHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89 JGFjX3RyeTs7Ci1lc2FjCi1ldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8t JExJTkVOT306ICRhY190cnlfZWNob1wiIgotJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1 Ci0gIChldmFsICIkYWNfbGluayIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIk YXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0 ICRhY19zdGF0dXMgPSAwOyB9Ci0gIGlmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2N2X2V4ZWV4 dCcKLSAgeyB7IGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190 cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZh bCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2Vj aG9cIiIKLSRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQotICAoZXZhbCAiJGFjX3RyeSIp IDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJ TkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB9 OyB0aGVuCi0gICAgY3Jvc3NfY29tcGlsaW5nPW5vCi0gIGVsc2UKLSAgICBpZiB0ZXN0ICIkY3Jv c3NfY29tcGlsaW5nIiA9IG1heWJlOyB0aGVuCi0JY3Jvc3NfY29tcGlsaW5nPXllcwotICAgIGVs c2UKLQl7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGlu IFxgJGFjX3B3ZCc6IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2Qn OiIgPiYyO30KLWFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgcnVuIEMgY29tcGlsZWQgcHJvZ3JhbXMu Ci1JZiB5b3UgbWVhbnQgdG8gY3Jvc3MgY29tcGlsZSwgdXNlIFxgLS1ob3N0Jy4KLVNlZSBcYGNv bmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1IDsgfQotICAgIGZpCi0gIGZp Ci1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRj cm9zc19jb21waWxpbmciID4mNQotJGFzX2VjaG8gIiRjcm9zc19jb21waWxpbmciID4mNjsgfQot Ci1ybSAtZiBjb25mdGVzdC4kYWNfZXh0IGNvbmZ0ZXN0JGFjX2N2X2V4ZWV4dCBjb25mdGVzdC5v dXQKLWFjX2NsZWFuX2ZpbGVzPSRhY19jbGVhbl9maWxlc19zYXZlCi17ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZp bGVzIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZpbGVz Li4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X29iamV4dCtzZXR9IiA9IHNldDsgdGhlbiA6 Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0g PDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50 Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRl c3QubyBjb25mdGVzdC5vYmoKLWlmIHsgeyBhY190cnk9IiRhY19jb21waWxlIgotY2FzZSAiKCgk YWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsK LSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsIGFjX3RyeV9lY2hvPSJcIlwk YXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgotJGFzX2VjaG8gIiRh Y190cnlfZWNobyI7IH0gPiY1Ci0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+JjUKLSAgYWNfc3Rh dHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRh Y19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuIDoKLSAgZm9yIGFj X2ZpbGUgaW4gY29uZnRlc3QubyBjb25mdGVzdC5vYmogY29uZnRlc3QuKjsgZG8KLSAgdGVzdCAt ZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlOwotICBjYXNlICRhY19maWxlIGluCi0gICAgKi4kYWNf ZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5i YmcgfCAqLm1hcCB8ICouaW5mIHwgKi5kU1lNICkgOzsKLSAgICAqKSBhY19jdl9vYmpleHQ9YGV4 cHIgIiRhY19maWxlIiA6ICcuKlwuXCguKlwpJ2AKLSAgICAgICBicmVhazs7Ci0gIGVzYWMKLWRv bmUKLWVsc2UKLSAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1z ZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLXsgeyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQotJGFzX2Vj aG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQotYXNfZm5fZXJyb3IgJD8g ImNhbm5vdCBjb21wdXRlIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXM6IGNhbm5vdCBjb21waWxlCi1T ZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNSA7IH0KLWZpCi1y bSAtZiBjb25mdGVzdC4kYWNfY3Zfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi17ICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X29iamV4dCIg PiY1Ci0kYXNfZWNobyAiJGFjX2N2X29iamV4dCIgPiY2OyB9Ci1PQkpFWFQ9JGFjX2N2X29iamV4 dAotYWNfb2JqZXh0PSRPQkpFWFQKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVyIiA+ JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBj b21waWxlci4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9jX2NvbXBpbGVyX2dudStzZXR9 IiA9IHNldDsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGNh dCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVm cy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0jaWZuZGVmIF9fR05VQ19fCi0gICAgICAgY2hv a2UgbWUKLSNlbmRpZgotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2Nf dHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY29tcGlsZXJfZ251PXllcwotZWxz ZQotICBhY19jb21waWxlcl9nbnU9bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25m dGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWFjX2N2X2NfY29tcGlsZXJfZ251PSRh Y19jb21waWxlcl9nbnUKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogcmVzdWx0OiAkYWNfY3ZfY19jb21waWxlcl9nbnUiID4mNQotJGFzX2VjaG8gIiRhY19j dl9jX2NvbXBpbGVyX2dudSIgPiY2OyB9Ci1pZiB0ZXN0ICRhY19jb21waWxlcl9nbnUgPSB5ZXM7 IHRoZW4KLSAgR0NDPXllcwotZWxzZQotICBHQ0M9Ci1maQotYWNfdGVzdF9DRkxBR1M9JHtDRkxB R1Mrc2V0fQotYWNfc2F2ZV9DRkxBR1M9JENGTEFHUwoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1nIiA+JjUKLSRh c19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLWcuLi4gIiA+JjY7IH0KLWlm IHRlc3QgIiR7YWNfY3ZfcHJvZ19jY19nK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgJGFzX2VjaG9f biAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgYWNfc2F2ZV9jX3dlcnJvcl9mbGFnPSRhY19jX3dl cnJvcl9mbGFnCi0gICBhY19jX3dlcnJvcl9mbGFnPXllcwotICAgYWNfY3ZfcHJvZ19jY19nPW5v Ci0gICBDRkxBR1M9Ii1nIgotICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3Qu JGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7 Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5P IjsgdGhlbiA6Ci0gIGFjX2N2X3Byb2dfY2NfZz15ZXMKLWVsc2UKLSAgQ0ZMQUdTPSIiCi0gICAg ICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29u ZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1f QUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLQotZWxzZQot ICBhY19jX3dlcnJvcl9mbGFnPSRhY19zYXZlX2Nfd2Vycm9yX2ZsYWcKLQkgQ0ZMQUdTPSItZyIK LQkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNv bmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQot X0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2 X3Byb2dfY2NfZz15ZXMKLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNf b2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25m dGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0 LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgIGFjX2Nfd2Vycm9y X2ZsYWc9JGFjX3NhdmVfY193ZXJyb3JfZmxhZwotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2Fz X2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jY19nIiA+JjUKLSRhc19lY2hv ICIkYWNfY3ZfcHJvZ19jY19nIiA+JjY7IH0KLWlmIHRlc3QgIiRhY190ZXN0X0NGTEFHUyIgPSBz ZXQ7IHRoZW4KLSAgQ0ZMQUdTPSRhY19zYXZlX0NGTEFHUwotZWxpZiB0ZXN0ICRhY19jdl9wcm9n X2NjX2cgPSB5ZXM7IHRoZW4KLSAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgICBDRkxB R1M9Ii1nIC1PMiIKLSAgZWxzZQotICAgIENGTEFHUz0iLWciCi0gIGZpCi1lbHNlCi0gIGlmIHRl c3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICAgQ0ZMQUdTPSItTzIiCi0gIGVsc2UKLSAgICBDRkxB R1M9Ci0gIGZpCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBj aGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgSVNPIEM4OSIgPiY1Ci0kYXNfZWNob19u ICJjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgSVNPIEM4OS4uLiAiID4mNjsgfQot aWYgdGVzdCAiJHthY19jdl9wcm9nX2NjX2M4OStzZXR9IiA9IHNldDsgdGhlbiA6Ci0gICRhc19l Y2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGFjX2N2X3Byb2dfY2NfYzg5PW5vCi1hY19z YXZlX0NDPSRDQwotY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAot LyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgPHN0 ZGlvLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLS8q IE1vc3Qgb2YgdGhlIGZvbGxvd2luZyB0ZXN0cyBhcmUgc3RvbGVuIGZyb20gUkNTIDUuNydzIHNy Yy9jb25mLnNoLiAgKi8KLXN0cnVjdCBidWYgeyBpbnQgeDsgfTsKLUZJTEUgKiAoKnJjc29wZW4p IChzdHJ1Y3QgYnVmICosIHN0cnVjdCBzdGF0ICosIGludCk7Ci1zdGF0aWMgY2hhciAqZSAocCwg aSkKLSAgICAgY2hhciAqKnA7Ci0gICAgIGludCBpOwotewotICByZXR1cm4gcFtpXTsKLX0KLXN0 YXRpYyBjaGFyICpmIChjaGFyICogKCpnKSAoY2hhciAqKiwgaW50KSwgY2hhciAqKnAsIC4uLikK LXsKLSAgY2hhciAqczsKLSAgdmFfbGlzdCB2OwotICB2YV9zdGFydCAodixwKTsKLSAgcyA9IGcg KHAsIHZhX2FyZyAodixpbnQpKTsKLSAgdmFfZW5kICh2KTsKLSAgcmV0dXJuIHM7Ci19Ci0KLS8q IE9TRiA0LjAgQ29tcGFxIGNjIGlzIHNvbWUgc29ydCBvZiBhbG1vc3QtQU5TSSBieSBkZWZhdWx0 LiAgSXQgaGFzCi0gICBmdW5jdGlvbiBwcm90b3R5cGVzIGFuZCBzdHVmZiwgYnV0IG5vdCAnXHhI SCcgaGV4IGNoYXJhY3RlciBjb25zdGFudHMuCi0gICBUaGVzZSBkb24ndCBwcm92b2tlIGFuIGVy cm9yIHVuZm9ydHVuYXRlbHksIGluc3RlYWQgYXJlIHNpbGVudGx5IHRyZWF0ZWQKLSAgIGFzICd4 Jy4gIFRoZSBmb2xsb3dpbmcgaW5kdWNlcyBhbiBlcnJvciwgdW50aWwgLXN0ZCBpcyBhZGRlZCB0 byBnZXQKLSAgIHByb3BlciBBTlNJIG1vZGUuICBDdXJpb3VzbHkgJ1x4MDAnIT0neCcgYWx3YXlz IGNvbWVzIG91dCB0cnVlLCBmb3IgYW4KLSAgIGFycmF5IHNpemUgYXQgbGVhc3QuICBJdCdzIG5l Y2Vzc2FyeSB0byB3cml0ZSAnXHgwMCc9PTAgdG8gZ2V0IHNvbWV0aGluZwotICAgdGhhdCdzIHRy dWUgb25seSB3aXRoIC1zdGQuICAqLwotaW50IG9zZjRfY2NfYXJyYXkgWydceDAwJyA9PSAwID8g MSA6IC0xXTsKLQotLyogSUJNIEMgNiBmb3IgQUlYIGlzIGFsbW9zdC1BTlNJIGJ5IGRlZmF1bHQs IGJ1dCBpdCByZXBsYWNlcyBtYWNybyBwYXJhbWV0ZXJzCi0gICBpbnNpZGUgc3RyaW5ncyBhbmQg Y2hhcmFjdGVyIGNvbnN0YW50cy4gICovCi0jZGVmaW5lIEZPTyh4KSAneCcKLWludCB4bGM2X2Nj X2FycmF5W0ZPTyhhKSA9PSAneCcgPyAxIDogLTFdOwotCi1pbnQgdGVzdCAoaW50IGksIGRvdWJs ZSB4KTsKLXN0cnVjdCBzMSB7aW50ICgqZikgKGludCBhKTt9Owotc3RydWN0IHMyIHtpbnQgKCpm KSAoZG91YmxlIGEpO307Ci1pbnQgcGFpcm5hbWVzIChpbnQsIGNoYXIgKiosIEZJTEUgKigqKShz dHJ1Y3QgYnVmICosIHN0cnVjdCBzdGF0ICosIGludCksIGludCwgaW50KTsKLWludCBhcmdjOwot Y2hhciAqKmFyZ3Y7Ci1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmIChlLCBhcmd2LCAwKSAhPSBh cmd2WzBdICB8fCAgZiAoZSwgYXJndiwgMSkgIT0gYXJndlsxXTsKLSAgOwotICByZXR1cm4gMDsK LX0KLV9BQ0VPRgotZm9yIGFjX2FyZyBpbiAnJyAtcWxhbmdsdmw9ZXh0Yzg5IC1xbGFuZ2x2bD1h bnNpIC1zdGQgXAotCS1BZSAiLUFhIC1EX0hQVVhfU09VUkNFIiAiLVhjIC1EX19FWFRFTlNJT05T X18iCi1kbwotICBDQz0iJGFjX3NhdmVfQ0MgJGFjX2FyZyIKLSAgaWYgYWNfZm5fY190cnlfY29t cGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9wcm9nX2NjX2M4OT0kYWNfYXJnCi1maQot cm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dAotICB0ZXN0ICJ4JGFj X2N2X3Byb2dfY2NfYzg5IiAhPSAieG5vIiAmJiBicmVhawotZG9uZQotcm0gLWYgY29uZnRlc3Qu JGFjX2V4dAotQ0M9JGFjX3NhdmVfQ0MKLQotZmkKLSMgQUNfQ0FDSEVfVkFMCi1jYXNlICJ4JGFj X2N2X3Byb2dfY2NfYzg5IiBpbgotICB4KQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xp bmVuby0kTElORU5PfTogcmVzdWx0OiBub25lIG5lZWRlZCIgPiY1Ci0kYXNfZWNobyAibm9uZSBu ZWVkZWQiID4mNjsgfSA7OwotICB4bm8pCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGlu ZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVuc3VwcG9ydGVkIiA+JjUKLSRhc19lY2hvICJ1bnN1cHBv cnRlZCIgPiY2OyB9IDs7Ci0gICopCi0gICAgQ0M9IiRDQyAkYWNfY3ZfcHJvZ19jY19jODkiCi0g ICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19j dl9wcm9nX2NjX2M4OSIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X3Byb2dfY2NfYzg5IiA+JjY7IH0g OzsKLWVzYWMKLWlmIHRlc3QgIngkYWNfY3ZfcHJvZ19jY19jODkiICE9IHhubzsgdGhlbiA6Ci0K LWZpCi0KLWFjX2V4dD1jCi1hY19jcHA9JyRDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJEND IC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJEND IC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVz dC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9n bnUKLQotCi1hY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRD QyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRD QyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRl c3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJf Z251Ci17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhv dyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGhv dyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yLi4uICIgPiY2OyB9Ci0jIE9uIFN1bnMsIHNvbWV0 aW1lcyAkQ1BQIG5hbWVzIGEgZGlyZWN0b3J5LgotaWYgdGVzdCAtbiAiJENQUCIgJiYgdGVzdCAt ZCAiJENQUCI7IHRoZW4KLSAgQ1BQPQotZmkKLWlmIHRlc3QgLXogIiRDUFAiOyB0aGVuCi0gIGlm IHRlc3QgIiR7YWNfY3ZfcHJvZ19DUFArc2V0fSIgPSBzZXQ7IHRoZW4gOgotICAkYXNfZWNob19u ICIoY2FjaGVkKSAiID4mNgotZWxzZQotICAgICAgIyBEb3VibGUgcXVvdGVzIGJlY2F1c2UgQ1BQ IG5lZWRzIHRvIGJlIGV4cGFuZGVkCi0gICAgZm9yIENQUCBpbiAiJENDIC1FIiAiJENDIC1FIC10 cmFkaXRpb25hbC1jcHAiICIvbGliL2NwcCIKLSAgICBkbwotICAgICAgYWNfcHJlcHJvY19vaz1m YWxzZQotZm9yIGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCi1kbwotICAjIFVzZSBh IGhlYWRlciBmaWxlIHRoYXQgY29tZXMgd2l0aCBnY2MsIHNvIGNvbmZpZ3VyaW5nIGdsaWJjCi0g ICMgd2l0aCBhIGZyZXNoIGNyb3NzLWNvbXBpbGVyIHdvcmtzLgotICAjIFByZWZlciA8bGltaXRz Lmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgIyA8bGlt aXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuCi0gICMgT24gdGhl IE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIs Ci0gICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0 Y2ggdGhpcyBjYXNlLgotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNf ZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8 bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCQkgICAgIFN5 bnRheCBlcnJvcgotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoK LQotZWxzZQotICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCi1jb250aW51ZQotZmkK LXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKLQotICAjIE9L LCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uZXhpc3RlbnQgaGVh ZGVycwotICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgotICBjYXQgY29uZmRlZnMuaCAtIDw8 X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVk ZSA8YWNfbm9uZXhpc3RlbnQuaD4KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY3BwICIkTElORU5P IjsgdGhlbiA6Ci0gICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCi1jb250aW51 ZQotZWxzZQotICAjIFBhc3NlcyBib3RoIHRlc3RzLgotYWNfcHJlcHJvY19vaz06Ci1icmVhawot ZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKLQotZG9u ZQotIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lGRUxTRSdzIGNsZWFuaW5nIGNv ZGUgd2FzIHNraXBwZWQuCi1ybSAtZiBjb25mdGVzdC5pIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4k YWNfZXh0Ci1pZiAkYWNfcHJlcHJvY19vazsgdGhlbiA6Ci0gIGJyZWFrCi1maQotCi0gICAgZG9u ZQotICAgIGFjX2N2X3Byb2dfQ1BQPSRDUFAKLQotZmkKLSAgQ1BQPSRhY19jdl9wcm9nX0NQUAot ZWxzZQotICBhY19jdl9wcm9nX0NQUD0kQ1BQCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDUFAiID4mNQotJGFzX2VjaG8gIiRDUFAiID4mNjsg fQotYWNfcHJlcHJvY19vaz1mYWxzZQotZm9yIGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycg eWVzCi1kbwotICAjIFVzZSBhIGhlYWRlciBmaWxlIHRoYXQgY29tZXMgd2l0aCBnY2MsIHNvIGNv bmZpZ3VyaW5nIGdsaWJjCi0gICMgd2l0aCBhIGZyZXNoIGNyb3NzLWNvbXBpbGVyIHdvcmtzLgot ICAjIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5l ZCwgc2luY2UKLSAgIyA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21w aWxlcnMuCi0gICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUg Y29tcGlsZXIncyBwYXJzZXIsCi0gICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJy b3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FD RU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaWZkZWYgX19T VERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4K LSNlbmRpZgotCQkgICAgIFN5bnRheCBlcnJvcgotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jcHAg IiRMSU5FTk8iOyB0aGVuIDoKLQotZWxzZQotICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5w dXQuCi1jb250aW51ZQotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0 LiRhY19leHQKLQotICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRo ZXIgbm9uZXhpc3RlbnQgaGVhZGVycwotICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgotICBj YXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRl ZnMuaC4gICovCi0jaW5jbHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KLV9BQ0VPRgotaWYgYWNfZm5f Y190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6Ci0gICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFs aWQgaW5wdXQuCi1jb250aW51ZQotZWxzZQotICAjIFBhc3NlcyBib3RoIHRlc3RzLgotYWNfcHJl cHJvY19vaz06Ci1icmVhawotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0 ZXN0LiRhY19leHQKLQotZG9uZQotIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lG RUxTRSdzIGNsZWFuaW5nIGNvZGUgd2FzIHNraXBwZWQuCi1ybSAtZiBjb25mdGVzdC5pIGNvbmZ0 ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci1pZiAkYWNfcHJlcHJvY19vazsgdGhlbiA6Ci0KLWVs c2UKLSAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBp biBcYCRhY19wd2QnOiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdk JzoiID4mMjt9Ci1hc19mbl9lcnJvciAkPyAiQyBwcmVwcm9jZXNzb3IgXCIkQ1BQXCIgZmFpbHMg c2FuaXR5IGNoZWNrCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVO TyIgNSA7IH0KLWZpCi0KLWFjX2V4dD1jCi1hY19jcHA9JyRDUFAgJENQUEZMQUdTJwotYWNfY29t cGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNf bGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFH UyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19j b21waWxlcl9nbnUKLQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IGNoZWNraW5nIGZvciBncmVwIHRoYXQgaGFuZGxlcyBsb25nIGxpbmVzIGFuZCAtZSIgPiY1Ci0k YXNfZWNob19uICJjaGVja2luZyBmb3IgZ3JlcCB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcyBhbmQg LWUuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9HUkVQK3NldH0iID0gc2V0OyB0 aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAteiAi JEdSRVAiOyB0aGVuCi0gIGFjX3BhdGhfR1JFUF9mb3VuZD1mYWxzZQotICAjIExvb3AgdGhyb3Vn aCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAotICBh c19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRI JFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbgotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0 ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19wcm9nIGluIGdyZXAgZ2dy ZXA7IGRvCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lv bnM7IGRvCi0gICAgICBhY19wYXRoX0dSRVA9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQi Ci0gICAgICB7IHRlc3QgLWYgIiRhY19wYXRoX0dSRVAiICYmICRhc190ZXN0X3ggIiRhY19wYXRo X0dSRVAiOyB9IHx8IGNvbnRpbnVlCi0jIENoZWNrIGZvciBHTlUgYWNfcGF0aF9HUkVQIGFuZCBz ZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCi0gICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9HUkVQ Ci1jYXNlIGAiJGFjX3BhdGhfR1JFUCIgLS12ZXJzaW9uIDI+JjFgIGluCi0qR05VKikKLSAgYWNf Y3ZfcGF0aF9HUkVQPSIkYWNfcGF0aF9HUkVQIiBhY19wYXRoX0dSRVBfZm91bmQ9Ojs7Ci0qKQot ICBhY19jb3VudD0wCi0gICRhc19lY2hvX24gMDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0LmluIgotICB3 aGlsZSA6Ci0gIGRvCi0gICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0 ZXN0LnRtcCIKLSAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCi0gICAgY3AgImNv bmZ0ZXN0LmluIiAiY29uZnRlc3QubmwiCi0gICAgJGFzX2VjaG8gJ0dSRVAnID4+ICJjb25mdGVz dC5ubCIKLSAgICAiJGFjX3BhdGhfR1JFUCIgLWUgJ0dSRVAkJyAtZSAnLShjYW5ub3QgbWF0Y2gp LScgPCAiY29uZnRlc3QubmwiID4iY29uZnRlc3Qub3V0IiAyPi9kZXYvbnVsbCB8fCBicmVhawot ICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwg YnJlYWsKLSAgICBhc19mbl9hcml0aCAkYWNfY291bnQgKyAxICYmIGFjX2NvdW50PSRhc192YWwK LSAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX0dSRVBfbWF4LTB9OyB0aGVuCi0g ICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJl dHRlciBvbmUKLSAgICAgIGFjX2N2X3BhdGhfR1JFUD0iJGFjX3BhdGhfR1JFUCIKLSAgICAgIGFj X3BhdGhfR1JFUF9tYXg9JGFjX2NvdW50Ci0gICAgZmkKLSAgICAjIDEwKigyXjEwKSBjaGFycyBh cyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCi0gICAgdGVzdCAkYWNfY291bnQgLWd0IDEw ICYmIGJyZWFrCi0gIGRvbmUKLSAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0 ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7Ci1lc2FjCi0KLSAgICAgICRhY19wYXRoX0dSRVBfZm91bmQg JiYgYnJlYWsgMwotICAgIGRvbmUKLSAgZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0g IGlmIHRlc3QgLXogIiRhY19jdl9wYXRoX0dSRVAiOyB0aGVuCi0gICAgYXNfZm5fZXJyb3IgJD8g Im5vIGFjY2VwdGFibGUgZ3JlcCBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRP Ui91c3IveHBnNC9iaW4iICIkTElORU5PIiA1Ci0gIGZpCi1lbHNlCi0gIGFjX2N2X3BhdGhfR1JF UD0kR1JFUAotZmkKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9HUkVQIiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfcGF0aF9H UkVQIiA+JjY7IH0KLSBHUkVQPSIkYWNfY3ZfcGF0aF9HUkVQIgotCi0KLXsgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGVncmVwIiA+JjUKLSRhc19l Y2hvX24gImNoZWNraW5nIGZvciBlZ3JlcC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9w YXRoX0VHUkVQK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+ JjYKLWVsc2UKLSAgaWYgZWNobyBhIHwgJEdSRVAgLUUgJyhhfGIpJyA+L2Rldi9udWxsIDI+JjEK LSAgIHRoZW4gYWNfY3ZfcGF0aF9FR1JFUD0iJEdSRVAgLUUiCi0gICBlbHNlCi0gICAgIGlmIHRl c3QgLXogIiRFR1JFUCI7IHRoZW4KLSAgYWNfcGF0aF9FR1JFUF9mb3VuZD1mYWxzZQotICAjIExv b3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUt TElTVAotICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGly IGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbgotZG8KLSAgSUZTPSRhc19zYXZl X0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19wcm9nIGlu IGVncmVwOyBkbwotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRl bnNpb25zOyBkbwotICAgICAgYWNfcGF0aF9FR1JFUD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVj X2V4dCIKLSAgICAgIHsgdGVzdCAtZiAiJGFjX3BhdGhfRUdSRVAiICYmICRhc190ZXN0X3ggIiRh Y19wYXRoX0VHUkVQIjsgfSB8fCBjb250aW51ZQotIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfRUdS RVAgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KLSAgIyBDaGVjayBmb3IgR05VICRhY19w YXRoX0VHUkVQCi1jYXNlIGAiJGFjX3BhdGhfRUdSRVAiIC0tdmVyc2lvbiAyPiYxYCBpbgotKkdO VSopCi0gIGFjX2N2X3BhdGhfRUdSRVA9IiRhY19wYXRoX0VHUkVQIiBhY19wYXRoX0VHUkVQX2Zv dW5kPTo7OwotKikKLSAgYWNfY291bnQ9MAotICAkYXNfZWNob19uIDAxMjM0NTY3ODkgPiJjb25m dGVzdC5pbiIKLSAgd2hpbGUgOgotICBkbwotICAgIGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVz dC5pbiIgPiJjb25mdGVzdC50bXAiCi0gICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0Lmlu IgotICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgotICAgICRhc19lY2hvICdFR1JF UCcgPj4gImNvbmZ0ZXN0Lm5sIgotICAgICIkYWNfcGF0aF9FR1JFUCIgJ0VHUkVQJCcgPCAiY29u ZnRlc3QubmwiID4iY29uZnRlc3Qub3V0IiAyPi9kZXYvbnVsbCB8fCBicmVhawotICAgIGRpZmYg ImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKLSAg ICBhc19mbl9hcml0aCAkYWNfY291bnQgKyAxICYmIGFjX2NvdW50PSRhc192YWwKLSAgICBpZiB0 ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX0VHUkVQX21heC0wfTsgdGhlbgotICAgICAgIyBC ZXN0IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25l Ci0gICAgICBhY19jdl9wYXRoX0VHUkVQPSIkYWNfcGF0aF9FR1JFUCIKLSAgICAgIGFjX3BhdGhf RUdSRVBfbWF4PSRhY19jb3VudAotICAgIGZpCi0gICAgIyAxMCooMl4xMCkgY2hhcnMgYXMgaW5w dXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAotICAgIHRlc3QgJGFjX2NvdW50IC1ndCAxMCAmJiBi cmVhawotICBkb25lCi0gIHJtIC1mIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5u bCBjb25mdGVzdC5vdXQ7OwotZXNhYwotCi0gICAgICAkYWNfcGF0aF9FR1JFUF9mb3VuZCAmJiBi cmVhayAzCi0gICAgZG9uZQotICBkb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLSAgaWYg dGVzdCAteiAiJGFjX2N2X3BhdGhfRUdSRVAiOyB0aGVuCi0gICAgYXNfZm5fZXJyb3IgJD8gIm5v IGFjY2VwdGFibGUgZWdyZXAgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1Iv dXNyL3hwZzQvYmluIiAiJExJTkVOTyIgNQotICBmaQotZWxzZQotICBhY19jdl9wYXRoX0VHUkVQ PSRFR1JFUAotZmkKLQotICAgZmkKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8t JExJTkVOT306IHJlc3VsdDogJGFjX2N2X3BhdGhfRUdSRVAiID4mNQotJGFzX2VjaG8gIiRhY19j dl9wYXRoX0VHUkVQIiA+JjY7IH0KLSBFR1JFUD0iJGFjX2N2X3BhdGhfRUdSRVAiCi0KLQoteyAk YXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQU5TSSBD IGhlYWRlciBmaWxlcyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRl ciBmaWxlcy4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9oZWFkZXJfc3RkYytzZXR9IiA9 IHNldDsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGNhdCBj b25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5o LiAgKi8KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRl IDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxmbG9hdC5oPgotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7 Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5P IjsgdGhlbiA6Ci0gIGFjX2N2X2hlYWRlcl9zdGRjPXllcwotZWxzZQotICBhY19jdl9oZWFkZXJf c3RkYz1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQg Y29uZnRlc3QuJGFjX2V4dAotCi1pZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhl bgotICAjIFN1bk9TIDQueCBzdHJpbmcuaCBkb2VzIG5vdCBkZWNsYXJlIG1lbSosIGNvbnRyYXJ5 IHRvIEFOU0kuCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQK LS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotX0FDRU9GCi1p ZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Ci0gICRFR1JFUCAibWVt Y2hyIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgotCi1lbHNlCi0gIGFjX2N2X2hlYWRlcl9zdGRj PW5vCi1maQotcm0gLWYgY29uZnRlc3QqCi0KLWZpCi0KLWlmIHRlc3QgJGFjX2N2X2hlYWRlcl9z dGRjID0geWVzOyB0aGVuCi0gICMgSVNDIDIuMC4yIHN0ZGxpYi5oIGRvZXMgbm90IGRlY2xhcmUg ZnJlZSwgY29udHJhcnkgdG8gQU5TSS4KLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29u ZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHN0ZGxpYi5o PgotCi1fQUNFT0YKLWlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwK LSAgJEVHUkVQICJmcmVlIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgotCi1lbHNlCi0gIGFjX2N2 X2hlYWRlcl9zdGRjPW5vCi1maQotcm0gLWYgY29uZnRlc3QqCi0KLWZpCi0KLWlmIHRlc3QgJGFj X2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCi0gICMgL2Jpbi9jYyBpbiBJcml4LTQuMC41IGdl dHMgbm9uLUFOU0kgY3R5cGUgbWFjcm9zIHVubGVzcyB1c2luZyAtYW5zaS4KLSAgaWYgdGVzdCAi JGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgotICA6Ci1lbHNlCi0gIGNhdCBjb25mZGVm cy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8K LSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2lmICgoJyAnICYgMHgw RkYpID09IDB4MDIwKQotIyBkZWZpbmUgSVNMT1dFUihjKSAoJ2EnIDw9IChjKSAmJiAoYykgPD0g J3onKQotIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICdBJyArICgoYykgLSAnYScp IDogKGMpKQotI2Vsc2UKLSMgZGVmaW5lIElTTE9XRVIoYykgXAotCQkgICAoKCdhJyA8PSAoYykg JiYgKGMpIDw9ICdpJykgXAotCQkgICAgIHx8ICgnaicgPD0gKGMpICYmIChjKSA8PSAncicpIFwK LQkJICAgICB8fCAoJ3MnIDw9IChjKSAmJiAoYykgPD0gJ3onKSkKLSMgZGVmaW5lIFRPVVBQRVIo YykgKElTTE9XRVIoYykgPyAoKGMpIHwgMHg0MCkgOiAoYykpCi0jZW5kaWYKLQotI2RlZmluZSBY T1IoZSwgZikgKCgoZSkgJiYgIShmKSkgfHwgKCEoZSkgJiYgKGYpKSkKLWludAotbWFpbiAoKQot ewotICBpbnQgaTsKLSAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQotICAgIGlmIChYT1IgKGlz bG93ZXIgKGkpLCBJU0xPV0VSIChpKSkKLQl8fCB0b3VwcGVyIChpKSAhPSBUT1VQUEVSIChpKSkK LSAgICAgIHJldHVybiAyOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlf cnVuICIkTElORU5PIjsgdGhlbiA6Ci0KLWVsc2UKLSAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KLWZp Ci1ybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0 ZXN0JGFjX2V4ZWV4dCBcCi0gIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25m dGVzdC4kYWNfZXh0Ci1maQotCi1maQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNQotJGFzX2VjaG8gIiRh Y19jdl9oZWFkZXJfc3RkYyIgPiY2OyB9Ci1pZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHll czsgdGhlbgotCi0kYXNfZWNobyAiI2RlZmluZSBTVERDX0hFQURFUlMgMSIgPj5jb25mZGVmcy5o Ci0KLWZpCi0KLSMgT24gSVJJWCA1LjMsIHN5cy90eXBlcyBhbmQgaW50dHlwZXMuaCBhcmUgY29u ZmxpY3RpbmcuCi1mb3IgYWNfaGVhZGVyIGluIHN5cy90eXBlcy5oIHN5cy9zdGF0Lmggc3RkbGli Lmggc3RyaW5nLmggbWVtb3J5Lmggc3RyaW5ncy5oIFwKLQkJICBpbnR0eXBlcy5oIHN0ZGludC5o IHVuaXN0ZC5oCi1kbyA6Ci0gIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8k YWNfaGVhZGVyIiB8ICRhc190cl9zaGAKLWFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRM SU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRhY19pbmNsdWRlc19kZWZhdWx0 Ci0iCi1pZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6 Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRh Y19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi0KLWRvbmUKLQotCi0KLSAg YWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIm1pbml4L2NvbmZpZy5oIiAi YWNfY3ZfaGVhZGVyX21pbml4X2NvbmZpZ19oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCi1pZiB0 ZXN0ICJ4JGFjX2N2X2hlYWRlcl9taW5peF9jb25maWdfaCIgPSB4IiJ5ZXM7IHRoZW4gOgotICBN SU5JWD15ZXMKLWVsc2UKLSAgTUlOSVg9Ci1maQotCi0KLSAgaWYgdGVzdCAiJE1JTklYIiA9IHll czsgdGhlbgotCi0kYXNfZWNobyAiI2RlZmluZSBfUE9TSVhfU09VUkNFIDEiID4+Y29uZmRlZnMu aAotCi0KLSRhc19lY2hvICIjZGVmaW5lIF9QT1NJWF8xX1NPVVJDRSAyIiA+PmNvbmZkZWZzLmgK LQotCi0kYXNfZWNobyAiI2RlZmluZSBfTUlOSVggMSIgPj5jb25mZGVmcy5oCi0KLSAgZmkKLQot Ci0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hl dGhlciBpdCBpcyBzYWZlIHRvIGRlZmluZSBfX0VYVEVOU0lPTlNfXyIgPiY1Ci0kYXNfZWNob19u ICJjaGVja2luZyB3aGV0aGVyIGl0IGlzIHNhZmUgdG8gZGVmaW5lIF9fRVhURU5TSU9OU19fLi4u ICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19f K3NldH0iID0gc2V0OyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UK LSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNv bmZkZWZzLmguICAqLwotCi0jCSAgZGVmaW5lIF9fRVhURU5TSU9OU19fIDEKLQkgICRhY19pbmNs dWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FD RU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X3Nh ZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fPXllcwotZWxzZQotICBhY19jdl9zYWZlX3RvX2Rl ZmluZV9fX2V4dGVuc2lvbnNfXz1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0 ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLXsgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRl bnNpb25zX18iID4mNQotJGFzX2VjaG8gIiRhY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lv bnNfXyIgPiY2OyB9Ci0gIHRlc3QgJGFjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19f ID0geWVzICYmCi0gICAgJGFzX2VjaG8gIiNkZWZpbmUgX19FWFRFTlNJT05TX18gMSIgPj5jb25m ZGVmcy5oCi0KLSAgJGFzX2VjaG8gIiNkZWZpbmUgX0FMTF9TT1VSQ0UgMSIgPj5jb25mZGVmcy5o Ci0KLSAgJGFzX2VjaG8gIiNkZWZpbmUgX0dOVV9TT1VSQ0UgMSIgPj5jb25mZGVmcy5oCi0KLSAg JGFzX2VjaG8gIiNkZWZpbmUgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTIDEiID4+Y29uZmRlZnMu aAotCi0gICRhc19lY2hvICIjZGVmaW5lIF9UQU5ERU1fU09VUkNFIDEiID4+Y29uZmRlZnMuaAot Ci0KLSMgTWFrZSBzdXJlIHdlIGNhbiBydW4gY29uZmlnLnN1Yi4KLSRTSEVMTCAiJGFjX2F1eF9k aXIvY29uZmlnLnN1YiIgc3VuNCA+L2Rldi9udWxsIDI+JjEgfHwKLSAgYXNfZm5fZXJyb3IgJD8g ImNhbm5vdCBydW4gJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICIkTElORU5PIiA1Ci0K LXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgYnVpbGQg c3lzdGVtIHR5cGUiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgYnVpbGQgc3lzdGVtIHR5cGUu Li4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfYnVpbGQrc2V0fSIgPSBzZXQ7IHRoZW4gOgot ICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBhY19idWlsZF9hbGlhcz0kYnVp bGRfYWxpYXMKLXRlc3QgIngkYWNfYnVpbGRfYWxpYXMiID0geCAmJgotICBhY19idWlsZF9hbGlh cz1gJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuZ3Vlc3MiYAotdGVzdCAieCRhY19idWlsZF9h bGlhcyIgPSB4ICYmCi0gIGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgZ3Vlc3MgYnVpbGQgdHlwZTsg eW91IG11c3Qgc3BlY2lmeSBvbmUiICIkTElORU5PIiA1Ci1hY19jdl9idWlsZD1gJFNIRUxMICIk YWNfYXV4X2Rpci9jb25maWcuc3ViIiAkYWNfYnVpbGRfYWxpYXNgIHx8Ci0gIGFzX2ZuX2Vycm9y ICQ/ICIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiAkYWNfYnVpbGRfYWxpYXMgZmFpbGVk IiAiJExJTkVOTyIgNQotCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5F Tk99OiByZXN1bHQ6ICRhY19jdl9idWlsZCIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2J1aWxkIiA+ JjY7IH0KLWNhc2UgJGFjX2N2X2J1aWxkIGluCi0qLSotKikgOzsKLSopIGFzX2ZuX2Vycm9yICQ/ ICJpbnZhbGlkIHZhbHVlIG9mIGNhbm9uaWNhbCBidWlsZCIgIiRMSU5FTk8iIDUgOzsKLWVzYWMK LWJ1aWxkPSRhY19jdl9idWlsZAotYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSctJwotc2V0IHggJGFj X2N2X2J1aWxkCi1zaGlmdAotYnVpbGRfY3B1PSQxCi1idWlsZF92ZW5kb3I9JDIKLXNoaWZ0OyBz aGlmdAotIyBSZW1lbWJlciwgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBJRlMgaXMgdXNlZCB0byBj cmVhdGUgJCosCi0jIGV4Y2VwdCB3aXRoIG9sZCBzaGVsbHM6Ci1idWlsZF9vcz0kKgotSUZTPSRh Y19zYXZlX0lGUwotY2FzZSAkYnVpbGRfb3MgaW4gKlwgKikgYnVpbGRfb3M9YGVjaG8gIiRidWls ZF9vcyIgfCBzZWQgJ3MvIC8tL2cnYDs7IGVzYWMKLQotCi17ICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUiID4mNQotJGFzX2Vj aG9fbiAiY2hlY2tpbmcgaG9zdCBzeXN0ZW0gdHlwZS4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHth Y19jdl9ob3N0K3NldH0iID0gc2V0OyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+ JjYKLWVsc2UKLSAgaWYgdGVzdCAieCRob3N0X2FsaWFzIiA9IHg7IHRoZW4KLSAgYWNfY3ZfaG9z dD0kYWNfY3ZfYnVpbGQKLWVsc2UKLSAgYWNfY3ZfaG9zdD1gJFNIRUxMICIkYWNfYXV4X2Rpci9j b25maWcuc3ViIiAkaG9zdF9hbGlhc2AgfHwKLSAgICBhc19mbl9lcnJvciAkPyAiJFNIRUxMICRh Y19hdXhfZGlyL2NvbmZpZy5zdWIgJGhvc3RfYWxpYXMgZmFpbGVkIiAiJExJTkVOTyIgNQotZmkK LQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAk YWNfY3ZfaG9zdCIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2hvc3QiID4mNjsgfQotY2FzZSAkYWNf Y3ZfaG9zdCBpbgotKi0qLSopIDs7Ci0qKSBhc19mbl9lcnJvciAkPyAiaW52YWxpZCB2YWx1ZSBv ZiBjYW5vbmljYWwgaG9zdCIgIiRMSU5FTk8iIDUgOzsKLWVzYWMKLWhvc3Q9JGFjX2N2X2hvc3QK LWFjX3NhdmVfSUZTPSRJRlM7IElGUz0nLScKLXNldCB4ICRhY19jdl9ob3N0Ci1zaGlmdAotaG9z dF9jcHU9JDEKLWhvc3RfdmVuZG9yPSQyCi1zaGlmdDsgc2hpZnQKLSMgUmVtZW1iZXIsIHRoZSBm aXJzdCBjaGFyYWN0ZXIgb2YgSUZTIGlzIHVzZWQgdG8gY3JlYXRlICQqLAotIyBleGNlcHQgd2l0 aCBvbGQgc2hlbGxzOgotaG9zdF9vcz0kKgotSUZTPSRhY19zYXZlX0lGUwotY2FzZSAkaG9zdF9v cyBpbiAqXCAqKSBob3N0X29zPWBlY2hvICIkaG9zdF9vcyIgfCBzZWQgJ3MvIC8tL2cnYDs7IGVz YWMKLQotCi0KLSMgTTQgTWFjcm8gaW5jbHVkZXMKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQot Ci0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0K LQotCi0KLQotCi0jIHBrZy5tNCAtIE1hY3JvcyB0byBsb2NhdGUgYW5kIHV0aWxpc2UgcGtnLWNv bmZpZy4gICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCi0jIHNlcmlhbCAxIChwa2ctY29uZmln LTAuMjQpCi0jCi0jIENvcHlyaWdodCDCqSAyMDA0IFNjb3R0IEphbWVzIFJlbW5hbnQgPHNjb3R0 QG5ldHNwbGl0LmNvbT4uCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0jIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0jIHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us IG9yCi0jIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0jCi0jIFRoaXMgcHJv Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBi dXQKLSMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlIEdOVQotIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3Qs IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0jIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBs ZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCi0jCi0jIEFz IGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBp ZiB5b3UKLSMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBj b250YWlucyBhCi0jIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwg eW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCi0jIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0 aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KLQotIyBQS0dfUFJPR19Q S0dfQ09ORklHKFtNSU4tVkVSU0lPTl0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KLSMgUEtHX1BST0dfUEtHX0NPTkZJRwotCi0jIFBLR19DSEVDS19FWElTVFMoTU9EVUxF UywgW0FDVElPTi1JRi1GT1VORF0sIFtBQ1RJT04tSUYtTk9ULUZPVU5EXSkKLSMKLSMgQ2hlY2sg dG8gc2VlIHdoZXRoZXIgYSBwYXJ0aWN1bGFyIHNldCBvZiBtb2R1bGVzIGV4aXN0cy4gIFNpbWls YXIKLSMgdG8gUEtHX0NIRUNLX01PRFVMRVMoKSwgYnV0IGRvZXMgbm90IHNldCB2YXJpYWJsZXMg b3IgcHJpbnQgZXJyb3JzLgotIwotIyBQbGVhc2UgcmVtZW1iZXIgdGhhdCBtNCBleHBhbmRzIEFD X1JFUVVJUkUoW1BLR19QUk9HX1BLR19DT05GSUddKQotIyBvbmx5IGF0IHRoZSBmaXJzdCBvY2N1 cmVuY2UgaW4gY29uZmlndXJlLmFjLCBzbyBpZiB0aGUgZmlyc3QgcGxhY2UKLSMgaXQncyBjYWxs ZWQgbWlnaHQgYmUgc2tpcHBlZCAoc3VjaCBhcyBpZiBpdCBpcyB3aXRoaW4gYW4gImlmIiwgeW91 Ci0jIGhhdmUgdG8gY2FsbCBQS0dfQ0hFQ0tfRVhJU1RTIG1hbnVhbGx5Ci0jIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLQot IyBfUEtHX0NPTkZJRyhbVkFSSUFCTEVdLCBbQ09NTUFORF0sIFtNT0RVTEVTXSkKLSMgLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIF9QS0dfQ09ORklHCi0K LSMgX1BLR19TSE9SVF9FUlJPUlNfU1VQUE9SVEVECi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCi0jIF9QS0dfU0hPUlRfRVJST1JTX1NVUFBPUlRFRAotCi0KLSMgUEtHX0NIRUNLX01P RFVMRVMoVkFSSUFCTEUtUFJFRklYLCBNT0RVTEVTLCBbQUNUSU9OLUlGLUZPVU5EXSwKLSMgW0FD VElPTi1JRi1OT1QtRk9VTkRdKQotIwotIwotIyBOb3RlIHRoYXQgaWYgdGhlcmUgaXMgYSBwb3Nz aWJpbGl0eSB0aGUgZmlyc3QgY2FsbCB0bwotIyBQS0dfQ0hFQ0tfTU9EVUxFUyBtaWdodCBub3Qg aGFwcGVuLCB5b3Ugc2hvdWxkIGJlIHN1cmUgdG8gaW5jbHVkZSBhbgotIyBleHBsaWNpdCBjYWxs IHRvIFBLR19QUk9HX1BLR19DT05GSUcgaW4geW91ciBjb25maWd1cmUuYWMKLSMKLSMKLSMgLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KLSMgUEtHX0NIRUNLX01PRFVMRVMKLQotCi0KLSMgV2UgZGVmaW5lLCBzZXBhcmF0ZWx5LCBQ VEhSRUFEX0NGTEFHUywgX0xERkxBR1MgYW5kIF9MSUJTCi0jIGV2ZW4gdGhvdWdoIGN1cnJlbnRs eSB3ZSBkb24ndCBzZXQgdGhlbSB2ZXJ5IHNlcGFyYXRlbHkuCi0jIFRoaXMgbWVhbnMgdGhhdCB0 aGUgbWFrZWZpbGVzIHdpbGwgbm90IG5lZWQgdG8gY2hhbmdlIGluCi0jIHRoZSBmdXR1cmUgaWYg d2UgbWFrZSB0aGUgdGVzdCBtb3JlIHNvcGhpc3RpY2F0ZWQuCi0KLQotCi0jIFdlIGludm9rZSBB WF9QVEhSRUFEX1ZBUlMgd2l0aCB0aGUgbmFtZSBvZiBhbm90aGVyIG1hY3JvCi0jIHdoaWNoIGlz IHRoZW4gZXhwYW5kZWQgb25jZSBmb3IgZWFjaCB2YXJpYWJsZS4KLQotCi0KLQotCi0KLQotCi0j IEVuYWJsZS9kaXNhYmxlIG9wdGlvbnMKLQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWdpdGh0 dHAgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfZ2l0aHR0cCtzZXR9IiA9IHNldDsgdGhl biA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX2dpdGh0dHA7Ci1maQotCi0KLWlmIHRlc3QgIngkZW5h YmxlX2dpdGh0dHAiID0gInhubyI7IHRoZW4gOgotCi0gICAgYXhfY3ZfZ2l0aHR0cD0ibiIKLQot ZWxpZiB0ZXN0ICJ4JGVuYWJsZV9naXRodHRwIiA9ICJ4eWVzIjsgdGhlbiA6Ci0KLSAgICBheF9j dl9naXRodHRwPSJ5IgotCi1lbGlmIHRlc3QgLXogJGF4X2N2X2dpdGh0dHA7IHRoZW4gOgotCi0g ICAgYXhfY3ZfZ2l0aHR0cD0ibiIKLQotZmkKLWdpdGh0dHA9JGF4X2N2X2dpdGh0dHAKLQotCi0K LSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1tb25pdG9ycyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIk e2VuYWJsZV9tb25pdG9ycytzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxl X21vbml0b3JzOwotZmkKLQotCi1pZiB0ZXN0ICJ4JGVuYWJsZV9tb25pdG9ycyIgPSAieG5vIjsg dGhlbiA6Ci0KLSAgICBheF9jdl9tb25pdG9ycz0ibiIKLQotZWxpZiB0ZXN0ICJ4JGVuYWJsZV9t b25pdG9ycyIgPSAieHllcyI7IHRoZW4gOgotCi0gICAgYXhfY3ZfbW9uaXRvcnM9InkiCi0KLWVs aWYgdGVzdCAteiAkYXhfY3ZfbW9uaXRvcnM7IHRoZW4gOgotCi0gICAgYXhfY3ZfbW9uaXRvcnM9 InkiCi0KLWZpCi1tb25pdG9ycz0kYXhfY3ZfbW9uaXRvcnMKLQotCi0KLSMgQ2hlY2sgd2hldGhl ciAtLWVuYWJsZS12dHBtIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3Z0cG0rc2V0fSIg PSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV92dHBtOwotZmkKLQotCi1pZiB0ZXN0 ICJ4JGVuYWJsZV92dHBtIiA9ICJ4bm8iOyB0aGVuIDoKLQotICAgIGF4X2N2X3Z0cG09Im4iCi0K LWVsaWYgdGVzdCAieCRlbmFibGVfdnRwbSIgPSAieHllcyI7IHRoZW4gOgotCi0gICAgYXhfY3Zf dnRwbT0ieSIKLQotZWxpZiB0ZXN0IC16ICRheF9jdl92dHBtOyB0aGVuIDoKLQotICAgIGF4X2N2 X3Z0cG09Im4iCi0KLWZpCi12dHBtPSRheF9jdl92dHBtCi0KLQotCi0jIENoZWNrIHdoZXRoZXIg LS1lbmFibGUteGVuYXBpIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3hlbmFwaStzZXR9 IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX3hlbmFwaTsKLWZpCi0KLQotaWYg dGVzdCAieCRlbmFibGVfeGVuYXBpIiA9ICJ4bm8iOyB0aGVuIDoKLQotICAgIGF4X2N2X3hlbmFw aT0ibiIKLQotZWxpZiB0ZXN0ICJ4JGVuYWJsZV94ZW5hcGkiID0gInh5ZXMiOyB0aGVuIDoKLQot ICAgIGF4X2N2X3hlbmFwaT0ieSIKLQotZWxpZiB0ZXN0IC16ICRheF9jdl94ZW5hcGk7IHRoZW4g OgotCi0gICAgYXhfY3ZfeGVuYXBpPSJuIgotCi1maQoteGVuYXBpPSRheF9jdl94ZW5hcGkKLQot Ci0KLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1weXRob250b29scyB3YXMgZ2l2ZW4uCi1pZiB0 ZXN0ICIke2VuYWJsZV9weXRob250b29scytzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZh bD0kZW5hYmxlX3B5dGhvbnRvb2xzOwotZmkKLQotCi1pZiB0ZXN0ICJ4JGVuYWJsZV9weXRob250 b29scyIgPSAieG5vIjsgdGhlbiA6Ci0KLSAgICBheF9jdl9weXRob250b29scz0ibiIKLQotZWxp ZiB0ZXN0ICJ4JGVuYWJsZV9weXRob250b29scyIgPSAieHllcyI7IHRoZW4gOgotCi0gICAgYXhf Y3ZfcHl0aG9udG9vbHM9InkiCi0KLWVsaWYgdGVzdCAteiAkYXhfY3ZfcHl0aG9udG9vbHM7IHRo ZW4gOgotCi0gICAgYXhfY3ZfcHl0aG9udG9vbHM9InkiCi0KLWZpCi1weXRob250b29scz0kYXhf Y3ZfcHl0aG9udG9vbHMKLQotCi0KLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1vY2FtbHRvb2xz IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX29jYW1sdG9vbHMrc2V0fSIgPSBzZXQ7IHRo ZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9vY2FtbHRvb2xzOwotZmkKLQotCi1pZiB0ZXN0ICJ4 JGVuYWJsZV9vY2FtbHRvb2xzIiA9ICJ4bm8iOyB0aGVuIDoKLQotICAgIGF4X2N2X29jYW1sdG9v bHM9Im4iCi0KLWVsaWYgdGVzdCAieCRlbmFibGVfb2NhbWx0b29scyIgPSAieHllcyI7IHRoZW4g OgotCi0gICAgYXhfY3Zfb2NhbWx0b29scz0ieSIKLQotZWxpZiB0ZXN0IC16ICRheF9jdl9vY2Ft bHRvb2xzOyB0aGVuIDoKLQotICAgIGF4X2N2X29jYW1sdG9vbHM9InkiCi0KLWZpCi1vY2FtbHRv b2xzPSRheF9jdl9vY2FtbHRvb2xzCi0KLQotCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbWlu aXRlcm0gd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfbWluaXRlcm0rc2V0fSIgPSBzZXQ7 IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9taW5pdGVybTsKLWZpCi0KLQotaWYgdGVzdCAi eCRlbmFibGVfbWluaXRlcm0iID0gInhubyI7IHRoZW4gOgotCi0gICAgYXhfY3ZfbWluaXRlcm09 Im4iCi0KLWVsaWYgdGVzdCAieCRlbmFibGVfbWluaXRlcm0iID0gInh5ZXMiOyB0aGVuIDoKLQot ICAgIGF4X2N2X21pbml0ZXJtPSJ5IgotCi1lbGlmIHRlc3QgLXogJGF4X2N2X21pbml0ZXJtOyB0 aGVuIDoKLQotICAgIGF4X2N2X21pbml0ZXJtPSJuIgotCi1maQotbWluaXRlcm09JGF4X2N2X21p bml0ZXJtCi0KLQotCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbG9tb3VudCB3YXMgZ2l2ZW4u Ci1pZiB0ZXN0ICIke2VuYWJsZV9sb21vdW50K3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxl dmFsPSRlbmFibGVfbG9tb3VudDsKLWZpCi0KLQotaWYgdGVzdCAieCRlbmFibGVfbG9tb3VudCIg PSAieG5vIjsgdGhlbiA6Ci0KLSAgICBheF9jdl9sb21vdW50PSJuIgotCi1lbGlmIHRlc3QgIngk ZW5hYmxlX2xvbW91bnQiID0gInh5ZXMiOyB0aGVuIDoKLQotICAgIGF4X2N2X2xvbW91bnQ9Inki Ci0KLWVsaWYgdGVzdCAteiAkYXhfY3ZfbG9tb3VudDsgdGhlbiA6Ci0KLSAgICBheF9jdl9sb21v dW50PSJuIgotCi1maQotbG9tb3VudD0kYXhfY3ZfbG9tb3VudAotCi0KLQotIyBDaGVjayB3aGV0 aGVyIC0tZW5hYmxlLW92bWYgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfb3ZtZitzZXR9 IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX292bWY7Ci1maQotCi0KLWlmIHRl c3QgIngkZW5hYmxlX292bWYiID0gInhubyI7IHRoZW4gOgotCi0gICAgYXhfY3Zfb3ZtZj0ibiIK LQotZWxpZiB0ZXN0ICJ4JGVuYWJsZV9vdm1mIiA9ICJ4eWVzIjsgdGhlbiA6Ci0KLSAgICBheF9j dl9vdm1mPSJ5IgotCi1lbGlmIHRlc3QgLXogJGF4X2N2X292bWY7IHRoZW4gOgotCi0gICAgYXhf Y3Zfb3ZtZj0ibiIKLQotZmkKLW92bWY9JGF4X2N2X292bWYKKyMgTTQgTWFjcm8gaW5jbHVkZXMK IAogCiAKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1yb21iaW9zIHdhcyBnaXZlbi4KLWlmIHRl c3QgIiR7ZW5hYmxlX3JvbWJpb3Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVu YWJsZV9yb21iaW9zOwotZmkKIAogCi1pZiB0ZXN0ICJ4JGVuYWJsZV9yb21iaW9zIiA9ICJ4bm8i OyB0aGVuIDoKIAotICAgIGF4X2N2X3JvbWJpb3M9Im4iCiAKLWVsaWYgdGVzdCAieCRlbmFibGVf cm9tYmlvcyIgPSAieHllcyI7IHRoZW4gOgogCi0gICAgYXhfY3Zfcm9tYmlvcz0ieSIKIAotZWxp ZiB0ZXN0IC16ICRheF9jdl9yb21iaW9zOyB0aGVuIDoKIAotICAgIGF4X2N2X3JvbWJpb3M9Inki CiAKLWZpCi1yb21iaW9zPSRheF9jdl9yb21iaW9zCiAKIAogCi0jIENoZWNrIHdoZXRoZXIgLS1l bmFibGUtc2VhYmlvcyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9zZWFiaW9zK3NldH0i ID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfc2VhYmlvczsKLWZpCiAKIAotaWYg dGVzdCAieCRlbmFibGVfc2VhYmlvcyIgPSAieG5vIjsgdGhlbiA6CiAKLSAgICBheF9jdl9zZWFi aW9zPSJuIgogCi1lbGlmIHRlc3QgIngkZW5hYmxlX3NlYWJpb3MiID0gInh5ZXMiOyB0aGVuIDoK IAotICAgIGF4X2N2X3NlYWJpb3M9InkiCiAKLWVsaWYgdGVzdCAteiAkYXhfY3Zfc2VhYmlvczsg dGhlbiA6CiAKLSAgICBheF9jdl9zZWFiaW9zPSJ5IgogCi1maQotc2VhYmlvcz0kYXhfY3Zfc2Vh YmlvcwogCiAKIAotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRlYnVnIHdhcyBnaXZlbi4KLWlm IHRlc3QgIiR7ZW5hYmxlX2RlYnVnK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRl bmFibGVfZGVidWc7Ci1maQogCiAKLWlmIHRlc3QgIngkZW5hYmxlX2RlYnVnIiA9ICJ4bm8iOyB0 aGVuIDoKIAotICAgIGF4X2N2X2RlYnVnPSJuIgogCi1lbGlmIHRlc3QgIngkZW5hYmxlX2RlYnVn IiA9ICJ4eWVzIjsgdGhlbiA6CiAKLSAgICBheF9jdl9kZWJ1Zz0ieSIKIAotZWxpZiB0ZXN0IC16 ICRheF9jdl9kZWJ1ZzsgdGhlbiA6CiAKLSAgICBheF9jdl9kZWJ1Zz0ieSIKIAotZmkKLWRlYnVn PSRheF9jdl9kZWJ1ZwogCiAKIApAQCAtNDI0MCw5MzAgKzIyMjIsNDMyIEBAIGRlYnVnPSRheF9j dl9kZWJ1ZwogCiAKIAotZm9yIGNmbGFnIGluICRQUkVQRU5EX0lOQ0xVREVTCi1kbwotICAgIFBS RVBFTkRfQ0ZMQUdTKz0iIC1JJGNmbGFnIgotZG9uZQotZm9yIGxkZmxhZyBpbiAkUFJFUEVORF9M SUIKLWRvCi0gICAgUFJFUEVORF9MREZMQUdTKz0iIC1MJGxkZmxhZyIKLWRvbmUKLWZvciBjZmxh ZyBpbiAkQVBQRU5EX0lOQ0xVREVTCi1kbwotICAgIEFQUEVORF9DRkxBR1MrPSIgLUkkY2ZsYWci Ci1kb25lCi1mb3IgbGRmbGFnIGluICRBUFBFTkRfTElCCi1kbwotICAgIEFQUEVORF9MREZMQUdT Kz0iIC1MJGxkZmxhZyIKLWRvbmUKLUNGTEFHUz0iJFBSRVBFTkRfQ0ZMQUdTICRDRkxBR1MgJEFQ UEVORF9DRkxBR1MiCi1MREZMQUdTPSIkUFJFUEVORF9MREZMQUdTICRMREZMQUdTICRBUFBFTkRf TERGTEFHUyIKIAogCiAKIAogCiAKKyMgcGtnLm00IC0gTWFjcm9zIHRvIGxvY2F0ZSBhbmQgdXRp bGlzZSBwa2ctY29uZmlnLiAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKyMgc2VyaWFsIDEg KHBrZy1jb25maWctMC4yNCkKKyMKKyMgQ29weXJpZ2h0IMKpIDIwMDQgU2NvdHQgSmFtZXMgUmVt bmFudCA8c2NvdHRAbmV0c3BsaXQuY29tPi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0 aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMK KyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dy YW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5j LiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVT QS4KKyMKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJv Z3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5 IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0 aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgogCisj IFBLR19QUk9HX1BLR19DT05GSUcoW01JTi1WRVJTSU9OXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIyBQS0dfUFJPR19QS0dfQ09ORklHCiAKKyMgUEtHX0NIRUNLX0VY SVNUUyhNT0RVTEVTLCBbQUNUSU9OLUlGLUZPVU5EXSwgW0FDVElPTi1JRi1OT1QtRk9VTkRdKQor IworIyBDaGVjayB0byBzZWUgd2hldGhlciBhIHBhcnRpY3VsYXIgc2V0IG9mIG1vZHVsZXMgZXhp c3RzLiAgU2ltaWxhcgorIyB0byBQS0dfQ0hFQ0tfTU9EVUxFUygpLCBidXQgZG9lcyBub3Qgc2V0 IHZhcmlhYmxlcyBvciBwcmludCBlcnJvcnMuCisjCisjIFBsZWFzZSByZW1lbWJlciB0aGF0IG00 IGV4cGFuZHMgQUNfUkVRVUlSRShbUEtHX1BST0dfUEtHX0NPTkZJR10pCisjIG9ubHkgYXQgdGhl IGZpcnN0IG9jY3VyZW5jZSBpbiBjb25maWd1cmUuYWMsIHNvIGlmIHRoZSBmaXJzdCBwbGFjZQor IyBpdCdzIGNhbGxlZCBtaWdodCBiZSBza2lwcGVkIChzdWNoIGFzIGlmIGl0IGlzIHdpdGhpbiBh biAiaWYiLCB5b3UKKyMgaGF2ZSB0byBjYWxsIFBLR19DSEVDS19FWElTVFMgbWFudWFsbHkKKyMg LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KIAogCisjIF9QS0dfQ09ORklHKFtWQVJJQUJMRV0sIFtDT01NQU5EXSwgW01PRFVMRVNd KQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgX1BL R19DT05GSUcKIAorIyBfUEtHX1NIT1JUX0VSUk9SU19TVVBQT1JURUQKKyMgLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyMgX1BLR19TSE9SVF9FUlJPUlNfU1VQUE9SVEVECiAKIAorIyBQ S0dfQ0hFQ0tfTU9EVUxFUyhWQVJJQUJMRS1QUkVGSVgsIE1PRFVMRVMsIFtBQ1RJT04tSUYtRk9V TkRdLAorIyBbQUNUSU9OLUlGLU5PVC1GT1VORF0pCisjCisjCisjIE5vdGUgdGhhdCBpZiB0aGVy ZSBpcyBhIHBvc3NpYmlsaXR5IHRoZSBmaXJzdCBjYWxsIHRvCisjIFBLR19DSEVDS19NT0RVTEVT IG1pZ2h0IG5vdCBoYXBwZW4sIHlvdSBzaG91bGQgYmUgc3VyZSB0byBpbmNsdWRlIGFuCisjIGV4 cGxpY2l0IGNhbGwgdG8gUEtHX1BST0dfUEtHX0NPTkZJRyBpbiB5b3VyIGNvbmZpZ3VyZS5hYwor IworIworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIyBQS0dfQ0hFQ0tfTU9EVUxFUwogCi0jIENoZWNrcyBmb3IgcHJvZ3Jh bXMuCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZv ciBhIHNlZCB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dCIgPiY1Ci0kYXNfZWNob19uICJj aGVja2luZyBmb3IgYSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQuLi4gIiA+JjY7 IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9TRUQrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICAkYXNf ZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICAgICAgICAgICAgYWNfc2NyaXB0PXMvYWFh YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEvYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJi YmJiYmJiYmJiLwotICAgICBmb3IgYWNfaSBpbiAxIDIgMyA0IDUgNiA3OyBkbwotICAgICAgIGFj X3NjcmlwdD0iJGFjX3NjcmlwdCRhc19ubCRhY19zY3JpcHQiCi0gICAgIGRvbmUKLSAgICAgZWNo byAiJGFjX3NjcmlwdCIgMj4vZGV2L251bGwgfCBzZWQgOTlxID5jb25mdGVzdC5zZWQKLSAgICAg eyBhY19zY3JpcHQ9OyB1bnNldCBhY19zY3JpcHQ7fQotICAgICBpZiB0ZXN0IC16ICIkU0VEIjsg dGhlbgotICBhY19wYXRoX1NFRF9mb3VuZD1mYWxzZQotICAjIExvb3AgdGhyb3VnaCB0aGUgdXNl cidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAotICBhc19zYXZlX0lG Uz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJ RlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9y IGFjX3Byb2cgaW4gc2VkIGdzZWQ7IGRvCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19l eGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gICAgICBhY19wYXRoX1NFRD0iJGFzX2Rpci8kYWNf cHJvZyRhY19leGVjX2V4dCIKLSAgICAgIHsgdGVzdCAtZiAiJGFjX3BhdGhfU0VEIiAmJiAkYXNf dGVzdF94ICIkYWNfcGF0aF9TRUQiOyB9IHx8IGNvbnRpbnVlCi0jIENoZWNrIGZvciBHTlUgYWNf cGF0aF9TRUQgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KLSAgIyBDaGVjayBmb3IgR05V ICRhY19wYXRoX1NFRAotY2FzZSBgIiRhY19wYXRoX1NFRCIgLS12ZXJzaW9uIDI+JjFgIGluCi0q R05VKikKLSAgYWNfY3ZfcGF0aF9TRUQ9IiRhY19wYXRoX1NFRCIgYWNfcGF0aF9TRURfZm91bmQ9 Ojs7Ci0qKQotICBhY19jb3VudD0wCi0gICRhc19lY2hvX24gMDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0 LmluIgotICB3aGlsZSA6Ci0gIGRvCi0gICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lmlu IiA+ImNvbmZ0ZXN0LnRtcCIKLSAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCi0g ICAgY3AgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QubmwiCi0gICAgJGFzX2VjaG8gJycgPj4gImNv bmZ0ZXN0Lm5sIgotICAgICIkYWNfcGF0aF9TRUQiIC1mIGNvbmZ0ZXN0LnNlZCA8ICJjb25mdGVz dC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCi0gICAgZGlmZiAiY29u ZnRlc3Qub3V0IiAiY29uZnRlc3QubmwiID4vZGV2L251bGwgMj4mMSB8fCBicmVhawotICAgIGFz X2ZuX2FyaXRoICRhY19jb3VudCArIDEgJiYgYWNfY291bnQ9JGFzX3ZhbAotICAgIGlmIHRlc3Qg JGFjX2NvdW50IC1ndCAke2FjX3BhdGhfU0VEX21heC0wfTsgdGhlbgotICAgICAgIyBCZXN0IG9u ZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCi0gICAg ICBhY19jdl9wYXRoX1NFRD0iJGFjX3BhdGhfU0VEIgotICAgICAgYWNfcGF0aF9TRURfbWF4PSRh Y19jb3VudAotICAgIGZpCi0gICAgIyAxMCooMl4xMCkgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9y ZSB0aGFuIGVub3VnaAotICAgIHRlc3QgJGFjX2NvdW50IC1ndCAxMCAmJiBicmVhawotICBkb25l Ci0gIHJtIC1mIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5ubCBjb25mdGVzdC5v dXQ7OwotZXNhYwogCi0gICAgICAkYWNfcGF0aF9TRURfZm91bmQgJiYgYnJlYWsgMwotICAgIGRv bmUKLSAgZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0gIGlmIHRlc3QgLXogIiRhY19j dl9wYXRoX1NFRCI7IHRoZW4KLSAgICBhc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBzZWQg Y291bGQgYmUgZm91bmQgaW4gXCRQQVRIIiAiJExJTkVOTyIgNQotICBmaQotZWxzZQotICBhY19j dl9wYXRoX1NFRD0kU0VECi1maQogCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wYXRoX1NFRCIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2 X3BhdGhfU0VEIiA+JjY7IH0KLSBTRUQ9IiRhY19jdl9wYXRoX1NFRCIKLSAgcm0gLWYgY29uZnRl c3Quc2VkCisjIFdlIGRlZmluZSwgc2VwYXJhdGVseSwgUFRIUkVBRF9DRkxBR1MsIF9MREZMQUdT IGFuZCBfTElCUworIyBldmVuIHRob3VnaCBjdXJyZW50bHkgd2UgZG9uJ3Qgc2V0IHRoZW0gdmVy eSBzZXBhcmF0ZWx5LgorIyBUaGlzIG1lYW5zIHRoYXQgdGhlIG1ha2VmaWxlcyB3aWxsIG5vdCBu ZWVkIHRvIGNoYW5nZSBpbgorIyB0aGUgZnV0dXJlIGlmIHdlIG1ha2UgdGhlIHRlc3QgbW9yZSBz b3BoaXN0aWNhdGVkLgogCi1hY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2Nv bXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFj X2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxB R1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2Nf Y29tcGlsZXJfZ251Ci1pZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICMgRXh0 cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1nY2MiLCBzbyBpdCBjYW4g YmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9 Z2NjOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFj X3dvcmQuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsg dGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4g IiRDQyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlk ZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IK LWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAi JGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1 dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFj X2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0Ijsg fTsgdGhlbgotICAgIGFjX2N2X3Byb2dfQ0M9IiR7YWNfdG9vbF9wcmVmaXh9Z2NjIgotICAgICRh c19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dv cmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZT PSRhc19zYXZlX0lGUwogCi1maQotZmkKLUNDPSRhY19jdl9wcm9nX0NDCi1pZiB0ZXN0IC1uICIk Q0MiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVz dWx0OiAkQ0MiID4mNQotJGFzX2VjaG8gIiRDQyIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8g IiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAi bm8iID4mNjsgfQotZmkKIAorIyBXZSBpbnZva2UgQVhfUFRIUkVBRF9WQVJTIHdpdGggdGhlIG5h bWUgb2YgYW5vdGhlciBtYWNybworIyB3aGljaCBpcyB0aGVuIGV4cGFuZGVkIG9uY2UgZm9yIGVh Y2ggdmFyaWFibGUuCiAKLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19DQyI7IHRoZW4KLSAg YWNfY3RfQ0M9JENDCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZ2NjIiwgc28gaXQg Y2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSBnY2M7IGFjX3dvcmQ9 JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9y ICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4m NjsgfQotaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0NDK3NldH0iID0gc2V0OyB0aGVuIDoK LSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJGFjX2N0 X0NDIjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfY3RfQ0MiICMgTGV0IHRoZSB1 c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRI X1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwot ICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAn JyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiB7IHRlc3QgLWYgIiRhc19kaXIv JGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNf ZXhlY19leHQiOyB9OyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iZ2NjIgotICAgICRh c19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dv cmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZT PSRhc19zYXZlX0lGUwogCi1maQotZmkKLWFjX2N0X0NDPSRhY19jdl9wcm9nX2FjX2N0X0NDCi1p ZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xp bmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQotJGFzX2VjaG8gIiRhY19jdF9D QyIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKIAotICBpZiB0ZXN0 ICJ4JGFjX2N0X0NDIiA9IHg7IHRoZW4KLSAgICBDQz0iIgotICBlbHNlCi0gICAgY2FzZSAkY3Jv c3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoteWVzOikKLXsgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHBy ZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6 IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30K LWFjX3Rvb2xfd2FybmVkPXllcyA7OwotZXNhYwotICAgIENDPSRhY19jdF9DQwotICBmaQotZWxz ZQotICBDQz0iJGFjX2N2X3Byb2dfQ0MiCi1maQogCi1pZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCi0g ICAgICAgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAgICMgRXh0cmFj dCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1jYyIsIHNvIGl0IGNhbiBiZSBh IHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1jYzsg YWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVj a2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3Jk Li4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4g OgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkQ0Mi OyB0aGVuCi0gIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhl IHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3Ig YXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19k aXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxl X2V4dGVuc2lvbnM7IGRvCi0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVj X2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRo ZW4KLSAgICBhY19jdl9wcm9nX0NDPSIke2FjX3Rvb2xfcHJlZml4fWNjIgotICAgICRhc19lY2hv ICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNf ZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19z YXZlX0lGUwogCi1maQotZmkKLUNDPSRhY19jdl9wcm9nX0NDCi1pZiB0ZXN0IC1uICIkQ0MiOyB0 aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAk Q0MiID4mNQotJGFzX2VjaG8gIiRDQyIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4m NjsgfQotZmkKIAogCi0gIGZpCi1maQotaWYgdGVzdCAteiAiJENDIjsgdGhlbgotICAjIEV4dHJh Y3QgdGhlIGZpcnN0IHdvcmQgb2YgImNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdp dGggYXJncy4KLXNldCBkdW1teSBjYzsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9f biAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3By b2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgot ZWxzZQotICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCi0gIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBM ZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi0gIGFjX3Byb2dfcmVqZWN0ZWQ9 bm8KLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4g JFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNf ZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9u czsgZG8KLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAk YXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotICAgIGlm IHRlc3QgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID0gIi91c3IvdWNiL2NjIjsgdGhl bgotICAgICAgIGFjX3Byb2dfcmVqZWN0ZWQ9eWVzCi0gICAgICAgY29udGludWUKLSAgICAgZmkK LSAgICBhY19jdl9wcm9nX0NDPSJjYyIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBi cmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKIAotaWYgdGVzdCAk YWNfcHJvZ19yZWplY3RlZCA9IHllczsgdGhlbgotICAjIFdlIGZvdW5kIGEgYm9nb24gaW4gdGhl IHBhdGgsIHNvIG1ha2Ugc3VyZSB3ZSBuZXZlciB1c2UgaXQuCi0gIHNldCBkdW1teSAkYWNfY3Zf cHJvZ19DQwotICBzaGlmdAotICBpZiB0ZXN0ICQjICE9IDA7IHRoZW4KLSAgICAjIFdlIGNob3Nl IGEgZGlmZmVyZW50IGNvbXBpbGVyIGZyb20gdGhlIGJvZ3VzIG9uZS4KLSAgICAjIEhvd2V2ZXIs IGl0IGhhcyB0aGUgc2FtZSBiYXNlbmFtZSwgc28gdGhlIGJvZ29uIHdpbGwgYmUgY2hvc2VuCi0g ICAgIyBmaXJzdCBpZiB3ZSBzZXQgQ0MgdG8ganVzdCB0aGUgYmFzZW5hbWU7IHVzZSB0aGUgZnVs bCBmaWxlIG5hbWUuCi0gICAgc2hpZnQKLSAgICBhY19jdl9wcm9nX0NDPSIkYXNfZGlyLyRhY193 b3JkJHsxKycgJ30kQCIKLSAgZmkKLWZpCi1maQotZmkKLUNDPSRhY19jdl9wcm9nX0NDCi1pZiB0 ZXN0IC1uICIkQ0MiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogcmVzdWx0OiAkQ0MiID4mNQotJGFzX2VjaG8gIiRDQyIgPiY2OyB9Ci1lbHNlCi0gIHsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0k YXNfZWNobyAibm8iID4mNjsgfQorIyBFbmFibGUvZGlzYWJsZSBvcHRpb25zCisKKyMgQ2hlY2sg d2hldGhlciAtLWVuYWJsZS1naXRodHRwIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2dp dGh0dHArc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9naXRodHRwOwog ZmkKIAogCi1maQotaWYgdGVzdCAteiAiJENDIjsgdGhlbgotICBpZiB0ZXN0IC1uICIkYWNfdG9v bF9wcmVmaXgiOyB0aGVuCi0gIGZvciBhY19wcm9nIGluIGNsLmV4ZQotICBkbwotICAgICMgRXh0 cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBj YW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICRhY190b29sX3ByZWZp eCRhY19wcm9nOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJ TkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBm b3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9 IHNldDsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRl c3QgLW4gIiRDQyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBv dmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBB UkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVz dCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFj X2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193 b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNf ZXh0IjsgfTsgdGhlbgotICAgIGFjX2N2X3Byb2dfQ0M9IiRhY190b29sX3ByZWZpeCRhY19wcm9n IgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19k aXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAg ZG9uZQotSUZTPSRhc19zYXZlX0lGUworaWYgdGVzdCAieCRlbmFibGVfZ2l0aHR0cCIgPSAieG5v IjsgdGhlbiA6CiAKLWZpCi1maQotQ0M9JGFjX2N2X3Byb2dfQ0MKLWlmIHRlc3QgLW4gIiRDQyI7 IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6 ICRDQyIgPiY1Ci0kYXNfZWNobyAiJENDIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFz X21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIg PiY2OyB9Ci1maQorICAgIGF4X2N2X2dpdGh0dHA9Im4iCiAKK2VsaWYgdGVzdCAieCRlbmFibGVf Z2l0aHR0cCIgPSAieHllcyI7IHRoZW4gOgogCi0gICAgdGVzdCAtbiAiJENDIiAmJiBicmVhawot ICBkb25lCi1maQotaWYgdGVzdCAteiAiJENDIjsgdGhlbgotICBhY19jdF9DQz0kQ0MKLSAgZm9y IGFjX3Byb2cgaW4gY2wuZXhlCi1kbwotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRh Y19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1t eSAkYWNfcHJvZzsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRM SU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcg Zm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQ0Mr c2V0fSIgPSBzZXQ7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQot ICBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCi0gIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRh Y19jdF9DQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZl X0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwot ICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAg Zm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlm IHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAi JGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSAgICBhY19jdl9wcm9nX2Fj X2N0X0NDPSIkYWNfcHJvZyIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5F Tk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAy Ci0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKKyAgICBheF9jdl9naXRodHRw PSJ5IgorCitlbGlmIHRlc3QgLXogJGF4X2N2X2dpdGh0dHA7IHRoZW4gOgorCisgICAgYXhfY3Zf Z2l0aHR0cD0ibiIKIAogZmkKLWZpCi1hY19jdF9DQz0kYWNfY3ZfcHJvZ19hY19jdF9DQwotaWYg dGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5l bm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0NDIiA+JjUKLSRhc19lY2hvICIkYWNfY3RfQ0Mi ID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCitnaXRodHRwPSRheF9j dl9naXRodHRwCiAKIAotICB0ZXN0IC1uICIkYWNfY3RfQ0MiICYmIGJyZWFrCi1kb25lCiAKLSAg aWYgdGVzdCAieCRhY19jdF9DQyIgPSB4OyB0aGVuCi0gICAgQ0M9IiIKLSAgZWxzZQotICAgIGNh c2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KLXllczopCi17ICRhc19lY2hv ICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xz IG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBX QVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQi ID4mMjt9Ci1hY190b29sX3dhcm5lZD15ZXMgOzsKLWVzYWMKLSAgICBDQz0kYWNfY3RfQ0MKLSAg ZmkKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1tb25pdG9ycyB3YXMgZ2l2ZW4uCitpZiB0ZXN0 ICIke2VuYWJsZV9tb25pdG9ycytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5h YmxlX21vbml0b3JzOwogZmkKIAotZmkKIAoraWYgdGVzdCAieCRlbmFibGVfbW9uaXRvcnMiID0g InhubyI7IHRoZW4gOgogCi10ZXN0IC16ICIkQ0MiICYmIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQotJGFzX2VjaG8g IiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQotYXNfZm5fZXJyb3IgJD8gIm5v IGFjY2VwdGFibGUgQyBjb21waWxlciBmb3VuZCBpbiBcJFBBVEgKLVNlZSBcYGNvbmZpZy5sb2cn IGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1IDsgfQorICAgIGF4X2N2X21vbml0b3JzPSJu IgogCi0jIFByb3ZpZGUgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tcGlsZXIuCi0kYXNf ZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQyBjb21waWxl ciB2ZXJzaW9uIiA+JjUKLXNldCBYICRhY19jb21waWxlCi1hY19jb21waWxlcj0kMgotZm9yIGFj X29wdGlvbiBpbiAtLXZlcnNpb24gLXYgLVYgLXF2ZXJzaW9uOyBkbwotICB7IHsgYWNfdHJ5PSIk YWNfY29tcGlsZXIgJGFjX29wdGlvbiA+JjUiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiog fCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0k YWNfdHJ5OzsKLWVzYWMKLWV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0k TElORU5PfTogJGFjX3RyeV9lY2hvXCIiCi0kYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUK LSAgKGV2YWwgIiRhY19jb21waWxlciAkYWNfb3B0aW9uID4mNSIpIDI+Y29uZnRlc3QuZXJyCi0g IGFjX3N0YXR1cz0kPwotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIHNlZCAn MTBhXAotLi4uIHJlc3Qgb2Ygc3RkZXJyIG91dHB1dCBkZWxldGVkIC4uLgotICAgICAgICAgMTBx JyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQotICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1Ci0g IGZpCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKLSAgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFj X3N0YXR1cyA9IDA7IH0KLWRvbmUKK2VsaWYgdGVzdCAieCRlbmFibGVfbW9uaXRvcnMiID0gInh5 ZXMiOyB0aGVuIDoKIAoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBj aGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgY29tcGlsZXIiID4mNQotJGFz X2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVy Li4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2NfY29tcGlsZXJfZ251K3NldH0iID0gc2V0 OyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2F0IGNvbmZk ZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAq LworICAgIGF4X2N2X21vbml0b3JzPSJ5IgogCi1pbnQKLW1haW4gKCkKLXsKLSNpZm5kZWYgX19H TlVDX18KLSAgICAgICBjaG9rZSBtZQotI2VuZGlmCitlbGlmIHRlc3QgLXogJGF4X2N2X21vbml0 b3JzOyB0aGVuIDoKIAotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3Ry eV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2NvbXBpbGVyX2dudT15ZXMKLWVsc2UK LSAgYWNfY29tcGlsZXJfZ251PW5vCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRl c3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1hY19jdl9jX2NvbXBpbGVyX2dudT0kYWNf Y29tcGlsZXJfZ251CisgICAgYXhfY3ZfbW9uaXRvcnM9InkiCiAKIGZpCi17ICRhc19lY2hvICIk YXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2NfY29tcGlsZXJfZ251 IiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfY19jb21waWxlcl9nbnUiID4mNjsgfQotaWYgdGVzdCAk YWNfY29tcGlsZXJfZ251ID0geWVzOyB0aGVuCi0gIEdDQz15ZXMKLWVsc2UKLSAgR0NDPQotZmkK LWFjX3Rlc3RfQ0ZMQUdTPSR7Q0ZMQUdTK3NldH0KLWFjX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKLXsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAk Q0MgYWNjZXB0cyAtZyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRDQyBhY2Nl cHRzIC1nLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfY2NfZytzZXR9IiA9IHNl dDsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGFjX3NhdmVf Y193ZXJyb3JfZmxhZz0kYWNfY193ZXJyb3JfZmxhZwotICAgYWNfY193ZXJyb3JfZmxhZz15ZXMK LSAgIGFjX2N2X3Byb2dfY2NfZz1ubwotICAgQ0ZMQUdTPSItZyIKLSAgIGNhdCBjb25mZGVmcy5o IC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KK21v bml0b3JzPSRheF9jdl9tb25pdG9ycwogCi1pbnQKLW1haW4gKCkKLXsKIAotICA7Ci0gIHJldHVy biAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6 Ci0gIGFjX2N2X3Byb2dfY2NfZz15ZXMKLWVsc2UKLSAgQ0ZMQUdTPSIiCi0gICAgICBjYXQgY29u ZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4g ICovCiAKLWludAotbWFpbiAoKQoteworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXZ0cG0gd2Fz IGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfdnRwbStzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVu YWJsZXZhbD0kZW5hYmxlX3Z0cG07CitmaQogCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YK LWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKIAotZWxzZQotICBhY19j X3dlcnJvcl9mbGFnPSRhY19zYXZlX2Nfd2Vycm9yX2ZsYWcKLQkgQ0ZMQUdTPSItZyIKLQkgY2F0 IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZz LmguICAqLworaWYgdGVzdCAieCRlbmFibGVfdnRwbSIgPSAieG5vIjsgdGhlbiA6CiAKLWludAot bWFpbiAoKQoteworICAgIGF4X2N2X3Z0cG09Im4iCisKK2VsaWYgdGVzdCAieCRlbmFibGVfdnRw bSIgPSAieHllcyI7IHRoZW4gOgorCisgICAgYXhfY3ZfdnRwbT0ieSIKKworZWxpZiB0ZXN0IC16 ICRheF9jdl92dHBtOyB0aGVuIDoKKworICAgIGF4X2N2X3Z0cG09Im4iCiAKLSAgOwotICByZXR1 cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4g OgotICBhY19jdl9wcm9nX2NjX2c9eWVzCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29u ZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotcm0gLWYgY29yZSBjb25mdGVz dC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotcm0gLWYgY29y ZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gICBh Y19jX3dlcnJvcl9mbGFnPSRhY19zYXZlX2Nfd2Vycm9yX2ZsYWcKLWZpCi17ICRhc19lY2hvICIk YXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfZyIgPiY1 Ci0kYXNfZWNobyAiJGFjX2N2X3Byb2dfY2NfZyIgPiY2OyB9Ci1pZiB0ZXN0ICIkYWNfdGVzdF9D RkxBR1MiID0gc2V0OyB0aGVuCi0gIENGTEFHUz0kYWNfc2F2ZV9DRkxBR1MKLWVsaWYgdGVzdCAk YWNfY3ZfcHJvZ19jY19nID0geWVzOyB0aGVuCi0gIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVu Ci0gICAgQ0ZMQUdTPSItZyAtTzIiCi0gIGVsc2UKLSAgICBDRkxBR1M9Ii1nIgotICBmaQotZWxz ZQotICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAgIENGTEFHUz0iLU8yIgotICBlbHNl Ci0gICAgQ0ZMQUdTPQotICBmaQogZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0k TElORU5PfTogY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDODkiID4mNQot JGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDODkuLi4g IiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jY19jODkrc2V0fSIgPSBzZXQ7IHRoZW4g OgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBhY19jdl9wcm9nX2NjX2M4 OT1ubwotYWNfc2F2ZV9DQz0kQ0MKLWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0 LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNp bmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9z dGF0Lmg+Ci0vKiBNb3N0IG9mIHRoZSBmb2xsb3dpbmcgdGVzdHMgYXJlIHN0b2xlbiBmcm9tIFJD UyA1LjcncyBzcmMvY29uZi5zaC4gICovCi1zdHJ1Y3QgYnVmIHsgaW50IHg7IH07Ci1GSUxFICog KCpyY3NvcGVuKSAoc3RydWN0IGJ1ZiAqLCBzdHJ1Y3Qgc3RhdCAqLCBpbnQpOwotc3RhdGljIGNo YXIgKmUgKHAsIGkpCi0gICAgIGNoYXIgKipwOwotICAgICBpbnQgaTsKLXsKLSAgcmV0dXJuIHBb aV07Ci19Ci1zdGF0aWMgY2hhciAqZiAoY2hhciAqICgqZykgKGNoYXIgKiosIGludCksIGNoYXIg KipwLCAuLi4pCi17Ci0gIGNoYXIgKnM7Ci0gIHZhX2xpc3QgdjsKLSAgdmFfc3RhcnQgKHYscCk7 Ci0gIHMgPSBnIChwLCB2YV9hcmcgKHYsaW50KSk7Ci0gIHZhX2VuZCAodik7Ci0gIHJldHVybiBz OwotfQordnRwbT0kYXhfY3ZfdnRwbQogCi0vKiBPU0YgNC4wIENvbXBhcSBjYyBpcyBzb21lIHNv cnQgb2YgYWxtb3N0LUFOU0kgYnkgZGVmYXVsdC4gIEl0IGhhcwotICAgZnVuY3Rpb24gcHJvdG90 eXBlcyBhbmQgc3R1ZmYsIGJ1dCBub3QgJ1x4SEgnIGhleCBjaGFyYWN0ZXIgY29uc3RhbnRzLgot ICAgVGhlc2UgZG9uJ3QgcHJvdm9rZSBhbiBlcnJvciB1bmZvcnR1bmF0ZWx5LCBpbnN0ZWFkIGFy ZSBzaWxlbnRseSB0cmVhdGVkCi0gICBhcyAneCcuICBUaGUgZm9sbG93aW5nIGluZHVjZXMgYW4g ZXJyb3IsIHVudGlsIC1zdGQgaXMgYWRkZWQgdG8gZ2V0Ci0gICBwcm9wZXIgQU5TSSBtb2RlLiAg Q3VyaW91c2x5ICdceDAwJyE9J3gnIGFsd2F5cyBjb21lcyBvdXQgdHJ1ZSwgZm9yIGFuCi0gICBh cnJheSBzaXplIGF0IGxlYXN0LiAgSXQncyBuZWNlc3NhcnkgdG8gd3JpdGUgJ1x4MDAnPT0wIHRv IGdldCBzb21ldGhpbmcKLSAgIHRoYXQncyB0cnVlIG9ubHkgd2l0aCAtc3RkLiAgKi8KLWludCBv c2Y0X2NjX2FycmF5IFsnXHgwMCcgPT0gMCA/IDEgOiAtMV07CiAKLS8qIElCTSBDIDYgZm9yIEFJ WCBpcyBhbG1vc3QtQU5TSSBieSBkZWZhdWx0LCBidXQgaXQgcmVwbGFjZXMgbWFjcm8gcGFyYW1l dGVycwotICAgaW5zaWRlIHN0cmluZ3MgYW5kIGNoYXJhY3RlciBjb25zdGFudHMuICAqLwotI2Rl ZmluZSBGT08oeCkgJ3gnCi1pbnQgeGxjNl9jY19hcnJheVtGT08oYSkgPT0gJ3gnID8gMSA6IC0x XTsKIAotaW50IHRlc3QgKGludCBpLCBkb3VibGUgeCk7Ci1zdHJ1Y3QgczEge2ludCAoKmYpIChp bnQgYSk7fTsKLXN0cnVjdCBzMiB7aW50ICgqZikgKGRvdWJsZSBhKTt9OwotaW50IHBhaXJuYW1l cyAoaW50LCBjaGFyICoqLCBGSUxFICooKikoc3RydWN0IGJ1ZiAqLCBzdHJ1Y3Qgc3RhdCAqLCBp bnQpLCBpbnQsIGludCk7Ci1pbnQgYXJnYzsKLWNoYXIgKiphcmd2OwotaW50Ci1tYWluICgpCi17 Ci1yZXR1cm4gZiAoZSwgYXJndiwgMCkgIT0gYXJndlswXSAgfHwgIGYgKGUsIGFyZ3YsIDEpICE9 IGFyZ3ZbMV07Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWZvciBhY19hcmcgaW4gJycg LXFsYW5nbHZsPWV4dGM4OSAtcWxhbmdsdmw9YW5zaSAtc3RkIFwKLQktQWUgIi1BYSAtRF9IUFVY X1NPVVJDRSIgIi1YYyAtRF9fRVhURU5TSU9OU19fIgotZG8KLSAgQ0M9IiRhY19zYXZlX0NDICRh Y19hcmciCi0gIGlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNf Y3ZfcHJvZ19jY19jODk9JGFjX2FyZworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXhlbmFwaSB3 YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV94ZW5hcGkrc2V0fSIgPSBzZXQ7IHRoZW4gOgor ICBlbmFibGV2YWw9JGVuYWJsZV94ZW5hcGk7CiBmaQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIg Y29uZnRlc3QuJGFjX29iamV4dAotICB0ZXN0ICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiAhPSAieG5v IiAmJiBicmVhawotZG9uZQotcm0gLWYgY29uZnRlc3QuJGFjX2V4dAotQ0M9JGFjX3NhdmVfQ0MK KworCitpZiB0ZXN0ICJ4JGVuYWJsZV94ZW5hcGkiID0gInhubyI7IHRoZW4gOgorCisgICAgYXhf Y3ZfeGVuYXBpPSJuIgorCitlbGlmIHRlc3QgIngkZW5hYmxlX3hlbmFwaSIgPSAieHllcyI7IHRo ZW4gOgorCisgICAgYXhfY3ZfeGVuYXBpPSJ5IgorCitlbGlmIHRlc3QgLXogJGF4X2N2X3hlbmFw aTsgdGhlbiA6CisKKyAgICBheF9jdl94ZW5hcGk9Im4iCiAKIGZpCi0jIEFDX0NBQ0hFX1ZBTAot Y2FzZSAieCRhY19jdl9wcm9nX2NjX2M4OSIgaW4KLSAgeCkKLSAgICB7ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm9uZSBuZWVkZWQiID4mNQotJGFzX2Vj aG8gIm5vbmUgbmVlZGVkIiA+JjY7IH0gOzsKLSAgeG5vKQotICAgIHsgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB1bnN1cHBvcnRlZCIgPiY1Ci0kYXNfZWNo byAidW5zdXBwb3J0ZWQiID4mNjsgfSA7OwotICAqKQotICAgIENDPSIkQ0MgJGFjX2N2X3Byb2df Y2NfYzg5IgotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVz dWx0OiAkYWNfY3ZfcHJvZ19jY19jODkiID4mNQotJGFzX2VjaG8gIiRhY19jdl9wcm9nX2NjX2M4 OSIgPiY2OyB9IDs7Ci1lc2FjCi1pZiB0ZXN0ICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiAhPSB4bm87 IHRoZW4gOgoreGVuYXBpPSRheF9jdl94ZW5hcGkKKwogCisKKyMgQ2hlY2sgd2hldGhlciAtLWVu YWJsZS1weXRob250b29scyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9weXRob250b29s cytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3B5dGhvbnRvb2xzOwog ZmkKIAotYWNfZXh0PWMKLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ0Mg LWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ0Mg LW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0 LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2du dQogCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdo ZXRoZXIgbG4gLXMgd29ya3MiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBsbiAt cyB3b3Jrcy4uLiAiID4mNjsgfQotTE5fUz0kYXNfbG5fcwotaWYgdGVzdCAiJExOX1MiID0gImxu IC1zIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJl c3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5ZXMiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hv ICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8sIHVzaW5nICRMTl9TIiA+ JjUKLSRhc19lY2hvICJubywgdXNpbmcgJExOX1MiID4mNjsgfQoraWYgdGVzdCAieCRlbmFibGVf cHl0aG9udG9vbHMiID0gInhubyI7IHRoZW4gOgorCisgICAgYXhfY3ZfcHl0aG9udG9vbHM9Im4i CisKK2VsaWYgdGVzdCAieCRlbmFibGVfcHl0aG9udG9vbHMiID0gInh5ZXMiOyB0aGVuIDoKKwor ICAgIGF4X2N2X3B5dGhvbnRvb2xzPSJ5IgorCitlbGlmIHRlc3QgLXogJGF4X2N2X3B5dGhvbnRv b2xzOyB0aGVuIDoKKworICAgIGF4X2N2X3B5dGhvbnRvb2xzPSJ5IgorCiBmaQorcHl0aG9udG9v bHM9JGF4X2N2X3B5dGhvbnRvb2xzCiAKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0k TElORU5PfTogY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJChNQUtFKSIgPiY1 Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICR7TUFLRS1tYWtlfSBzZXRzIFwkKE1BS0Up Li4uICIgPiY2OyB9Ci1zZXQgeCAke01BS0UtbWFrZX0KLWFjX21ha2U9YCRhc19lY2hvICIkMiIg fCBzZWQgJ3MvKy9wL2c7IHMvW15hLXpBLVowLTlfXS9fL2cnYAotaWYgZXZhbCAidGVzdCBcIlwk e2FjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldCtzZXR9XCIiID0gc2V0OyB0aGVuIDoKLSAg JGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC5tYWtlIDw8 XF9BQ0VPRgotU0hFTEwgPSAvYmluL3NoCi1hbGw6Ci0JQGVjaG8gJ0BAQCUlJT0kKE1BS0UpPUBA QCUlJScKLV9BQ0VPRgotIyBHTlUgbWFrZSBzb21ldGltZXMgcHJpbnRzICJtYWtlWzFdOiBFbnRl cmluZyAuLi4iLCB3aGljaCB3b3VsZCBjb25mdXNlIHVzLgotY2FzZSBgJHtNQUtFLW1ha2V9IC1m IGNvbmZ0ZXN0Lm1ha2UgMj4vZGV2L251bGxgIGluCi0gICpAQEAlJSU9Pyo9QEBAJSUlKikKLSAg ICBldmFsIGFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldD15ZXM7OwotICAqKQotICAgIGV2 YWwgYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0PW5vOzsKLWVzYWMKLXJtIC1mIGNvbmZ0 ZXN0Lm1ha2UKKworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtb2NhbWx0b29scyB3YXMgZ2l2 ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9vY2FtbHRvb2xzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAg ZW5hYmxldmFsPSRlbmFibGVfb2NhbWx0b29sczsKIGZpCi1pZiBldmFsIHRlc3QgXCRhY19jdl9w cm9nX21ha2VfJHthY19tYWtlfV9zZXQgPSB5ZXM7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+ JjY7IH0KLSAgU0VUX01BS0U9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotICBTRVRf TUFLRT0iTUFLRT0ke01BS0UtbWFrZX0iCisKKworaWYgdGVzdCAieCRlbmFibGVfb2NhbWx0b29s cyIgPSAieG5vIjsgdGhlbiA6CisKKyAgICBheF9jdl9vY2FtbHRvb2xzPSJuIgorCitlbGlmIHRl c3QgIngkZW5hYmxlX29jYW1sdG9vbHMiID0gInh5ZXMiOyB0aGVuIDoKKworICAgIGF4X2N2X29j YW1sdG9vbHM9InkiCisKK2VsaWYgdGVzdCAteiAkYXhfY3Zfb2NhbWx0b29sczsgdGhlbiA6CisK KyAgICBheF9jdl9vY2FtbHRvb2xzPSJ5IgorCiBmaQorb2NhbWx0b29scz0kYXhfY3Zfb2NhbWx0 b29scwogCi0jIEZpbmQgYSBnb29kIGluc3RhbGwgcHJvZ3JhbS4gIFdlIHByZWZlciBhIEMgcHJv Z3JhbSAoZmFzdGVyKSwKLSMgc28gb25lIHNjcmlwdCBpcyBhcyBnb29kIGFzIGFub3RoZXIuICBC dXQgYXZvaWQgdGhlIGJyb2tlbiBvcgotIyBpbmNvbXBhdGlibGUgdmVyc2lvbnM6Ci0jIFN5c1Yg L2V0Yy9pbnN0YWxsLCAvdXNyL3NiaW4vaW5zdGFsbAotIyBTdW5PUyAvdXNyL2V0Yy9pbnN0YWxs Ci0jIElSSVggL3NiaW4vaW5zdGFsbAotIyBBSVggL2Jpbi9pbnN0YWxsCi0jIEFtaWdhT1MgL0Mv aW5zdGFsbCwgd2hpY2ggaW5zdGFsbHMgYm9vdGJsb2NrcyBvbiBmbG9wcHkgZGlzY3MKLSMgQUlY IDQgL3Vzci9iaW4vaW5zdGFsbGJzZCwgd2hpY2ggZG9lc24ndCB3b3JrIHdpdGhvdXQgYSAtZyBm bGFnCi0jIEFGUyAvdXNyL2Fmc3dzL2Jpbi9pbnN0YWxsLCB3aGljaCBtaXNoYW5kbGVzIG5vbmV4 aXN0ZW50IGFyZ3MKLSMgU1ZSNCAvdXNyL3VjYi9pbnN0YWxsLCB3aGljaCB0cmllcyB0byB1c2Ug dGhlIG5vbmV4aXN0ZW50IGdyb3VwICJzdGFmZiIKLSMgT1MvMidzIHN5c3RlbSBpbnN0YWxsLCB3 aGljaCBoYXMgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBzZW1hbnRpYwotIyAuL2luc3RhbGwsIHdo aWNoIGNhbiBiZSBlcnJvbmVvdXNseSBjcmVhdGVkIGJ5IG1ha2UgZnJvbSAuL2luc3RhbGwuc2gu Ci0jIFJlamVjdCBpbnN0YWxsIHByb2dyYW1zIHRoYXQgY2Fubm90IGluc3RhbGwgbXVsdGlwbGUg ZmlsZXMuCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5n IGZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcg Zm9yIGEgQlNELWNvbXBhdGlibGUgaW5zdGFsbC4uLiAiID4mNjsgfQotaWYgdGVzdCAteiAiJElO U1RBTEwiOyB0aGVuCi1pZiB0ZXN0ICIke2FjX2N2X3BhdGhfaW5zdGFsbCtzZXR9IiA9IHNldDsg dGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGFzX3NhdmVfSUZT PSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElG Uz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICAjIEFj Y291bnQgZm9yIHBlb3BsZSB3aG8gcHV0IHRyYWlsaW5nIHNsYXNoZXMgaW4gUEFUSCBlbGVtZW50 cy4KLWNhc2UgJGFzX2Rpci8gaW4gIygoCi0gIC4vIHwgLi8vIHwgL1tjQ10vKiB8IFwKLSAgL2V0 Yy8qIHwgL3Vzci9zYmluLyogfCAvdXNyL2V0Yy8qIHwgL3NiaW4vKiB8IC91c3IvYWZzd3MvYmlu LyogfCBcCi0gID86W1xcL11vczJbXFwvXWluc3RhbGxbXFwvXSogfCA/OltcXC9dT1MyW1xcL11J TlNUQUxMW1xcL10qIHwgXAotICAvdXNyL3VjYi8qICkgOzsKLSAgKikKLSAgICAjIE9TRjEgYW5k IFNDTyBPRFQgMy4wIGhhdmUgdGhlaXIgb3duIG5hbWVzIGZvciBpbnN0YWxsLgotICAgICMgRG9u J3QgdXNlIGluc3RhbGxic2QgZnJvbSBPU0Ygc2luY2UgaXQgaW5zdGFsbHMgc3R1ZmYgYXMgcm9v dAotICAgICMgYnkgZGVmYXVsdC4KLSAgICBmb3IgYWNfcHJvZyBpbiBnaW5zdGFsbCBzY29pbnN0 IGluc3RhbGw7IGRvCi0gICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVf ZXh0ZW5zaW9uczsgZG8KLQlpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19l eHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiOyB9OyB0aGVu Ci0JICBpZiB0ZXN0ICRhY19wcm9nID0gaW5zdGFsbCAmJgotCSAgICBncmVwIGRzcG1zZyAiJGFz X2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0JICAgICMg QUlYIGluc3RhbGwuICBJdCBoYXMgYW4gaW5jb21wYXRpYmxlIGNhbGxpbmcgY29udmVudGlvbi4K LQkgICAgOgotCSAgZWxpZiB0ZXN0ICRhY19wcm9nID0gaW5zdGFsbCAmJgotCSAgICBncmVwIHB3 cGx1cyAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVu Ci0JICAgICMgcHJvZ3JhbS1zcGVjaWZpYyBpbnN0YWxsIHNjcmlwdCB1c2VkIGJ5IEhQIHB3cGx1 cy0tZG9uJ3QgdXNlLgotCSAgICA6Ci0JICBlbHNlCi0JICAgIHJtIC1yZiBjb25mdGVzdC5vbmUg Y29uZnRlc3QudHdvIGNvbmZ0ZXN0LmRpcgotCSAgICBlY2hvIG9uZSA+IGNvbmZ0ZXN0Lm9uZQot CSAgICBlY2hvIHR3byA+IGNvbmZ0ZXN0LnR3bwotCSAgICBta2RpciBjb25mdGVzdC5kaXIKLQkg ICAgaWYgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiIC1jIGNvbmZ0ZXN0Lm9uZSBjb25m dGVzdC50d28gImBwd2RgL2NvbmZ0ZXN0LmRpciIgJiYKLQkgICAgICB0ZXN0IC1zIGNvbmZ0ZXN0 Lm9uZSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LnR3byAmJgotCSAgICAgIHRlc3QgLXMgY29uZnRlc3Qu ZGlyL2NvbmZ0ZXN0Lm9uZSAmJgotCSAgICAgIHRlc3QgLXMgY29uZnRlc3QuZGlyL2NvbmZ0ZXN0 LnR3bwotCSAgICB0aGVuCi0JICAgICAgYWNfY3ZfcGF0aF9pbnN0YWxsPSIkYXNfZGlyLyRhY19w cm9nJGFjX2V4ZWNfZXh0IC1jIgotCSAgICAgIGJyZWFrIDMKLQkgICAgZmkKLQkgIGZpCi0JZmkK LSAgICAgIGRvbmUKLSAgICBkb25lCi0gICAgOzsKLWVzYWMKIAotICBkb25lCi1JRlM9JGFzX3Nh dmVfSUZTCiAKLXJtIC1yZiBjb25mdGVzdC5vbmUgY29uZnRlc3QudHdvIGNvbmZ0ZXN0LmRpcgor IyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW1pbml0ZXJtIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7 ZW5hYmxlX21pbml0ZXJtK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVf bWluaXRlcm07CitmaQorCisKK2lmIHRlc3QgIngkZW5hYmxlX21pbml0ZXJtIiA9ICJ4bm8iOyB0 aGVuIDoKKworICAgIGF4X2N2X21pbml0ZXJtPSJuIgorCitlbGlmIHRlc3QgIngkZW5hYmxlX21p bml0ZXJtIiA9ICJ4eWVzIjsgdGhlbiA6CisKKyAgICBheF9jdl9taW5pdGVybT0ieSIKKworZWxp ZiB0ZXN0IC16ICRheF9jdl9taW5pdGVybTsgdGhlbiA6CisKKyAgICBheF9jdl9taW5pdGVybT0i biIKIAogZmkKLSAgaWYgdGVzdCAiJHthY19jdl9wYXRoX2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRo ZW4KLSAgICBJTlNUQUxMPSRhY19jdl9wYXRoX2luc3RhbGwKLSAgZWxzZQotICAgICMgQXMgYSBs YXN0IHJlc29ydCwgdXNlIHRoZSBzbG93IHNoZWxsIHNjcmlwdC4gIERvbid0IGNhY2hlIGEKLSAg ICAjIHZhbHVlIGZvciBJTlNUQUxMIHdpdGhpbiBhIHNvdXJjZSBkaXJlY3RvcnksIGJlY2F1c2Ug dGhhdCB3aWxsCi0gICAgIyBicmVhayBvdGhlciBwYWNrYWdlcyB1c2luZyB0aGUgY2FjaGUgaWYg dGhhdCBkaXJlY3RvcnkgaXMKLSAgICAjIHJlbW92ZWQsIG9yIGlmIHRoZSB2YWx1ZSBpcyBhIHJl bGF0aXZlIG5hbWUuCi0gICAgSU5TVEFMTD0kYWNfaW5zdGFsbF9zaAotICBmaQorbWluaXRlcm09 JGF4X2N2X21pbml0ZXJtCisKKworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbG9tb3VudCB3 YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9sb21vdW50K3NldH0iID0gc2V0OyB0aGVuIDoK KyAgZW5hYmxldmFsPSRlbmFibGVfbG9tb3VudDsKIGZpCi17ICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJElOU1RBTEwiID4mNQotJGFzX2VjaG8gIiRJTlNU QUxMIiA+JjY7IH0KIAotIyBVc2UgdGVzdCAteiBiZWNhdXNlIFN1bk9TNCBzaCBtaXNoYW5kbGVz IGJyYWNlcyBpbiAke3Zhci12YWx9LgotIyBJdCB0aGlua3MgdGhlIGZpcnN0IGNsb3NlIGJyYWNl IGVuZHMgdGhlIHZhcmlhYmxlIHN1YnN0aXR1dGlvbi4KLXRlc3QgLXogIiRJTlNUQUxMX1BST0dS QU0iICYmIElOU1RBTExfUFJPR1JBTT0nJHtJTlNUQUxMfScKIAotdGVzdCAteiAiJElOU1RBTExf U0NSSVBUIiAmJiBJTlNUQUxMX1NDUklQVD0nJHtJTlNUQUxMfScKK2lmIHRlc3QgIngkZW5hYmxl X2xvbW91bnQiID0gInhubyI7IHRoZW4gOgogCi10ZXN0IC16ICIkSU5TVEFMTF9EQVRBIiAmJiBJ TlNUQUxMX0RBVEE9JyR7SU5TVEFMTH0gLW0gNjQ0JworICAgIGF4X2N2X2xvbW91bnQ9Im4iCiAK LSMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiYmlzb24iLCBzbyBpdCBjYW4gYmUgYSBwcm9n cmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IGJpc29uOyBhY193b3JkPSQyCi17ICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIg PiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmIHRl c3QgIiR7YWNfY3ZfcGF0aF9CSVNPTitzZXR9IiA9IHNldDsgdGhlbiA6Ci0gICRhc19lY2hvX24g IihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGNhc2UgJEJJU09OIGluCi0gIFtcXC9dKiB8ID86W1xc L10qKQotICBhY19jdl9wYXRoX0JJU09OPSIkQklTT04iICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRl IHRoZSB0ZXN0IHdpdGggYSBwYXRoLgotICA7OwotICAqKQotICBhc19zYXZlX0lGUz0kSUZTOyBJ RlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3Nh dmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNf ZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIHsgdGVzdCAtZiAi JGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNf d29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSAgICBhY19jdl9wYXRoX0JJU09OPSIkYXNfZGly LyRhY193b3JkJGFjX2V4ZWNfZXh0IgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8t JExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJy ZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUworZWxpZiB0ZXN0ICJ4 JGVuYWJsZV9sb21vdW50IiA9ICJ4eWVzIjsgdGhlbiA6CisKKyAgICBheF9jdl9sb21vdW50PSJ5 IgorCitlbGlmIHRlc3QgLXogJGF4X2N2X2xvbW91bnQ7IHRoZW4gOgorCisgICAgYXhfY3ZfbG9t b3VudD0ibiIKIAotICA7OwotZXNhYwogZmkKLUJJU09OPSRhY19jdl9wYXRoX0JJU09OCi1pZiB0 ZXN0IC1uICIkQklTT04iOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0k TElORU5PfTogcmVzdWx0OiAkQklTT04iID4mNQotJGFzX2VjaG8gIiRCSVNPTiIgPiY2OyB9Ci1l bHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBu byIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQorbG9tb3VudD0kYXhfY3ZfbG9tb3VudAorCisK KworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW92bWYgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtl bmFibGVfb3ZtZitzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX292bWY7 CiBmaQogCiAKLSMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZmxleCIsIHNvIGl0IGNhbiBi ZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgZmxleDsgYWNfd29yZD0kMgot eyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFj X3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9 Ci1pZiB0ZXN0ICIke2FjX2N2X3BhdGhfRkxFWCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0gICRhc19l Y2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGNhc2UgJEZMRVggaW4KLSAgW1xcL10qIHwg PzpbXFwvXSopCi0gIGFjX2N2X3BhdGhfRkxFWD0iJEZMRVgiICMgTGV0IHRoZSB1c2VyIG92ZXJy aWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgotICA7OwotICAqKQotICBhc19zYXZlX0lGUz0kSUZT OyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFz X3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4 ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIHsgdGVzdCAt ZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8k YWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSAgICBhY19jdl9wYXRoX0ZMRVg9IiRhc19k aXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAg YnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCitpZiB0ZXN0ICJ4 JGVuYWJsZV9vdm1mIiA9ICJ4bm8iOyB0aGVuIDoKKworICAgIGF4X2N2X292bWY9Im4iCisKK2Vs aWYgdGVzdCAieCRlbmFibGVfb3ZtZiIgPSAieHllcyI7IHRoZW4gOgorCisgICAgYXhfY3Zfb3Zt Zj0ieSIKKworZWxpZiB0ZXN0IC16ICRheF9jdl9vdm1mOyB0aGVuIDoKKworICAgIGF4X2N2X292 bWY9Im4iCiAKLSAgOzsKLWVzYWMKIGZpCi1GTEVYPSRhY19jdl9wYXRoX0ZMRVgKLWlmIHRlc3Qg LW4gIiRGTEVYIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IHJlc3VsdDogJEZMRVgiID4mNQotJGFzX2VjaG8gIiRGTEVYIiA+JjY7IH0KLWVsc2UKLSAg eyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUK LSRhc19lY2hvICJubyIgPiY2OyB9Citvdm1mPSRheF9jdl9vdm1mCisKKworCisjIENoZWNrIHdo ZXRoZXIgLS1lbmFibGUtcm9tYmlvcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9yb21i aW9zK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfcm9tYmlvczsKIGZp CiAKIAotIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJwZXJsIiwgc28gaXQgY2FuIGJlIGEg cHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSBwZXJsOyBhY193b3JkPSQyCi17ICRh c19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29y ZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlm IHRlc3QgIiR7YWNfY3ZfcGF0aF9QRVJMK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgJGFzX2VjaG9f biAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2FzZSAkUEVSTCBpbgotICBbXFwvXSogfCA/Oltc XC9dKikKLSAgYWNfY3ZfcGF0aF9QRVJMPSIkUEVSTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUg dGhlIHRlc3Qgd2l0aCBhIHBhdGguCi0gIDs7Ci0gICopCi0gIGFzX3NhdmVfSUZTPSRJRlM7IElG Uz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2 ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19l eHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgeyB0ZXN0IC1mICIk YXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193 b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotICAgIGFjX2N2X3BhdGhfUEVSTD0iJGFzX2Rpci8k YWNfd29yZCRhY19leGVjX2V4dCIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRM SU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVh ayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKK2lmIHRlc3QgIngkZW5h YmxlX3JvbWJpb3MiID0gInhubyI7IHRoZW4gOgorCisgICAgYXhfY3Zfcm9tYmlvcz0ibiIKKwor ZWxpZiB0ZXN0ICJ4JGVuYWJsZV9yb21iaW9zIiA9ICJ4eWVzIjsgdGhlbiA6CisKKyAgICBheF9j dl9yb21iaW9zPSJ5IgorCitlbGlmIHRlc3QgLXogJGF4X2N2X3JvbWJpb3M7IHRoZW4gOgorCisg ICAgYXhfY3Zfcm9tYmlvcz0ieSIKIAotICB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9QRVJMIiAmJiBh Y19jdl9wYXRoX1BFUkw9Im5vIgotICA7OwotZXNhYwogZmkKLVBFUkw9JGFjX2N2X3BhdGhfUEVS TAotaWYgdGVzdCAtbiAiJFBFUkwiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xp bmVuby0kTElORU5PfTogcmVzdWx0OiAkUEVSTCIgPiY1Ci0kYXNfZWNobyAiJFBFUkwiID4mNjsg fQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3Vs dDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KK3JvbWJpb3M9JGF4X2N2X3JvbWJpb3MK KworCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zZWFiaW9zIHdhcyBnaXZlbi4KK2lmIHRl c3QgIiR7ZW5hYmxlX3NlYWJpb3Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVu YWJsZV9zZWFiaW9zOworZmkKKworCitpZiB0ZXN0ICJ4JGVuYWJsZV9zZWFiaW9zIiA9ICJ4bm8i OyB0aGVuIDoKKworICAgIGF4X2N2X3NlYWJpb3M9Im4iCisKK2VsaWYgdGVzdCAieCRlbmFibGVf c2VhYmlvcyIgPSAieHllcyI7IHRoZW4gOgorCisgICAgYXhfY3Zfc2VhYmlvcz0ieSIKKworZWxp ZiB0ZXN0IC16ICRheF9jdl9zZWFiaW9zOyB0aGVuIDoKKworICAgIGF4X2N2X3NlYWJpb3M9Inki CisKK2ZpCitzZWFiaW9zPSRheF9jdl9zZWFiaW9zCisKKworCisjIENoZWNrIHdoZXRoZXIgLS1l bmFibGUtZGVidWcgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZGVidWcrc2V0fSIgPSBz ZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9kZWJ1ZzsKK2ZpCisKKworaWYgdGVzdCAi eCRlbmFibGVfZGVidWciID0gInhubyI7IHRoZW4gOgorCisgICAgYXhfY3ZfZGVidWc9Im4iCisK K2VsaWYgdGVzdCAieCRlbmFibGVfZGVidWciID0gInh5ZXMiOyB0aGVuIDoKKworICAgIGF4X2N2 X2RlYnVnPSJ5IgorCitlbGlmIHRlc3QgLXogJGF4X2N2X2RlYnVnOyB0aGVuIDoKKworICAgIGF4 X2N2X2RlYnVnPSJ5IgorCiBmaQorZGVidWc9JGF4X2N2X2RlYnVnCisKKworCisKKworCisKKwor Zm9yIGNmbGFnIGluICRQUkVQRU5EX0lOQ0xVREVTCitkbworICAgIFBSRVBFTkRfQ0ZMQUdTKz0i IC1JJGNmbGFnIgorZG9uZQorZm9yIGxkZmxhZyBpbiAkUFJFUEVORF9MSUIKK2RvCisgICAgUFJF UEVORF9MREZMQUdTKz0iIC1MJGxkZmxhZyIKK2RvbmUKK2ZvciBjZmxhZyBpbiAkQVBQRU5EX0lO Q0xVREVTCitkbworICAgIEFQUEVORF9DRkxBR1MrPSIgLUkkY2ZsYWciCitkb25lCitmb3IgbGRm bGFnIGluICRBUFBFTkRfTElCCitkbworICAgIEFQUEVORF9MREZMQUdTKz0iIC1MJGxkZmxhZyIK K2RvbmUKK0NGTEFHUz0iJFBSRVBFTkRfQ0ZMQUdTICRDRkxBR1MgJEFQUEVORF9DRkxBR1MiCitM REZMQUdTPSIkUFJFUEVORF9MREZMQUdTICRMREZMQUdTICRBUFBFTkRfTERGTEFHUyIKKworCiAK IAotaWYgdGVzdCB4IiR7UEVSTH0iID09IHgibm8iCi10aGVuCi0gICAgYXNfZm5fZXJyb3IgJD8g IlVuYWJsZSB0byBmaW5kIHBlcmwsIHBsZWFzZSBpbnN0YWxsIHBlcmwiICIkTElORU5PIiA1Ci1m aQotaWYgdGVzdCAieCR4YXBpIiA9ICJ4eSI7IHRoZW4gOgogCi0gICAgIyBFeHRyYWN0IHRoZSBm aXJzdCB3b3JkIG9mICJjdXJsLWNvbmZpZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3 aXRoIGFyZ3MuCi1zZXQgZHVtbXkgY3VybC1jb25maWc7IGFjX3dvcmQ9JDIKKworCisKKworCisK KworCisKKyMgQ2hlY2tzIGZvciBwcm9ncmFtcy4KK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQ UEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRh Y19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRD UFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVy X2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7 IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWdj YyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHth Y190b29sX3ByZWZpeH1nY2M7IGFjX3dvcmQ9JDIKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xp bmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKICRhc19lY2hvX24gImNo ZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wYXRoX0NV Ukwrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0g c2V0OyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgY2FzZSAk Q1VSTCBpbgotICBbXFwvXSogfCA/OltcXC9dKikKLSAgYWNfY3ZfcGF0aF9DVVJMPSIkQ1VSTCIg IyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCi0gIDs7Ci0gICop Ci0gIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgaWYgdGVzdCAtbiAi JENDIjsgdGhlbgorICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRl IHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgog Zm9yIGFzX2RpciBpbiAkUEFUSAogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIk YXNfZGlyIiAmJiBhc19kaXI9LgogICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0 YWJsZV9leHRlbnNpb25zOyBkbwogICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNf ZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9 OyB0aGVuCi0gICAgYWNfY3ZfcGF0aF9DVVJMPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0 IgorICAgIGFjX2N2X3Byb2dfQ0M9IiR7YWNfdG9vbF9wcmVmaXh9Z2NjIgogICAgICRhc19lY2hv ICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNf ZXhlY19leHQiID4mNQogICAgIGJyZWFrIDIKICAgZmkKQEAgLTUxNzEsNDQgKzI2NTUsMzkgQEAg ZG9uZQogICBkb25lCiBJRlM9JGFzX3NhdmVfSUZTCiAKLSAgdGVzdCAteiAiJGFjX2N2X3BhdGhf Q1VSTCIgJiYgYWNfY3ZfcGF0aF9DVVJMPSJubyIKLSAgOzsKLWVzYWMKIGZpCi1DVVJMPSRhY19j dl9wYXRoX0NVUkwKLWlmIHRlc3QgLW4gIiRDVVJMIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENVUkwiID4mNQotJGFzX2VjaG8gIiRD VVJMIiA+JjY7IH0KK2ZpCitDQz0kYWNfY3ZfcHJvZ19DQworaWYgdGVzdCAtbiAiJENDIjsgdGhl bgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEND IiA+JjUKKyRhc19lY2hvICIkQ0MiID4mNjsgfQogZWxzZQogICB7ICRhc19lY2hvICIkYXNfbWU6 JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQogJGFzX2VjaG8gIm5vIiA+JjY7 IH0KIGZpCiAKIAotaWYgdGVzdCB4IiR7Q1VSTH0iID09IHgibm8iCi10aGVuCi0gICAgYXNfZm5f ZXJyb3IgJD8gIlVuYWJsZSB0byBmaW5kIGN1cmwtY29uZmlnLCBwbGVhc2UgaW5zdGFsbCBjdXJs LWNvbmZpZyIgIiRMSU5FTk8iIDUKIGZpCi0gICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9m ICJ4bWwyLWNvbmZpZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1z ZXQgZHVtbXkgeG1sMi1jb25maWc7IGFjX3dvcmQ9JDIKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9n X0NDIjsgdGhlbgorICBhY19jdF9DQz0kQ0MKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9m ICJnY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15 IGdjYzsgYWNfd29yZD0kMgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99 OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRh Y193b3JkLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3BhdGhfWE1MK3NldH0iID0gc2V0 OyB0aGVuIDoKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9DQytzZXR9IiA9IHNldDsgdGhl biA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGNhc2UgJFhNTCBpbgot ICBbXFwvXSogfCA/OltcXC9dKikKLSAgYWNfY3ZfcGF0aF9YTUw9IiRYTUwiICMgTGV0IHRoZSB1 c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgotICA7OwotICAqKQotICBhc19zYXZl X0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgIGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7 IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX2N0X0NDIiAjIExldCB0aGUgdXNlciBv dmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBB UkFUT1IKIGZvciBhc19kaXIgaW4gJFBBVEgKIGRvCiAgIElGUz0kYXNfc2F2ZV9JRlMKICAgdGVz dCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFj X2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193 b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNf ZXh0IjsgfTsgdGhlbgotICAgIGFjX2N2X3BhdGhfWE1MPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4 ZWNfZXh0IgorICAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9ImdjYyIKICAgICAkYXNfZWNobyAiJGFz X21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNf ZXh0IiA+JjUKICAgICBicmVhayAyCiAgIGZpCkBAIC01MjE2LDM5ICsyNjk1LDQzIEBAIGRvbmUK ICAgZG9uZQogSUZTPSRhc19zYXZlX0lGUwogCi0gIHRlc3QgLXogIiRhY19jdl9wYXRoX1hNTCIg JiYgYWNfY3ZfcGF0aF9YTUw9Im5vIgotICA7OwotZXNhYwogZmkKLVhNTD0kYWNfY3ZfcGF0aF9Y TUwKLWlmIHRlc3QgLW4gIiRYTUwiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xp bmVuby0kTElORU5PfTogcmVzdWx0OiAkWE1MIiA+JjUKLSRhc19lY2hvICIkWE1MIiA+JjY7IH0K K2ZpCithY19jdF9DQz0kYWNfY3ZfcHJvZ19hY19jdF9DQworaWYgdGVzdCAtbiAiJGFjX2N0X0ND IjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3Vs dDogJGFjX2N0X0NDIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfQ0MiID4mNjsgfQogZWxzZQogICB7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQog JGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKLQotaWYgdGVzdCB4IiR7WE1MfSIgPT0geCJubyIK LXRoZW4KLSAgICBhc19mbl9lcnJvciAkPyAiVW5hYmxlIHRvIGZpbmQgeG1sMi1jb25maWcsIHBs ZWFzZSBpbnN0YWxsIHhtbDItY29uZmlnIiAiJExJTkVOTyIgNQotZmkKLQorICBpZiB0ZXN0ICJ4 JGFjX2N0X0NDIiA9IHg7IHRoZW4KKyAgICBDQz0iIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3Nf Y29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZp eGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVz aW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2Fj X3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIENDPSRhY19jdF9DQworICBmaQorZWxzZQor ICBDQz0iJGFjX2N2X3Byb2dfQ0MiCiBmaQotaWYgdGVzdCAieCRvY2FtbHRvb2xzIiA9ICJ4eSI7 IHRoZW4gOgogCi0gICAgICAjIGNoZWNraW5nIGZvciBvY2FtbGMKLSAgaWYgdGVzdCAtbiAiJGFj X3Rvb2xfcHJlZml4IjsgdGhlbgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNf dG9vbF9wcmVmaXh9b2NhbWxjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJn cy4KLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW9jYW1sYzsgYWNfd29yZD0kMgoraWYgdGVz dCAteiAiJENDIjsgdGhlbgorICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7 IHRoZW4KKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9 Y2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7 YWNfdG9vbF9wcmVmaXh9Y2M7IGFjX3dvcmQ9JDIKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xp bmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKICRhc19lY2hvX24gImNo ZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wcm9nX09D QU1MQytzZXR9IiA9IHNldDsgdGhlbiA6CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIg PSBzZXQ7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBpZiB0 ZXN0IC1uICIkT0NBTUxDIjsgdGhlbgotICBhY19jdl9wcm9nX09DQU1MQz0iJE9DQU1MQyIgIyBM ZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4K KyAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4K IGVsc2UKIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKIGZvciBhc19kaXIg aW4gJFBBVEgKQEAgLTUyNTcsNyArMjc0MCw3IEBAIGRvCiAgIHRlc3QgLXogIiRhc19kaXIiICYm IGFzX2Rpcj0uCiAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVu c2lvbnM7IGRvCiAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIg JiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSAg ICBhY19jdl9wcm9nX09DQU1MQz0iJHthY190b29sX3ByZWZpeH1vY2FtbGMiCisgICAgYWNfY3Zf cHJvZ19DQz0iJHthY190b29sX3ByZWZpeH1jYyIKICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUK ICAgICBicmVhayAyCiAgIGZpCkBAIC01MjY3LDI5ICsyNzUwLDMwIEBAIElGUz0kYXNfc2F2ZV9J RlMKIAogZmkKIGZpCi1PQ0FNTEM9JGFjX2N2X3Byb2dfT0NBTUxDCi1pZiB0ZXN0IC1uICIkT0NB TUxDIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJl c3VsdDogJE9DQU1MQyIgPiY1Ci0kYXNfZWNobyAiJE9DQU1MQyIgPiY2OyB9CitDQz0kYWNfY3Zf cHJvZ19DQworaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENDIiA+JjUKKyRhc19lY2hvICIkQ0MiID4mNjsg fQogZWxzZQogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3Vs dDogbm8iID4mNQogJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKIAorICBmaQogZmkKLWlmIHRl c3QgLXogIiRhY19jdl9wcm9nX09DQU1MQyI7IHRoZW4KLSAgYWNfY3RfT0NBTUxDPSRPQ0FNTEMK LSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJvY2FtbGMiLCBzbyBpdCBjYW4gYmUgYSBw cm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IG9jYW1sYzsgYWNfd29yZD0kMgoraWYg dGVzdCAteiAiJENDIjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImNjIiwg c28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBjYzsgYWNf d29yZD0kMgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2lu ZyBmb3IgJGFjX3dvcmQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4u ICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfT0NBTUxDK3NldH0iID0gc2V0 OyB0aGVuIDoKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbiA6CiAg ICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9P Q0FNTEMiOyB0aGVuCi0gIGFjX2N2X3Byb2dfYWNfY3RfT0NBTUxDPSIkYWNfY3RfT0NBTUxDIiAj IExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKyAgaWYgdGVzdCAtbiAiJENDIjsgdGhl bgorICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0 LgogZWxzZQorICBhY19wcm9nX3JlamVjdGVkPW5vCiBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBB VEhfU0VQQVJBVE9SCiBmb3IgYXNfZGlyIGluICRQQVRICiBkbwpAQCAtNTI5Nyw3ICsyNzgxLDEx IEBAIGRvCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCiAgICAgZm9yIGFjX2V4ZWNf ZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCiAgIGlmIHsgdGVzdCAtZiAi JGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNf d29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSAgICBhY19jdl9wcm9nX2FjX2N0X09DQU1MQz0i b2NhbWxjIgorICAgIGlmIHRlc3QgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID0gIi91 c3IvdWNiL2NjIjsgdGhlbgorICAgICAgIGFjX3Byb2dfcmVqZWN0ZWQ9eWVzCisgICAgICAgY29u dGludWUKKyAgICAgZmkKKyAgICBhY19jdl9wcm9nX0NDPSJjYyIKICAgICAkYXNfZWNobyAiJGFz X21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNf ZXh0IiA+JjUKICAgICBicmVhayAyCiAgIGZpCkBAIC01MzA1LDYxICsyNzkzLDQ0IEBAIGRvbmUK ICAgZG9uZQogSUZTPSRhc19zYXZlX0lGUwogCitpZiB0ZXN0ICRhY19wcm9nX3JlamVjdGVkID0g eWVzOyB0aGVuCisgICMgV2UgZm91bmQgYSBib2dvbiBpbiB0aGUgcGF0aCwgc28gbWFrZSBzdXJl IHdlIG5ldmVyIHVzZSBpdC4KKyAgc2V0IGR1bW15ICRhY19jdl9wcm9nX0NDCisgIHNoaWZ0Cisg IGlmIHRlc3QgJCMgIT0gMDsgdGhlbgorICAgICMgV2UgY2hvc2UgYSBkaWZmZXJlbnQgY29tcGls ZXIgZnJvbSB0aGUgYm9ndXMgb25lLgorICAgICMgSG93ZXZlciwgaXQgaGFzIHRoZSBzYW1lIGJh c2VuYW1lLCBzbyB0aGUgYm9nb24gd2lsbCBiZSBjaG9zZW4KKyAgICAjIGZpcnN0IGlmIHdlIHNl dCBDQyB0byBqdXN0IHRoZSBiYXNlbmFtZTsgdXNlIHRoZSBmdWxsIGZpbGUgbmFtZS4KKyAgICBz aGlmdAorICAgIGFjX2N2X3Byb2dfQ0M9IiRhc19kaXIvJGFjX3dvcmQkezErJyAnfSRAIgorICBm aQogZmkKIGZpCi1hY19jdF9PQ0FNTEM9JGFjX2N2X3Byb2dfYWNfY3RfT0NBTUxDCi1pZiB0ZXN0 IC1uICIkYWNfY3RfT0NBTUxDIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5l bm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X09DQU1MQyIgPiY1Ci0kYXNfZWNobyAiJGFjX2N0 X09DQU1MQyIgPiY2OyB9CitmaQorQ0M9JGFjX2N2X3Byb2dfQ0MKK2lmIHRlc3QgLW4gIiRDQyI7 IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6 ICRDQyIgPiY1CiskYXNfZWNobyAiJENDIiA+JjY7IH0KIGVsc2UKICAgeyAkYXNfZWNobyAiJGFz X21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKICRhc19lY2hvICJubyIg PiY2OyB9CiBmaQogCi0gIGlmIHRlc3QgIngkYWNfY3RfT0NBTUxDIiA9IHg7IHRoZW4KLSAgICBP Q0FNTEM9Im5vIgotICBlbHNlCi0gICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dh cm5lZCBpbgoteWVzOikKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog V0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0 IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBw cmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KLWFjX3Rvb2xfd2FybmVkPXllcyA7Owot ZXNhYwotICAgIE9DQU1MQz0kYWNfY3RfT0NBTUxDCi0gIGZpCi1lbHNlCi0gIE9DQU1MQz0iJGFj X2N2X3Byb2dfT0NBTUxDIgotZmkKLQotCi0gIGlmIHRlc3QgIiRPQ0FNTEMiICE9ICJubyI7IHRo ZW4KLSAgICAgT0NBTUxWRVJTSU9OPWAkT0NBTUxDIC12IHwgc2VkIC1uIC1lICdzfC4qdmVyc2lv biogKlwoLipcKSR8XDF8cCdgCi0gICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0k TElORU5PfTogcmVzdWx0OiBPQ2FtbCB2ZXJzaW9uIGlzICRPQ0FNTFZFUlNJT04iID4mNQotJGFz X2VjaG8gIk9DYW1sIHZlcnNpb24gaXMgJE9DQU1MVkVSU0lPTiIgPiY2OyB9Ci0gICAgICMgSWYg T0NBTUxMSUIgaXMgc2V0LCB1c2UgaXQKLSAgICAgaWYgdGVzdCAiJE9DQU1MTElCIiA9ICIiOyB0 aGVuCi0gICAgICAgIE9DQU1MTElCPWAkT0NBTUxDIC13aGVyZSAyPi9kZXYvbnVsbCB8fCAkT0NB TUxDIC12fHRhaWwgLTF8Y3V0IC1kICcgJyAtZiA0YAotICAgICBlbHNlCi0gICAgICAgIHsgJGFz X2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBPQ0FNTExJQiBwcmV2 aW91c2x5IHNldDsgcHJlc2VydmluZyBpdC4iID4mNQotJGFzX2VjaG8gIk9DQU1MTElCIHByZXZp b3VzbHkgc2V0OyBwcmVzZXJ2aW5nIGl0LiIgPiY2OyB9Ci0gICAgIGZpCi0gICAgIHsgJGFzX2Vj aG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBPQ2FtbCBsaWJyYXJ5IHBh dGggaXMgJE9DQU1MTElCIiA+JjUKLSRhc19lY2hvICJPQ2FtbCBsaWJyYXJ5IHBhdGggaXMgJE9D QU1MTElCIiA+JjY7IH0KLQotCiAKLQotICAgICAjIGNoZWNraW5nIGZvciBvY2FtbG9wdAotICAg ICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICMgRXh0cmFjdCB0aGUgZmly c3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1vY2FtbG9wdCIsIHNvIGl0IGNhbiBiZSBhIHBy b2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1vY2FtbG9w dDsgYWNfd29yZD0kMgorZmkKK2lmIHRlc3QgLXogIiRDQyI7IHRoZW4KKyAgaWYgdGVzdCAtbiAi JGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICBmb3IgYWNfcHJvZyBpbiBjbC5leGUKKyAgZG8KKyAg ICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwg c28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfdG9v bF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGlu ZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQogJGFzX2VjaG9fbiAiY2hl Y2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfT0NB TUxPUFQrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0i ID0gc2V0OyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgaWYg dGVzdCAtbiAiJE9DQU1MT1BUIjsgdGhlbgotICBhY19jdl9wcm9nX09DQU1MT1BUPSIkT0NBTUxP UFQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorICBpZiB0ZXN0IC1uICIkQ0Mi OyB0aGVuCisgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhl IHRlc3QuCiBlbHNlCiBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCiBmb3Ig YXNfZGlyIGluICRQQVRICkBAIC01MzY4LDcgKzI4MzksNyBAQCBkbwogICB0ZXN0IC16ICIkYXNf ZGlyIiAmJiBhc19kaXI9LgogICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJs ZV9leHRlbnNpb25zOyBkbwogICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhl Y19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0 aGVuCi0gICAgYWNfY3ZfcHJvZ19PQ0FNTE9QVD0iJHthY190b29sX3ByZWZpeH1vY2FtbG9wdCIK KyAgICBhY19jdl9wcm9nX0NDPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKICAgICAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFj X2V4ZWNfZXh0IiA+JjUKICAgICBicmVhayAyCiAgIGZpCkBAIC01Mzc4LDI4ICsyODQ5LDMyIEBA IElGUz0kYXNfc2F2ZV9JRlMKIAogZmkKIGZpCi1PQ0FNTE9QVD0kYWNfY3ZfcHJvZ19PQ0FNTE9Q VAotaWYgdGVzdCAtbiAiJE9DQU1MT1BUIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE9DQU1MT1BUIiA+JjUKLSRhc19lY2hvICIkT0NB TUxPUFQiID4mNjsgfQorQ0M9JGFjX2N2X3Byb2dfQ0MKK2lmIHRlc3QgLW4gIiRDQyI7IHRoZW4K KyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIg PiY1CiskYXNfZWNobyAiJENDIiA+JjY7IH0KIGVsc2UKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKICRhc19lY2hvICJubyIgPiY2OyB9 CiBmaQogCiAKKyAgICB0ZXN0IC1uICIkQ0MiICYmIGJyZWFrCisgIGRvbmUKIGZpCi1pZiB0ZXN0 IC16ICIkYWNfY3ZfcHJvZ19PQ0FNTE9QVCI7IHRoZW4KLSAgYWNfY3RfT0NBTUxPUFQ9JE9DQU1M T1BUCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAib2NhbWxvcHQiLCBzbyBpdCBjYW4g YmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IG9jYW1sb3B0OyBhY193b3Jk PSQyCitpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCisgIGFjX2N0X0NDPSRDQworICBmb3IgYWNfcHJv ZyBpbiBjbC5leGUKK2RvCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ci LCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY19w cm9nOyBhY193b3JkPSQyCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFj X3dvcmQuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9PQ0FNTE9QVCtz ZXR9IiA9IHNldDsgdGhlbiA6CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQ0Mrc2V0fSIg PSBzZXQ7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBpZiB0 ZXN0IC1uICIkYWNfY3RfT0NBTUxPUFQiOyB0aGVuCi0gIGFjX2N2X3Byb2dfYWNfY3RfT0NBTUxP UFQ9IiRhY19jdF9PQ0FNTE9QVCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisg IGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFj X2N0X0NDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KIGVsc2UKIGFzX3NhdmVf SUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKIGZvciBhc19kaXIgaW4gJFBBVEgKQEAgLTU0 MDgsNyArMjg4Myw3IEBAIGRvCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCiAgICAg Zm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCiAgIGlm IHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAi JGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSAgICBhY19jdl9wcm9nX2Fj X2N0X09DQU1MT1BUPSJvY2FtbG9wdCIKKyAgICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfcHJv ZyIKICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNf ZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKICAgICBicmVhayAyCiAgIGZpCkBAIC01NDE2 LDE5ICsyODkxLDIzIEBAIGRvbmUKICAgZG9uZQogSUZTPSRhc19zYXZlX0lGUwogCi1maQotZmkK LWFjX2N0X09DQU1MT1BUPSRhY19jdl9wcm9nX2FjX2N0X09DQU1MT1BUCi1pZiB0ZXN0IC1uICIk YWNfY3RfT0NBTUxPUFQiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0k TElORU5PfTogcmVzdWx0OiAkYWNfY3RfT0NBTUxPUFQiID4mNQotJGFzX2VjaG8gIiRhY19jdF9P Q0FNTE9QVCIgPiY2OyB9CitmaQorZmkKK2FjX2N0X0NDPSRhY19jdl9wcm9nX2FjX2N0X0NDCitp ZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xp bmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQorJGFzX2VjaG8gIiRhY19jdF9D QyIgPiY2OyB9CiBlbHNlCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogcmVzdWx0OiBubyIgPiY1CiAkYXNfZWNobyAibm8iID4mNjsgfQogZmkKIAotICBpZiB0ZXN0 ICJ4JGFjX2N0X09DQU1MT1BUIiA9IHg7IHRoZW4KLSAgICBPQ0FNTE9QVD0ibm8iCisKKyAgdGVz dCAtbiAiJGFjX2N0X0NDIiAmJiBicmVhaworZG9uZQorCisgIGlmIHRlc3QgIngkYWNfY3RfQ0Mi ID0geDsgdGhlbgorICAgIENDPSIiCiAgIGVsc2UKICAgICBjYXNlICRjcm9zc19jb21waWxpbmc6 JGFjX3Rvb2xfd2FybmVkIGluCiB5ZXM6KQpAQCAtNTQzNiwzOTYgKzI5MTUsNjQ5IEBAIHllczop CiAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4 ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CiBhY190b29sX3dhcm5lZD15ZXMgOzsKIGVzYWMK LSAgICBPQ0FNTE9QVD0kYWNfY3RfT0NBTUxPUFQKKyAgICBDQz0kYWNfY3RfQ0MKICAgZmkKLWVs c2UKLSAgT0NBTUxPUFQ9IiRhY19jdl9wcm9nX09DQU1MT1BUIgogZmkKIAotICAgICBPQ0FNTEJF U1Q9Ynl0ZQotICAgICBpZiB0ZXN0ICIkT0NBTUxPUFQiID0gIm5vIjsgdGhlbgotCXsgJGFzX2Vj aG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogQ2Fubm90IGZpbmQgb2Nh bWxvcHQ7IGJ5dGVjb2RlIGNvbXBpbGF0aW9uIG9ubHkuIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6 IFdBUk5JTkc6IENhbm5vdCBmaW5kIG9jYW1sb3B0OyBieXRlY29kZSBjb21waWxhdGlvbiBvbmx5 LiIgPiYyO30KLSAgICAgZWxzZQotCVRNUFZFUlNJT049YCRPQ0FNTE9QVCAtdiB8IHNlZCAtbiAt ZSAnc3wuKnZlcnNpb24qICpcKC4qXCkkfFwxfHAnIGAKLQlpZiB0ZXN0ICIkVE1QVkVSU0lPTiIg IT0gIiRPQ0FNTFZFUlNJT04iIDsgdGhlbgotCSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IHJlc3VsdDogdmVyc2lvbnMgZGlmZmVycyBmcm9tIG9jYW1sYzsgb2Nh bWxvcHQgZGlzY2FyZGVkLiIgPiY1Ci0kYXNfZWNobyAidmVyc2lvbnMgZGlmZmVycyBmcm9tIG9j YW1sYzsgb2NhbWxvcHQgZGlzY2FyZGVkLiIgPiY2OyB9Ci0JICAgIE9DQU1MT1BUPW5vCi0JZWxz ZQotCSAgICBPQ0FNTEJFU1Q9b3B0CitmaQorCisKK3Rlc3QgLXogIiRDQyIgJiYgeyB7ICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIg PiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19m bl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBDIGNvbXBpbGVyIGZvdW5kIGluIFwkUEFUSAorU2Vl IFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDUgOyB9CisKKyMgUHJv dmlkZSBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21waWxlci4KKyRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBDIGNvbXBpbGVyIHZlcnNpb24i ID4mNQorc2V0IFggJGFjX2NvbXBpbGUKK2FjX2NvbXBpbGVyPSQyCitmb3IgYWNfb3B0aW9uIGlu IC0tdmVyc2lvbiAtdiAtViAtcXZlcnNpb247IGRvCisgIHsgeyBhY190cnk9IiRhY19jb21waWxl ciAkYWNfb3B0aW9uID4mNSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAq XFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7Owor ZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAk YWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAi JGFjX2NvbXBpbGVyICRhY19vcHRpb24gPiY1IikgMj5jb25mdGVzdC5lcnIKKyAgYWNfc3RhdHVz PSQ/CisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgc2VkICcxMGFcCisuLi4g cmVzdCBvZiBzdGRlcnIgb3V0cHV0IGRlbGV0ZWQgLi4uCisgICAgICAgICAxMHEnIGNvbmZ0ZXN0 LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgZmkKKyAgcm0g LWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGlu ZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0g MDsgfQorZG9uZQorCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0 CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0 dXJuIDA7Cit9CitfQUNFT0YKK2FjX2NsZWFuX2ZpbGVzX3NhdmU9JGFjX2NsZWFuX2ZpbGVzCith Y19jbGVhbl9maWxlcz0iJGFjX2NsZWFuX2ZpbGVzIGEub3V0IGEub3V0LmRTWU0gYS5leGUgYi5v dXQiCisjIFRyeSB0byBjcmVhdGUgYW4gZXhlY3V0YWJsZSB3aXRob3V0IC1vIGZpcnN0LCBkaXNy ZWdhcmQgYS5vdXQuCisjIEl0IHdpbGwgaGVscCB1cyBkaWFnbm9zZSBicm9rZW4gY29tcGlsZXJz LCBhbmQgZmluZGluZyBvdXQgYW4gaW50dWl0aW9uCisjIG9mIGV4ZWV4dC4KK3sgJGFzX2VjaG8g IiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21w aWxlciB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBp bGVyIHdvcmtzLi4uICIgPiY2OyB9CithY19saW5rX2RlZmF1bHQ9YCRhc19lY2hvICIkYWNfbGlu ayIgfCBzZWQgJ3MvIC1vICpjb25mdGVzdFteIF0qLy8nYAorCisjIFRoZSBwb3NzaWJsZSBvdXRw dXQgZmlsZXM6CithY19maWxlcz0iYS5vdXQgY29uZnRlc3QuZXhlIGNvbmZ0ZXN0IGEuZXhlIGFf b3V0LmV4ZSBiLm91dCBjb25mdGVzdC4qIgorCithY19ybWZpbGVzPQorZm9yIGFjX2ZpbGUgaW4g JGFjX2ZpbGVzCitkbworICBjYXNlICRhY19maWxlIGluCisgICAgKi4kYWNfZXh0IHwgKi54Y29m ZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8 ICouaW5mIHwgKi5kU1lNIHwgKi5vIHwgKi5vYmogKSA7OworICAgICogKSBhY19ybWZpbGVzPSIk YWNfcm1maWxlcyAkYWNfZmlsZSI7OworICBlc2FjCitkb25lCitybSAtZiAkYWNfcm1maWxlcwor CitpZiB7IHsgYWNfdHJ5PSIkYWNfbGlua19kZWZhdWx0IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgor ICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5 X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7 IH0gPiY1CisgIChldmFsICIkYWNfbGlua19kZWZhdWx0IikgMj4mNQorICBhY19zdGF0dXM9JD8K KyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1 cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4gOgorICAjIEF1dG9jb25mLTIu MTMgY291bGQgc2V0IHRoZSBhY19jdl9leGVleHQgdmFyaWFibGUgdG8gYG5vJy4KKyMgU28gaWdu b3JlIGEgdmFsdWUgb2YgYG5vJywgb3RoZXJ3aXNlIHRoaXMgd291bGQgbGVhZCB0byBgRVhFRVhU ID0gbm8nCisjIGluIGEgTWFrZWZpbGUuICBXZSBzaG91bGQgbm90IG92ZXJyaWRlIGFjX2N2X2V4 ZWV4dCBpZiBpdCB3YXMgY2FjaGVkLAorIyBzbyB0aGF0IHRoZSB1c2VyIGNhbiBzaG9ydC1jaXJj dWl0IHRoaXMgdGVzdCBmb3IgY29tcGlsZXJzIHVua25vd24gdG8KKyMgQXV0b2NvbmYuCitmb3Ig YWNfZmlsZSBpbiAkYWNfZmlsZXMgJycKK2RvCisgIHRlc3QgLWYgIiRhY19maWxlIiB8fCBjb250 aW51ZQorICBjYXNlICRhY19maWxlIGluCisgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRz IHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwg Ki5kU1lNIHwgKi5vIHwgKi5vYmogKQorCTs7CisgICAgW2FiXS5vdXQgKQorCSMgV2UgZm91bmQg dGhlIGRlZmF1bHQgZXhlY3V0YWJsZSwgYnV0IGV4ZWV4dD0nJyBpcyBtb3N0CisJIyBjZXJ0YWlu bHkgcmlnaHQuCisJYnJlYWs7OworICAgICouKiApCisJaWYgdGVzdCAiJHthY19jdl9leGVleHQr c2V0fSIgPSBzZXQgJiYgdGVzdCAiJGFjX2N2X2V4ZWV4dCIgIT0gbm87CisJdGhlbiA6OyBlbHNl CisJICAgYWNfY3ZfZXhlZXh0PWBleHByICIkYWNfZmlsZSIgOiAnW14uXSpcKFwuLipcKSdgCiAJ ZmkKLSAgICAgZmkKKwkjIFdlIHNldCBhY19jdl9leGVleHQgaGVyZSBiZWNhdXNlIHRoZSBsYXRl ciB0ZXN0IGZvciBpdCBpcyBub3QKKwkjIHNhZmU6IGNyb3NzIGNvbXBpbGVycyBtYXkgbm90IGFk ZCB0aGUgc3VmZml4IGlmIGdpdmVuIGFuIGAtbycKKwkjIGFyZ3VtZW50LCBzbyB3ZSBtYXkgbmVl ZCB0byBrbm93IGl0IGF0IHRoYXQgcG9pbnQgYWxyZWFkeS4KKwkjIEV2ZW4gaWYgdGhpcyBzZWN0 aW9uIGxvb2tzIGNydWZ0eTogaXQgaGFzIHRoZSBhZHZhbnRhZ2Ugb2YKKwkjIGFjdHVhbGx5IHdv cmtpbmcuCisJYnJlYWs7OworICAgICogKQorCWJyZWFrOzsKKyAgZXNhYworZG9uZQordGVzdCAi JGFjX2N2X2V4ZWV4dCIgPSBubyAmJiBhY19jdl9leGVleHQ9CisKK2Vsc2UKKyAgYWNfZmlsZT0n JworZmkKK2lmIHRlc3QgLXogIiRhY19maWxlIjsgdGhlbiA6CisgIHsgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4m NjsgfQorJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3Mv Xi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK3sgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRh c19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgNzcgIkMgY29t cGlsZXIgY2Fubm90IGNyZWF0ZSBleGVjdXRhYmxlcworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1v cmUgZGV0YWlscyIgIiRMSU5FTk8iIDUgOyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2 OyB9CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2lu ZyBmb3IgQyBjb21waWxlciBkZWZhdWx0IG91dHB1dCBmaWxlIG5hbWUiID4mNQorJGFzX2VjaG9f biAiY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgZGVmYXVsdCBvdXRwdXQgZmlsZSBuYW1lLi4uICIg PiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDog JGFjX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhY19maWxlIiA+JjY7IH0KK2FjX2V4ZWV4dD0kYWNf Y3ZfZXhlZXh0CisKK3JtIC1mIC1yIGEub3V0IGEub3V0LmRTWU0gYS5leGUgY29uZnRlc3QkYWNf Y3ZfZXhlZXh0IGIub3V0CithY19jbGVhbl9maWxlcz0kYWNfY2xlYW5fZmlsZXNfc2F2ZQoreyAk YXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3VmZml4 IG9mIGV4ZWN1dGFibGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdWZmaXggb2Yg ZXhlY3V0YWJsZXMuLi4gIiA+JjY7IH0KK2lmIHsgeyBhY190cnk9IiRhY19saW5rIgorY2FzZSAi KCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5 OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJc IlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8g IiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+JjUKKyAgYWNfc3Rh dHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRh Y19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuIDoKKyAgIyBJZiBi b3RoIGBjb25mdGVzdC5leGUnIGFuZCBgY29uZnRlc3QnIGFyZSBgcHJlc2VudCcgKHdlbGwsIG9i c2VydmFibGUpCisjIGNhdGNoIGBjb25mdGVzdC5leGUnLiAgRm9yIGluc3RhbmNlIHdpdGggQ3ln d2luLCBgbHMgY29uZnRlc3QnIHdpbGwKKyMgd29yayBwcm9wZXJseSAoaS5lLiwgcmVmZXIgdG8g YGNvbmZ0ZXN0LmV4ZScpLCB3aGlsZSBpdCB3b24ndCB3aXRoCisjIGBybScuCitmb3IgYWNfZmls ZSBpbiBjb25mdGVzdC5leGUgY29uZnRlc3QgY29uZnRlc3QuKjsgZG8KKyAgdGVzdCAtZiAiJGFj X2ZpbGUiIHx8IGNvbnRpbnVlCisgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgICAqLiRhY19leHQgfCAq Lnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICou bWFwIHwgKi5pbmYgfCAqLmRTWU0gfCAqLm8gfCAqLm9iaiApIDs7CisgICAgKi4qICkgYWNfY3Zf ZXhlZXh0PWBleHByICIkYWNfZmlsZSIgOiAnW14uXSpcKFwuLipcKSdgCisJICBicmVhazs7Cisg ICAgKiApIGJyZWFrOzsKKyAgZXNhYworZG9uZQorZWxzZQorICB7IHsgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19l Y2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ ICJjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2YgZXhlY3V0YWJsZXM6IGNhbm5vdCBjb21waWxlIGFu ZCBsaW5rCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNSA7 IH0KK2ZpCitybSAtZiBjb25mdGVzdCBjb25mdGVzdCRhY19jdl9leGVleHQKK3sgJGFzX2VjaG8g IiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZXhlZXh0IiA+JjUK KyRhc19lY2hvICIkYWNfY3ZfZXhlZXh0IiA+JjY7IH0KIAorcm0gLWYgY29uZnRlc3QuJGFjX2V4 dAorRVhFRVhUPSRhY19jdl9leGVleHQKK2FjX2V4ZWV4dD0kRVhFRVhUCitjYXQgY29uZmRlZnMu aCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisj aW5jbHVkZSA8c3RkaW8uaD4KK2ludAorbWFpbiAoKQoreworRklMRSAqZiA9IGZvcGVuICgiY29u ZnRlc3Qub3V0IiwgInciKTsKKyByZXR1cm4gZmVycm9yIChmKSB8fCBmY2xvc2UgKGYpICE9IDA7 CiAKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorYWNfY2xlYW5fZmlsZXM9IiRhY19jbGVh bl9maWxlcyBjb25mdGVzdC5vdXQiCisjIENoZWNrIHRoYXQgdGhlIGNvbXBpbGVyIHByb2R1Y2Vz IGV4ZWN1dGFibGVzIHdlIGNhbiBydW4uICBJZiBub3QsIGVpdGhlcgorIyB0aGUgY29tcGlsZXIg aXMgYnJva2VuLCBvciB3ZSBjcm9zcyBjb21waWxlLgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSBjcm9zcyBjb21waWxpbmci ID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5n Li4uICIgPiY2OyB9CitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiAhPSB5ZXM7IHRoZW4KKyAg eyB7IGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAq IHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5 OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2 YWwgIiRhY19saW5rIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0 YXR1cyA9IDA7IH0KKyAgaWYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfY3ZfZXhlZXh0JworICB7 IHsgY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hv PVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3Ry eV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgor JGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfdHJ5IikgMj4mNQor ICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog XCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IH07IHRoZW4K KyAgICBjcm9zc19jb21waWxpbmc9bm8KKyAgZWxzZQorICAgIGlmIHRlc3QgIiRjcm9zc19jb21w aWxpbmciID0gbWF5YmU7IHRoZW4KKwljcm9zc19jb21waWxpbmc9eWVzCisgICAgZWxzZQorCXsg eyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNf cHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7 fQorYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBydW4gQyBjb21waWxlZCBwcm9ncmFtcy4KK0lmIHlv dSBtZWFudCB0byBjcm9zcyBjb21waWxlLCB1c2UgXGAtLWhvc3QnLgorU2VlIFxgY29uZmlnLmxv ZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDUgOyB9CisgICAgZmkKKyAgZmkKK2ZpCit7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGNyb3NzX2Nv bXBpbGluZyIgPiY1CiskYXNfZWNobyAiJGNyb3NzX2NvbXBpbGluZyIgPiY2OyB9CiAKLSAgICAg IyBjaGVja2luZyBmb3Igb2NhbWxjLm9wdAotICAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVm aXgiOyB0aGVuCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZp eH1vY2FtbGMub3B0Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNl dCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW9jYW1sYy5vcHQ7IGFjX3dvcmQ9JDIKLXsgJGFzX2Vj aG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+ JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgdGVz dCAiJHthY19jdl9wcm9nX09DQU1MQ0RPVE9QVCtzZXR9IiA9IHNldDsgdGhlbiA6CitybSAtZiBj b25mdGVzdC4kYWNfZXh0IGNvbmZ0ZXN0JGFjX2N2X2V4ZWV4dCBjb25mdGVzdC5vdXQKK2FjX2Ns ZWFuX2ZpbGVzPSRhY19jbGVhbl9maWxlc19zYXZlCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzIiA+JjUK KyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzLi4uICIgPiY2 OyB9CitpZiB0ZXN0ICIke2FjX2N2X29iamV4dCtzZXR9IiA9IHNldDsgdGhlbiA6CiAgICRhc19l Y2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGlmIHRlc3QgLW4gIiRPQ0FNTENET1RPUFQi OyB0aGVuCi0gIGFjX2N2X3Byb2dfT0NBTUxDRE9UT1BUPSIkT0NBTUxDRE9UT1BUIiAjIExldCB0 aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0k UEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9J RlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQg aW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgeyB0ZXN0IC1mICIkYXNf ZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3Jk JGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotICAgIGFjX2N2X3Byb2dfT0NBTUxDRE9UT1BUPSIke2Fj X3Rvb2xfcHJlZml4fW9jYW1sYy5vcHQiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAg YnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCisgIGNhdCBjb25m ZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAg Ki8KIAotZmkKLWZpCi1PQ0FNTENET1RPUFQ9JGFjX2N2X3Byb2dfT0NBTUxDRE9UT1BUCi1pZiB0 ZXN0IC1uICIkT0NBTUxDRE9UT1BUIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IHJlc3VsdDogJE9DQU1MQ0RPVE9QVCIgPiY1Ci0kYXNfZWNobyAiJE9D QU1MQ0RPVE9QVCIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKK2lu dAorbWFpbiAoKQorewogCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0 ZXN0Lm8gY29uZnRlc3Qub2JqCitpZiB7IHsgYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigo JGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7 CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJc JGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIk YWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPiY1CisgIGFjX3N0 YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAk YWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbiA6CisgIGZvciBh Y19maWxlIGluIGNvbmZ0ZXN0Lm8gY29uZnRlc3Qub2JqIGNvbmZ0ZXN0Lio7IGRvCisgIHRlc3Qg LWYgIiRhY19maWxlIiB8fCBjb250aW51ZTsKKyAgY2FzZSAkYWNfZmlsZSBpbgorICAgICouJGFj X2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICou YmJnIHwgKi5tYXAgfCAqLmluZiB8ICouZFNZTSApIDs7CisgICAgKikgYWNfY3Zfb2JqZXh0PWBl eHByICIkYWNfZmlsZSIgOiAnLipcLlwoLipcKSdgCisgICAgICAgYnJlYWs7OworICBlc2FjCitk b25lCitlbHNlCisgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQor c2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQogCit7IHsgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19l Y2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ ICJjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzOiBjYW5ub3QgY29tcGlsZQor U2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDUgOyB9CiBmaQot aWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfT0NBTUxDRE9UT1BUIjsgdGhlbgotICBhY19jdF9PQ0FN TENET1RPUFQ9JE9DQU1MQ0RPVE9QVAotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm9j YW1sYy5vcHQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1 bW15IG9jYW1sYy5vcHQ7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNr aW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0 X09DQU1MQ0RPVE9QVCtzZXR9IiA9IHNldDsgdGhlbiA6CitybSAtZiBjb25mdGVzdC4kYWNfY3Zf b2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5l bm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X29iamV4dCIgPiY1CiskYXNfZWNobyAiJGFjX2N2 X29iamV4dCIgPiY2OyB9CitPQkpFWFQ9JGFjX2N2X29iamV4dAorYWNfb2JqZXh0PSRPQkpFWFQK K3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhl ciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVyIiA+JjUKKyRhc19lY2hvX24gImNoZWNr aW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBjb21waWxlci4uLiAiID4mNjsgfQor aWYgdGVzdCAiJHthY19jdl9jX2NvbXBpbGVyX2dudStzZXR9IiA9IHNldDsgdGhlbiA6CiAgICRh c19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9PQ0FN TENET1RPUFQiOyB0aGVuCi0gIGFjX2N2X3Byb2dfYWNfY3RfT0NBTUxDRE9UT1BUPSIkYWNfY3Rf T0NBTUxDRE9UT1BUIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFz X3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgK LWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4K LSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8K LSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVz dF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotICAgIGFjX2N2X3By b2dfYWNfY3RfT0NBTUxDRE9UT1BUPSJvY2FtbGMub3B0IgotICAgICRhc19lY2hvICIkYXNfbWU6 JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQi ID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwor ICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29u ZmRlZnMuaC4gICovCiAKLWZpCi1maQotYWNfY3RfT0NBTUxDRE9UT1BUPSRhY19jdl9wcm9nX2Fj X2N0X09DQU1MQ0RPVE9QVAotaWYgdGVzdCAtbiAiJGFjX2N0X09DQU1MQ0RPVE9QVCI7IHRoZW4K LSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19j dF9PQ0FNTENET1RPUFQiID4mNQotJGFzX2VjaG8gIiRhY19jdF9PQ0FNTENET1RPUFQiID4mNjsg fQoraW50CittYWluICgpCit7CisjaWZuZGVmIF9fR05VQ19fCisgICAgICAgY2hva2UgbWUKKyNl bmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBp bGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY29tcGlsZXJfZ251PXllcwogZWxzZQotICB7ICRh c19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFz X2VjaG8gIm5vIiA+JjY7IH0KKyAgYWNfY29tcGlsZXJfZ251PW5vCiBmaQorcm0gLWYgY29yZSBj b25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CithY19jdl9j X2NvbXBpbGVyX2dudT0kYWNfY29tcGlsZXJfZ251CiAKLSAgaWYgdGVzdCAieCRhY19jdF9PQ0FN TENET1RPUFQiID0geDsgdGhlbgotICAgIE9DQU1MQ0RPVE9QVD0ibm8iCi0gIGVsc2UKLSAgICBj YXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCi15ZXM6KQoteyAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29s cyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQotJGFzX2VjaG8gIiRhc19tZTog V0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0 IiA+JjI7fQotYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci1lc2FjCi0gICAgT0NBTUxDRE9UT1BUPSRh Y19jdF9PQ0FNTENET1RPUFQKLSAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5l bm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjUKKyRhc19lY2hv ICIkYWNfY3ZfY19jb21waWxlcl9nbnUiID4mNjsgfQoraWYgdGVzdCAkYWNfY29tcGlsZXJfZ251 ID0geWVzOyB0aGVuCisgIEdDQz15ZXMKIGVsc2UKLSAgT0NBTUxDRE9UT1BUPSIkYWNfY3ZfcHJv Z19PQ0FNTENET1RPUFQiCisgIEdDQz0KIGZpCi0KLSAgICAgaWYgdGVzdCAiJE9DQU1MQ0RPVE9Q VCIgIT0gIm5vIjsgdGhlbgotCVRNUFZFUlNJT049YCRPQ0FNTENET1RPUFQgLXYgfCBzZWQgLW4g LWUgJ3N8Lip2ZXJzaW9uKiAqXCguKlwpJHxcMXxwJyBgCi0JaWYgdGVzdCAiJFRNUFZFUlNJT04i ICE9ICIkT0NBTUxWRVJTSU9OIiA7IHRoZW4KLQkgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHZlcnNpb25zIGRpZmZlcnMgZnJvbSBvY2FtbGM7IG9j YW1sYy5vcHQgZGlzY2FyZGVkLiIgPiY1Ci0kYXNfZWNobyAidmVyc2lvbnMgZGlmZmVycyBmcm9t IG9jYW1sYzsgb2NhbWxjLm9wdCBkaXNjYXJkZWQuIiA+JjY7IH0KLQllbHNlCi0JICAgIE9DQU1M Qz0kT0NBTUxDRE9UT1BUCi0JZmkKLSAgICAgZmkKLQotICAgICAjIGNoZWNraW5nIGZvciBvY2Ft bG9wdC5vcHQKLSAgICAgaWYgdGVzdCAiJE9DQU1MT1BUIiAhPSAibm8iIDsgdGhlbgotCWlmIHRl c3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3Jk IG9mICIke2FjX3Rvb2xfcHJlZml4fW9jYW1sb3B0Lm9wdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dy YW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1vY2FtbG9wdC5v cHQ7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog Y2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNf d29yZC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wcm9nX09DQU1MT1BURE9UT1BUK3Nl dH0iID0gc2V0OyB0aGVuIDoKK2FjX3Rlc3RfQ0ZMQUdTPSR7Q0ZMQUdTK3NldH0KK2FjX3NhdmVf Q0ZMQUdTPSRDRkxBR1MKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog Y2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZyIgPiY1CiskYXNfZWNob19uICJjaGVja2lu ZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1nLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3By b2dfY2NfZytzZXR9IiA9IHNldDsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2 CiBlbHNlCi0gIGlmIHRlc3QgLW4gIiRPQ0FNTE9QVERPVE9QVCI7IHRoZW4KLSAgYWNfY3ZfcHJv Z19PQ0FNTE9QVERPVE9QVD0iJE9DQU1MT1BURE9UT1BUIiAjIExldCB0aGUgdXNlciBvdmVycmlk ZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IK LWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAi JGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1 dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFj X2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0Ijsg fTsgdGhlbgotICAgIGFjX2N2X3Byb2dfT0NBTUxPUFRET1RPUFQ9IiR7YWNfdG9vbF9wcmVmaXh9 b2NhbWxvcHQub3B0IgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAg ZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUworICBhY19zYXZlX2Nfd2Vycm9yX2Zs YWc9JGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGFjX2Nfd2Vycm9yX2ZsYWc9eWVzCisgICBhY19jdl9w cm9nX2NjX2c9bm8KKyAgIENGTEFHUz0iLWciCisgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9G ID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLWZpCi1maQotT0NB TUxPUFRET1RPUFQ9JGFjX2N2X3Byb2dfT0NBTUxPUFRET1RPUFQKLWlmIHRlc3QgLW4gIiRPQ0FN TE9QVERPVE9QVCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5F Tk99OiByZXN1bHQ6ICRPQ0FNTE9QVERPVE9QVCIgPiY1Ci0kYXNfZWNobyAiJE9DQU1MT1BURE9U T1BUIiA+JjY7IH0KK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNF T0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfcHJv Z19jY19nPXllcwogZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCisgIENGTEFHUz0i IgorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyog ZW5kIGNvbmZkZWZzLmguICAqLwogCitpbnQKK21haW4gKCkKK3sKIAotZmkKLWlmIHRlc3QgLXog IiRhY19jdl9wcm9nX09DQU1MT1BURE9UT1BUIjsgdGhlbgotICBhY19jdF9PQ0FNTE9QVERPVE9Q VD0kT0NBTUxPUFRET1RPUFQKLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJvY2FtbG9w dC5vcHQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15 IG9jYW1sb3B0Lm9wdDsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tp bmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3Rf T0NBTUxPUFRET1RPUFQrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVk KSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkYWNfY3RfT0NBTUxPUFRET1RPUFQiOyB0aGVu Ci0gIGFjX2N2X3Byb2dfYWNfY3RfT0NBTUxPUFRET1RPUFQ9IiRhY19jdF9PQ0FNTE9QVERPVE9Q VCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0k SUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9 JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFj X2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIHsgdGVz dCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rp ci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSAgICBhY19jdl9wcm9nX2FjX2N0X09D QU1MT1BURE9UT1BUPSJvY2FtbG9wdC5vcHQiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xp bmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0g ICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCisgIDsKKyAg cmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0 aGVuIDoKKworZWxzZQorICBhY19jX3dlcnJvcl9mbGFnPSRhY19zYXZlX2Nfd2Vycm9yX2ZsYWcK KwkgQ0ZMQUdTPSItZyIKKwkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFj X2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKIAorICA7Cisg IHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsg dGhlbiA6CisgIGFjX2N2X3Byb2dfY2NfZz15ZXMKIGZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVy ciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIGZpCi1hY19jdF9PQ0FNTE9Q VERPVE9QVD0kYWNfY3ZfcHJvZ19hY19jdF9PQ0FNTE9QVERPVE9QVAotaWYgdGVzdCAtbiAiJGFj X2N0X09DQU1MT1BURE9UT1BUIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5l bm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X09DQU1MT1BURE9UT1BUIiA+JjUKLSRhc19lY2hv ICIkYWNfY3RfT0NBTUxPUFRET1RPUFQiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+ JjY7IH0KK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRl c3QuJGFjX2V4dAogZmkKLQotICBpZiB0ZXN0ICJ4JGFjX2N0X09DQU1MT1BURE9UT1BUIiA9IHg7 IHRoZW4KLSAgICBPQ0FNTE9QVERPVE9QVD0ibm8iCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBj b25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGFjX2Nfd2Vycm9yX2ZsYWc9 JGFjX3NhdmVfY193ZXJyb3JfZmxhZworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jY19nIiA+JjUKKyRhc19lY2hvICIkYWNf Y3ZfcHJvZ19jY19nIiA+JjY7IH0KK2lmIHRlc3QgIiRhY190ZXN0X0NGTEFHUyIgPSBzZXQ7IHRo ZW4KKyAgQ0ZMQUdTPSRhY19zYXZlX0NGTEFHUworZWxpZiB0ZXN0ICRhY19jdl9wcm9nX2NjX2cg PSB5ZXM7IHRoZW4KKyAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICBDRkxBR1M9Ii1n IC1PMiIKICAgZWxzZQotICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQg aW4KLXllczopCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5J Tkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1 Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4 ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9Ci1hY190b29sX3dhcm5lZD15ZXMgOzsKLWVzYWMK LSAgICBPQ0FNTE9QVERPVE9QVD0kYWNfY3RfT0NBTUxPUFRET1RPUFQKKyAgICBDRkxBR1M9Ii1n IgogICBmaQogZWxzZQotICBPQ0FNTE9QVERPVE9QVD0iJGFjX2N2X3Byb2dfT0NBTUxPUFRET1RP UFQiCi1maQotCi0JaWYgdGVzdCAiJE9DQU1MT1BURE9UT1BUIiAhPSAibm8iOyB0aGVuCi0JICAg VE1QVkVSU0lPTj1gJE9DQU1MT1BURE9UT1BUIC12IHwgc2VkIC1uIC1lICdzfC4qdmVyc2lvbiog KlwoLipcKSR8XDF8cCcgYAotCSAgIGlmIHRlc3QgIiRUTVBWRVJTSU9OIiAhPSAiJE9DQU1MVkVS U0lPTiIgOyB0aGVuCi0JICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5F Tk99OiByZXN1bHQ6IHZlcnNpb24gZGlmZmVycyBmcm9tIG9jYW1sYzsgb2NhbWxvcHQub3B0IGRp c2NhcmRlZC4iID4mNQotJGFzX2VjaG8gInZlcnNpb24gZGlmZmVycyBmcm9tIG9jYW1sYzsgb2Nh bWxvcHQub3B0IGRpc2NhcmRlZC4iID4mNjsgfQotCSAgIGVsc2UKLQkgICAgICBPQ0FNTE9QVD0k T0NBTUxPUFRET1RPUFQKLQkgICBmaQotICAgICAgICBmaQotICAgICBmaQotCi0KKyAgaWYgdGVz dCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICBDRkxBR1M9Ii1PMiIKKyAgZWxzZQorICAgIENGTEFH Uz0KICAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNo ZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gQzg5IiA+JjUKKyRhc19lY2hvX24g ImNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gQzg5Li4uICIgPiY2OyB9Citp ZiB0ZXN0ICIke2FjX2N2X3Byb2dfY2NfYzg5K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2Vj aG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY3ZfcHJvZ19jY19jODk9bm8KK2FjX3Nh dmVfQ0M9JENDCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Cisv KiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3Rk aW8uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorLyog TW9zdCBvZiB0aGUgZm9sbG93aW5nIHRlc3RzIGFyZSBzdG9sZW4gZnJvbSBSQ1MgNS43J3Mgc3Jj L2NvbmYuc2guICAqLworc3RydWN0IGJ1ZiB7IGludCB4OyB9OworRklMRSAqICgqcmNzb3Blbikg KHN0cnVjdCBidWYgKiwgc3RydWN0IHN0YXQgKiwgaW50KTsKK3N0YXRpYyBjaGFyICplIChwLCBp KQorICAgICBjaGFyICoqcDsKKyAgICAgaW50IGk7Cit7CisgIHJldHVybiBwW2ldOworfQorc3Rh dGljIGNoYXIgKmYgKGNoYXIgKiAoKmcpIChjaGFyICoqLCBpbnQpLCBjaGFyICoqcCwgLi4uKQor eworICBjaGFyICpzOworICB2YV9saXN0IHY7CisgIHZhX3N0YXJ0ICh2LHApOworICBzID0gZyAo cCwgdmFfYXJnICh2LGludCkpOworICB2YV9lbmQgKHYpOworICByZXR1cm4gczsKK30KIAorLyog T1NGIDQuMCBDb21wYXEgY2MgaXMgc29tZSBzb3J0IG9mIGFsbW9zdC1BTlNJIGJ5IGRlZmF1bHQu ICBJdCBoYXMKKyAgIGZ1bmN0aW9uIHByb3RvdHlwZXMgYW5kIHN0dWZmLCBidXQgbm90ICdceEhI JyBoZXggY2hhcmFjdGVyIGNvbnN0YW50cy4KKyAgIFRoZXNlIGRvbid0IHByb3Zva2UgYW4gZXJy b3IgdW5mb3J0dW5hdGVseSwgaW5zdGVhZCBhcmUgc2lsZW50bHkgdHJlYXRlZAorICAgYXMgJ3gn LiAgVGhlIGZvbGxvd2luZyBpbmR1Y2VzIGFuIGVycm9yLCB1bnRpbCAtc3RkIGlzIGFkZGVkIHRv IGdldAorICAgcHJvcGVyIEFOU0kgbW9kZS4gIEN1cmlvdXNseSAnXHgwMCchPSd4JyBhbHdheXMg Y29tZXMgb3V0IHRydWUsIGZvciBhbgorICAgYXJyYXkgc2l6ZSBhdCBsZWFzdC4gIEl0J3MgbmVj ZXNzYXJ5IHRvIHdyaXRlICdceDAwJz09MCB0byBnZXQgc29tZXRoaW5nCisgICB0aGF0J3MgdHJ1 ZSBvbmx5IHdpdGggLXN0ZC4gICovCitpbnQgb3NmNF9jY19hcnJheSBbJ1x4MDAnID09IDAgPyAx IDogLTFdOwogCisvKiBJQk0gQyA2IGZvciBBSVggaXMgYWxtb3N0LUFOU0kgYnkgZGVmYXVsdCwg YnV0IGl0IHJlcGxhY2VzIG1hY3JvIHBhcmFtZXRlcnMKKyAgIGluc2lkZSBzdHJpbmdzIGFuZCBj aGFyYWN0ZXIgY29uc3RhbnRzLiAgKi8KKyNkZWZpbmUgRk9PKHgpICd4JworaW50IHhsYzZfY2Nf YXJyYXlbRk9PKGEpID09ICd4JyA/IDEgOiAtMV07CiAKLSAgIyBjaGVja2luZyBmb3Igb2NhbWwg dG9wbGV2ZWwKLSAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAjIEV4dHJh Y3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9b2NhbWwiLCBzbyBpdCBjYW4g YmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9 b2NhbWw7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAk YWNfd29yZC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wcm9nX09DQU1MK3NldH0iID0g c2V0OyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVz dCAtbiAiJE9DQU1MIjsgdGhlbgotICBhY19jdl9wcm9nX09DQU1MPSIkT0NBTUwiICMgTGV0IHRo ZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQ QVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAoraW50IHRlc3QgKGludCBpLCBkb3Vi bGUgeCk7CitzdHJ1Y3QgczEge2ludCAoKmYpIChpbnQgYSk7fTsKK3N0cnVjdCBzMiB7aW50ICgq ZikgKGRvdWJsZSBhKTt9OworaW50IHBhaXJuYW1lcyAoaW50LCBjaGFyICoqLCBGSUxFICooKiko c3RydWN0IGJ1ZiAqLCBzdHJ1Y3Qgc3RhdCAqLCBpbnQpLCBpbnQsIGludCk7CitpbnQgYXJnYzsK K2NoYXIgKiphcmd2OworaW50CittYWluICgpCit7CityZXR1cm4gZiAoZSwgYXJndiwgMCkgIT0g YXJndlswXSAgfHwgIGYgKGUsIGFyZ3YsIDEpICE9IGFyZ3ZbMV07CisgIDsKKyAgcmV0dXJuIDA7 Cit9CitfQUNFT0YKK2ZvciBhY19hcmcgaW4gJycgLXFsYW5nbHZsPWV4dGM4OSAtcWxhbmdsdmw9 YW5zaSAtc3RkIFwKKwktQWUgIi1BYSAtRF9IUFVYX1NPVVJDRSIgIi1YYyAtRF9fRVhURU5TSU9O U19fIgogZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19k aXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25z OyBkbwotICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRh c190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0gICAgYWNf Y3ZfcHJvZ19PQ0FNTD0iJHthY190b29sX3ByZWZpeH1vY2FtbCIKLSAgICAkYXNfZWNobyAiJGFz X21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNf ZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCisgIENDPSIkYWNfc2F2ZV9DQyAkYWNfYXJnIgor ICBpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3Byb2df Y2NfYzg5PSRhY19hcmcKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNf b2JqZXh0CisgIHRlc3QgIngkYWNfY3ZfcHJvZ19jY19jODkiICE9ICJ4bm8iICYmIGJyZWFrCiBk b25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKK3JtIC1mIGNvbmZ0ZXN0LiRhY19leHQKK0ND PSRhY19zYXZlX0NDCiAKIGZpCi1maQotT0NBTUw9JGFjX2N2X3Byb2dfT0NBTUwKLWlmIHRlc3Qg LW4gIiRPQ0FNTCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5F Tk99OiByZXN1bHQ6ICRPQ0FNTCIgPiY1Ci0kYXNfZWNobyAiJE9DQU1MIiA+JjY7IH0KLWVsc2UK LSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+ JjUKLSRhc19lY2hvICJubyIgPiY2OyB9CisjIEFDX0NBQ0hFX1ZBTAorY2FzZSAieCRhY19jdl9w cm9nX2NjX2M4OSIgaW4KKyAgeCkKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8t JExJTkVOT306IHJlc3VsdDogbm9uZSBuZWVkZWQiID4mNQorJGFzX2VjaG8gIm5vbmUgbmVlZGVk IiA+JjY7IH0gOzsKKyAgeG5vKQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0k TElORU5PfTogcmVzdWx0OiB1bnN1cHBvcnRlZCIgPiY1CiskYXNfZWNobyAidW5zdXBwb3J0ZWQi ID4mNjsgfSA7OworICAqKQorICAgIENDPSIkQ0MgJGFjX2N2X3Byb2dfY2NfYzg5IgorICAgIHsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcHJv Z19jY19jODkiID4mNQorJGFzX2VjaG8gIiRhY19jdl9wcm9nX2NjX2M4OSIgPiY2OyB9IDs7Citl c2FjCitpZiB0ZXN0ICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiAhPSB4bm87IHRoZW4gOgorCiBmaQog CithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAk Q0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBj b25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFj X2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CiAK LWZpCi1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19PQ0FNTCI7IHRoZW4KLSAgYWNfY3RfT0NBTUw9 JE9DQU1MCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAib2NhbWwiLCBzbyBpdCBjYW4g YmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IG9jYW1sOyBhY193b3JkPSQy Ci17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAk YWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7 IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9PQ0FNTCtzZXR9IiA9IHNldDsgdGhlbiA6 Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRo ZXIgJHtNQUtFLW1ha2V9IHNldHMgXCQoTUFLRSkiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcg d2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJChNQUtFKS4uLiAiID4mNjsgfQorc2V0IHggJHtN QUtFLW1ha2V9CithY19tYWtlPWAkYXNfZWNobyAiJDIiIHwgc2VkICdzLysvcC9nOyBzL1teYS16 QS1aMC05X10vXy9nJ2AKK2lmIGV2YWwgInRlc3QgXCJcJHthY19jdl9wcm9nX21ha2VfJHthY19t YWtlfV9zZXQrc2V0fVwiIiA9IHNldDsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIg PiY2CiBlbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9PQ0FNTCI7IHRoZW4KLSAgYWNfY3ZfcHJv Z19hY19jdF9PQ0FNTD0iJGFjX2N0X09DQU1MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUg dGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBh c19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2Rp ciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVf ZXh0ZW5zaW9uczsgZG8KLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNf ZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhl bgotICAgIGFjX2N2X3Byb2dfYWNfY3RfT0NBTUw9Im9jYW1sIgotICAgICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19l eHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lG UwotCi1maQotZmkKLWFjX2N0X09DQU1MPSRhY19jdl9wcm9nX2FjX2N0X09DQU1MCi1pZiB0ZXN0 IC1uICIkYWNfY3RfT0NBTUwiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfT0NBTUwiID4mNQotJGFzX2VjaG8gIiRhY19jdF9P Q0FNTCIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotICBpZiB0 ZXN0ICJ4JGFjX2N0X09DQU1MIiA9IHg7IHRoZW4KLSAgICBPQ0FNTD0ibm8iCi0gIGVsc2UKLSAg ICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCi15ZXM6KQoteyAkYXNf ZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0 b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQotJGFzX2VjaG8gIiRhc19t ZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlw bGV0IiA+JjI7fQotYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisgIGNhdCA+Y29uZnRlc3QubWFrZSA8 PFxfQUNFT0YKK1NIRUxMID0gL2Jpbi9zaAorYWxsOgorCUBlY2hvICdAQEAlJSU9JChNQUtFKT1A QEAlJSUnCitfQUNFT0YKKyMgR05VIG1ha2Ugc29tZXRpbWVzIHByaW50cyAibWFrZVsxXTogRW50 ZXJpbmcgLi4uIiwgd2hpY2ggd291bGQgY29uZnVzZSB1cy4KK2Nhc2UgYCR7TUFLRS1tYWtlfSAt ZiBjb25mdGVzdC5tYWtlIDI+L2Rldi9udWxsYCBpbgorICAqQEBAJSUlPT8qPUBAQCUlJSopCisg ICAgZXZhbCBhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQ9eWVzOzsKKyAgKikKKyAgICBl dmFsIGFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldD1ubzs7CiBlc2FjCi0gICAgT0NBTUw9 JGFjX2N0X09DQU1MCi0gIGZpCitybSAtZiBjb25mdGVzdC5tYWtlCitmaQoraWYgZXZhbCB0ZXN0 IFwkYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0ID0geWVzOyB0aGVuCisgIHsgJGFzX2Vj aG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2Vj aG8gInllcyIgPiY2OyB9CisgIFNFVF9NQUtFPQogZWxzZQotICBPQ0FNTD0iJGFjX2N2X3Byb2df T0NBTUwiCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0 OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICBTRVRfTUFLRT0iTUFLRT0ke01BS0Ut bWFrZX0iCiBmaQogCi0KLSAgIyBjaGVja2luZyBmb3Igb2NhbWxkZXAKLSAgaWYgdGVzdCAtbiAi JGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7 YWNfdG9vbF9wcmVmaXh9b2NhbWxkZXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0 aCBhcmdzLgotc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9b2NhbWxkZXA7IGFjX3dvcmQ9JDIK LXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRh Y193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsg fQotaWYgdGVzdCAiJHthY19jdl9wcm9nX09DQU1MREVQK3NldH0iID0gc2V0OyB0aGVuIDoKKyMg RmluZCBhIGdvb2QgaW5zdGFsbCBwcm9ncmFtLiAgV2UgcHJlZmVyIGEgQyBwcm9ncmFtIChmYXN0 ZXIpLAorIyBzbyBvbmUgc2NyaXB0IGlzIGFzIGdvb2QgYXMgYW5vdGhlci4gIEJ1dCBhdm9pZCB0 aGUgYnJva2VuIG9yCisjIGluY29tcGF0aWJsZSB2ZXJzaW9uczoKKyMgU3lzViAvZXRjL2luc3Rh bGwsIC91c3Ivc2Jpbi9pbnN0YWxsCisjIFN1bk9TIC91c3IvZXRjL2luc3RhbGwKKyMgSVJJWCAv c2Jpbi9pbnN0YWxsCisjIEFJWCAvYmluL2luc3RhbGwKKyMgQW1pZ2FPUyAvQy9pbnN0YWxsLCB3 aGljaCBpbnN0YWxscyBib290YmxvY2tzIG9uIGZsb3BweSBkaXNjcworIyBBSVggNCAvdXNyL2Jp bi9pbnN0YWxsYnNkLCB3aGljaCBkb2Vzbid0IHdvcmsgd2l0aG91dCBhIC1nIGZsYWcKKyMgQUZT IC91c3IvYWZzd3MvYmluL2luc3RhbGwsIHdoaWNoIG1pc2hhbmRsZXMgbm9uZXhpc3RlbnQgYXJn cworIyBTVlI0IC91c3IvdWNiL2luc3RhbGwsIHdoaWNoIHRyaWVzIHRvIHVzZSB0aGUgbm9uZXhp c3RlbnQgZ3JvdXAgInN0YWZmIgorIyBPUy8yJ3Mgc3lzdGVtIGluc3RhbGwsIHdoaWNoIGhhcyBh IGNvbXBsZXRlbHkgZGlmZmVyZW50IHNlbWFudGljCisjIC4vaW5zdGFsbCwgd2hpY2ggY2FuIGJl IGVycm9uZW91c2x5IGNyZWF0ZWQgYnkgbWFrZSBmcm9tIC4vaW5zdGFsbC5zaC4KKyMgUmVqZWN0 IGluc3RhbGwgcHJvZ3JhbXMgdGhhdCBjYW5ub3QgaW5zdGFsbCBtdWx0aXBsZSBmaWxlcy4KK3sg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGEgQlNE LWNvbXBhdGlibGUgaW5zdGFsbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYSBCU0Qt Y29tcGF0aWJsZSBpbnN0YWxsLi4uICIgPiY2OyB9CitpZiB0ZXN0IC16ICIkSU5TVEFMTCI7IHRo ZW4KK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9pbnN0YWxsK3NldH0iID0gc2V0OyB0aGVuIDoKICAg JGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgaWYgdGVzdCAtbiAiJE9DQU1MREVQ IjsgdGhlbgotICBhY19jdl9wcm9nX09DQU1MREVQPSIkT0NBTUxERVAiICMgTGV0IHRoZSB1c2Vy IG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NF UEFSQVRPUgorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCiBmb3IgYXNf ZGlyIGluICRQQVRICiBkbwogICBJRlM9JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIi ICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4 dGVuc2lvbnM7IGRvCi0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4 dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4K LSAgICBhY19jdl9wcm9nX09DQU1MREVQPSIke2FjX3Rvb2xfcHJlZml4fW9jYW1sZGVwIgotICAg ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFj X3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKKyAgICAjIEFj Y291bnQgZm9yIHBlb3BsZSB3aG8gcHV0IHRyYWlsaW5nIHNsYXNoZXMgaW4gUEFUSCBlbGVtZW50 cy4KK2Nhc2UgJGFzX2Rpci8gaW4gIygoCisgIC4vIHwgLi8vIHwgL1tjQ10vKiB8IFwKKyAgL2V0 Yy8qIHwgL3Vzci9zYmluLyogfCAvdXNyL2V0Yy8qIHwgL3NiaW4vKiB8IC91c3IvYWZzd3MvYmlu LyogfCBcCisgID86W1xcL11vczJbXFwvXWluc3RhbGxbXFwvXSogfCA/OltcXC9dT1MyW1xcL11J TlNUQUxMW1xcL10qIHwgXAorICAvdXNyL3VjYi8qICkgOzsKKyAgKikKKyAgICAjIE9TRjEgYW5k IFNDTyBPRFQgMy4wIGhhdmUgdGhlaXIgb3duIG5hbWVzIGZvciBpbnN0YWxsLgorICAgICMgRG9u J3QgdXNlIGluc3RhbGxic2QgZnJvbSBPU0Ygc2luY2UgaXQgaW5zdGFsbHMgc3R1ZmYgYXMgcm9v dAorICAgICMgYnkgZGVmYXVsdC4KKyAgICBmb3IgYWNfcHJvZyBpbiBnaW5zdGFsbCBzY29pbnN0 IGluc3RhbGw7IGRvCisgICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVf ZXh0ZW5zaW9uczsgZG8KKwlpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19l eHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiOyB9OyB0aGVu CisJICBpZiB0ZXN0ICRhY19wcm9nID0gaW5zdGFsbCAmJgorCSAgICBncmVwIGRzcG1zZyAiJGFz X2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJICAgICMg QUlYIGluc3RhbGwuICBJdCBoYXMgYW4gaW5jb21wYXRpYmxlIGNhbGxpbmcgY29udmVudGlvbi4K KwkgICAgOgorCSAgZWxpZiB0ZXN0ICRhY19wcm9nID0gaW5zdGFsbCAmJgorCSAgICBncmVwIHB3 cGx1cyAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVu CisJICAgICMgcHJvZ3JhbS1zcGVjaWZpYyBpbnN0YWxsIHNjcmlwdCB1c2VkIGJ5IEhQIHB3cGx1 cy0tZG9uJ3QgdXNlLgorCSAgICA6CisJICBlbHNlCisJICAgIHJtIC1yZiBjb25mdGVzdC5vbmUg Y29uZnRlc3QudHdvIGNvbmZ0ZXN0LmRpcgorCSAgICBlY2hvIG9uZSA+IGNvbmZ0ZXN0Lm9uZQor CSAgICBlY2hvIHR3byA+IGNvbmZ0ZXN0LnR3bworCSAgICBta2RpciBjb25mdGVzdC5kaXIKKwkg ICAgaWYgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiIC1jIGNvbmZ0ZXN0Lm9uZSBjb25m dGVzdC50d28gImBwd2RgL2NvbmZ0ZXN0LmRpciIgJiYKKwkgICAgICB0ZXN0IC1zIGNvbmZ0ZXN0 Lm9uZSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LnR3byAmJgorCSAgICAgIHRlc3QgLXMgY29uZnRlc3Qu ZGlyL2NvbmZ0ZXN0Lm9uZSAmJgorCSAgICAgIHRlc3QgLXMgY29uZnRlc3QuZGlyL2NvbmZ0ZXN0 LnR3bworCSAgICB0aGVuCisJICAgICAgYWNfY3ZfcGF0aF9pbnN0YWxsPSIkYXNfZGlyLyRhY19w cm9nJGFjX2V4ZWNfZXh0IC1jIgorCSAgICAgIGJyZWFrIDMKKwkgICAgZmkKKwkgIGZpCisJZmkK KyAgICAgIGRvbmUKKyAgICBkb25lCisgICAgOzsKK2VzYWMKKwogICBkb25lCiBJRlM9JGFzX3Nh dmVfSUZTCiAKK3JtIC1yZiBjb25mdGVzdC5vbmUgY29uZnRlc3QudHdvIGNvbmZ0ZXN0LmRpcgor CiBmaQorICBpZiB0ZXN0ICIke2FjX2N2X3BhdGhfaW5zdGFsbCtzZXR9IiA9IHNldDsgdGhlbgor ICAgIElOU1RBTEw9JGFjX2N2X3BhdGhfaW5zdGFsbAorICBlbHNlCisgICAgIyBBcyBhIGxhc3Qg cmVzb3J0LCB1c2UgdGhlIHNsb3cgc2hlbGwgc2NyaXB0LiAgRG9uJ3QgY2FjaGUgYQorICAgICMg dmFsdWUgZm9yIElOU1RBTEwgd2l0aGluIGEgc291cmNlIGRpcmVjdG9yeSwgYmVjYXVzZSB0aGF0 IHdpbGwKKyAgICAjIGJyZWFrIG90aGVyIHBhY2thZ2VzIHVzaW5nIHRoZSBjYWNoZSBpZiB0aGF0 IGRpcmVjdG9yeSBpcworICAgICMgcmVtb3ZlZCwgb3IgaWYgdGhlIHZhbHVlIGlzIGEgcmVsYXRp dmUgbmFtZS4KKyAgICBJTlNUQUxMPSRhY19pbnN0YWxsX3NoCisgIGZpCiBmaQotT0NBTUxERVA9 JGFjX2N2X3Byb2dfT0NBTUxERVAKLWlmIHRlc3QgLW4gIiRPQ0FNTERFUCI7IHRoZW4KLSAgeyAk YXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRPQ0FNTERFUCIg PiY1Ci0kYXNfZWNobyAiJE9DQU1MREVQIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFz X21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIg PiY2OyB9Ci1maQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1 bHQ6ICRJTlNUQUxMIiA+JjUKKyRhc19lY2hvICIkSU5TVEFMTCIgPiY2OyB9CiAKKyMgVXNlIHRl c3QgLXogYmVjYXVzZSBTdW5PUzQgc2ggbWlzaGFuZGxlcyBicmFjZXMgaW4gJHt2YXItdmFsfS4K KyMgSXQgdGhpbmtzIHRoZSBmaXJzdCBjbG9zZSBicmFjZSBlbmRzIHRoZSB2YXJpYWJsZSBzdWJz dGl0dXRpb24uCit0ZXN0IC16ICIkSU5TVEFMTF9QUk9HUkFNIiAmJiBJTlNUQUxMX1BST0dSQU09 JyR7SU5TVEFMTH0nCiAKLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19PQ0FNTERFUCI7IHRo ZW4KLSAgYWNfY3RfT0NBTUxERVA9JE9DQU1MREVQCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29y ZCBvZiAib2NhbWxkZXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgot c2V0IGR1bW15IG9jYW1sZGVwOyBhY193b3JkPSQyCit0ZXN0IC16ICIkSU5TVEFMTF9TQ1JJUFQi ICYmIElOU1RBTExfU0NSSVBUPScke0lOU1RBTEx9JworCit0ZXN0IC16ICIkSU5TVEFMTF9EQVRB IiAmJiBJTlNUQUxMX0RBVEE9JyR7SU5TVEFMTH0gLW0gNjQ0JworCisjIEV4dHJhY3QgdGhlIGZp cnN0IHdvcmQgb2YgImJpc29uIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJn cy4KK3NldCBkdW1teSBiaXNvbjsgYWNfd29yZD0kMgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQogJGFzX2VjaG9fbiAi Y2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2df YWNfY3RfT0NBTUxERVArc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgdGVzdCAiJHthY19jdl9wYXRo X0JJU09OK3NldH0iID0gc2V0OyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYK IGVsc2UKLSAgaWYgdGVzdCAtbiAiJGFjX2N0X09DQU1MREVQIjsgdGhlbgotICBhY19jdl9wcm9n X2FjX2N0X09DQU1MREVQPSIkYWNfY3RfT0NBTUxERVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRl IHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgor ICBjYXNlICRCSVNPTiBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9CSVNP Tj0iJEJJU09OIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4K KyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgogZm9y IGFzX2RpciBpbiAkUEFUSAogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNf ZGlyIiAmJiBhc19kaXI9LgogICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJs ZV9leHRlbnNpb25zOyBkbwogICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhl Y19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0 aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9PQ0FNTERFUD0ib2NhbWxkZXAiCisgICAgYWNfY3Zf cGF0aF9CSVNPTj0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKICAgICAkYXNfZWNobyAi JGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4 ZWNfZXh0IiA+JjUKICAgICBicmVhayAyCiAgIGZpCkBAIC01ODMzLDUzICszNTY1LDM5IEBAIGRv bmUKICAgZG9uZQogSUZTPSRhc19zYXZlX0lGUwogCisgIDs7Citlc2FjCiBmaQotZmkKLWFjX2N0 X09DQU1MREVQPSRhY19jdl9wcm9nX2FjX2N0X09DQU1MREVQCi1pZiB0ZXN0IC1uICIkYWNfY3Rf T0NBTUxERVAiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogcmVzdWx0OiAkYWNfY3RfT0NBTUxERVAiID4mNQotJGFzX2VjaG8gIiRhY19jdF9PQ0FNTERF UCIgPiY2OyB9CitCSVNPTj0kYWNfY3ZfcGF0aF9CSVNPTgoraWYgdGVzdCAtbiAiJEJJU09OIjsg dGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDog JEJJU09OIiA+JjUKKyRhc19lY2hvICIkQklTT04iID4mNjsgfQogZWxzZQogICB7ICRhc19lY2hv ICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQogJGFzX2VjaG8g Im5vIiA+JjY7IH0KIGZpCiAKLSAgaWYgdGVzdCAieCRhY19jdF9PQ0FNTERFUCIgPSB4OyB0aGVu Ci0gICAgT0NBTUxERVA9Im5vIgotICBlbHNlCi0gICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRh Y190b29sX3dhcm5lZCBpbgoteWVzOikKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0k TElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9z dCB0cmlwbGV0IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRv b2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KLWFjX3Rvb2xfd2FybmVk PXllcyA7OwotZXNhYwotICAgIE9DQU1MREVQPSRhY19jdF9PQ0FNTERFUAotICBmaQotZWxzZQot ICBPQ0FNTERFUD0iJGFjX2N2X3Byb2dfT0NBTUxERVAiCi1maQotCiAKLSAgIyBjaGVja2luZyBm b3Igb2NhbWxta3RvcAotICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICMg RXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1vY2FtbG1rdG9wIiwg c28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAke2FjX3Rv b2xfcHJlZml4fW9jYW1sbWt0b3A7IGFjX3dvcmQ9JDIKKyMgRXh0cmFjdCB0aGUgZmlyc3Qgd29y ZCBvZiAiZmxleCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQg ZHVtbXkgZmxleDsgYWNfd29yZD0kMgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRM SU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcg Zm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfT0NBTUxNS1RP UCtzZXR9IiA9IHNldDsgdGhlbiA6CitpZiB0ZXN0ICIke2FjX2N2X3BhdGhfRkxFWCtzZXR9IiA9 IHNldDsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGlmIHRl c3QgLW4gIiRPQ0FNTE1LVE9QIjsgdGhlbgotICBhY19jdl9wcm9nX09DQU1MTUtUT1A9IiRPQ0FN TE1LVE9QIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVf SUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgY2FzZSAkRkxFWCBpbgorICBbXFwvXSog fCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9GTEVYPSIkRkxFWCIgIyBMZXQgdGhlIHVzZXIgb3Zl cnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJ RlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKIGZvciBhc19kaXIgaW4gJFBBVEgKIGRvCiAgIElGUz0k YXNfc2F2ZV9JRlMKICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KICAgICBmb3IgYWNf ZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KICAgaWYgeyB0ZXN0 IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGly LyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotICAgIGFjX2N2X3Byb2dfT0NBTUxNS1RP UD0iJHthY190b29sX3ByZWZpeH1vY2FtbG1rdG9wIgorICAgIGFjX2N2X3BhdGhfRkxFWD0iJGFz X2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGlu ZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKICAg ICBicmVhayAyCiAgIGZpCkBAIC01ODg3LDM5ICszNjA1LDM5IEBAIGRvbmUKICAgZG9uZQogSUZT PSRhc19zYXZlX0lGUwogCisgIDs7Citlc2FjCiBmaQotZmkKLU9DQU1MTUtUT1A9JGFjX2N2X3By b2dfT0NBTUxNS1RPUAotaWYgdGVzdCAtbiAiJE9DQU1MTUtUT1AiOyB0aGVuCi0gIHsgJGFzX2Vj aG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkT0NBTUxNS1RPUCIgPiY1 Ci0kYXNfZWNobyAiJE9DQU1MTUtUT1AiID4mNjsgfQorRkxFWD0kYWNfY3ZfcGF0aF9GTEVYCitp ZiB0ZXN0IC1uICIkRkxFWCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiByZXN1bHQ6ICRGTEVYIiA+JjUKKyRhc19lY2hvICIkRkxFWCIgPiY2OyB9CiBl bHNlCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBu byIgPiY1CiAkYXNfZWNobyAibm8iID4mNjsgfQogZmkKIAogCi1maQotaWYgdGVzdCAteiAiJGFj X2N2X3Byb2dfT0NBTUxNS1RPUCI7IHRoZW4KLSAgYWNfY3RfT0NBTUxNS1RPUD0kT0NBTUxNS1RP UAotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm9jYW1sbWt0b3AiLCBzbyBpdCBjYW4g YmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IG9jYW1sbWt0b3A7IGFjX3dv cmQ9JDIKKyMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicGVybCIsIHNvIGl0IGNhbiBiZSBh IHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgcGVybDsgYWNfd29yZD0kMgogeyAk YXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dv cmQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1p ZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfT0NBTUxNS1RPUCtzZXR9IiA9IHNldDsgdGhlbiA6 CitpZiB0ZXN0ICIke2FjX2N2X3BhdGhfUEVSTCtzZXR9IiA9IHNldDsgdGhlbiA6CiAgICRhc19l Y2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9PQ0FNTE1L VE9QIjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X09DQU1MTUtUT1A9IiRhY19jdF9PQ0FNTE1L VE9QIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZT PSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgY2FzZSAkUEVSTCBpbgorICBbXFwvXSogfCA/ OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9QRVJMPSIkUEVSTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJp ZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7 IElGUz0kUEFUSF9TRVBBUkFUT1IKIGZvciBhc19kaXIgaW4gJFBBVEgKIGRvCiAgIElGUz0kYXNf c2F2ZV9JRlMKICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KICAgICBmb3IgYWNfZXhl Y19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KICAgaWYgeyB0ZXN0IC1m ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRh Y193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfT0NBTUxN S1RPUD0ib2NhbWxta3RvcCIKKyAgICBhY19jdl9wYXRoX1BFUkw9IiRhc19kaXIvJGFjX3dvcmQk YWNfZXhlY19leHQiCiAgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog Zm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CiAgICAgYnJlYWsgMgogICBm aQpAQCAtNTkyNyw1MyArMzY0NSw0NiBAQCBkb25lCiAgIGRvbmUKIElGUz0kYXNfc2F2ZV9JRlMK IAorICB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9QRVJMIiAmJiBhY19jdl9wYXRoX1BFUkw9Im5vIgor ICA7OworZXNhYwogZmkKLWZpCi1hY19jdF9PQ0FNTE1LVE9QPSRhY19jdl9wcm9nX2FjX2N0X09D QU1MTUtUT1AKLWlmIHRlc3QgLW4gIiRhY19jdF9PQ0FNTE1LVE9QIjsgdGhlbgotICB7ICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X09DQU1MTUtU T1AiID4mNQotJGFzX2VjaG8gIiRhY19jdF9PQ0FNTE1LVE9QIiA+JjY7IH0KK1BFUkw9JGFjX2N2 X3BhdGhfUEVSTAoraWYgdGVzdCAtbiAiJFBFUkwiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkUEVSTCIgPiY1CiskYXNfZWNobyAiJFBF UkwiID4mNjsgfQogZWxzZQogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IHJlc3VsdDogbm8iID4mNQogJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKLSAgaWYgdGVz dCAieCRhY19jdF9PQ0FNTE1LVE9QIiA9IHg7IHRoZW4KLSAgICBPQ0FNTE1LVE9QPSJubyIKLSAg ZWxzZQotICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KLXllczop Ci17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5n IGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1Ci0kYXNfZWNo byAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBo b3N0IHRyaXBsZXQiID4mMjt9Ci1hY190b29sX3dhcm5lZD15ZXMgOzsKLWVzYWMKLSAgICBPQ0FN TE1LVE9QPSRhY19jdF9PQ0FNTE1LVE9QCi0gIGZpCi1lbHNlCi0gIE9DQU1MTUtUT1A9IiRhY19j dl9wcm9nX09DQU1MTUtUT1AiCi1maQogCitpZiB0ZXN0IHgiJHtQRVJMfSIgPT0geCJubyIKK3Ro ZW4KKyAgICBhc19mbl9lcnJvciAkPyAiVW5hYmxlIHRvIGZpbmQgcGVybCwgcGxlYXNlIGluc3Rh bGwgcGVybCIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0ICJ4JHhhcGkiID0gInh5IjsgdGhlbiA6 CiAKLSAgIyBjaGVja2luZyBmb3Igb2NhbWxta2xpYgotICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9w cmVmaXgiOyB0aGVuCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3By ZWZpeH1vY2FtbG1rbGliIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4K LXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW9jYW1sbWtsaWI7IGFjX3dvcmQ9JDIKKyAgICAj IEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImN1cmwtY29uZmlnIiwgc28gaXQgY2FuIGJlIGEg cHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBjdXJsLWNvbmZpZzsgYWNfd29yZD0k MgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Ig JGFjX3dvcmQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2 OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfT0NBTUxNS0xJQitzZXR9IiA9IHNldDsgdGhlbiA6 CitpZiB0ZXN0ICIke2FjX2N2X3BhdGhfQ1VSTCtzZXR9IiA9IHNldDsgdGhlbiA6CiAgICRhc19l Y2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGlmIHRlc3QgLW4gIiRPQ0FNTE1LTElCIjsg dGhlbgotICBhY19jdl9wcm9nX09DQU1MTUtMSUI9IiRPQ0FNTE1LTElCIiAjIExldCB0aGUgdXNl ciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9T RVBBUkFUT1IKKyAgY2FzZSAkQ1VSTCBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3Zf cGF0aF9DVVJMPSIkQ1VSTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBh IHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFU T1IKIGZvciBhc19kaXIgaW4gJFBBVEgKIGRvCiAgIElGUz0kYXNfc2F2ZV9JRlMKICAgdGVzdCAt eiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4 ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3Jk JGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0 IjsgfTsgdGhlbgotICAgIGFjX2N2X3Byb2dfT0NBTUxNS0xJQj0iJHthY190b29sX3ByZWZpeH1v Y2FtbG1rbGliIgorICAgIGFjX2N2X3BhdGhfQ1VSTD0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVj X2V4dCIKICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAk YXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKICAgICBicmVhayAyCiAgIGZpCkBAIC01 OTgxLDM5ICszNjkyLDQ0IEBAIGRvbmUKICAgZG9uZQogSUZTPSRhc19zYXZlX0lGUwogCisgIHRl c3QgLXogIiRhY19jdl9wYXRoX0NVUkwiICYmIGFjX2N2X3BhdGhfQ1VSTD0ibm8iCisgIDs7Citl c2FjCiBmaQotZmkKLU9DQU1MTUtMSUI9JGFjX2N2X3Byb2dfT0NBTUxNS0xJQgotaWYgdGVzdCAt biAiJE9DQU1MTUtMSUIiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0k TElORU5PfTogcmVzdWx0OiAkT0NBTUxNS0xJQiIgPiY1Ci0kYXNfZWNobyAiJE9DQU1MTUtMSUIi ID4mNjsgfQorQ1VSTD0kYWNfY3ZfcGF0aF9DVVJMCitpZiB0ZXN0IC1uICIkQ1VSTCI7IHRoZW4K KyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDVVJM IiA+JjUKKyRhc19lY2hvICIkQ1VSTCIgPiY2OyB9CiBlbHNlCiAgIHsgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiAkYXNfZWNobyAibm8iID4m NjsgfQogZmkKIAogCitpZiB0ZXN0IHgiJHtDVVJMfSIgPT0geCJubyIKK3RoZW4KKyAgICBhc19m bl9lcnJvciAkPyAiVW5hYmxlIHRvIGZpbmQgY3VybC1jb25maWcsIHBsZWFzZSBpbnN0YWxsIGN1 cmwtY29uZmlnIiAiJExJTkVOTyIgNQogZmkKLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX09DQU1M TUtMSUIiOyB0aGVuCi0gIGFjX2N0X09DQU1MTUtMSUI9JE9DQU1MTUtMSUIKLSAgIyBFeHRyYWN0 IHRoZSBmaXJzdCB3b3JkIG9mICJvY2FtbG1rbGliIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBu YW1lIHdpdGggYXJncy4KLXNldCBkdW1teSBvY2FtbG1rbGliOyBhY193b3JkPSQyCisgICAgIyBF eHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJ4bWwyLWNvbmZpZyIsIHNvIGl0IGNhbiBiZSBhIHBy b2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgeG1sMi1jb25maWc7IGFjX3dvcmQ9JDIK IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRh Y193b3JkIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsg fQotaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X09DQU1MTUtMSUIrc2V0fSIgPSBzZXQ7IHRo ZW4gOgoraWYgdGVzdCAiJHthY19jdl9wYXRoX1hNTCtzZXR9IiA9IHNldDsgdGhlbiA6CiAgICRh c19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9PQ0FN TE1LTElCIjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X09DQU1MTUtMSUI9IiRhY19jdF9PQ0FN TE1LTElCIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVf SUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgY2FzZSAkWE1MIGluCisgIFtcXC9dKiB8 ID86W1xcL10qKQorICBhY19jdl9wYXRoX1hNTD0iJFhNTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJp ZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7 IElGUz0kUEFUSF9TRVBBUkFUT1IKIGZvciBhc19kaXIgaW4gJFBBVEgKIGRvCiAgIElGUz0kYXNf c2F2ZV9JRlMKICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KICAgICBmb3IgYWNfZXhl Y19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KICAgaWYgeyB0ZXN0IC1m ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRh Y193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfT0NBTUxN S0xJQj0ib2NhbWxta2xpYiIKKyAgICBhY19jdl9wYXRoX1hNTD0iJGFzX2Rpci8kYWNfd29yZCRh Y19leGVjX2V4dCIKICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBm b3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKICAgICBicmVhayAyCiAgIGZp CkBAIC02MDIxLDQ0ICszNzM3LDM5IEBAIGRvbmUKICAgZG9uZQogSUZTPSRhc19zYXZlX0lGUwog CisgIHRlc3QgLXogIiRhY19jdl9wYXRoX1hNTCIgJiYgYWNfY3ZfcGF0aF9YTUw9Im5vIgorICA7 OworZXNhYwogZmkKLWZpCi1hY19jdF9PQ0FNTE1LTElCPSRhY19jdl9wcm9nX2FjX2N0X09DQU1M TUtMSUIKLWlmIHRlc3QgLW4gIiRhY19jdF9PQ0FNTE1LTElCIjsgdGhlbgotICB7ICRhc19lY2hv ICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X09DQU1MTUtMSUIi ID4mNQotJGFzX2VjaG8gIiRhY19jdF9PQ0FNTE1LTElCIiA+JjY7IH0KK1hNTD0kYWNfY3ZfcGF0 aF9YTUwKK2lmIHRlc3QgLW4gIiRYTUwiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2Fz X2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkWE1MIiA+JjUKKyRhc19lY2hvICIkWE1MIiA+JjY7 IH0KIGVsc2UKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1 bHQ6IG5vIiA+JjUKICRhc19lY2hvICJubyIgPiY2OyB9CiBmaQogCi0gIGlmIHRlc3QgIngkYWNf Y3RfT0NBTUxNS0xJQiIgPSB4OyB0aGVuCi0gICAgT0NBTUxNS0xJQj0ibm8iCi0gIGVsc2UKLSAg ICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCi15ZXM6KQoteyAkYXNf ZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0 b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQotJGFzX2VjaG8gIiRhc19t ZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlw bGV0IiA+JjI7fQotYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci1lc2FjCi0gICAgT0NBTUxNS0xJQj0k YWNfY3RfT0NBTUxNS0xJQgotICBmaQotZWxzZQotICBPQ0FNTE1LTElCPSIkYWNfY3ZfcHJvZ19P Q0FNTE1LTElCIgorCitpZiB0ZXN0IHgiJHtYTUx9IiA9PSB4Im5vIgordGhlbgorICAgIGFzX2Zu X2Vycm9yICQ/ICJVbmFibGUgdG8gZmluZCB4bWwyLWNvbmZpZywgcGxlYXNlIGluc3RhbGwgeG1s Mi1jb25maWciICIkTElORU5PIiA1CiBmaQogCitmaQoraWYgdGVzdCAieCRvY2FtbHRvb2xzIiA9 ICJ4eSI7IHRoZW4gOgogCi0gICMgY2hlY2tpbmcgZm9yIG9jYW1sZG9jCisgICAgICAjIGNoZWNr aW5nIGZvciBvY2FtbGMKICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAj IEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9b2NhbWxkb2MiLCBz byBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICR7YWNfdG9v bF9wcmVmaXh9b2NhbWxkb2M7IGFjX3dvcmQ9JDIKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3Jk IG9mICIke2FjX3Rvb2xfcHJlZml4fW9jYW1sYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFt ZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1vY2FtbGM7IGFjX3dvcmQ9 JDIKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9y ICRhY193b3JkIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4m NjsgfQotaWYgdGVzdCAiJHthY19jdl9wcm9nX09DQU1MRE9DK3NldH0iID0gc2V0OyB0aGVuIDoK K2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19PQ0FNTEMrc2V0fSIgPSBzZXQ7IHRoZW4gOgogICAkYXNf ZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBpZiB0ZXN0IC1uICIkT0NBTUxET0MiOyB0 aGVuCi0gIGFjX2N2X3Byb2dfT0NBTUxET0M9IiRPQ0FNTERPQyIgIyBMZXQgdGhlIHVzZXIgb3Zl cnJpZGUgdGhlIHRlc3QuCisgIGlmIHRlc3QgLW4gIiRPQ0FNTEMiOyB0aGVuCisgIGFjX2N2X3By b2dfT0NBTUxDPSIkT0NBTUxDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KIGVs c2UKIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKIGZvciBhc19kaXIgaW4g JFBBVEgKQEAgLTYwNjcsNyArMzc3OCw3IEBAIGRvCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFz X2Rpcj0uCiAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lv bnM7IGRvCiAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYg JGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSAgICBh Y19jdl9wcm9nX09DQU1MRE9DPSIke2FjX3Rvb2xfcHJlZml4fW9jYW1sZG9jIgorICAgIGFjX2N2 X3Byb2dfT0NBTUxDPSIke2FjX3Rvb2xfcHJlZml4fW9jYW1sYyIKICAgICAkYXNfZWNobyAiJGFz X21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNf ZXh0IiA+JjUKICAgICBicmVhayAyCiAgIGZpCkBAIC02MDc3LDEwICszNzg4LDEwIEBAIElGUz0k YXNfc2F2ZV9JRlMKIAogZmkKIGZpCi1PQ0FNTERPQz0kYWNfY3ZfcHJvZ19PQ0FNTERPQwotaWYg dGVzdCAtbiAiJE9DQU1MRE9DIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5l bm8tJExJTkVOT306IHJlc3VsdDogJE9DQU1MRE9DIiA+JjUKLSRhc19lY2hvICIkT0NBTUxET0Mi ID4mNjsgfQorT0NBTUxDPSRhY19jdl9wcm9nX09DQU1MQworaWYgdGVzdCAtbiAiJE9DQU1MQyI7 IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6 ICRPQ0FNTEMiID4mNQorJGFzX2VjaG8gIiRPQ0FNTEMiID4mNjsgfQogZWxzZQogICB7ICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQogJGFzX2Vj aG8gIm5vIiA+JjY7IH0KQEAgLTYwODgsMTcgKzM3OTksMTcgQEAgZmkKIAogCiBmaQotaWYgdGVz dCAteiAiJGFjX2N2X3Byb2dfT0NBTUxET0MiOyB0aGVuCi0gIGFjX2N0X09DQU1MRE9DPSRPQ0FN TERPQwotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm9jYW1sZG9jIiwgc28gaXQgY2Fu IGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSBvY2FtbGRvYzsgYWNfd29y ZD0kMgoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfT0NBTUxDIjsgdGhlbgorICBhY19jdF9PQ0FN TEM9JE9DQU1MQworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm9jYW1sYyIsIHNvIGl0 IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgb2NhbWxjOyBhY193 b3JkPSQyCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5n IGZvciAkYWNfd29yZCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4g IiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9PQ0FNTERPQytzZXR9IiA9IHNl dDsgdGhlbiA6CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfT0NBTUxDK3NldH0iID0gc2V0 OyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgaWYgdGVzdCAt biAiJGFjX2N0X09DQU1MRE9DIjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X09DQU1MRE9DPSIk YWNfY3RfT0NBTUxET0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorICBpZiB0 ZXN0IC1uICIkYWNfY3RfT0NBTUxDIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X09DQU1MQz0i JGFjX2N0X09DQU1MQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCiBlbHNlCiBh c19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCiBmb3IgYXNfZGlyIGluICRQQVRI CkBAIC02MTA3LDcgKzM4MTgsNyBAQCBkbwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9 LgogICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBk bwogICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190 ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0gICAgYWNfY3Zf cHJvZ19hY19jdF9PQ0FNTERPQz0ib2NhbWxkb2MiCisgICAgYWNfY3ZfcHJvZ19hY19jdF9PQ0FN TEM9Im9jYW1sYyIKICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBm b3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKICAgICBicmVhayAyCiAgIGZp CkBAIC02MTE3LDE3ICszODI4LDE3IEBAIElGUz0kYXNfc2F2ZV9JRlMKIAogZmkKIGZpCi1hY19j dF9PQ0FNTERPQz0kYWNfY3ZfcHJvZ19hY19jdF9PQ0FNTERPQwotaWYgdGVzdCAtbiAiJGFjX2N0 X09DQU1MRE9DIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IHJlc3VsdDogJGFjX2N0X09DQU1MRE9DIiA+JjUKLSRhc19lY2hvICIkYWNfY3RfT0NBTUxE T0MiID4mNjsgfQorYWNfY3RfT0NBTUxDPSRhY19jdl9wcm9nX2FjX2N0X09DQU1MQworaWYgdGVz dCAtbiAiJGFjX2N0X09DQU1MQyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGlu ZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9PQ0FNTEMiID4mNQorJGFzX2VjaG8gIiRhY19j dF9PQ0FNTEMiID4mNjsgfQogZWxzZQogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8t JExJTkVOT306IHJlc3VsdDogbm8iID4mNQogJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKLSAg aWYgdGVzdCAieCRhY19jdF9PQ0FNTERPQyIgPSB4OyB0aGVuCi0gICAgT0NBTUxET0M9Im5vIgor ICBpZiB0ZXN0ICJ4JGFjX2N0X09DQU1MQyIgPSB4OyB0aGVuCisgICAgT0NBTUxDPSJubyIKICAg ZWxzZQogICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KIHllczop CkBAIC02MTM1LDI0ICszODQ2LDQxIEBAIHllczopCiAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5H OiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9 CiBhY190b29sX3dhcm5lZD15ZXMgOzsKIGVzYWMKLSAgICBPQ0FNTERPQz0kYWNfY3RfT0NBTUxE T0MKKyAgICBPQ0FNTEM9JGFjX2N0X09DQU1MQwogICBmaQogZWxzZQotICBPQ0FNTERPQz0iJGFj X2N2X3Byb2dfT0NBTUxET0MiCisgIE9DQU1MQz0iJGFjX2N2X3Byb2dfT0NBTUxDIgogZmkKIAog Ci0gICMgY2hlY2tpbmcgZm9yIG9jYW1sYnVpbGQKLSAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJl Zml4IjsgdGhlbgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVm aXh9b2NhbWxidWlsZCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1z ZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1vY2FtbGJ1aWxkOyBhY193b3JkPSQyCisgIGlmIHRl c3QgIiRPQ0FNTEMiICE9ICJubyI7IHRoZW4KKyAgICAgT0NBTUxWRVJTSU9OPWAkT0NBTUxDIC12 IHwgc2VkIC1uIC1lICdzfC4qdmVyc2lvbiogKlwoLipcKSR8XDF8cCdgCisgICAgIHsgJGFzX2Vj aG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBPQ2FtbCB2ZXJzaW9uIGlz ICRPQ0FNTFZFUlNJT04iID4mNQorJGFzX2VjaG8gIk9DYW1sIHZlcnNpb24gaXMgJE9DQU1MVkVS U0lPTiIgPiY2OyB9CisgICAgICMgSWYgT0NBTUxMSUIgaXMgc2V0LCB1c2UgaXQKKyAgICAgaWYg dGVzdCAiJE9DQU1MTElCIiA9ICIiOyB0aGVuCisgICAgICAgIE9DQU1MTElCPWAkT0NBTUxDIC13 aGVyZSAyPi9kZXYvbnVsbCB8fCAkT0NBTUxDIC12fHRhaWwgLTF8Y3V0IC1kICcgJyAtZiA0YAor ICAgICBlbHNlCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogcmVzdWx0OiBPQ0FNTExJQiBwcmV2aW91c2x5IHNldDsgcHJlc2VydmluZyBpdC4iID4mNQor JGFzX2VjaG8gIk9DQU1MTElCIHByZXZpb3VzbHkgc2V0OyBwcmVzZXJ2aW5nIGl0LiIgPiY2OyB9 CisgICAgIGZpCisgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog cmVzdWx0OiBPQ2FtbCBsaWJyYXJ5IHBhdGggaXMgJE9DQU1MTElCIiA+JjUKKyRhc19lY2hvICJP Q2FtbCBsaWJyYXJ5IHBhdGggaXMgJE9DQU1MTElCIiA+JjY7IH0KKworCisKKworICAgICAjIGNo ZWNraW5nIGZvciBvY2FtbG9wdAorICAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0 aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1vY2Ft bG9wdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkg JHthY190b29sX3ByZWZpeH1vY2FtbG9wdDsgYWNfd29yZD0kMgogeyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQogJGFzX2Vj aG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2 X3Byb2dfT0NBTUxCVUlMRCtzZXR9IiA9IHNldDsgdGhlbiA6CitpZiB0ZXN0ICIke2FjX2N2X3By b2dfT0NBTUxPUFQrc2V0fSIgPSBzZXQ7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAi ID4mNgogZWxzZQotICBpZiB0ZXN0IC1uICIkT0NBTUxCVUlMRCI7IHRoZW4KLSAgYWNfY3ZfcHJv Z19PQ0FNTEJVSUxEPSIkT0NBTUxCVUlMRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRl c3QuCisgIGlmIHRlc3QgLW4gIiRPQ0FNTE9QVCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19PQ0FNTE9Q VD0iJE9DQU1MT1BUIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KIGVsc2UKIGFz X3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKIGZvciBhc19kaXIgaW4gJFBBVEgK QEAgLTYxNjEsNyArMzg4OSw3IEBAIGRvCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0u CiAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRv CiAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rl c3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSAgICBhY19jdl9w cm9nX09DQU1MQlVJTEQ9IiR7YWNfdG9vbF9wcmVmaXh9b2NhbWxidWlsZCIKKyAgICBhY19jdl9w cm9nX09DQU1MT1BUPSIke2FjX3Rvb2xfcHJlZml4fW9jYW1sb3B0IgogICAgICRhc19lY2hvICIk YXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhl Y19leHQiID4mNQogICAgIGJyZWFrIDIKICAgZmkKQEAgLTYxNzEsMTAgKzM4OTksMTAgQEAgSUZT PSRhc19zYXZlX0lGUwogCiBmaQogZmkKLU9DQU1MQlVJTEQ9JGFjX2N2X3Byb2dfT0NBTUxCVUlM RAotaWYgdGVzdCAtbiAiJE9DQU1MQlVJTEQiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkT0NBTUxCVUlMRCIgPiY1Ci0kYXNfZWNobyAi JE9DQU1MQlVJTEQiID4mNjsgfQorT0NBTUxPUFQ9JGFjX2N2X3Byb2dfT0NBTUxPUFQKK2lmIHRl c3QgLW4gIiRPQ0FNTE9QVCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiByZXN1bHQ6ICRPQ0FNTE9QVCIgPiY1CiskYXNfZWNobyAiJE9DQU1MT1BUIiA+ JjY7IH0KIGVsc2UKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBy ZXN1bHQ6IG5vIiA+JjUKICRhc19lY2hvICJubyIgPiY2OyB9CkBAIC02MTgyLDE3ICszOTEwLDE3 IEBAIGZpCiAKIAogZmkKLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX09DQU1MQlVJTEQiOyB0aGVu Ci0gIGFjX2N0X09DQU1MQlVJTEQ9JE9DQU1MQlVJTEQKLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3 b3JkIG9mICJvY2FtbGJ1aWxkIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJn cy4KLXNldCBkdW1teSBvY2FtbGJ1aWxkOyBhY193b3JkPSQyCitpZiB0ZXN0IC16ICIkYWNfY3Zf cHJvZ19PQ0FNTE9QVCI7IHRoZW4KKyAgYWNfY3RfT0NBTUxPUFQ9JE9DQU1MT1BUCisgICMgRXh0 cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAib2NhbWxvcHQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFt IG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IG9jYW1sb3B0OyBhY193b3JkPSQyCiB7ICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIg PiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmIHRl c3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9PQ0FNTEJVSUxEK3NldH0iID0gc2V0OyB0aGVuIDoKK2lm IHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9PQ0FNTE9QVCtzZXR9IiA9IHNldDsgdGhlbiA6CiAg ICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9P Q0FNTEJVSUxEIjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X09DQU1MQlVJTEQ9IiRhY19jdF9P Q0FNTEJVSUxEIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKyAgaWYgdGVzdCAt biAiJGFjX2N0X09DQU1MT1BUIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X09DQU1MT1BUPSIk YWNfY3RfT0NBTUxPUFQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgogZWxzZQog YXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgogZm9yIGFzX2RpciBpbiAkUEFU SApAQCAtNjIwMSw3ICszOTI5LDcgQEAgZG8KICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGly PS4KICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsg ZG8KICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNf dGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotICAgIGFjX2N2 X3Byb2dfYWNfY3RfT0NBTUxCVUlMRD0ib2NhbWxidWlsZCIKKyAgICBhY19jdl9wcm9nX2FjX2N0 X09DQU1MT1BUPSJvY2FtbG9wdCIKICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRM SU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKICAgICBicmVh ayAyCiAgIGZpCkBAIC02MjExLDE3ICszOTM5LDE3IEBAIElGUz0kYXNfc2F2ZV9JRlMKIAogZmkK IGZpCi1hY19jdF9PQ0FNTEJVSUxEPSRhY19jdl9wcm9nX2FjX2N0X09DQU1MQlVJTEQKLWlmIHRl c3QgLW4gIiRhY19jdF9PQ0FNTEJVSUxEIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X09DQU1MQlVJTEQiID4mNQotJGFzX2Vj aG8gIiRhY19jdF9PQ0FNTEJVSUxEIiA+JjY7IH0KK2FjX2N0X09DQU1MT1BUPSRhY19jdl9wcm9n X2FjX2N0X09DQU1MT1BUCitpZiB0ZXN0IC1uICIkYWNfY3RfT0NBTUxPUFQiOyB0aGVuCisgIHsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfT0NB TUxPUFQiID4mNQorJGFzX2VjaG8gIiRhY19jdF9PQ0FNTE9QVCIgPiY2OyB9CiBlbHNlCiAgIHsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiAk YXNfZWNobyAibm8iID4mNjsgfQogZmkKIAotICBpZiB0ZXN0ICJ4JGFjX2N0X09DQU1MQlVJTEQi ID0geDsgdGhlbgotICAgIE9DQU1MQlVJTEQ9Im5vIgorICBpZiB0ZXN0ICJ4JGFjX2N0X09DQU1M T1BUIiA9IHg7IHRoZW4KKyAgICBPQ0FNTE9QVD0ibm8iCiAgIGVsc2UKICAgICBjYXNlICRjcm9z c19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCiB5ZXM6KQpAQCAtNjIyOSw0NCArMzk1Nyw4 OSBAQCB5ZXM6KQogJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMg bm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQogYWNfdG9vbF93YXJuZWQ9eWVz IDs7CiBlc2FjCi0gICAgT0NBTUxCVUlMRD0kYWNfY3RfT0NBTUxCVUlMRAorICAgIE9DQU1MT1BU PSRhY19jdF9PQ0FNTE9QVAogICBmaQogZWxzZQotICBPQ0FNTEJVSUxEPSIkYWNfY3ZfcHJvZ19P Q0FNTEJVSUxEIgorICBPQ0FNTE9QVD0iJGFjX2N2X3Byb2dfT0NBTUxPUFQiCiBmaQogCisgICAg IE9DQU1MQkVTVD1ieXRlCisgICAgIGlmIHRlc3QgIiRPQ0FNTE9QVCIgPSAibm8iOyB0aGVuCisJ eyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBDYW5ub3Qg ZmluZCBvY2FtbG9wdDsgYnl0ZWNvZGUgY29tcGlsYXRpb24gb25seS4iID4mNQorJGFzX2VjaG8g IiRhc19tZTogV0FSTklORzogQ2Fubm90IGZpbmQgb2NhbWxvcHQ7IGJ5dGVjb2RlIGNvbXBpbGF0 aW9uIG9ubHkuIiA+JjI7fQorICAgICBlbHNlCisJVE1QVkVSU0lPTj1gJE9DQU1MT1BUIC12IHwg c2VkIC1uIC1lICdzfC4qdmVyc2lvbiogKlwoLipcKSR8XDF8cCcgYAorCWlmIHRlc3QgIiRUTVBW RVJTSU9OIiAhPSAiJE9DQU1MVkVSU0lPTiIgOyB0aGVuCisJICAgIHsgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB2ZXJzaW9ucyBkaWZmZXJzIGZyb20gb2Nh bWxjOyBvY2FtbG9wdCBkaXNjYXJkZWQuIiA+JjUKKyRhc19lY2hvICJ2ZXJzaW9ucyBkaWZmZXJz IGZyb20gb2NhbWxjOyBvY2FtbG9wdCBkaXNjYXJkZWQuIiA+JjY7IH0KKwkgICAgT0NBTUxPUFQ9 bm8KKwllbHNlCisJICAgIE9DQU1MQkVTVD1vcHQKKwlmaQorICAgICBmaQogCi0gICAgaWYgdGVz dCAieCRPQ0FNTEMiID0gInhubyI7IHRoZW4gOgogCi0gICAgICAgIGlmIHRlc3QgIngkZW5hYmxl X29jYW1sdG9vbHMiID0gInh5ZXMiOyB0aGVuIDoKIAotICAgICAgICAgICAgYXNfZm5fZXJyb3Ig JD8gIk9jYW1sIHRvb2xzIGVuYWJsZWQsIGJ1dCB1bmFibGUgdG8gZmluZCBPY2FtbCIgIiRMSU5F Tk8iIDUKLWZpCi0gICAgICAgIG9jYW1sdG9vbHM9Im4iCisgICAgICMgY2hlY2tpbmcgZm9yIG9j YW1sYy5vcHQKKyAgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4 dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9b2NhbWxjLm9wdCIsIHNv IGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29s X3ByZWZpeH1vY2FtbGMub3B0OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJj aGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19P Q0FNTENET1RPUFQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAi ID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkT0NBTUxDRE9UT1BUIjsgdGhlbgorICBhY19jdl9w cm9nX09DQU1MQ0RPVE9QVD0iJE9DQU1MQ0RPVE9QVCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUg dGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitm b3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRh c19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRh YmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19l eGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07 IHRoZW4KKyAgICBhY19jdl9wcm9nX09DQU1MQ0RPVE9QVD0iJHthY190b29sX3ByZWZpeH1vY2Ft bGMub3B0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5k ICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2Rv bmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUwogCiBmaQorZmkKK09DQU1MQ0RPVE9QVD0kYWNf Y3ZfcHJvZ19PQ0FNTENET1RPUFQKK2lmIHRlc3QgLW4gIiRPQ0FNTENET1RPUFQiOyB0aGVuCisg IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkT0NBTUxD RE9UT1BUIiA+JjUKKyRhc19lY2hvICIkT0NBTUxDRE9UT1BUIiA+JjY7IH0KK2Vsc2UKKyAgeyAk YXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRh c19lY2hvICJubyIgPiY2OyB9CitmaQorCiAKIGZpCi0jIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQg b2YgImJhc2giLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1 bW15IGJhc2g7IGFjX3dvcmQ9JDIKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX09DQU1MQ0RPVE9Q VCI7IHRoZW4KKyAgYWNfY3RfT0NBTUxDRE9UT1BUPSRPQ0FNTENET1RPUFQKKyAgIyBFeHRyYWN0 IHRoZSBmaXJzdCB3b3JkIG9mICJvY2FtbGMub3B0Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBu YW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBvY2FtbGMub3B0OyBhY193b3JkPSQyCiB7ICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIg PiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmIHRl c3QgIiR7YWNfY3ZfcGF0aF9CQVNIK3NldH0iID0gc2V0OyB0aGVuIDoKK2lmIHRlc3QgIiR7YWNf Y3ZfcHJvZ19hY19jdF9PQ0FNTENET1RPUFQrc2V0fSIgPSBzZXQ7IHRoZW4gOgogICAkYXNfZWNo b19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBjYXNlICRCQVNIIGluCi0gIFtcXC9dKiB8ID86 W1xcL10qKQotICBhY19jdl9wYXRoX0JBU0g9IiRCQVNIIiAjIExldCB0aGUgdXNlciBvdmVycmlk ZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KLSAgOzsKLSAgKikKLSAgYXNfc2F2ZV9JRlM9JElGUzsg SUZTPSRQQVRIX1NFUEFSQVRPUgorICBpZiB0ZXN0IC1uICIkYWNfY3RfT0NBTUxDRE9UT1BUIjsg dGhlbgorICBhY19jdl9wcm9nX2FjX2N0X09DQU1MQ0RPVE9QVD0iJGFjX2N0X09DQU1MQ0RPVE9Q VCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0k SUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCiBmb3IgYXNfZGlyIGluICRQQVRICiBkbwogICBJRlM9 JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCiAgICAgZm9yIGFj X2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCiAgIGlmIHsgdGVz dCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rp ci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSAgICBhY19jdl9wYXRoX0JBU0g9IiRh c19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgYWNfY3ZfcHJvZ19hY19jdF9PQ0FNTENE T1RPUFQ9Im9jYW1sYy5vcHQiCiAgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CiAgICAgYnJlYWsg MgogICBmaQpAQCAtNjI3NCw1NiArNDA0Nyw2MyBAQCBkb25lCiAgIGRvbmUKIElGUz0kYXNfc2F2 ZV9JRlMKIAotICB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9CQVNIIiAmJiBhY19jdl9wYXRoX0JBU0g9 Im5vIgotICA7OwotZXNhYwogZmkKLUJBU0g9JGFjX2N2X3BhdGhfQkFTSAotaWYgdGVzdCAtbiAi JEJBU0giOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog cmVzdWx0OiAkQkFTSCIgPiY1Ci0kYXNfZWNobyAiJEJBU0giID4mNjsgfQorZmkKK2FjX2N0X09D QU1MQ0RPVE9QVD0kYWNfY3ZfcHJvZ19hY19jdF9PQ0FNTENET1RPUFQKK2lmIHRlc3QgLW4gIiRh Y19jdF9PQ0FNTENET1RPUFQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfT0NBTUxDRE9UT1BUIiA+JjUKKyRhc19lY2hvICIk YWNfY3RfT0NBTUxDRE9UT1BUIiA+JjY7IH0KIGVsc2UKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKICRhc19lY2hvICJubyIgPiY2OyB9 CiBmaQogCi0KLWlmIHRlc3QgeCIke0JBU0h9IiA9PSB4Im5vIgotdGhlbgotICAgIGFzX2ZuX2Vy cm9yICQ/ICJVbmFibGUgdG8gZmluZCBiYXNoLCBwbGVhc2UgaW5zdGFsbCBiYXNoIiAiJExJTkVO TyIgNQorICBpZiB0ZXN0ICJ4JGFjX2N0X09DQU1MQ0RPVE9QVCIgPSB4OyB0aGVuCisgICAgT0NB TUxDRE9UT1BUPSJubyIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9v bF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJp cGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBu b3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMg OzsKK2VzYWMKKyAgICBPQ0FNTENET1RPUFQ9JGFjX2N0X09DQU1MQ0RPVE9QVAorICBmaQorZWxz ZQorICBPQ0FNTENET1RPUFQ9IiRhY19jdl9wcm9nX09DQU1MQ0RPVE9QVCIKIGZpCi1pZiB0ZXN0 ICJ4JHB5dGhvbnRvb2xzIiA9ICJ4eSI7IHRoZW4gOgotCi0gICAgaWYgZWNobyAiJFBZVEhPTiIg fCBncmVwIC1xICJeLyI7IHRoZW4gOgogCi0gICAgICAgIFBZVEhPTlBBVEg9JFBZVEhPTgotICAg ICAgICBQWVRIT049YGJhc2VuYW1lICRQWVRIT05QQVRIYAorICAgICBpZiB0ZXN0ICIkT0NBTUxD RE9UT1BUIiAhPSAibm8iOyB0aGVuCisJVE1QVkVSU0lPTj1gJE9DQU1MQ0RPVE9QVCAtdiB8IHNl ZCAtbiAtZSAnc3wuKnZlcnNpb24qICpcKC4qXCkkfFwxfHAnIGAKKwlpZiB0ZXN0ICIkVE1QVkVS U0lPTiIgIT0gIiRPQ0FNTFZFUlNJT04iIDsgdGhlbgorCSAgICB7ICRhc19lY2hvICIkYXNfbWU6 JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogdmVyc2lvbnMgZGlmZmVycyBmcm9tIG9jYW1s Yzsgb2NhbWxjLm9wdCBkaXNjYXJkZWQuIiA+JjUKKyRhc19lY2hvICJ2ZXJzaW9ucyBkaWZmZXJz IGZyb20gb2NhbWxjOyBvY2FtbGMub3B0IGRpc2NhcmRlZC4iID4mNjsgfQorCWVsc2UKKwkgICAg T0NBTUxDPSRPQ0FNTENET1RPUFQKKwlmaQorICAgICBmaQogCi1lbGlmIHRlc3QgLXogIiRQWVRI T04iOyB0aGVuIDoKLSAgUFlUSE9OPSJweXRob24iCi1lbHNlCi0gIGFzX2ZuX2Vycm9yICQ/ICJQ WVRIT04gc3BlY2lmaWVkLCBidXQgaXMgbm90IGFuIGFic29sdXRlIHBhdGgiICIkTElORU5PIiA1 Ci1maQotICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJFBZVEhPTiIsIHNvIGl0IGNh biBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJFBZVEhPTjsgYWNfd29y ZD0kMgorICAgICAjIGNoZWNraW5nIGZvciBvY2FtbG9wdC5vcHQKKyAgICAgaWYgdGVzdCAiJE9D QU1MT1BUIiAhPSAibm8iIDsgdGhlbgorCWlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRo ZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW9jYW1s b3B0Lm9wdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVt bXkgJHthY190b29sX3ByZWZpeH1vY2FtbG9wdC5vcHQ7IGFjX3dvcmQ9JDIKIHsgJGFzX2VjaG8g IiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUK ICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgdGVzdCAi JHthY19jdl9wYXRoX1BZVEhPTlBBVEgrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgdGVzdCAiJHth Y19jdl9wcm9nX09DQU1MT1BURE9UT1BUK3NldH0iID0gc2V0OyB0aGVuIDoKICAgJGFzX2VjaG9f biAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgY2FzZSAkUFlUSE9OUEFUSCBpbgotICBbXFwvXSog fCA/OltcXC9dKikKLSAgYWNfY3ZfcGF0aF9QWVRIT05QQVRIPSIkUFlUSE9OUEFUSCIgIyBMZXQg dGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCi0gIDs7Ci0gICopCi0gIGFz X3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgaWYgdGVzdCAtbiAiJE9DQU1M T1BURE9UT1BUIjsgdGhlbgorICBhY19jdl9wcm9nX09DQU1MT1BURE9UT1BUPSIkT0NBTUxPUFRE T1RPUFQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9J RlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgogZm9yIGFzX2RpciBpbiAkUEFUSAogZG8KICAg SUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgogICAgIGZv ciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwogICBpZiB7 IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRh c19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0gICAgYWNfY3ZfcGF0aF9QWVRI T05QQVRIPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgIGFjX2N2X3Byb2dfT0NB TUxPUFRET1RPUFQ9IiR7YWNfdG9vbF9wcmVmaXh9b2NhbWxvcHQub3B0IgogICAgICRhc19lY2hv ICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNf ZXhlY19leHQiID4mNQogICAgIGJyZWFrIDIKICAgZmkKQEAgLTYzMzEsNjIgKzQxMTEsMzkgQEAg ZG9uZQogICBkb25lCiBJRlM9JGFzX3NhdmVfSUZTCiAKLSAgdGVzdCAteiAiJGFjX2N2X3BhdGhf UFlUSE9OUEFUSCIgJiYgYWNfY3ZfcGF0aF9QWVRIT05QQVRIPSJubyIKLSAgOzsKLWVzYWMKIGZp Ci1QWVRIT05QQVRIPSRhY19jdl9wYXRoX1BZVEhPTlBBVEgKLWlmIHRlc3QgLW4gIiRQWVRIT05Q QVRIIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJl c3VsdDogJFBZVEhPTlBBVEgiID4mNQotJGFzX2VjaG8gIiRQWVRIT05QQVRIIiA+JjY7IH0KK2Zp CitPQ0FNTE9QVERPVE9QVD0kYWNfY3ZfcHJvZ19PQ0FNTE9QVERPVE9QVAoraWYgdGVzdCAtbiAi JE9DQU1MT1BURE9UT1BUIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8t JExJTkVOT306IHJlc3VsdDogJE9DQU1MT1BURE9UT1BUIiA+JjUKKyRhc19lY2hvICIkT0NBTUxP UFRET1RPUFQiID4mNjsgfQogZWxzZQogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8t JExJTkVOT306IHJlc3VsdDogbm8iID4mNQogJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKIAot aWYgdGVzdCB4IiR7UFlUSE9OUEFUSH0iID09IHgibm8iCi10aGVuCi0gICAgYXNfZm5fZXJyb3Ig JD8gIlVuYWJsZSB0byBmaW5kICRQWVRIT04sIHBsZWFzZSBpbnN0YWxsICRQWVRIT04iICIkTElO RU5PIiA1Ci1maQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog Y2hlY2tpbmcgZm9yIHB5dGhvbiB2ZXJzaW9uID49IDIuMyAiID4mNQotJGFzX2VjaG9fbiAiY2hl Y2tpbmcgZm9yIHB5dGhvbiB2ZXJzaW9uID49IDIuMyAuLi4gIiA+JjY7IH0KLWAkUFlUSE9OIC1j ICdpbXBvcnQgc3lzOyBzeXMuZXhpdChldmFsKCJzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDMpIikp J2AKLWlmIHRlc3QgIiQ/IiAhPSAiMCIKLXRoZW4KLSAgICBweXRob25fdmVyc2lvbj1gJFBZVEhP TiAtViAyPiYxYAotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog cmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotICAgIGFzX2ZuX2Vycm9yICQ/ ICIkcHl0aG9uX3ZlcnNpb24gaXMgdG9vIG9sZCwgbWluaW11bSByZXF1aXJlZCB2ZXJzaW9uIGlz IDIuMyIgIiRMSU5FTk8iIDUKLWVsc2UKLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5l bm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5ZXMiID4mNjsgfQogZmkK LQotYWNfcHJldmlvdXNfY3BwZmxhZ3M9JENQUEZMQUdTCi1hY19wcmV2aW91c19sZGZsYWdzPSRM REZMQUdTCi1hY19weXRob25fdmVyc2lvbj1gJFBZVEhPTiAtYyAnaW1wb3J0IGRpc3R1dGlscy5z eXNjb25maWc7IFwKLSAgICBwcmludCBkaXN0dXRpbHMuc3lzY29uZmlnLmdldF9jb25maWdfdmFy KCJWRVJTSU9OIiknYAotIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkUFlUSE9OLWNvbmZp ZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJFBZ VEhPTi1jb25maWc7IGFjX3dvcmQ9JDIKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX09DQU1MT1BU RE9UT1BUIjsgdGhlbgorICBhY19jdF9PQ0FNTE9QVERPVE9QVD0kT0NBTUxPUFRET1RPUFQKKyAg IyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJvY2FtbG9wdC5vcHQiLCBzbyBpdCBjYW4gYmUg YSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IG9jYW1sb3B0Lm9wdDsgYWNfd29y ZD0kMgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBm b3IgJGFjX3dvcmQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIg PiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3BhdGhfcHljb25maWcrc2V0fSIgPSBzZXQ7IHRoZW4g OgoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X09DQU1MT1BURE9UT1BUK3NldH0iID0gc2V0 OyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgY2FzZSAkcHlj b25maWcgaW4KLSAgW1xcL10qIHwgPzpbXFwvXSopCi0gIGFjX2N2X3BhdGhfcHljb25maWc9IiRw eWNvbmZpZyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCi0g IDs7Ci0gICopCi0gIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgaWYg dGVzdCAtbiAiJGFjX2N0X09DQU1MT1BURE9UT1BUIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0 X09DQU1MT1BURE9UT1BUPSIkYWNfY3RfT0NBTUxPUFRET1RPUFQiICMgTGV0IHRoZSB1c2VyIG92 ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFS QVRPUgogZm9yIGFzX2RpciBpbiAkUEFUSAogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0 IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgogICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNf ZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwogICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dv cmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19l eHQiOyB9OyB0aGVuCi0gICAgYWNfY3ZfcGF0aF9weWNvbmZpZz0iJGFzX2Rpci8kYWNfd29yZCRh Y19leGVjX2V4dCIKKyAgICBhY19jdl9wcm9nX2FjX2N0X09DQU1MT1BURE9UT1BUPSJvY2FtbG9w dC5vcHQiCiAgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQg JGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CiAgICAgYnJlYWsgMgogICBmaQpAQCAt NjM5NCwxMjcgKzQxNTEsNjggQEAgZG9uZQogICBkb25lCiBJRlM9JGFzX3NhdmVfSUZTCiAKLSAg dGVzdCAteiAiJGFjX2N2X3BhdGhfcHljb25maWciICYmIGFjX2N2X3BhdGhfcHljb25maWc9Im5v IgotICA7OwotZXNhYwogZmkKLXB5Y29uZmlnPSRhY19jdl9wYXRoX3B5Y29uZmlnCi1pZiB0ZXN0 IC1uICIkcHljb25maWciOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0k TElORU5PfTogcmVzdWx0OiAkcHljb25maWciID4mNQotJGFzX2VjaG8gIiRweWNvbmZpZyIgPiY2 OyB9CitmaQorYWNfY3RfT0NBTUxPUFRET1RPUFQ9JGFjX2N2X3Byb2dfYWNfY3RfT0NBTUxPUFRE T1RPUFQKK2lmIHRlc3QgLW4gIiRhY19jdF9PQ0FNTE9QVERPVE9QVCI7IHRoZW4KKyAgeyAkYXNf ZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9PQ0FNTE9Q VERPVE9QVCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X09DQU1MT1BURE9UT1BUIiA+JjY7IH0KIGVs c2UKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5v IiA+JjUKICRhc19lY2hvICJubyIgPiY2OyB9CiBmaQogCi0KLWlmIHRlc3QgeCIkcHljb25maWci ID09IHgibm8iOyB0aGVuIDoKLQotICAgICAgICBDUFBGTEFHUz0iJENGTEFHUyBgJFBZVEhPTiAt YyAnaW1wb3J0IGRpc3R1dGlscy5zeXNjb25maWc7IFwKLSAgICAgICAgcHJpbnQgIi1JIiArIGRp c3R1dGlscy5zeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIklOQ0xVREVQWSIpJ2AiCi0gICAgQ1BQ RkxBR1M9IiRDUFBGTEFHUyBgJFBZVEhPTiAtYyAnaW1wb3J0IGRpc3R1dGlscy5zeXNjb25maWc7 IFwKLSAgICAgICAgcHJpbnQgZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiQ0ZM QUdTIiknYCIKLSAgICBMREZMQUdTPSIkTERGTEFHUyBgJFBZVEhPTiAtYyAnaW1wb3J0IGRpc3R1 dGlscy5zeXNjb25maWc7IFwKLSAgICAgICAgcHJpbnQgZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRf Y29uZmlnX3ZhcigiTElCUyIpJ2AiCi0gICAgTERGTEFHUz0iJExERkxBR1MgYCRQWVRIT04gLWMg J2ltcG9ydCBkaXN0dXRpbHMuc3lzY29uZmlnOyBcCi0gICAgICAgIHByaW50IGRpc3R1dGlscy5z eXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIlNZU0xJQlMiKSdgIgotICAgIExERkxBR1M9IiRMREZM QUdTIGAkUFlUSE9OIC1jICdpbXBvcnQgZGlzdHV0aWxzLnN5c2NvbmZpZzsgXAotICAgICAgICBw cmludCAiLUwiICsgZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfcHl0aG9uX2xpYihwbGF0X3NwZWNp ZmljPTEsXAotICAgICAgICBzdGFuZGFyZF9saWI9MSkgKyAiL2NvbmZpZyInYCIKLSAgICBMREZM QUdTPSIkTERGTEFHUyBgJFBZVEhPTiAtYyAnaW1wb3J0IGRpc3R1dGlscy5zeXNjb25maWc7IFwK LSAgICAgICAgcHJpbnQgZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiTElOS0ZP UlNIQVJFRCIpJ2AiCi0gICAgTERGTEFHUz0iJExERkxBR1MgYCRQWVRIT04gLWMgJ2ltcG9ydCBk aXN0dXRpbHMuc3lzY29uZmlnOyBcCi0gICAgICAgIHByaW50IGRpc3R1dGlscy5zeXNjb25maWcu Z2V0X2NvbmZpZ192YXIoIkxERkxBR1MiKSdgIgotCi1lbHNlCi0KLSAgICAgICAgQ1BQRkxBR1M9 IiRDRkxBR1MgYCRQWVRIT04tY29uZmlnIC0tY2ZsYWdzYCIKLSAgICBMREZMQUdTPSIkTERGTEFH UyBgJFBZVEhPTi1jb25maWcgLS1sZGZsYWdzYCIKLQotZmkKLQotYWNfZm5fY19jaGVja19oZWFk ZXJfbW9uZ3JlbCAiJExJTkVOTyIgIlB5dGhvbi5oIiAiYWNfY3ZfaGVhZGVyX1B5dGhvbl9oIiAi JGFjX2luY2x1ZGVzX2RlZmF1bHQiCi1pZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9QeXRob25faCIg PSB4IiJ5ZXM7IHRoZW4gOgotCisgIGlmIHRlc3QgIngkYWNfY3RfT0NBTUxPUFRET1RPUFQiID0g eDsgdGhlbgorICAgIE9DQU1MT1BURE9UT1BUPSJubyIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3Nz X2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6 JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVm aXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1 c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9Cith Y190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBPQ0FNTE9QVERPVE9QVD0kYWNfY3RfT0NB TUxPUFRET1RPUFQKKyAgZmkKIGVsc2UKLSAgYXNfZm5fZXJyb3IgJD8gIlVuYWJsZSB0byBmaW5k IFB5dGhvbiBkZXZlbG9wbWVudCBoZWFkZXJzIiAiJExJTkVOTyIgNQorICBPQ0FNTE9QVERPVE9Q VD0iJGFjX2N2X3Byb2dfT0NBTUxPUFRET1RPUFQiCiBmaQogCisJaWYgdGVzdCAiJE9DQU1MT1BU RE9UT1BUIiAhPSAibm8iOyB0aGVuCisJICAgVE1QVkVSU0lPTj1gJE9DQU1MT1BURE9UT1BUIC12 IHwgc2VkIC1uIC1lICdzfC4qdmVyc2lvbiogKlwoLipcKSR8XDF8cCcgYAorCSAgIGlmIHRlc3Qg IiRUTVBWRVJTSU9OIiAhPSAiJE9DQU1MVkVSU0lPTiIgOyB0aGVuCisJICAgICAgeyAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHZlcnNpb24gZGlmZmVycyBm cm9tIG9jYW1sYzsgb2NhbWxvcHQub3B0IGRpc2NhcmRlZC4iID4mNQorJGFzX2VjaG8gInZlcnNp b24gZGlmZmVycyBmcm9tIG9jYW1sYzsgb2NhbWxvcHQub3B0IGRpc2NhcmRlZC4iID4mNjsgfQor CSAgIGVsc2UKKwkgICAgICBPQ0FNTE9QVD0kT0NBTUxPUFRET1RPUFQKKwkgICBmaQorICAgICAg ICBmaQorICAgICBmaQogCi1hc19hY19MaWI9YCRhc19lY2hvICJhY19jdl9saWJfcHl0aG9uJGFj X3B5dGhvbl92ZXJzaW9uJydfUHlBcmdfUGFyc2VUdXBsZSIgfCAkYXNfdHJfc2hgCi17ICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBQeUFyZ19QYXJz ZVR1cGxlIGluIC1scHl0aG9uJGFjX3B5dGhvbl92ZXJzaW9uIiA+JjUKLSRhc19lY2hvX24gImNo ZWNraW5nIGZvciBQeUFyZ19QYXJzZVR1cGxlIGluIC1scHl0aG9uJGFjX3B5dGhvbl92ZXJzaW9u Li4uICIgPiY2OyB9Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0xpYitzZXR9XCIiID0gc2V0 OyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgYWNfY2hlY2tf bGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWxweXRob24kYWNfcHl0aG9uX3ZlcnNpb24gICRM SUJTIgotY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5k IGNvbmZkZWZzLmguICAqLwotCi0vKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlw ZSB0byBhdm9pZCBhbiBlcnJvci4KLSAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNo IHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQwotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1l bnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwot ZXh0ZXJuICJDIgotI2VuZGlmCi1jaGFyIFB5QXJnX1BhcnNlVHVwbGUgKCk7Ci1pbnQKLW1haW4g KCkKLXsKLXJldHVybiBQeUFyZ19QYXJzZVR1cGxlICgpOwotICA7Ci0gIHJldHVybiAwOwotfQot X0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGV2YWwgIiRh c19hY19MaWI9eWVzIgotZWxzZQotICBldmFsICIkYXNfYWNfTGliPW5vIgotZmkKLXJtIC1mIGNv cmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4 ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCi1maQot ZXZhbCBhY19yZXM9XCQkYXNfYWNfTGliCi0JICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2Fz X2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKLSRhc19lY2hvICIkYWNfcmVz IiA+JjY7IH0KLWlmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfTGliIlwiID0geCJ5ZXMiOyB0aGVu IDoKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVf TElCcHl0aG9uJGFjX3B5dGhvbl92ZXJzaW9uIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi0g IExJQlM9Ii1scHl0aG9uJGFjX3B5dGhvbl92ZXJzaW9uICRMSUJTIgogCi1lbHNlCi0gIGFzX2Zu X2Vycm9yICQ/ICJVbmFibGUgdG8gZmluZCBhIHN1aXRhYmxlIHB5dGhvbiBkZXZlbG9wbWVudCBs aWJyYXJ5IiAiJExJTkVOTyIgNQotZmkKKyAgZmkKIAotQ1BQRkxBR1M9JGFjX3ByZXZpb3VzX2Nw cGZsYWdzCi1MRExGQUdTPSRhY19wcmV2aW91c19sZGZsYWdzCiAKIAotZmkKLSMgRXh0cmFjdCB0 aGUgZmlyc3Qgd29yZCBvZiAieGdldHRleHQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUg d2l0aCBhcmdzLgotc2V0IGR1bW15IHhnZXR0ZXh0OyBhY193b3JkPSQyCisgICMgY2hlY2tpbmcg Zm9yIG9jYW1sIHRvcGxldmVsCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4K KyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW9jYW1sIiwg c28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rv b2xfcHJlZml4fW9jYW1sOyBhY193b3JkPSQyCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5l bm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiAkYXNfZWNob19uICJjaGVj a2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9YR0VU VEVYVCtzZXR9IiA9IHNldDsgdGhlbiA6CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfT0NBTUwrc2V0 fSIgPSBzZXQ7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBj YXNlICRYR0VUVEVYVCBpbgotICBbXFwvXSogfCA/OltcXC9dKikKLSAgYWNfY3ZfcGF0aF9YR0VU VEVYVD0iJFhHRVRURVhUIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEg cGF0aC4KLSAgOzsKLSAgKikKLSAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRP UgorICBpZiB0ZXN0IC1uICIkT0NBTUwiOyB0aGVuCisgIGFjX2N2X3Byb2dfT0NBTUw9IiRPQ0FN TCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0k SUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCiBmb3IgYXNfZGlyIGluICRQQVRICiBkbwogICBJRlM9 JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCiAgICAgZm9yIGFj X2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCiAgIGlmIHsgdGVz dCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rp ci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSAgICBhY19jdl9wYXRoX1hHRVRURVhU PSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgIGFjX2N2X3Byb2dfT0NBTUw9IiR7 YWNfdG9vbF9wcmVmaXh9b2NhbWwiCiAgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0k TElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CiAgICAgYnJl YWsgMgogICBmaQpAQCAtNjUyMiw0NCArNDIyMCwzOSBAQCBkb25lCiAgIGRvbmUKIElGUz0kYXNf c2F2ZV9JRlMKIAotICB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9YR0VUVEVYVCIgJiYgYWNfY3ZfcGF0 aF9YR0VUVEVYVD0ibm8iCi0gIDs7Ci1lc2FjCiBmaQotWEdFVFRFWFQ9JGFjX2N2X3BhdGhfWEdF VFRFWFQKLWlmIHRlc3QgLW4gIiRYR0VUVEVYVCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRYR0VUVEVYVCIgPiY1Ci0kYXNfZWNobyAi JFhHRVRURVhUIiA+JjY7IH0KK2ZpCitPQ0FNTD0kYWNfY3ZfcHJvZ19PQ0FNTAoraWYgdGVzdCAt biAiJE9DQU1MIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IHJlc3VsdDogJE9DQU1MIiA+JjUKKyRhc19lY2hvICIkT0NBTUwiID4mNjsgfQogZWxzZQog ICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4m NQogJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKIAotaWYgdGVzdCB4IiR7WEdFVFRFWFR9IiA9 PSB4Im5vIgotdGhlbgotICAgIGFzX2ZuX2Vycm9yICQ/ICJVbmFibGUgdG8gZmluZCB4Z2V0dGV4 dCwgcGxlYXNlIGluc3RhbGwgeGdldHRleHQiICIkTElORU5PIiA1CiBmaQotIyBFeHRyYWN0IHRo ZSBmaXJzdCB3b3JkIG9mICJhczg2Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGgg YXJncy4KLXNldCBkdW1teSBhczg2OyBhY193b3JkPSQyCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJv Z19PQ0FNTCI7IHRoZW4KKyAgYWNfY3RfT0NBTUw9JE9DQU1MCisgICMgRXh0cmFjdCB0aGUgZmly c3Qgd29yZCBvZiAib2NhbWwiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdz Lgorc2V0IGR1bW15IG9jYW1sOyBhY193b3JkPSQyCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiAkYXNfZWNob19uICJj aGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9B Uzg2K3NldH0iID0gc2V0OyB0aGVuIDoKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9PQ0FN TCtzZXR9IiA9IHNldDsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNl Ci0gIGNhc2UgJEFTODYgaW4KLSAgW1xcL10qIHwgPzpbXFwvXSopCi0gIGFjX2N2X3BhdGhfQVM4 Nj0iJEFTODYiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgot ICA7OwotICAqKQotICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgIGlm IHRlc3QgLW4gIiRhY19jdF9PQ0FNTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9PQ0FNTD0i JGFjX2N0X09DQU1MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2Fz X3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKIGZvciBhc19kaXIgaW4gJFBBVEgK IGRvCiAgIElGUz0kYXNfc2F2ZV9JRlMKICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4K ICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8K ICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVz dF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotICAgIGFjX2N2X3Bh dGhfQVM4Nj0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICBhY19jdl9wcm9nX2Fj X2N0X09DQU1MPSJvY2FtbCIKICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5F Tk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKICAgICBicmVhayAy CiAgIGZpCkBAIC02NTY3LDQ0ICs0MjYwLDUzIEBAIGRvbmUKICAgZG9uZQogSUZTPSRhc19zYXZl X0lGUwogCi0gIHRlc3QgLXogIiRhY19jdl9wYXRoX0FTODYiICYmIGFjX2N2X3BhdGhfQVM4Nj0i bm8iCi0gIDs7Ci1lc2FjCiBmaQotQVM4Nj0kYWNfY3ZfcGF0aF9BUzg2Ci1pZiB0ZXN0IC1uICIk QVM4NiI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBy ZXN1bHQ6ICRBUzg2IiA+JjUKLSRhc19lY2hvICIkQVM4NiIgPiY2OyB9CitmaQorYWNfY3RfT0NB TUw9JGFjX2N2X3Byb2dfYWNfY3RfT0NBTUwKK2lmIHRlc3QgLW4gIiRhY19jdF9PQ0FNTCI7IHRo ZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRh Y19jdF9PQ0FNTCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X09DQU1MIiA+JjY7IH0KIGVsc2UKICAg eyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUK ICRhc19lY2hvICJubyIgPiY2OyB9CiBmaQogCi0KLWlmIHRlc3QgeCIke0FTODZ9IiA9PSB4Im5v IgotdGhlbgotICAgIGFzX2ZuX2Vycm9yICQ/ICJVbmFibGUgdG8gZmluZCBhczg2LCBwbGVhc2Ug aW5zdGFsbCBhczg2IiAiJExJTkVOTyIgNQorICBpZiB0ZXN0ICJ4JGFjX2N0X09DQU1MIiA9IHg7 IHRoZW4KKyAgICBPQ0FNTD0ibm8iCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6 JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBo b3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3Mg dG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJu ZWQ9eWVzIDs7Citlc2FjCisgICAgT0NBTUw9JGFjX2N0X09DQU1MCisgIGZpCitlbHNlCisgIE9D QU1MPSIkYWNfY3ZfcHJvZ19PQ0FNTCIKIGZpCi0jIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2Yg ImxkODYiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15 IGxkODY7IGFjX3dvcmQ9JDIKKworCisgICMgY2hlY2tpbmcgZm9yIG9jYW1sZGVwCisgIGlmIHRl c3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3Jk IG9mICIke2FjX3Rvb2xfcHJlZml4fW9jYW1sZGVwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBu YW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW9jYW1sZGVwOyBhY193 b3JkPSQyCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5n IGZvciAkYWNfd29yZCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4g IiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9MRDg2K3NldH0iID0gc2V0OyB0aGVuIDoK K2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19PQ0FNTERFUCtzZXR9IiA9IHNldDsgdGhlbiA6CiAgICRh c19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGNhc2UgJExEODYgaW4KLSAgW1xcL10q IHwgPzpbXFwvXSopCi0gIGFjX2N2X3BhdGhfTEQ4Nj0iJExEODYiICMgTGV0IHRoZSB1c2VyIG92 ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgotICA7OwotICAqKQotICBhc19zYXZlX0lGUz0k SUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgIGlmIHRlc3QgLW4gIiRPQ0FNTERFUCI7IHRoZW4K KyAgYWNfY3ZfcHJvZ19PQ0FNTERFUD0iJE9DQU1MREVQIiAjIExldCB0aGUgdXNlciBvdmVycmlk ZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IK IGZvciBhc19kaXIgaW4gJFBBVEgKIGRvCiAgIElGUz0kYXNfc2F2ZV9JRlMKICAgdGVzdCAteiAi JGFzX2RpciIgJiYgYXNfZGlyPS4KICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1 dGFibGVfZXh0ZW5zaW9uczsgZG8KICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFj X2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0Ijsg fTsgdGhlbgotICAgIGFjX2N2X3BhdGhfTEQ4Nj0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4 dCIKKyAgICBhY19jdl9wcm9nX09DQU1MREVQPSIke2FjX3Rvb2xfcHJlZml4fW9jYW1sZGVwIgog ICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIv JGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQogICAgIGJyZWFrIDIKICAgZmkKQEAgLTY2MTIsNDQg KzQzMTQsMzkgQEAgZG9uZQogICBkb25lCiBJRlM9JGFzX3NhdmVfSUZTCiAKLSAgdGVzdCAteiAi JGFjX2N2X3BhdGhfTEQ4NiIgJiYgYWNfY3ZfcGF0aF9MRDg2PSJubyIKLSAgOzsKLWVzYWMKIGZp Ci1MRDg2PSRhY19jdl9wYXRoX0xEODYKLWlmIHRlc3QgLW4gIiRMRDg2IjsgdGhlbgotICB7ICRh c19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJExEODYiID4mNQot JGFzX2VjaG8gIiRMRDg2IiA+JjY7IH0KK2ZpCitPQ0FNTERFUD0kYWNfY3ZfcHJvZ19PQ0FNTERF UAoraWYgdGVzdCAtbiAiJE9DQU1MREVQIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE9DQU1MREVQIiA+JjUKKyRhc19lY2hvICIkT0NB TUxERVAiID4mNjsgfQogZWxzZQogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJ TkVOT306IHJlc3VsdDogbm8iID4mNQogJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKIAotaWYg dGVzdCB4IiR7TEQ4Nn0iID09IHgibm8iCi10aGVuCi0gICAgYXNfZm5fZXJyb3IgJD8gIlVuYWJs ZSB0byBmaW5kIGxkODYsIHBsZWFzZSBpbnN0YWxsIGxkODYiICIkTElORU5PIiA1CiBmaQotIyBF eHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJiY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5h bWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IGJjYzsgYWNfd29yZD0kMgoraWYgdGVzdCAteiAiJGFj X2N2X3Byb2dfT0NBTUxERVAiOyB0aGVuCisgIGFjX2N0X09DQU1MREVQPSRPQ0FNTERFUAorICAj IEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm9jYW1sZGVwIiwgc28gaXQgY2FuIGJlIGEgcHJv Z3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBvY2FtbGRlcDsgYWNfd29yZD0kMgogeyAk YXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dv cmQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1p ZiB0ZXN0ICIke2FjX2N2X3BhdGhfQkNDK3NldH0iID0gc2V0OyB0aGVuIDoKK2lmIHRlc3QgIiR7 YWNfY3ZfcHJvZ19hY19jdF9PQ0FNTERFUCtzZXR9IiA9IHNldDsgdGhlbiA6CiAgICRhc19lY2hv X24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGNhc2UgJEJDQyBpbgotICBbXFwvXSogfCA/Oltc XC9dKikKLSAgYWNfY3ZfcGF0aF9CQ0M9IiRCQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRo ZSB0ZXN0IHdpdGggYSBwYXRoLgotICA7OwotICAqKQotICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9 JFBBVEhfU0VQQVJBVE9SCisgIGlmIHRlc3QgLW4gIiRhY19jdF9PQ0FNTERFUCI7IHRoZW4KKyAg YWNfY3ZfcHJvZ19hY19jdF9PQ0FNTERFUD0iJGFjX2N0X09DQU1MREVQIiAjIExldCB0aGUgdXNl ciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9T RVBBUkFUT1IKIGZvciBhc19kaXIgaW4gJFBBVEgKIGRvCiAgIElGUz0kYXNfc2F2ZV9JRlMKICAg dGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycg JGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRh Y193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4 ZWNfZXh0IjsgfTsgdGhlbgotICAgIGFjX2N2X3BhdGhfQkNDPSIkYXNfZGlyLyRhY193b3JkJGFj X2V4ZWNfZXh0IgorICAgIGFjX2N2X3Byb2dfYWNfY3RfT0NBTUxERVA9Im9jYW1sZGVwIgogICAg ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFj X3dvcmQkYWNfZXhlY19leHQiID4mNQogICAgIGJyZWFrIDIKICAgZmkKQEAgLTY2NTcsMjgzICs0 MzU0LDI0MSBAQCBkb25lCiAgIGRvbmUKIElGUz0kYXNfc2F2ZV9JRlMKIAotICB0ZXN0IC16ICIk YWNfY3ZfcGF0aF9CQ0MiICYmIGFjX2N2X3BhdGhfQkNDPSJubyIKLSAgOzsKLWVzYWMKIGZpCi1C Q0M9JGFjX2N2X3BhdGhfQkNDCi1pZiB0ZXN0IC1uICIkQkNDIjsgdGhlbgotICB7ICRhc19lY2hv ICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEJDQyIgPiY1Ci0kYXNfZWNo byAiJEJDQyIgPiY2OyB9CitmaQorYWNfY3RfT0NBTUxERVA9JGFjX2N2X3Byb2dfYWNfY3RfT0NB TUxERVAKK2lmIHRlc3QgLW4gIiRhY19jdF9PQ0FNTERFUCI7IHRoZW4KKyAgeyAkYXNfZWNobyAi JGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9PQ0FNTERFUCIgPiY1 CiskYXNfZWNobyAiJGFjX2N0X09DQU1MREVQIiA+JjY7IH0KIGVsc2UKICAgeyAkYXNfZWNobyAi JGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKICRhc19lY2hvICJu byIgPiY2OyB9CiBmaQogCi0KLWlmIHRlc3QgeCIke0JDQ30iID09IHgibm8iCi10aGVuCi0gICAg YXNfZm5fZXJyb3IgJD8gIlVuYWJsZSB0byBmaW5kIGJjYywgcGxlYXNlIGluc3RhbGwgYmNjIiAi JExJTkVOTyIgNQorICBpZiB0ZXN0ICJ4JGFjX2N0X09DQU1MREVQIiA9IHg7IHRoZW4KKyAgICBP Q0FNTERFUD0ibm8iCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xf d2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99 OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBs ZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90 IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7 Citlc2FjCisgICAgT0NBTUxERVA9JGFjX2N0X09DQU1MREVQCisgIGZpCitlbHNlCisgIE9DQU1M REVQPSIkYWNfY3ZfcHJvZ19PQ0FNTERFUCIKIGZpCi0jIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQg b2YgImlhc2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1 bW15IGlhc2w7IGFjX3dvcmQ9JDIKKworCisgICMgY2hlY2tpbmcgZm9yIG9jYW1sbWt0b3AKKyAg aWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0 IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9b2NhbWxta3RvcCIsIHNvIGl0IGNhbiBiZSBhIHBy b2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1vY2FtbG1r dG9wOyBhY193b3JkPSQyCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFj X3dvcmQuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9JQVNMK3NldH0iID0gc2V0 OyB0aGVuIDoKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19PQ0FNTE1LVE9QK3NldH0iID0gc2V0OyB0 aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgY2FzZSAkSUFTTCBp bgotICBbXFwvXSogfCA/OltcXC9dKikKLSAgYWNfY3ZfcGF0aF9JQVNMPSIkSUFTTCIgIyBMZXQg dGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCi0gIDs7Ci0gICopCi0gIGFz X3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgaWYgdGVzdCAtbiAiJE9DQU1M TUtUT1AiOyB0aGVuCisgIGFjX2N2X3Byb2dfT0NBTUxNS1RPUD0iJE9DQU1MTUtUT1AiICMgTGV0 IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZT PSRQQVRIX1NFUEFSQVRPUgogZm9yIGFzX2RpciBpbiAkUEFUSAogZG8KICAgSUZTPSRhc19zYXZl X0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgogICAgIGZvciBhY19leGVjX2V4 dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwogICBpZiB7IHRlc3QgLWYgIiRh c19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dv cmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0gICAgYWNfY3ZfcGF0aF9JQVNMPSIkYXNfZGlyLyRh Y193b3JkJGFjX2V4ZWNfZXh0IgorICAgIGFjX2N2X3Byb2dfT0NBTUxNS1RPUD0iJHthY190b29s X3ByZWZpeH1vY2FtbG1rdG9wIgogICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJ TkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQogICAgIGJyZWFr IDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi0gIHRlc3QgLXogIiRh Y19jdl9wYXRoX0lBU0wiICYmIGFjX2N2X3BhdGhfSUFTTD0ibm8iCi0gIDs7Ci1lc2FjCi1maQot SUFTTD0kYWNfY3ZfcGF0aF9JQVNMCi1pZiB0ZXN0IC1uICIkSUFTTCI7IHRoZW4KLSAgeyAkYXNf ZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRJQVNMIiA+JjUKLSRh c19lY2hvICIkSUFTTCIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xp bmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkK LQotCi1pZiB0ZXN0IHgiJHtJQVNMfSIgPT0geCJubyIKLXRoZW4KLSAgICBhc19mbl9lcnJvciAk PyAiVW5hYmxlIHRvIGZpbmQgaWFzbCwgcGxlYXNlIGluc3RhbGwgaWFzbCIgIiRMSU5FTk8iIDUK LWZpCi0KLWFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJ1dWlkL3V1aWQu aCIgImFjX2N2X2hlYWRlcl91dWlkX3V1aWRfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgotaWYg dGVzdCAieCRhY19jdl9oZWFkZXJfdXVpZF91dWlkX2giID0geCIieWVzOyB0aGVuIDoKLQotICAg IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHV1 aWRfY2xlYXIgaW4gLWx1dWlkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciB1dWlkX2Ns ZWFyIGluIC1sdXVpZC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9saWJfdXVpZF91dWlk X2NsZWFyK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYK LWVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWx1dWlkICAkTElC UyIKLWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBj b25mZGVmcy5oLiAgKi8KLQotLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUg dG8gYXZvaWQgYW4gZXJyb3IuCi0gICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0 aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50 IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4 dGVybiAiQyIKLSNlbmRpZgotY2hhciB1dWlkX2NsZWFyICgpOwotaW50Ci1tYWluICgpCi17Ci1y ZXR1cm4gdXVpZF9jbGVhciAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNf Zm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9saWJfdXVpZF91dWlkX2Ns ZWFyPXllcwotZWxzZQotICBhY19jdl9saWJfdXVpZF91dWlkX2NsZWFyPW5vCi1maQotcm0gLWYg Y29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNf ZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKLWZp Ci17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2 X2xpYl91dWlkX3V1aWRfY2xlYXIiID4mNQotJGFzX2VjaG8gIiRhY19jdl9saWJfdXVpZF91dWlk X2NsZWFyIiA+JjY7IH0KLWlmIHRlc3QgIngkYWNfY3ZfbGliX3V1aWRfdXVpZF9jbGVhciIgPSB4 IiJ5ZXM7IHRoZW4gOgotICBsaWJ1dWlkPSJ5IgotZmkKLQorICBmaQorZG9uZQorICBkb25lCitJ RlM9JGFzX3NhdmVfSUZTCiAKIGZpCi0KLQotYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAi JExJTkVOTyIgInV1aWQuaCIgImFjX2N2X2hlYWRlcl91dWlkX2giICIkYWNfaW5jbHVkZXNfZGVm YXVsdCIKLWlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3V1aWRfaCIgPSB4IiJ5ZXM7IHRoZW4gOgot ICBsaWJ1dWlkPSJ5IgogZmkKLQotCi1pZiB0ZXN0ICIkbGlidXVpZCIgIT0gInkiOyB0aGVuIDoK LQotICAgIGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgZmluZCBhIHZhbGlkIHV1aWQgbGlicmFyeSIg IiRMSU5FTk8iIDUKLQorT0NBTUxNS1RPUD0kYWNfY3ZfcHJvZ19PQ0FNTE1LVE9QCitpZiB0ZXN0 IC1uICIkT0NBTUxNS1RPUCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiByZXN1bHQ6ICRPQ0FNTE1LVE9QIiA+JjUKKyRhc19lY2hvICIkT0NBTUxNS1RP UCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQogZmkKIAogCi1hY19mbl9j X2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiY3Vyc2VzLmgiICJhY19jdl9oZWFkZXJf Y3Vyc2VzX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKLWlmIHRlc3QgIngkYWNfY3ZfaGVhZGVy X2N1cnNlc19oIiA9IHgiInllczsgdGhlbiA6Ci0KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBjbGVhciBpbiAtbGN1cnNlcyIgPiY1Ci0k YXNfZWNob19uICJjaGVja2luZyBmb3IgY2xlYXIgaW4gLWxjdXJzZXMuLi4gIiA+JjY7IH0KLWlm IHRlc3QgIiR7YWNfY3ZfbGliX2N1cnNlc19jbGVhcitzZXR9IiA9IHNldDsgdGhlbiA6CitmaQor aWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfT0NBTUxNS1RPUCI7IHRoZW4KKyAgYWNfY3RfT0NBTUxN S1RPUD0kT0NBTUxNS1RPUAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm9jYW1sbWt0 b3AiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IG9j YW1sbWt0b3A7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZv ciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X09DQU1M TUtUT1Arc2V0fSIgPSBzZXQ7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgog ZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbGN1cnNlcyAgJExJ QlMiCi1jYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQg Y29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBl IHRvIGF2b2lkIGFuIGVycm9yLgotICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2gg dGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVu dCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1l eHRlcm4gIkMiCi0jZW5kaWYKLWNoYXIgY2xlYXIgKCk7Ci1pbnQKLW1haW4gKCkKLXsKLXJldHVy biBjbGVhciAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlf bGluayAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9saWJfY3Vyc2VzX2NsZWFyPXllcworICBp ZiB0ZXN0IC1uICIkYWNfY3RfT0NBTUxNS1RPUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9P Q0FNTE1LVE9QPSIkYWNfY3RfT0NBTUxNS1RPUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhl IHRlc3QuCiBlbHNlCi0gIGFjX2N2X2xpYl9jdXJzZXNfY2xlYXI9bm8KK2FzX3NhdmVfSUZTPSRJ RlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0k YXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNf ZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0 IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGly LyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfT0NB TUxNS1RPUD0ib2NhbWxta3RvcCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRM SU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVh ayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKwogZmkKLXJtIC1mIGNv cmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4 ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCiBmaQot eyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9s aWJfY3Vyc2VzX2NsZWFyIiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfbGliX2N1cnNlc19jbGVhciIg PiY2OyB9Ci1pZiB0ZXN0ICJ4JGFjX2N2X2xpYl9jdXJzZXNfY2xlYXIiID0geCIieWVzOyB0aGVu IDoKLSAgY3Vyc2VzPSJ5IgorYWNfY3RfT0NBTUxNS1RPUD0kYWNfY3ZfcHJvZ19hY19jdF9PQ0FN TE1LVE9QCitpZiB0ZXN0IC1uICIkYWNfY3RfT0NBTUxNS1RPUCI7IHRoZW4KKyAgeyAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9PQ0FNTE1LVE9Q IiA+JjUKKyRhc19lY2hvICIkYWNfY3RfT0NBTUxNS1RPUCIgPiY2OyB9CiBlbHNlCi0gIGN1cnNl cz0ibiIKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6 IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiBmaQogCi0KKyAgaWYgdGVzdCAieCRhY19j dF9PQ0FNTE1LVE9QIiA9IHg7IHRoZW4KKyAgICBPQ0FNTE1LVE9QPSJubyIKKyAgZWxzZQorICAg IGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRv b2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21l OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBs ZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBPQ0FNTE1LVE9QPSRh Y19jdF9PQ0FNTE1LVE9QCisgIGZpCiBlbHNlCi0gIGN1cnNlcz0ibiIKKyAgT0NBTUxNS1RPUD0i JGFjX2N2X3Byb2dfT0NBTUxNS1RPUCIKIGZpCiAKIAotYWNfZm5fY19jaGVja19oZWFkZXJfbW9u Z3JlbCAiJExJTkVOTyIgIm5jdXJzZXMuaCIgImFjX2N2X2hlYWRlcl9uY3Vyc2VzX2giICIkYWNf aW5jbHVkZXNfZGVmYXVsdCIKLWlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX25jdXJzZXNfaCIgPSB4 IiJ5ZXM7IHRoZW4gOgotCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5F Tk99OiBjaGVja2luZyBmb3IgY2xlYXIgaW4gLWxuY3Vyc2VzIiA+JjUKLSRhc19lY2hvX24gImNo ZWNraW5nIGZvciBjbGVhciBpbiAtbG5jdXJzZXMuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNf Y3ZfbGliX25jdXJzZXNfY2xlYXIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAjIGNoZWNraW5nIGZv ciBvY2FtbG1rbGliCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBF eHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW9jYW1sbWtsaWIiLCBz byBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9v bF9wcmVmaXh9b2NhbWxta2xpYjsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAi Y2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2df T0NBTUxNS0xJQitzZXR9IiA9IHNldDsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIg PiY2CiBlbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1sbmN1cnNl cyAgJExJQlMiCi1jYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0v KiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJv dG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgotICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQg bWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBh cmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotI2lmZGVmIF9fY3BsdXNw bHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLWNoYXIgY2xlYXIgKCk7Ci1pbnQKLW1haW4gKCkKLXsK LXJldHVybiBjbGVhciAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5f Y190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9saWJfbmN1cnNlc19jbGVhcj15 ZXMKKyAgaWYgdGVzdCAtbiAiJE9DQU1MTUtMSUIiOyB0aGVuCisgIGFjX2N2X3Byb2dfT0NBTUxN S0xJQj0iJE9DQU1MTUtMSUIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgogZWxz ZQotICBhY19jdl9saWJfbmN1cnNlc19jbGVhcj1ubworYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQ QVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lG UworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBp biAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19k aXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQk YWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19PQ0FNTE1LTElCPSIke2FjX3Rv b2xfcHJlZml4fW9jYW1sbWtsaWIiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0k TElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJl YWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKIGZpCi1ybSAtZiBj b3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICBjb25mdGVzdCRhY19l eGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwogZmkK LXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zf bGliX25jdXJzZXNfY2xlYXIiID4mNQotJGFzX2VjaG8gIiRhY19jdl9saWJfbmN1cnNlc19jbGVh ciIgPiY2OyB9Ci1pZiB0ZXN0ICJ4JGFjX2N2X2xpYl9uY3Vyc2VzX2NsZWFyIiA9IHgiInllczsg dGhlbiA6Ci0gIG5jdXJzZXM9InkiCitPQ0FNTE1LTElCPSRhY19jdl9wcm9nX09DQU1MTUtMSUIK K2lmIHRlc3QgLW4gIiRPQ0FNTE1LTElCIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE9DQU1MTUtMSUIiID4mNQorJGFzX2VjaG8gIiRP Q0FNTE1LTElCIiA+JjY7IH0KIGVsc2UKLSAgbmN1cnNlcz0ibiIKKyAgeyAkYXNfZWNobyAiJGFz X21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIg PiY2OyB9CiBmaQogCiAKLWVsc2UKLSAgbmN1cnNlcz0ibiIKIGZpCi0KLQotaWYgdGVzdCAiJGN1 cnNlcyIgPSAibiIgJiYgdGVzdCAiJG5jdXJzZXMiID0gIm4iOyB0aGVuIDoKLQotICAgIGFzX2Zu X2Vycm9yICQ/ICJVbmFibGUgdG8gZmluZCBhIHN1aXRhYmxlIGN1cnNlcyBsaWJyYXJ5IiAiJExJ TkVOTyIgNQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfT0NBTUxNS0xJQiI7IHRoZW4KKyAgYWNf Y3RfT0NBTUxNS0xJQj0kT0NBTUxNS0xJQgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2Yg Im9jYW1sbWtsaWIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0 IGR1bW15IG9jYW1sbWtsaWI7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xp bmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNo ZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2Fj X2N0X09DQU1MTUtMSUIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVk KSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfT0NBTUxNS0xJQiI7IHRoZW4KKyAg YWNfY3ZfcHJvZ19hY19jdF9PQ0FNTE1LTElCPSIkYWNfY3RfT0NBTUxNS0xJQiIgIyBMZXQgdGhl IHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBB VEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZT CisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGlu ICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rp ci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRh Y19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X09DQU1MTUtMSUI9Im9j YW1sbWtsaWIiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91 bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQor ZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCiAKIGZpCi0jIFByZWZlciBuY3Vyc2VzIG92 ZXIgY3Vyc2VzIGlmIGJvdGggYXJlIHByZXNlbnQKLWlmIHRlc3QgIiRuY3Vyc2VzIiA9ICJ5Ijsg dGhlbiA6Ci0KLSAgICBDVVJTRVNfTElCUz0iLWxuY3Vyc2VzIgotCi0kYXNfZWNobyAiI2RlZmlu ZSBJTkNMVURFX0NVUlNFU19IIDxuY3Vyc2VzLmg+IiA+PmNvbmZkZWZzLmgKLQotCitmaQorYWNf Y3RfT0NBTUxNS0xJQj0kYWNfY3ZfcHJvZ19hY19jdF9PQ0FNTE1LTElCCitpZiB0ZXN0IC1uICIk YWNfY3RfT0NBTUxNS0xJQiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9PQ0FNTE1LTElCIiA+JjUKKyRhc19lY2hvICIkYWNf Y3RfT0NBTUxNS0xJQiIgPiY2OyB9CiBlbHNlCi0KLSAgICBDVVJTRVNfTElCUz0iLWxjdXJzZXMi Ci0KLSRhc19lY2hvICIjZGVmaW5lIElOQ0xVREVfQ1VSU0VTX0ggPGN1cnNlcy5oPiIgPj5jb25m ZGVmcy5oCi0KLQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJl c3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKKyAgaWYgdGVzdCAieCRh Y19jdF9PQ0FNTE1LTElCIiA9IHg7IHRoZW4KKyAgICBPQ0FNTE1LTElCPSJubyIKKyAgZWxzZQor ICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRh c19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3Nz IHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFz X21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRy aXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBPQ0FNTE1LTElC PSRhY19jdF9PQ0FNTE1LTElCCisgIGZpCitlbHNlCisgIE9DQU1MTUtMSUI9IiRhY19jdl9wcm9n X09DQU1MTUtMSUIiCitmaQogCiAKLQotCi0KLQotCi1pZiB0ZXN0ICJ4JGFjX2N2X2Vudl9QS0df Q09ORklHX3NldCIgIT0gInhzZXQiOyB0aGVuCi0JaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4 IjsgdGhlbgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9 cGtnLWNvbmZpZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQg ZHVtbXkgJHthY190b29sX3ByZWZpeH1wa2ctY29uZmlnOyBhY193b3JkPSQyCisgICMgY2hlY2tp bmcgZm9yIG9jYW1sZG9jCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAg IyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW9jYW1sZG9jIiwg c28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rv b2xfcHJlZml4fW9jYW1sZG9jOyBhY193b3JkPSQyCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiAkYXNfZWNob19uICJj aGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9Q S0dfQ09ORklHK3NldH0iID0gc2V0OyB0aGVuIDoKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19PQ0FN TERPQytzZXR9IiA9IHNldDsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBl bHNlCi0gIGNhc2UgJFBLR19DT05GSUcgaW4KLSAgW1xcL10qIHwgPzpbXFwvXSopCi0gIGFjX2N2 X3BhdGhfUEtHX0NPTkZJRz0iJFBLR19DT05GSUciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRo ZSB0ZXN0IHdpdGggYSBwYXRoLgotICA7OwotICAqKQotICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9 JFBBVEhfU0VQQVJBVE9SCisgIGlmIHRlc3QgLW4gIiRPQ0FNTERPQyI7IHRoZW4KKyAgYWNfY3Zf cHJvZ19PQ0FNTERPQz0iJE9DQU1MRE9DIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVz dC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKIGZvciBhc19k aXIgaW4gJFBBVEgKIGRvCiAgIElGUz0kYXNfc2F2ZV9JRlMKICAgdGVzdCAteiAiJGFzX2RpciIg JiYgYXNfZGlyPS4KICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0 ZW5zaW9uczsgZG8KICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0 IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgot ICAgIGFjX2N2X3BhdGhfUEtHX0NPTkZJRz0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIK KyAgICBhY19jdl9wcm9nX09DQU1MRE9DPSIke2FjX3Rvb2xfcHJlZml4fW9jYW1sZG9jIgogICAg ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFj X3dvcmQkYWNfZXhlY19leHQiID4mNQogICAgIGJyZWFrIDIKICAgZmkKQEAgLTY5NDEsMTMgKzQ1 OTYsMTIgQEAgZG9uZQogICBkb25lCiBJRlM9JGFzX3NhdmVfSUZTCiAKLSAgOzsKLWVzYWMKIGZp Ci1QS0dfQ09ORklHPSRhY19jdl9wYXRoX1BLR19DT05GSUcKLWlmIHRlc3QgLW4gIiRQS0dfQ09O RklHIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJl c3VsdDogJFBLR19DT05GSUciID4mNQotJGFzX2VjaG8gIiRQS0dfQ09ORklHIiA+JjY7IH0KK2Zp CitPQ0FNTERPQz0kYWNfY3ZfcHJvZ19PQ0FNTERPQworaWYgdGVzdCAtbiAiJE9DQU1MRE9DIjsg dGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDog JE9DQU1MRE9DIiA+JjUKKyRhc19lY2hvICIkT0NBTUxET0MiID4mNjsgfQogZWxzZQogICB7ICRh c19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQogJGFz X2VjaG8gIm5vIiA+JjY7IH0KQEAgLTY5NTUsMjggKzQ2MDksMjYgQEAgZmkKIAogCiBmaQotaWYg dGVzdCAteiAiJGFjX2N2X3BhdGhfUEtHX0NPTkZJRyI7IHRoZW4KLSAgYWNfcHRfUEtHX0NPTkZJ Rz0kUEtHX0NPTkZJRwotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInBrZy1jb25maWci LCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IHBrZy1j b25maWc7IGFjX3dvcmQ9JDIKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX09DQU1MRE9DIjsgdGhl bgorICBhY19jdF9PQ0FNTERPQz0kT0NBTUxET0MKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3Jk IG9mICJvY2FtbGRvYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitz ZXQgZHVtbXkgb2NhbWxkb2M7IGFjX3dvcmQ9JDIKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xp bmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKICRhc19lY2hvX24gImNo ZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wYXRoX2Fj X3B0X1BLR19DT05GSUcrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgdGVzdCAiJHthY19jdl9wcm9n X2FjX2N0X09DQU1MRE9DK3NldH0iID0gc2V0OyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hl ZCkgIiA+JjYKIGVsc2UKLSAgY2FzZSAkYWNfcHRfUEtHX0NPTkZJRyBpbgotICBbXFwvXSogfCA/ OltcXC9dKikKLSAgYWNfY3ZfcGF0aF9hY19wdF9QS0dfQ09ORklHPSIkYWNfcHRfUEtHX0NPTkZJ RyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCi0gIDs7Ci0g ICopCi0gIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgaWYgdGVzdCAt biAiJGFjX2N0X09DQU1MRE9DIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X09DQU1MRE9DPSIk YWNfY3RfT0NBTUxET0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQor YXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgogZm9yIGFzX2RpciBpbiAkUEFU SAogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9 LgogICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBk bwogICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190 ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0gICAgYWNfY3Zf cGF0aF9hY19wdF9QS0dfQ09ORklHPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAg IGFjX2N2X3Byb2dfYWNfY3RfT0NBTUxET0M9Im9jYW1sZG9jIgogICAgICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19l eHQiID4mNQogICAgIGJyZWFrIDIKICAgZmkKQEAgLTY5ODQsMjAgKzQ2MzYsMTkgQEAgZG9uZQog ICBkb25lCiBJRlM9JGFzX3NhdmVfSUZTCiAKLSAgOzsKLWVzYWMKIGZpCi1hY19wdF9QS0dfQ09O RklHPSRhY19jdl9wYXRoX2FjX3B0X1BLR19DT05GSUcKLWlmIHRlc3QgLW4gIiRhY19wdF9QS0df Q09ORklHIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IHJlc3VsdDogJGFjX3B0X1BLR19DT05GSUciID4mNQotJGFzX2VjaG8gIiRhY19wdF9QS0dfQ09O RklHIiA+JjY7IH0KK2ZpCithY19jdF9PQ0FNTERPQz0kYWNfY3ZfcHJvZ19hY19jdF9PQ0FNTERP QworaWYgdGVzdCAtbiAiJGFjX2N0X09DQU1MRE9DIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X09DQU1MRE9DIiA+JjUKKyRh c19lY2hvICIkYWNfY3RfT0NBTUxET0MiID4mNjsgfQogZWxzZQogICB7ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQogJGFzX2VjaG8gIm5vIiA+ JjY7IH0KIGZpCiAKLSAgaWYgdGVzdCAieCRhY19wdF9QS0dfQ09ORklHIiA9IHg7IHRoZW4KLSAg ICBQS0dfQ09ORklHPSIiCisgIGlmIHRlc3QgIngkYWNfY3RfT0NBTUxET0MiID0geDsgdGhlbgor ICAgIE9DQU1MRE9DPSJubyIKICAgZWxzZQogICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNf dG9vbF93YXJuZWQgaW4KIHllczopCkBAIC03MDA1LDYyNCArNDY1Niw3MTggQEAgeWVzOikKICRh c19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3 aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KIGFjX3Rvb2xfd2FybmVkPXllcyA7OwogZXNhYwotICAg IFBLR19DT05GSUc9JGFjX3B0X1BLR19DT05GSUcKKyAgICBPQ0FNTERPQz0kYWNfY3RfT0NBTUxE T0MKICAgZmkKIGVsc2UKLSAgUEtHX0NPTkZJRz0iJGFjX2N2X3BhdGhfUEtHX0NPTkZJRyIKLWZp Ci0KLWZpCi1pZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KLQlfcGtnX21pbl92ZXJzaW9u PTAuOS4wCi0JeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2lu ZyBwa2ctY29uZmlnIGlzIGF0IGxlYXN0IHZlcnNpb24gJF9wa2dfbWluX3ZlcnNpb24iID4mNQot JGFzX2VjaG9fbiAiY2hlY2tpbmcgcGtnLWNvbmZpZyBpcyBhdCBsZWFzdCB2ZXJzaW9uICRfcGtn X21pbl92ZXJzaW9uLi4uICIgPiY2OyB9Ci0JaWYgJFBLR19DT05GSUcgLS1hdGxlYXN0LXBrZ2Nv bmZpZy12ZXJzaW9uICRfcGtnX21pbl92ZXJzaW9uOyB0aGVuCi0JCXsgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQotJGFzX2VjaG8gInllcyIg PiY2OyB9Ci0JZWxzZQotCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLQkJUEtHX0NPTkZJRz0iIgot CWZpCi1maQotCi1wa2dfZmFpbGVkPW5vCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8t JExJTkVOT306IGNoZWNraW5nIGZvciBnbGliIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZv ciBnbGliLi4uICIgPiY2OyB9Ci0KLWlmIHRlc3QgLW4gIiRnbGliX0NGTEFHUyI7IHRoZW4KLSAg ICBwa2dfY3ZfZ2xpYl9DRkxBR1M9IiRnbGliX0NGTEFHUyIKLSBlbGlmIHRlc3QgLW4gIiRQS0df Q09ORklHIjsgdGhlbgotICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCi0gICAgeyB7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4 aXN0cyAtLXByaW50LWVycm9ycyBcImdsaWItMi4wXCIiOyB9ID4mNQotICAoJFBLR19DT05GSUcg LS1leGlzdHMgLS1wcmludC1lcnJvcnMgImdsaWItMi4wIikgMj4mNQotICBhY19zdGF0dXM9JD8K LSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1 cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KLSAgcGtnX2N2X2dsaWJfQ0ZM QUdTPWAkUEtHX0NPTkZJRyAtLWNmbGFncyAiZ2xpYi0yLjAiIDI+L2Rldi9udWxsYAotZWxzZQot ICBwa2dfZmFpbGVkPXllcwotZmkKLSBlbHNlCi0gICAgcGtnX2ZhaWxlZD11bnRyaWVkCi1maQot aWYgdGVzdCAtbiAiJGdsaWJfTElCUyI7IHRoZW4KLSAgICBwa2dfY3ZfZ2xpYl9MSUJTPSIkZ2xp Yl9MSUJTIgotIGVsaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCi0gICAgaWYgdGVzdCAt biAiJFBLR19DT05GSUciICYmIFwKLSAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiZ2xpYi0y LjBcIiI7IH0gPiY1Ci0gICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiZ2xp Yi0yLjAiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGlu ZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0g MDsgfTsgdGhlbgotICBwa2dfY3ZfZ2xpYl9MSUJTPWAkUEtHX0NPTkZJRyAtLWxpYnMgImdsaWIt Mi4wIiAyPi9kZXYvbnVsbGAKLWVsc2UKLSAgcGtnX2ZhaWxlZD15ZXMKLWZpCi0gZWxzZQotICAg IHBrZ19mYWlsZWQ9dW50cmllZAotZmkKLQotCi0KLWlmIHRlc3QgJHBrZ19mYWlsZWQgPSB5ZXM7 IHRoZW4KLSAgIAl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3Vs dDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLQotaWYgJFBLR19DT05GSUcgLS1hdGxl YXN0LXBrZ2NvbmZpZy12ZXJzaW9uIDAuMjA7IHRoZW4KLSAgICAgICAgX3BrZ19zaG9ydF9lcnJv cnNfc3VwcG9ydGVkPXllcwotZWxzZQotICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0 ZWQ9bm8KKyAgT0NBTUxET0M9IiRhY19jdl9wcm9nX09DQU1MRE9DIgogZmkKLSAgICAgICAgaWYg dGVzdCAkX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkID0geWVzOyB0aGVuCi0JICAgICAgICBn bGliX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tc2hvcnQtZXJyb3JzIC0tcHJpbnQtZXJyb3Jz ICJnbGliLTIuMCIgMj4mMWAKLSAgICAgICAgZWxzZQotCSAgICAgICAgZ2xpYl9QS0dfRVJST1JT PWAkUEtHX0NPTkZJRyAtLXByaW50LWVycm9ycyAiZ2xpYi0yLjAiIDI+JjFgCi0gICAgICAgIGZp Ci0JIyBQdXQgdGhlIG5hc3R5IGVycm9yIG1lc3NhZ2UgaW4gY29uZmlnLmxvZyB3aGVyZSBpdCBi ZWxvbmdzCi0JZWNobyAiJGdsaWJfUEtHX0VSUk9SUyIgPiY1Ci0KLQlhc19mbl9lcnJvciAkPyAi UGFja2FnZSByZXF1aXJlbWVudHMgKGdsaWItMi4wKSB3ZXJlIG5vdCBtZXQ6Ci0KLSRnbGliX1BL R19FUlJPUlMKLQotQ29uc2lkZXIgYWRqdXN0aW5nIHRoZSBQS0dfQ09ORklHX1BBVEggZW52aXJv bm1lbnQgdmFyaWFibGUgaWYgeW91Ci1pbnN0YWxsZWQgc29mdHdhcmUgaW4gYSBub24tc3RhbmRh cmQgcHJlZml4LgotCi1BbHRlcm5hdGl2ZWx5LCB5b3UgbWF5IHNldCB0aGUgZW52aXJvbm1lbnQg dmFyaWFibGVzIGdsaWJfQ0ZMQUdTCi1hbmQgZ2xpYl9MSUJTIHRvIGF2b2lkIHRoZSBuZWVkIHRv IGNhbGwgcGtnLWNvbmZpZy4KLVNlZSB0aGUgcGtnLWNvbmZpZyBtYW4gcGFnZSBmb3IgbW9yZSBk ZXRhaWxzLiIgIiRMSU5FTk8iIDUKLWVsaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHVudHJpZWQ7IHRo ZW4KLSAgICAgCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0 OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotCXsgeyAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQotJGFzX2VjaG8g IiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQotYXNfZm5fZXJyb3IgJD8gIlRo ZSBwa2ctY29uZmlnIHNjcmlwdCBjb3VsZCBub3QgYmUgZm91bmQgb3IgaXMgdG9vIG9sZC4gIE1h a2Ugc3VyZSBpdAotaXMgaW4geW91ciBQQVRIIG9yIHNldCB0aGUgUEtHX0NPTkZJRyBlbnZpcm9u bWVudCB2YXJpYWJsZSB0byB0aGUgZnVsbAotcGF0aCB0byBwa2ctY29uZmlnLgogCi1BbHRlcm5h dGl2ZWx5LCB5b3UgbWF5IHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGdsaWJfQ0ZMQUdT Ci1hbmQgZ2xpYl9MSUJTIHRvIGF2b2lkIHRoZSBuZWVkIHRvIGNhbGwgcGtnLWNvbmZpZy4KLVNl ZSB0aGUgcGtnLWNvbmZpZyBtYW4gcGFnZSBmb3IgbW9yZSBkZXRhaWxzLgogCi1UbyBnZXQgcGtn LWNvbmZpZywgc2VlIDxodHRwOi8vcGtnLWNvbmZpZy5mcmVlZGVza3RvcC5vcmcvPi4KLVNlZSBc YGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1IDsgfQorICAjIGNoZWNr aW5nIGZvciBvY2FtbGJ1aWxkCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4K KyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW9jYW1sYnVp bGQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7 YWNfdG9vbF9wcmVmaXh9b2NhbWxidWlsZDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2Vj aG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2 X3Byb2dfT0NBTUxCVUlMRCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNo ZWQpICIgPiY2CiBlbHNlCi0JZ2xpYl9DRkxBR1M9JHBrZ19jdl9nbGliX0NGTEFHUwotCWdsaWJf TElCUz0kcGtnX2N2X2dsaWJfTElCUwotICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5ZXMiID4mNjsgfQot Ci1maQotCi0jIENoZWNrIGxpYnJhcnkgcGF0aAotaWYgdGVzdCAiXCR7ZXhlY19wcmVmaXh9L2xp YiIgPSAiJGxpYmRpciI7IHRoZW4gOgotICBpZiB0ZXN0ICIkZXhlY19wcmVmaXgiID0gIk5PTkUi ICYmIHRlc3QgIiRwcmVmaXgiICE9ICJOT05FIjsgdGhlbiA6Ci0gIGV4ZWNfcHJlZml4PSRwcmVm aXgKLWZpCi0gICAgaWYgdGVzdCAiJGV4ZWNfcHJlZml4IiA9ICJOT05FIjsgdGhlbiA6Ci0gIGV4 ZWNfcHJlZml4PSRhY19kZWZhdWx0X3ByZWZpeAotZmkKLSAgICBpZiB0ZXN0IC1kICIke2V4ZWNf cHJlZml4fS9saWI2NCI7IHRoZW4gOgotCi0gICAgICAgIExJQl9QQVRIPSJsaWI2NCIKLQorICBp ZiB0ZXN0IC1uICIkT0NBTUxCVUlMRCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19PQ0FNTEJVSUxEPSIk T0NBTUxCVUlMRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCiBlbHNlCi0KLSAg ICAgICAgTElCX1BBVEg9ImxpYiIKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFU T1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAt eiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4 ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3Jk JGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0 IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfT0NBTUxCVUlMRD0iJHthY190b29sX3ByZWZpeH1v Y2FtbGJ1aWxkIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZv dW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkK K2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUwogCiBmaQotCi1lbHNlCi0KLSAgICBMSUJf UEFUSD0iJHtsaWJkaXI6YGV4cHIgbGVuZ3RoICIkZXhlY19wcmVmaXgiICsgMWB9IgotCiBmaQot Ci0KLSMgQ2hlY2tzIGZvciBsaWJyYXJpZXMuCi1hY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVs ICIkTElORU5PIiAiYnpsaWIuaCIgImFjX2N2X2hlYWRlcl9iemxpYl9oIiAiJGFjX2luY2x1ZGVz X2RlZmF1bHQiCi1pZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9iemxpYl9oIiA9IHgiInllczsgdGhl biA6Ci0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcg Zm9yIEJaMl9iekRlY29tcHJlc3NJbml0IGluIC1sYnoyIiA+JjUKLSRhc19lY2hvX24gImNoZWNr aW5nIGZvciBCWjJfYnpEZWNvbXByZXNzSW5pdCBpbiAtbGJ6Mi4uLiAiID4mNjsgfQotaWYgdGVz dCAiJHthY19jdl9saWJfYnoyX0JaMl9iekRlY29tcHJlc3NJbml0K3NldH0iID0gc2V0OyB0aGVu IDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgYWNfY2hlY2tfbGliX3Nh dmVfTElCUz0kTElCUwotTElCUz0iLWxiejIgICRMSUJTIgotY2F0IGNvbmZkZWZzLmggLSA8PF9B Q0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0vKiBPdmVy cmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KLSAgIFVz ZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQwot ICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFw cGx5LiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi1jaGFyIEJa Ml9iekRlY29tcHJlc3NJbml0ICgpOwotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gQloyX2J6RGVj b21wcmVzc0luaXQgKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2Nf dHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3ZfbGliX2J6Ml9CWjJfYnpEZWNvbXBy ZXNzSW5pdD15ZXMKK09DQU1MQlVJTEQ9JGFjX2N2X3Byb2dfT0NBTUxCVUlMRAoraWYgdGVzdCAt biAiJE9DQU1MQlVJTEQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0k TElORU5PfTogcmVzdWx0OiAkT0NBTUxCVUlMRCIgPiY1CiskYXNfZWNobyAiJE9DQU1MQlVJTEQi ID4mNjsgfQogZWxzZQotICBhY19jdl9saWJfYnoyX0JaMl9iekRlY29tcHJlc3NJbml0PW5vCi1m aQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29u ZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZl X0xJQlMKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3Vs dDogJGFjX2N2X2xpYl9iejJfQloyX2J6RGVjb21wcmVzc0luaXQiID4mNQotJGFzX2VjaG8gIiRh Y19jdl9saWJfYnoyX0JaMl9iekRlY29tcHJlc3NJbml0IiA+JjY7IH0KLWlmIHRlc3QgIngkYWNf Y3ZfbGliX2J6Ml9CWjJfYnpEZWNvbXByZXNzSW5pdCIgPSB4IiJ5ZXM7IHRoZW4gOgotICB6bGli PSIkemxpYiAtREhBVkVfQlpMSUIgLWxiejIiCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xp bmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQogZmkK IAogCiBmaQotCi0KLWFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJsem1h LmgiICJhY19jdl9oZWFkZXJfbHptYV9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCi1pZiB0ZXN0 ICJ4JGFjX2N2X2hlYWRlcl9sem1hX2giID0geCIieWVzOyB0aGVuIDoKLQoteyAkYXNfZWNobyAi JGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbHptYV9zdHJlYW1fZGVj b2RlciBpbiAtbGx6bWEiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGx6bWFfc3RyZWFt X2RlY29kZXIgaW4gLWxsem1hLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9sem1h X2x6bWFfc3RyZWFtX2RlY29kZXIrc2V0fSIgPSBzZXQ7IHRoZW4gOgoraWYgdGVzdCAteiAiJGFj X2N2X3Byb2dfT0NBTUxCVUlMRCI7IHRoZW4KKyAgYWNfY3RfT0NBTUxCVUlMRD0kT0NBTUxCVUlM RAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm9jYW1sYnVpbGQiLCBzbyBpdCBjYW4g YmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IG9jYW1sYnVpbGQ7IGFjX3dv cmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcg Zm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAi ID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X09DQU1MQlVJTEQrc2V0fSIgPSBz ZXQ7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBhY19jaGVj a19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbGx6bWEgICRMSUJTIgotY2F0IGNvbmZkZWZz LmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwot Ci0vKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJv ci4KLSAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBv ZiBhIEdDQwotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxk IHN0aWxsIGFwcGx5LiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlm Ci1jaGFyIGx6bWFfc3RyZWFtX2RlY29kZXIgKCk7Ci1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBs em1hX3N0cmVhbV9kZWNvZGVyICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBh Y19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X2xpYl9sem1hX2x6bWFf c3RyZWFtX2RlY29kZXI9eWVzCisgIGlmIHRlc3QgLW4gIiRhY19jdF9PQ0FNTEJVSUxEIjsgdGhl bgorICBhY19jdl9wcm9nX2FjX2N0X09DQU1MQlVJTEQ9IiRhY19jdF9PQ0FNTEJVSUxEIiAjIExl dCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KIGVsc2UKLSAgYWNfY3ZfbGliX2x6bWFfbHpt YV9zdHJlYW1fZGVjb2Rlcj1ubworYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRP UgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16 ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhl Y3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQk YWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQi OyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9PQ0FNTEJVSUxEPSJvY2FtbGJ1aWxkIgor ICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIv JGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9u ZQorSUZTPSRhc19zYXZlX0lGUworCiBmaQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRl c3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQK LUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKIGZpCi17ICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9sem1hX2x6bWFfc3RyZWFtX2Rl Y29kZXIiID4mNQotJGFzX2VjaG8gIiRhY19jdl9saWJfbHptYV9sem1hX3N0cmVhbV9kZWNvZGVy IiA+JjY7IH0KLWlmIHRlc3QgIngkYWNfY3ZfbGliX2x6bWFfbHptYV9zdHJlYW1fZGVjb2RlciIg PSB4IiJ5ZXM7IHRoZW4gOgotICB6bGliPSIkemxpYiAtREhBVkVfTFpNQSAtbGx6bWEiCithY19j dF9PQ0FNTEJVSUxEPSRhY19jdl9wcm9nX2FjX2N0X09DQU1MQlVJTEQKK2lmIHRlc3QgLW4gIiRh Y19jdF9PQ0FNTEJVSUxEIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8t JExJTkVOT306IHJlc3VsdDogJGFjX2N0X09DQU1MQlVJTEQiID4mNQorJGFzX2VjaG8gIiRhY19j dF9PQ0FNTEJVSUxEIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGlu ZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiBmaQog Ci0KKyAgaWYgdGVzdCAieCRhY19jdF9PQ0FNTEJVSUxEIiA9IHg7IHRoZW4KKyAgICBPQ0FNTEJV SUxEPSJubyIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJu ZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdB Uk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIg PiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJl Zml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2Vz YWMKKyAgICBPQ0FNTEJVSUxEPSRhY19jdF9PQ0FNTEJVSUxECisgIGZpCitlbHNlCisgIE9DQU1M QlVJTEQ9IiRhY19jdl9wcm9nX09DQU1MQlVJTEQiCiBmaQogCiAKLWFjX2ZuX2NfY2hlY2tfaGVh ZGVyX21vbmdyZWwgIiRMSU5FTk8iICJsem8vbHpvMXguaCIgImFjX2N2X2hlYWRlcl9sem9fbHpv MXhfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgotaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfbHpv X2x6bzF4X2giID0geCIieWVzOyB0aGVuIDoKKyAgICBpZiB0ZXN0ICJ4JE9DQU1MQyIgPSAieG5v IjsgdGhlbiA6CiAKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hl Y2tpbmcgZm9yIGx6bzF4X2RlY29tcHJlc3MgaW4gLWxsem8yIiA+JjUKLSRhc19lY2hvX24gImNo ZWNraW5nIGZvciBsem8xeF9kZWNvbXByZXNzIGluIC1sbHpvMi4uLiAiID4mNjsgfQotaWYgdGVz dCAiJHthY19jdl9saWJfbHpvMl9sem8xeF9kZWNvbXByZXNzK3NldH0iID0gc2V0OyB0aGVuIDoK LSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVf TElCUz0kTElCUwotTElCUz0iLWxsem8yICAkTElCUyIKLWNhdCBjb25mZGVmcy5oIC0gPDxfQUNF T0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAgICAgICAgaWYg dGVzdCAieCRlbmFibGVfb2NhbWx0b29scyIgPSAieHllcyI7IHRoZW4gOgogCi0vKiBPdmVycmlk ZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KLSAgIFVzZSBj aGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQwotICAg YnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5 LiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi1jaGFyIGx6bzF4 X2RlY29tcHJlc3MgKCk7Ci1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBsem8xeF9kZWNvbXByZXNz ICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIk TElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X2xpYl9sem8yX2x6bzF4X2RlY29tcHJlc3M9eWVzCi1l bHNlCi0gIGFjX2N2X2xpYl9sem8yX2x6bzF4X2RlY29tcHJlc3M9bm8KLWZpCi1ybSAtZiBjb3Jl IGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICBjb25mdGVzdCRhY19leGVl eHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworICAgICAg ICAgICAgYXNfZm5fZXJyb3IgJD8gIk9jYW1sIHRvb2xzIGVuYWJsZWQsIGJ1dCB1bmFibGUgdG8g ZmluZCBPY2FtbCIgIiRMSU5FTk8iIDUKIGZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5l bm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9sem8yX2x6bzF4X2RlY29tcHJlc3MiID4m NQotJGFzX2VjaG8gIiRhY19jdl9saWJfbHpvMl9sem8xeF9kZWNvbXByZXNzIiA+JjY7IH0KLWlm IHRlc3QgIngkYWNfY3ZfbGliX2x6bzJfbHpvMXhfZGVjb21wcmVzcyIgPSB4IiJ5ZXM7IHRoZW4g OgotICB6bGliPSIkemxpYiAtREhBVkVfTFpPMVggLWxsem8yIgorICAgICAgICBvY2FtbHRvb2xz PSJuIgorCiBmaQogCitmaQorIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJiYXNoIiwgc28g aXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBiYXNoOyBhY193 b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5n IGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4g IiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9CQVNIK3NldH0iID0gc2V0OyB0aGVuIDoK KyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkQkFTSCBpbgorICBb XFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9CQVNIPSIkQkFTSCIgIyBMZXQgdGhlIHVz ZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVf SUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisg IElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBm b3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYg eyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIk YXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfQkFT SD0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+ JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKIAor ICB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9CQVNIIiAmJiBhY19jdl9wYXRoX0JBU0g9Im5vIgorICA7 OworZXNhYworZmkKK0JBU0g9JGFjX2N2X3BhdGhfQkFTSAoraWYgdGVzdCAtbiAiJEJBU0giOyB0 aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAk QkFTSCIgPiY1CiskYXNfZWNobyAiJEJBU0giID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIk YXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5v IiA+JjY7IH0KIGZpCiAKIAoraWYgdGVzdCB4IiR7QkFTSH0iID09IHgibm8iCit0aGVuCisgICAg YXNfZm5fZXJyb3IgJD8gIlVuYWJsZSB0byBmaW5kIGJhc2gsIHBsZWFzZSBpbnN0YWxsIGJhc2gi ICIkTElORU5PIiA1CitmaQogCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IGNoZWNraW5nIGZvciBpb19zZXR1cCBpbiAtbGFpbyIgPiY1Ci0kYXNfZWNob19uICJjaGVj a2luZyBmb3IgaW9fc2V0dXAgaW4gLWxhaW8uLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3Zf bGliX2Fpb19pb19zZXR1cCtzZXR9IiA9IHNldDsgdGhlbiA6CithY19leHQ9YworYWNfY3BwPSck Q1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25m dGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENG TEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19j b21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Cit7ICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29y IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29y Li4uICIgPiY2OyB9CisjIE9uIFN1bnMsIHNvbWV0aW1lcyAkQ1BQIG5hbWVzIGEgZGlyZWN0b3J5 LgoraWYgdGVzdCAtbiAiJENQUCIgJiYgdGVzdCAtZCAiJENQUCI7IHRoZW4KKyAgQ1BQPQorZmkK K2lmIHRlc3QgLXogIiRDUFAiOyB0aGVuCisgIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DUFArc2V0 fSIgPSBzZXQ7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBh Y19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbGFpbyAgJExJQlMiCi1jYXQgY29u ZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgICAgICAjIERvdWJsZSBxdW90 ZXMgYmVjYXVzZSBDUFAgbmVlZHMgdG8gYmUgZXhwYW5kZWQKKyAgICBmb3IgQ1BQIGluICIkQ0Mg LUUiICIkQ0MgLUUgLXRyYWRpdGlvbmFsLWNwcCIgIi9saWIvY3BwIgorICAgIGRvCisgICAgICBh Y19wcmVwcm9jX29rPWZhbHNlCitmb3IgYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMK K2RvCisgICMgVXNlIGEgaGVhZGVyIGZpbGUgdGhhdCBjb21lcyB3aXRoIGdjYywgc28gY29uZmln dXJpbmcgZ2xpYmMKKyAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCisgICMg UHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBz aW5jZQorICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVy cy4KKyAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21w aWxlcidzIHBhcnNlciwKKyAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIg aXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0Yg PmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotLyogT3ZlcnJpZGUg YW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCi0gICBVc2UgY2hh ciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKLSAgIGJ1 aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4g ICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKKyNpZmRlZiBfX1NURENfXworIyBp bmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgogI2VuZGlmCi1j aGFyIGlvX3NldHVwICgpOwotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gaW9fc2V0dXAgKCk7Ci0g IDsKLSAgcmV0dXJuIDA7Ci19CisJCSAgICAgU3ludGF4IGVycm9yCiBfQUNFT0YKLWlmIGFjX2Zu X2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3ZfbGliX2Fpb19pb19zZXR1cD15 ZXMKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorCiBlbHNlCi0gIGFjX2N2 X2xpYl9haW9faW9fc2V0dXA9bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVz dC4kYWNfb2JqZXh0IFwKLSAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAot TElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQg aW5wdXQuCitjb250aW51ZQogZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2Fpb19pb19zZXR1cCIgPiY1Ci0kYXNfZWNobyAiJGFj X2N2X2xpYl9haW9faW9fc2V0dXAiID4mNjsgfQotaWYgdGVzdCAieCRhY19jdl9saWJfYWlvX2lv X3NldHVwIiA9IHgiInllczsgdGhlbiA6Ci0gIHN5c3RlbV9haW89InkiCitybSAtZiBjb25mdGVz dC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisKKyAgIyBPSywgd29ya3Mgb24gc2Fu ZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKKyAgIyBjYW4g YmUgZGV0ZWN0ZWQgYW5kIGhvdy4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRl c3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGFjX25vbmV4aXN0 ZW50Lmg+CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorICAj IEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgorY29udGludWUKIGVsc2UKLSAgc3lz dGVtX2Fpbz0ibiIKKyAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KK2FjX3ByZXByb2Nfb2s9OgorYnJl YWsKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisK K2RvbmUKKyMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmlu ZyBjb2RlIHdhcyBza2lwcGVkLgorcm0gLWYgY29uZnRlc3QuaSBjb25mdGVzdC5lcnIgY29uZnRl c3QuJGFjX2V4dAoraWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4gOgorICBicmVhawogZmkKIAorICAg IGRvbmUKKyAgICBhY19jdl9wcm9nX0NQUD0kQ1BQCiAKLXsgJGFzX2VjaG8gIiRhc19tZToke2Fz X2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIE1ENSBpbiAtbGNyeXB0byIgPiY1Ci0kYXNf ZWNob19uICJjaGVja2luZyBmb3IgTUQ1IGluIC1sY3J5cHRvLi4uICIgPiY2OyB9Ci1pZiB0ZXN0 ICIke2FjX2N2X2xpYl9jcnlwdG9fTUQ1K3NldH0iID0gc2V0OyB0aGVuIDoKLSAgJGFzX2VjaG9f biAiKGNhY2hlZCkgIiA+JjYKK2ZpCisgIENQUD0kYWNfY3ZfcHJvZ19DUFAKIGVsc2UKLSAgYWNf Y2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWxjcnlwdG8gICRMSUJTIgotY2F0IGNv bmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorICBhY19jdl9wcm9nX0NQUD0k Q1BQCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6 ICRDUFAiID4mNQorJGFzX2VjaG8gIiRDUFAiID4mNjsgfQorYWNfcHJlcHJvY19vaz1mYWxzZQor Zm9yIGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCitkbworICAjIFVzZSBhIGhlYWRl ciBmaWxlIHRoYXQgY29tZXMgd2l0aCBnY2MsIHNvIGNvbmZpZ3VyaW5nIGdsaWJjCisgICMgd2l0 aCBhIGZyZXNoIGNyb3NzLWNvbXBpbGVyIHdvcmtzLgorICAjIFByZWZlciA8bGltaXRzLmg+IHRv IDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgIyA8bGltaXRzLmg+ IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuCisgICMgT24gdGhlIE5lWFQs IGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCisgICMg bm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhp cyBjYXNlLgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAv KiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJv dG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgotICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQg bWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBh cmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotI2lmZGVmIF9fY3BsdXNw bHVzCi1leHRlcm4gIkMiCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+Cisj ZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KICNlbmRpZgotY2hhciBNRDUgKCk7Ci1pbnQKLW1h aW4gKCkKLXsKLXJldHVybiBNRDUgKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19CisJCSAgICAgU3lu dGF4IGVycm9yCiBfQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoK LSAgYWNfY3ZfbGliX2NyeXB0b19NRDU9eWVzCitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8i OyB0aGVuIDoKKwogZWxzZQotICBhY19jdl9saWJfY3J5cHRvX01ENT1ubwotZmkKLXJtIC1mIGNv cmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4 ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCisgICMg QnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KK2NvbnRpbnVlCiBmaQoteyAkYXNfZWNobyAi JGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfY3J5cHRvX01E NSIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2xpYl9jcnlwdG9fTUQ1IiA+JjY7IH0KLWlmIHRlc3Qg IngkYWNfY3ZfbGliX2NyeXB0b19NRDUiID0geCIieWVzOyB0aGVuIDoKLSAgY2F0ID4+Y29uZmRl ZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX0xJQkNSWVBUTyAxCitybSAtZiBjb25mdGVzdC5l cnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisKKyAgIyBPSywgd29ya3Mgb24gc2FuZSBj YXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKKyAgIyBjYW4gYmUg ZGV0ZWN0ZWQgYW5kIGhvdy4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3Qu JGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50 Lmg+CiBfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorICAjIEJy b2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgorY29udGludWUKK2Vsc2UKKyAgIyBQYXNz ZXMgYm90aCB0ZXN0cy4KK2FjX3ByZXByb2Nfb2s9OgorYnJlYWsKK2ZpCitybSAtZiBjb25mdGVz dC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CiAKLSAgTElCUz0iLWxjcnlwdG8gJExJ QlMiCitkb25lCisjIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xl YW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KK3JtIC1mIGNvbmZ0ZXN0LmkgY29uZnRlc3QuZXJyIGNv bmZ0ZXN0LiRhY19leHQKK2lmICRhY19wcmVwcm9jX29rOyB0aGVuIDoKIAogZWxzZQotICBhc19m bl9lcnJvciAkPyAiQ291bGQgbm90IGZpbmQgbGliY3J5cHRvIiAiJExJTkVOTyIgNQorICB7IHsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3 ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30K K2FzX2ZuX2Vycm9yICQ/ICJDIHByZXByb2Nlc3NvciBcIiRDUFBcIiBmYWlscyBzYW5pdHkgY2hl Y2sKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1IDsgfQog ZmkKIAoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBm b3IgZXh0MmZzX29wZW4yIGluIC1sZXh0MmZzIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZv ciBleHQyZnNfb3BlbjIgaW4gLWxleHQyZnMuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3Zf bGliX2V4dDJmc19leHQyZnNfb3BlbjIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorYWNfZXh0PWMKK2Fj X2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxB R1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhl ZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1 JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCisKK3sgJGFzX2VjaG8g IiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGdyZXAgdGhhdCBoYW5k bGVzIGxvbmcgbGluZXMgYW5kIC1lIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBncmVw IHRoYXQgaGFuZGxlcyBsb25nIGxpbmVzIGFuZCAtZS4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHth Y19jdl9wYXRoX0dSRVArc2V0fSIgPSBzZXQ7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVk KSAiID4mNgogZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbGV4 dDJmcyAgJExJQlMiCi1jYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0 Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCisgIGlmIHRlc3QgLXogIiRHUkVQIjsgdGhlbgorICBh Y19wYXRoX0dSRVBfZm91bmQ9ZmFsc2UKKyAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRo IGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKKyAgYXNfc2F2ZV9JRlM9JElGUzsg SUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91 c3IveHBnNC9iaW4KK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIg JiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfcHJvZyBpbiBncmVwIGdncmVwOyBkbworICAgIGZvciBh Y19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgYWNf cGF0aF9HUkVQPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgorICAgICAgeyB0ZXN0IC1m ICIkYWNfcGF0aF9HUkVQIiAmJiAkYXNfdGVzdF94ICIkYWNfcGF0aF9HUkVQIjsgfSB8fCBjb250 aW51ZQorIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfR1JFUCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlz IGZvdW5kLgorICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfR1JFUAorY2FzZSBgIiRhY19wYXRo X0dSRVAiIC0tdmVyc2lvbiAyPiYxYCBpbgorKkdOVSopCisgIGFjX2N2X3BhdGhfR1JFUD0iJGFj X3BhdGhfR1JFUCIgYWNfcGF0aF9HUkVQX2ZvdW5kPTo7OworKikKKyAgYWNfY291bnQ9MAorICAk YXNfZWNob19uIDAxMjM0NTY3ODkgPiJjb25mdGVzdC5pbiIKKyAgd2hpbGUgOgorICBkbworICAg IGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCisgICAgbXYg ImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgorICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0 ZXN0Lm5sIgorICAgICRhc19lY2hvICdHUkVQJyA+PiAiY29uZnRlc3QubmwiCisgICAgIiRhY19w YXRoX0dSRVAiIC1lICdHUkVQJCcgLWUgJy0oY2Fubm90IG1hdGNoKS0nIDwgImNvbmZ0ZXN0Lm5s IiA+ImNvbmZ0ZXN0Lm91dCIgMj4vZGV2L251bGwgfHwgYnJlYWsKKyAgICBkaWZmICJjb25mdGVz dC5vdXQiICJjb25mdGVzdC5ubCIgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCisgICAgYXNfZm5f YXJpdGggJGFjX2NvdW50ICsgMSAmJiBhY19jb3VudD0kYXNfdmFsCisgICAgaWYgdGVzdCAkYWNf Y291bnQgLWd0ICR7YWNfcGF0aF9HUkVQX21heC0wfTsgdGhlbgorICAgICAgIyBCZXN0IG9uZSBz byBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCisgICAgICBh Y19jdl9wYXRoX0dSRVA9IiRhY19wYXRoX0dSRVAiCisgICAgICBhY19wYXRoX0dSRVBfbWF4PSRh Y19jb3VudAorICAgIGZpCisgICAgIyAxMCooMl4xMCkgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9y ZSB0aGFuIGVub3VnaAorICAgIHRlc3QgJGFjX2NvdW50IC1ndCAxMCAmJiBicmVhaworICBkb25l CisgIHJtIC1mIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5ubCBjb25mdGVzdC5v dXQ7OworZXNhYwogCi0vKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBh dm9pZCBhbiBlcnJvci4KLSAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSBy ZXR1cm4gdHlwZSBvZiBhIEdDQwotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJv dG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJu ICJDIgotI2VuZGlmCi1jaGFyIGV4dDJmc19vcGVuMiAoKTsKLWludAotbWFpbiAoKQotewotcmV0 dXJuIGV4dDJmc19vcGVuMiAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNf Zm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9saWJfZXh0MmZzX2V4dDJm c19vcGVuMj15ZXMKKyAgICAgICRhY19wYXRoX0dSRVBfZm91bmQgJiYgYnJlYWsgMworICAgIGRv bmUKKyAgZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisgIGlmIHRlc3QgLXogIiRhY19j dl9wYXRoX0dSRVAiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgZ3Jl cCBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iICIk TElORU5PIiA1CisgIGZpCiBlbHNlCi0gIGFjX2N2X2xpYl9leHQyZnNfZXh0MmZzX29wZW4yPW5v CisgIGFjX2N2X3BhdGhfR1JFUD0kR1JFUAogZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNv bmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNf ZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCisKIGZpCi17ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9leHQyZnNfZXh0MmZz X29wZW4yIiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfbGliX2V4dDJmc19leHQyZnNfb3BlbjIiID4m NjsgfQotaWYgdGVzdCAieCRhY19jdl9saWJfZXh0MmZzX2V4dDJmc19vcGVuMiIgPSB4IiJ5ZXM7 IHRoZW4gOgotICBsaWJleHQyZnM9InkiCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8t JExJTkVOT306IHJlc3VsdDogJGFjX2N2X3BhdGhfR1JFUCIgPiY1CiskYXNfZWNobyAiJGFjX2N2 X3BhdGhfR1JFUCIgPiY2OyB9CisgR1JFUD0iJGFjX2N2X3BhdGhfR1JFUCIKKworCit7ICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBlZ3JlcCIgPiY1 CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZWdyZXAuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7 YWNfY3ZfcGF0aF9FR1JFUCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNo ZWQpICIgPiY2CiBlbHNlCi0gIGxpYmV4dDJmcz0ibiIKKyAgaWYgZWNobyBhIHwgJEdSRVAgLUUg JyhhfGIpJyA+L2Rldi9udWxsIDI+JjEKKyAgIHRoZW4gYWNfY3ZfcGF0aF9FR1JFUD0iJEdSRVAg LUUiCisgICBlbHNlCisgICAgIGlmIHRlc3QgLXogIiRFR1JFUCI7IHRoZW4KKyAgYWNfcGF0aF9F R1JFUF9mb3VuZD1mYWxzZQorICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRl c3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBB VEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0 L2JpbgorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19k aXI9LgorICAgIGZvciBhY19wcm9nIGluIGVncmVwOyBkbworICAgIGZvciBhY19leGVjX2V4dCBp biAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgYWNfcGF0aF9FR1JFUD0i JGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKKyAgICAgIHsgdGVzdCAtZiAiJGFjX3BhdGhf RUdSRVAiICYmICRhc190ZXN0X3ggIiRhY19wYXRoX0VHUkVQIjsgfSB8fCBjb250aW51ZQorIyBD aGVjayBmb3IgR05VIGFjX3BhdGhfRUdSRVAgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4K KyAgIyBDaGVjayBmb3IgR05VICRhY19wYXRoX0VHUkVQCitjYXNlIGAiJGFjX3BhdGhfRUdSRVAi IC0tdmVyc2lvbiAyPiYxYCBpbgorKkdOVSopCisgIGFjX2N2X3BhdGhfRUdSRVA9IiRhY19wYXRo X0VHUkVQIiBhY19wYXRoX0VHUkVQX2ZvdW5kPTo7OworKikKKyAgYWNfY291bnQ9MAorICAkYXNf ZWNob19uIDAxMjM0NTY3ODkgPiJjb25mdGVzdC5pbiIKKyAgd2hpbGUgOgorICBkbworICAgIGNh dCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCisgICAgbXYgImNv bmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgorICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0 Lm5sIgorICAgICRhc19lY2hvICdFR1JFUCcgPj4gImNvbmZ0ZXN0Lm5sIgorICAgICIkYWNfcGF0 aF9FR1JFUCIgJ0VHUkVQJCcgPCAiY29uZnRlc3QubmwiID4iY29uZnRlc3Qub3V0IiAyPi9kZXYv bnVsbCB8fCBicmVhaworICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rl di9udWxsIDI+JjEgfHwgYnJlYWsKKyAgICBhc19mbl9hcml0aCAkYWNfY291bnQgKyAxICYmIGFj X2NvdW50PSRhc192YWwKKyAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX0VHUkVQ X21heC0wfTsgdGhlbgorICAgICAgIyBCZXN0IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAg bG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCisgICAgICBhY19jdl9wYXRoX0VHUkVQPSIkYWNfcGF0 aF9FR1JFUCIKKyAgICAgIGFjX3BhdGhfRUdSRVBfbWF4PSRhY19jb3VudAorICAgIGZpCisgICAg IyAxMCooMl4xMCkgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorICAgIHRl c3QgJGFjX2NvdW50IC1ndCAxMCAmJiBicmVhaworICBkb25lCisgIHJtIC1mIGNvbmZ0ZXN0Lmlu IGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5ubCBjb25mdGVzdC5vdXQ7OworZXNhYworCisgICAgICAk YWNfcGF0aF9FR1JFUF9mb3VuZCAmJiBicmVhayAzCisgICAgZG9uZQorICBkb25lCisgIGRvbmUK K0lGUz0kYXNfc2F2ZV9JRlMKKyAgaWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfRUdSRVAiOyB0aGVu CisgICAgYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgZWdyZXAgY291bGQgYmUgZm91bmQg aW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiAiJExJTkVOTyIgNQorICBmaQor ZWxzZQorICBhY19jdl9wYXRoX0VHUkVQPSRFR1JFUAogZmkKIAorICAgZmkKK2ZpCit7ICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3BhdGhfRUdS RVAiID4mNQorJGFzX2VjaG8gIiRhY19jdl9wYXRoX0VHUkVQIiA+JjY7IH0KKyBFR1JFUD0iJGFj X2N2X3BhdGhfRUdSRVAiCiAKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogY2hlY2tpbmcgZm9yIGdjcnlfbWRfaGFzaF9idWZmZXIgaW4gLWxnY3J5cHQiID4mNQotJGFz X2VjaG9fbiAiY2hlY2tpbmcgZm9yIGdjcnlfbWRfaGFzaF9idWZmZXIgaW4gLWxnY3J5cHQuLi4g IiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfbGliX2djcnlwdF9nY3J5X21kX2hhc2hfYnVmZmVy K3NldH0iID0gc2V0OyB0aGVuIDoKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRM SU5FTk99OiBjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcyIgPiY1CiskYXNfZWNob19u ICJjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcy4uLiAiID4mNjsgfQoraWYgdGVzdCAi JHthY19jdl9oZWFkZXJfc3RkYytzZXR9IiA9IHNldDsgdGhlbiA6CiAgICRhc19lY2hvX24gIihj YWNoZWQpICIgPiY2CiBlbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9 Ii1sZ2NyeXB0ICAkTElCUyIKLWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRh Y19leHQKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyog ZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGFy Zy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGZsb2F0Lmg+CiAKLS8qIE92ZXJy aWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgotICAgVXNl IGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCi0g ICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBw bHkuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLWNoYXIgZ2Ny eV9tZF9oYXNoX2J1ZmZlciAoKTsKIGludAogbWFpbiAoKQogewotcmV0dXJuIGdjcnlfbWRfaGFz aF9idWZmZXIgKCk7CisKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotaWYgYWNfZm5fY190 cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9saWJfZ2NyeXB0X2djcnlfbWRfaGFz aF9idWZmZXI9eWVzCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Cisg IGFjX2N2X2hlYWRlcl9zdGRjPXllcwogZWxzZQotICBhY19jdl9saWJfZ2NyeXB0X2djcnlfbWRf aGFzaF9idWZmZXI9bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNf b2JqZXh0IFwKLSAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0k YWNfY2hlY2tfbGliX3NhdmVfTElCUworICBhY19jdl9oZWFkZXJfc3RkYz1ubwogZmkKLXsgJGFz X2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2dj cnlwdF9nY3J5X21kX2hhc2hfYnVmZmVyIiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfbGliX2djcnlw dF9nY3J5X21kX2hhc2hfYnVmZmVyIiA+JjY7IH0KLWlmIHRlc3QgIngkYWNfY3ZfbGliX2djcnlw dF9nY3J5X21kX2hhc2hfYnVmZmVyIiA9IHgiInllczsgdGhlbiA6Ci0gIGxpYmdjcnlwdD0ieSIK K3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFj X2V4dAorCitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAjIFN1bk9T IDQueCBzdHJpbmcuaCBkb2VzIG5vdCBkZWNsYXJlIG1lbSosIGNvbnRyYXJ5IHRvIEFOU0kuCisg IGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25m ZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworX0FDRU9GCitpZiAoZXZhbCAiJGFj X2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAibWVtY2hyIiA+L2Rldi9u dWxsIDI+JjE7IHRoZW4gOgorCiBlbHNlCi0gIGxpYmdjcnlwdD0ibiIKKyAgYWNfY3ZfaGVhZGVy X3N0ZGM9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKwogZmkKIAoraWYgdGVzdCAkYWNfY3ZfaGVh ZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgIyBJU0MgMi4wLjIgc3RkbGliLmggZG9lcyBub3QgZGVj bGFyZSBmcmVlLCBjb250cmFyeSB0byBBTlNJLgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9G ID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3Rk bGliLmg+CiAKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+ JjUgfAorICAkRUdSRVAgImZyZWUiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CiAKLSAgICB7ICRh c19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBwdGhyZWFk IGZsYWciID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHB0aHJlYWQgZmxhZy4uLiAiID4m NjsgfQotaWYgdGVzdCAiJHtheF9jdl9wdGhyZWFkX2ZsYWdzK3NldH0iID0gc2V0OyB0aGVuIDoK LSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9 bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKIAotICAgICAgICBheF9jdl9wdGhyZWFkX2ZsYWdzPS1w dGhyZWFkCitmaQogCi0gICAgUFRIUkVBRF9DRkxBR1M9IiRheF9jdl9wdGhyZWFkX2ZsYWdzIgot ICAgIFBUSFJFQURfTERGTEFHUz0iJGF4X2N2X3B0aHJlYWRfZmxhZ3MiCi0gICAgUFRIUkVBRF9M SUJTPSIiCitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAjIC9iaW4v Y2MgaW4gSXJpeC00LjAuNSBnZXRzIG5vbi1BTlNJIGN0eXBlIG1hY3JvcyB1bmxlc3MgdXNpbmcg LWFuc2kuCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgOgor ZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBl bmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRsaWIu aD4KKyNpZiAoKCcgJyAmIDB4MEZGKSA9PSAweDAyMCkKKyMgZGVmaW5lIElTTE9XRVIoYykgKCdh JyA8PSAoYykgJiYgKGMpIDw9ICd6JykKKyMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykg PyAnQScgKyAoKGMpIC0gJ2EnKSA6IChjKSkKKyNlbHNlCisjIGRlZmluZSBJU0xPV0VSKGMpIFwK KwkJICAgKCgnYScgPD0gKGMpICYmIChjKSA8PSAnaScpIFwKKwkJICAgICB8fCAoJ2onIDw9IChj KSAmJiAoYykgPD0gJ3InKSBcCisJCSAgICAgfHwgKCdzJyA8PSAoYykgJiYgKGMpIDw9ICd6Jykp CisjIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gKChjKSB8IDB4NDApIDogKGMpKQor I2VuZGlmCiAKKyNkZWZpbmUgWE9SKGUsIGYpICgoKGUpICYmICEoZikpIHx8ICghKGUpICYmIChm KSkpCitpbnQKK21haW4gKCkKK3sKKyAgaW50IGk7CisgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkr KykKKyAgICBpZiAoWE9SIChpc2xvd2VyIChpKSwgSVNMT1dFUiAoaSkpCisJfHwgdG91cHBlciAo aSkgIT0gVE9VUFBFUiAoaSkpCisgICAgICByZXR1cm4gMjsKKyAgcmV0dXJuIDA7Cit9CitfQUNF T0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgogCi0gICAgc2F2ZWRfQ0ZM QUdTPSIkQ0ZMQUdTIgorZWxzZQorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNv cmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhl ZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19l eHQKK2ZpCiAKLSAgICBzYXZlZF9MREZMQUdTPSIkTERGTEFHUyIKK2ZpCitmaQoreyAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfc3Rk YyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hlYWRlcl9zdGRjIiA+JjY7IH0KK2lmIHRlc3QgJGFj X2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCiAKLSAgICBzYXZlZF9MSUJTPSIkTElCUyIKKyRh c19lY2hvICIjZGVmaW5lIFNURENfSEVBREVSUyAxIiA+PmNvbmZkZWZzLmgKIAorZmkKIAotICAg IENGTEFHUz0iJENGTEFHUyAkUFRIUkVBRF9DRkxBR1MiCisjIE9uIElSSVggNS4zLCBzeXMvdHlw ZXMgYW5kIGludHR5cGVzLmggYXJlIGNvbmZsaWN0aW5nLgorZm9yIGFjX2hlYWRlciBpbiBzeXMv dHlwZXMuaCBzeXMvc3RhdC5oIHN0ZGxpYi5oIHN0cmluZy5oIG1lbW9yeS5oIHN0cmluZ3MuaCBc CisJCSAgaW50dHlwZXMuaCBzdGRpbnQuaCB1bmlzdGQuaAorZG8gOgorICBhc19hY19IZWFkZXI9 YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9j X2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFk ZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdAorIgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19I ZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisj ZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VP RgogCi0gICAgTERGTEFHUz0iJExERkxBR1MgJFBUSFJFQURfTERGTEFHUyIKK2ZpCiAKLSAgICBM SUJTPSIkTElCUyAkUFRIUkVBRF9MSUJTIgorZG9uZQogCi0gICAgICAgIGNhdCBjb25mZGVmcy5o IC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAot I2luY2x1ZGUgPHB0aHJlYWQuaD4KLWludCBtYWluKHZvaWQpIHsKLSAgcHRocmVhZF9hdGZvcmso MCwwLDApOwotICBwdGhyZWFkX2NyZWF0ZSgwLDAsMCwwKTsKLX0KK2lmIHRlc3QgIngkcHl0aG9u dG9vbHMiID0gInh5IjsgdGhlbiA6CiAKLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfbGluayAiJExJ TkVOTyI7IHRoZW4gOgorICAgIGlmIGVjaG8gIiRQWVRIT04iIHwgZ3JlcCAtcSAiXi8iOyB0aGVu IDoKIAorICAgICAgICBQWVRIT05QQVRIPSRQWVRIT04KKyAgICAgICAgUFlUSE9OPWBiYXNlbmFt ZSAkUFlUSE9OUEFUSGAKKworZWxpZiB0ZXN0IC16ICIkUFlUSE9OIjsgdGhlbiA6CisgIFBZVEhP Tj0icHl0aG9uIgogZWxzZQotICBheF9jdl9wdGhyZWFkX2ZsYWdzPWZhaWxlZAorICBhc19mbl9l cnJvciAkPyAiUFlUSE9OIHNwZWNpZmllZCwgYnV0IGlzIG5vdCBhbiBhYnNvbHV0ZSBwYXRoIiAi JExJTkVOTyIgNQogZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpl eHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgIyBFeHRy YWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkUFlUSE9OIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBu YW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkUFlUSE9OOyBhY193b3JkPSQyCit7ICRhc19lY2hv ICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1 CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3Qg IiR7YWNfY3ZfcGF0aF9QWVRIT05QQVRIK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9f biAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkUFlUSE9OUEFUSCBpbgorICBbXFwvXSog fCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9QWVRIT05QQVRIPSIkUFlUSE9OUEFUSCIgIyBMZXQg dGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFz X3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgK K2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4K KyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8K KyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVz dF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Bh dGhfUFlUSE9OUEFUSD0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFj X2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNf c2F2ZV9JRlMKIAotICAgIENGTEFHUz0iJHNhdmVkX0NGTEFHUyIKKyAgdGVzdCAteiAiJGFjX2N2 X3BhdGhfUFlUSE9OUEFUSCIgJiYgYWNfY3ZfcGF0aF9QWVRIT05QQVRIPSJubyIKKyAgOzsKK2Vz YWMKK2ZpCitQWVRIT05QQVRIPSRhY19jdl9wYXRoX1BZVEhPTlBBVEgKK2lmIHRlc3QgLW4gIiRQ WVRIT05QQVRIIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IHJlc3VsdDogJFBZVEhPTlBBVEgiID4mNQorJGFzX2VjaG8gIiRQWVRIT05QQVRIIiA+JjY7 IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1 bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQogCi0gICAgTERGTEFHUz0iJHNh dmVkX0xERkxBR1MiCiAKLSAgICBMSUJTPSIkc2F2ZWRfTElCUyIKK2lmIHRlc3QgeCIke1BZVEhP TlBBVEh9IiA9PSB4Im5vIgordGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJVbmFibGUgdG8gZmlu ZCAkUFlUSE9OLCBwbGVhc2UgaW5zdGFsbCAkUFlUSE9OIiAiJExJTkVOTyIgNQorZmkKKyAgICB7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBweXRo b24gdmVyc2lvbiA+PSAyLjMgIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBweXRob24g dmVyc2lvbiA+PSAyLjMgLi4uICIgPiY2OyB9CitgJFBZVEhPTiAtYyAnaW1wb3J0IHN5czsgc3lz LmV4aXQoZXZhbCgic3lzLnZlcnNpb25faW5mbyA8ICgyLCAzKSIpKSdgCitpZiB0ZXN0ICIkPyIg IT0gIjAiCit0aGVuCisgICAgcHl0aG9uX3ZlcnNpb249YCRQWVRIT04gLVYgMj4mMWAKKyAgICB7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQor JGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBhc19mbl9lcnJvciAkPyAiJHB5dGhvbl92ZXJzaW9u IGlzIHRvbyBvbGQsIG1pbmltdW0gcmVxdWlyZWQgdmVyc2lvbiBpcyAyLjMiICIkTElORU5PIiA1 CitlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1 bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KK2ZpCiAKK2FjX3ByZXZpb3VzX2Nw cGZsYWdzPSRDUFBGTEFHUworYWNfcHJldmlvdXNfbGRmbGFncz0kTERGTEFHUworYWNfcHl0aG9u X3ZlcnNpb249YCRQWVRIT04gLWMgJ2ltcG9ydCBkaXN0dXRpbHMuc3lzY29uZmlnOyBcCisgICAg cHJpbnQgZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiVkVSU0lPTiIpJ2AKKyMg RXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJFBZVEhPTi1jb25maWciLCBzbyBpdCBjYW4gYmUg YSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRQWVRIT04tY29uZmlnOyBhY193 b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5n IGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4g IiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9weWNvbmZpZytzZXR9IiA9IHNldDsgdGhl biA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJHB5Y29uZmln IGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX3B5Y29uZmlnPSIkcHljb25m aWciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7Owor ICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGly IGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYm IGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVu c2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIg JiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAg ICBhY19jdl9wYXRoX3B5Y29uZmlnPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAg ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFj X3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQor SUZTPSRhc19zYXZlX0lGUwogCisgIHRlc3QgLXogIiRhY19jdl9wYXRoX3B5Y29uZmlnIiAmJiBh Y19jdl9wYXRoX3B5Y29uZmlnPSJubyIKKyAgOzsKK2VzYWMKK2ZpCitweWNvbmZpZz0kYWNfY3Zf cGF0aF9weWNvbmZpZworaWYgdGVzdCAtbiAiJHB5Y29uZmlnIjsgdGhlbgorICB7ICRhc19lY2hv ICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHB5Y29uZmlnIiA+JjUKKyRh c19lY2hvICIkcHljb25maWciID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0K IGZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGF4 X2N2X3B0aHJlYWRfZmxhZ3MiID4mNQotJGFzX2VjaG8gIiRheF9jdl9wdGhyZWFkX2ZsYWdzIiA+ JjY7IH0KLSAgICBpZiB0ZXN0ICJ4JGF4X2N2X3B0aHJlYWRfZmxhZ3MiID0geGZhaWxlZDsgdGhl bgotICAgICAgICBhc19mbl9lcnJvciAkPyAiLXB0aHJlYWQgZG9lcyBub3Qgd29yayIgIiRMSU5F Tk8iIDUKLSAgICBmaQotCi0gICAgUFRIUkVBRF9DRkxBR1M9IiRheF9jdl9wdGhyZWFkX2ZsYWdz IgotICAgIFBUSFJFQURfTERGTEFHUz0iJGF4X2N2X3B0aHJlYWRfZmxhZ3MiCi0gICAgUFRIUkVB RF9MSUJTPSIiCiAKIAoraWYgdGVzdCB4IiRweWNvbmZpZyIgPT0geCJubyI7IHRoZW4gOgogCi17 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBjbG9j a19nZXR0aW1lIGluIC1scnQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGNsb2NrX2dl dHRpbWUgaW4gLWxydC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9saWJfcnRfY2xvY2tf Z2V0dGltZStzZXR9IiA9IHNldDsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2 Ci1lbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1scnQgICRMSUJT IgotY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNv bmZkZWZzLmguICAqLworICAgICAgICBDUFBGTEFHUz0iJENGTEFHUyBgJFBZVEhPTiAtYyAnaW1w b3J0IGRpc3R1dGlscy5zeXNjb25maWc7IFwKKyAgICAgICAgcHJpbnQgIi1JIiArIGRpc3R1dGls cy5zeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIklOQ0xVREVQWSIpJ2AiCisgICAgQ1BQRkxBR1M9 IiRDUFBGTEFHUyBgJFBZVEhPTiAtYyAnaW1wb3J0IGRpc3R1dGlscy5zeXNjb25maWc7IFwKKyAg ICAgICAgcHJpbnQgZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiQ0ZMQUdTIikn YCIKKyAgICBMREZMQUdTPSIkTERGTEFHUyBgJFBZVEhPTiAtYyAnaW1wb3J0IGRpc3R1dGlscy5z eXNjb25maWc7IFwKKyAgICAgICAgcHJpbnQgZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfY29uZmln X3ZhcigiTElCUyIpJ2AiCisgICAgTERGTEFHUz0iJExERkxBR1MgYCRQWVRIT04gLWMgJ2ltcG9y dCBkaXN0dXRpbHMuc3lzY29uZmlnOyBcCisgICAgICAgIHByaW50IGRpc3R1dGlscy5zeXNjb25m aWcuZ2V0X2NvbmZpZ192YXIoIlNZU0xJQlMiKSdgIgorICAgIExERkxBR1M9IiRMREZMQUdTIGAk UFlUSE9OIC1jICdpbXBvcnQgZGlzdHV0aWxzLnN5c2NvbmZpZzsgXAorICAgICAgICBwcmludCAi LUwiICsgZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfcHl0aG9uX2xpYihwbGF0X3NwZWNpZmljPTEs XAorICAgICAgICBzdGFuZGFyZF9saWI9MSkgKyAiL2NvbmZpZyInYCIKKyAgICBMREZMQUdTPSIk TERGTEFHUyBgJFBZVEhPTiAtYyAnaW1wb3J0IGRpc3R1dGlscy5zeXNjb25maWc7IFwKKyAgICAg ICAgcHJpbnQgZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiTElOS0ZPUlNIQVJF RCIpJ2AiCisgICAgTERGTEFHUz0iJExERkxBR1MgYCRQWVRIT04gLWMgJ2ltcG9ydCBkaXN0dXRp bHMuc3lzY29uZmlnOyBcCisgICAgICAgIHByaW50IGRpc3R1dGlscy5zeXNjb25maWcuZ2V0X2Nv bmZpZ192YXIoIkxERkxBR1MiKSdgIgogCi0vKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHBy b3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KLSAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0 IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQwotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMg YXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLSNpZmRlZiBfX2NwbHVz cGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi1jaGFyIGNsb2NrX2dldHRpbWUgKCk7Ci1pbnQKLW1h aW4gKCkKLXsKLXJldHVybiBjbG9ja19nZXR0aW1lICgpOwotICA7Ci0gIHJldHVybiAwOwotfQot X0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X2xp Yl9ydF9jbG9ja19nZXR0aW1lPXllcwogZWxzZQotICBhY19jdl9saWJfcnRfY2xvY2tfZ2V0dGlt ZT1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAot ICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19s aWJfc2F2ZV9MSUJTCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99 OiByZXN1bHQ6ICRhY19jdl9saWJfcnRfY2xvY2tfZ2V0dGltZSIgPiY1Ci0kYXNfZWNobyAiJGFj X2N2X2xpYl9ydF9jbG9ja19nZXR0aW1lIiA+JjY7IH0KLWlmIHRlc3QgIngkYWNfY3ZfbGliX3J0 X2Nsb2NrX2dldHRpbWUiID0geCIieWVzOyB0aGVuIDoKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9B Q0VPRgotI2RlZmluZSBIQVZFX0xJQlJUIDEKLV9BQ0VPRgogCi0gIExJQlM9Ii1scnQgJExJQlMi CisgICAgICAgIENQUEZMQUdTPSIkQ0ZMQUdTIGAkUFlUSE9OLWNvbmZpZyAtLWNmbGFnc2AiCisg ICAgTERGTEFHUz0iJExERkxBR1MgYCRQWVRIT04tY29uZmlnIC0tbGRmbGFnc2AiCiAKIGZpCiAK LXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHlh amxfYWxsb2MgaW4gLWx5YWpsIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciB5YWpsX2Fs bG9jIGluIC1seWFqbC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9saWJfeWFqbF95YWps X2FsbG9jK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYK LWVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWx5YWpsICAkTElC UyIKLWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBj b25mZGVmcy5oLiAgKi8KK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJQ eXRob24uaCIgImFjX2N2X2hlYWRlcl9QeXRob25faCIgIiRhY19pbmNsdWRlc19kZWZhdWx0Igor aWYgdGVzdCAieCRhY19jdl9oZWFkZXJfUHl0aG9uX2giID0geCIieWVzOyB0aGVuIDoKIAotLyog T3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCi0g ICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBH Q0MKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGls bCBhcHBseS4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotY2hh ciB5YWpsX2FsbG9jICgpOwotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4geWFqbF9hbGxvYyAoKTsK LSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVO TyI7IHRoZW4gOgotICBhY19jdl9saWJfeWFqbF95YWpsX2FsbG9jPXllcwogZWxzZQotICBhY19j dl9saWJfeWFqbF95YWpsX2FsbG9jPW5vCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29u ZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19l eHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKKyAgYXNfZm5fZXJyb3IgJD8gIlVuYWJs ZSB0byBmaW5kIFB5dGhvbiBkZXZlbG9wbWVudCBoZWFkZXJzIiAiJExJTkVOTyIgNQogZmkKLXsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGli X3lhamxfeWFqbF9hbGxvYyIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2xpYl95YWpsX3lhamxfYWxs b2MiID4mNjsgfQotaWYgdGVzdCAieCRhY19jdl9saWJfeWFqbF95YWpsX2FsbG9jIiA9IHgiInll czsgdGhlbiA6Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9MSUJZ QUpMIDEKLV9BQ0VPRgotCi0gIExJQlM9Ii1seWFqbCAkTElCUyIKIAotZWxzZQotICBhc19mbl9l cnJvciAkPyAiQ291bGQgbm90IGZpbmQgeWFqbCIgIiRMSU5FTk8iIDUKLWZpCiAKLXsgJGFzX2Vj aG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRlZmxhdGVDb3B5 IGluIC1seiIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgZGVmbGF0ZUNvcHkgaW4gLWx6 Li4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl96X2RlZmxhdGVDb3B5K3NldH0iID0g c2V0OyB0aGVuIDoKK2FzX2FjX0xpYj1gJGFzX2VjaG8gImFjX2N2X2xpYl9weXRob24kYWNfcHl0 aG9uX3ZlcnNpb24nJ19QeUFyZ19QYXJzZVR1cGxlIiB8ICRhc190cl9zaGAKK3sgJGFzX2VjaG8g IiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIFB5QXJnX1BhcnNlVHVw bGUgaW4gLWxweXRob24kYWNfcHl0aG9uX3ZlcnNpb24iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tp bmcgZm9yIFB5QXJnX1BhcnNlVHVwbGUgaW4gLWxweXRob24kYWNfcHl0aG9uX3ZlcnNpb24uLi4g IiA+JjY7IH0KK2lmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfTGliK3NldH1cIiIgPSBzZXQ7IHRo ZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19jaGVja19saWJf c2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbHogICRMSUJTIgorTElCUz0iLWxweXRob24kYWNfcHl0 aG9uX3ZlcnNpb24gICRMSUJTIgogY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3Qu JGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCkBAIC03NjMyLDE4OTMgKzUzNzcsMTE3 MyBAQCBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAjaWZkZWYg X19jcGx1c3BsdXMKIGV4dGVybiAiQyIKICNlbmRpZgotY2hhciBkZWZsYXRlQ29weSAoKTsKK2No YXIgUHlBcmdfUGFyc2VUdXBsZSAoKTsKIGludAogbWFpbiAoKQogewotcmV0dXJuIGRlZmxhdGVD b3B5ICgpOworcmV0dXJuIFB5QXJnX1BhcnNlVHVwbGUgKCk7CiAgIDsKICAgcmV0dXJuIDA7CiB9 CiBfQUNFT0YKIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3Zf bGliX3pfZGVmbGF0ZUNvcHk9eWVzCisgIGV2YWwgIiRhc19hY19MaWI9eWVzIgogZWxzZQotICBh Y19jdl9saWJfel9kZWZsYXRlQ29weT1ubworICBldmFsICIkYXNfYWNfTGliPW5vIgogZmkKIHJt IC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAogICAgIGNvbmZ0ZXN0 JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJT CiBmaQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRh Y19jdl9saWJfel9kZWZsYXRlQ29weSIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2xpYl96X2RlZmxh dGVDb3B5IiA+JjY7IH0KLWlmIHRlc3QgIngkYWNfY3ZfbGliX3pfZGVmbGF0ZUNvcHkiID0geCIi eWVzOyB0aGVuIDoKK2V2YWwgYWNfcmVzPVwkJGFzX2FjX0xpYgorCSAgICAgICB7ICRhc19lY2hv ICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNf ZWNobyAiJGFjX3JlcyIgPiY2OyB9CitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0xpYiJcIiA9 IHgieWVzIjsgdGhlbiA6CiAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFW RV9MSUJaIDEKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFX0xJQnB5dGhvbiRhY19weXRob25fdmVy c2lvbiIgfCAkYXNfdHJfY3BwYCAxCiBfQUNFT0YKIAotICBMSUJTPSItbHogJExJQlMiCi0KLWVs c2UKLSAgYXNfZm5fZXJyb3IgJD8gIkNvdWxkIG5vdCBmaW5kIHpsaWIiICIkTElORU5PIiA1Ci1m aQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZv ciBsaWJpY29udl9vcGVuIGluIC1saWNvbnYiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9y IGxpYmljb252X29wZW4gaW4gLWxpY29udi4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9s aWJfaWNvbnZfbGliaWNvbnZfb3BlbitzZXR9IiA9IHNldDsgdGhlbiA6Ci0gICRhc19lY2hvX24g IihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJ QlM9Ii1saWNvbnYgICRMSUJTIgotY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3Qu JGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLworICBMSUJTPSItbHB5dGhvbiRhY19weXRo b25fdmVyc2lvbiAkTElCUyIKIAotLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5 cGUgdG8gYXZvaWQgYW4gZXJyb3IuCi0gICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRj aCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3Vt ZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMK LWV4dGVybiAiQyIKLSNlbmRpZgotY2hhciBsaWJpY29udl9vcGVuICgpOwotaW50Ci1tYWluICgp Ci17Ci1yZXR1cm4gbGliaWNvbnZfb3BlbiAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VP RgotaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9saWJfaWNv bnZfbGliaWNvbnZfb3Blbj15ZXMKLWVsc2UKLSAgYWNfY3ZfbGliX2ljb252X2xpYmljb252X29w ZW49bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwK LSAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tf bGliX3NhdmVfTElCUwotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogcmVzdWx0OiAkYWNfY3ZfbGliX2ljb252X2xpYmljb252X29wZW4iID4mNQotJGFzX2VjaG8g IiRhY19jdl9saWJfaWNvbnZfbGliaWNvbnZfb3BlbiIgPiY2OyB9Ci1pZiB0ZXN0ICJ4JGFjX2N2 X2xpYl9pY29udl9saWJpY29udl9vcGVuIiA9IHgiInllczsgdGhlbiA6Ci0gIGxpYmljb252PSJ5 IgogZWxzZQotICBsaWJpY29udj0ibiIKKyAgYXNfZm5fZXJyb3IgJD8gIlVuYWJsZSB0byBmaW5k IGEgc3VpdGFibGUgcHl0aG9uIGRldmVsb3BtZW50IGxpYnJhcnkiICIkTElORU5PIiA1CiBmaQog CitDUFBGTEFHUz0kYWNfcHJldmlvdXNfY3BwZmxhZ3MKK0xETEZBR1M9JGFjX3ByZXZpb3VzX2xk ZmxhZ3MKIAogCi0jIENoZWNrcyBmb3IgaGVhZGVyIGZpbGVzLgotIyBUaGUgVWx0cml4IDQuMiBt aXBzIGJ1aWx0aW4gYWxsb2NhIGRlY2xhcmVkIGJ5IGFsbG9jYS5oIG9ubHkgd29ya3MKLSMgZm9y IGNvbnN0YW50IGFyZ3VtZW50cy4gIFVzZWxlc3MhCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB3b3JraW5nIGFsbG9jYS5oIiA+JjUKLSRhc19l Y2hvX24gImNoZWNraW5nIGZvciB3b3JraW5nIGFsbG9jYS5oLi4uICIgPiY2OyB9Ci1pZiB0ZXN0 ICIke2FjX2N2X3dvcmtpbmdfYWxsb2NhX2grc2V0fSIgPSBzZXQ7IHRoZW4gOgorZmkKKyMgRXh0 cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAieGdldHRleHQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFt IG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHhnZXR0ZXh0OyBhY193b3JkPSQyCit7ICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIg PiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRl c3QgIiR7YWNfY3ZfcGF0aF9YR0VUVEVYVCtzZXR9IiA9IHNldDsgdGhlbiA6CiAgICRhc19lY2hv X24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNv bmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxhbGxvY2Eu aD4KLWludAotbWFpbiAoKQotewotY2hhciAqcCA9IChjaGFyICopIGFsbG9jYSAoMiAqIHNpemVv ZiAoaW50KSk7Ci0JCQkgIGlmIChwKSByZXR1cm4gMDsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9B Q0VPRgotaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl93b3Jr aW5nX2FsbG9jYV9oPXllcwotZWxzZQotICBhY19jdl93b3JraW5nX2FsbG9jYV9oPW5vCisgIGNh c2UgJFhHRVRURVhUIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX1hHRVRU RVhUPSIkWEdFVFRFWFQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBw YXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9S Citmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXog IiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVj dXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRh Y19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7 IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX1hHRVRURVhUPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4 ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5k ICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2Rv bmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIHRlc3QgLXogIiRhY19jdl9wYXRoX1hH RVRURVhUIiAmJiBhY19jdl9wYXRoX1hHRVRURVhUPSJubyIKKyAgOzsKK2VzYWMKIGZpCi1ybSAt ZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICBjb25mdGVzdCRh Y19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorWEdFVFRFWFQ9JGFjX2N2X3BhdGhfWEdFVFRFWFQK K2lmIHRlc3QgLW4gIiRYR0VUVEVYVCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRYR0VUVEVYVCIgPiY1CiskYXNfZWNobyAiJFhHRVRU RVhUIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5F Tk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiBmaQoteyAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl93b3JraW5nX2Fs bG9jYV9oIiA+JjUKLSRhc19lY2hvICIkYWNfY3Zfd29ya2luZ19hbGxvY2FfaCIgPiY2OyB9Ci1p ZiB0ZXN0ICRhY19jdl93b3JraW5nX2FsbG9jYV9oID0geWVzOyB0aGVuCiAKLSRhc19lY2hvICIj ZGVmaW5lIEhBVkVfQUxMT0NBX0ggMSIgPj5jb25mZGVmcy5oCiAKK2lmIHRlc3QgeCIke1hHRVRU RVhUfSIgPT0geCJubyIKK3RoZW4KKyAgICBhc19mbl9lcnJvciAkPyAiVW5hYmxlIHRvIGZpbmQg eGdldHRleHQsIHBsZWFzZSBpbnN0YWxsIHhnZXR0ZXh0IiAiJExJTkVOTyIgNQogZmkKLQoteyAk YXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYWxsb2Nh IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBhbGxvY2EuLi4gIiA+JjY7IH0KLWlmIHRl c3QgIiR7YWNfY3ZfZnVuY19hbGxvY2Ffd29ya3Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorIyBFeHRy YWN0IHRoZSBmaXJzdCB3b3JkIG9mICJhczg2Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1l IHdpdGggYXJncy4KK3NldCBkdW1teSBhczg2OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNf ZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNf Y3ZfcGF0aF9BUzg2K3NldH0iID0gc2V0OyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkg IiA+JjYKIGVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4 dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2lmZGVmIF9fR05VQ19fCi0jIGRlZmluZSBhbGxv Y2EgX19idWlsdGluX2FsbG9jYQotI2Vsc2UKLSMgaWZkZWYgX01TQ19WRVIKLSMgIGluY2x1ZGUg PG1hbGxvYy5oPgotIyAgZGVmaW5lIGFsbG9jYSBfYWxsb2NhCi0jIGVsc2UKLSMgIGlmZGVmIEhB VkVfQUxMT0NBX0gKLSMgICBpbmNsdWRlIDxhbGxvY2EuaD4KLSMgIGVsc2UKLSMgICBpZmRlZiBf QUlYCi0gI3ByYWdtYSBhbGxvY2EKLSMgICBlbHNlCi0jICAgIGlmbmRlZiBhbGxvY2EgLyogcHJl ZGVmaW5lZCBieSBIUCBjYyArT2xpYmNhbGxzICovCi1jaGFyICphbGxvY2EgKCk7Ci0jICAgIGVu ZGlmCi0jICAgZW5kaWYKLSMgIGVuZGlmCi0jIGVuZGlmCi0jZW5kaWYKLQotaW50Ci1tYWluICgp Ci17Ci1jaGFyICpwID0gKGNoYXIgKikgYWxsb2NhICgxKTsKLQkJCQkgICAgaWYgKHApIHJldHVy biAwOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIk TElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X2Z1bmNfYWxsb2NhX3dvcmtzPXllcwotZWxzZQotICBh Y19jdl9mdW5jX2FsbG9jYV93b3Jrcz1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNv bmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNf ZXh0Ci1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6 ICRhY19jdl9mdW5jX2FsbG9jYV93b3JrcyIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2Z1bmNfYWxs b2NhX3dvcmtzIiA+JjY7IH0KLQotaWYgdGVzdCAkYWNfY3ZfZnVuY19hbGxvY2Ffd29ya3MgPSB5 ZXM7IHRoZW4KLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9BTExPQ0EgMSIgPj5jb25mZGVmcy5o CisgIGNhc2UgJEFTODYgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfQVM4 Nj0iJEFTODYiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgor ICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3Ig YXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19k aXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxl X2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVj X2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRo ZW4KKyAgICBhY19jdl9wYXRoX0FTODY9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisg ICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8k YWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25l CitJRlM9JGFzX3NhdmVfSUZTCiAKKyAgdGVzdCAteiAiJGFjX2N2X3BhdGhfQVM4NiIgJiYgYWNf Y3ZfcGF0aF9BUzg2PSJubyIKKyAgOzsKK2VzYWMKK2ZpCitBUzg2PSRhY19jdl9wYXRoX0FTODYK K2lmIHRlc3QgLW4gIiRBUzg2IjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5l bm8tJExJTkVOT306IHJlc3VsdDogJEFTODYiID4mNQorJGFzX2VjaG8gIiRBUzg2IiA+JjY7IH0K IGVsc2UKLSAgIyBUaGUgU1ZSMyBsaWJQVyBhbmQgU1ZSNCBsaWJ1Y2IgYm90aCBjb250YWluIGlu Y29tcGF0aWJsZSBmdW5jdGlvbnMKLSMgdGhhdCBjYXVzZSB0cm91YmxlLiAgU29tZSB2ZXJzaW9u cyBkbyBub3QgZXZlbiBjb250YWluIGFsbG9jYSBvcgotIyBjb250YWluIGEgYnVnZ3kgdmVyc2lv bi4gIElmIHlvdSBzdGlsbCB3YW50IHRvIHVzZSB0aGVpciBhbGxvY2EsCi0jIHVzZSBhciB0byBl eHRyYWN0IGFsbG9jYS5vIGZyb20gdGhlbSBpbnN0ZWFkIG9mIGNvbXBpbGluZyBhbGxvY2EuYy4K LQotQUxMT0NBPVwke0xJQk9CSkRJUn1hbGxvY2EuJGFjX29iamV4dAotCi0kYXNfZWNobyAiI2Rl ZmluZSBDX0FMTE9DQSAxIiA+PmNvbmZkZWZzLmgKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9Citm aQogCiAKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcg d2hldGhlciBcYGFsbG9jYS5jJyBuZWVkcyBDcmF5IGhvb2tzIiA+JjUKLSRhc19lY2hvX24gImNo ZWNraW5nIHdoZXRoZXIgXGBhbGxvY2EuYycgbmVlZHMgQ3JheSBob29rcy4uLiAiID4mNjsgfQot aWYgdGVzdCAiJHthY19jdl9vc19jcmF5K3NldH0iID0gc2V0OyB0aGVuIDoKK2lmIHRlc3QgeCIk e0FTODZ9IiA9PSB4Im5vIgordGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJVbmFibGUgdG8gZmlu ZCBhczg2LCBwbGVhc2UgaW5zdGFsbCBhczg2IiAiJExJTkVOTyIgNQorZmkKKyMgRXh0cmFjdCB0 aGUgZmlyc3Qgd29yZCBvZiAibGQ4NiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRo IGFyZ3MuCitzZXQgZHVtbXkgbGQ4NjsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9f biAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Bh dGhfTEQ4NitzZXR9IiA9IHNldDsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2 CiBlbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8q IGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpZiBkZWZpbmVkIENSQVkgJiYgISBkZWZpbmVkIENSQVky Ci13ZWJlY3JheQotI2Vsc2UKLXdlbm90YmVjcmF5Ci0jZW5kaWYKKyAgY2FzZSAkTEQ4NiBpbgor ICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9MRDg2PSIkTEQ4NiIgIyBMZXQgdGhl IHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3Nh dmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2Rv CisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAg ICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAg aWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94 ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhf TEQ4Nj0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0 IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMK IAotX0FDRU9GCi1pZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Ci0g ICRFR1JFUCAid2ViZWNyYXkiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6Ci0gIGFjX2N2X29zX2Ny YXk9eWVzCi1lbHNlCi0gIGFjX2N2X29zX2NyYXk9bm8KKyAgdGVzdCAteiAiJGFjX2N2X3BhdGhf TEQ4NiIgJiYgYWNfY3ZfcGF0aF9MRDg2PSJubyIKKyAgOzsKK2VzYWMKIGZpCi1ybSAtZiBjb25m dGVzdCoKLQorTEQ4Nj0kYWNfY3ZfcGF0aF9MRDg2CitpZiB0ZXN0IC1uICIkTEQ4NiI7IHRoZW4K KyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRMRDg2 IiA+JjUKKyRhc19lY2hvICIkTEQ4NiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4m NjsgfQogZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0 OiAkYWNfY3Zfb3NfY3JheSIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X29zX2NyYXkiID4mNjsgfQot aWYgdGVzdCAkYWNfY3Zfb3NfY3JheSA9IHllczsgdGhlbgotICBmb3IgYWNfZnVuYyBpbiBfZ2V0 YjY3IEdFVEI2NyBnZXRiNjc7IGRvCi0gICAgYXNfYWNfdmFyPWAkYXNfZWNobyAiYWNfY3ZfZnVu Y18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCi1hY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICIk YWNfZnVuYyIgIiRhc19hY192YXIiCi1pZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX3ZhciJcIiA9 IHgieWVzIjsgdGhlbiA6Ci0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgQ1JB WV9TVEFDS1NFR19FTkQgJGFjX2Z1bmMKLV9BQ0VPRgogCi0gICAgYnJlYWsKLWZpCiAKLSAgZG9u ZQoraWYgdGVzdCB4IiR7TEQ4Nn0iID09IHgibm8iCit0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8g IlVuYWJsZSB0byBmaW5kIGxkODYsIHBsZWFzZSBpbnN0YWxsIGxkODYiICIkTElORU5PIiA1CiBm aQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHN0 YWNrIGRpcmVjdGlvbiBmb3IgQyBhbGxvY2EiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgc3Rh Y2sgZGlyZWN0aW9uIGZvciBDIGFsbG9jYS4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9j X3N0YWNrX2RpcmVjdGlvbitzZXR9IiA9IHNldDsgdGhlbiA6CisjIEV4dHJhY3QgdGhlIGZpcnN0 IHdvcmQgb2YgImJjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitz ZXQgZHVtbXkgYmNjOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8t JExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2lu ZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9CQ0Mrc2V0 fSIgPSBzZXQ7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBp ZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6Ci0gIGFjX2N2X2Nfc3RhY2tf ZGlyZWN0aW9uPTAKLWVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3Qu JGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWlu dAotZmluZF9zdGFja19kaXJlY3Rpb24gKCkKLXsKLSAgc3RhdGljIGNoYXIgKmFkZHIgPSAwOwot ICBhdXRvIGNoYXIgZHVtbXk7Ci0gIGlmIChhZGRyID09IDApCi0gICAgewotICAgICAgYWRkciA9 ICZkdW1teTsKLSAgICAgIHJldHVybiBmaW5kX3N0YWNrX2RpcmVjdGlvbiAoKTsKLSAgICB9Ci0g IGVsc2UKLSAgICByZXR1cm4gKCZkdW1teSA+IGFkZHIpID8gMSA6IC0xOwotfQorICBjYXNlICRC Q0MgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfQkNDPSIkQkNDIiAjIExl dCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAg YXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFU SAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9 LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBk bworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190 ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3Zf cGF0aF9CQ0M9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVj X2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVf SUZTCiAKLWludAotbWFpbiAoKQotewotICByZXR1cm4gZmluZF9zdGFja19kaXJlY3Rpb24gKCkg PCAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKLSAg YWNfY3ZfY19zdGFja19kaXJlY3Rpb249MQotZWxzZQotICBhY19jdl9jX3N0YWNrX2RpcmVjdGlv bj0tMQotZmkKLXJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5v dXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKLSAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5i ZWFtIGNvbmZ0ZXN0LiRhY19leHQKKyAgdGVzdCAteiAiJGFjX2N2X3BhdGhfQkNDIiAmJiBhY19j dl9wYXRoX0JDQz0ibm8iCisgIDs7Citlc2FjCiBmaQotCitCQ0M9JGFjX2N2X3BhdGhfQkNDCitp ZiB0ZXN0IC1uICIkQkNDIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8t JExJTkVOT306IHJlc3VsdDogJEJDQyIgPiY1CiskYXNfZWNobyAiJEJDQyIgPiY2OyB9CitlbHNl CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIg PiY1CiskYXNfZWNobyAibm8iID4mNjsgfQogZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xp bmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfY19zdGFja19kaXJlY3Rpb24iID4mNQotJGFz X2VjaG8gIiRhY19jdl9jX3N0YWNrX2RpcmVjdGlvbiIgPiY2OyB9Ci1jYXQgPj5jb25mZGVmcy5o IDw8X0FDRU9GCi0jZGVmaW5lIFNUQUNLX0RJUkVDVElPTiAkYWNfY3ZfY19zdGFja19kaXJlY3Rp b24KLV9BQ0VPRgogCiAKK2lmIHRlc3QgeCIke0JDQ30iID09IHgibm8iCit0aGVuCisgICAgYXNf Zm5fZXJyb3IgJD8gIlVuYWJsZSB0byBmaW5kIGJjYywgcGxlYXNlIGluc3RhbGwgYmNjIiAiJExJ TkVOTyIgNQogZmkKKyMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiaWFzbCIsIHNvIGl0IGNh biBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgaWFzbDsgYWNfd29yZD0k MgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Ig JGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2 OyB9CitpZiB0ZXN0ICIke2FjX2N2X3BhdGhfSUFTTCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRh c19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJElBU0wgaW4KKyAgW1xcL10q IHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfSUFTTD0iJElBU0wiICMgTGV0IHRoZSB1c2VyIG92 ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0k SUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9 JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFj X2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVz dCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rp ci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX0lBU0w9IiRh c19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xp bmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Cisg ICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCiAKLWZvciBh Y19oZWFkZXIgaW4gIFwKLSAgICAgICAgICAgICAgICBhcnBhL2luZXQuaCBmY250bC5oIGludHR5 cGVzLmggbGliaW50bC5oIGxpbWl0cy5oIG1hbGxvYy5oIFwKLSAgICAgICAgICAgICAgICBuZXRk Yi5oIG5ldGluZXQvaW4uaCBzdGRkZWYuaCBzdGRpbnQuaCBzdGRsaWIuaCBzdHJpbmcuaCBcCi0g ICAgICAgICAgICAgICAgc3RyaW5ncy5oIHN5cy9maWxlLmggc3lzL2lvY3RsLmggc3lzL21vdW50 Lmggc3lzL3BhcmFtLmggXAotICAgICAgICAgICAgICAgIHN5cy9zb2NrZXQuaCBzeXMvc3RhdHZm cy5oIHN5cy90aW1lLmggc3lzbG9nLmggdGVybWlvcy5oIFwKLSAgICAgICAgICAgICAgICB1bmlz dGQuaCB5YWpsL3lhamxfdmVyc2lvbi5oIFwKKyAgdGVzdCAteiAiJGFjX2N2X3BhdGhfSUFTTCIg JiYgYWNfY3ZfcGF0aF9JQVNMPSJubyIKKyAgOzsKK2VzYWMKK2ZpCitJQVNMPSRhY19jdl9wYXRo X0lBU0wKK2lmIHRlc3QgLW4gIiRJQVNMIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJElBU0wiID4mNQorJGFzX2VjaG8gIiRJQVNMIiA+ JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBy ZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQogCi1kbyA6Ci0gIGFzX2Fj X0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAK LWFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFz X2FjX0hlYWRlciIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgotaWYgZXZhbCB0ZXN0IFwieFwkIiRh c19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FD RU9GCi0jZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEK LV9BQ0VPRgogCitpZiB0ZXN0IHgiJHtJQVNMfSIgPT0geCJubyIKK3RoZW4KKyAgICBhc19mbl9l cnJvciAkPyAiVW5hYmxlIHRvIGZpbmQgaWFzbCwgcGxlYXNlIGluc3RhbGwgaWFzbCIgIiRMSU5F Tk8iIDUKIGZpCiAKLWRvbmUKLQorYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVO TyIgInV1aWQvdXVpZC5oIiAiYWNfY3ZfaGVhZGVyX3V1aWRfdXVpZF9oIiAiJGFjX2luY2x1ZGVz X2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl91dWlkX3V1aWRfaCIgPSB4IiJ5ZXM7 IHRoZW4gOgogCi0jIENoZWNrcyBmb3IgdHlwZWRlZnMsIHN0cnVjdHVyZXMsIGFuZCBjb21waWxl ciBjaGFyYWN0ZXJpc3RpY3MuCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IGNoZWNraW5nIGZvciBzdGRib29sLmggdGhhdCBjb25mb3JtcyB0byBDOTkiID4mNQotJGFz X2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN0ZGJvb2wuaCB0aGF0IGNvbmZvcm1zIHRvIEM5OS4uLiAi ID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9oZWFkZXJfc3RkYm9vbF9oK3NldH0iID0gc2V0OyB0 aGVuIDoKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNr aW5nIGZvciB1dWlkX2NsZWFyIGluIC1sdXVpZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBm b3IgdXVpZF9jbGVhciBpbiAtbHV1aWQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGli X3V1aWRfdXVpZF9jbGVhcitzZXR9IiA9IHNldDsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNo ZWQpICIgPiY2CiBlbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRh Y19leHQKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWx1dWlkICAkTElC UyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBj b25mZGVmcy5oLiAgKi8KIAotI2luY2x1ZGUgPHN0ZGJvb2wuaD4KLSNpZm5kZWYgYm9vbAotICJl cnJvcjogYm9vbCBpcyBub3QgZGVmaW5lZCIKLSNlbmRpZgotI2lmbmRlZiBmYWxzZQotICJlcnJv cjogZmFsc2UgaXMgbm90IGRlZmluZWQiCi0jZW5kaWYKLSNpZiBmYWxzZQotICJlcnJvcjogZmFs c2UgaXMgbm90IDAiCi0jZW5kaWYKLSNpZm5kZWYgdHJ1ZQotICJlcnJvcjogdHJ1ZSBpcyBub3Qg ZGVmaW5lZCIKLSNlbmRpZgotI2lmIHRydWUgIT0gMQotICJlcnJvcjogdHJ1ZSBpcyBub3QgMSIK LSNlbmRpZgotI2lmbmRlZiBfX2Jvb2xfdHJ1ZV9mYWxzZV9hcmVfZGVmaW5lZAotICJlcnJvcjog X19ib29sX3RydWVfZmFsc2VfYXJlX2RlZmluZWQgaXMgbm90IGRlZmluZWQiCisvKiBPdmVycmlk ZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBj aGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAg YnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5 LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgogI2VuZGlmCi0KLQlzdHJ1Y3Qg cyB7IF9Cb29sIHM6IDE7IF9Cb29sIHQ7IH0gczsKLQotCWNoYXIgYVt0cnVlID09IDEgPyAxIDog LTFdOwotCWNoYXIgYltmYWxzZSA9PSAwID8gMSA6IC0xXTsKLQljaGFyIGNbX19ib29sX3RydWVf ZmFsc2VfYXJlX2RlZmluZWQgPT0gMSA/IDEgOiAtMV07Ci0JY2hhciBkWyhib29sKSAwLjUgPT0g dHJ1ZSA/IDEgOiAtMV07Ci0JYm9vbCBlID0gJnM7Ci0JY2hhciBmWyhfQm9vbCkgMC4wID09IGZh bHNlID8gMSA6IC0xXTsKLQljaGFyIGdbdHJ1ZV07Ci0JY2hhciBoW3NpemVvZiAoX0Jvb2wpXTsK LQljaGFyIGlbc2l6ZW9mIHMudF07Ci0JZW51bSB7IGogPSBmYWxzZSwgayA9IHRydWUsIGwgPSBm YWxzZSAqIHRydWUsIG0gPSB0cnVlICogMjU2IH07Ci0JLyogVGhlIGZvbGxvd2luZyBmYWlscyBm b3IKLQkgICBIUCBhQysrL0FOU0kgQyBCMzkxMEIgQS4wNS41NSBbRGVjIDA0IDIwMDNdLiAqLwot CV9Cb29sIG5bbV07Ci0JY2hhciBvW3NpemVvZiBuID09IG0gKiBzaXplb2YgblswXSA/IDEgOiAt MV07Ci0JY2hhciBwWy0xIC0gKF9Cb29sKSAwIDwgMCAmJiAtMSAtIChib29sKSAwIDwgMCA/IDEg OiAtMV07Ci0jCWlmIGRlZmluZWQgX194bGNfXyB8fCBkZWZpbmVkIF9fR05VQ19fCi0JIC8qIENh dGNoIGEgYnVnIGluIElCTSBBSVggeGxjIGNvbXBpbGVyIHZlcnNpb24gNi4wLjAuMAotCSAgICBy ZXBvcnRlZCBieSBKYW1lcyBMZW1sZXkgb24gMjAwNS0xMC0wNTsgc2VlCi0JICAgIGh0dHA6Ly9s aXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctY29yZXV0aWxzLzIwMDUtMTAvbXNnMDAwODYu aHRtbAotCSAgICBUaGlzIHRlc3QgaXMgbm90IHF1aXRlIHJpZ2h0LCBzaW5jZSB4bGMgaXMgYWxs b3dlZCB0bwotCSAgICByZWplY3QgdGhpcyBwcm9ncmFtLCBhcyB0aGUgaW5pdGlhbGl6ZXIgZm9y IHhsY2J1ZyBpcwotCSAgICBub3Qgb25lIG9mIHRoZSBmb3JtcyB0aGF0IEMgcmVxdWlyZXMgc3Vw cG9ydCBmb3IuCi0JICAgIEhvd2V2ZXIsIGRvaW5nIHRoZSB0ZXN0IHJpZ2h0IHdvdWxkIHJlcXVp cmUgYSBydW50aW1lCi0JICAgIHRlc3QsIGFuZCB0aGF0IHdvdWxkIG1ha2UgY3Jvc3MtY29tcGls YXRpb24gaGFyZGVyLgotCSAgICBMZXQgdXMgaG9wZSB0aGF0IElCTSBmaXhlcyB0aGUgeGxjIGJ1 ZywgYW5kIGFsc28gYWRkcwotCSAgICBzdXBwb3J0IGZvciB0aGlzIGtpbmQgb2YgY29uc3RhbnQg ZXhwcmVzc2lvbi4gIEluIHRoZQotCSAgICBtZWFudGltZSwgdGhpcyB0ZXN0IHdpbGwgcmVqZWN0 IHhsYywgd2hpY2ggaXMgT0ssIHNpbmNlCi0JICAgIG91ciBzdGRib29sLmggc3Vic3RpdHV0ZSBz aG91bGQgc3VmZmljZS4gIFdlIGFsc28gdGVzdAotCSAgICB0aGlzIHdpdGggR0NDLCB3aGVyZSBp dCBzaG91bGQgd29yaywgdG8gZGV0ZWN0IG1vcmUKLQkgICAgcXVpY2tseSB3aGV0aGVyIHNvbWVv bmUgbWVzc2VzIHVwIHRoZSB0ZXN0IGluIHRoZQotCSAgICBmdXR1cmUuICAqLwotCSBjaGFyIGRp Z3NbXSA9ICIwMTIzNDU2Nzg5IjsKLQkgaW50IHhsY2J1ZyA9IDEgLyAoJihkaWdzICsgNSlbLTIg KyAoYm9vbCkgMV0gPT0gJmRpZ3NbNF0gPyAxIDogLTEpOwotIwllbmRpZgotCS8qIENhdGNoIGEg YnVnIGluIGFuIEhQLVVYIEMgY29tcGlsZXIuICBTZWUKLQkgICBodHRwOi8vZ2NjLmdudS5vcmcv bWwvZ2NjLXBhdGNoZXMvMjAwMy0xMi9tc2cwMjMwMy5odG1sCi0JICAgaHR0cDovL2xpc3RzLmdu dS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1jb3JldXRpbHMvMjAwNS0xMS9tc2cwMDE2MS5odG1sCi0J ICovCi0JX0Jvb2wgcSA9IHRydWU7Ci0JX0Jvb2wgKnBxID0gJnE7Ci0KK2NoYXIgdXVpZF9jbGVh ciAoKTsKIGludAogbWFpbiAoKQogewotCi0JKnBxIHw9IHE7Ci0JKnBxIHw9ICEgcTsKLQkvKiBS ZWZlciB0byBldmVyeSBkZWNsYXJlZCB2YWx1ZSwgdG8gYXZvaWQgY29tcGlsZXIgb3B0aW1pemF0 aW9ucy4gICovCi0JcmV0dXJuICghYSArICFiICsgIWMgKyAhZCArICFlICsgIWYgKyAhZyArICFo ICsgIWkgKyAhIWogKyAhayArICEhbAotCQkrICFtICsgIW4gKyAhbyArICFwICsgIXEgKyAhcHEp OwotCityZXR1cm4gdXVpZF9jbGVhciAoKTsKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgot aWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9oZWFkZXJf c3RkYm9vbF9oPXllcwotZWxzZQotICBhY19jdl9oZWFkZXJfc3RkYm9vbF9oPW5vCi1maQotcm0g LWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0 Ci1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRh Y19jdl9oZWFkZXJfc3RkYm9vbF9oIiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfaGVhZGVyX3N0ZGJv b2xfaCIgPiY2OyB9Ci1hY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJfQm9vbCIgImFjX2N2 X3R5cGVfX0Jvb2wiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKLWlmIHRlc3QgIngkYWNfY3ZfdHlw ZV9fQm9vbCIgPSB4IiJ5ZXM7IHRoZW4gOgotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0j ZGVmaW5lIEhBVkVfX0JPT0wgMQotX0FDRU9GCi0KLQotZmkKLQotaWYgdGVzdCAkYWNfY3ZfaGVh ZGVyX3N0ZGJvb2xfaCA9IHllczsgdGhlbgotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX1NUREJP T0xfSCAxIiA+PmNvbmZkZWZzLmgKLQotZmkKLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGlu ZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgdWlkX3QgaW4gc3lzL3R5cGVzLmgiID4mNQotJGFz X2VjaG9fbiAiY2hlY2tpbmcgZm9yIHVpZF90IGluIHN5cy90eXBlcy5oLi4uICIgPiY2OyB9Ci1p ZiB0ZXN0ICIke2FjX2N2X3R5cGVfdWlkX3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICAkYXNfZWNo b19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5j b25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8c3lzL3R5 cGVzLmg+Ci0KLV9BQ0VPRgotaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+ JjUgfAotICAkRUdSRVAgInVpZF90IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgotICBhY19jdl90 eXBlX3VpZF90PXllcwotZWxzZQotICBhY19jdl90eXBlX3VpZF90PW5vCi1maQotcm0gLWYgY29u ZnRlc3QqCi0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJl c3VsdDogJGFjX2N2X3R5cGVfdWlkX3QiID4mNQotJGFzX2VjaG8gIiRhY19jdl90eXBlX3VpZF90 IiA+JjY7IH0KLWlmIHRlc3QgJGFjX2N2X3R5cGVfdWlkX3QgPSBubzsgdGhlbgotCi0kYXNfZWNo byAiI2RlZmluZSB1aWRfdCBpbnQiID4+Y29uZmRlZnMuaAotCi0KLSRhc19lY2hvICIjZGVmaW5l IGdpZF90IGludCIgPj5jb25mZGVmcy5oCi0KLWZpCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2Fz X2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGlubGluZSIgPiY1Ci0kYXNfZWNob19uICJj aGVja2luZyBmb3IgaW5saW5lLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2NfaW5saW5l K3NldH0iID0gc2V0OyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UK LSAgYWNfY3ZfY19pbmxpbmU9bm8KLWZvciBhY19rdyBpbiBpbmxpbmUgX19pbmxpbmVfXyBfX2lu bGluZTsgZG8KLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAot LyogZW5kIGNvbmZkZWZzLmguICAqLwotI2lmbmRlZiBfX2NwbHVzcGx1cwotdHlwZWRlZiBpbnQg Zm9vX3Q7Ci1zdGF0aWMgJGFjX2t3IGZvb190IHN0YXRpY19mb28gKCkge3JldHVybiAwOyB9Ci0k YWNfa3cgZm9vX3QgZm9vICgpIHtyZXR1cm4gMDsgfQotI2VuZGlmCi0KLV9BQ0VPRgotaWYgYWNf Zm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9jX2lubGluZT0kYWNf a3cKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX3V1 aWRfdXVpZF9jbGVhcj15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX3V1aWRfdXVpZF9jbGVhcj1ubwog ZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3Qu JGFjX2V4dAotICB0ZXN0ICIkYWNfY3ZfY19pbmxpbmUiICE9IG5vICYmIGJyZWFrCi1kb25lCi0K K3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0 ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9M SUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6 ICRhY19jdl9saWJfdXVpZF91dWlkX2NsZWFyIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX3V1 aWRfdXVpZF9jbGVhciIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl91dWlkX3V1aWRfY2xl YXIiID0geCIieWVzOyB0aGVuIDoKKyAgbGlidXVpZD0ieSIKIGZpCi17ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2NfaW5saW5lIiA+JjUKLSRh c19lY2hvICIkYWNfY3ZfY19pbmxpbmUiID4mNjsgfQogCi1jYXNlICRhY19jdl9jX2lubGluZSBp bgotICBpbmxpbmUgfCB5ZXMpIDs7Ci0gICopCi0gICAgY2FzZSAkYWNfY3ZfY19pbmxpbmUgaW4K LSAgICAgIG5vKSBhY192YWw9OzsKLSAgICAgICopIGFjX3ZhbD0kYWNfY3ZfY19pbmxpbmU7Owot ICAgIGVzYWMKLSAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jaWZuZGVmIF9fY3BsdXNw bHVzCi0jZGVmaW5lIGlubGluZSAkYWNfdmFsCi0jZW5kaWYKLV9BQ0VPRgotICAgIDs7Ci1lc2Fj CiAKLWFjX2ZuX2NfZmluZF9pbnRYX3QgIiRMSU5FTk8iICIxNiIgImFjX2N2X2NfaW50MTZfdCIK LWNhc2UgJGFjX2N2X2NfaW50MTZfdCBpbiAjKAotICBub3x5ZXMpIDs7ICMoCi0gICopCitmaQog Ci1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGludDE2X3QgJGFjX2N2X2NfaW50 MTZfdAotX0FDRU9GCi07OwotZXNhYwogCi1hY19mbl9jX2ZpbmRfaW50WF90ICIkTElORU5PIiAi MzIiICJhY19jdl9jX2ludDMyX3QiCi1jYXNlICRhY19jdl9jX2ludDMyX3QgaW4gIygKLSAgbm98 eWVzKSA7OyAjKAotICAqKQorYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIg InV1aWQuaCIgImFjX2N2X2hlYWRlcl91dWlkX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lm IHRlc3QgIngkYWNfY3ZfaGVhZGVyX3V1aWRfaCIgPSB4IiJ5ZXM7IHRoZW4gOgorICBsaWJ1dWlk PSJ5IgorZmkKIAotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBpbnQzMl90ICRh Y19jdl9jX2ludDMyX3QKLV9BQ0VPRgotOzsKLWVzYWMKIAotYWNfZm5fY19maW5kX2ludFhfdCAi JExJTkVOTyIgIjY0IiAiYWNfY3ZfY19pbnQ2NF90IgotY2FzZSAkYWNfY3ZfY19pbnQ2NF90IGlu ICMoCi0gIG5vfHllcykgOzsgIygKLSAgKikKK2lmIHRlc3QgIiRsaWJ1dWlkIiAhPSAieSI7IHRo ZW4gOgogCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGludDY0X3QgJGFjX2N2 X2NfaW50NjRfdAotX0FDRU9GCi07OwotZXNhYworICAgIGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3Qg ZmluZCBhIHZhbGlkIHV1aWQgbGlicmFyeSIgIiRMSU5FTk8iIDUKIAotYWNfZm5fY19maW5kX2lu dFhfdCAiJExJTkVOTyIgIjgiICJhY19jdl9jX2ludDhfdCIKLWNhc2UgJGFjX2N2X2NfaW50OF90 IGluICMoCi0gIG5vfHllcykgOzsgIygKLSAgKikKK2ZpCiAKLWNhdCA+PmNvbmZkZWZzLmggPDxf QUNFT0YKLSNkZWZpbmUgaW50OF90ICRhY19jdl9jX2ludDhfdAotX0FDRU9GCi07OwotZXNhYwog Ci1hY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJtb2RlX3QiICJhY19jdl90eXBlX21vZGVf dCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgotaWYgdGVzdCAieCRhY19jdl90eXBlX21vZGVfdCIg PSB4IiJ5ZXM7IHRoZW4gOgorYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIg ImN1cnNlcy5oIiAiYWNfY3ZfaGVhZGVyX2N1cnNlc19oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQi CitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9jdXJzZXNfaCIgPSB4IiJ5ZXM7IHRoZW4gOgogCisg ICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Ig Y2xlYXIgaW4gLWxjdXJzZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGNsZWFyIGlu IC1sY3Vyc2VzLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9jdXJzZXNfY2xlYXIr c2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQor ICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGN1cnNlcyAgJExJQlMiCitj YXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRl ZnMuaC4gICovCiAKLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgbW9kZV90IGlu dAorLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJy b3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUg b2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3Vs ZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRp ZgorY2hhciBjbGVhciAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGNsZWFyICgpOworICA7 CisgIHJldHVybiAwOworfQogX0FDRU9GCi0KK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8i OyB0aGVuIDoKKyAgYWNfY3ZfbGliX2N1cnNlc19jbGVhcj15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGli X2N1cnNlc19jbGVhcj1ubwogZmkKLQotYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAib2Zm X3QiICJhY19jdl90eXBlX29mZl90IiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCi1pZiB0ZXN0ICJ4 JGFjX2N2X3R5cGVfb2ZmX3QiID0geCIieWVzOyB0aGVuIDoKLQorcm0gLWYgY29yZSBjb25mdGVz dC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0 ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hv ICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9jdXJzZXNf Y2xlYXIiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfY3Vyc2VzX2NsZWFyIiA+JjY7IH0KK2lm IHRlc3QgIngkYWNfY3ZfbGliX2N1cnNlc19jbGVhciIgPSB4IiJ5ZXM7IHRoZW4gOgorICBjdXJz ZXM9InkiCiBlbHNlCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgb2ZmX3Qg bG9uZyBpbnQKLV9BQ0VPRgotCisgIGN1cnNlcz0ibiIKIGZpCiAKLWFjX2ZuX2NfY2hlY2tfdHlw ZSAiJExJTkVOTyIgInBpZF90IiAiYWNfY3ZfdHlwZV9waWRfdCIgIiRhY19pbmNsdWRlc19kZWZh dWx0IgotaWYgdGVzdCAieCRhY19jdl90eXBlX3BpZF90IiA9IHgiInllczsgdGhlbiA6CiAKIGVs c2UKKyAgY3Vyc2VzPSJuIgorZmkKIAotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmlu ZSBwaWRfdCBpbnQKLV9BQ0VPRgogCi1maQorYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAi JExJTkVOTyIgIm5jdXJzZXMuaCIgImFjX2N2X2hlYWRlcl9uY3Vyc2VzX2giICIkYWNfaW5jbHVk ZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX25jdXJzZXNfaCIgPSB4IiJ5ZXM7 IHRoZW4gOgogCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNr aW5nIGZvciBDL0MrKyByZXN0cmljdCBrZXl3b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5n IGZvciBDL0MrKyByZXN0cmljdCBrZXl3b3JkLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2 X2NfcmVzdHJpY3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAgIHsgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGNsZWFyIGluIC1sbmN1cnNlcyIgPiY1 CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgY2xlYXIgaW4gLWxuY3Vyc2VzLi4uICIgPiY2OyB9 CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9uY3Vyc2VzX2NsZWFyK3NldH0iID0gc2V0OyB0aGVuIDoK ICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgYWNfY3ZfY19yZXN0cmljdD1u bwotICAgIyBUaGUgb3JkZXIgaGVyZSBjYXRlcnMgdG8gdGhlIGZhY3QgdGhhdCBDKysgZG9lcyBu b3QgcmVxdWlyZSByZXN0cmljdC4KLSAgIGZvciBhY19rdyBpbiBfX3Jlc3RyaWN0IF9fcmVzdHJp Y3RfXyBfUmVzdHJpY3QgcmVzdHJpY3Q7IGRvCi0gICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNF T0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElC Uz0iLWxuY3Vyc2VzICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0 LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLXR5cGVkZWYgaW50ICogaW50X3B0cjsK LQlpbnQgZm9vIChpbnRfcHRyICRhY19rdyBpcCkgewotCXJldHVybiBpcFswXTsKLSAgICAgICB9 CisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVy cm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBl IG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291 bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5k aWYKK2NoYXIgY2xlYXIgKCk7CiBpbnQKIG1haW4gKCkKIHsKLWludCBzWzFdOwotCWludCAqICRh Y19rdyB0ID0gczsKLQl0WzBdID0gMDsKLQlyZXR1cm4gZm9vKHQpCityZXR1cm4gY2xlYXIgKCk7 CiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRM SU5FTk8iOyB0aGVuIDoKLSAgYWNfY3ZfY19yZXN0cmljdD0kYWNfa3cKK2lmIGFjX2ZuX2NfdHJ5 X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX25jdXJzZXNfY2xlYXI9eWVzCitl bHNlCisgIGFjX2N2X2xpYl9uY3Vyc2VzX2NsZWFyPW5vCiBmaQotcm0gLWYgY29yZSBjb25mdGVz dC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gICAgIHRlc3QgIiRh Y19jdl9jX3Jlc3RyaWN0IiAhPSBubyAmJiBicmVhawotICAgZG9uZQotCitybSAtZiBjb3JlIGNv bmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQg Y29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwogZmkKLXsgJGFz X2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfY19yZXN0 cmljdCIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2NfcmVzdHJpY3QiID4mNjsgfQotCi0gY2FzZSAk YWNfY3ZfY19yZXN0cmljdCBpbgotICAgcmVzdHJpY3QpIDs7Ci0gICBubykgJGFzX2VjaG8gIiNk ZWZpbmUgcmVzdHJpY3QgLyoqLyIgPj5jb25mZGVmcy5oCi0gOzsKLSAgICopICBjYXQgPj5jb25m ZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIHJlc3RyaWN0ICRhY19jdl9jX3Jlc3RyaWN0Ci1fQUNF T0YKLSA7OwotIGVzYWMKLQotYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAic2l6ZV90IiAi YWNfY3ZfdHlwZV9zaXplX3QiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKLWlmIHRlc3QgIngkYWNf Y3ZfdHlwZV9zaXplX3QiID0geCIieWVzOyB0aGVuIDoKLQoreyAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfbmN1cnNlc19jbGVhciIgPiY1 CiskYXNfZWNobyAiJGFjX2N2X2xpYl9uY3Vyc2VzX2NsZWFyIiA+JjY7IH0KK2lmIHRlc3QgIngk YWNfY3ZfbGliX25jdXJzZXNfY2xlYXIiID0geCIieWVzOyB0aGVuIDoKKyAgbmN1cnNlcz0ieSIK IGVsc2UKLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBzaXplX3QgdW5zaWdu ZWQgaW50Ci1fQUNFT0YKLQorICBuY3Vyc2VzPSJuIgogZmkKIAotYWNfZm5fY19jaGVja190eXBl ICIkTElORU5PIiAic3NpemVfdCIgImFjX2N2X3R5cGVfc3NpemVfdCIgIiRhY19pbmNsdWRlc19k ZWZhdWx0IgotaWYgdGVzdCAieCRhY19jdl90eXBlX3NzaXplX3QiID0geCIieWVzOyB0aGVuIDoK IAogZWxzZQotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIHNzaXplX3QgaW50 Ci1fQUNFT0YKLQorICBuY3Vyc2VzPSJuIgogZmkKIAotYWNfZm5fY19jaGVja19tZW1iZXIgIiRM SU5FTk8iICJzdHJ1Y3Qgc3RhdCIgInN0X2Jsa3NpemUiICJhY19jdl9tZW1iZXJfc3RydWN0X3N0 YXRfc3RfYmxrc2l6ZSIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgotaWYgdGVzdCAieCRhY19jdl9t ZW1iZXJfc3RydWN0X3N0YXRfc3RfYmxrc2l6ZSIgPSB4IiJ5ZXM7IHRoZW4gOgogCi1jYXQgPj5j b25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfU1RSVUNUX1NUQVRfU1RfQkxLU0laRSAx Ci1fQUNFT0YKK2lmIHRlc3QgIiRjdXJzZXMiID0gIm4iICYmIHRlc3QgIiRuY3Vyc2VzIiA9ICJu IjsgdGhlbiA6CiAKKyAgICBhc19mbl9lcnJvciAkPyAiVW5hYmxlIHRvIGZpbmQgYSBzdWl0YWJs ZSBjdXJzZXMgbGlicmFyeSIgIiRMSU5FTk8iIDUKIAogZmkKKyMgUHJlZmVyIG5jdXJzZXMgb3Zl ciBjdXJzZXMgaWYgYm90aCBhcmUgcHJlc2VudAoraWYgdGVzdCAiJG5jdXJzZXMiID0gInkiOyB0 aGVuIDoKIAotYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3Qgc3RhdCIgInN0 X2Jsb2NrcyIgImFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3RhdF9zdF9ibG9ja3MiICIkYWNfaW5jbHVk ZXNfZGVmYXVsdCIKLWlmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9zdGF0X3N0X2Jsb2Nr cyIgPSB4IiJ5ZXM7IHRoZW4gOgotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5l IEhBVkVfU1RSVUNUX1NUQVRfU1RfQkxPQ0tTIDEKLV9BQ0VPRgorICAgIENVUlNFU19MSUJTPSIt bG5jdXJzZXMiCiAKKyRhc19lY2hvICIjZGVmaW5lIElOQ0xVREVfQ1VSU0VTX0ggPG5jdXJzZXMu aD4iID4+Y29uZmRlZnMuaAogCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX1NUX0JMT0NLUyAxIiA+ PmNvbmZkZWZzLmgKIAogZWxzZQotICBjYXNlICIgJExJQk9CSlMgIiBpbgotICAqIiBmaWxlYmxv Y2tzLiRhY19vYmpleHQgIiogKSA7OwotICAqKSBMSUJPQkpTPSIkTElCT0JKUyBmaWxlYmxvY2tz LiRhY19vYmpleHQiCi0gOzsKLWVzYWMKLQotZmkKLQogCi1hY19mbl9jX2NoZWNrX21lbWJlciAi JExJTkVOTyIgInN0cnVjdCBzdGF0IiAic3RfcmRldiIgImFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3Rh dF9zdF9yZGV2IiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCi1pZiB0ZXN0ICJ4JGFjX2N2X21lbWJl cl9zdHJ1Y3Rfc3RhdF9zdF9yZGV2IiA9IHgiInllczsgdGhlbiA6CisgICAgQ1VSU0VTX0xJQlM9 Ii1sY3Vyc2VzIgogCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfU1RS VUNUX1NUQVRfU1RfUkRFViAxCi1fQUNFT0YKKyRhc19lY2hvICIjZGVmaW5lIElOQ0xVREVfQ1VS U0VTX0ggPGN1cnNlcy5oPiIgPj5jb25mZGVmcy5oCiAKIAogZmkKIAotYWNfZm5fY19maW5kX3Vp bnRYX3QgIiRMSU5FTk8iICIxNiIgImFjX2N2X2NfdWludDE2X3QiCi1jYXNlICRhY19jdl9jX3Vp bnQxNl90IGluICMoCi0gIG5vfHllcykgOzsgIygKLSAgKikKIAogCi1jYXQgPj5jb25mZGVmcy5o IDw8X0FDRU9GCi0jZGVmaW5lIHVpbnQxNl90ICRhY19jdl9jX3VpbnQxNl90Ci1fQUNFT0YKLTs7 Ci0gIGVzYWMKIAotYWNfZm5fY19maW5kX3VpbnRYX3QgIiRMSU5FTk8iICIzMiIgImFjX2N2X2Nf dWludDMyX3QiCi1jYXNlICRhY19jdl9jX3VpbnQzMl90IGluICMoCi0gIG5vfHllcykgOzsgIygK LSAgKikKIAotJGFzX2VjaG8gIiNkZWZpbmUgX1VJTlQzMl9UIDEiID4+Y29uZmRlZnMuaAogCiAK LWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgdWludDMyX3QgJGFjX2N2X2NfdWlu dDMyX3QKLV9BQ0VPRgotOzsKLSAgZXNhYwogCi1hY19mbl9jX2ZpbmRfdWludFhfdCAiJExJTkVO TyIgIjY0IiAiYWNfY3ZfY191aW50NjRfdCIKLWNhc2UgJGFjX2N2X2NfdWludDY0X3QgaW4gIygK LSAgbm98eWVzKSA7OyAjKAoraWYgdGVzdCAieCRhY19jdl9lbnZfUEtHX0NPTkZJR19zZXQiICE9 ICJ4c2V0IjsgdGhlbgorCWlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBF eHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXBrZy1jb25maWciLCBz byBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9v bF9wcmVmaXh9cGtnLWNvbmZpZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAi Y2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3BhdGhf UEtHX0NPTkZJRytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIg PiY2CitlbHNlCisgIGNhc2UgJFBLR19DT05GSUcgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisg IGFjX2N2X3BhdGhfUEtHX0NPTkZJRz0iJFBLR19DT05GSUciICMgTGV0IHRoZSB1c2VyIG92ZXJy aWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OwogICAqKQorICBhc19zYXZlX0lGUz0kSUZT OyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFz X3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4 ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAt ZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8k YWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX1BLR19DT05GSUc9 IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2Fz X2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1 CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCiAKLSRh c19lY2hvICIjZGVmaW5lIF9VSU5UNjRfVCAxIiA+PmNvbmZkZWZzLmgKLQorICA7OworZXNhYwor ZmkKK1BLR19DT05GSUc9JGFjX2N2X3BhdGhfUEtHX0NPTkZJRworaWYgdGVzdCAtbiAiJFBLR19D T05GSUciOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog cmVzdWx0OiAkUEtHX0NPTkZJRyIgPiY1CiskYXNfZWNobyAiJFBLR19DT05GSUciID4mNjsgfQor ZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDog bm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCiAKLWNhdCA+PmNvbmZkZWZzLmggPDxf QUNFT0YKLSNkZWZpbmUgdWludDY0X3QgJGFjX2N2X2NfdWludDY0X3QKLV9BQ0VPRgotOzsKLSAg ZXNhYwogCi1hY19mbl9jX2ZpbmRfdWludFhfdCAiJExJTkVOTyIgIjgiICJhY19jdl9jX3VpbnQ4 X3QiCi1jYXNlICRhY19jdl9jX3VpbnQ4X3QgaW4gIygKLSAgbm98eWVzKSA7OyAjKAorZmkKK2lm IHRlc3QgLXogIiRhY19jdl9wYXRoX1BLR19DT05GSUciOyB0aGVuCisgIGFjX3B0X1BLR19DT05G SUc9JFBLR19DT05GSUcKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJwa2ctY29uZmln Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBwa2ct Y29uZmlnOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Ig JGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9hY19wdF9QS0dfQ09O RklHK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vs c2UKKyAgY2FzZSAkYWNfcHRfUEtHX0NPTkZJRyBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAg YWNfY3ZfcGF0aF9hY19wdF9QS0dfQ09ORklHPSIkYWNfcHRfUEtHX0NPTkZJRyIgIyBMZXQgdGhl IHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CiAgICopCisgIGFzX3Nh dmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2Rv CisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAg ICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAg aWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94 ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhf YWNfcHRfUEtHX0NPTkZJRz0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNf ZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3Jk JGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0k YXNfc2F2ZV9JRlMKIAotJGFzX2VjaG8gIiNkZWZpbmUgX1VJTlQ4X1QgMSIgPj5jb25mZGVmcy5o Ci0KLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSB1aW50OF90ICRhY19jdl9j X3VpbnQ4X3QKLV9BQ0VPRgotOzsKLSAgZXNhYwotCi1hY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5F Tk8iICJwdHJkaWZmX3QiICJhY19jdl90eXBlX3B0cmRpZmZfdCIgIiRhY19pbmNsdWRlc19kZWZh dWx0IgotaWYgdGVzdCAieCRhY19jdl90eXBlX3B0cmRpZmZfdCIgPSB4IiJ5ZXM7IHRoZW4gOgot Ci1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfUFRSRElGRl9UIDEKLV9B Q0VPRgotCi0KKyAgOzsKK2VzYWMKK2ZpCithY19wdF9QS0dfQ09ORklHPSRhY19jdl9wYXRoX2Fj X3B0X1BLR19DT05GSUcKK2lmIHRlc3QgLW4gIiRhY19wdF9QS0dfQ09ORklHIjsgdGhlbgorICB7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3B0X1BL R19DT05GSUciID4mNQorJGFzX2VjaG8gIiRhY19wdF9QS0dfQ09ORklHIiA+JjY7IH0KK2Vsc2UK KyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+ JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiBmaQogCi0KLSMgQ2hlY2tzIGZvciBsaWJyYXJ5IGZ1 bmN0aW9ucy4KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tp bmcgZm9yIGVycm9yX2F0X2xpbmUiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGVycm9y X2F0X2xpbmUuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfbGliX2Vycm9yX2F0X2xpbmUr c2V0fSIgPSBzZXQ7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQot ICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29u ZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8ZXJyb3IuaD4KLWludAotbWFpbiAoKQotewotZXJyb3Jf YXRfbGluZSAoMCwgMCwgIiIsIDAsICJhbiBlcnJvciBvY2N1cnJlZCIpOwotICA7Ci0gIHJldHVy biAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0g IGFjX2N2X2xpYl9lcnJvcl9hdF9saW5lPXllcworICBpZiB0ZXN0ICJ4JGFjX3B0X1BLR19DT05G SUciID0geDsgdGhlbgorICAgIFBLR19DT05GSUc9IiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3Nz X2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6 JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVm aXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1 c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9Cith Y190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBQS0dfQ09ORklHPSRhY19wdF9QS0dfQ09O RklHCisgIGZpCiBlbHNlCi0gIGFjX2N2X2xpYl9lcnJvcl9hdF9saW5lPW5vCi1maQotcm0gLWYg Y29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNf ZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgUEtHX0NPTkZJRz0iJGFjX2N2X3BhdGhfUEtHX0NP TkZJRyIKIGZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3Vs dDogJGFjX2N2X2xpYl9lcnJvcl9hdF9saW5lIiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfbGliX2Vy cm9yX2F0X2xpbmUiID4mNjsgfQotaWYgdGVzdCAkYWNfY3ZfbGliX2Vycm9yX2F0X2xpbmUgPSBu bzsgdGhlbgotICBjYXNlICIgJExJQk9CSlMgIiBpbgotICAqIiBlcnJvci4kYWNfb2JqZXh0ICIq ICkgOzsKLSAgKikgTElCT0JKUz0iJExJQk9CSlMgZXJyb3IuJGFjX29iamV4dCIKLSA7OwotZXNh YwogCiBmaQotCi1mb3IgYWNfaGVhZGVyIGluIHZmb3JrLmgKLWRvIDoKLSAgYWNfZm5fY19jaGVj a19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInZmb3JrLmgiICJhY19jdl9oZWFkZXJfdmZvcmtf aCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgotaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfdmZvcmtf aCIgPSB4IiJ5ZXM7IHRoZW4gOgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5l IEhBVkVfVkZPUktfSCAxCi1fQUNFT0YKLQoraWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVu CisJX3BrZ19taW5fdmVyc2lvbj0wLjkuMAorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogY2hlY2tpbmcgcGtnLWNvbmZpZyBpcyBhdCBsZWFzdCB2ZXJzaW9uICRfcGtn X21pbl92ZXJzaW9uIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHBrZy1jb25maWcgaXMgYXQg bGVhc3QgdmVyc2lvbiAkX3BrZ19taW5fdmVyc2lvbi4uLiAiID4mNjsgfQorCWlmICRQS0dfQ09O RklHIC0tYXRsZWFzdC1wa2djb25maWctdmVyc2lvbiAkX3BrZ19taW5fdmVyc2lvbjsgdGhlbgor CQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+ JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCWVsc2UKKwkJeyAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9 CisJCVBLR19DT05GSUc9IiIKKwlmaQogZmkKIAotZG9uZQotCi1mb3IgYWNfZnVuYyBpbiBmb3Jr IHZmb3JrCi1kbyA6Ci0gIGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMi IHwgJGFzX3RyX3NoYAotYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiJGFjX2Z1bmMiICIk YXNfYWNfdmFyIgotaWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY192YXIiXCIgPSB4InllcyI7IHRo ZW4gOgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGAkYXNfZWNobyAiSEFW RV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLWRvbmUKK3BrZ19mYWls ZWQ9bm8KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcg Zm9yIGdsaWIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGdsaWIuLi4gIiA+JjY7IH0K IAotaWYgdGVzdCAieCRhY19jdl9mdW5jX2ZvcmsiID0geHllczsgdGhlbgotICB7ICRhc19lY2hv ICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB3b3JraW5nIGZvcmsi ID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHdvcmtpbmcgZm9yay4uLiAiID4mNjsgfQot aWYgdGVzdCAiJHthY19jdl9mdW5jX2Zvcmtfd29ya3Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICAk YXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGls aW5nIiA9IHllczsgdGhlbiA6Ci0gIGFjX2N2X2Z1bmNfZm9ya193b3Jrcz1jcm9zcworaWYgdGVz dCAtbiAiJGdsaWJfQ0ZMQUdTIjsgdGhlbgorICAgIHBrZ19jdl9nbGliX0NGTEFHUz0iJGdsaWJf Q0ZMQUdTIgorIGVsaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisgICAgaWYgdGVzdCAt biAiJFBLR19DT05GSUciICYmIFwKKyAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwiZ2xpYi0y LjBcIiI7IH0gPiY1CisgICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiZ2xp Yi0yLjAiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGlu ZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0g MDsgfTsgdGhlbgorICBwa2dfY3ZfZ2xpYl9DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzICJn bGliLTIuMCIgMj4vZGV2L251bGxgCiBlbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0Yg PmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19k ZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLQotCSAgLyogQnkgUnVlZGlnZXIgS3VobG1hbm4uICov Ci0JICByZXR1cm4gZm9yayAoKSA8IDA7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgot aWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X2Z1bmNfZm9ya193 b3Jrcz15ZXMKKyAgcGtnX2ZhaWxlZD15ZXMKK2ZpCisgZWxzZQorICAgIHBrZ19mYWlsZWQ9dW50 cmllZAorZmkKK2lmIHRlc3QgLW4gIiRnbGliX0xJQlMiOyB0aGVuCisgICAgcGtnX2N2X2dsaWJf TElCUz0iJGdsaWJfTElCUyIKKyBlbGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgorICAg IGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCisgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6 JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9y cyBcImdsaWItMi4wXCIiOyB9ID4mNQorICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1l cnJvcnMgImdsaWItMi4wIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFj X3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgcGtnX2N2X2dsaWJfTElCUz1gJFBLR19DT05GSUcgLS1s aWJzICJnbGliLTIuMCIgMj4vZGV2L251bGxgCiBlbHNlCi0gIGFjX2N2X2Z1bmNfZm9ya193b3Jr cz1ubworICBwa2dfZmFpbGVkPXllcwogZmkKLXJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRl c3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKLSAgY29uZnRlc3QuJGFj X29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKKyBlbHNlCisgICAgcGtnX2Zh aWxlZD11bnRyaWVkCiBmaQogCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRM SU5FTk99OiByZXN1bHQ6ICRhY19jdl9mdW5jX2Zvcmtfd29ya3MiID4mNQotJGFzX2VjaG8gIiRh Y19jdl9mdW5jX2Zvcmtfd29ya3MiID4mNjsgfQogCisKK2lmIHRlc3QgJHBrZ19mYWlsZWQgPSB5 ZXM7IHRoZW4KKyAgIAl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJl c3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKworaWYgJFBLR19DT05GSUcgLS1h dGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uIDAuMjA7IHRoZW4KKyAgICAgICAgX3BrZ19zaG9ydF9l cnJvcnNfc3VwcG9ydGVkPXllcwogZWxzZQotICBhY19jdl9mdW5jX2Zvcmtfd29ya3M9JGFjX2N2 X2Z1bmNfZm9yaworICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9bm8KIGZpCi1p ZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZm9ya193b3JrcyIgPSB4Y3Jvc3M7IHRoZW4KLSAgY2FzZSAk aG9zdCBpbgotICAgICotKi1hbWlnYW9zKiB8ICotKi1tc2Rvc2RqZ3BwKikKLSAgICAgICMgT3Zl cnJpZGUsIGFzIHRoZXNlIHN5c3RlbXMgaGF2ZSBvbmx5IGEgZHVtbXkgZm9yaygpIHN0dWIKLSAg ICAgIGFjX2N2X2Z1bmNfZm9ya193b3Jrcz1ubwotICAgICAgOzsKLSAgICAqKQotICAgICAgYWNf Y3ZfZnVuY19mb3JrX3dvcmtzPXllcwotICAgICAgOzsKLSAgZXNhYwotICB7ICRhc19lY2hvICIk YXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHJlc3VsdCAkYWNfY3ZfZnVuY19m b3JrX3dvcmtzIGd1ZXNzZWQgYmVjYXVzZSBvZiBjcm9zcyBjb21waWxhdGlvbiIgPiY1Ci0kYXNf ZWNobyAiJGFzX21lOiBXQVJOSU5HOiByZXN1bHQgJGFjX2N2X2Z1bmNfZm9ya193b3JrcyBndWVz c2VkIGJlY2F1c2Ugb2YgY3Jvc3MgY29tcGlsYXRpb24iID4mMjt9Ci1maQotYWNfY3ZfZnVuY192 Zm9ya193b3Jrcz0kYWNfY3ZfZnVuY192Zm9yawotaWYgdGVzdCAieCRhY19jdl9mdW5jX3Zmb3Jr IiA9IHh5ZXM7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99 OiBjaGVja2luZyBmb3Igd29ya2luZyB2Zm9yayIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBm b3Igd29ya2luZyB2Zm9yay4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9mdW5jX3Zmb3Jr X3dvcmtzK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYK LWVsc2UKLSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgotICBhY19j dl9mdW5jX3Zmb3JrX3dvcmtzPWNyb3NzCi1lbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNF T0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIFRoYW5rcyB0 byBQYXVsIEVnZ2VydCBmb3IgdGhpcyB0ZXN0LiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci0j aW5jbHVkZSA8c3lzL3dhaXQuaD4KLSNpZmRlZiBIQVZFX1ZGT1JLX0gKLSMgaW5jbHVkZSA8dmZv cmsuaD4KLSNlbmRpZgotLyogT24gc29tZSBzcGFyYyBzeXN0ZW1zLCBjaGFuZ2VzIGJ5IHRoZSBj aGlsZCB0byBsb2NhbCBhbmQgaW5jb21pbmcKLSAgIGFyZ3VtZW50IHJlZ2lzdGVycyBhcmUgcHJv cGFnYXRlZCBiYWNrIHRvIHRoZSBwYXJlbnQuICBUaGUgY29tcGlsZXIKLSAgIGlzIHRvbGQgYWJv dXQgdGhpcyB3aXRoICNpbmNsdWRlIDx2Zm9yay5oPiwgYnV0IHNvbWUgY29tcGlsZXJzCi0gICAo ZS5nLiBnY2MgLU8pIGRvbid0IGdyb2sgPHZmb3JrLmg+LiAgVGVzdCBmb3IgdGhpcyBieSB1c2lu ZyBhCi0gICBzdGF0aWMgdmFyaWFibGUgd2hvc2UgYWRkcmVzcyBpcyBwdXQgaW50byBhIHJlZ2lz dGVyIHRoYXQgaXMKLSAgIGNsb2JiZXJlZCBieSB0aGUgdmZvcmsuICAqLwotc3RhdGljIHZvaWQK LSNpZmRlZiBfX2NwbHVzcGx1cwotc3BhcmNfYWRkcmVzc190ZXN0IChpbnQgYXJnKQotIyBlbHNl Ci1zcGFyY19hZGRyZXNzX3Rlc3QgKGFyZykgaW50IGFyZzsKLSNlbmRpZgotewotICBzdGF0aWMg cGlkX3QgY2hpbGQ7Ci0gIGlmICghY2hpbGQpIHsKLSAgICBjaGlsZCA9IHZmb3JrICgpOwotICAg IGlmIChjaGlsZCA8IDApIHsKLSAgICAgIHBlcnJvciAoInZmb3JrIik7Ci0gICAgICBfZXhpdCgy KTsKLSAgICB9Ci0gICAgaWYgKCFjaGlsZCkgewotICAgICAgYXJnID0gZ2V0cGlkKCk7Ci0gICAg ICB3cml0ZSgtMSwgIiIsIDApOwotICAgICAgX2V4aXQgKGFyZyk7Ci0gICAgfQotICB9Ci19Cisg ICAgICAgIGlmIHRlc3QgJF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZCA9IHllczsgdGhlbgor CSAgICAgICAgZ2xpYl9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLXNob3J0LWVycm9ycyAtLXBy aW50LWVycm9ycyAiZ2xpYi0yLjAiIDI+JjFgCisgICAgICAgIGVsc2UKKwkgICAgICAgIGdsaWJf UEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1wcmludC1lcnJvcnMgImdsaWItMi4wIiAyPiYxYAor ICAgICAgICBmaQorCSMgUHV0IHRoZSBuYXN0eSBlcnJvciBtZXNzYWdlIGluIGNvbmZpZy5sb2cg d2hlcmUgaXQgYmVsb25ncworCWVjaG8gIiRnbGliX1BLR19FUlJPUlMiID4mNQogCi1pbnQKLW1h aW4gKCkKLXsKLSAgcGlkX3QgcGFyZW50ID0gZ2V0cGlkICgpOwotICBwaWRfdCBjaGlsZDsKLQot ICBzcGFyY19hZGRyZXNzX3Rlc3QgKDApOwotCi0gIGNoaWxkID0gdmZvcmsgKCk7Ci0KLSAgaWYg KGNoaWxkID09IDApIHsKLSAgICAvKiBIZXJlIGlzIGFub3RoZXIgdGVzdCBmb3Igc3BhcmMgdmZv cmsgcmVnaXN0ZXIgcHJvYmxlbXMuICBUaGlzCi0gICAgICAgdGVzdCB1c2VzIGxvdHMgb2YgbG9j YWwgdmFyaWFibGVzLCBhdCBsZWFzdCBhcyBtYW55IGxvY2FsCi0gICAgICAgdmFyaWFibGVzIGFz IG1haW4gaGFzIGFsbG9jYXRlZCBzbyBmYXIgaW5jbHVkaW5nIGNvbXBpbGVyCi0gICAgICAgdGVt cG9yYXJpZXMuICA0IGxvY2FscyBhcmUgZW5vdWdoIGZvciBnY2MgMS40MC4zIG9uIGEgU29sYXJp cwotICAgICAgIDQuMS4zIHNwYXJjLCBidXQgd2UgdXNlIDggdG8gYmUgc2FmZS4gIEEgYnVnZ3kg Y29tcGlsZXIgc2hvdWxkCi0gICAgICAgcmV1c2UgdGhlIHJlZ2lzdGVyIG9mIHBhcmVudCBmb3Ig b25lIG9mIHRoZSBsb2NhbCB2YXJpYWJsZXMsCi0gICAgICAgc2luY2UgaXQgd2lsbCB0aGluayB0 aGF0IHBhcmVudCBjYW4ndCBwb3NzaWJseSBiZSB1c2VkIGFueSBtb3JlCi0gICAgICAgaW4gdGhp cyByb3V0aW5lLiAgQXNzaWduaW5nIHRvIHRoZSBsb2NhbCB2YXJpYWJsZSB3aWxsIHRodXMKLSAg ICAgICBtdW5nZSBwYXJlbnQgaW4gdGhlIHBhcmVudCBwcm9jZXNzLiAgKi8KLSAgICBwaWRfdAot ICAgICAgcCA9IGdldHBpZCgpLCBwMSA9IGdldHBpZCgpLCBwMiA9IGdldHBpZCgpLCBwMyA9IGdl dHBpZCgpLAotICAgICAgcDQgPSBnZXRwaWQoKSwgcDUgPSBnZXRwaWQoKSwgcDYgPSBnZXRwaWQo KSwgcDcgPSBnZXRwaWQoKTsKLSAgICAvKiBDb252aW5jZSB0aGUgY29tcGlsZXIgdGhhdCBwLi5w NyBhcmUgbGl2ZTsgb3RoZXJ3aXNlLCBpdCBtaWdodAotICAgICAgIHVzZSB0aGUgc2FtZSBoYXJk d2FyZSByZWdpc3RlciBmb3IgYWxsIDggbG9jYWwgdmFyaWFibGVzLiAgKi8KLSAgICBpZiAocCAh PSBwMSB8fCBwICE9IHAyIHx8IHAgIT0gcDMgfHwgcCAhPSBwNAotCXx8IHAgIT0gcDUgfHwgcCAh PSBwNiB8fCBwICE9IHA3KQotICAgICAgX2V4aXQoMSk7Ci0KLSAgICAvKiBPbiBzb21lIHN5c3Rl bXMgKGUuZy4gSVJJWCAzLjMpLCB2Zm9yayBkb2Vzbid0IHNlcGFyYXRlIHBhcmVudAotICAgICAg IGZyb20gY2hpbGQgZmlsZSBkZXNjcmlwdG9ycy4gIElmIHRoZSBjaGlsZCBjbG9zZXMgYSBkZXNj cmlwdG9yCi0gICAgICAgYmVmb3JlIGl0IGV4ZWNzIG9yIGV4aXRzLCB0aGlzIG11bmdlcyB0aGUg cGFyZW50J3MgZGVzY3JpcHRvcgotICAgICAgIGFzIHdlbGwuICBUZXN0IGZvciB0aGlzIGJ5IGNs b3Npbmcgc3Rkb3V0IGluIHRoZSBjaGlsZC4gICovCi0gICAgX2V4aXQoY2xvc2UoZmlsZW5vKHN0 ZG91dCkpICE9IDApOwotICB9IGVsc2UgewotICAgIGludCBzdGF0dXM7Ci0gICAgc3RydWN0IHN0 YXQgc3Q7CisJYXNfZm5fZXJyb3IgJD8gIlBhY2thZ2UgcmVxdWlyZW1lbnRzIChnbGliLTIuMCkg d2VyZSBub3QgbWV0OgogCi0gICAgd2hpbGUgKHdhaXQoJnN0YXR1cykgIT0gY2hpbGQpCi0gICAg ICA7Ci0gICAgcmV0dXJuICgKLQkgLyogV2FzIHRoZXJlIHNvbWUgcHJvYmxlbSB3aXRoIHZmb3Jr aW5nPyAgKi8KLQkgY2hpbGQgPCAwCiskZ2xpYl9QS0dfRVJST1JTCiAKLQkgLyogRGlkIHRoZSBj aGlsZCBmYWlsPyAgKFRoaXMgc2hvdWxkbid0IGhhcHBlbi4pICAqLwotCSB8fCBzdGF0dXMKK0Nv bnNpZGVyIGFkanVzdGluZyB0aGUgUEtHX0NPTkZJR19QQVRIIGVudmlyb25tZW50IHZhcmlhYmxl IGlmIHlvdQoraW5zdGFsbGVkIHNvZnR3YXJlIGluIGEgbm9uLXN0YW5kYXJkIHByZWZpeC4KIAot CSAvKiBEaWQgdGhlIHZmb3JrL2NvbXBpbGVyIGJ1ZyBvY2N1cj8gICovCi0JIHx8IHBhcmVudCAh PSBnZXRwaWQoKQorQWx0ZXJuYXRpdmVseSwgeW91IG1heSBzZXQgdGhlIGVudmlyb25tZW50IHZh cmlhYmxlcyBnbGliX0NGTEFHUworYW5kIGdsaWJfTElCUyB0byBhdm9pZCB0aGUgbmVlZCB0byBj YWxsIHBrZy1jb25maWcuCitTZWUgdGhlIHBrZy1jb25maWcgbWFuIHBhZ2UgZm9yIG1vcmUgZGV0 YWlscy4iICIkTElORU5PIiA1CitlbGlmIHRlc3QgJHBrZ19mYWlsZWQgPSB1bnRyaWVkOyB0aGVu CisgICAgIAl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDog bm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKwl7IHsgJGFzX2VjaG8gIiRhc19tZToke2Fz X2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIk YXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJUaGUg cGtnLWNvbmZpZyBzY3JpcHQgY291bGQgbm90IGJlIGZvdW5kIG9yIGlzIHRvbyBvbGQuICBNYWtl IHN1cmUgaXQKK2lzIGluIHlvdXIgUEFUSCBvciBzZXQgdGhlIFBLR19DT05GSUcgZW52aXJvbm1l bnQgdmFyaWFibGUgdG8gdGhlIGZ1bGwKK3BhdGggdG8gcGtnLWNvbmZpZy4KIAotCSAvKiBEaWQg dGhlIGZpbGUgZGVzY3JpcHRvciBidWcgb2NjdXI/ICAqLwotCSB8fCBmc3RhdChmaWxlbm8oc3Rk b3V0KSwgJnN0KSAhPSAwCi0JICk7Ci0gIH0KLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfcnVu ICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X2Z1bmNfdmZvcmtfd29ya3M9eWVzCitBbHRlcm5h dGl2ZWx5LCB5b3UgbWF5IHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGdsaWJfQ0ZMQUdT CithbmQgZ2xpYl9MSUJTIHRvIGF2b2lkIHRoZSBuZWVkIHRvIGNhbGwgcGtnLWNvbmZpZy4KK1Nl ZSB0aGUgcGtnLWNvbmZpZyBtYW4gcGFnZSBmb3IgbW9yZSBkZXRhaWxzLgorCitUbyBnZXQgcGtn LWNvbmZpZywgc2VlIDxodHRwOi8vcGtnLWNvbmZpZy5mcmVlZGVza3RvcC5vcmcvPi4KK1NlZSBc YGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1IDsgfQogZWxzZQotICBh Y19jdl9mdW5jX3Zmb3JrX3dvcmtzPW5vCi1maQotcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25m dGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAotICBjb25mdGVzdC4k YWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAotZmkKKwlnbGliX0NGTEFH Uz0kcGtnX2N2X2dsaWJfQ0ZMQUdTCisJZ2xpYl9MSUJTPSRwa2dfY3ZfZ2xpYl9MSUJTCisgICAg ICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMi ID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CiAKIGZpCi17ICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2Z1bmNfdmZvcmtfd29ya3MiID4mNQot JGFzX2VjaG8gIiRhY19jdl9mdW5jX3Zmb3JrX3dvcmtzIiA+JjY7IH0KIAotZmk7Ci1pZiB0ZXN0 ICJ4JGFjX2N2X2Z1bmNfZm9ya193b3JrcyIgPSB4Y3Jvc3M7IHRoZW4KLSAgYWNfY3ZfZnVuY192 Zm9ya193b3Jrcz0kYWNfY3ZfZnVuY192Zm9yawotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHJlc3VsdCAkYWNfY3ZfZnVuY192Zm9ya193b3JrcyBn dWVzc2VkIGJlY2F1c2Ugb2YgY3Jvc3MgY29tcGlsYXRpb24iID4mNQotJGFzX2VjaG8gIiRhc19t ZTogV0FSTklORzogcmVzdWx0ICRhY19jdl9mdW5jX3Zmb3JrX3dvcmtzIGd1ZXNzZWQgYmVjYXVz ZSBvZiBjcm9zcyBjb21waWxhdGlvbiIgPiYyO30KKyMgQ2hlY2sgbGlicmFyeSBwYXRoCitpZiB0 ZXN0ICJcJHtleGVjX3ByZWZpeH0vbGliIiA9ICIkbGliZGlyIjsgdGhlbiA6CisgIGlmIHRlc3Qg IiRleGVjX3ByZWZpeCIgPSAiTk9ORSIgJiYgdGVzdCAiJHByZWZpeCIgIT0gIk5PTkUiOyB0aGVu IDoKKyAgZXhlY19wcmVmaXg9JHByZWZpeAogZmkKKyAgICBpZiB0ZXN0ICIkZXhlY19wcmVmaXgi ID0gIk5PTkUiOyB0aGVuIDoKKyAgZXhlY19wcmVmaXg9JGFjX2RlZmF1bHRfcHJlZml4CitmaQor ICAgIGlmIHRlc3QgLWQgIiR7ZXhlY19wcmVmaXh9L2xpYjY0IjsgdGhlbiA6CiAKLWlmIHRlc3Qg IngkYWNfY3ZfZnVuY192Zm9ya193b3JrcyIgPSB4eWVzOyB0aGVuCi0KLSRhc19lY2hvICIjZGVm aW5lIEhBVkVfV09SS0lOR19WRk9SSyAxIiA+PmNvbmZkZWZzLmgKKyAgICAgICAgTElCX1BBVEg9 ImxpYjY0IgogCiBlbHNlCiAKLSRhc19lY2hvICIjZGVmaW5lIHZmb3JrIGZvcmsiID4+Y29uZmRl ZnMuaAorICAgICAgICBMSUJfUEFUSD0ibGliIgogCiBmaQotaWYgdGVzdCAieCRhY19jdl9mdW5j X2Zvcmtfd29ya3MiID0geHllczsgdGhlbgogCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX1dPUktJ TkdfRk9SSyAxIiA+PmNvbmZkZWZzLmgKK2Vsc2UKIAotZmkKKyAgICBMSUJfUEFUSD0iJHtsaWJk aXI6YGV4cHIgbGVuZ3RoICIkZXhlY19wcmVmaXgiICsgMWB9IgogCi17ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBfTEFSR0VGSUxFX1NPVVJDRSB2 YWx1ZSBuZWVkZWQgZm9yIGxhcmdlIGZpbGVzIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZv ciBfTEFSR0VGSUxFX1NPVVJDRSB2YWx1ZSBuZWVkZWQgZm9yIGxhcmdlIGZpbGVzLi4uICIgPiY2 OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3N5c19sYXJnZWZpbGVfc291cmNlK3NldH0iID0gc2V0OyB0 aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgd2hpbGUgOjsgZG8K LSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNv bmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHN5cy90eXBlcy5oPiAvKiBmb3Igb2ZmX3QgKi8KLSAg ICAgI2luY2x1ZGUgPHN0ZGlvLmg+Ci1pbnQKLW1haW4gKCkKLXsKLWludCAoKmZwKSAoRklMRSAq LCBvZmZfdCwgaW50KSA9IGZzZWVrbzsKLSAgICAgcmV0dXJuIGZzZWVrbyAoc3RkaW4sIDAsIDAp ICYmIGZwIChzdGRpbiwgMCwgMCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFj X2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3Zfc3lzX2xhcmdlZmlsZV9z b3VyY2U9bm87IGJyZWFrCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFj X29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgY2F0 IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZz LmguICAqLwotI2RlZmluZSBfTEFSR0VGSUxFX1NPVVJDRSAxCi0jaW5jbHVkZSA8c3lzL3R5cGVz Lmg+IC8qIGZvciBvZmZfdCAqLwotICAgICAjaW5jbHVkZSA8c3RkaW8uaD4KLWludAotbWFpbiAo KQotewotaW50ICgqZnApIChGSUxFICosIG9mZl90LCBpbnQpID0gZnNlZWtvOwotICAgICByZXR1 cm4gZnNlZWtvIChzdGRpbiwgMCwgMCkgJiYgZnAgKHN0ZGluLCAwLCAwKTsKLSAgOwotICByZXR1 cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgot ICBhY19jdl9zeXNfbGFyZ2VmaWxlX3NvdXJjZT0xOyBicmVhawogZmkKLXJtIC1mIGNvcmUgY29u ZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBj b25mdGVzdC4kYWNfZXh0Ci0gIGFjX2N2X3N5c19sYXJnZWZpbGVfc291cmNlPXVua25vd24KLSAg YnJlYWsKLWRvbmUKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IHJlc3VsdDogJGFjX2N2X3N5c19sYXJnZWZpbGVfc291cmNlIiA+JjUKLSRhc19lY2hvICIkYWNf Y3Zfc3lzX2xhcmdlZmlsZV9zb3VyY2UiID4mNjsgfQotY2FzZSAkYWNfY3Zfc3lzX2xhcmdlZmls ZV9zb3VyY2UgaW4gIygKLSAgbm8gfCB1bmtub3duKSA7OwotICAqKQotY2F0ID4+Y29uZmRlZnMu aCA8PF9BQ0VPRgotI2RlZmluZSBfTEFSR0VGSUxFX1NPVVJDRSAkYWNfY3Zfc3lzX2xhcmdlZmls ZV9zb3VyY2UKLV9BQ0VPRgotOzsKLWVzYWMKLXJtIC1yZiBjb25mdGVzdCoKLQotIyBXZSB1c2Vk IHRvIHRyeSBkZWZpbmluZyBfWE9QRU5fU09VUkNFPTUwMCB0b28sIHRvIHdvcmsgYXJvdW5kIGEg YnVnCi0jIGluIGdsaWJjIDIuMS4zLCBidXQgdGhhdCBicmVha3MgdG9vIG1hbnkgb3RoZXIgdGhp bmdzLgotIyBJZiB5b3Ugd2FudCBmc2Vla28gYW5kIGZ0ZWxsbyB3aXRoIGdsaWJjLCB1cGdyYWRl IHRvIGEgZml4ZWQgZ2xpYmMuCi1pZiB0ZXN0ICRhY19jdl9zeXNfbGFyZ2VmaWxlX3NvdXJjZSAh PSB1bmtub3duOyB0aGVuCiAKLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfRlNFRUtPIDEiID4+Y29u ZmRlZnMuaAogCi1maQorIyBDaGVja3MgZm9yIGxpYnJhcmllcy4KK2FjX2ZuX2NfY2hlY2tfaGVh ZGVyX21vbmdyZWwgIiRMSU5FTk8iICJiemxpYi5oIiAiYWNfY3ZfaGVhZGVyX2J6bGliX2giICIk YWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2J6bGliX2giID0g eCIieWVzOyB0aGVuIDoKIAoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99 OiBjaGVja2luZyB3aGV0aGVyIGxzdGF0IGNvcnJlY3RseSBoYW5kbGVzIHRyYWlsaW5nIHNsYXNo IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgbHN0YXQgY29ycmVjdGx5IGhhbmRs ZXMgdHJhaWxpbmcgc2xhc2guLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfZnVuY19sc3Rh dF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rK3NldH0iID0gc2V0OyB0aGVuIDoKK3sgJGFz X2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEJaMl9iekRl Y29tcHJlc3NJbml0IGluIC1sYnoyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBCWjJf YnpEZWNvbXByZXNzSW5pdCBpbiAtbGJ6Mi4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9s aWJfYnoyX0JaMl9iekRlY29tcHJlc3NJbml0K3NldH0iID0gc2V0OyB0aGVuIDoKICAgJGFzX2Vj aG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgcm0gLWYgY29uZnRlc3Quc3ltIGNvbmZ0ZXN0 LmZpbGUKLWVjaG8gPmNvbmZ0ZXN0LmZpbGUKLWlmIHRlc3QgIiRhc19sbl9zIiA9ICJsbiAtcyIg JiYgbG4gLXMgY29uZnRlc3QuZmlsZSBjb25mdGVzdC5zeW07IHRoZW4KLSAgaWYgdGVzdCAiJGNy b3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgotICBhY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJl bmNlc19zbGFzaGVkX3N5bWxpbms9bm8KLWVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VP RiA+Y29uZnRlc3QuJGFjX2V4dAorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJT PSItbGJ6MiAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNf ZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAorCisvKiBP dmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAg IFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdD QworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxs IGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFy IEJaMl9iekRlY29tcHJlc3NJbml0ICgpOwogaW50CiBtYWluICgpCiB7Ci1zdHJ1Y3Qgc3RhdCBz YnVmOwotICAgICAvKiBMaW51eCB3aWxsIGRlcmVmZXJlbmNlIHRoZSBzeW1saW5rIGFuZCBmYWls LCBhcyByZXF1aXJlZCBieSBQT1NJWC4KLQlUaGF0IGlzIGJldHRlciBpbiB0aGUgc2Vuc2UgdGhh dCBpdCBtZWFucyB3ZSB3aWxsIG5vdAotCWhhdmUgdG8gY29tcGlsZSBhbmQgdXNlIHRoZSBsc3Rh dCB3cmFwcGVyLiAgKi8KLSAgICAgcmV0dXJuIGxzdGF0ICgiY29uZnRlc3Quc3ltLyIsICZzYnVm KSA9PSAwOworcmV0dXJuIEJaMl9iekRlY29tcHJlc3NJbml0ICgpOwogICA7CiAgIHJldHVybiAw OwogfQogX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNf Y3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPXllcwotZWxzZQotICBh Y19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9bm8KLWZpCi1ybSAt ZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFj X2V4ZWV4dCBcCi0gIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4k YWNfZXh0Ci1maQotCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFj X2N2X2xpYl9iejJfQloyX2J6RGVjb21wcmVzc0luaXQ9eWVzCiBlbHNlCi0gICMgSWYgdGhlIGBs biAtcycgY29tbWFuZCBmYWlsZWQsIHRoZW4gd2UgcHJvYmFibHkgZG9uJ3QgZXZlbgotICAjIGhh dmUgYW4gbHN0YXQgZnVuY3Rpb24uCi0gIGFjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3Ns YXNoZWRfc3ltbGluaz1ubworICBhY19jdl9saWJfYnoyX0JaMl9iekRlY29tcHJlc3NJbml0PW5v CiBmaQotcm0gLWYgY29uZnRlc3Quc3ltIGNvbmZ0ZXN0LmZpbGUKLQorcm0gLWYgY29yZSBjb25m dGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNv bmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9iejJf QloyX2J6RGVjb21wcmVzc0luaXQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfYnoyX0JaMl9i ekRlY29tcHJlc3NJbml0IiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2J6Ml9CWjJfYnpE ZWNvbXByZXNzSW5pdCIgPSB4IiJ5ZXM7IHRoZW4gOgorICB6bGliPSIkemxpYiAtREhBVkVfQlpM SUIgLWxiejIiCiBmaQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBy ZXN1bHQ6ICRhY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbmsiID4m NQotJGFzX2VjaG8gIiRhY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxp bmsiID4mNjsgfQotCi10ZXN0ICRhY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVk X3N5bWxpbmsgPSB5ZXMgJiYKIAotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBM U1RBVF9GT0xMT1dTX1NMQVNIRURfU1lNTElOSyAxCi1fQUNFT0YKIAorZmkKIAotaWYgdGVzdCAi eCRhY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbmsiID0geG5vOyB0 aGVuCi0gIGNhc2UgIiAkTElCT0JKUyAiIGluCi0gICoiIGxzdGF0LiRhY19vYmpleHQgIiogKSA7 OwotICAqKSBMSUJPQkpTPSIkTElCT0JKUyBsc3RhdC4kYWNfb2JqZXh0IgotIDs7Ci1lc2FjCiAK LWZpCithY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAibHptYS5oIiAiYWNf Y3ZfaGVhZGVyX2x6bWFfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19j dl9oZWFkZXJfbHptYV9oIiA9IHgiInllczsgdGhlbiA6CiAKLXsgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBzeXMvdHlwZXMuaCBkZWZpbmVz IG1ha2VkZXYiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBzeXMvdHlwZXMuaCBk ZWZpbmVzIG1ha2VkZXYuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3N5c190 eXBlc19oX21ha2VkZXYrc2V0fSIgPSBzZXQ7IHRoZW4gOgoreyAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbHptYV9zdHJlYW1fZGVjb2RlciBpbiAt bGx6bWEiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGx6bWFfc3RyZWFtX2RlY29kZXIg aW4gLWxsem1hLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9sem1hX2x6bWFfc3Ry ZWFtX2RlY29kZXIrc2V0fSIgPSBzZXQ7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAi ID4mNgogZWxzZQotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0 CisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sbHptYSAgJExJQlMiCitj YXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRl ZnMuaC4gICovCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKy8qIE92ZXJyaWRlIGFueSBHQ0Mg aW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVz ZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFu ZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lm ZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgbHptYV9zdHJlYW1fZGVj b2RlciAoKTsKIGludAogbWFpbiAoKQogewotcmV0dXJuIG1ha2VkZXYoMCwgMCk7CityZXR1cm4g bHptYV9zdHJlYW1fZGVjb2RlciAoKTsKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgogaWYg YWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9oZWFkZXJfc3lzX3R5 cGVzX2hfbWFrZWRldj15ZXMKKyAgYWNfY3ZfbGliX2x6bWFfbHptYV9zdHJlYW1fZGVjb2Rlcj15 ZXMKIGVsc2UKLSAgYWNfY3ZfaGVhZGVyX3N5c190eXBlc19oX21ha2VkZXY9bm8KKyAgYWNfY3Zf bGliX2x6bWFfbHptYV9zdHJlYW1fZGVjb2Rlcj1ubwogZmkKIHJtIC1mIGNvcmUgY29uZnRlc3Qu ZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAogICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVz dC4kYWNfZXh0Ci0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9zeXNfdHlwZXNfaF9tYWtlZGV2IiA+JjUKLSRhc19lY2hv ICIkYWNfY3ZfaGVhZGVyX3N5c190eXBlc19oX21ha2VkZXYiID4mNjsgfQotCi1pZiB0ZXN0ICRh Y19jdl9oZWFkZXJfc3lzX3R5cGVzX2hfbWFrZWRldiA9IG5vOyB0aGVuCi1hY19mbl9jX2NoZWNr X2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAic3lzL21rZGV2LmgiICJhY19jdl9oZWFkZXJfc3lz X21rZGV2X2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKLWlmIHRlc3QgIngkYWNfY3ZfaGVhZGVy X3N5c19ta2Rldl9oIiA9IHgiInllczsgdGhlbiA6Ci0KLSRhc19lY2hvICIjZGVmaW5lIE1BSk9S X0lOX01LREVWIDEiID4+Y29uZmRlZnMuaAotCitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJT CiBmaQotCi0KLQotICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3lzX21rZGV2X2ggPSBubzsgdGhl bgotICAgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJzeXMvc3lzbWFj cm9zLmgiICJhY19jdl9oZWFkZXJfc3lzX3N5c21hY3Jvc19oIiAiJGFjX2luY2x1ZGVzX2RlZmF1 bHQiCi1pZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9zeXNfc3lzbWFjcm9zX2giID0geCIieWVzOyB0 aGVuIDoKLQotJGFzX2VjaG8gIiNkZWZpbmUgTUFKT1JfSU5fU1lTTUFDUk9TIDEiID4+Y29uZmRl ZnMuaAotCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDog JGFjX2N2X2xpYl9sem1hX2x6bWFfc3RyZWFtX2RlY29kZXIiID4mNQorJGFzX2VjaG8gIiRhY19j dl9saWJfbHptYV9sem1hX3N0cmVhbV9kZWNvZGVyIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3Zf bGliX2x6bWFfbHptYV9zdHJlYW1fZGVjb2RlciIgPSB4IiJ5ZXM7IHRoZW4gOgorICB6bGliPSIk emxpYiAtREhBVkVfTFpNQSAtbGx6bWEiCiBmaQogCiAKLSAgZmkKIGZpCiAKLWZvciBhY19oZWFk ZXIgaW4gc3RkbGliLmgKLWRvIDoKLSAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJ TkVOTyIgInN0ZGxpYi5oIiAiYWNfY3ZfaGVhZGVyX3N0ZGxpYl9oIiAiJGFjX2luY2x1ZGVzX2Rl ZmF1bHQiCi1pZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9zdGRsaWJfaCIgPSB4IiJ5ZXM7IHRoZW4g OgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfU1RETElCX0ggMQot X0FDRU9GCi0KLWZpCiAKLWRvbmUKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5F Tk8iICJsem8vbHpvMXguaCIgImFjX2N2X2hlYWRlcl9sem9fbHpvMXhfaCIgIiRhY19pbmNsdWRl c19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfbHpvX2x6bzF4X2giID0geCIieWVz OyB0aGVuIDoKIAoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVj a2luZyBmb3IgR05VIGxpYmMgY29tcGF0aWJsZSBtYWxsb2MiID4mNQotJGFzX2VjaG9fbiAiY2hl Y2tpbmcgZm9yIEdOVSBsaWJjIGNvbXBhdGlibGUgbWFsbG9jLi4uICIgPiY2OyB9Ci1pZiB0ZXN0 ICIke2FjX2N2X2Z1bmNfbWFsbG9jXzBfbm9ubnVsbCtzZXR9IiA9IHNldDsgdGhlbiA6Cit7ICRh c19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsem8xeF9k ZWNvbXByZXNzIGluIC1sbHpvMiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbHpvMXhf ZGVjb21wcmVzcyBpbiAtbGx6bzIuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX2x6 bzJfbHpvMXhfZGVjb21wcmVzcytzZXR9IiA9IHNldDsgdGhlbiA6CiAgICRhc19lY2hvX24gIihj YWNoZWQpICIgPiY2CiBlbHNlCi0gIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0 aGVuIDoKLSAgYWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsPW5vCi1lbHNlCi0gIGNhdCBjb25m ZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAgYWNfY2hlY2tfbGliX3NhdmVf TElCUz0kTElCUworTElCUz0iLWxsem8yICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNF T0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpZiBkZWZpbmVk IFNURENfSEVBREVSUyB8fCBkZWZpbmVkIEhBVkVfU1RETElCX0gKLSMgaW5jbHVkZSA8c3RkbGli Lmg+Ci0jZWxzZQotY2hhciAqbWFsbG9jICgpOwotI2VuZGlmCiAKKy8qIE92ZXJyaWRlIGFueSBH Q0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVj YXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGlu IGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwor I2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgbHpvMXhfZGVjb21w cmVzcyAoKTsKIGludAogbWFpbiAoKQogewotcmV0dXJuICEgbWFsbG9jICgwKTsKK3JldHVybiBs em8xeF9kZWNvbXByZXNzICgpOwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1pZiBhY19m bl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3ZfZnVuY19tYWxsb2NfMF9ub25u dWxsPXllcworaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9s aWJfbHpvMl9sem8xeF9kZWNvbXByZXNzPXllcwogZWxzZQotICBhY19jdl9mdW5jX21hbGxvY18w X25vbm51bGw9bm8KKyAgYWNfY3ZfbGliX2x6bzJfbHpvMXhfZGVjb21wcmVzcz1ubwogZmkKLXJt IC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3Qk YWNfZXhlZXh0IFwKLSAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0 LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAor ICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19s aWJfc2F2ZV9MSUJTCiBmaQotCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IHJlc3VsdDogJGFjX2N2X2xpYl9sem8yX2x6bzF4X2RlY29tcHJlc3MiID4mNQorJGFzX2Vj aG8gIiRhY19jdl9saWJfbHpvMl9sem8xeF9kZWNvbXByZXNzIiA+JjY7IH0KK2lmIHRlc3QgIngk YWNfY3ZfbGliX2x6bzJfbHpvMXhfZGVjb21wcmVzcyIgPSB4IiJ5ZXM7IHRoZW4gOgorICB6bGli PSIkemxpYiAtREhBVkVfTFpPMVggLWxsem8yIgogZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2Fz X2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsIiA+ JjUKLSRhc19lY2hvICIkYWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsIiA+JjY7IH0KLWlmIHRl c3QgJGFjX2N2X2Z1bmNfbWFsbG9jXzBfbm9ubnVsbCA9IHllczsgdGhlbiA6Ci0KLSRhc19lY2hv ICIjZGVmaW5lIEhBVkVfTUFMTE9DIDEiID4+Y29uZmRlZnMuaAotCi1lbHNlCi0gICRhc19lY2hv ICIjZGVmaW5lIEhBVkVfTUFMTE9DIDAiID4+Y29uZmRlZnMuaAotCi0gICBjYXNlICIgJExJQk9C SlMgIiBpbgotICAqIiBtYWxsb2MuJGFjX29iamV4dCAiKiApIDs7Ci0gICopIExJQk9CSlM9IiRM SUJPQkpTIG1hbGxvYy4kYWNfb2JqZXh0IgotIDs7Ci1lc2FjCi0KIAotJGFzX2VjaG8gIiNkZWZp bmUgbWFsbG9jIHJwbF9tYWxsb2MiID4+Y29uZmRlZnMuaAogCiBmaQogCiAKLXsgJGFzX2VjaG8g IiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aW1lLmggYW5k IHN5cy90aW1lLmggbWF5IGJvdGggYmUgaW5jbHVkZWQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tp bmcgd2hldGhlciB0aW1lLmggYW5kIHN5cy90aW1lLmggbWF5IGJvdGggYmUgaW5jbHVkZWQuLi4g IiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3RpbWUrc2V0fSIgPSBzZXQ7IHRoZW4g OgorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZv ciBpb19zZXR1cCBpbiAtbGFpbyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgaW9fc2V0 dXAgaW4gLWxhaW8uLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX2Fpb19pb19zZXR1 cCtzZXR9IiA9IHNldDsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNl Ci0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAgYWNfY2hl Y2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxhaW8gICRMSUJTIgorY2F0IGNvbmZkZWZz LmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwot I2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jaW5jbHVkZSA8 dGltZS5oPgogCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9p ZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1 cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90 eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJD IgorI2VuZGlmCitjaGFyIGlvX3NldHVwICgpOwogaW50CiBtYWluICgpCiB7Ci1pZiAoKHN0cnVj dCB0bSAqKSAwKQotcmV0dXJuIDA7CityZXR1cm4gaW9fc2V0dXAgKCk7CiAgIDsKICAgcmV0dXJu IDA7CiB9CiBfQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoK LSAgYWNfY3ZfaGVhZGVyX3RpbWU9eWVzCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsg dGhlbiA6CisgIGFjX2N2X2xpYl9haW9faW9fc2V0dXA9eWVzCiBlbHNlCi0gIGFjX2N2X2hlYWRl cl90aW1lPW5vCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4 dCBjb25mdGVzdC4kYWNfZXh0Ci1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRM SU5FTk99OiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfdGltZSIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2 X2hlYWRlcl90aW1lIiA+JjY7IH0KLWlmIHRlc3QgJGFjX2N2X2hlYWRlcl90aW1lID0geWVzOyB0 aGVuCi0KLSRhc19lY2hvICIjZGVmaW5lIFRJTUVfV0lUSF9TWVNfVElNRSAxIiA+PmNvbmZkZWZz LmgKLQorICBhY19jdl9saWJfYWlvX2lvX3NldHVwPW5vCiBmaQotCi0KLQotCi0gIGZvciBhY19o ZWFkZXIgaW4gJGFjX2hlYWRlcl9saXN0Ci1kbyA6Ci0gIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8g ImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKLWFjX2ZuX2NfY2hlY2tfaGVh ZGVyX2NvbXBpbGUgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRhY19p bmNsdWRlc19kZWZhdWx0Ci0iCi1pZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9 IHgieWVzIjsgdGhlbiA6Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYCRh c19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KK3JtIC1m IGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFj X2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCiBm aQotCi1kb25lCi0KLQotCi0KLQotCi0KLQotICBmb3IgYWNfZnVuYyBpbiAkYWNfZnVuY19saXN0 Ci1kbyA6Ci0gIGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFz X3RyX3NoYAotYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiJGFjX2Z1bmMiICIkYXNfYWNf dmFyIgotaWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY192YXIiXCIgPSB4InllcyI7IHRoZW4gOgot ICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNf ZnVuYyIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfYWlvX2lvX3NldHVwIiA+JjUKKyRh c19lY2hvICIkYWNfY3ZfbGliX2Fpb19pb19zZXR1cCIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2 X2xpYl9haW9faW9fc2V0dXAiID0geCIieWVzOyB0aGVuIDoKKyAgc3lzdGVtX2Fpbz0ieSIKK2Vs c2UKKyAgc3lzdGVtX2Fpbz0ibiIKIGZpCi1kb25lCi0KIAogCi0KLQoteyAkYXNfZWNobyAiJGFz X21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igd29ya2luZyBta3RpbWUiID4m NQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHdvcmtpbmcgbWt0aW1lLi4uICIgPiY2OyB9Ci1p ZiB0ZXN0ICIke2FjX2N2X2Z1bmNfd29ya2luZ19ta3RpbWUrc2V0fSIgPSBzZXQ7IHRoZW4gOgor eyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgTUQ1 IGluIC1sY3J5cHRvIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBNRDUgaW4gLWxjcnlw dG8uLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX2NyeXB0b19NRDUrc2V0fSIgPSBz ZXQ7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBpZiB0ZXN0 ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6Ci0gIGFjX2N2X2Z1bmNfd29ya2luZ19t a3RpbWU9bm8KLWVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFj X2V4dAorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGNyeXB0byAgJExJ QlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQg Y29uZmRlZnMuaC4gICovCi0vKiBUZXN0IHByb2dyYW0gZnJvbSBQYXVsIEVnZ2VydCBhbmQgVG9u eSBMZW5laXMuICAqLwotI2lmZGVmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpbmNsdWRlIDxzeXMv dGltZS5oPgotIyBpbmNsdWRlIDx0aW1lLmg+Ci0jZWxzZQotIyBpZmRlZiBIQVZFX1NZU19USU1F X0gKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHRpbWUuaD4K LSMgZW5kaWYKLSNlbmRpZgotCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8c3RkbGli Lmg+CiAKLSNpZmRlZiBIQVZFX1VOSVNURF9ICi0jIGluY2x1ZGUgPHVuaXN0ZC5oPgotI2VuZGlm Ci0KLSNpZm5kZWYgSEFWRV9BTEFSTQotIyBkZWZpbmUgYWxhcm0oWCkgLyogZW1wdHkgKi8KKy8q IE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgor ICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEg R0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3Rp bGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCiAjZW5kaWYKLQot LyogV29yayBhcm91bmQgcmVkZWZpbml0aW9uIHRvIHJwbF9wdXRlbnYgYnkgb3RoZXIgY29uZmln IHRlc3RzLiAgKi8KLSN1bmRlZiBwdXRlbnYKLQotc3RhdGljIHRpbWVfdCB0aW1lX3RfbWF4Owot c3RhdGljIHRpbWVfdCB0aW1lX3RfbWluOwotCi0vKiBWYWx1ZXMgd2UnbGwgdXNlIHRvIHNldCB0 aGUgVFogZW52aXJvbm1lbnQgdmFyaWFibGUuICAqLwotc3RhdGljIGNvbnN0IGNoYXIgKnR6X3N0 cmluZ3NbXSA9IHsKLSAgKGNvbnN0IGNoYXIgKikgMCwgIlRaPUdNVDAiLCAiVFo9SlNULTkiLAot ICAiVFo9RVNUKzNFRFQrMixNMTAuMS4wLzAwOjAwOjAwLE0yLjMuMC8wMDowMDowMCIKLX07Ci0j ZGVmaW5lIE5fU1RSSU5HUyAoc2l6ZW9mICh0el9zdHJpbmdzKSAvIHNpemVvZiAodHpfc3RyaW5n c1swXSkpCi0KLS8qIFJldHVybiAwIGlmIG1rdGltZSBmYWlscyB0byBjb252ZXJ0IGEgZGF0ZSBp biB0aGUgc3ByaW5nLWZvcndhcmQgZ2FwLgotICAgQmFzZWQgb24gYSBwcm9ibGVtIHJlcG9ydCBm cm9tIEFuZHJlYXMgSmFlZ2VyLiAgKi8KLXN0YXRpYyBpbnQKLXNwcmluZ19mb3J3YXJkX2dhcCAo KQotewotICAvKiBnbGliYyAodXAgdG8gYWJvdXQgMTk5OC0xMC0wNykgZmFpbGVkIHRoaXMgdGVz dC4gKi8KLSAgc3RydWN0IHRtIHRtOwotCi0gIC8qIFVzZSB0aGUgcG9ydGFibGUgUE9TSVguMSBz cGVjaWZpY2F0aW9uICJUWj1QU1Q4UERULE00LjEuMCxNMTAuNS4wIgotICAgICBpbnN0ZWFkIG9m ICJUWj1BbWVyaWNhL1ZhbmNvdXZlciIgaW4gb3JkZXIgdG8gZGV0ZWN0IHRoZSBidWcgZXZlbgot ICAgICBvbiBzeXN0ZW1zIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aGUgT2xzb24gZXh0ZW5zaW9uLCBv ciBkb24ndCBoYXZlIHRoZQotICAgICBmdWxsIHpvbmVpbmZvIHRhYmxlcyBpbnN0YWxsZWQuICAq LwotICBwdXRlbnYgKChjaGFyKikgIlRaPVBTVDhQRFQsTTQuMS4wLE0xMC41LjAiKTsKLQotICB0 bS50bV95ZWFyID0gOTg7Ci0gIHRtLnRtX21vbiA9IDM7Ci0gIHRtLnRtX21kYXkgPSA1OwotICB0 bS50bV9ob3VyID0gMjsKLSAgdG0udG1fbWluID0gMDsKLSAgdG0udG1fc2VjID0gMDsKLSAgdG0u dG1faXNkc3QgPSAtMTsKLSAgcmV0dXJuIG1rdGltZSAoJnRtKSAhPSAodGltZV90KSAtMTsKLX0K LQotc3RhdGljIGludAotbWt0aW1lX3Rlc3QxICh0aW1lX3Qgbm93KQotewotICBzdHJ1Y3QgdG0g Kmx0OwotICByZXR1cm4gISAobHQgPSBsb2NhbHRpbWUgKCZub3cpKSB8fCBta3RpbWUgKGx0KSA9 PSBub3c7Ci19Ci0KLXN0YXRpYyBpbnQKLW1rdGltZV90ZXN0ICh0aW1lX3Qgbm93KQotewotICBy ZXR1cm4gKG1rdGltZV90ZXN0MSAobm93KQotCSAgJiYgbWt0aW1lX3Rlc3QxICgodGltZV90KSAo dGltZV90X21heCAtIG5vdykpCi0JICAmJiBta3RpbWVfdGVzdDEgKCh0aW1lX3QpICh0aW1lX3Rf bWluICsgbm93KSkpOwotfQotCi1zdGF0aWMgaW50Ci1pcml4XzZfNF9idWcgKCkKLXsKLSAgLyog QmFzZWQgb24gY29kZSBmcm9tIEFyaWVsIEZhaWdvbi4gICovCi0gIHN0cnVjdCB0bSB0bTsKLSAg dG0udG1feWVhciA9IDk2OwotICB0bS50bV9tb24gPSAzOwotICB0bS50bV9tZGF5ID0gMDsKLSAg dG0udG1faG91ciA9IDA7Ci0gIHRtLnRtX21pbiA9IDA7Ci0gIHRtLnRtX3NlYyA9IDA7Ci0gIHRt LnRtX2lzZHN0ID0gLTE7Ci0gIG1rdGltZSAoJnRtKTsKLSAgcmV0dXJuIHRtLnRtX21vbiA9PSAy ICYmIHRtLnRtX21kYXkgPT0gMzE7Ci19Ci0KLXN0YXRpYyBpbnQKLWJpZ3RpbWVfdGVzdCAoaW50 IGopCi17Ci0gIHN0cnVjdCB0bSB0bTsKLSAgdGltZV90IG5vdzsKLSAgdG0udG1feWVhciA9IHRt LnRtX21vbiA9IHRtLnRtX21kYXkgPSB0bS50bV9ob3VyID0gdG0udG1fbWluID0gdG0udG1fc2Vj ID0gajsKLSAgbm93ID0gbWt0aW1lICgmdG0pOwotICBpZiAobm93ICE9ICh0aW1lX3QpIC0xKQot ICAgIHsKLSAgICAgIHN0cnVjdCB0bSAqbHQgPSBsb2NhbHRpbWUgKCZub3cpOwotICAgICAgaWYg KCEgKGx0Ci0JICAgICAmJiBsdC0+dG1feWVhciA9PSB0bS50bV95ZWFyCi0JICAgICAmJiBsdC0+ dG1fbW9uID09IHRtLnRtX21vbgotCSAgICAgJiYgbHQtPnRtX21kYXkgPT0gdG0udG1fbWRheQot CSAgICAgJiYgbHQtPnRtX2hvdXIgPT0gdG0udG1faG91cgotCSAgICAgJiYgbHQtPnRtX21pbiA9 PSB0bS50bV9taW4KLQkgICAgICYmIGx0LT50bV9zZWMgPT0gdG0udG1fc2VjCi0JICAgICAmJiBs dC0+dG1feWRheSA9PSB0bS50bV95ZGF5Ci0JICAgICAmJiBsdC0+dG1fd2RheSA9PSB0bS50bV93 ZGF5Ci0JICAgICAmJiAoKGx0LT50bV9pc2RzdCA8IDAgPyAtMSA6IDAgPCBsdC0+dG1faXNkc3Qp Ci0JCSAgPT0gKHRtLnRtX2lzZHN0IDwgMCA/IC0xIDogMCA8IHRtLnRtX2lzZHN0KSkpKQotCXJl dHVybiAwOwotICAgIH0KLSAgcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbnQKLXllYXJfMjA1MF90 ZXN0ICgpCi17Ci0gIC8qIFRoZSBjb3JyZWN0IGFuc3dlciBmb3IgMjA1MC0wMi0wMSAwMDowMDow MCBpbiBQYWNpZmljIHRpbWUsCi0gICAgIGlnbm9yaW5nIGxlYXAgc2Vjb25kcy4gICovCi0gIHVu c2lnbmVkIGxvbmcgaW50IGFuc3dlciA9IDI1MjczMTUyMDBVTDsKLQotICBzdHJ1Y3QgdG0gdG07 Ci0gIHRpbWVfdCB0OwotICB0bS50bV95ZWFyID0gMjA1MCAtIDE5MDA7Ci0gIHRtLnRtX21vbiA9 IDIgLSAxOwotICB0bS50bV9tZGF5ID0gMTsKLSAgdG0udG1faG91ciA9IHRtLnRtX21pbiA9IHRt LnRtX3NlYyA9IDA7Ci0gIHRtLnRtX2lzZHN0ID0gLTE7Ci0KLSAgLyogVXNlIHRoZSBwb3J0YWJs ZSBQT1NJWC4xIHNwZWNpZmljYXRpb24gIlRaPVBTVDhQRFQsTTQuMS4wLE0xMC41LjAiCi0gICAg IGluc3RlYWQgb2YgIlRaPUFtZXJpY2EvVmFuY291dmVyIiBpbiBvcmRlciB0byBkZXRlY3QgdGhl IGJ1ZyBldmVuCi0gICAgIG9uIHN5c3RlbXMgdGhhdCBkb24ndCBzdXBwb3J0IHRoZSBPbHNvbiBl eHRlbnNpb24sIG9yIGRvbid0IGhhdmUgdGhlCi0gICAgIGZ1bGwgem9uZWluZm8gdGFibGVzIGlu c3RhbGxlZC4gICovCi0gIHB1dGVudiAoKGNoYXIqKSAiVFo9UFNUOFBEVCxNNC4xLjAsTTEwLjUu MCIpOwotCi0gIHQgPSBta3RpbWUgKCZ0bSk7Ci0KLSAgLyogQ2hlY2sgdGhhdCB0aGUgcmVzdWx0 IGlzIGVpdGhlciBhIGZhaWx1cmUsIG9yIGNsb3NlIGVub3VnaAotICAgICB0byB0aGUgY29ycmVj dCBhbnN3ZXIgdGhhdCB3ZSBjYW4gYXNzdW1lIHRoZSBkaXNjcmVwYW5jeSBpcwotICAgICBkdWUg dG8gbGVhcCBzZWNvbmRzLiAgKi8KLSAgcmV0dXJuICh0ID09ICh0aW1lX3QpIC0xCi0JICB8fCAo MCA8IHQgJiYgYW5zd2VyIC0gMTIwIDw9IHQgJiYgdCA8PSBhbnN3ZXIgKyAxMjApKTsKLX0KLQor Y2hhciBNRDUgKCk7CiBpbnQKIG1haW4gKCkKIHsKLSAgdGltZV90IHQsIGRlbHRhOwotICBpbnQg aSwgajsKLQotICAvKiBUaGlzIHRlc3QgbWFrZXMgc29tZSBidWdneSBta3RpbWUgaW1wbGVtZW50 YXRpb25zIGxvb3AuCi0gICAgIEdpdmUgdXAgYWZ0ZXIgNjAgc2Vjb25kczsgYSBta3RpbWUgc2xv d2VyIHRoYW4gdGhhdAotICAgICBpc24ndCB3b3J0aCB1c2luZyBhbnl3YXkuICAqLwotICBhbGFy bSAoNjApOwotCi0gIGZvciAoOzspCi0gICAgewotICAgICAgdCA9ICh0aW1lX3RfbWF4IDw8IDEp ICsgMTsKLSAgICAgIGlmICh0IDw9IHRpbWVfdF9tYXgpCi0JYnJlYWs7Ci0gICAgICB0aW1lX3Rf bWF4ID0gdDsKLSAgICB9Ci0gIHRpbWVfdF9taW4gPSAtICgodGltZV90KSB+ICh0aW1lX3QpIDAg PT0gKHRpbWVfdCkgLTEpIC0gdGltZV90X21heDsKLQotICBkZWx0YSA9IHRpbWVfdF9tYXggLyA5 OTc7IC8qIGEgc3VpdGFibGUgcHJpbWUgbnVtYmVyICovCi0gIGZvciAoaSA9IDA7IGkgPCBOX1NU UklOR1M7IGkrKykKLSAgICB7Ci0gICAgICBpZiAodHpfc3RyaW5nc1tpXSkKLQlwdXRlbnYgKChj aGFyKikgdHpfc3RyaW5nc1tpXSk7Ci0KLSAgICAgIGZvciAodCA9IDA7IHQgPD0gdGltZV90X21h eCAtIGRlbHRhOyB0ICs9IGRlbHRhKQotCWlmICghIG1rdGltZV90ZXN0ICh0KSkKLQkgIHJldHVy biAxOwotICAgICAgaWYgKCEgKG1rdGltZV90ZXN0ICgodGltZV90KSAxKQotCSAgICAgJiYgbWt0 aW1lX3Rlc3QgKCh0aW1lX3QpICg2MCAqIDYwKSkKLQkgICAgICYmIG1rdGltZV90ZXN0ICgodGlt ZV90KSAoNjAgKiA2MCAqIDI0KSkpKQotCXJldHVybiAxOwotCi0gICAgICBmb3IgKGogPSAxOyA7 IGogPDw9IDEpCi0JaWYgKCEgYmlndGltZV90ZXN0IChqKSkKLQkgIHJldHVybiAxOwotCWVsc2Ug aWYgKElOVF9NQVggLyAyIDwgaikKLQkgIGJyZWFrOwotICAgICAgaWYgKCEgYmlndGltZV90ZXN0 IChJTlRfTUFYKSkKLQlyZXR1cm4gMTsKLSAgICB9Ci0gIHJldHVybiAhIChpcml4XzZfNF9idWcg KCkgJiYgc3ByaW5nX2ZvcndhcmRfZ2FwICgpICYmIHllYXJfMjA1MF90ZXN0ICgpKTsKK3JldHVy biBNRDUgKCk7CisgIDsKKyAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X3J1 biAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9mdW5jX3dvcmtpbmdfbWt0aW1lPXllcworaWYg YWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfY3J5cHRvX01E NT15ZXMKIGVsc2UKLSAgYWNfY3ZfZnVuY193b3JraW5nX21rdGltZT1ubwotZmkKLXJtIC1mIGNv cmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhl ZXh0IFwKLSAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19l eHQKLWZpCi0KKyAgYWNfY3ZfbGliX2NyeXB0b19NRDU9bm8KIGZpCi17ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2Z1bmNfd29ya2luZ19ta3Rp bWUiID4mNQotJGFzX2VjaG8gIiRhY19jdl9mdW5jX3dvcmtpbmdfbWt0aW1lIiA+JjY7IH0KLWlm IHRlc3QgJGFjX2N2X2Z1bmNfd29ya2luZ19ta3RpbWUgPSBubzsgdGhlbgotICBjYXNlICIgJExJ Qk9CSlMgIiBpbgotICAqIiBta3RpbWUuJGFjX29iamV4dCAiKiApIDs7Ci0gICopIExJQk9CSlM9 IiRMSUJPQkpTIG1rdGltZS4kYWNfb2JqZXh0IgotIDs7Ci1lc2FjCi0KK3JtIC1mIGNvcmUgY29u ZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBj b25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCiBmaQotCi0KLQot Ci0KLQotZm9yIGFjX2Z1bmMgaW4gZ2V0cGFnZXNpemUKLWRvIDoKLSAgYWNfZm5fY19jaGVja19m dW5jICIkTElORU5PIiAiZ2V0cGFnZXNpemUiICJhY19jdl9mdW5jX2dldHBhZ2VzaXplIgotaWYg dGVzdCAieCRhY19jdl9mdW5jX2dldHBhZ2VzaXplIiA9IHgiInllczsgdGhlbiA6Cit7ICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9jcnlw dG9fTUQ1IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2NyeXB0b19NRDUiID4mNjsgfQoraWYg dGVzdCAieCRhY19jdl9saWJfY3J5cHRvX01ENSIgPSB4IiJ5ZXM7IHRoZW4gOgogICBjYXQgPj5j b25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfR0VUUEFHRVNJWkUgMQorI2RlZmluZSBI QVZFX0xJQkNSWVBUTyAxCiBfQUNFT0YKIAorICBMSUJTPSItbGNyeXB0byAkTElCUyIKKworZWxz ZQorICBhc19mbl9lcnJvciAkPyAiQ291bGQgbm90IGZpbmQgbGliY3J5cHRvIiAiJExJTkVOTyIg NQogZmkKLWRvbmUKIAoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBj aGVja2luZyBmb3Igd29ya2luZyBtbWFwIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciB3 b3JraW5nIG1tYXAuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfZnVuY19tbWFwX2ZpeGVk X21hcHBlZCtzZXR9IiA9IHNldDsgdGhlbiA6Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5l bm8tJExJTkVOT306IGNoZWNraW5nIGZvciBleHQyZnNfb3BlbjIgaW4gLWxleHQyZnMiID4mNQor JGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGV4dDJmc19vcGVuMiBpbiAtbGV4dDJmcy4uLiAiID4m NjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfZXh0MmZzX2V4dDJmc19vcGVuMitzZXR9IiA9IHNl dDsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGlmIHRlc3Qg IiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKLSAgYWNfY3ZfZnVuY19tbWFwX2ZpeGVk X21hcHBlZD1ubwotZWxzZQotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4k YWNfZXh0CisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sZXh0MmZzICAk TElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVu ZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci0vKiBtYWxsb2MgbWlnaHQg aGF2ZSBiZWVuIHJlbmFtZWQgYXMgcnBsX21hbGxvYy4gKi8KLSN1bmRlZiBtYWxsb2MKLQotLyog VGhhbmtzIHRvIE1pa2UgSGFlcnRlbCBhbmQgSmltIEF2ZXJhIGZvciB0aGlzIHRlc3QuCi0gICBI ZXJlIGlzIGEgbWF0cml4IG9mIG1tYXAgcG9zc2liaWxpdGllczoKLQltbWFwIHByaXZhdGUgbm90 IGZpeGVkCi0JbW1hcCBwcml2YXRlIGZpeGVkIGF0IHNvbWV3aGVyZSBjdXJyZW50bHkgdW5tYXBw ZWQKLQltbWFwIHByaXZhdGUgZml4ZWQgYXQgc29tZXdoZXJlIGFscmVhZHkgbWFwcGVkCi0JbW1h cCBzaGFyZWQgbm90IGZpeGVkCi0JbW1hcCBzaGFyZWQgZml4ZWQgYXQgc29tZXdoZXJlIGN1cnJl bnRseSB1bm1hcHBlZAotCW1tYXAgc2hhcmVkIGZpeGVkIGF0IHNvbWV3aGVyZSBhbHJlYWR5IG1h cHBlZAotICAgRm9yIHByaXZhdGUgbWFwcGluZ3MsIHdlIHNob3VsZCB2ZXJpZnkgdGhhdCBjaGFu Z2VzIGNhbm5vdCBiZSByZWFkKCkKLSAgIGJhY2sgZnJvbSB0aGUgZmlsZSwgbm9yIG1tYXAncyBi YWNrIGZyb20gdGhlIGZpbGUgYXQgYSBkaWZmZXJlbnQKLSAgIGFkZHJlc3MuICAoVGhlcmUgaGF2 ZSBiZWVuIHN5c3RlbXMgd2hlcmUgcHJpdmF0ZSB3YXMgbm90IGNvcnJlY3RseQotICAgaW1wbGVt ZW50ZWQgbGlrZSB0aGUgaW5mYW1vdXMgaTM4NiBzdnI0LjAsIGFuZCBzeXN0ZW1zIHdoZXJlIHRo ZQotICAgVk0gcGFnZSBjYWNoZSB3YXMgbm90IGNvaGVyZW50IHdpdGggdGhlIGZpbGUgc3lzdGVt IGJ1ZmZlciBjYWNoZQotICAgbGlrZSBlYXJseSB2ZXJzaW9ucyBvZiBGcmVlQlNEIGFuZCBwb3Nz aWJseSBjb250ZW1wb3JhcnkgTmV0QlNELikKLSAgIEZvciBzaGFyZWQgbWFwcGluZ3MsIHdlIHNo b3VsZCBjb252ZXJzZWx5IHZlcmlmeSB0aGF0IGNoYW5nZXMgZ2V0Ci0gICBwcm9wYWdhdGVkIGJh Y2sgdG8gYWxsIHRoZSBwbGFjZXMgdGhleSdyZSBzdXBwb3NlZCB0byBiZS4KLQotICAgR3JlcCB3 YW50cyBwcml2YXRlIGZpeGVkIGFscmVhZHkgbWFwcGVkLgotICAgVGhlIG1haW4gdGhpbmdzIGdy ZXAgbmVlZHMgdG8ga25vdyBhYm91dCBtbWFwIGFyZToKLSAgICogZG9lcyBpdCBleGlzdCBhbmQg aXMgaXQgc2FmZSB0byB3cml0ZSBpbnRvIHRoZSBtbWFwJ2QgYXJlYQotICAgKiBob3cgdG8gdXNl IGl0IChCU0QgdmFyaWFudHMpICAqLwotCi0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxz eXMvbW1hbi5oPgotCi0jaWYgIWRlZmluZWQgU1REQ19IRUFERVJTICYmICFkZWZpbmVkIEhBVkVf U1RETElCX0gKLWNoYXIgKm1hbGxvYyAoKTsKLSNlbmRpZgotCi0vKiBUaGlzIG1lc3Mgd2FzIGNv cGllZCBmcm9tIHRoZSBHTlUgZ2V0cGFnZXNpemUuaC4gICovCi0jaWZuZGVmIEhBVkVfR0VUUEFH RVNJWkUKLSMgaWZkZWYgX1NDX1BBR0VTSVpFCi0jICBkZWZpbmUgZ2V0cGFnZXNpemUoKSBzeXNj b25mKF9TQ19QQUdFU0laRSkKLSMgZWxzZSAvKiBubyBfU0NfUEFHRVNJWkUgKi8KLSMgIGlmZGVm IEhBVkVfU1lTX1BBUkFNX0gKLSMgICBpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSMgICBpZmRlZiBF WEVDX1BBR0VTSVpFCi0jICAgIGRlZmluZSBnZXRwYWdlc2l6ZSgpIEVYRUNfUEFHRVNJWkUKLSMg ICBlbHNlIC8qIG5vIEVYRUNfUEFHRVNJWkUgKi8KLSMgICAgaWZkZWYgTkJQRwotIyAgICAgZGVm aW5lIGdldHBhZ2VzaXplKCkgTkJQRyAqIENMU0laRQotIyAgICAgaWZuZGVmIENMU0laRQotIyAg ICAgIGRlZmluZSBDTFNJWkUgMQotIyAgICAgZW5kaWYgLyogbm8gQ0xTSVpFICovCi0jICAgIGVs c2UgLyogbm8gTkJQRyAqLwotIyAgICAgaWZkZWYgTkJQQwotIyAgICAgIGRlZmluZSBnZXRwYWdl c2l6ZSgpIE5CUEMKLSMgICAgIGVsc2UgLyogbm8gTkJQQyAqLwotIyAgICAgIGlmZGVmIFBBR0VT SVpFCi0jICAgICAgIGRlZmluZSBnZXRwYWdlc2l6ZSgpIFBBR0VTSVpFCi0jICAgICAgZW5kaWYg LyogUEFHRVNJWkUgKi8KLSMgICAgIGVuZGlmIC8qIG5vIE5CUEMgKi8KLSMgICAgZW5kaWYgLyog bm8gTkJQRyAqLwotIyAgIGVuZGlmIC8qIG5vIEVYRUNfUEFHRVNJWkUgKi8KLSMgIGVsc2UgLyog bm8gSEFWRV9TWVNfUEFSQU1fSCAqLwotIyAgIGRlZmluZSBnZXRwYWdlc2l6ZSgpIDgxOTIJLyog cHVudCB0b3RhbGx5ICovCi0jICBlbmRpZiAvKiBubyBIQVZFX1NZU19QQVJBTV9IICovCi0jIGVu ZGlmIC8qIG5vIF9TQ19QQUdFU0laRSAqLwotCi0jZW5kaWYgLyogbm8gSEFWRV9HRVRQQUdFU0la RSAqLwogCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBh biBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4g dHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBl IHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgor I2VuZGlmCitjaGFyIGV4dDJmc19vcGVuMiAoKTsKIGludAogbWFpbiAoKQogewotICBjaGFyICpk YXRhLCAqZGF0YTIsICpkYXRhMzsKLSAgY29uc3QgY2hhciAqY2RhdGEyOwotICBpbnQgaSwgcGFn ZXNpemU7Ci0gIGludCBmZCwgZmQyOwotCi0gIHBhZ2VzaXplID0gZ2V0cGFnZXNpemUgKCk7Ci0K LSAgLyogRmlyc3QsIG1ha2UgYSBmaWxlIHdpdGggc29tZSBrbm93biBnYXJiYWdlIGluIGl0LiAq LwotICBkYXRhID0gKGNoYXIgKikgbWFsbG9jIChwYWdlc2l6ZSk7Ci0gIGlmICghZGF0YSkKLSAg ICByZXR1cm4gMTsKLSAgZm9yIChpID0gMDsgaSA8IHBhZ2VzaXplOyArK2kpCi0gICAgKihkYXRh ICsgaSkgPSByYW5kICgpOwotICB1bWFzayAoMCk7Ci0gIGZkID0gY3JlYXQgKCJjb25mdGVzdC5t bWFwIiwgMDYwMCk7Ci0gIGlmIChmZCA8IDApCi0gICAgcmV0dXJuIDI7Ci0gIGlmICh3cml0ZSAo ZmQsIGRhdGEsIHBhZ2VzaXplKSAhPSBwYWdlc2l6ZSkKLSAgICByZXR1cm4gMzsKLSAgY2xvc2Ug KGZkKTsKLQotICAvKiBOZXh0LCBjaGVjayB0aGF0IHRoZSB0YWlsIG9mIGEgcGFnZSBpcyB6ZXJv LWZpbGxlZC4gIEZpbGUgbXVzdCBoYXZlCi0gICAgIG5vbi16ZXJvIGxlbmd0aCwgb3RoZXJ3aXNl IHdlIHJpc2sgU0lHQlVTIGZvciBlbnRpcmUgcGFnZS4gICovCi0gIGZkMiA9IG9wZW4gKCJjb25m dGVzdC50eHQiLCBPX1JEV1IgfCBPX0NSRUFUIHwgT19UUlVOQywgMDYwMCk7Ci0gIGlmIChmZDIg PCAwKQotICAgIHJldHVybiA0OwotICBjZGF0YTIgPSAiIjsKLSAgaWYgKHdyaXRlIChmZDIsIGNk YXRhMiwgMSkgIT0gMSkKLSAgICByZXR1cm4gNTsKLSAgZGF0YTIgPSAoY2hhciAqKSBtbWFwICgw LCBwYWdlc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwgZmQyLCAwTCk7 Ci0gIGlmIChkYXRhMiA9PSBNQVBfRkFJTEVEKQotICAgIHJldHVybiA2OwotICBmb3IgKGkgPSAw OyBpIDwgcGFnZXNpemU7ICsraSkKLSAgICBpZiAoKihkYXRhMiArIGkpKQotICAgICAgcmV0dXJu IDc7Ci0gIGNsb3NlIChmZDIpOwotICBpZiAobXVubWFwIChkYXRhMiwgcGFnZXNpemUpKQotICAg IHJldHVybiA4OwotCi0gIC8qIE5leHQsIHRyeSB0byBtbWFwIHRoZSBmaWxlIGF0IGEgZml4ZWQg YWRkcmVzcyB3aGljaCBhbHJlYWR5IGhhcwotICAgICBzb21ldGhpbmcgZWxzZSBhbGxvY2F0ZWQg YXQgaXQuICBJZiB3ZSBjYW4sIGFsc28gbWFrZSBzdXJlIHRoYXQKLSAgICAgd2Ugc2VlIHRoZSBz YW1lIGdhcmJhZ2UuICAqLwotICBmZCA9IG9wZW4gKCJjb25mdGVzdC5tbWFwIiwgT19SRFdSKTsK LSAgaWYgKGZkIDwgMCkKLSAgICByZXR1cm4gOTsKLSAgaWYgKGRhdGEyICE9IG1tYXAgKGRhdGEy LCBwYWdlc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKLQkJICAgICBNQVBfUFJJVkFURSB8 IE1BUF9GSVhFRCwgZmQsIDBMKSkKLSAgICByZXR1cm4gMTA7Ci0gIGZvciAoaSA9IDA7IGkgPCBw YWdlc2l6ZTsgKytpKQotICAgIGlmICgqKGRhdGEgKyBpKSAhPSAqKGRhdGEyICsgaSkpCi0gICAg ICByZXR1cm4gMTE7Ci0KLSAgLyogRmluYWxseSwgbWFrZSBzdXJlIHRoYXQgY2hhbmdlcyB0byB0 aGUgbWFwcGVkIGFyZWEgZG8gbm90Ci0gICAgIHBlcmNvbGF0ZSBiYWNrIHRvIHRoZSBmaWxlIGFz IHNlZW4gYnkgcmVhZCgpLiAgKFRoaXMgaXMgYSBidWcgb24KLSAgICAgc29tZSB2YXJpYW50cyBv ZiBpMzg2IHN2cjQuMC4pICAqLwotICBmb3IgKGkgPSAwOyBpIDwgcGFnZXNpemU7ICsraSkKLSAg ICAqKGRhdGEyICsgaSkgPSAqKGRhdGEyICsgaSkgKyAxOwotICBkYXRhMyA9IChjaGFyICopIG1h bGxvYyAocGFnZXNpemUpOwotICBpZiAoIWRhdGEzKQotICAgIHJldHVybiAxMjsKLSAgaWYgKHJl YWQgKGZkLCBkYXRhMywgcGFnZXNpemUpICE9IHBhZ2VzaXplKQotICAgIHJldHVybiAxMzsKLSAg Zm9yIChpID0gMDsgaSA8IHBhZ2VzaXplOyArK2kpCi0gICAgaWYgKCooZGF0YSArIGkpICE9ICoo ZGF0YTMgKyBpKSkKLSAgICAgIHJldHVybiAxNDsKLSAgY2xvc2UgKGZkKTsKK3JldHVybiBleHQy ZnNfb3BlbjIgKCk7CisgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5 X3J1biAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9mdW5jX21tYXBfZml4ZWRfbWFwcGVkPXll cworaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfZXh0 MmZzX2V4dDJmc19vcGVuMj15ZXMKIGVsc2UKLSAgYWNfY3ZfZnVuY19tbWFwX2ZpeGVkX21hcHBl ZD1ubwotZmkKLXJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5v dXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKLSAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5i ZWFtIGNvbmZ0ZXN0LiRhY19leHQKLWZpCi0KKyAgYWNfY3ZfbGliX2V4dDJmc19leHQyZnNfb3Bl bjI9bm8KIGZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3Vs dDogJGFjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQiID4mNQotJGFzX2VjaG8gIiRhY19jdl9m dW5jX21tYXBfZml4ZWRfbWFwcGVkIiA+JjY7IH0KLWlmIHRlc3QgJGFjX2N2X2Z1bmNfbW1hcF9m aXhlZF9tYXBwZWQgPSB5ZXM7IHRoZW4KLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9NTUFQIDEi ID4+Y29uZmRlZnMuaAotCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2Jq ZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNf Y2hlY2tfbGliX3NhdmVfTElCUwogZmkKLXJtIC1mIGNvbmZ0ZXN0Lm1tYXAgY29uZnRlc3QudHh0 Ci0KLWZvciBhY19oZWFkZXIgaW4gc3RkbGliLmgKLWRvIDoKLSAgYWNfZm5fY19jaGVja19oZWFk ZXJfbW9uZ3JlbCAiJExJTkVOTyIgInN0ZGxpYi5oIiAiYWNfY3ZfaGVhZGVyX3N0ZGxpYl9oIiAi JGFjX2luY2x1ZGVzX2RlZmF1bHQiCi1pZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9zdGRsaWJfaCIg PSB4IiJ5ZXM7IHRoZW4gOgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhB VkVfU1RETElCX0ggMQotX0FDRU9GCi0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0k TElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2V4dDJmc19leHQyZnNfb3BlbjIiID4mNQorJGFz X2VjaG8gIiRhY19jdl9saWJfZXh0MmZzX2V4dDJmc19vcGVuMiIgPiY2OyB9CitpZiB0ZXN0ICJ4 JGFjX2N2X2xpYl9leHQyZnNfZXh0MmZzX29wZW4yIiA9IHgiInllczsgdGhlbiA6CisgIGxpYmV4 dDJmcz0ieSIKK2Vsc2UKKyAgbGliZXh0MmZzPSJuIgogZmkKIAotZG9uZQogCi17ICRhc19lY2hv ICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBHTlUgbGliYyBjb21w YXRpYmxlIHJlYWxsb2MiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEdOVSBsaWJjIGNv bXBhdGlibGUgcmVhbGxvYy4uLiAiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9mdW5jX3JlYWxs b2NfMF9ub25udWxsK3NldH0iID0gc2V0OyB0aGVuIDoKK3sgJGFzX2VjaG8gIiRhc19tZToke2Fz X2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGdjcnlfbWRfaGFzaF9idWZmZXIgaW4gLWxn Y3J5cHQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGdjcnlfbWRfaGFzaF9idWZmZXIg aW4gLWxnY3J5cHQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX2djcnlwdF9nY3J5 X21kX2hhc2hfYnVmZmVyK3NldH0iID0gc2V0OyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hl ZCkgIiA+JjYKIGVsc2UKLSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4g OgotICBhY19jdl9mdW5jX3JlYWxsb2NfMF9ub25udWxsPW5vCi1lbHNlCi0gIGNhdCBjb25mZGVm cy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElC Uz0kTElCUworTElCUz0iLWxnY3J5cHQgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VP RiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2lmIGRlZmluZWQg U1REQ19IRUFERVJTIHx8IGRlZmluZWQgSEFWRV9TVERMSUJfSAotIyBpbmNsdWRlIDxzdGRsaWIu aD4KLSNlbHNlCi1jaGFyICpyZWFsbG9jICgpOwotI2VuZGlmCiAKKy8qIE92ZXJyaWRlIGFueSBH Q0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVj YXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGlu IGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwor I2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZ2NyeV9tZF9oYXNo X2J1ZmZlciAoKTsKIGludAogbWFpbiAoKQogewotcmV0dXJuICEgcmVhbGxvYyAoMCwgMCk7City ZXR1cm4gZ2NyeV9tZF9oYXNoX2J1ZmZlciAoKTsKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VP RgotaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X2Z1bmNfcmVh bGxvY18wX25vbm51bGw9eWVzCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6 CisgIGFjX2N2X2xpYl9nY3J5cHRfZ2NyeV9tZF9oYXNoX2J1ZmZlcj15ZXMKIGVsc2UKLSAgYWNf Y3ZfZnVuY19yZWFsbG9jXzBfbm9ubnVsbD1ubworICBhY19jdl9saWJfZ2NyeXB0X2djcnlfbWRf aGFzaF9idWZmZXI9bm8KIGZpCi1ybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21v bi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCi0gIGNvbmZ0ZXN0LiRhY19vYmpleHQg Y29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBj b25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFj X2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwogZmkKLQoreyAkYXNfZWNobyAiJGFz X21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfZ2NyeXB0X2djcnlf bWRfaGFzaF9idWZmZXIiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfZ2NyeXB0X2djcnlfbWRf aGFzaF9idWZmZXIiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfZ2NyeXB0X2djcnlfbWRf aGFzaF9idWZmZXIiID0geCIieWVzOyB0aGVuIDoKKyAgbGliZ2NyeXB0PSJ5IgorZWxzZQorICBs aWJnY3J5cHQ9Im4iCiBmaQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99 OiByZXN1bHQ6ICRhY19jdl9mdW5jX3JlYWxsb2NfMF9ub25udWxsIiA+JjUKLSRhc19lY2hvICIk YWNfY3ZfZnVuY19yZWFsbG9jXzBfbm9ubnVsbCIgPiY2OyB9Ci1pZiB0ZXN0ICRhY19jdl9mdW5j X3JlYWxsb2NfMF9ub25udWxsID0geWVzOyB0aGVuIDoKIAotJGFzX2VjaG8gIiNkZWZpbmUgSEFW RV9SRUFMTE9DIDEiID4+Y29uZmRlZnMuaAogCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBwdGhyZWFkIGZsYWciID4mNQorJGFzX2Vj aG9fbiAiY2hlY2tpbmcgZm9yIHB0aHJlYWQgZmxhZy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHth eF9jdl9wdGhyZWFkX2ZsYWdzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNh Y2hlZCkgIiA+JjYKIGVsc2UKLSAgJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9SRUFMTE9DIDAiID4+ Y29uZmRlZnMuaAogCi0gICBjYXNlICIgJExJQk9CSlMgIiBpbgotICAqIiByZWFsbG9jLiRhY19v YmpleHQgIiogKSA7OwotICAqKSBMSUJPQkpTPSIkTElCT0JKUyByZWFsbG9jLiRhY19vYmpleHQi Ci0gOzsKLWVzYWMKKyAgICAgICAgYXhfY3ZfcHRocmVhZF9mbGFncz0tcHRocmVhZAorCisgICAg UFRIUkVBRF9DRkxBR1M9IiRheF9jdl9wdGhyZWFkX2ZsYWdzIgorICAgIFBUSFJFQURfTERGTEFH Uz0iJGF4X2N2X3B0aHJlYWRfZmxhZ3MiCisgICAgUFRIUkVBRF9MSUJTPSIiCisKKworICAgIHNh dmVkX0NGTEFHUz0iJENGTEFHUyIKKworICAgIHNhdmVkX0xERkxBR1M9IiRMREZMQUdTIgorCisg ICAgc2F2ZWRfTElCUz0iJExJQlMiCisKKworICAgIENGTEFHUz0iJENGTEFHUyAkUFRIUkVBRF9D RkxBR1MiCisKKyAgICBMREZMQUdTPSIkTERGTEFHUyAkUFRIUkVBRF9MREZMQUdTIgorCisgICAg TElCUz0iJExJQlMgJFBUSFJFQURfTElCUyIKKworICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8 X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNs dWRlIDxwdGhyZWFkLmg+CitpbnQgbWFpbih2b2lkKSB7CisgIHB0aHJlYWRfYXRmb3JrKDAsMCww KTsKKyAgcHRocmVhZF9jcmVhdGUoMCwwLDAsMCk7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190 cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCitlbHNlCisgIGF4X2N2X3B0aHJlYWRfZmxhZ3M9 ZmFpbGVkCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBc CisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworICAgIENGTEFHUz0i JHNhdmVkX0NGTEFHUyIKKworICAgIExERkxBR1M9IiRzYXZlZF9MREZMQUdTIgogCisgICAgTElC Uz0iJHNhdmVkX0xJQlMiCiAKLSRhc19lY2hvICIjZGVmaW5lIHJlYWxsb2MgcnBsX3JlYWxsb2Mi ID4+Y29uZmRlZnMuaAogCiBmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5F Tk99OiByZXN1bHQ6ICRheF9jdl9wdGhyZWFkX2ZsYWdzIiA+JjUKKyRhc19lY2hvICIkYXhfY3Zf cHRocmVhZF9mbGFncyIgPiY2OyB9CisgICAgaWYgdGVzdCAieCRheF9jdl9wdGhyZWFkX2ZsYWdz IiA9IHhmYWlsZWQ7IHRoZW4KKyAgICAgICAgYXNfZm5fZXJyb3IgJD8gIi1wdGhyZWFkIGRvZXMg bm90IHdvcmsiICIkTElORU5PIiA1CisgICAgZmkKKworICAgIFBUSFJFQURfQ0ZMQUdTPSIkYXhf Y3ZfcHRocmVhZF9mbGFncyIKKyAgICBQVEhSRUFEX0xERkxBR1M9IiRheF9jdl9wdGhyZWFkX2Zs YWdzIgorICAgIFBUSFJFQURfTElCUz0iIgorCiAKIAoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igd29ya2luZyBzdHJubGVuIiA+JjUKLSRhc19l Y2hvX24gImNoZWNraW5nIGZvciB3b3JraW5nIHN0cm5sZW4uLi4gIiA+JjY7IH0KLWlmIHRlc3Qg IiR7YWNfY3ZfZnVuY19zdHJubGVuX3dvcmtpbmcrc2V0fSIgPSBzZXQ7IHRoZW4gOgoreyAkYXNf ZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgeWFqbF9hbGxv YyBpbiAtbHlhamwiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHlhamxfYWxsb2MgaW4g LWx5YWpsLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl95YWpsX3lhamxfYWxsb2Mr c2V0fSIgPSBzZXQ7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQot ICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6Ci0gIGFjX2N2X2Z1bmNf c3Rybmxlbl93b3JraW5nPW5vCi1lbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNv bmZ0ZXN0LiRhY19leHQKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWx5 YWpsICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQK IC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0CisKKy8qIE92ZXJy aWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNl IGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisg ICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBw bHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgeWFq bF9hbGxvYyAoKTsKIGludAogbWFpbiAoKQogewotCi0jZGVmaW5lIFMgImZvb2JhciIKLSNkZWZp bmUgU19MRU4gKHNpemVvZiBTIC0gMSkKLQotICAvKiBBdCBsZWFzdCBvbmUgaW1wbGVtZW50YXRp b24gaXMgYnVnZ3k6IHRoYXQgb2YgQUlYIDQuMyB3b3VsZAotICAgICBnaXZlIHN0cm5sZW4gKFMs IDEpID09IDMuICAqLwotCi0gIGludCBpOwotICBmb3IgKGkgPSAwOyBpIDwgU19MRU4gKyAxOyAr K2kpCi0gICAgewotICAgICAgaW50IGV4cGVjdGVkID0gaSA8PSBTX0xFTiA/IGkgOiBTX0xFTjsK LSAgICAgIGlmIChzdHJubGVuIChTLCBpKSAhPSBleHBlY3RlZCkKLQlyZXR1cm4gMTsKLSAgICB9 Ci0gIHJldHVybiAwOwotCityZXR1cm4geWFqbF9hbGxvYyAoKTsKICAgOwogICByZXR1cm4gMDsK IH0KIF9BQ0VPRgotaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2 X2Z1bmNfc3Rybmxlbl93b3JraW5nPXllcworaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7 IHRoZW4gOgorICBhY19jdl9saWJfeWFqbF95YWpsX2FsbG9jPXllcwogZWxzZQotICBhY19jdl9m dW5jX3N0cm5sZW5fd29ya2luZz1ubworICBhY19jdl9saWJfeWFqbF95YWpsX2FsbG9jPW5vCiBm aQotcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25m dGVzdCRhY19leGVleHQgXAotICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29u ZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4 dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2No ZWNrX2xpYl9zYXZlX0xJQlMKIGZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJ TkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl95YWpsX3lhamxfYWxsb2MiID4mNQorJGFzX2VjaG8g IiRhY19jdl9saWJfeWFqbF95YWpsX2FsbG9jIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGli X3lhamxfeWFqbF9hbGxvYyIgPSB4IiJ5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8 X0FDRU9GCisjZGVmaW5lIEhBVkVfTElCWUFKTCAxCitfQUNFT0YKIAotZmkKLXsgJGFzX2VjaG8g IiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZnVuY19zdHJubGVu X3dvcmtpbmciID4mNQotJGFzX2VjaG8gIiRhY19jdl9mdW5jX3N0cm5sZW5fd29ya2luZyIgPiY2 OyB9Ci10ZXN0ICRhY19jdl9mdW5jX3N0cm5sZW5fd29ya2luZyA9IG5vICYmIGNhc2UgIiAkTElC T0JKUyAiIGluCi0gICoiIHN0cm5sZW4uJGFjX29iamV4dCAiKiApIDs7Ci0gICopIExJQk9CSlM9 IiRMSUJPQkpTIHN0cm5sZW4uJGFjX29iamV4dCIKLSA7OwotZXNhYworICBMSUJTPSItbHlhamwg JExJQlMiCiAKK2Vsc2UKKyAgYXNfZm5fZXJyb3IgJD8gIkNvdWxkIG5vdCBmaW5kIHlhamwiICIk TElORU5PIiA1CitmaQogCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IGNoZWNraW5nIGZvciB3b3JraW5nIHN0cnRvZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBm b3Igd29ya2luZyBzdHJ0b2QuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfZnVuY19zdHJ0 b2Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRM SU5FTk99OiBjaGVja2luZyBmb3IgZGVmbGF0ZUNvcHkgaW4gLWx6IiA+JjUKKyRhc19lY2hvX24g ImNoZWNraW5nIGZvciBkZWZsYXRlQ29weSBpbiAtbHouLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7 YWNfY3ZfbGliX3pfZGVmbGF0ZUNvcHkrc2V0fSIgPSBzZXQ7IHRoZW4gOgogICAkYXNfZWNob19u ICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHll czsgdGhlbiA6Ci0gIGFjX2N2X2Z1bmNfc3RydG9kPW5vCi1lbHNlCi0gIGNhdCBjb25mZGVmcy5o IC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0k TElCUworTElCUz0iLWx6ICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0 ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAotJGFjX2luY2x1ZGVzX2RlZmF1 bHQKLSNpZm5kZWYgc3RydG9kCi1kb3VibGUgc3RydG9kICgpOworLyogT3ZlcnJpZGUgYW55IEdD QyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNh dXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4g YW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisj aWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKICNlbmRpZgorY2hhciBkZWZsYXRlQ29weSAo KTsKIGludAotbWFpbigpCittYWluICgpCiB7Ci0gIHsKLSAgICAvKiBTb21lIHZlcnNpb25zIG9m IExpbnV4IHN0cnRvZCBtaXMtcGFyc2Ugc3RyaW5ncyB3aXRoIGxlYWRpbmcgJysnLiAgKi8KLSAg ICBjaGFyICpzdHJpbmcgPSAiICs2OSI7Ci0gICAgY2hhciAqdGVybTsKLSAgICBkb3VibGUgdmFs dWU7Ci0gICAgdmFsdWUgPSBzdHJ0b2QgKHN0cmluZywgJnRlcm0pOwotICAgIGlmICh2YWx1ZSAh PSA2OSB8fCB0ZXJtICE9IChzdHJpbmcgKyA0KSkKLSAgICAgIHJldHVybiAxOwotICB9Ci0KLSAg ewotICAgIC8qIFVuZGVyIFNvbGFyaXMgMi40LCBzdHJ0b2QgcmV0dXJucyB0aGUgd3JvbmcgdmFs dWUgZm9yIHRoZQotICAgICAgIHRlcm1pbmF0aW5nIGNoYXJhY3RlciB1bmRlciBzb21lIGNvbmRp dGlvbnMuICAqLwotICAgIGNoYXIgKnN0cmluZyA9ICJOYU4iOwotICAgIGNoYXIgKnRlcm07Ci0g ICAgc3RydG9kIChzdHJpbmcsICZ0ZXJtKTsKLSAgICBpZiAodGVybSAhPSBzdHJpbmcgJiYgKih0 ZXJtIC0gMSkgPT0gMCkKLSAgICAgIHJldHVybiAxOwotICB9CityZXR1cm4gZGVmbGF0ZUNvcHkg KCk7CisgIDsKICAgcmV0dXJuIDA7CiB9Ci0KIF9BQ0VPRgotaWYgYWNfZm5fY190cnlfcnVuICIk TElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X2Z1bmNfc3RydG9kPXllcworaWYgYWNfZm5fY190cnlf bGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfel9kZWZsYXRlQ29weT15ZXMKIGVs c2UKLSAgYWNfY3ZfZnVuY19zdHJ0b2Q9bm8KLWZpCi1ybSAtZiBjb3JlICouY29yZSBjb3JlLmNv bmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCi0gIGNvbmZ0ZXN0 LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CisgIGFjX2N2X2xpYl96 X2RlZmxhdGVDb3B5PW5vCiBmaQotCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4k YWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElC Uz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwogZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xp bmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZnVuY19zdHJ0b2QiID4mNQotJGFzX2VjaG8g IiRhY19jdl9mdW5jX3N0cnRvZCIgPiY2OyB9Ci1pZiB0ZXN0ICRhY19jdl9mdW5jX3N0cnRvZCA9 IG5vOyB0aGVuCi0gIGNhc2UgIiAkTElCT0JKUyAiIGluCi0gICoiIHN0cnRvZC4kYWNfb2JqZXh0 ICIqICkgOzsKLSAgKikgTElCT0JKUz0iJExJQk9CSlMgc3RydG9kLiRhY19vYmpleHQiCi0gOzsK LWVzYWMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAk YWNfY3ZfbGliX3pfZGVmbGF0ZUNvcHkiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfel9kZWZs YXRlQ29weSIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl96X2RlZmxhdGVDb3B5IiA9IHgi InllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9M SUJaIDEKK19BQ0VPRgogCi1hY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJwb3ciICJhY19j dl9mdW5jX3BvdyIKLWlmIHRlc3QgIngkYWNfY3ZfZnVuY19wb3ciID0geCIieWVzOyB0aGVuIDoK KyAgTElCUz0iLWx6ICRMSUJTIgogCitlbHNlCisgIGFzX2ZuX2Vycm9yICQ/ICJDb3VsZCBub3Qg ZmluZCB6bGliIiAiJExJTkVOTyIgNQogZmkKIAotaWYgdGVzdCAkYWNfY3ZfZnVuY19wb3cgPSBu bzsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNr aW5nIGZvciBwb3cgaW4gLWxtIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBwb3cgaW4g LWxtLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9tX3BvdytzZXR9IiA9IHNldDsg dGhlbiA6Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5n IGZvciBsaWJpY29udl9vcGVuIGluIC1saWNvbnYiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcg Zm9yIGxpYmljb252X29wZW4gaW4gLWxpY29udi4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19j dl9saWJfaWNvbnZfbGliaWNvbnZfb3BlbitzZXR9IiA9IHNldDsgdGhlbiA6CiAgICRhc19lY2hv X24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMK LUxJQlM9Ii1sbSAgJExJQlMiCitMSUJTPSItbGljb252ICAkTElCUyIKIGNhdCBjb25mZGVmcy5o IC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIApA QCAtOTUyOCw1NSArNjU1Myw0NSBAQCBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVz dC4kYWNfZXh0CiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIKICNlbmRpZgotY2hhciBw b3cgKCk7CitjaGFyIGxpYmljb252X29wZW4gKCk7CiBpbnQKIG1haW4gKCkKIHsKLXJldHVybiBw b3cgKCk7CityZXR1cm4gbGliaWNvbnZfb3BlbiAoKTsKICAgOwogICByZXR1cm4gMDsKIH0KIF9B Q0VPRgogaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9saWJf bV9wb3c9eWVzCisgIGFjX2N2X2xpYl9pY29udl9saWJpY29udl9vcGVuPXllcwogZWxzZQotICBh Y19jdl9saWJfbV9wb3c9bm8KKyAgYWNfY3ZfbGliX2ljb252X2xpYmljb252X29wZW49bm8KIGZp CiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKICAgICBjb25m dGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogTElCUz0kYWNfY2hlY2tfbGliX3NhdmVf TElCUwogZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0 OiAkYWNfY3ZfbGliX21fcG93IiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfbGliX21fcG93IiA+JjY7 IH0KLWlmIHRlc3QgIngkYWNfY3ZfbGliX21fcG93IiA9IHgiInllczsgdGhlbiA6Ci0gIFBPV19M SUI9LWxtCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDog JGFjX2N2X2xpYl9pY29udl9saWJpY29udl9vcGVuIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGli X2ljb252X2xpYmljb252X29wZW4iID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfaWNvbnZf bGliaWNvbnZfb3BlbiIgPSB4IiJ5ZXM7IHRoZW4gOgorICBsaWJpY29udj0ieSIKIGVsc2UKLSAg eyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBjYW5ub3Qg ZmluZCBsaWJyYXJ5IGNvbnRhaW5pbmcgZGVmaW5pdGlvbiBvZiBwb3ciID4mNQotJGFzX2VjaG8g IiRhc19tZTogV0FSTklORzogY2Fubm90IGZpbmQgbGlicmFyeSBjb250YWluaW5nIGRlZmluaXRp b24gb2YgcG93IiA+JjI7fQotZmkKLQorICBsaWJpY29udj0ibiIKIGZpCiAKLWZpCiAKLWZvciBh Y19mdW5jIGluICBcCi0gICAgICAgICAgICAgICAgYWxhcm0gYXRleGl0IGJ6ZXJvIGNsb2NrX2dl dHRpbWUgZHVwMiBmZGF0YXN5bmMgZnRydW5jYXRlIFwKLSAgICAgICAgICAgICAgICBnZXRjd2Qg Z2V0aG9zdGJ5bmFtZSBnZXRob3N0bmFtZSBnZXRwYWdlc2l6ZSBnZXR0aW1lb2ZkYXkgXAotICAg ICAgICAgICAgICAgIGluZXRfbnRvYSBpc2FzY2lpIGxvY2FsdGltZV9yIG1lbWNociBtZW1tb3Zl IG1lbXNldCBta2RpciBcCi0gICAgICAgICAgICAgICAgbWtmaWZvIG11bm1hcCBwYXRoY29uZiBy ZWFscGF0aCByZWdjb21wIHJtZGlyIHNlbGVjdCBzZXRlbnYgXAotICAgICAgICAgICAgICAgIHNv Y2tldCBzdHJjYXNlY21wIHN0cmNociBzdHJjc3BuIHN0cmR1cCBzdHJlcnJvciBzdHJuZHVwIFwK LSAgICAgICAgICAgICAgICBzdHJwYnJrIHN0cnJjaHIgc3Ryc3BuIHN0cnN0ciBzdHJ0b2wgc3Ry dG91bCBzdHJ0b3VsbCB0enNldCBcCi0gICAgICAgICAgICAgICAgdW5hbWUgXAogCisjIENoZWNr cyBmb3IgaGVhZGVyIGZpbGVzLgorZm9yIGFjX2hlYWRlciBpbiB5YWpsL3lhamxfdmVyc2lvbi5o CiBkbyA6Ci0gIGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFz X3RyX3NoYAotYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiJGFjX2Z1bmMiICIkYXNfYWNf dmFyIgotaWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY192YXIiXCIgPSB4InllcyI7IHRoZW4gOgor ICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAieWFqbC95YWpsX3ZlcnNp b24uaCIgImFjX2N2X2hlYWRlcl95YWpsX3lhamxfdmVyc2lvbl9oIiAiJGFjX2luY2x1ZGVzX2Rl ZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl95YWpsX3lhamxfdmVyc2lvbl9oIiA9IHgi InllczsgdGhlbiA6CiAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYCRhc19l Y2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKKyNkZWZpbmUgSEFWRV9ZQUpMX1lB SkxfVkVSU0lPTl9IIDEKIF9BQ0VPRgogCiBmaQorCiBkb25lCiAKIApkaWZmIC0tZ2l0IGEvdG9v bHMvY29uZmlndXJlLmFjIGIvdG9vbHMvY29uZmlndXJlLmFjCmluZGV4IDU3Yzg4N2QuLmRlYjg0 OGQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2NvbmZpZ3VyZS5hYworKysgYi90b29scy9jb25maWd1cmUu YWMKQEAgLTE5LDkgKzE5LDYgQEAgcmVjb21tZW5kZWQsIHVzZSBQUkVQRU5EX0lOQ0xVREVTLCBQ UkVQRU5EX0xJQiwgXAogQVBQRU5EX0lOQ0xVREVTIGFuZCBBUFBFTkRfTElCIGluc3RlYWQgd2hl biBwb3NzaWJsZS5dKQogXSkKIAotQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TCi1BQ19DQU5PTklD QUxfSE9TVAotCiAjIE00IE1hY3JvIGluY2x1ZGVzCiBtNF9pbmNsdWRlKFttNC9zYXZldmFyLm00 XSkKIG00X2luY2x1ZGUoW200L2ZlYXR1cmVzLm00XSkKQEAgLTc1LDkgKzcyLDcgQEAgQUNfQVJH X1ZBUihbQkNDXSwgW1BhdGggdG8gYmNjIHRvb2xdKQogQUNfQVJHX1ZBUihbSUFTTF0sIFtQYXRo IHRvIGlhc2wgdG9vbF0pCiAKICMgQ2hlY2tzIGZvciBwcm9ncmFtcy4KLUFDX1BST0dfU0VECiBB Q19QUk9HX0NDCi1BQ19QUk9HX0xOX1MKIEFDX1BST0dfTUFLRV9TRVQKIEFDX1BST0dfSU5TVEFM TAogQUNfUEFUSF9QUk9HKFtCSVNPTl0sIFtiaXNvbl0pCkBAIC0xMzcsNyArMTMyLDYgQEAgQUNf U1VCU1QobGliZXh0MmZzKQogQUNfQ0hFQ0tfTElCKFtnY3J5cHRdLCBbZ2NyeV9tZF9oYXNoX2J1 ZmZlcl0sIFtsaWJnY3J5cHQ9InkiXSwgW2xpYmdjcnlwdD0ibiJdKQogQUNfU1VCU1QobGliZ2Ny eXB0KQogQVhfQ0hFQ0tfUFRIUkVBRAotQUNfQ0hFQ0tfTElCKFtydF0sIFtjbG9ja19nZXR0aW1l XSkKIEFDX0NIRUNLX0xJQihbeWFqbF0sIFt5YWpsX2FsbG9jXSwgW10sCiAgICAgW0FDX01TR19F UlJPUihbQ291bGQgbm90IGZpbmQgeWFqbF0pXSkKIEFDX0NIRUNLX0xJQihbel0sIFtkZWZsYXRl Q29weV0sIFtdLCBbQUNfTVNHX0VSUk9SKFtDb3VsZCBub3QgZmluZCB6bGliXSldKQpAQCAtMTQ1 LDU4ICsxMzksNiBAQCBBQ19DSEVDS19MSUIoW2ljb252XSwgW2xpYmljb252X29wZW5dLCBbbGli aWNvbnY9InkiXSwgW2xpYmljb252PSJuIl0pCiBBQ19TVUJTVChsaWJpY29udikKIAogIyBDaGVj a3MgZm9yIGhlYWRlciBmaWxlcy4KLUFDX0ZVTkNfQUxMT0NBCi1BQ19DSEVDS19IRUFERVJTKFsg XAotICAgICAgICAgICAgICAgIGFycGEvaW5ldC5oIGZjbnRsLmggaW50dHlwZXMuaCBsaWJpbnRs LmggbGltaXRzLmggbWFsbG9jLmggXAotICAgICAgICAgICAgICAgIG5ldGRiLmggbmV0aW5ldC9p bi5oIHN0ZGRlZi5oIHN0ZGludC5oIHN0ZGxpYi5oIHN0cmluZy5oIFwKLSAgICAgICAgICAgICAg ICBzdHJpbmdzLmggc3lzL2ZpbGUuaCBzeXMvaW9jdGwuaCBzeXMvbW91bnQuaCBzeXMvcGFyYW0u aCBcCi0gICAgICAgICAgICAgICAgc3lzL3NvY2tldC5oIHN5cy9zdGF0dmZzLmggc3lzL3RpbWUu aCBzeXNsb2cuaCB0ZXJtaW9zLmggXAotICAgICAgICAgICAgICAgIHVuaXN0ZC5oIHlhamwveWFq bF92ZXJzaW9uLmggXAotICAgICAgICAgICAgICAgIF0pCi0KLSMgQ2hlY2tzIGZvciB0eXBlZGVm cywgc3RydWN0dXJlcywgYW5kIGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljcy4KLUFDX0hFQURFUl9T VERCT09MCi1BQ19UWVBFX1VJRF9UCi1BQ19DX0lOTElORQotQUNfVFlQRV9JTlQxNl9UCi1BQ19U WVBFX0lOVDMyX1QKLUFDX1RZUEVfSU5UNjRfVAotQUNfVFlQRV9JTlQ4X1QKLUFDX1RZUEVfTU9E RV9UCi1BQ19UWVBFX09GRl9UCi1BQ19UWVBFX1BJRF9UCi1BQ19DX1JFU1RSSUNUCi1BQ19UWVBF X1NJWkVfVAotQUNfVFlQRV9TU0laRV9UCi1BQ19DSEVDS19NRU1CRVJTKFtzdHJ1Y3Qgc3RhdC5z dF9ibGtzaXplXSkKLUFDX1NUUlVDVF9TVF9CTE9DS1MKLUFDX0NIRUNLX01FTUJFUlMoW3N0cnVj dCBzdGF0LnN0X3JkZXZdKQotQUNfVFlQRV9VSU5UMTZfVAotQUNfVFlQRV9VSU5UMzJfVAotQUNf VFlQRV9VSU5UNjRfVAotQUNfVFlQRV9VSU5UOF9UCi1BQ19DSEVDS19UWVBFUyhbcHRyZGlmZl90 XSkKLQotIyBDaGVja3MgZm9yIGxpYnJhcnkgZnVuY3Rpb25zLgotQUNfRlVOQ19FUlJPUl9BVF9M SU5FCi1BQ19GVU5DX0ZPUksKLUFDX0ZVTkNfRlNFRUtPCi1BQ19GVU5DX0xTVEFUX0ZPTExPV1Nf U0xBU0hFRF9TWU1MSU5LCi1BQ19IRUFERVJfTUFKT1IKLUFDX0ZVTkNfTUFMTE9DCi1BQ19GVU5D X01LVElNRQotQUNfRlVOQ19NTUFQCi1BQ19GVU5DX1JFQUxMT0MKLUFDX0ZVTkNfU1RSTkxFTgot QUNfRlVOQ19TVFJUT0QKLUFDX0NIRUNLX0ZVTkNTKFsgXAotICAgICAgICAgICAgICAgIGFsYXJt IGF0ZXhpdCBiemVybyBjbG9ja19nZXR0aW1lIGR1cDIgZmRhdGFzeW5jIGZ0cnVuY2F0ZSBcCi0g ICAgICAgICAgICAgICAgZ2V0Y3dkIGdldGhvc3RieW5hbWUgZ2V0aG9zdG5hbWUgZ2V0cGFnZXNp emUgZ2V0dGltZW9mZGF5IFwKLSAgICAgICAgICAgICAgICBpbmV0X250b2EgaXNhc2NpaSBsb2Nh bHRpbWVfciBtZW1jaHIgbWVtbW92ZSBtZW1zZXQgbWtkaXIgXAotICAgICAgICAgICAgICAgIG1r ZmlmbyBtdW5tYXAgcGF0aGNvbmYgcmVhbHBhdGggcmVnY29tcCBybWRpciBzZWxlY3Qgc2V0ZW52 IFwKLSAgICAgICAgICAgICAgICBzb2NrZXQgc3RyY2FzZWNtcCBzdHJjaHIgc3RyY3NwbiBzdHJk dXAgc3RyZXJyb3Igc3RybmR1cCBcCi0gICAgICAgICAgICAgICAgc3RycGJyayBzdHJyY2hyIHN0 cnNwbiBzdHJzdHIgc3RydG9sIHN0cnRvdWwgc3RydG91bGwgdHpzZXQgXAotICAgICAgICAgICAg ICAgIHVuYW1lIFwKLSAgICAgICAgICAgICAgICBdKQorQUNfQ0hFQ0tfSEVBREVSUyhbeWFqbC95 YWpsX3ZlcnNpb24uaF0pCiAKIEFDX09VVFBVVCgpCi0tIAoxLjcuMi41CgoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlz dApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK