Name: series-workflow264jk Phase: Succeeded StartedAt: 2026-07-16 12:41:12 +0000 UTC FinishedAt: 2026-07-16 17:13:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow264jk[0] Phase: Succeeded StartedAt: 2026-07-16 12:41:12 +0000 UTC FinishedAt: 2026-07-16 13:13:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow264jk[0].run-triage Phase: Succeeded StartedAt: 2026-07-16 12:41:12 +0000 UTC FinishedAt: 2026-07-16 13:13:41 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d1f4b56417a3dc1a0600f960b14f46bd25eda89d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT", "BPF_SYSCALL", "EXECMEM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d1f4b56417a3dc1a0600f960b14f46bd25eda89d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT", "BPF_SYSCALL", "EXECMEM" ], "series_id": "45611898-a4ab-44b9-b247-defc65fa751b" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "alloc_new_pack", "bpf_prog_pack_alloc", "arch_bpf_trampoline_size", "bpf_dispatcher_change_prog" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDEzOjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7RVhFQ01FTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX25ld19wYWNrJiMzNDssCiAgICAmIzM0O2JwZl9wcm9nX3BhY2tfYWxsb2MmIzM0OywKICAgICYjMzQ7YXJjaF9icGZfdHJhbXBvbGluZV9zaXplJiMzNDssCiAgICAmIzM0O2JwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEJQRiBKSVQgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMsIGludHJvZHVjaW5nIGBicGZfaml0X2FsbG9jX2V4ZWNfcndgIGFuZCB1cGRhdGluZyBgYnBmX2ppdF9hbGxvY19leGVjYCB0byB1c2UgYGV4ZWNtZW1fYWxsb2NgLiBJdCBhbHNvIGNoYW5nZXMgeDg2IEJQRiBKSVQgbWVtb3J5IGluaXRpYWxpemF0aW9uIGFuZCB1cGRhdGVzIEJQRiB0cmFtcG9saW5lIGFuZCBkaXNwYXRjaGVyIGxvZ2ljIHRvIHVzZSB0aGUgbmV3IGFsbG9jYXRpb24gbWV0aG9kcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBCUEYgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTM6MTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5ZGE3MTQwZDEyZjFmNjdiNDgxYjA1ZDA0MGMzZDk0ZWQ1N2FiZDdkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMTYgMTM6MTA6MjcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vaW5pdC5jIGIvYXJjaC94ODYvbW0vaW5pdC5jXG5pbmRleCBmYjY3MjE3ZmRkY2QzNy4uMDc5ZjhjN2U5ZTNjZGUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9tbS9pbml0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L21tL2luaXQuY1xuQEAgLTExMDcsMTAgJiM0MzsxMTA3LDEwIEBAIHN0cnVjdCBleGVjbWVtX2luZm8gX19pbml0ICpleGVjbWVtX2FyY2hfc2V0dXAodm9pZClcbiBcdFx0XHRcdC5hbGlnbm1lbnQgPSBNT0RVTEVfQUxJR04sXG4gXHRcdFx0fSxcbiBcdFx0XHRbRVhFQ01FTV9CUEZdID0ge1xuLVx0XHRcdFx0LmZsYWdzXHQ9IEVYRUNNRU1fS0FTQU5fU0hBRE9XLFxuJiM0MztcdFx0XHRcdC5mbGFnc1x0PSBmbGFncyxcbiBcdFx0XHRcdC5zdGFydFx0PSBzdGFydCxcbiBcdFx0XHRcdC5lbmRcdD0gTU9EVUxFU19FTkQsXG4tXHRcdFx0XHQucGdwcm90XHQ9IFBBR0VfS0VSTkVMLFxuJiM0MztcdFx0XHRcdC5wZ3Byb3RcdD0gcGdwcm90LFxuIFx0XHRcdFx0LmFsaWdubWVudCA9IE1PRFVMRV9BTElHTixcbiBcdFx0XHR9LFxuIFx0XHRcdFtFWEVDTUVNX01PRFVMRV9EQVRBXSA9IHtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbmluZGV4IGRlNzUxNWVhMWJlYWU4Li5iMmZlZWM4MWUyMzEyZSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG5AQCAtMzcwMywxMyAmIzQzOzM3MDMsMTIgQEAgaW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcbiBcdGludCByZXQ7XG4gXG4gXHQvKiBBbGxvY2F0ZSBhIHRlbXBvcmFyeSBidWZmZXIgZm9yIF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKCkuXG4tXHQgKiBUaGlzIHdpbGwgTk9UIGNhdXNlIGZyYWdtZW50YXRpb24gaW4gZGlyZWN0IG1hcCwgYXMgd2UgZG8gbm90XG4tXHQgKiBjYWxsIHNldF9tZW1vcnlfKigpIG9uIHRoaXMgYnVmZmVyLlxuIFx0ICpcbiBcdCAqIFdlIGNhbm5vdCB1c2Uga3ZtYWxsb2MgaGVyZSwgYmVjYXVzZSB3ZSBuZWVkIGltYWdlIHRvIGJlIGluXG4gXHQgKiBtb2R1bGUgbWVtb3J5IHJhbmdlLlxuJiM0MztcdCAqIFNpbmNlIGl0IG11c3QgYmUgd3JpdGFibGUgdXNlIGJwZl9qaXRfYWxsb2NfZXhlY19ydygpLlxuIFx0ICovXG4tXHRpbWFnZSA9IGJwZl9qaXRfYWxsb2NfZXhlYyhQQUdFX1NJWkUpO1xuJiM0MztcdGltYWdlID0gYnBmX2ppdF9hbGxvY19leGVjX3J3KFBBR0VfU0laRSk7XG4gXHRpZiAoIWltYWdlKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oIGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxuaW5kZXggMTRhY2IyNDU1NzQ2ZmMuLjMyZDUyOTdjNTU3ZTViIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxuQEAgLTEzMzMsNiAmIzQzOzEzMzMsNyBAQCBicGZfaml0X2JpbmFyeV9hbGxvYyh1bnNpZ25lZCBpbnQgcHJvZ2xlbiwgdTggKippbWFnZV9wdHIsXG4gdm9pZCBicGZfaml0X2JpbmFyeV9mcmVlKHN0cnVjdCBicGZfYmluYXJ5X2hlYWRlciAqaGRyKTtcbiB1NjQgYnBmX2ppdF9hbGxvY19leGVjX2xpbWl0KHZvaWQpO1xuIHZvaWQgKmJwZl9qaXRfYWxsb2NfZXhlYyh1bnNpZ25lZCBsb25nIHNpemUpO1xuJiM0Mzt2b2lkICpicGZfaml0X2FsbG9jX2V4ZWNfcncodW5zaWduZWQgbG9uZyBzaXplKTtcbiB2b2lkIGJwZl9qaXRfZnJlZV9leGVjKHZvaWQgKmFkZHIpO1xuIHZvaWQgYnBmX2ppdF9mcmVlKHN0cnVjdCBicGZfcHJvZyAqZnApO1xuIHN0cnVjdCBicGZfYmluYXJ5X2hlYWRlciAqXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jb3JlLmMgYi9rZXJuZWwvYnBmL2NvcmUuY1xuaW5kZXggNDdmZTA0N2FkMzBiODguLmUyMDc2NjY3YjI0NTE3IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvY29yZS5jXG5AQCAtOTE2LDYgJiM0Mzs5MTYsMTEgQEAgc3RhdGljIExJU1RfSEVBRChwYWNrX2xpc3QpO1xuIFxuICNkZWZpbmUgQlBGX1BST0dfQ0hVTktfQ09VTlQgKEJQRl9QUk9HX1BBQ0tfU0laRSAvIEJQRl9QUk9HX0NIVU5LX1NJWkUpXG4gXG4mIzQzO3N0YXRpYyBib29sIGJwZl9qaXRfbWVtX2lzX3JveCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGV4ZWNtZW1faXNfcm94KEVYRUNNRU1fQlBGKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgc3RydWN0IGJwZl9wcm9nX3BhY2sgKmFsbG9jX25ld19wYWNrKGJwZl9qaXRfZmlsbF9ob2xlX3QgYnBmX2ZpbGxfaWxsX2luc25zKVxuIHtcbiBcdHN0cnVjdCBicGZfcHJvZ19wYWNrICpwYWNrO1xuQEAgLTkyNywxNiAmIzQzOzkzMiwxOCBAQCBzdGF0aWMgc3RydWN0IGJwZl9wcm9nX3BhY2sgKmFsbG9jX25ld19wYWNrKGJwZl9qaXRfZmlsbF9ob2xlX3QgYnBmX2ZpbGxfaWxsX2luc1xuIFx0cGFjay1cdTAwM2VwdHIgPSBicGZfaml0X2FsbG9jX2V4ZWMoQlBGX1BST0dfUEFDS19TSVpFKTtcbiBcdGlmICghcGFjay1cdTAwM2VwdHIpXG4gXHRcdGdvdG8gb3V0O1xuLVx0YnBmX2ZpbGxfaWxsX2luc25zKHBhY2stXHUwMDNlcHRyLCBCUEZfUFJPR19QQUNLX1NJWkUpO1xuIFx0Yml0bWFwX3plcm8ocGFjay1cdTAwM2ViaXRtYXAsIEJQRl9QUk9HX1BBQ0tfU0laRSAvIEJQRl9QUk9HX0NIVU5LX1NJWkUpO1xuIFxuIFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2YnBmX3ByZWRfZmx1c2hfZW5hYmxlZCkpXG4gXHRcdHBhY2stXHUwMDNlYXJjaF9mbHVzaF9uZWVkZWQgPSB0cnVlO1xuLVx0c2V0X3ZtX2ZsdXNoX3Jlc2V0X3Blcm1zKHBhY2stXHUwMDNlcHRyKTtcbi1cdGVyciA9IHNldF9tZW1vcnlfcm94KCh1bnNpZ25lZCBsb25nKXBhY2stXHUwMDNlcHRyLFxuLVx0XHRcdCAgICAgQlBGX1BST0dfUEFDS19TSVpFIC8gUEFHRV9TSVpFKTtcbi1cdGlmIChlcnIpXG4tXHRcdGdvdG8gb3V0O1xuJiM0MztcdGlmICghYnBmX2ppdF9tZW1faXNfcm94KCkpIHtcbiYjNDM7XHRcdGJwZl9maWxsX2lsbF9pbnNucyhwYWNrLVx1MDAzZXB0ciwgQlBGX1BST0dfUEFDS19TSVpFKTtcbiYjNDM7XHRcdHNldF92bV9mbHVzaF9yZXNldF9wZXJtcyhwYWNrLVx1MDAzZXB0cik7XG4mIzQzO1x0XHRlcnIgPSBzZXRfbWVtb3J5X3JveCgodW5zaWduZWQgbG9uZylwYWNrLVx1MDAzZXB0cixcbiYjNDM7XHRcdFx0XHQgICAgIEJQRl9QUk9HX1BBQ0tfU0laRSAvIFBBR0VfU0laRSk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4gXHRsaXN0X2FkZF90YWlsKFx1MDAyNnBhY2stXHUwMDNlbGlzdCwgXHUwMDI2cGFja19saXN0KTtcbiBcdHJldHVybiBwYWNrO1xuIFxuQEAgLTk2NSw3ICYjNDM7OTcyLDcgQEAgdm9pZCAqYnBmX3Byb2dfcGFja19hbGxvYyh1MzIgc2l6ZSwgYnBmX2ppdF9maWxsX2hvbGVfdCBicGZfZmlsbF9pbGxfaW5zbnMsIGJvb2xcbiBcdFx0XHRwcl93YXJuX29uY2UoXCYjMzQ7QlBGOiBQcmVkaWN0b3JzIG5vdCBmbHVzaGVkIGZvciBhbGxvY2F0aW9ucyBncmVhdGVyIHRoYW4gQlBGX1BST0dfUEFDS19TSVpFXFxuXCYjMzQ7KTtcbiBcdFx0c2l6ZSA9IHJvdW5kX3VwKHNpemUsIFBBR0VfU0laRSk7XG4gXHRcdHB0ciA9IGJwZl9qaXRfYWxsb2NfZXhlYyhzaXplKTtcbi1cdFx0aWYgKHB0cikge1xuJiM0MztcdFx0aWYgKHB0ciBcdTAwMjZcdTAwMjYgIWJwZl9qaXRfbWVtX2lzX3JveCgpKSB7XG4gXHRcdFx0aW50IGVycjtcbiBcbiBcdFx0XHRicGZfZmlsbF9pbGxfaW5zbnMocHRyLCBzaXplKTtcbkBAIC0xMTE2LDEyICYjNDM7MTEyMywxNyBAQCB2b2lkIGJwZl9qaXRfdW5jaGFyZ2VfbW9kbWVtKHUzMiBzaXplKVxuIFx0YXRvbWljX2xvbmdfc3ViKHNpemUsIFx1MDAyNmJwZl9qaXRfY3VycmVudCk7XG4gfVxuIFxuLXZvaWQgKl9fd2VhayBicGZfaml0X2FsbG9jX2V4ZWModW5zaWduZWQgbG9uZyBzaXplKVxuJiM0Mzt2b2lkICpicGZfaml0X2FsbG9jX2V4ZWModW5zaWduZWQgbG9uZyBzaXplKVxuIHtcbiBcdHJldHVybiBleGVjbWVtX2FsbG9jKEVYRUNNRU1fQlBGLCBzaXplKTtcbiB9XG4gXG4tdm9pZCBfX3dlYWsgYnBmX2ppdF9mcmVlX2V4ZWModm9pZCAqYWRkcilcbiYjNDM7dm9pZCAqYnBmX2ppdF9hbGxvY19leGVjX3J3KHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBleGVjbWVtX2FsbG9jX3J3KEVYRUNNRU1fQlBGLCBzaXplKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBicGZfaml0X2ZyZWVfZXhlYyh2b2lkICphZGRyKVxuIHtcbiBcdGV4ZWNtZW1fZnJlZShhZGRyKTtcbiB9XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9kaXNwYXRjaGVyLmMgYi9rZXJuZWwvYnBmL2Rpc3BhdGNoZXIuY1xuaW5kZXggZWEyZDYwZGMxZmVlYjcuLjc5ZjBjMjIyYzU4MzQwIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9kaXNwYXRjaGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvZGlzcGF0Y2hlci5jXG5AQCAtMTQ4LDcgJiM0MzsxNDgsMTAgQEAgdm9pZCBicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZyhzdHJ1Y3QgYnBmX2Rpc3BhdGNoZXIgKmQsIHN0cnVjdCBicGZfcHJvZyAqZnJvbSxcbiBcdFx0ZC1cdTAwM2VpbWFnZSA9IGJwZl9wcm9nX3BhY2tfYWxsb2MoUEFHRV9TSVpFLCBicGZfaml0X2ZpbGxfaG9sZV93aXRoX3plcm8sIGZhbHNlKTtcbiBcdFx0aWYgKCFkLVx1MDAzZWltYWdlKVxuIFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRkLVx1MDAzZXJ3X2ltYWdlID0gYnBmX2ppdF9hbGxvY19leGVjKFBBR0VfU0laRSk7XG4mIzQzO1x0XHQvKiBkLVx1MDAzZXJ3X2ltYWdlIGRvZXNuJiMzOTt0IG5lZWQgdG8gYmUgaW4gbW9kdWxlIG1lbW9yeSByYW5nZSwgc28gd2VcbiYjNDM7XHRcdCAqIGNhbiB1c2UgdnphbGxvYy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0ZC1cdTAwM2Vyd19pbWFnZSA9IHZ6YWxsb2MoUEFHRV9TSVpFKTtcbiBcdFx0aWYgKCFkLVx1MDAzZXJ3X2ltYWdlKSB7XG4gXHRcdFx0YnBmX3Byb2dfcGFja19mcmVlKGQtXHUwMDNlaW1hZ2UsIFBBR0VfU0laRSk7XG4gXHRcdFx0ZC1cdTAwM2VpbWFnZSA9IE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTM6MTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0pJVCYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtFWEVDTUVNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2NfbmV3X3BhY2smIzM0OywKICAgICYjMzQ7YnBmX3Byb2dfcGFja19hbGxvYyYjMzQ7LAogICAgJiMzNDthcmNoX2JwZl90cmFtcG9saW5lX3NpemUmIzM0OywKICAgICYjMzQ7YnBmX2Rpc3BhdGNoZXJfY2hhbmdlX3Byb2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIEpJVCBtZW1vcnkgYWxsb2NhdGlvbiBsb2dpYywgaW50cm9kdWNpbmcgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AgYW5kIHVwZGF0aW5nIGBicGZfaml0X2FsbG9jX2V4ZWNgIHRvIHVzZSBgZXhlY21lbV9hbGxvY2AuIEl0IGFsc28gY2hhbmdlcyB4ODYgQlBGIEpJVCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gYW5kIHVwZGF0ZXMgQlBGIHRyYW1wb2xpbmUgYW5kIGRpc3BhdGNoZXIgbG9naWMgdG8gdXNlIHRoZSBuZXcgYWxsb2NhdGlvbiBtZXRob2RzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIEJQRiBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOWRhNzE0MGQxMmYxZjY3YjQ4MWIwNWQwNDBjM2Q5NGVkNTdhYmQ3ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDE2IDEzOjEwOjI3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vaW5pdC5jIGIvYXJjaC94ODYvbW0vaW5pdC5jCmluZGV4IGZiNjcyMTdmZGRjZDM3Li4wNzlmOGM3ZTllM2NkZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vaW5pdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L21tL2luaXQuYwpAQCAtMTEwNywxMCAmIzQzOzExMDcsMTAgQEAgc3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKQogCQkJCS5hbGlnbm1lbnQgPSBNT0RVTEVfQUxJR04sCiAJCQl9LAogCQkJW0VYRUNNRU1fQlBGXSA9IHsKLQkJCQkuZmxhZ3MJPSBFWEVDTUVNX0tBU0FOX1NIQURPVywKJiM0MzsJCQkJLmZsYWdzCT0gZmxhZ3MsCiAJCQkJLnN0YXJ0CT0gc3RhcnQsCiAJCQkJLmVuZAk9IE1PRFVMRVNfRU5ELAotCQkJCS5wZ3Byb3QJPSBQQUdFX0tFUk5FTCwKJiM0MzsJCQkJLnBncHJvdAk9IHBncHJvdCwKIAkJCQkuYWxpZ25tZW50ID0gTU9EVUxFX0FMSUdOLAogCQkJfSwKIAkJCVtFWEVDTUVNX01PRFVMRV9EQVRBXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYwppbmRleCBkZTc1MTVlYTFiZWFlOC4uYjJmZWVjODFlMjMxMmUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMKQEAgLTM3MDMsMTMgJiM0MzszNzAzLDEyIEBAIGludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsCiAJaW50IHJldDsKIAogCS8qIEFsbG9jYXRlIGEgdGVtcG9yYXJ5IGJ1ZmZlciBmb3IgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoKS4KLQkgKiBUaGlzIHdpbGwgTk9UIGNhdXNlIGZyYWdtZW50YXRpb24gaW4gZGlyZWN0IG1hcCwgYXMgd2UgZG8gbm90Ci0JICogY2FsbCBzZXRfbWVtb3J5XyooKSBvbiB0aGlzIGJ1ZmZlci4KIAkgKgogCSAqIFdlIGNhbm5vdCB1c2Uga3ZtYWxsb2MgaGVyZSwgYmVjYXVzZSB3ZSBuZWVkIGltYWdlIHRvIGJlIGluCiAJICogbW9kdWxlIG1lbW9yeSByYW5nZS4KJiM0MzsJICogU2luY2UgaXQgbXVzdCBiZSB3cml0YWJsZSB1c2UgYnBmX2ppdF9hbGxvY19leGVjX3J3KCkuCiAJICovCi0JaW1hZ2UgPSBicGZfaml0X2FsbG9jX2V4ZWMoUEFHRV9TSVpFKTsKJiM0MzsJaW1hZ2UgPSBicGZfaml0X2FsbG9jX2V4ZWNfcncoUEFHRV9TSVpFKTsKIAlpZiAoIWltYWdlKQogCQlyZXR1cm4gLUVOT01FTTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmgKaW5kZXggMTRhY2IyNDU1NzQ2ZmMuLjMyZDUyOTdjNTU3ZTViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmgKQEAgLTEzMzMsNiAmIzQzOzEzMzMsNyBAQCBicGZfaml0X2JpbmFyeV9hbGxvYyh1bnNpZ25lZCBpbnQgcHJvZ2xlbiwgdTggKippbWFnZV9wdHIsCiB2b2lkIGJwZl9qaXRfYmluYXJ5X2ZyZWUoc3RydWN0IGJwZl9iaW5hcnlfaGVhZGVyICpoZHIpOwogdTY0IGJwZl9qaXRfYWxsb2NfZXhlY19saW1pdCh2b2lkKTsKIHZvaWQgKmJwZl9qaXRfYWxsb2NfZXhlYyh1bnNpZ25lZCBsb25nIHNpemUpOwomIzQzO3ZvaWQgKmJwZl9qaXRfYWxsb2NfZXhlY19ydyh1bnNpZ25lZCBsb25nIHNpemUpOwogdm9pZCBicGZfaml0X2ZyZWVfZXhlYyh2b2lkICphZGRyKTsKIHZvaWQgYnBmX2ppdF9mcmVlKHN0cnVjdCBicGZfcHJvZyAqZnApOwogc3RydWN0IGJwZl9iaW5hcnlfaGVhZGVyICoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY29yZS5jIGIva2VybmVsL2JwZi9jb3JlLmMKaW5kZXggNDdmZTA0N2FkMzBiODguLmUyMDc2NjY3YjI0NTE3IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2NvcmUuYwpAQCAtOTE2LDYgJiM0Mzs5MTYsMTEgQEAgc3RhdGljIExJU1RfSEVBRChwYWNrX2xpc3QpOwogCiAjZGVmaW5lIEJQRl9QUk9HX0NIVU5LX0NPVU5UIChCUEZfUFJPR19QQUNLX1NJWkUgLyBCUEZfUFJPR19DSFVOS19TSVpFKQogCiYjNDM7c3RhdGljIGJvb2wgYnBmX2ppdF9tZW1faXNfcm94KHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gZXhlY21lbV9pc19yb3goRVhFQ01FTV9CUEYpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2dfcGFjayAqYWxsb2NfbmV3X3BhY2soYnBmX2ppdF9maWxsX2hvbGVfdCBicGZfZmlsbF9pbGxfaW5zbnMpCiB7CiAJc3RydWN0IGJwZl9wcm9nX3BhY2sgKnBhY2s7CkBAIC05MjcsMTYgJiM0Mzs5MzIsMTggQEAgc3RhdGljIHN0cnVjdCBicGZfcHJvZ19wYWNrICphbGxvY19uZXdfcGFjayhicGZfaml0X2ZpbGxfaG9sZV90IGJwZl9maWxsX2lsbF9pbnMKIAlwYWNrLSZndDtwdHIgPSBicGZfaml0X2FsbG9jX2V4ZWMoQlBGX1BST0dfUEFDS19TSVpFKTsKIAlpZiAoIXBhY2stJmd0O3B0cikKIAkJZ290byBvdXQ7Ci0JYnBmX2ZpbGxfaWxsX2luc25zKHBhY2stJmd0O3B0ciwgQlBGX1BST0dfUEFDS19TSVpFKTsKIAliaXRtYXBfemVybyhwYWNrLSZndDtiaXRtYXAsIEJQRl9QUk9HX1BBQ0tfU0laRSAvIEJQRl9QUk9HX0NIVU5LX1NJWkUpOwogCiAJaWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoJmFtcDticGZfcHJlZF9mbHVzaF9lbmFibGVkKSkKIAkJcGFjay0mZ3Q7YXJjaF9mbHVzaF9uZWVkZWQgPSB0cnVlOwotCXNldF92bV9mbHVzaF9yZXNldF9wZXJtcyhwYWNrLSZndDtwdHIpOwotCWVyciA9IHNldF9tZW1vcnlfcm94KCh1bnNpZ25lZCBsb25nKXBhY2stJmd0O3B0ciwKLQkJCSAgICAgQlBGX1BST0dfUEFDS19TSVpFIC8gUEFHRV9TSVpFKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKJiM0MzsJaWYgKCFicGZfaml0X21lbV9pc19yb3goKSkgewomIzQzOwkJYnBmX2ZpbGxfaWxsX2luc25zKHBhY2stJmd0O3B0ciwgQlBGX1BST0dfUEFDS19TSVpFKTsKJiM0MzsJCXNldF92bV9mbHVzaF9yZXNldF9wZXJtcyhwYWNrLSZndDtwdHIpOwomIzQzOwkJZXJyID0gc2V0X21lbW9yeV9yb3goKHVuc2lnbmVkIGxvbmcpcGFjay0mZ3Q7cHRyLAomIzQzOwkJCQkgICAgIEJQRl9QUk9HX1BBQ0tfU0laRSAvIFBBR0VfU0laRSk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwl9CiAJbGlzdF9hZGRfdGFpbCgmYW1wO3BhY2stJmd0O2xpc3QsICZhbXA7cGFja19saXN0KTsKIAlyZXR1cm4gcGFjazsKIApAQCAtOTY1LDcgJiM0Mzs5NzIsNyBAQCB2b2lkICpicGZfcHJvZ19wYWNrX2FsbG9jKHUzMiBzaXplLCBicGZfaml0X2ZpbGxfaG9sZV90IGJwZl9maWxsX2lsbF9pbnNucywgYm9vbAogCQkJcHJfd2Fybl9vbmNlKCYjMzQ7QlBGOiBQcmVkaWN0b3JzIG5vdCBmbHVzaGVkIGZvciBhbGxvY2F0aW9ucyBncmVhdGVyIHRoYW4gQlBGX1BST0dfUEFDS19TSVpFXG4mIzM0Oyk7CiAJCXNpemUgPSByb3VuZF91cChzaXplLCBQQUdFX1NJWkUpOwogCQlwdHIgPSBicGZfaml0X2FsbG9jX2V4ZWMoc2l6ZSk7Ci0JCWlmIChwdHIpIHsKJiM0MzsJCWlmIChwdHIgJmFtcDsmYW1wOyAhYnBmX2ppdF9tZW1faXNfcm94KCkpIHsKIAkJCWludCBlcnI7CiAKIAkJCWJwZl9maWxsX2lsbF9pbnNucyhwdHIsIHNpemUpOwpAQCAtMTExNiwxMiAmIzQzOzExMjMsMTcgQEAgdm9pZCBicGZfaml0X3VuY2hhcmdlX21vZG1lbSh1MzIgc2l6ZSkKIAlhdG9taWNfbG9uZ19zdWIoc2l6ZSwgJmFtcDticGZfaml0X2N1cnJlbnQpOwogfQogCi12b2lkICpfX3dlYWsgYnBmX2ppdF9hbGxvY19leGVjKHVuc2lnbmVkIGxvbmcgc2l6ZSkKJiM0Mzt2b2lkICpicGZfaml0X2FsbG9jX2V4ZWModW5zaWduZWQgbG9uZyBzaXplKQogewogCXJldHVybiBleGVjbWVtX2FsbG9jKEVYRUNNRU1fQlBGLCBzaXplKTsKIH0KIAotdm9pZCBfX3dlYWsgYnBmX2ppdF9mcmVlX2V4ZWModm9pZCAqYWRkcikKJiM0Mzt2b2lkICpicGZfaml0X2FsbG9jX2V4ZWNfcncodW5zaWduZWQgbG9uZyBzaXplKQomIzQzO3sKJiM0MzsJcmV0dXJuIGV4ZWNtZW1fYWxsb2NfcncoRVhFQ01FTV9CUEYsIHNpemUpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGJwZl9qaXRfZnJlZV9leGVjKHZvaWQgKmFkZHIpCiB7CiAJZXhlY21lbV9mcmVlKGFkZHIpOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9kaXNwYXRjaGVyLmMgYi9rZXJuZWwvYnBmL2Rpc3BhdGNoZXIuYwppbmRleCBlYTJkNjBkYzFmZWViNy4uNzlmMGMyMjJjNTgzNDAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvZGlzcGF0Y2hlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvZGlzcGF0Y2hlci5jCkBAIC0xNDgsNyAmIzQzOzE0OCwxMCBAQCB2b2lkIGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nKHN0cnVjdCBicGZfZGlzcGF0Y2hlciAqZCwgc3RydWN0IGJwZl9wcm9nICpmcm9tLAogCQlkLSZndDtpbWFnZSA9IGJwZl9wcm9nX3BhY2tfYWxsb2MoUEFHRV9TSVpFLCBicGZfaml0X2ZpbGxfaG9sZV93aXRoX3plcm8sIGZhbHNlKTsKIAkJaWYgKCFkLSZndDtpbWFnZSkKIAkJCWdvdG8gb3V0OwotCQlkLSZndDtyd19pbWFnZSA9IGJwZl9qaXRfYWxsb2NfZXhlYyhQQUdFX1NJWkUpOwomIzQzOwkJLyogZC0mZ3Q7cndfaW1hZ2UgZG9lc24mIzM5O3QgbmVlZCB0byBiZSBpbiBtb2R1bGUgbWVtb3J5IHJhbmdlLCBzbyB3ZQomIzQzOwkJICogY2FuIHVzZSB2emFsbG9jLgomIzQzOwkJICovCiYjNDM7CQlkLSZndDtyd19pbWFnZSA9IHZ6YWxsb2MoUEFHRV9TSVpFKTsKIAkJaWYgKCFkLSZndDtyd19pbWFnZSkgewogCQkJYnBmX3Byb2dfcGFja19mcmVlKGQtJmd0O2ltYWdlLCBQQUdFX1NJWkUpOwogCQkJZC0mZ3Q7aW1hZ2UgPSBOVUxMOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxMzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzMzCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEJQRiBKSVQgTWVtb3J5IEFsbG9jYXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtBaCwgaXQmIzM5O3MgbWVzc2luZyB3aXRoIEJQRiBKSVQgbWVtb3J5IGFsbG9jYXRpb24uJiMzNDsgU3BlY2lmaWNhbGx5LCBJIHNlZSBpdCYjMzk7cyB0b3VjaGluZyBgYnBmX2ppdF9hbGxvY19leGVjYCwgaW50cm9kdWNpbmcgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AsIGFuZCB0aGVuIHRoZXJlIGFyZSBjaGFuZ2VzIHRvIGBhcmNoL3g4Ni9tbS9pbml0LmNgLiBJbnRlcmVzdGluZy4gVGhlIGBpbml0LmNgIGNoYW5nZXMgbG9vayBsaWtlIHRoZXkmIzM5O3JlIG1ha2luZyB0aGluZ3MgbW9yZSBmbGV4aWJsZSBieSB1c2luZyBgZmxhZ3NgIGFuZCBgcGdwcm90YCBpbnN0ZWFkIG9mIHRob3NlIGhhcmRjb2RlZCBjb25zdGFudHMgKGBFWEVDTUVNX0tBU0FOX1NIQURPV2AsIGBQQUdFX0tFUk5FTGApIGZvciBgRVhFQ01FTV9CUEZgLiBBIGdvb2QgZGVzaWduIGRlY2lzaW9uLgoKVGhlbiB0aGVyZSYjMzk7cyB0aGUgYGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nYCBjaGFuZ2UuIEl04oCZcyB1c2luZyBgdnphbGxvY2AgZm9yIGBkLSZndDtyd19pbWFnZWAgbm93LCBpbnN0ZWFkIG9mIHRoZSBwb3RlbnRpYWxseSBtb3JlIHNwZWNpZmljIGFsbG9jYXRpb24gb2YgYGJwZl9qaXRfYWxsb2NfZXhlY2AuIEFuZCB0aGVyZSYjMzk7cyBhbHNvIGEgbmV3IGZ1bmN0aW9uLCBgYnBmX2ppdF9tZW1faXNfcm94KClgLCBhcHBlYXJpbmcgaW4gYGtlcm5lbC9icGYvY29yZS5jYC4gSG1tLCBhIG5ldyBwcmltaXRpdmU/CgpBbHJpZ2h0LCB0aGlzIGlzIGZ1bmRhbWVudGFsLiBUaGlzIHBhdGNoIGNsZWFybHkgbW9kaWZpZXMgdGhlIGNvcmUgQlBGIEpJVCBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgeDg2IEJQRiBKSVQgc3BlY2lmaWNhbGx5LiBHaXZlbiBCUEYmIzM5O3Mgd2lkZXNwcmVhZCB1c2FnZSwgdGhpcyBkZWZpbml0ZWx5IGlzIHJlYWNoYWJsZS4gSXQgc2VlcyBhIGxvdCBvZiB1c2UuIElzIGl0IGZ1enphYmxlPyBBYnNvbHV0ZWx5LiBJdOKAmXMgZnVuY3Rpb25hbCwgc28gaXQgc2hvdWxkIGJlLgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgYXJjaC94ODYvbW0vaW5pdC5jYCBhbmQgc2VlIGV4YWN0bHkgd2hhdCB0aG9zZSBgZmxhZ3NgIGFuZCBgcGdwcm90YCBhcmUuIEkmIzM5O2xsIGdldCB0aGUgZGV0YWlscyBvbiB0aGUgdXNlIG9mIGByZWFkLWZpbGVgIGFyb3VuZCBsaW5lIDExMDcuLi4gYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTM6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9pbml0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwOTA6XHRcdFx0XHRcdC5zdGFydFx0PSBzdGFydCxcbjEwOTE6XHRcdFx0XHRcdC5lbmRcdD0gTU9EVUxFU19FTkQsXG4xMDkyOlx0XHRcdFx0XHQucGdwcm90XHQ9IHBncHJvdCxcbjEwOTM6XHRcdFx0XHRcdC5hbGlnbm1lbnQgPSBNT0RVTEVfQUxJR04sXG4xMDk0Olx0XHRcdFx0fSxcbjEwOTU6XHRcdFx0XHRbRVhFQ01FTV9LUFJPQkVTXSA9IHtcbjEwOTY6XHRcdFx0XHRcdC5mbGFnc1x0PSBmbGFncyxcbjEwOTc6XHRcdFx0XHRcdC5zdGFydFx0PSBzdGFydCxcbjEwOTg6XHRcdFx0XHRcdC5lbmRcdD0gTU9EVUxFU19FTkQsXG4xMDk5Olx0XHRcdFx0XHQucGdwcm90XHQ9IFBBR0VfS0VSTkVMX1JPWCxcbjExMDA6XHRcdFx0XHRcdC5hbGlnbm1lbnQgPSBNT0RVTEVfQUxJR04sXG4xMTAxOlx0XHRcdFx0fSxcbjExMDI6XHRcdFx0XHRbRVhFQ01FTV9GVFJBQ0VdID0ge1xuMTEwMzpcdFx0XHRcdFx0LmZsYWdzXHQ9IGZsYWdzLFxuMTEwNDpcdFx0XHRcdFx0LnN0YXJ0XHQ9IHN0YXJ0LFxuMTEwNTpcdFx0XHRcdFx0LmVuZFx0PSBNT0RVTEVTX0VORCxcbjExMDY6XHRcdFx0XHRcdC5wZ3Byb3RcdD0gcGdwcm90LFxuMTEwNzpcdFx0XHRcdFx0LmFsaWdubWVudCA9IE1PRFVMRV9BTElHTixcbjExMDg6XHRcdFx0XHR9LFxuMTEwOTpcdFx0XHRcdFtFWEVDTUVNX0JQRl0gPSB7XG4xMTEwOlx0XHRcdFx0XHQuZmxhZ3NcdD0gZmxhZ3MsXG4xMTExOlx0XHRcdFx0XHQuc3RhcnRcdD0gc3RhcnQsXG4xMTEyOlx0XHRcdFx0XHQuZW5kXHQ9IE1PRFVMRVNfRU5ELFxuMTExMzpcdFx0XHRcdFx0LnBncHJvdFx0PSBwZ3Byb3QsXG4xMTE0Olx0XHRcdFx0XHQuYWxpZ25tZW50ID0gTU9EVUxFX0FMSUdOLFxuMTExNTpcdFx0XHRcdH0sXG4xMTE2Olx0XHRcdFx0W0VYRUNNRU1fTU9EVUxFX0RBVEFdID0ge1xuMTExNzpcdFx0XHRcdFx0LmZsYWdzXHQ9IEVYRUNNRU1fS0FTQU5fU0hBRE9XLFxuMTExODpcdFx0XHRcdFx0LnN0YXJ0XHQ9IHN0YXJ0LFxuMTExOTpcdFx0XHRcdFx0LmVuZFx0PSBNT0RVTEVTX0VORCxcbjExMjA6XHRcdFx0XHRcdC5wZ3Byb3RcdD0gUEFHRV9LRVJORUwsXG4xMTIxOlx0XHRcdFx0XHQuYWxpZ25tZW50ID0gTU9EVUxFX0FMSUdOLFxuMTEyMjpcdFx0XHRcdH0sXG4xMTIzOlx0XHRcdH0sXG4xMTI0Olx0XHR9O1xuMTEyNTpcdFxuMTEyNjpcdFx0cmV0dXJuIFx1MDAyNmV4ZWNtZW1faW5mbztcbjExMjc6XHR9XG4xMTI4Olx0I2VuZGlmIC8qIENPTkZJR19FWEVDTUVNICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTM6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk2OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVjZW50IENvZGUgQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byB0aGVzZSBtZW1vcnkgYWxsb2NhdGlvbiB1cGRhdGVzLiBUaGUgY29yZSBhcmNoaXRlY3R1cmFsIHNldHVwIGFkanVzdG1lbnRzIHNlZW0gdG8gYmUgbmVzdGxlZCB3aXRoaW4gYGFyY2gveDg2L21tL2luaXQuY2AsIHNwZWNpZmljYWxseSB0aGUgYGV4ZWNtZW1fYXJjaF9zZXR1cGAgZnVuY3Rpb24uIFRoYXQmIzM5O3MgdGhlIGZpcnN0IGtleSBhcmVhIHRvIHVuZGVyc3RhbmQuIFRoZW4sIGl0IGxvb2tzIGxpa2UgdGhlIGFjdHVhbCBCUEYgSklUIG1lbW9yeSBhbGxvY2F0aW9uIGhhcHBlbnMgaW4gYGtlcm5lbC9icGYvY29yZS5jYCDigJMgc3BlY2lmaWNhbGx5IHRoZSBgYnBmX2ppdF9hbGxvY19leGVjYCBhbmQgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2Agcm91dGluZXMuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlOyB0aGVzZSBmdW5jdGlvbnMgYXJlIHJlc3BvbnNpYmxlIGZvciB0aGUganVzdC1pbi10aW1lIGNvbXBpbGF0aW9uIGFuZCByZWxhdGVkIG1lbW9yeS4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBga2VybmVsL2JwZi9jb3JlLmNgLCBwcm9iYWJseSBzdGFydGluZyBhcm91bmQgbGluZSA5MTYuIFRoYXQmIzM5O3MgbGlrZWx5IHdoZXJlIHRoZSBhbGxvY2F0aW9uIHN0cmF0ZWd5IGl0c2VsZiBpcyBpbXBsZW1lbnRlZCwgc28gbGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDEzOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDkxMDpcdCAqIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAyTUIuXG4gOTExOlx0ICovXG4gOTEyOlx0I2RlZmluZSBCUEZfUFJPR19QQUNLX1NJWkUgKFNaXzJNICogbnVtX3Bvc3NpYmxlX25vZGVzKCkpXG4gOTEzOlx0I2Vsc2VcbiA5MTQ6XHQjZGVmaW5lIEJQRl9QUk9HX1BBQ0tfU0laRSBQQUdFX1NJWkVcbiA5MTU6XHQjZW5kaWZcbiA5MTY6XHRcbiA5MTc6XHQjZGVmaW5lIEJQRl9QUk9HX0NIVU5LX0NPVU5UIChCUEZfUFJPR19QQUNLX1NJWkUgLyBCUEZfUFJPR19DSFVOS19TSVpFKVxuIDkxODpcdFxuIDkxOTpcdHN0YXRpYyBib29sIGJwZl9qaXRfbWVtX2lzX3JveCh2b2lkKVxuIDkyMDpcdHtcbiA5MjE6XHRcdHJldHVybiBleGVjbWVtX2lzX3JveChFWEVDTUVNX0JQRik7XG4gOTIyOlx0fVxuIDkyMzpcdFxuIDkyNDpcdHN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2dfcGFjayAqYWxsb2NfbmV3X3BhY2soYnBmX2ppdF9maWxsX2hvbGVfdCBicGZfZmlsbF9pbGxfaW5zbnMpXG4gOTI1Olx0e1xuIDkyNjpcdFx0c3RydWN0IGJwZl9wcm9nX3BhY2sgKnBhY2s7XG4gOTI3Olx0XHRpbnQgZXJyO1xuIDkyODpcdFxuIDkyOTpcdFx0cGFjayA9IGt6YWxsb2NfZmxleCgqcGFjaywgYml0bWFwLCBCSVRTX1RPX0xPTkdTKEJQRl9QUk9HX0NIVU5LX0NPVU5UKSk7XG4gOTMwOlx0XHRpZiAoIXBhY2spXG4gOTMxOlx0XHRcdHJldHVybiBOVUxMO1xuIDkzMjpcdFx0cGFjay1cdTAwM2VwdHIgPSBicGZfaml0X2FsbG9jX2V4ZWMoQlBGX1BST0dfUEFDS19TSVpFKTtcbiA5MzM6XHRcdGlmICghcGFjay1cdTAwM2VwdHIpXG4gOTM0Olx0XHRcdGdvdG8gb3V0O1xuIDkzNTpcdFx0Yml0bWFwX3plcm8ocGFjay1cdTAwM2ViaXRtYXAsIEJQRl9QUk9HX1BBQ0tfU0laRSAvIEJQRl9QUk9HX0NIVU5LX1NJWkUpO1xuIDkzNjpcdFxuIDkzNzpcdFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2YnBmX3ByZWRfZmx1c2hfZW5hYmxlZCkpXG4gOTM4Olx0XHRcdHBhY2stXHUwMDNlYXJjaF9mbHVzaF9uZWVkZWQgPSB0cnVlO1xuIDkzOTpcdFx0aWYgKCFicGZfaml0X21lbV9pc19yb3goKSkge1xuIDk0MDpcdFx0XHRicGZfZmlsbF9pbGxfaW5zbnMocGFjay1cdTAwM2VwdHIsIEJQRl9QUk9HX1BBQ0tfU0laRSk7XG4gOTQxOlx0XHRcdHNldF92bV9mbHVzaF9yZXNldF9wZXJtcyhwYWNrLVx1MDAzZXB0cik7XG4gOTQyOlx0XHRcdGVyciA9IHNldF9tZW1vcnlfcm94KCh1bnNpZ25lZCBsb25nKXBhY2stXHUwMDNlcHRyLFxuIDk0MzpcdFx0XHRcdFx0ICAgICBCUEZfUFJPR19QQUNLX1NJWkUgLyBQQUdFX1NJWkUpO1xuIDk0NDpcdFx0XHRpZiAoZXJyKVxuIDk0NTpcdFx0XHRcdGdvdG8gb3V0O1xuIDk0NjpcdFx0fVxuIDk0NzpcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZwYWNrLVx1MDAzZWxpc3QsIFx1MDAyNnBhY2tfbGlzdCk7XG4gOTQ4Olx0XHRyZXR1cm4gcGFjaztcbiA5NDk6XHRcbiA5NTA6XHRvdXQ6XG4gOTUxOlx0XHRicGZfaml0X2ZyZWVfZXhlYyhwYWNrLVx1MDAzZXB0cik7XG4gOTUyOlx0XHRrZnJlZShwYWNrKTtcbiA5NTM6XHRcdHJldHVybiBOVUxMO1xuIDk1NDpcdH1cbiA5NTU6XHRcbiA5NTY6XHR2b2lkICpicGZfcHJvZ19wYWNrX2FsbG9jKHUzMiBzaXplLCBicGZfaml0X2ZpbGxfaG9sZV90IGJwZl9maWxsX2lsbF9pbnNucywgYm9vbCB3YXNfY2xhc3NpYylcbiA5NTc6XHR7XG4gOTU4Olx0XHR1bnNpZ25lZCBpbnQgbmJpdHMgPSBCUEZfUFJPR19TSVpFX1RPX05CSVRTKHNpemUpO1xuIDk1OTpcdFx0c3RydWN0IGJwZl9wcm9nX3BhY2sgKnBhY2ssICpmYWxsYmFja19wYWNrID0gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxMzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTQ0CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgSklUIENvbXBpbGF0aW9uIGZvciBPcHRpbWl6YXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHplcm8gaW4gb24gYSBzcGVjaWZpYyBhcmVhIHdpdGhpbiB0aGUgQlBGIEpJVCBjb21waWxhdGlvbiBwcm9jZXNzLiBUaGUgY29yZSBmdW5jdGlvbnMgSSBzaG91bGQgcHJpb3JpdGl6ZSBmb3IgdGhpcyBhbmFseXNpcyBhcmU6IGBhbGxvY19uZXdfcGFja2AsIGBicGZfcHJvZ19wYWNrX2FsbG9jYCwgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAsIGFuZCBgYnBmX2Rpc3BhdGNoZXJfY2hhbmdlX3Byb2dgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IGBhcmNoX2JwZl90cmFtcG9saW5lX3NpemVgIGZlZWxzIGxpa2UgYSBjcml0aWNhbCBwb2ludC4gSG1tLCBpdCBzZWVtcyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIGBicGZfaml0X2FsbG9jX2V4ZWNfcndgLiBSaWdodCwgdGhhdCYjMzk7cyB3aGVyZSB0aGUgbWVtb3J5IGFsbG9jYXRpb24gYW5kIHBvdGVudGlhbCBjb2RlIGdlbmVyYXRpb24gd291bGQgaGFwcGVuLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgYWxsIGZpdHMgdG9nZXRoZXIuIEJlc3QgdG8ganVtcCBpbnRvIHRoZSBjb2RlIGFuZCBleGFtaW5lIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgIGFyb3VuZCBsaW5lIDM3MDMuIFRoYXQmIzM5O3MgdGhlIGxpa2VseSBsb2NhdGlvbiBmb3Igc29tZSBrZXkgY2hhbmdlcy4gR290dGEgdW5kZXJzdGFuZCBob3cgdGhlIHRyYW1wb2xpbmUgc2l6ZSBjYWxjdWxhdGlvbiByZWxhdGVzIHRvIHRoZSBSVyBhbGxvY2F0aW9uIHdpdGhpbiB0aGUgSklUIGVudmlyb25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDEzOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzY5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNjkwOlx0XHR0bXAgPSBicGZfYXJjaF90ZXh0X2NvcHkoaW1hZ2UsIHJ3X2ltYWdlLCBzaXplKTtcbjM2OTE6XHRcdGlmIChJU19FUlIodG1wKSlcbjM2OTI6XHRcdFx0cmV0ID0gUFRSX0VSUih0bXApO1xuMzY5MzpcdG91dDpcbjM2OTQ6XHRcdGt2ZnJlZShyd19pbWFnZSk7XG4zNjk1Olx0XHRyZXR1cm4gcmV0O1xuMzY5NjpcdH1cbjM2OTc6XHRcbjM2OTg6XHRpbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxuMzY5OTpcdFx0XHRcdCAgICAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB2b2lkICpmdW5jX2FkZHIpXG4zNzAwOlx0e1xuMzcwMTpcdFx0c3RydWN0IGJwZl90cmFtcF9pbWFnZSBpbTtcbjM3MDI6XHRcdHZvaWQgKmltYWdlO1xuMzcwMzpcdFx0aW50IHJldDtcbjM3MDQ6XHRcbjM3MDU6XHRcdC8qIEFsbG9jYXRlIGEgdGVtcG9yYXJ5IGJ1ZmZlciBmb3IgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoKS5cbjM3MDY6XHRcdCAqXG4zNzA3Olx0XHQgKiBXZSBjYW5ub3QgdXNlIGt2bWFsbG9jIGhlcmUsIGJlY2F1c2Ugd2UgbmVlZCBpbWFnZSB0byBiZSBpblxuMzcwODpcdFx0ICogbW9kdWxlIG1lbW9yeSByYW5nZS5cbjM3MDk6XHRcdCAqIFNpbmNlIGl0IG11c3QgYmUgd3JpdGFibGUgdXNlIGJwZl9qaXRfYWxsb2NfZXhlY19ydygpLlxuMzcxMDpcdFx0ICovXG4zNzExOlx0XHRpbWFnZSA9IGJwZl9qaXRfYWxsb2NfZXhlY19ydyhQQUdFX1NJWkUpO1xuMzcxMjpcdFx0aWYgKCFpbWFnZSlcbjM3MTM6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4zNzE0Olx0XG4zNzE1Olx0XHRyZXQgPSBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShcdTAwMjZpbSwgaW1hZ2UsIGltYWdlICYjNDM7IFBBR0VfU0laRSwgaW1hZ2UsXG4zNzE2Olx0XHRcdFx0XHRcdCAgICBtLCBmbGFncywgdG5vZGVzLCBmdW5jX2FkZHIpO1xuMzcxNzpcdFx0YnBmX2ppdF9mcmVlX2V4ZWMoaW1hZ2UpO1xuMzcxODpcdFx0cmV0dXJuIHJldDtcbjM3MTk6XHR9XG4zNzIwOlx0XG4zNzIxOlx0c3RhdGljIGludCBlbWl0X2JwZl9kaXNwYXRjaGVyKHU4ICoqcHByb2csIGludCBhLCBpbnQgYiwgczY0ICpwcm9ncywgdTggKmltYWdlLCB1OCAqYnVmKVxuMzcyMjpcdHtcbjM3MjM6XHRcdHU4ICpqZ19yZWxvYywgKnByb2cgPSAqcHByb2c7XG4zNzI0Olx0XHRpbnQgcGl2b3QsIGVyciwgamdfYnl0ZXMgPSAxO1xuMzcyNTpcdFx0czY0IGpnX29mZnNldDtcbjM3MjY6XHRcbjM3Mjc6XHRcdGlmIChhID09IGIpIHtcbjM3Mjg6XHRcdFx0LyogTGVhZiBub2RlIG9mIHJlY3Vyc2lvbiwgaS5lLiBub3QgYSByYW5nZSBvZiBpbmRpY2VzXG4zNzI5Olx0XHRcdCAqIGFueW1vcmUuXG4zNzMwOlx0XHRcdCAqL1xuMzczMTpcdFx0XHRFTUlUMShhZGRfMW1vZCgweDQ4LCBCUEZfUkVHXzMpKTtcdC8qIGNtcCByZHgsZnVuYyAqL1xuMzczMjpcdFx0XHRpZiAoIWlzX3NpbW0zMihwcm9nc1thXSkpXG4zNzMzOlx0XHRcdFx0cmV0dXJuIC0xO1xuMzczNDpcdFx0XHRFTUlUMl9vZmYzMigweDgxLCBhZGRfMXJlZygweEY4LCBCUEZfUkVHXzMpLFxuMzczNTpcdFx0XHRcdCAgICBwcm9nc1thXSk7XG4zNzM2Olx0XHRcdGVyciA9IGVtaXRfY29uZF9uZWFyX2p1bXAoXHUwMDI2cHJvZyxcdC8qIGplIGZ1bmMgKi9cbjM3Mzc6XHRcdFx0XHRcdFx0ICAodm9pZCAqKXByb2dzW2FdLCBpbWFnZSAmIzQzOyAocHJvZyAtIGJ1ZiksXG4zNzM4Olx0XHRcdFx0XHRcdCAgWDg2X0pFKTtcbjM3Mzk6XHRcdFx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxMzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzU2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkJQRiBKSVQgQ29tcGlsYXRpb24gQ29uZmlndXJhdGlvbiBWZXJpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBCUEYgSklUIGNvbXBpbGF0aW9uIGlzc3VlLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyB2ZXJpZnkgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbiBmbGFncyBhcmUgZW5hYmxlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX0JQRl9KSVRgIGlzIHNldCwgb2J2aW91c2x5LiBUaGVuLCBiZWNhdXNlIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29kZSBpcyBoYW5naW5nIG91dCBpbiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYCwgSSYjMzk7bGwgYWxzbyBjb25maXJtIHRoYXQgYENPTkZJR19YODZfNjRgIGlzIGNvbmZpZ3VyZWQsIHNpbmNlIHRoYXQgc2VlbXMgcmVsZXZhbnQgdG8gdGhhdCBwYXRoLiBGaW5hbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlbmFibGVkLCBnaXZlbiB0aGF0IHRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbSB1c2VzIHN5c2NhbGxzLiAKCldpdGggdGhvc2UgcHJlcmVxdWlzaXRlcyBjaGVja2VkIG9mZiwgSSYjMzk7bGwgZ28gdGFrZSBhIGxvb2sgYXQgYGtlcm5lbC9icGYvZGlzcGF0Y2hlci5jYC4gTXkgaHVuY2ggaXMgdGhhdCB0aGVyZSYjMzk7cyBzb21ldGhpbmcgcG90ZW50aWFsbHkgYXdyeSBhcm91bmQgbGluZSAxNDgsIHNvIEkmIzM5O2xsIHN0YXJ0IHRoZXJlIGFuZCB0cmFjZSB0aGUgbG9naWMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgaW4gdGhhdCBhcmVhLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRpc3BhdGNoZXIgaXMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgSklULgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxMzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvZGlzcGF0Y2hlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDA6XHRcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuIDE0MTpcdFx0aW50IHByZXZfbnVtX3Byb2dzO1xuIDE0MjpcdFxuIDE0MzpcdFx0aWYgKGZyb20gPT0gdG8pXG4gMTQ0Olx0XHRcdHJldHVybjtcbiAxNDU6XHRcbiAxNDY6XHRcdG11dGV4X2xvY2soXHUwMDI2ZC1cdTAwM2VtdXRleCk7XG4gMTQ3Olx0XHRpZiAoIWQtXHUwMDNlaW1hZ2UpIHtcbiAxNDg6XHRcdFx0ZC1cdTAwM2VpbWFnZSA9IGJwZl9wcm9nX3BhY2tfYWxsb2MoUEFHRV9TSVpFLCBicGZfaml0X2ZpbGxfaG9sZV93aXRoX3plcm8sIGZhbHNlKTtcbiAxNDk6XHRcdFx0aWYgKCFkLVx1MDAzZWltYWdlKVxuIDE1MDpcdFx0XHRcdGdvdG8gb3V0O1xuIDE1MTpcdFx0XHQvKiBkLVx1MDAzZXJ3X2ltYWdlIGRvZXNuJiMzOTt0IG5lZWQgdG8gYmUgaW4gbW9kdWxlIG1lbW9yeSByYW5nZSwgc28gd2VcbiAxNTI6XHRcdFx0ICogY2FuIHVzZSB2emFsbG9jLlxuIDE1MzpcdFx0XHQgKi9cbiAxNTQ6XHRcdFx0ZC1cdTAwM2Vyd19pbWFnZSA9IHZ6YWxsb2MoUEFHRV9TSVpFKTtcbiAxNTU6XHRcdFx0aWYgKCFkLVx1MDAzZXJ3X2ltYWdlKSB7XG4gMTU2Olx0XHRcdFx0YnBmX3Byb2dfcGFja19mcmVlKGQtXHUwMDNlaW1hZ2UsIFBBR0VfU0laRSk7XG4gMTU3Olx0XHRcdFx0ZC1cdTAwM2VpbWFnZSA9IE5VTEw7XG4gMTU4Olx0XHRcdFx0Z290byBvdXQ7XG4gMTU5Olx0XHRcdH1cbiAxNjA6XHRcdFx0YnBmX2ltYWdlX2tzeW1faW5pdChkLVx1MDAzZWltYWdlLCBQQUdFX1NJWkUsIFx1MDAyNmQtXHUwMDNla3N5bSk7XG4gMTYxOlx0XHRcdGJwZl9pbWFnZV9rc3ltX2FkZChcdTAwMjZkLVx1MDAzZWtzeW0pO1xuIDE2MjpcdFx0fVxuIDE2MzpcdFxuIDE2NDpcdFx0cHJldl9udW1fcHJvZ3MgPSBkLVx1MDAzZW51bV9wcm9ncztcbiAxNjU6XHRcdGNoYW5nZWQgfD0gYnBmX2Rpc3BhdGNoZXJfcmVtb3ZlX3Byb2coZCwgZnJvbSk7XG4gMTY2Olx0XHRjaGFuZ2VkIHw9IGJwZl9kaXNwYXRjaGVyX2FkZF9wcm9nKGQsIHRvKTtcbiAxNjc6XHRcbiAxNjg6XHRcdGlmICghY2hhbmdlZClcbiAxNjk6XHRcdFx0Z290byBvdXQ7XG4gMTcwOlx0XG4gMTcxOlx0XHRicGZfZGlzcGF0Y2hlcl91cGRhdGUoZCwgcHJldl9udW1fcHJvZ3MpO1xuIDE3MjpcdG91dDpcbiAxNzM6XHRcdG11dGV4X3VubG9jayhcdTAwMjZkLVx1MDAzZW11dGV4KTtcbiAxNzQ6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDEzOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNDgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIEJQRiBKSVQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIHNlZSB0aGUgY29uZmlndXJhdGlvbiBmb3IgYGtlcm5lbC9icGYvZGlzcGF0Y2hlci5jYCBpcyBkcml2ZW4gYnkgYENPTkZJR19CUEZfSklUYC4gTXkgbmV4dCBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB2ZXJpZnkgd2hldGhlciB0aGUgY29tcGlsYXRpb24gb2YgYGRpc3BhdGNoZXIuY2AgaXMgYWN0dWFsbHkgY29uZGl0aW9uYWwgYmFzZWQgb24gdGhpcyBjb25maWcuIFRoZSBtb3N0IG9idmlvdXMgcGxhY2UgdG8gZG8gdGhhdCBpcyBpbiBga2VybmVsL2JwZi9NYWtlZmlsZWAuIEkgbmVlZCB0byBxdWlja2x5IGNyb3NzLXJlZmVyZW5jZSB0aGF0IGBNYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jeSBhbmQgdW5kZXJzdGFuZCB0aGUgYnVpbGQgcHJvY2Vzcy4gR290dGEgbWFrZSBzdXJlIHRoZSBKSVQgY29tcGlsZXIgZGVwZW5kZW5jeSBpcyBoYW5kbGVkIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTM6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdG9iai15IDo9IGNvcmUub1xuICAgMzpcdGlmbmVxICgkKENPTkZJR19CUEZfSklUX0FMV0FZU19PTikseSlcbiAgIDQ6XHQjIF9fX2JwZl9wcm9nX3J1bigpIG5lZWRzIEdDU0UgZGlzYWJsZWQgb24geDg2OyBzZWUgMzE5M2MwODM2ZjIwMyBmb3IgZGV0YWlsc1xuICAgNTpcdGNmbGFncy1ub2djc2UtJChDT05GSUdfWDg2KSQoQ09ORklHX0NDX0lTX0dDQykgOj0gLWZuby1nY3NlXG4gICA2Olx0ZW5kaWZcbiAgIDc6XHRDRkxBR1NfY29yZS5vICYjNDM7PSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxuICAgODpcdFxuICAgOTpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQub1xuICAxMDpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xuICAxMTpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGhhc2h0YWIubyBhcnJheW1hcC5vIHBlcmNwdV9mcmVlbGlzdC5vIGJwZl9scnVfbGlzdC5vIGxwbV90cmllLm8gbWFwX2luX21hcC5vIGJsb29tX2ZpbHRlci5vXG4gIDEyOlx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gbG9jYWxfc3RvcmFnZS5vIHF1ZXVlX3N0YWNrX21hcHMubyByaW5nYnVmLm8gYnBmX2luc25fYXJyYXkub1xuICAxMzpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9sb2NhbF9zdG9yYWdlLm8gYnBmX3Rhc2tfc3RvcmFnZS5vXG4gIDE0Olx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gZml4dXBzLm8gY2ZnLm8gc3RhdGVzLm8gYmFja3RyYWNrLm8gY2hlY2tfYnRmLm9cbiAgMTU6XHRvYmotJHtDT05GSUdfQlBGX0xTTX1cdCAgJiM0Mzs9IGJwZl9pbm9kZV9zdG9yYWdlLm9cbiAgMTY6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBkaXNhc20ubyBtcHJvZy5vXG4gIDE3Olx0b2JqLSQoQ09ORklHX0JQRl9KSVQpICYjNDM7PSB0cmFtcG9saW5lLm9cbiAgMTg6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xuICAxOTpcdGlmZXEgKCQoQ09ORklHX01NVSkkKENPTkZJR182NEJJVCkseXkpXG4gIDIwOlx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYXJlbmEubyByYW5nZV90cmVlLm9cbiAgMjE6XHRlbmRpZlxuICAyMjpcdG9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gZGlzcGF0Y2hlci5vXG4gIDIzOlx0aWZlcSAoJChDT05GSUdfTkVUKSx5KVxuICAyNDpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGRldm1hcC5vXG4gIDI1Olx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gY3B1bWFwLm9cbiAgMjY6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBvZmZsb2FkLm9cbiAgMjc6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBuZXRfbmFtZXNwYWNlLm9cbiAgMjg6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSB0Y3gub1xuICAyOTpcdGVuZGlmXG4gIDMwOlx0aWZlcSAoJChDT05GSUdfUEVSRl9FVkVOVFMpLHkpXG4gIDMxOlx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gc3RhY2ttYXAub1xuICAzMjpcdGVuZGlmXG4gIDMzOlx0aWZlcSAoJChDT05GSUdfQ0dST1VQUykseSlcbiAgMzQ6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjZ3JvdXBfaXRlci5vIGJwZl9jZ3JwX3N0b3JhZ2Uub1xuICAzNTpcdGVuZGlmXG4gIDM2Olx0b2JqLSQoQ09ORklHX0NHUk9VUF9CUEYpICYjNDM7PSBjZ3JvdXAub1xuICAzNzpcdGlmZXEgKCQoQ09ORklHX0lORVQpLHkpXG4gIDM4Olx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gcmV1c2Vwb3J0X2FycmF5Lm9cbiAgMzk6XHRlbmRpZlxuICA0MDpcdGlmZXEgKCQoQ09ORklHX1NZU0ZTKSx5KVxuICA0MTpcdG9iai0kKENPTkZJR19ERUJVR19JTkZPX0JURikgJiM0Mzs9IHN5c2ZzX2J0Zi5vXG4gIDQyOlx0ZW5kaWZcbiAgNDM6XHRpZmVxICgkKENPTkZJR19CUEZfSklUKSx5KVxuICA0NDpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9zdHJ1Y3Rfb3BzLm9cbiAgNDU6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjcHVtYXNrLm9cbiAgNDY6XHQjIGJwZl9sc21fcHJvdG8ubyBtdXN0IHByZWNlZGUgYnBmX2xzbS5vLiBUaGUgY3VycmVudCBwYWhvbGUgbG9naWNcbiAgNDc6XHQjIGRlZHVwbGljYXRlcyBmdW5jdGlvbiBwcm90b3R5cGVzIHdpdGhpblxuICA0ODpcdCMgYnRmX2VuY29kZXJfX2FkZF9zYXZlZF9mdW5jKCkgYnkga2VlcGluZyB0aGUgZmlyc3QgaW5zdGFuY2Ugc2Vlbi4gV2VcbiAgNDk6XHQjIG5lZWQgdGhlIGZ1bmN0aW9uIHByb3RvdHlwZShzKSBpbiBicGZfbHNtX3Byb3RvLm8gdG8gdGFrZSBwcmVjZWRlbmNlXG4gIDUwOlx0IyBvdmVyIHRob3NlIHdpdGhpbiBicGZfbHNtLm8uIEhhdmluZyBicGZfbHNtX3Byb3RvLm8gcHJlY2VkZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjQyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIGZvciBCUEYgSklUIGFuZCBSZWxhdGVkIEZlYXR1cmVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYW5kIGl0IGxvb2tzIGxpa2UgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX0JQRl9KSVRgIGlzIGVuYWJsZWQg4oCTIHRoYXQmIzM5O3MgYSBnaXZlbi4gSSBrbmV3IHRoYXQsIG9mIGNvdXJzZSwgYnV0IGl0JiMzOTtzIGdvb2QgdG8gY29uZmlybS4gVGhlbiBJIGFsc28gbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZDsgdGhhdCYjMzk7cyBhIGNvbW1vbiBwcmVyZXF1aXNpdGUgZm9yIG1hbnkgQlBGIGZ1bmN0aW9uYWxpdGllcywgc28gdGhhdCBtYWtlcyBzZW5zZS4gSG1tLCBhbmQgaXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlcyBpbiBgYXJjaC94ODYvbW0vaW5pdC5jYCBkZXBlbmQgb24gYENPTkZJR19FWEVDTUVNYC4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoYXQgYGFyY2gveDg2L21tL2luaXQuY2AgZmlsZSBhZ2FpbiBqdXN0IHRvIGJlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBjcnVjaWFsLiBHb3R0YSBnZXQgdGhpcyByaWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTM6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9pbml0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMjA6XHRcdFx0XHRcdC5wZ3Byb3RcdD0gUEFHRV9LRVJORUwsXG4xMTIxOlx0XHRcdFx0XHQuYWxpZ25tZW50ID0gTU9EVUxFX0FMSUdOLFxuMTEyMjpcdFx0XHRcdH0sXG4xMTIzOlx0XHRcdH0sXG4xMTI0Olx0XHR9O1xuMTEyNTpcdFxuMTEyNjpcdFx0cmV0dXJuIFx1MDAyNmV4ZWNtZW1faW5mbztcbjExMjc6XHR9XG4xMTI4Olx0I2VuZGlmIC8qIENPTkZJR19FWEVDTUVNICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDEzOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDY1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gYW5kIEJQRiBKSVQgQWxsb2NhdGlvbioqCgpBbHJpZ2h0LCB5ZXAsIGRlZmluaXRlbHkgbmVlZCB0byBjb25maXJtIHRoYXQgYENPTkZJR19FWEVDTUVNYCBpcyBlbmFibGVkLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHJlcXVpcmVtZW50LCBhbmQgSSYjMzk7bSBwcmV0dHkgY2VydGFpbiBpdCYjMzk7cyBiYWtlZCBpbnRvIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBKSVQgd29ya3MuIENhbiYjMzk7dCBieXBhc3MgdGhhdCBtZW1vcnkgYWxsb2NhdGlvbiBwb2xpY3kuCgpOb3csIGxldCBtZSBxdWlja2x5IHBpdm90IHRvIGBrZXJuZWwvYnBmL2NvcmUuY2AuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgbXkgdW5kZXJzdGFuZGluZywgc3BlY2lmaWNhbGx5IHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFyb3VuZCBgYnBmX2ppdF9hbGxvY19leGVjYC4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIHJlY2FsbCB0aGUga2V5IGludGVyYWN0aW9ucyB0aGVyZSwgZXNwZWNpYWxseSB3aGF0IGhhcHBlbnMgd2hlbiB0aGUgZmxhZyBpcyBzZXQuIFRoYXQgZnVuY3Rpb24gaXMgdGhlIGNvcmUgb2YgaG93IHdlIGFjdHVhbGx5IGdldCB0aGUgZXhlY3V0YWJsZSBtZW1vcnkuIE5lZWQgdG8ga2VlcCB0aGF0IHBpY3R1cmUgY2xlYXIgaW4gbXkgaGVhZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTM6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTExNTpcdFx0XHR9XG4xMTE2Olx0XHR9XG4xMTE3Olx0XG4xMTE4Olx0XHRyZXR1cm4gMDtcbjExMTk6XHR9XG4xMTIwOlx0XG4xMTIxOlx0dm9pZCBicGZfaml0X3VuY2hhcmdlX21vZG1lbSh1MzIgc2l6ZSlcbjExMjI6XHR7XG4xMTIzOlx0XHRhdG9taWNfbG9uZ19zdWIoc2l6ZSwgXHUwMDI2YnBmX2ppdF9jdXJyZW50KTtcbjExMjQ6XHR9XG4xMTI1Olx0XG4xMTI2Olx0dm9pZCAqYnBmX2ppdF9hbGxvY19leGVjKHVuc2lnbmVkIGxvbmcgc2l6ZSlcbjExMjc6XHR7XG4xMTI4Olx0XHRyZXR1cm4gZXhlY21lbV9hbGxvYyhFWEVDTUVNX0JQRiwgc2l6ZSk7XG4xMTI5Olx0fVxuMTEzMDpcdFxuMTEzMTpcdHZvaWQgKmJwZl9qaXRfYWxsb2NfZXhlY19ydyh1bnNpZ25lZCBsb25nIHNpemUpXG4xMTMyOlx0e1xuMTEzMzpcdFx0cmV0dXJuIGV4ZWNtZW1fYWxsb2NfcncoRVhFQ01FTV9CUEYsIHNpemUpO1xuMTEzNDpcdH1cbjExMzU6XHRcbjExMzY6XHR2b2lkIGJwZl9qaXRfZnJlZV9leGVjKHZvaWQgKmFkZHIpXG4xMTM3Olx0e1xuMTEzODpcdFx0ZXhlY21lbV9mcmVlKGFkZHIpO1xuMTEzOTpcdH1cbjExNDA6XHRcbjExNDE6XHRzdHJ1Y3QgYnBmX2JpbmFyeV9oZWFkZXIgKlxuMTE0MjpcdGJwZl9qaXRfYmluYXJ5X2FsbG9jKHVuc2lnbmVkIGludCBwcm9nbGVuLCB1OCAqKmltYWdlX3B0cixcbjExNDM6XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgYWxpZ25tZW50LFxuMTE0NDpcdFx0XHQgICAgIGJwZl9qaXRfZmlsbF9ob2xlX3QgYnBmX2ZpbGxfaWxsX2luc25zKVxuMTE0NTpcdHtcbjExNDY6XHRcdHN0cnVjdCBicGZfYmluYXJ5X2hlYWRlciAqaGRyO1xuMTE0NzpcdFx0dTMyIHNpemUsIGhvbGUsIHN0YXJ0O1xuMTE0ODpcdFxuMTE0OTpcdFx0V0FSTl9PTl9PTkNFKCFpc19wb3dlcl9vZl8yKGFsaWdubWVudCkgfHxcbjExNTA6XHRcdFx0ICAgICBhbGlnbm1lbnQgXHUwMDNlIEJQRl9JTUFHRV9BTElHTk1FTlQpO1xuMTE1MTpcdFxuMTE1MjpcdFx0LyogTW9zdCBvZiBCUEYgZmlsdGVycyBhcmUgcmVhbGx5IHNtYWxsLCBidXQgaWYgc29tZSBvZiB0aGVtXG4xMTUzOlx0XHQgKiBmaWxsIGEgcGFnZSwgYWxsb3cgYXQgbGVhc3QgMTI4IGV4dHJhIGJ5dGVzIHRvIGluc2VydCBhXG4xMTU0Olx0XHQgKiByYW5kb20gc2VjdGlvbiBvZiBpbGxlZ2FsIGluc3RydWN0aW9ucy5cbjExNTU6XHRcdCAqL1xuMTE1NjpcdFx0c2l6ZSA9IHJvdW5kX3VwKHByb2dsZW4gJiM0Mzsgc2l6ZW9mKCpoZHIpICYjNDM7IDEyOCwgUEFHRV9TSVpFKTtcbjExNTc6XHRcbjExNTg6XHRcdGlmIChicGZfaml0X2NoYXJnZV9tb2RtZW0oc2l6ZSkpXG4xMTU5Olx0XHRcdHJldHVybiBOVUxMO1xuMTE2MDpcdFx0aGRyID0gYnBmX2ppdF9hbGxvY19leGVjKHNpemUpO1xuMTE2MTpcdFx0aWYgKCFoZHIpIHtcbjExNjI6XHRcdFx0YnBmX2ppdF91bmNoYXJnZV9tb2RtZW0oc2l6ZSk7XG4xMTYzOlx0XHRcdHJldHVybiBOVUxMO1xuMTE2NDpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTAyMwoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDI4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGdW5jdGlvbmFsIENoYW5nZXMqKgoKT2theSwgdGhlc2UgY2hhbmdlcyBzZWVtIHNvbGlkIOKAkyB0aGV5JiMzOTtyZSBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwgYW5kIHRoZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUsIHdoaWNoIGlzIGNydWNpYWwuIE15IGluaXRpYWwgbGlzdCBvZiBmb2N1cyBzeW1ib2xzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludDogYGJwZl9wcm9nX3BhY2tfYWxsb2NgLCBgYWxsb2NfbmV3X3BhY2tgLCBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYCwgYGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nYCwgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AsIGFuZCBgYnBmX2ppdF9hbGxvY19leGVjYC4KCldhaXQgYSBtaW51dGUuLi4gdGhpbmtpbmcgYWJvdXQgaXQgbW9yZSwgYGJwZl9qaXRfYWxsb2NfZXhlY2AgYW5kIGBicGZfaml0X2FsbG9jX2V4ZWNfcndgIGFyZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIHdyYXBwZXJzIGFyb3VuZCBgZXhlY21lbV9hbGxvY2AgYW5kIGBleGVjbWVtX2FsbG9jX3J3YC4gSXQgbWlnaHQgYmUgbW9yZSBpbnNpZ2h0ZnVsIHRvIHByaW9yaXRpemUgYGJwZl9wcm9nX3BhY2tfYWxsb2NgIGFuZCBgYWxsb2NfbmV3X3BhY2tgIGluc3RlYWQsIGFzIHRoZXkmIzM5O3JlIGNsb3NlciB0byB0aGUgY29yZSBhbGxvY2F0aW9uIGxvZ2ljLiBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYCBhbmQgYGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nYCBhcmUgZGVmaW5pdGVseSByZWxldmFudCwgYW5kIHNob3VsZCBiZSBpbmNsdWRlZCBvbiB0aGUgbGlzdC4KCkxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIHJlYWNoYWJpbGl0eSBvZiB0aGVzZSBrZXkgZWxlbWVudHMuIEkga25vdyBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYCBpcyBlbWJlZGRlZCBpbiB0aGUgQlBGIHRyYW1wb2xpbmUgbG9naWMuIEFuZCBgYnBmX2Rpc3BhdGNoZXJfY2hhbmdlX3Byb2dgIHBsYXlzIGEgdml0YWwgcm9sZSBpbiB0aGUgQlBGIGRpc3BhdGNoZXIgbG9naWMsIHNvIHRob3NlIGFyZSBjb25maXJtZWQgYXMgYWN0aXZlIGNvbXBvbmVudHMuCgpJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBpbmZsdWVuY2UgdGhpcyBhcmVhOiBgQlBGX0pJVGAsIGBCUEZfU1lTQ0FMTGAsIGFuZCBgRVhFQ01FTWAuIExldCBtZSBxdWlja2x5IGNvbmZpcm0gdGhhdCBgRVhFQ01FTWAgaXMgYWN0dWFsbHkgYSBjb25maWd1cmFibGUgb3B0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxMzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRVhFQ01FTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTE0NTQ9Y29uZmlnIElPTU1VX01NX0RBVEFcbi0tXG5tbS9LY29uZmlnLTE0NTYtXG5tbS9LY29uZmlnOjE0NTc6Y29uZmlnIEVYRUNNRU1cbm1tL0tjb25maWctMTQ1OC1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3NTIKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyByZXF1ZXN0ZWQsIGdlYXJlZCB0b3dhcmQgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKClJpZ2h0LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZXNlIHN5c3RlbSBjb25maWd1cmF0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYEVYRUNNRU1gIOKAkyBkZWZpbml0ZWx5LCB0aGF0JiMzOTtzIGEga25vd24gY29uZmlnLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIuIE5vdywgSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgZWxzZS4gTXkgbWVudGFsIGNoZWNrbGlzdCBkaWN0YXRlcyB0aGF0IEkgbXVzdCBjb25maXJtIHRoZSBzdGF0dXMgb2YgYEJQRl9KSVRgLiBJcyBpdCBhbHNvIGNvbmZpZ3VyZWQsIG9yIGRvIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyPyBUaGlzIGlzIHRoZSBjb3JlIG9mIHdoYXQgSSBhbSBkb2luZyBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDEzOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfSklUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNz1jb25maWcgQlBGX1NZU0NBTExcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctNDEtXG5rZXJuZWwvYnBmL0tjb25maWc6NDI6Y29uZmlnIEJQRl9KSVRcbmtlcm5lbC9icGYvS2NvbmZpZy00My1cdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcJiMzNDtcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctNTctXG5rZXJuZWwvYnBmL0tjb25maWc6NTg6Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXG5rZXJuZWwvYnBmL0tjb25maWctNTktXHRib29sIFwmIzM0O1Blcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXCYjMzQ7XG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTY4LVxua2VybmVsL2JwZi9LY29uZmlnOjY5OmNvbmZpZyBCUEZfSklUX0RFRkFVTFRfT05cbmtlcm5lbC9icGYvS2NvbmZpZy03MC1cdGRlZl9ib29sIEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVQgfHwgQlBGX0pJVF9BTFdBWVNfT05cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxNDgKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYSBmaXJzdC1wZXJzb24sIGV4cGVydCBwZXJzcGVjdGl2ZSwgYWltaW5nIGZvciBhIGZ1bHNvbWUgcmVuZGVyaW5nOgoKKipNeSBCUEYgQ29uZmlnIENvbnNpZGVyYXRpb24qKgoKQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIG9uIG15IG1pbmQgaXMgY29uZmlybWluZyB0aGF0IGBCUEZfSklUYCBpcyBpbmRlZWQgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgd2hpY2ggaXMgcHJldHR5IGZ1bmRhbWVudGFsIHRvIGhvdyB0aGluZ3Mgd29yay4gKlllcywgY29uZmlybWVkOyB3ZSBrbm93IGBCUEZfSklUYCBpcyBhIGNvbmZpZyBwYXJhbWV0ZXIuIExldCYjMzk7cyBtb3ZlIG9uKi4KCk5vdywgc2luY2Ugd2UmIzM5O3JlIGRpdmluZyBpbnRvIEJQRiBjb25maWd1cmF0aW9ucywgdGhlIG5hdHVyYWwgbmV4dCBzdGVwLCAqZm9yIG1lKiwgaXMgdG8gbG9vayBhdCBgQlBGX1NZU0NBTExgLiBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgdGhhdCYjMzk7cyBhbHNvIGV4cG9zZWQgYXMgYSBjb25maWd1cmFibGUgb3B0aW9uLiBJdCYjMzk7cyBvZnRlbiBpbnRlcnR3aW5lZCB3aXRoIHRoZSBvdmVyYWxsIEJQRiBzZXR1cCwgc28gdW5kZXJzdGFuZGluZyBpdHMgc3RhdHVzIGlzIGtleSB0byBldmFsdWF0aW5nIHRoZSBvdmVyYWxsIHBpY3R1cmUuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIEkgY2FuIG1vZGlmeSBpdCBkaXJlY3RseSwgb3IgaWYgaXQmIzM5O3MgaW1wbGljaXRseSBlbmFibGVkIG9yIGRpc2FibGVkIGJhc2VkIG9uIG90aGVyIHNldHRpbmdzLiBLbm93aW5nIHRoaXMgaXMgY3JpdGljYWwgdG8gcHJvcGVyIEJQRiBwcm9ncmFtIG9wZXJhdGlvbiwgc2VjdXJpdHkgYW5kIHBvcnRhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1MDAKCQkJCQkJCW91dHB1dDogMTc1CgkJCQkJCQl0aG91Z2h0czogMjA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgQ29uZmlndXJhdGlvbiBhbmQgU3ltYm9sIFZpc2liaWxpdHkqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYEJQRl9TWVNDQUxMYCBpcyBpbmRlZWQgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgbWFraW5nIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBgQlBGX0pJVGAsIGBCUEZfU1lTQ0FMTGAsIGFuZCBgRVhFQ01FTWAuIE15IGZvY3VzIGlzIG9uIHRoZXNlIHN5bWJvbHM6IGBhbGxvY19uZXdfcGFja2AsIGBicGZfcHJvZ19wYWNrX2FsbG9jYCwgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAsIGFuZCBgYnBmX2Rpc3BhdGNoZXJfY2hhbmdlX3Byb2dgLgoKTGV0JiMzOTtzIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBzY29wZSBvZiB0aGVzZSBrZXkgc3ltYm9scy4gSSBzZWUgdGhhdCBgYWxsb2NfbmV3X3BhY2tgIGlzIHN0YXRpYywgZGVmaW5lZCB3aXRoaW4gYGtlcm5lbC9icGYvY29yZS5jYC4gR29vZCwgZ290IHRoYXQuIE5vdywgSSYjMzk7bSB2ZXJpZnlpbmcgdGhhdCBgYnBmX3Byb2dfcGFja19hbGxvY2AgaXMgZXhwb3J0ZWQgb3IgZ2xvYmFsIOKAkyBjb25maXJtZWQsIGl0JiMzOTtzIGdsb2JhbC4gRm9sbG93aW5nIHRoYXQsIEkmIzM5O20gY2hlY2tpbmcgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAmIzM5O3Mgc2NvcGUgLSBpdCYjMzk7cyBnbG9iYWwuIEFuZCBmaW5hbGx5LCBJIHNlZSB0aGF0IGBicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZ2AgaXMgYWxzbyBnbG9iYWwuCgpBbHJpZ2h0LCBJJiMzOTt2ZSBnb3QgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNjb3BlIG9mIHRoZXNlIHN5bWJvbHMgbm93LiBJJiMzOTtsbCBkb2N1bWVudCBteSBmaW5kaW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7RVhFQ01FTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX25ld19wYWNrJiMzNDssCiAgICAmIzM0O2JwZl9wcm9nX3BhY2tfYWxsb2MmIzM0OywKICAgICYjMzQ7YXJjaF9icGZfdHJhbXBvbGluZV9zaXplJiMzNDssCiAgICAmIzM0O2JwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEJQRiBKSVQgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMsIGludHJvZHVjaW5nIGBicGZfaml0X2FsbG9jX2V4ZWNfcndgIGFuZCB1cGRhdGluZyBgYnBmX2ppdF9hbGxvY19leGVjYCB0byB1c2UgYGV4ZWNtZW1fYWxsb2NgLiBJdCBhbHNvIGNoYW5nZXMgeDg2IEJQRiBKSVQgbWVtb3J5IGluaXRpYWxpemF0aW9uIGFuZCB1cGRhdGVzIEJQRiB0cmFtcG9saW5lIGFuZCBkaXNwYXRjaGVyIGxvZ2ljIHRvIHVzZSB0aGUgbmV3IGFsbG9jYXRpb24gbWV0aG9kcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBCUEYgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7RVhFQ01FTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX25ld19wYWNrJiMzNDssCiAgICAmIzM0O2JwZl9wcm9nX3BhY2tfYWxsb2MmIzM0OywKICAgICYjMzQ7YXJjaF9icGZfdHJhbXBvbGluZV9zaXplJiMzNDssCiAgICAmIzM0O2JwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEJQRiBKSVQgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMsIGludHJvZHVjaW5nIGBicGZfaml0X2FsbG9jX2V4ZWNfcndgIGFuZCB1cGRhdGluZyBgYnBmX2ppdF9hbGxvY19leGVjYCB0byB1c2UgYGV4ZWNtZW1fYWxsb2NgLiBJdCBhbHNvIGNoYW5nZXMgeDg2IEJQRiBKSVQgbWVtb3J5IGluaXRpYWxpemF0aW9uIGFuZCB1cGRhdGVzIEJQRiB0cmFtcG9saW5lIGFuZCBkaXNwYXRjaGVyIGxvZ2ljIHRvIHVzZSB0aGUgbmV3IGFsbG9jYXRpb24gbWV0aG9kcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBCUEYgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxMzoxMDoyOS4wOTMwNTk4NzVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODA1MTAwOTg2NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkVYRUNNRU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19uZXdfcGFja1wiLFxuICAgIFwiYnBmX3Byb2dfcGFja19hbGxvY1wiLFxuICAgIFwiYXJjaF9icGZfdHJhbXBvbGluZV9zaXplXCIsXG4gICAgXCJicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEJQRiBKSVQgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMsIGludHJvZHVjaW5nIGBicGZfaml0X2FsbG9jX2V4ZWNfcndgIGFuZCB1cGRhdGluZyBgYnBmX2ppdF9hbGxvY19leGVjYCB0byB1c2UgYGV4ZWNtZW1fYWxsb2NgLiBJdCBhbHNvIGNoYW5nZXMgeDg2IEJQRiBKSVQgbWVtb3J5IGluaXRpYWxpemF0aW9uIGFuZCB1cGRhdGVzIEJQRiB0cmFtcG9saW5lIGFuZCBkaXNwYXRjaGVyIGxvZ2ljIHRvIHVzZSB0aGUgbmV3IGFsbG9jYXRpb24gbWV0aG9kcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBCUEYgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDEzOjEwOjI5LjA5MzA3NTc1NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA0NjA5OTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOWRhNzE0MGQxMmYxZjY3YjQ4MWIwNWQwNDBjM2Q5NGVkNTdhYmQ3ZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAxNiAxMzoxMDoyNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pbml0LmMgYi9hcmNoL3g4Ni9tbS9pbml0LmNcXG5pbmRleCBmYjY3MjE3ZmRkY2QzNy4uMDc5ZjhjN2U5ZTNjZGUgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvbW0vaW5pdC5jXFxuKysrIGIvYXJjaC94ODYvbW0vaW5pdC5jXFxuQEAgLTExMDcsMTAgKzExMDcsMTAgQEAgc3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxcbiBcXHRcXHRcXHRcXHQuYWxpZ25tZW50ID0gTU9EVUxFX0FMSUdOLFxcbiBcXHRcXHRcXHR9LFxcbiBcXHRcXHRcXHRbRVhFQ01FTV9CUEZdID0ge1xcbi1cXHRcXHRcXHRcXHQuZmxhZ3NcXHQ9IEVYRUNNRU1fS0FTQU5fU0hBRE9XLFxcbitcXHRcXHRcXHRcXHQuZmxhZ3NcXHQ9IGZsYWdzLFxcbiBcXHRcXHRcXHRcXHQuc3RhcnRcXHQ9IHN0YXJ0LFxcbiBcXHRcXHRcXHRcXHQuZW5kXFx0PSBNT0RVTEVTX0VORCxcXG4tXFx0XFx0XFx0XFx0LnBncHJvdFxcdD0gUEFHRV9LRVJORUwsXFxuK1xcdFxcdFxcdFxcdC5wZ3Byb3RcXHQ9IHBncHJvdCxcXG4gXFx0XFx0XFx0XFx0LmFsaWdubWVudCA9IE1PRFVMRV9BTElHTixcXG4gXFx0XFx0XFx0fSxcXG4gXFx0XFx0XFx0W0VYRUNNRU1fTU9EVUxFX0RBVEFdID0ge1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcXG5pbmRleCBkZTc1MTVlYTFiZWFlOC4uYjJmZWVjODFlMjMxMmUgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXFxuKysrIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXFxuQEAgLTM3MDMsMTMgKzM3MDMsMTIgQEAgaW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdC8qIEFsbG9jYXRlIGEgdGVtcG9yYXJ5IGJ1ZmZlciBmb3IgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoKS5cXG4tXFx0ICogVGhpcyB3aWxsIE5PVCBjYXVzZSBmcmFnbWVudGF0aW9uIGluIGRpcmVjdCBtYXAsIGFzIHdlIGRvIG5vdFxcbi1cXHQgKiBjYWxsIHNldF9tZW1vcnlfKigpIG9uIHRoaXMgYnVmZmVyLlxcbiBcXHQgKlxcbiBcXHQgKiBXZSBjYW5ub3QgdXNlIGt2bWFsbG9jIGhlcmUsIGJlY2F1c2Ugd2UgbmVlZCBpbWFnZSB0byBiZSBpblxcbiBcXHQgKiBtb2R1bGUgbWVtb3J5IHJhbmdlLlxcbitcXHQgKiBTaW5jZSBpdCBtdXN0IGJlIHdyaXRhYmxlIHVzZSBicGZfaml0X2FsbG9jX2V4ZWNfcncoKS5cXG4gXFx0ICovXFxuLVxcdGltYWdlID0gYnBmX2ppdF9hbGxvY19leGVjKFBBR0VfU0laRSk7XFxuK1xcdGltYWdlID0gYnBmX2ppdF9hbGxvY19leGVjX3J3KFBBR0VfU0laRSk7XFxuIFxcdGlmICghaW1hZ2UpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcXG5pbmRleCAxNGFjYjI0NTU3NDZmYy4uMzJkNTI5N2M1NTdlNWIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcXG5AQCAtMTMzMyw2ICsxMzMzLDcgQEAgYnBmX2ppdF9iaW5hcnlfYWxsb2ModW5zaWduZWQgaW50IHByb2dsZW4sIHU4ICoqaW1hZ2VfcHRyLFxcbiB2b2lkIGJwZl9qaXRfYmluYXJ5X2ZyZWUoc3RydWN0IGJwZl9iaW5hcnlfaGVhZGVyICpoZHIpO1xcbiB1NjQgYnBmX2ppdF9hbGxvY19leGVjX2xpbWl0KHZvaWQpO1xcbiB2b2lkICpicGZfaml0X2FsbG9jX2V4ZWModW5zaWduZWQgbG9uZyBzaXplKTtcXG4rdm9pZCAqYnBmX2ppdF9hbGxvY19leGVjX3J3KHVuc2lnbmVkIGxvbmcgc2l6ZSk7XFxuIHZvaWQgYnBmX2ppdF9mcmVlX2V4ZWModm9pZCAqYWRkcik7XFxuIHZvaWQgYnBmX2ppdF9mcmVlKHN0cnVjdCBicGZfcHJvZyAqZnApO1xcbiBzdHJ1Y3QgYnBmX2JpbmFyeV9oZWFkZXIgKlxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NvcmUuYyBiL2tlcm5lbC9icGYvY29yZS5jXFxuaW5kZXggNDdmZTA0N2FkMzBiODguLmUyMDc2NjY3YjI0NTE3IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvY29yZS5jXFxuKysrIGIva2VybmVsL2JwZi9jb3JlLmNcXG5AQCAtOTE2LDYgKzkxNiwxMSBAQCBzdGF0aWMgTElTVF9IRUFEKHBhY2tfbGlzdCk7XFxuIFxcbiAjZGVmaW5lIEJQRl9QUk9HX0NIVU5LX0NPVU5UIChCUEZfUFJPR19QQUNLX1NJWkUgLyBCUEZfUFJPR19DSFVOS19TSVpFKVxcbiBcXG4rc3RhdGljIGJvb2wgYnBmX2ppdF9tZW1faXNfcm94KHZvaWQpXFxuK3tcXG4rXFx0cmV0dXJuIGV4ZWNtZW1faXNfcm94KEVYRUNNRU1fQlBGKTtcXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCBicGZfcHJvZ19wYWNrICphbGxvY19uZXdfcGFjayhicGZfaml0X2ZpbGxfaG9sZV90IGJwZl9maWxsX2lsbF9pbnNucylcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX3Byb2dfcGFjayAqcGFjaztcXG5AQCAtOTI3LDE2ICs5MzIsMTggQEAgc3RhdGljIHN0cnVjdCBicGZfcHJvZ19wYWNrICphbGxvY19uZXdfcGFjayhicGZfaml0X2ZpbGxfaG9sZV90IGJwZl9maWxsX2lsbF9pbnNcXG4gXFx0cGFjay1cXHUwMDNlcHRyID0gYnBmX2ppdF9hbGxvY19leGVjKEJQRl9QUk9HX1BBQ0tfU0laRSk7XFxuIFxcdGlmICghcGFjay1cXHUwMDNlcHRyKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4tXFx0YnBmX2ZpbGxfaWxsX2luc25zKHBhY2stXFx1MDAzZXB0ciwgQlBGX1BST0dfUEFDS19TSVpFKTtcXG4gXFx0Yml0bWFwX3plcm8ocGFjay1cXHUwMDNlYml0bWFwLCBCUEZfUFJPR19QQUNLX1NJWkUgLyBCUEZfUFJPR19DSFVOS19TSVpFKTtcXG4gXFxuIFxcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZicGZfcHJlZF9mbHVzaF9lbmFibGVkKSlcXG4gXFx0XFx0cGFjay1cXHUwMDNlYXJjaF9mbHVzaF9uZWVkZWQgPSB0cnVlO1xcbi1cXHRzZXRfdm1fZmx1c2hfcmVzZXRfcGVybXMocGFjay1cXHUwMDNlcHRyKTtcXG4tXFx0ZXJyID0gc2V0X21lbW9yeV9yb3goKHVuc2lnbmVkIGxvbmcpcGFjay1cXHUwMDNlcHRyLFxcbi1cXHRcXHRcXHQgICAgIEJQRl9QUk9HX1BBQ0tfU0laRSAvIFBBR0VfU0laRSk7XFxuLVxcdGlmIChlcnIpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAoIWJwZl9qaXRfbWVtX2lzX3JveCgpKSB7XFxuK1xcdFxcdGJwZl9maWxsX2lsbF9pbnNucyhwYWNrLVxcdTAwM2VwdHIsIEJQRl9QUk9HX1BBQ0tfU0laRSk7XFxuK1xcdFxcdHNldF92bV9mbHVzaF9yZXNldF9wZXJtcyhwYWNrLVxcdTAwM2VwdHIpO1xcbitcXHRcXHRlcnIgPSBzZXRfbWVtb3J5X3JveCgodW5zaWduZWQgbG9uZylwYWNrLVxcdTAwM2VwdHIsXFxuK1xcdFxcdFxcdFxcdCAgICAgQlBGX1BST0dfUEFDS19TSVpFIC8gUEFHRV9TSVpFKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4gXFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2cGFjay1cXHUwMDNlbGlzdCwgXFx1MDAyNnBhY2tfbGlzdCk7XFxuIFxcdHJldHVybiBwYWNrO1xcbiBcXG5AQCAtOTY1LDcgKzk3Miw3IEBAIHZvaWQgKmJwZl9wcm9nX3BhY2tfYWxsb2ModTMyIHNpemUsIGJwZl9qaXRfZmlsbF9ob2xlX3QgYnBmX2ZpbGxfaWxsX2luc25zLCBib29sXFxuIFxcdFxcdFxcdHByX3dhcm5fb25jZShcXFwiQlBGOiBQcmVkaWN0b3JzIG5vdCBmbHVzaGVkIGZvciBhbGxvY2F0aW9ucyBncmVhdGVyIHRoYW4gQlBGX1BST0dfUEFDS19TSVpFXFxcXG5cXFwiKTtcXG4gXFx0XFx0c2l6ZSA9IHJvdW5kX3VwKHNpemUsIFBBR0VfU0laRSk7XFxuIFxcdFxcdHB0ciA9IGJwZl9qaXRfYWxsb2NfZXhlYyhzaXplKTtcXG4tXFx0XFx0aWYgKHB0cikge1xcbitcXHRcXHRpZiAocHRyIFxcdTAwMjZcXHUwMDI2ICFicGZfaml0X21lbV9pc19yb3goKSkge1xcbiBcXHRcXHRcXHRpbnQgZXJyO1xcbiBcXG4gXFx0XFx0XFx0YnBmX2ZpbGxfaWxsX2luc25zKHB0ciwgc2l6ZSk7XFxuQEAgLTExMTYsMTIgKzExMjMsMTcgQEAgdm9pZCBicGZfaml0X3VuY2hhcmdlX21vZG1lbSh1MzIgc2l6ZSlcXG4gXFx0YXRvbWljX2xvbmdfc3ViKHNpemUsIFxcdTAwMjZicGZfaml0X2N1cnJlbnQpO1xcbiB9XFxuIFxcbi12b2lkICpfX3dlYWsgYnBmX2ppdF9hbGxvY19leGVjKHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG4rdm9pZCAqYnBmX2ppdF9hbGxvY19leGVjKHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG4ge1xcbiBcXHRyZXR1cm4gZXhlY21lbV9hbGxvYyhFWEVDTUVNX0JQRiwgc2l6ZSk7XFxuIH1cXG4gXFxuLXZvaWQgX193ZWFrIGJwZl9qaXRfZnJlZV9leGVjKHZvaWQgKmFkZHIpXFxuK3ZvaWQgKmJwZl9qaXRfYWxsb2NfZXhlY19ydyh1bnNpZ25lZCBsb25nIHNpemUpXFxuK3tcXG4rXFx0cmV0dXJuIGV4ZWNtZW1fYWxsb2NfcncoRVhFQ01FTV9CUEYsIHNpemUpO1xcbit9XFxuK1xcbit2b2lkIGJwZl9qaXRfZnJlZV9leGVjKHZvaWQgKmFkZHIpXFxuIHtcXG4gXFx0ZXhlY21lbV9mcmVlKGFkZHIpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZGlzcGF0Y2hlci5jIGIva2VybmVsL2JwZi9kaXNwYXRjaGVyLmNcXG5pbmRleCBlYTJkNjBkYzFmZWViNy4uNzlmMGMyMjJjNTgzNDAgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9kaXNwYXRjaGVyLmNcXG4rKysgYi9rZXJuZWwvYnBmL2Rpc3BhdGNoZXIuY1xcbkBAIC0xNDgsNyArMTQ4LDEwIEBAIHZvaWQgYnBmX2Rpc3BhdGNoZXJfY2hhbmdlX3Byb2coc3RydWN0IGJwZl9kaXNwYXRjaGVyICpkLCBzdHJ1Y3QgYnBmX3Byb2cgKmZyb20sXFxuIFxcdFxcdGQtXFx1MDAzZWltYWdlID0gYnBmX3Byb2dfcGFja19hbGxvYyhQQUdFX1NJWkUsIGJwZl9qaXRfZmlsbF9ob2xlX3dpdGhfemVybywgZmFsc2UpO1xcbiBcXHRcXHRpZiAoIWQtXFx1MDAzZWltYWdlKVxcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4tXFx0XFx0ZC1cXHUwMDNlcndfaW1hZ2UgPSBicGZfaml0X2FsbG9jX2V4ZWMoUEFHRV9TSVpFKTtcXG4rXFx0XFx0LyogZC1cXHUwMDNlcndfaW1hZ2UgZG9lc24ndCBuZWVkIHRvIGJlIGluIG1vZHVsZSBtZW1vcnkgcmFuZ2UsIHNvIHdlXFxuK1xcdFxcdCAqIGNhbiB1c2UgdnphbGxvYy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGQtXFx1MDAzZXJ3X2ltYWdlID0gdnphbGxvYyhQQUdFX1NJWkUpO1xcbiBcXHRcXHRpZiAoIWQtXFx1MDAzZXJ3X2ltYWdlKSB7XFxuIFxcdFxcdFxcdGJwZl9wcm9nX3BhY2tfZnJlZShkLVxcdTAwM2VpbWFnZSwgUEFHRV9TSVpFKTtcXG4gXFx0XFx0XFx0ZC1cXHUwMDNlaW1hZ2UgPSBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxMzoxMDoyOS44OTgzMTM5MzdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3OTcwNDgzMTM2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiRVhFQ01FTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jX25ld19wYWNrXCIsXG4gICAgXCJicGZfcHJvZ19wYWNrX2FsbG9jXCIsXG4gICAgXCJhcmNoX2JwZl90cmFtcG9saW5lX3NpemVcIixcbiAgICBcImJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIEpJVCBtZW1vcnkgYWxsb2NhdGlvbiBsb2dpYywgaW50cm9kdWNpbmcgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AgYW5kIHVwZGF0aW5nIGBicGZfaml0X2FsbG9jX2V4ZWNgIHRvIHVzZSBgZXhlY21lbV9hbGxvY2AuIEl0IGFsc28gY2hhbmdlcyB4ODYgQlBGIEpJVCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gYW5kIHVwZGF0ZXMgQlBGIHRyYW1wb2xpbmUgYW5kIGRpc3BhdGNoZXIgbG9naWMgdG8gdXNlIHRoZSBuZXcgYWxsb2NhdGlvbiBtZXRob2RzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIEJQRiBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5ZGE3MTQwZDEyZjFmNjdiNDgxYjA1ZDA0MGMzZDk0ZWQ1N2FiZDdkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMTYgMTM6MTA6MjcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pbml0LmMgYi9hcmNoL3g4Ni9tbS9pbml0LmNcbmluZGV4IGZiNjcyMTdmZGRjZDM3Li4wNzlmOGM3ZTllM2NkZSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L21tL2luaXQuY1xuKysrIGIvYXJjaC94ODYvbW0vaW5pdC5jXG5AQCAtMTEwNywxMCArMTEwNywxMCBAQCBzdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpXG4gXHRcdFx0XHQuYWxpZ25tZW50ID0gTU9EVUxFX0FMSUdOLFxuIFx0XHRcdH0sXG4gXHRcdFx0W0VYRUNNRU1fQlBGXSA9IHtcbi1cdFx0XHRcdC5mbGFnc1x0PSBFWEVDTUVNX0tBU0FOX1NIQURPVyxcbitcdFx0XHRcdC5mbGFnc1x0PSBmbGFncyxcbiBcdFx0XHRcdC5zdGFydFx0PSBzdGFydCxcbiBcdFx0XHRcdC5lbmRcdD0gTU9EVUxFU19FTkQsXG4tXHRcdFx0XHQucGdwcm90XHQ9IFBBR0VfS0VSTkVMLFxuK1x0XHRcdFx0LnBncHJvdFx0PSBwZ3Byb3QsXG4gXHRcdFx0XHQuYWxpZ25tZW50ID0gTU9EVUxFX0FMSUdOLFxuIFx0XHRcdH0sXG4gXHRcdFx0W0VYRUNNRU1fTU9EVUxFX0RBVEFdID0ge1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuaW5kZXggZGU3NTE1ZWExYmVhZTguLmIyZmVlYzgxZTIzMTJlIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG4rKysgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbkBAIC0zNzAzLDEzICszNzAzLDEyIEBAIGludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXG4gXHRpbnQgcmV0O1xuIFxuIFx0LyogQWxsb2NhdGUgYSB0ZW1wb3JhcnkgYnVmZmVyIGZvciBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZSgpLlxuLVx0ICogVGhpcyB3aWxsIE5PVCBjYXVzZSBmcmFnbWVudGF0aW9uIGluIGRpcmVjdCBtYXAsIGFzIHdlIGRvIG5vdFxuLVx0ICogY2FsbCBzZXRfbWVtb3J5XyooKSBvbiB0aGlzIGJ1ZmZlci5cbiBcdCAqXG4gXHQgKiBXZSBjYW5ub3QgdXNlIGt2bWFsbG9jIGhlcmUsIGJlY2F1c2Ugd2UgbmVlZCBpbWFnZSB0byBiZSBpblxuIFx0ICogbW9kdWxlIG1lbW9yeSByYW5nZS5cbitcdCAqIFNpbmNlIGl0IG11c3QgYmUgd3JpdGFibGUgdXNlIGJwZl9qaXRfYWxsb2NfZXhlY19ydygpLlxuIFx0ICovXG4tXHRpbWFnZSA9IGJwZl9qaXRfYWxsb2NfZXhlYyhQQUdFX1NJWkUpO1xuK1x0aW1hZ2UgPSBicGZfaml0X2FsbG9jX2V4ZWNfcncoUEFHRV9TSVpFKTtcbiBcdGlmICghaW1hZ2UpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmggYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG5pbmRleCAxNGFjYjI0NTU3NDZmYy4uMzJkNTI5N2M1NTdlNWIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG5AQCAtMTMzMyw2ICsxMzMzLDcgQEAgYnBmX2ppdF9iaW5hcnlfYWxsb2ModW5zaWduZWQgaW50IHByb2dsZW4sIHU4ICoqaW1hZ2VfcHRyLFxuIHZvaWQgYnBmX2ppdF9iaW5hcnlfZnJlZShzdHJ1Y3QgYnBmX2JpbmFyeV9oZWFkZXIgKmhkcik7XG4gdTY0IGJwZl9qaXRfYWxsb2NfZXhlY19saW1pdCh2b2lkKTtcbiB2b2lkICpicGZfaml0X2FsbG9jX2V4ZWModW5zaWduZWQgbG9uZyBzaXplKTtcbit2b2lkICpicGZfaml0X2FsbG9jX2V4ZWNfcncodW5zaWduZWQgbG9uZyBzaXplKTtcbiB2b2lkIGJwZl9qaXRfZnJlZV9leGVjKHZvaWQgKmFkZHIpO1xuIHZvaWQgYnBmX2ppdF9mcmVlKHN0cnVjdCBicGZfcHJvZyAqZnApO1xuIHN0cnVjdCBicGZfYmluYXJ5X2hlYWRlciAqXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jb3JlLmMgYi9rZXJuZWwvYnBmL2NvcmUuY1xuaW5kZXggNDdmZTA0N2FkMzBiODguLmUyMDc2NjY3YjI0NTE3IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9jb3JlLmNcbisrKyBiL2tlcm5lbC9icGYvY29yZS5jXG5AQCAtOTE2LDYgKzkxNiwxMSBAQCBzdGF0aWMgTElTVF9IRUFEKHBhY2tfbGlzdCk7XG4gXG4gI2RlZmluZSBCUEZfUFJPR19DSFVOS19DT1VOVCAoQlBGX1BST0dfUEFDS19TSVpFIC8gQlBGX1BST0dfQ0hVTktfU0laRSlcbiBcbitzdGF0aWMgYm9vbCBicGZfaml0X21lbV9pc19yb3godm9pZClcbit7XG4rXHRyZXR1cm4gZXhlY21lbV9pc19yb3goRVhFQ01FTV9CUEYpO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IGJwZl9wcm9nX3BhY2sgKmFsbG9jX25ld19wYWNrKGJwZl9qaXRfZmlsbF9ob2xlX3QgYnBmX2ZpbGxfaWxsX2luc25zKVxuIHtcbiBcdHN0cnVjdCBicGZfcHJvZ19wYWNrICpwYWNrO1xuQEAgLTkyNywxNiArOTMyLDE4IEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2dfcGFjayAqYWxsb2NfbmV3X3BhY2soYnBmX2ppdF9maWxsX2hvbGVfdCBicGZfZmlsbF9pbGxfaW5zXG4gXHRwYWNrLVx1MDAzZXB0ciA9IGJwZl9qaXRfYWxsb2NfZXhlYyhCUEZfUFJPR19QQUNLX1NJWkUpO1xuIFx0aWYgKCFwYWNrLVx1MDAzZXB0cilcbiBcdFx0Z290byBvdXQ7XG4tXHRicGZfZmlsbF9pbGxfaW5zbnMocGFjay1cdTAwM2VwdHIsIEJQRl9QUk9HX1BBQ0tfU0laRSk7XG4gXHRiaXRtYXBfemVybyhwYWNrLVx1MDAzZWJpdG1hcCwgQlBGX1BST0dfUEFDS19TSVpFIC8gQlBGX1BST0dfQ0hVTktfU0laRSk7XG4gXG4gXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZicGZfcHJlZF9mbHVzaF9lbmFibGVkKSlcbiBcdFx0cGFjay1cdTAwM2VhcmNoX2ZsdXNoX25lZWRlZCA9IHRydWU7XG4tXHRzZXRfdm1fZmx1c2hfcmVzZXRfcGVybXMocGFjay1cdTAwM2VwdHIpO1xuLVx0ZXJyID0gc2V0X21lbW9yeV9yb3goKHVuc2lnbmVkIGxvbmcpcGFjay1cdTAwM2VwdHIsXG4tXHRcdFx0ICAgICBCUEZfUFJPR19QQUNLX1NJWkUgLyBQQUdFX1NJWkUpO1xuLVx0aWYgKGVycilcbi1cdFx0Z290byBvdXQ7XG4rXHRpZiAoIWJwZl9qaXRfbWVtX2lzX3JveCgpKSB7XG4rXHRcdGJwZl9maWxsX2lsbF9pbnNucyhwYWNrLVx1MDAzZXB0ciwgQlBGX1BST0dfUEFDS19TSVpFKTtcbitcdFx0c2V0X3ZtX2ZsdXNoX3Jlc2V0X3Blcm1zKHBhY2stXHUwMDNlcHRyKTtcbitcdFx0ZXJyID0gc2V0X21lbW9yeV9yb3goKHVuc2lnbmVkIGxvbmcpcGFjay1cdTAwM2VwdHIsXG4rXHRcdFx0XHQgICAgIEJQRl9QUk9HX1BBQ0tfU0laRSAvIFBBR0VfU0laRSk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0Z290byBvdXQ7XG4rXHR9XG4gXHRsaXN0X2FkZF90YWlsKFx1MDAyNnBhY2stXHUwMDNlbGlzdCwgXHUwMDI2cGFja19saXN0KTtcbiBcdHJldHVybiBwYWNrO1xuIFxuQEAgLTk2NSw3ICs5NzIsNyBAQCB2b2lkICpicGZfcHJvZ19wYWNrX2FsbG9jKHUzMiBzaXplLCBicGZfaml0X2ZpbGxfaG9sZV90IGJwZl9maWxsX2lsbF9pbnNucywgYm9vbFxuIFx0XHRcdHByX3dhcm5fb25jZShcIkJQRjogUHJlZGljdG9ycyBub3QgZmx1c2hlZCBmb3IgYWxsb2NhdGlvbnMgZ3JlYXRlciB0aGFuIEJQRl9QUk9HX1BBQ0tfU0laRVxcblwiKTtcbiBcdFx0c2l6ZSA9IHJvdW5kX3VwKHNpemUsIFBBR0VfU0laRSk7XG4gXHRcdHB0ciA9IGJwZl9qaXRfYWxsb2NfZXhlYyhzaXplKTtcbi1cdFx0aWYgKHB0cikge1xuK1x0XHRpZiAocHRyIFx1MDAyNlx1MDAyNiAhYnBmX2ppdF9tZW1faXNfcm94KCkpIHtcbiBcdFx0XHRpbnQgZXJyO1xuIFxuIFx0XHRcdGJwZl9maWxsX2lsbF9pbnNucyhwdHIsIHNpemUpO1xuQEAgLTExMTYsMTIgKzExMjMsMTcgQEAgdm9pZCBicGZfaml0X3VuY2hhcmdlX21vZG1lbSh1MzIgc2l6ZSlcbiBcdGF0b21pY19sb25nX3N1YihzaXplLCBcdTAwMjZicGZfaml0X2N1cnJlbnQpO1xuIH1cbiBcbi12b2lkICpfX3dlYWsgYnBmX2ppdF9hbGxvY19leGVjKHVuc2lnbmVkIGxvbmcgc2l6ZSlcbit2b2lkICpicGZfaml0X2FsbG9jX2V4ZWModW5zaWduZWQgbG9uZyBzaXplKVxuIHtcbiBcdHJldHVybiBleGVjbWVtX2FsbG9jKEVYRUNNRU1fQlBGLCBzaXplKTtcbiB9XG4gXG4tdm9pZCBfX3dlYWsgYnBmX2ppdF9mcmVlX2V4ZWModm9pZCAqYWRkcilcbit2b2lkICpicGZfaml0X2FsbG9jX2V4ZWNfcncodW5zaWduZWQgbG9uZyBzaXplKVxuK3tcbitcdHJldHVybiBleGVjbWVtX2FsbG9jX3J3KEVYRUNNRU1fQlBGLCBzaXplKTtcbit9XG4rXG4rdm9pZCBicGZfaml0X2ZyZWVfZXhlYyh2b2lkICphZGRyKVxuIHtcbiBcdGV4ZWNtZW1fZnJlZShhZGRyKTtcbiB9XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9kaXNwYXRjaGVyLmMgYi9rZXJuZWwvYnBmL2Rpc3BhdGNoZXIuY1xuaW5kZXggZWEyZDYwZGMxZmVlYjcuLjc5ZjBjMjIyYzU4MzQwIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9kaXNwYXRjaGVyLmNcbisrKyBiL2tlcm5lbC9icGYvZGlzcGF0Y2hlci5jXG5AQCAtMTQ4LDcgKzE0OCwxMCBAQCB2b2lkIGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nKHN0cnVjdCBicGZfZGlzcGF0Y2hlciAqZCwgc3RydWN0IGJwZl9wcm9nICpmcm9tLFxuIFx0XHRkLVx1MDAzZWltYWdlID0gYnBmX3Byb2dfcGFja19hbGxvYyhQQUdFX1NJWkUsIGJwZl9qaXRfZmlsbF9ob2xlX3dpdGhfemVybywgZmFsc2UpO1xuIFx0XHRpZiAoIWQtXHUwMDNlaW1hZ2UpXG4gXHRcdFx0Z290byBvdXQ7XG4tXHRcdGQtXHUwMDNlcndfaW1hZ2UgPSBicGZfaml0X2FsbG9jX2V4ZWMoUEFHRV9TSVpFKTtcbitcdFx0LyogZC1cdTAwM2Vyd19pbWFnZSBkb2Vzbid0IG5lZWQgdG8gYmUgaW4gbW9kdWxlIG1lbW9yeSByYW5nZSwgc28gd2VcbitcdFx0ICogY2FuIHVzZSB2emFsbG9jLlxuK1x0XHQgKi9cbitcdFx0ZC1cdTAwM2Vyd19pbWFnZSA9IHZ6YWxsb2MoUEFHRV9TSVpFKTtcbiBcdFx0aWYgKCFkLVx1MDAzZXJ3X2ltYWdlKSB7XG4gXHRcdFx0YnBmX3Byb2dfcGFja19mcmVlKGQtXHUwMDNlaW1hZ2UsIFBBR0VfU0laRSk7XG4gXHRcdFx0ZC1cdTAwM2VpbWFnZSA9IE5VTEw7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxMzoxMDoyOS44OTgzMTU1MTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDA1NzgzNDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJQRiBKSVQgTWVtb3J5IEFsbG9jYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIFwiQWgsIGl0J3MgbWVzc2luZyB3aXRoIEJQRiBKSVQgbWVtb3J5IGFsbG9jYXRpb24uXCIgU3BlY2lmaWNhbGx5LCBJIHNlZSBpdCdzIHRvdWNoaW5nIGBicGZfaml0X2FsbG9jX2V4ZWNgLCBpbnRyb2R1Y2luZyBgYnBmX2ppdF9hbGxvY19leGVjX3J3YCwgYW5kIHRoZW4gdGhlcmUgYXJlIGNoYW5nZXMgdG8gYGFyY2gveDg2L21tL2luaXQuY2AuIEludGVyZXN0aW5nLiBUaGUgYGluaXQuY2AgY2hhbmdlcyBsb29rIGxpa2UgdGhleSdyZSBtYWtpbmcgdGhpbmdzIG1vcmUgZmxleGlibGUgYnkgdXNpbmcgYGZsYWdzYCBhbmQgYHBncHJvdGAgaW5zdGVhZCBvZiB0aG9zZSBoYXJkY29kZWQgY29uc3RhbnRzIChgRVhFQ01FTV9LQVNBTl9TSEFET1dgLCBgUEFHRV9LRVJORUxgKSBmb3IgYEVYRUNNRU1fQlBGYC4gQSBnb29kIGRlc2lnbiBkZWNpc2lvbi5cblxuVGhlbiB0aGVyZSdzIHRoZSBgYnBmX2Rpc3BhdGNoZXJfY2hhbmdlX3Byb2dgIGNoYW5nZS4gSXTigJlzIHVzaW5nIGB2emFsbG9jYCBmb3IgYGQtXHUwMDNlcndfaW1hZ2VgIG5vdywgaW5zdGVhZCBvZiB0aGUgcG90ZW50aWFsbHkgbW9yZSBzcGVjaWZpYyBhbGxvY2F0aW9uIG9mIGBicGZfaml0X2FsbG9jX2V4ZWNgLiBBbmQgdGhlcmUncyBhbHNvIGEgbmV3IGZ1bmN0aW9uLCBgYnBmX2ppdF9tZW1faXNfcm94KClgLCBhcHBlYXJpbmcgaW4gYGtlcm5lbC9icGYvY29yZS5jYC4gSG1tLCBhIG5ldyBwcmltaXRpdmU/XG5cbkFscmlnaHQsIHRoaXMgaXMgZnVuZGFtZW50YWwuIFRoaXMgcGF0Y2ggY2xlYXJseSBtb2RpZmllcyB0aGUgY29yZSBCUEYgSklUIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCB4ODYgQlBGIEpJVCBzcGVjaWZpY2FsbHkuIEdpdmVuIEJQRidzIHdpZGVzcHJlYWQgdXNhZ2UsIHRoaXMgZGVmaW5pdGVseSBpcyByZWFjaGFibGUuIEl0IHNlZXMgYSBsb3Qgb2YgdXNlLiBJcyBpdCBmdXp6YWJsZT8gQWJzb2x1dGVseS4gSXTigJlzIGZ1bmN0aW9uYWwsIHNvIGl0IHNob3VsZCBiZS5cblxuT2theSwgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBhcmNoL3g4Ni9tbS9pbml0LmNgIGFuZCBzZWUgZXhhY3RseSB3aGF0IHRob3NlIGBmbGFnc2AgYW5kIGBwZ3Byb3RgIGFyZS4gSSdsbCBnZXQgdGhlIGRldGFpbHMgb24gdGhlIHVzZSBvZiBgcmVhZC1maWxlYCBhcm91bmQgbGluZSAxMTA3Li4uIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzMzLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjczLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTM6MTA6MzUuOTA0MTAwNzk0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvbW0vaW5pdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwOTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwOTA6XFx0XFx0XFx0XFx0XFx0LnN0YXJ0XFx0PSBzdGFydCxcXG4xMDkxOlxcdFxcdFxcdFxcdFxcdC5lbmRcXHQ9IE1PRFVMRVNfRU5ELFxcbjEwOTI6XFx0XFx0XFx0XFx0XFx0LnBncHJvdFxcdD0gcGdwcm90LFxcbjEwOTM6XFx0XFx0XFx0XFx0XFx0LmFsaWdubWVudCA9IE1PRFVMRV9BTElHTixcXG4xMDk0OlxcdFxcdFxcdFxcdH0sXFxuMTA5NTpcXHRcXHRcXHRcXHRbRVhFQ01FTV9LUFJPQkVTXSA9IHtcXG4xMDk2OlxcdFxcdFxcdFxcdFxcdC5mbGFnc1xcdD0gZmxhZ3MsXFxuMTA5NzpcXHRcXHRcXHRcXHRcXHQuc3RhcnRcXHQ9IHN0YXJ0LFxcbjEwOTg6XFx0XFx0XFx0XFx0XFx0LmVuZFxcdD0gTU9EVUxFU19FTkQsXFxuMTA5OTpcXHRcXHRcXHRcXHRcXHQucGdwcm90XFx0PSBQQUdFX0tFUk5FTF9ST1gsXFxuMTEwMDpcXHRcXHRcXHRcXHRcXHQuYWxpZ25tZW50ID0gTU9EVUxFX0FMSUdOLFxcbjExMDE6XFx0XFx0XFx0XFx0fSxcXG4xMTAyOlxcdFxcdFxcdFxcdFtFWEVDTUVNX0ZUUkFDRV0gPSB7XFxuMTEwMzpcXHRcXHRcXHRcXHRcXHQuZmxhZ3NcXHQ9IGZsYWdzLFxcbjExMDQ6XFx0XFx0XFx0XFx0XFx0LnN0YXJ0XFx0PSBzdGFydCxcXG4xMTA1OlxcdFxcdFxcdFxcdFxcdC5lbmRcXHQ9IE1PRFVMRVNfRU5ELFxcbjExMDY6XFx0XFx0XFx0XFx0XFx0LnBncHJvdFxcdD0gcGdwcm90LFxcbjExMDc6XFx0XFx0XFx0XFx0XFx0LmFsaWdubWVudCA9IE1PRFVMRV9BTElHTixcXG4xMTA4OlxcdFxcdFxcdFxcdH0sXFxuMTEwOTpcXHRcXHRcXHRcXHRbRVhFQ01FTV9CUEZdID0ge1xcbjExMTA6XFx0XFx0XFx0XFx0XFx0LmZsYWdzXFx0PSBmbGFncyxcXG4xMTExOlxcdFxcdFxcdFxcdFxcdC5zdGFydFxcdD0gc3RhcnQsXFxuMTExMjpcXHRcXHRcXHRcXHRcXHQuZW5kXFx0PSBNT0RVTEVTX0VORCxcXG4xMTEzOlxcdFxcdFxcdFxcdFxcdC5wZ3Byb3RcXHQ9IHBncHJvdCxcXG4xMTE0OlxcdFxcdFxcdFxcdFxcdC5hbGlnbm1lbnQgPSBNT0RVTEVfQUxJR04sXFxuMTExNTpcXHRcXHRcXHRcXHR9LFxcbjExMTY6XFx0XFx0XFx0XFx0W0VYRUNNRU1fTU9EVUxFX0RBVEFdID0ge1xcbjExMTc6XFx0XFx0XFx0XFx0XFx0LmZsYWdzXFx0PSBFWEVDTUVNX0tBU0FOX1NIQURPVyxcXG4xMTE4OlxcdFxcdFxcdFxcdFxcdC5zdGFydFxcdD0gc3RhcnQsXFxuMTExOTpcXHRcXHRcXHRcXHRcXHQuZW5kXFx0PSBNT0RVTEVTX0VORCxcXG4xMTIwOlxcdFxcdFxcdFxcdFxcdC5wZ3Byb3RcXHQ9IFBBR0VfS0VSTkVMLFxcbjExMjE6XFx0XFx0XFx0XFx0XFx0LmFsaWdubWVudCA9IE1PRFVMRV9BTElHTixcXG4xMTIyOlxcdFxcdFxcdFxcdH0sXFxuMTEyMzpcXHRcXHRcXHR9LFxcbjExMjQ6XFx0XFx0fTtcXG4xMTI1OlxcdFxcbjExMjY6XFx0XFx0cmV0dXJuIFxcdTAwMjZleGVjbWVtX2luZm87XFxuMTEyNzpcXHR9XFxuMTEyODpcXHQjZW5kaWYgLyogQ09ORklHX0VYRUNNRU0gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTM6MTA6MzUuOTA0MTkzNTA0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODcyNzExMTA0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlY2VudCBDb2RlIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIHRoZXNlIG1lbW9yeSBhbGxvY2F0aW9uIHVwZGF0ZXMuIFRoZSBjb3JlIGFyY2hpdGVjdHVyYWwgc2V0dXAgYWRqdXN0bWVudHMgc2VlbSB0byBiZSBuZXN0bGVkIHdpdGhpbiBgYXJjaC94ODYvbW0vaW5pdC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgZXhlY21lbV9hcmNoX3NldHVwYCBmdW5jdGlvbi4gVGhhdCdzIHRoZSBmaXJzdCBrZXkgYXJlYSB0byB1bmRlcnN0YW5kLiBUaGVuLCBpdCBsb29rcyBsaWtlIHRoZSBhY3R1YWwgQlBGIEpJVCBtZW1vcnkgYWxsb2NhdGlvbiBoYXBwZW5zIGluIGBrZXJuZWwvYnBmL2NvcmUuY2Ag4oCTIHNwZWNpZmljYWxseSB0aGUgYGJwZl9qaXRfYWxsb2NfZXhlY2AgYW5kIGBicGZfaml0X2FsbG9jX2V4ZWNfcndgIHJvdXRpbmVzLiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZTsgdGhlc2UgZnVuY3Rpb25zIGFyZSByZXNwb25zaWJsZSBmb3IgdGhlIGp1c3QtaW4tdGltZSBjb21waWxhdGlvbiBhbmQgcmVsYXRlZCBtZW1vcnkuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGtlcm5lbC9icGYvY29yZS5jYCwgcHJvYmFibHkgc3RhcnRpbmcgYXJvdW5kIGxpbmUgOTE2LiBUaGF0J3MgbGlrZWx5IHdoZXJlIHRoZSBhbGxvY2F0aW9uIHN0cmF0ZWd5IGl0c2VsZiBpcyBpbXBsZW1lbnRlZCwgc28gbGV0J3Mgc2VlIHdoYXQncyBnb2luZyBvbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk2OCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTM6MTA6NDQuNjMxMzA3MjJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTc0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTEwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTEwOlxcdCAqIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAyTUIuXFxuIDkxMTpcXHQgKi9cXG4gOTEyOlxcdCNkZWZpbmUgQlBGX1BST0dfUEFDS19TSVpFIChTWl8yTSAqIG51bV9wb3NzaWJsZV9ub2RlcygpKVxcbiA5MTM6XFx0I2Vsc2VcXG4gOTE0OlxcdCNkZWZpbmUgQlBGX1BST0dfUEFDS19TSVpFIFBBR0VfU0laRVxcbiA5MTU6XFx0I2VuZGlmXFxuIDkxNjpcXHRcXG4gOTE3OlxcdCNkZWZpbmUgQlBGX1BST0dfQ0hVTktfQ09VTlQgKEJQRl9QUk9HX1BBQ0tfU0laRSAvIEJQRl9QUk9HX0NIVU5LX1NJWkUpXFxuIDkxODpcXHRcXG4gOTE5OlxcdHN0YXRpYyBib29sIGJwZl9qaXRfbWVtX2lzX3JveCh2b2lkKVxcbiA5MjA6XFx0e1xcbiA5MjE6XFx0XFx0cmV0dXJuIGV4ZWNtZW1faXNfcm94KEVYRUNNRU1fQlBGKTtcXG4gOTIyOlxcdH1cXG4gOTIzOlxcdFxcbiA5MjQ6XFx0c3RhdGljIHN0cnVjdCBicGZfcHJvZ19wYWNrICphbGxvY19uZXdfcGFjayhicGZfaml0X2ZpbGxfaG9sZV90IGJwZl9maWxsX2lsbF9pbnNucylcXG4gOTI1OlxcdHtcXG4gOTI2OlxcdFxcdHN0cnVjdCBicGZfcHJvZ19wYWNrICpwYWNrO1xcbiA5Mjc6XFx0XFx0aW50IGVycjtcXG4gOTI4OlxcdFxcbiA5Mjk6XFx0XFx0cGFjayA9IGt6YWxsb2NfZmxleCgqcGFjaywgYml0bWFwLCBCSVRTX1RPX0xPTkdTKEJQRl9QUk9HX0NIVU5LX0NPVU5UKSk7XFxuIDkzMDpcXHRcXHRpZiAoIXBhY2spXFxuIDkzMTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gOTMyOlxcdFxcdHBhY2stXFx1MDAzZXB0ciA9IGJwZl9qaXRfYWxsb2NfZXhlYyhCUEZfUFJPR19QQUNLX1NJWkUpO1xcbiA5MzM6XFx0XFx0aWYgKCFwYWNrLVxcdTAwM2VwdHIpXFxuIDkzNDpcXHRcXHRcXHRnb3RvIG91dDtcXG4gOTM1OlxcdFxcdGJpdG1hcF96ZXJvKHBhY2stXFx1MDAzZWJpdG1hcCwgQlBGX1BST0dfUEFDS19TSVpFIC8gQlBGX1BST0dfQ0hVTktfU0laRSk7XFxuIDkzNjpcXHRcXG4gOTM3OlxcdFxcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZicGZfcHJlZF9mbHVzaF9lbmFibGVkKSlcXG4gOTM4OlxcdFxcdFxcdHBhY2stXFx1MDAzZWFyY2hfZmx1c2hfbmVlZGVkID0gdHJ1ZTtcXG4gOTM5OlxcdFxcdGlmICghYnBmX2ppdF9tZW1faXNfcm94KCkpIHtcXG4gOTQwOlxcdFxcdFxcdGJwZl9maWxsX2lsbF9pbnNucyhwYWNrLVxcdTAwM2VwdHIsIEJQRl9QUk9HX1BBQ0tfU0laRSk7XFxuIDk0MTpcXHRcXHRcXHRzZXRfdm1fZmx1c2hfcmVzZXRfcGVybXMocGFjay1cXHUwMDNlcHRyKTtcXG4gOTQyOlxcdFxcdFxcdGVyciA9IHNldF9tZW1vcnlfcm94KCh1bnNpZ25lZCBsb25nKXBhY2stXFx1MDAzZXB0cixcXG4gOTQzOlxcdFxcdFxcdFxcdFxcdCAgICAgQlBGX1BST0dfUEFDS19TSVpFIC8gUEFHRV9TSVpFKTtcXG4gOTQ0OlxcdFxcdFxcdGlmIChlcnIpXFxuIDk0NTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gOTQ2OlxcdFxcdH1cXG4gOTQ3OlxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNnBhY2stXFx1MDAzZWxpc3QsIFxcdTAwMjZwYWNrX2xpc3QpO1xcbiA5NDg6XFx0XFx0cmV0dXJuIHBhY2s7XFxuIDk0OTpcXHRcXG4gOTUwOlxcdG91dDpcXG4gOTUxOlxcdFxcdGJwZl9qaXRfZnJlZV9leGVjKHBhY2stXFx1MDAzZXB0cik7XFxuIDk1MjpcXHRcXHRrZnJlZShwYWNrKTtcXG4gOTUzOlxcdFxcdHJldHVybiBOVUxMO1xcbiA5NTQ6XFx0fVxcbiA5NTU6XFx0XFxuIDk1NjpcXHR2b2lkICpicGZfcHJvZ19wYWNrX2FsbG9jKHUzMiBzaXplLCBicGZfaml0X2ZpbGxfaG9sZV90IGJwZl9maWxsX2lsbF9pbnNucywgYm9vbCB3YXNfY2xhc3NpYylcXG4gOTU3OlxcdHtcXG4gOTU4OlxcdFxcdHVuc2lnbmVkIGludCBuYml0cyA9IEJQRl9QUk9HX1NJWkVfVE9fTkJJVFMoc2l6ZSk7XFxuIDk1OTpcXHRcXHRzdHJ1Y3QgYnBmX3Byb2dfcGFjayAqcGFjaywgKmZhbGxiYWNrX3BhY2sgPSBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxMzoxMDo0NC42MzE3MDkwNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MDM4NTk3MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBKSVQgQ29tcGlsYXRpb24gZm9yIE9wdGltaXphdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIGEgc3BlY2lmaWMgYXJlYSB3aXRoaW4gdGhlIEJQRiBKSVQgY29tcGlsYXRpb24gcHJvY2Vzcy4gVGhlIGNvcmUgZnVuY3Rpb25zIEkgc2hvdWxkIHByaW9yaXRpemUgZm9yIHRoaXMgYW5hbHlzaXMgYXJlOiBgYWxsb2NfbmV3X3BhY2tgLCBgYnBmX3Byb2dfcGFja19hbGxvY2AsIGBhcmNoX2JwZl90cmFtcG9saW5lX3NpemVgLCBhbmQgYGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYCBmZWVscyBsaWtlIGEgY3JpdGljYWwgcG9pbnQuIEhtbSwgaXQgc2VlbXMgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCBgYnBmX2ppdF9hbGxvY19leGVjX3J3YC4gUmlnaHQsIHRoYXQncyB3aGVyZSB0aGUgbWVtb3J5IGFsbG9jYXRpb24gYW5kIHBvdGVudGlhbCBjb2RlIGdlbmVyYXRpb24gd291bGQgaGFwcGVuLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgYWxsIGZpdHMgdG9nZXRoZXIuIEJlc3QgdG8ganVtcCBpbnRvIHRoZSBjb2RlIGFuZCBleGFtaW5lIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgIGFyb3VuZCBsaW5lIDM3MDMuIFRoYXQncyB0aGUgbGlrZWx5IGxvY2F0aW9uIGZvciBzb21lIGtleSBjaGFuZ2VzLiBHb3R0YSB1bmRlcnN0YW5kIGhvdyB0aGUgdHJhbXBvbGluZSBzaXplIGNhbGN1bGF0aW9uIHJlbGF0ZXMgdG8gdGhlIFJXIGFsbG9jYXRpb24gd2l0aGluIHRoZSBKSVQgZW52aXJvbm1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxNDQsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxMzoxMDo0OC41MzU1NzE5MzRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjk2NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNjkwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNjkwOlxcdFxcdHRtcCA9IGJwZl9hcmNoX3RleHRfY29weShpbWFnZSwgcndfaW1hZ2UsIHNpemUpO1xcbjM2OTE6XFx0XFx0aWYgKElTX0VSUih0bXApKVxcbjM2OTI6XFx0XFx0XFx0cmV0ID0gUFRSX0VSUih0bXApO1xcbjM2OTM6XFx0b3V0OlxcbjM2OTQ6XFx0XFx0a3ZmcmVlKHJ3X2ltYWdlKTtcXG4zNjk1OlxcdFxcdHJldHVybiByZXQ7XFxuMzY5NjpcXHR9XFxuMzY5NzpcXHRcXG4zNjk4OlxcdGludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXFxuMzY5OTpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcywgdm9pZCAqZnVuY19hZGRyKVxcbjM3MDA6XFx0e1xcbjM3MDE6XFx0XFx0c3RydWN0IGJwZl90cmFtcF9pbWFnZSBpbTtcXG4zNzAyOlxcdFxcdHZvaWQgKmltYWdlO1xcbjM3MDM6XFx0XFx0aW50IHJldDtcXG4zNzA0OlxcdFxcbjM3MDU6XFx0XFx0LyogQWxsb2NhdGUgYSB0ZW1wb3JhcnkgYnVmZmVyIGZvciBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZSgpLlxcbjM3MDY6XFx0XFx0ICpcXG4zNzA3OlxcdFxcdCAqIFdlIGNhbm5vdCB1c2Uga3ZtYWxsb2MgaGVyZSwgYmVjYXVzZSB3ZSBuZWVkIGltYWdlIHRvIGJlIGluXFxuMzcwODpcXHRcXHQgKiBtb2R1bGUgbWVtb3J5IHJhbmdlLlxcbjM3MDk6XFx0XFx0ICogU2luY2UgaXQgbXVzdCBiZSB3cml0YWJsZSB1c2UgYnBmX2ppdF9hbGxvY19leGVjX3J3KCkuXFxuMzcxMDpcXHRcXHQgKi9cXG4zNzExOlxcdFxcdGltYWdlID0gYnBmX2ppdF9hbGxvY19leGVjX3J3KFBBR0VfU0laRSk7XFxuMzcxMjpcXHRcXHRpZiAoIWltYWdlKVxcbjM3MTM6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMzcxNDpcXHRcXG4zNzE1OlxcdFxcdHJldCA9IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKFxcdTAwMjZpbSwgaW1hZ2UsIGltYWdlICsgUEFHRV9TSVpFLCBpbWFnZSxcXG4zNzE2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBtLCBmbGFncywgdG5vZGVzLCBmdW5jX2FkZHIpO1xcbjM3MTc6XFx0XFx0YnBmX2ppdF9mcmVlX2V4ZWMoaW1hZ2UpO1xcbjM3MTg6XFx0XFx0cmV0dXJuIHJldDtcXG4zNzE5OlxcdH1cXG4zNzIwOlxcdFxcbjM3MjE6XFx0c3RhdGljIGludCBlbWl0X2JwZl9kaXNwYXRjaGVyKHU4ICoqcHByb2csIGludCBhLCBpbnQgYiwgczY0ICpwcm9ncywgdTggKmltYWdlLCB1OCAqYnVmKVxcbjM3MjI6XFx0e1xcbjM3MjM6XFx0XFx0dTggKmpnX3JlbG9jLCAqcHJvZyA9ICpwcHJvZztcXG4zNzI0OlxcdFxcdGludCBwaXZvdCwgZXJyLCBqZ19ieXRlcyA9IDE7XFxuMzcyNTpcXHRcXHRzNjQgamdfb2Zmc2V0O1xcbjM3MjY6XFx0XFxuMzcyNzpcXHRcXHRpZiAoYSA9PSBiKSB7XFxuMzcyODpcXHRcXHRcXHQvKiBMZWFmIG5vZGUgb2YgcmVjdXJzaW9uLCBpLmUuIG5vdCBhIHJhbmdlIG9mIGluZGljZXNcXG4zNzI5OlxcdFxcdFxcdCAqIGFueW1vcmUuXFxuMzczMDpcXHRcXHRcXHQgKi9cXG4zNzMxOlxcdFxcdFxcdEVNSVQxKGFkZF8xbW9kKDB4NDgsIEJQRl9SRUdfMykpO1xcdC8qIGNtcCByZHgsZnVuYyAqL1xcbjM3MzI6XFx0XFx0XFx0aWYgKCFpc19zaW1tMzIocHJvZ3NbYV0pKVxcbjM3MzM6XFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbjM3MzQ6XFx0XFx0XFx0RU1JVDJfb2ZmMzIoMHg4MSwgYWRkXzFyZWcoMHhGOCwgQlBGX1JFR18zKSxcXG4zNzM1OlxcdFxcdFxcdFxcdCAgICBwcm9nc1thXSk7XFxuMzczNjpcXHRcXHRcXHRlcnIgPSBlbWl0X2NvbmRfbmVhcl9qdW1wKFxcdTAwMjZwcm9nLFxcdC8qIGplIGZ1bmMgKi9cXG4zNzM3OlxcdFxcdFxcdFxcdFxcdFxcdCAgKHZvaWQgKilwcm9nc1thXSwgaW1hZ2UgKyAocHJvZyAtIGJ1ZiksXFxuMzczODpcXHRcXHRcXHRcXHRcXHRcXHQgIFg4Nl9KRSk7XFxuMzczOTpcXHRcXHRcXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxMzoxMDo0OC41Mzc4NzI5MjRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzM2OTYwNzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipCUEYgSklUIENvbXBpbGF0aW9uIENvbmZpZ3VyYXRpb24gVmVyaWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIEJQRiBKSVQgY29tcGlsYXRpb24gaXNzdWUuIEZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0J3MgdmVyaWZ5IHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb24gZmxhZ3MgYXJlIGVuYWJsZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19CUEZfSklUYCBpcyBzZXQsIG9idmlvdXNseS4gVGhlbiwgYmVjYXVzZSB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUgaXMgaGFuZ2luZyBvdXQgaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AsIEknbGwgYWxzbyBjb25maXJtIHRoYXQgYENPTkZJR19YODZfNjRgIGlzIGNvbmZpZ3VyZWQsIHNpbmNlIHRoYXQgc2VlbXMgcmVsZXZhbnQgdG8gdGhhdCBwYXRoLiBGaW5hbGx5LCBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQsIGdpdmVuIHRoYXQgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtIHVzZXMgc3lzY2FsbHMuIFxuXG5XaXRoIHRob3NlIHByZXJlcXVpc2l0ZXMgY2hlY2tlZCBvZmYsIEknbGwgZ28gdGFrZSBhIGxvb2sgYXQgYGtlcm5lbC9icGYvZGlzcGF0Y2hlci5jYC4gTXkgaHVuY2ggaXMgdGhhdCB0aGVyZSdzIHNvbWV0aGluZyBwb3RlbnRpYWxseSBhd3J5IGFyb3VuZCBsaW5lIDE0OCwgc28gSSdsbCBzdGFydCB0aGVyZSBhbmQgdHJhY2UgdGhlIGxvZ2ljLiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyBpbiB0aGF0IGFyZWEuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZGlzcGF0Y2hlciBpcyBpbnRlcmFjdGluZyB3aXRoIHRoZSBKSVQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNTYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDEzOjEwOjUzLjI3NDgzODYzOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzMyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9kaXNwYXRjaGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTQwOlxcdFxcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xcbiAxNDE6XFx0XFx0aW50IHByZXZfbnVtX3Byb2dzO1xcbiAxNDI6XFx0XFxuIDE0MzpcXHRcXHRpZiAoZnJvbSA9PSB0bylcXG4gMTQ0OlxcdFxcdFxcdHJldHVybjtcXG4gMTQ1OlxcdFxcbiAxNDY6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZC1cXHUwMDNlbXV0ZXgpO1xcbiAxNDc6XFx0XFx0aWYgKCFkLVxcdTAwM2VpbWFnZSkge1xcbiAxNDg6XFx0XFx0XFx0ZC1cXHUwMDNlaW1hZ2UgPSBicGZfcHJvZ19wYWNrX2FsbG9jKFBBR0VfU0laRSwgYnBmX2ppdF9maWxsX2hvbGVfd2l0aF96ZXJvLCBmYWxzZSk7XFxuIDE0OTpcXHRcXHRcXHRpZiAoIWQtXFx1MDAzZWltYWdlKVxcbiAxNTA6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDE1MTpcXHRcXHRcXHQvKiBkLVxcdTAwM2Vyd19pbWFnZSBkb2Vzbid0IG5lZWQgdG8gYmUgaW4gbW9kdWxlIG1lbW9yeSByYW5nZSwgc28gd2VcXG4gMTUyOlxcdFxcdFxcdCAqIGNhbiB1c2UgdnphbGxvYy5cXG4gMTUzOlxcdFxcdFxcdCAqL1xcbiAxNTQ6XFx0XFx0XFx0ZC1cXHUwMDNlcndfaW1hZ2UgPSB2emFsbG9jKFBBR0VfU0laRSk7XFxuIDE1NTpcXHRcXHRcXHRpZiAoIWQtXFx1MDAzZXJ3X2ltYWdlKSB7XFxuIDE1NjpcXHRcXHRcXHRcXHRicGZfcHJvZ19wYWNrX2ZyZWUoZC1cXHUwMDNlaW1hZ2UsIFBBR0VfU0laRSk7XFxuIDE1NzpcXHRcXHRcXHRcXHRkLVxcdTAwM2VpbWFnZSA9IE5VTEw7XFxuIDE1ODpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gMTU5OlxcdFxcdFxcdH1cXG4gMTYwOlxcdFxcdFxcdGJwZl9pbWFnZV9rc3ltX2luaXQoZC1cXHUwMDNlaW1hZ2UsIFBBR0VfU0laRSwgXFx1MDAyNmQtXFx1MDAzZWtzeW0pO1xcbiAxNjE6XFx0XFx0XFx0YnBmX2ltYWdlX2tzeW1fYWRkKFxcdTAwMjZkLVxcdTAwM2Vrc3ltKTtcXG4gMTYyOlxcdFxcdH1cXG4gMTYzOlxcdFxcbiAxNjQ6XFx0XFx0cHJldl9udW1fcHJvZ3MgPSBkLVxcdTAwM2VudW1fcHJvZ3M7XFxuIDE2NTpcXHRcXHRjaGFuZ2VkIHw9IGJwZl9kaXNwYXRjaGVyX3JlbW92ZV9wcm9nKGQsIGZyb20pO1xcbiAxNjY6XFx0XFx0Y2hhbmdlZCB8PSBicGZfZGlzcGF0Y2hlcl9hZGRfcHJvZyhkLCB0byk7XFxuIDE2NzpcXHRcXG4gMTY4OlxcdFxcdGlmICghY2hhbmdlZClcXG4gMTY5OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAxNzA6XFx0XFxuIDE3MTpcXHRcXHRicGZfZGlzcGF0Y2hlcl91cGRhdGUoZCwgcHJldl9udW1fcHJvZ3MpO1xcbiAxNzI6XFx0b3V0OlxcbiAxNzM6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkLVxcdTAwM2VtdXRleCk7XFxuIDE3NDpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDEzOjEwOjUzLjI3NDk3NTA4OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDg1ODk2MTc4ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBCUEYgSklUIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGUgY29uZmlndXJhdGlvbiBmb3IgYGtlcm5lbC9icGYvZGlzcGF0Y2hlci5jYCBpcyBkcml2ZW4gYnkgYENPTkZJR19CUEZfSklUYC4gTXkgbmV4dCBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB2ZXJpZnkgd2hldGhlciB0aGUgY29tcGlsYXRpb24gb2YgYGRpc3BhdGNoZXIuY2AgaXMgYWN0dWFsbHkgY29uZGl0aW9uYWwgYmFzZWQgb24gdGhpcyBjb25maWcuIFRoZSBtb3N0IG9idmlvdXMgcGxhY2UgdG8gZG8gdGhhdCBpcyBpbiBga2VybmVsL2JwZi9NYWtlZmlsZWAuIEkgbmVlZCB0byBxdWlja2x5IGNyb3NzLXJlZmVyZW5jZSB0aGF0IGBNYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jeSBhbmQgdW5kZXJzdGFuZCB0aGUgYnVpbGQgcHJvY2Vzcy4gR290dGEgbWFrZSBzdXJlIHRoZSBKSVQgY29tcGlsZXIgZGVwZW5kZW5jeSBpcyBoYW5kbGVkIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI0OCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTM6MTI6NDEuODY0NTk2NDUyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0b2JqLXkgOj0gY29yZS5vXFxuICAgMzpcXHRpZm5lcSAoJChDT05GSUdfQlBGX0pJVF9BTFdBWVNfT04pLHkpXFxuICAgNDpcXHQjIF9fX2JwZl9wcm9nX3J1bigpIG5lZWRzIEdDU0UgZGlzYWJsZWQgb24geDg2OyBzZWUgMzE5M2MwODM2ZjIwMyBmb3IgZGV0YWlsc1xcbiAgIDU6XFx0Y2ZsYWdzLW5vZ2NzZS0kKENPTkZJR19YODYpJChDT05GSUdfQ0NfSVNfR0NDKSA6PSAtZm5vLWdjc2VcXG4gICA2OlxcdGVuZGlmXFxuICAgNzpcXHRDRkxBR1NfY29yZS5vICs9IC1Xbm8tb3ZlcnJpZGUtaW5pdCAkKGNmbGFncy1ub2djc2UteXkpXFxuICAgODpcXHRcXG4gICA5OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc3lzY2FsbC5vIHZlcmlmaWVyLm8gaW5vZGUubyBoZWxwZXJzLm8gdG51bS5vIGNudW0ubyBsb2cubyB0b2tlbi5vIGxpdmVuZXNzLm8gY29uc3RfZm9sZC5vXFxuICAxMDpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xcbiAgMTE6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub1xcbiAgMTI6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBsb2NhbF9zdG9yYWdlLm8gcXVldWVfc3RhY2tfbWFwcy5vIHJpbmdidWYubyBicGZfaW5zbl9hcnJheS5vXFxuICAxMzpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9sb2NhbF9zdG9yYWdlLm8gYnBmX3Rhc2tfc3RvcmFnZS5vXFxuICAxNDpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGZpeHVwcy5vIGNmZy5vIHN0YXRlcy5vIGJhY2t0cmFjay5vIGNoZWNrX2J0Zi5vXFxuICAxNTpcXHRvYmotJHtDT05GSUdfQlBGX0xTTX1cXHQgICs9IGJwZl9pbm9kZV9zdG9yYWdlLm9cXG4gIDE2OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gZGlzYXNtLm8gbXByb2cub1xcbiAgMTc6XFx0b2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IHRyYW1wb2xpbmUub1xcbiAgMTg6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xcbiAgMTk6XFx0aWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcXG4gIDIwOlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYXJlbmEubyByYW5nZV90cmVlLm9cXG4gIDIxOlxcdGVuZGlmXFxuICAyMjpcXHRvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gZGlzcGF0Y2hlci5vXFxuICAyMzpcXHRpZmVxICgkKENPTkZJR19ORVQpLHkpXFxuICAyNDpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGRldm1hcC5vXFxuICAyNTpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGNwdW1hcC5vXFxuICAyNjpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IG9mZmxvYWQub1xcbiAgMjc6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBuZXRfbmFtZXNwYWNlLm9cXG4gIDI4OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gdGN4Lm9cXG4gIDI5OlxcdGVuZGlmXFxuICAzMDpcXHRpZmVxICgkKENPTkZJR19QRVJGX0VWRU5UUykseSlcXG4gIDMxOlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc3RhY2ttYXAub1xcbiAgMzI6XFx0ZW5kaWZcXG4gIDMzOlxcdGlmZXEgKCQoQ09ORklHX0NHUk9VUFMpLHkpXFxuICAzNDpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGNncm91cF9pdGVyLm8gYnBmX2NncnBfc3RvcmFnZS5vXFxuICAzNTpcXHRlbmRpZlxcbiAgMzY6XFx0b2JqLSQoQ09ORklHX0NHUk9VUF9CUEYpICs9IGNncm91cC5vXFxuICAzNzpcXHRpZmVxICgkKENPTkZJR19JTkVUKSx5KVxcbiAgMzg6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSByZXVzZXBvcnRfYXJyYXkub1xcbiAgMzk6XFx0ZW5kaWZcXG4gIDQwOlxcdGlmZXEgKCQoQ09ORklHX1NZU0ZTKSx5KVxcbiAgNDE6XFx0b2JqLSQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSArPSBzeXNmc19idGYub1xcbiAgNDI6XFx0ZW5kaWZcXG4gIDQzOlxcdGlmZXEgKCQoQ09ORklHX0JQRl9KSVQpLHkpXFxuICA0NDpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9zdHJ1Y3Rfb3BzLm9cXG4gIDQ1OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gY3B1bWFzay5vXFxuICA0NjpcXHQjIGJwZl9sc21fcHJvdG8ubyBtdXN0IHByZWNlZGUgYnBmX2xzbS5vLiBUaGUgY3VycmVudCBwYWhvbGUgbG9naWNcXG4gIDQ3OlxcdCMgZGVkdXBsaWNhdGVzIGZ1bmN0aW9uIHByb3RvdHlwZXMgd2l0aGluXFxuICA0ODpcXHQjIGJ0Zl9lbmNvZGVyX19hZGRfc2F2ZWRfZnVuYygpIGJ5IGtlZXBpbmcgdGhlIGZpcnN0IGluc3RhbmNlIHNlZW4uIFdlXFxuICA0OTpcXHQjIG5lZWQgdGhlIGZ1bmN0aW9uIHByb3RvdHlwZShzKSBpbiBicGZfbHNtX3Byb3RvLm8gdG8gdGFrZSBwcmVjZWRlbmNlXFxuICA1MDpcXHQjIG92ZXIgdGhvc2Ugd2l0aGluIGJwZl9sc20uby4gSGF2aW5nIGJwZl9sc21fcHJvdG8ubyBwcmVjZWRlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDEzOjEyOjQxLjg2NDcyMjU1MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTk0ODcwNzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyBmb3IgQlBGIEpJVCBhbmQgUmVsYXRlZCBGZWF0dXJlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYnVpbGQgY29uZmlndXJhdGlvbiBhbmQgaXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gbWFrZSBzdXJlIGBDT05GSUdfQlBGX0pJVGAgaXMgZW5hYmxlZCDigJMgdGhhdCdzIGEgZ2l2ZW4uIEkga25ldyB0aGF0LCBvZiBjb3Vyc2UsIGJ1dCBpdCdzIGdvb2QgdG8gY29uZmlybS4gVGhlbiBJIGFsc28gbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZDsgdGhhdCdzIGEgY29tbW9uIHByZXJlcXVpc2l0ZSBmb3IgbWFueSBCUEYgZnVuY3Rpb25hbGl0aWVzLCBzbyB0aGF0IG1ha2VzIHNlbnNlLiBIbW0sIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2VzIGluIGBhcmNoL3g4Ni9tbS9pbml0LmNgIGRlcGVuZCBvbiBgQ09ORklHX0VYRUNNRU1gLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhhdCBgYXJjaC94ODYvbW0vaW5pdC5jYCBmaWxlIGFnYWluIGp1c3QgdG8gYmUgc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3J1Y2lhbC4gR290dGEgZ2V0IHRoaXMgcmlnaHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2NDIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDEzOjEyOjQ2LjA1OTU5NjQ1OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvbW0vaW5pdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMjA6XFx0XFx0XFx0XFx0XFx0LnBncHJvdFxcdD0gUEFHRV9LRVJORUwsXFxuMTEyMTpcXHRcXHRcXHRcXHRcXHQuYWxpZ25tZW50ID0gTU9EVUxFX0FMSUdOLFxcbjExMjI6XFx0XFx0XFx0XFx0fSxcXG4xMTIzOlxcdFxcdFxcdH0sXFxuMTEyNDpcXHRcXHR9O1xcbjExMjU6XFx0XFxuMTEyNjpcXHRcXHRyZXR1cm4gXFx1MDAyNmV4ZWNtZW1faW5mbztcXG4xMTI3OlxcdH1cXG4xMTI4OlxcdCNlbmRpZiAvKiBDT05GSUdfRVhFQ01FTSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxMzoxMjo0Ni4wNTk3NDIxNjlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYxMTY4MzMwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gYW5kIEJQRiBKSVQgQWxsb2NhdGlvbioqXG5cbkFscmlnaHQsIHllcCwgZGVmaW5pdGVseSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX0VYRUNNRU1gIGlzIGVuYWJsZWQuIEl0J3MgYSBmdW5kYW1lbnRhbCByZXF1aXJlbWVudCwgYW5kIEknbSBwcmV0dHkgY2VydGFpbiBpdCdzIGJha2VkIGludG8gbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIEpJVCB3b3Jrcy4gQ2FuJ3QgYnlwYXNzIHRoYXQgbWVtb3J5IGFsbG9jYXRpb24gcG9saWN5LlxuXG5Ob3csIGxldCBtZSBxdWlja2x5IHBpdm90IHRvIGBrZXJuZWwvYnBmL2NvcmUuY2AuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgbXkgdW5kZXJzdGFuZGluZywgc3BlY2lmaWNhbGx5IHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFyb3VuZCBgYnBmX2ppdF9hbGxvY19leGVjYC4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIHJlY2FsbCB0aGUga2V5IGludGVyYWN0aW9ucyB0aGVyZSwgZXNwZWNpYWxseSB3aGF0IGhhcHBlbnMgd2hlbiB0aGUgZmxhZyBpcyBzZXQuIFRoYXQgZnVuY3Rpb24gaXMgdGhlIGNvcmUgb2YgaG93IHdlIGFjdHVhbGx5IGdldCB0aGUgZXhlY3V0YWJsZSBtZW1vcnkuIE5lZWQgdG8ga2VlcCB0aGF0IHBpY3R1cmUgY2xlYXIgaW4gbXkgaGVhZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwNjUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDEzOjEyOjUwLjY3MTQyOTU3NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDQzMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTExNSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTExNTpcXHRcXHRcXHR9XFxuMTExNjpcXHRcXHR9XFxuMTExNzpcXHRcXG4xMTE4OlxcdFxcdHJldHVybiAwO1xcbjExMTk6XFx0fVxcbjExMjA6XFx0XFxuMTEyMTpcXHR2b2lkIGJwZl9qaXRfdW5jaGFyZ2VfbW9kbWVtKHUzMiBzaXplKVxcbjExMjI6XFx0e1xcbjExMjM6XFx0XFx0YXRvbWljX2xvbmdfc3ViKHNpemUsIFxcdTAwMjZicGZfaml0X2N1cnJlbnQpO1xcbjExMjQ6XFx0fVxcbjExMjU6XFx0XFxuMTEyNjpcXHR2b2lkICpicGZfaml0X2FsbG9jX2V4ZWModW5zaWduZWQgbG9uZyBzaXplKVxcbjExMjc6XFx0e1xcbjExMjg6XFx0XFx0cmV0dXJuIGV4ZWNtZW1fYWxsb2MoRVhFQ01FTV9CUEYsIHNpemUpO1xcbjExMjk6XFx0fVxcbjExMzA6XFx0XFxuMTEzMTpcXHR2b2lkICpicGZfaml0X2FsbG9jX2V4ZWNfcncodW5zaWduZWQgbG9uZyBzaXplKVxcbjExMzI6XFx0e1xcbjExMzM6XFx0XFx0cmV0dXJuIGV4ZWNtZW1fYWxsb2NfcncoRVhFQ01FTV9CUEYsIHNpemUpO1xcbjExMzQ6XFx0fVxcbjExMzU6XFx0XFxuMTEzNjpcXHR2b2lkIGJwZl9qaXRfZnJlZV9leGVjKHZvaWQgKmFkZHIpXFxuMTEzNzpcXHR7XFxuMTEzODpcXHRcXHRleGVjbWVtX2ZyZWUoYWRkcik7XFxuMTEzOTpcXHR9XFxuMTE0MDpcXHRcXG4xMTQxOlxcdHN0cnVjdCBicGZfYmluYXJ5X2hlYWRlciAqXFxuMTE0MjpcXHRicGZfaml0X2JpbmFyeV9hbGxvYyh1bnNpZ25lZCBpbnQgcHJvZ2xlbiwgdTggKippbWFnZV9wdHIsXFxuMTE0MzpcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBhbGlnbm1lbnQsXFxuMTE0NDpcXHRcXHRcXHQgICAgIGJwZl9qaXRfZmlsbF9ob2xlX3QgYnBmX2ZpbGxfaWxsX2luc25zKVxcbjExNDU6XFx0e1xcbjExNDY6XFx0XFx0c3RydWN0IGJwZl9iaW5hcnlfaGVhZGVyICpoZHI7XFxuMTE0NzpcXHRcXHR1MzIgc2l6ZSwgaG9sZSwgc3RhcnQ7XFxuMTE0ODpcXHRcXG4xMTQ5OlxcdFxcdFdBUk5fT05fT05DRSghaXNfcG93ZXJfb2ZfMihhbGlnbm1lbnQpIHx8XFxuMTE1MDpcXHRcXHRcXHQgICAgIGFsaWdubWVudCBcXHUwMDNlIEJQRl9JTUFHRV9BTElHTk1FTlQpO1xcbjExNTE6XFx0XFxuMTE1MjpcXHRcXHQvKiBNb3N0IG9mIEJQRiBmaWx0ZXJzIGFyZSByZWFsbHkgc21hbGwsIGJ1dCBpZiBzb21lIG9mIHRoZW1cXG4xMTUzOlxcdFxcdCAqIGZpbGwgYSBwYWdlLCBhbGxvdyBhdCBsZWFzdCAxMjggZXh0cmEgYnl0ZXMgdG8gaW5zZXJ0IGFcXG4xMTU0OlxcdFxcdCAqIHJhbmRvbSBzZWN0aW9uIG9mIGlsbGVnYWwgaW5zdHJ1Y3Rpb25zLlxcbjExNTU6XFx0XFx0ICovXFxuMTE1NjpcXHRcXHRzaXplID0gcm91bmRfdXAocHJvZ2xlbiArIHNpemVvZigqaGRyKSArIDEyOCwgUEFHRV9TSVpFKTtcXG4xMTU3OlxcdFxcbjExNTg6XFx0XFx0aWYgKGJwZl9qaXRfY2hhcmdlX21vZG1lbShzaXplKSlcXG4xMTU5OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjExNjA6XFx0XFx0aGRyID0gYnBmX2ppdF9hbGxvY19leGVjKHNpemUpO1xcbjExNjE6XFx0XFx0aWYgKCFoZHIpIHtcXG4xMTYyOlxcdFxcdFxcdGJwZl9qaXRfdW5jaGFyZ2VfbW9kbWVtKHNpemUpO1xcbjExNjM6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMTE2NDpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDEzOjEyOjUwLjY3MTgzNzU1NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjE3MTk3NTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZ1bmN0aW9uYWwgQ2hhbmdlcyoqXG5cbk9rYXksIHRoZXNlIGNoYW5nZXMgc2VlbSBzb2xpZCDigJMgdGhleSdyZSBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwgYW5kIHRoZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUsIHdoaWNoIGlzIGNydWNpYWwuIE15IGluaXRpYWwgbGlzdCBvZiBmb2N1cyBzeW1ib2xzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludDogYGJwZl9wcm9nX3BhY2tfYWxsb2NgLCBgYWxsb2NfbmV3X3BhY2tgLCBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYCwgYGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nYCwgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AsIGFuZCBgYnBmX2ppdF9hbGxvY19leGVjYC5cblxuV2FpdCBhIG1pbnV0ZS4uLiB0aGlua2luZyBhYm91dCBpdCBtb3JlLCBgYnBmX2ppdF9hbGxvY19leGVjYCBhbmQgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AgYXJlIHByZXR0eSBzdHJhaWdodGZvcndhcmQgd3JhcHBlcnMgYXJvdW5kIGBleGVjbWVtX2FsbG9jYCBhbmQgYGV4ZWNtZW1fYWxsb2NfcndgLiBJdCBtaWdodCBiZSBtb3JlIGluc2lnaHRmdWwgdG8gcHJpb3JpdGl6ZSBgYnBmX3Byb2dfcGFja19hbGxvY2AgYW5kIGBhbGxvY19uZXdfcGFja2AgaW5zdGVhZCwgYXMgdGhleSdyZSBjbG9zZXIgdG8gdGhlIGNvcmUgYWxsb2NhdGlvbiBsb2dpYy4gYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAgYW5kIGBicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZ2AgYXJlIGRlZmluaXRlbHkgcmVsZXZhbnQsIGFuZCBzaG91bGQgYmUgaW5jbHVkZWQgb24gdGhlIGxpc3QuXG5cbkxldCdzIGRvdWJsZS1jaGVjayB0aGUgcmVhY2hhYmlsaXR5IG9mIHRoZXNlIGtleSBlbGVtZW50cy4gSSBrbm93IGBhcmNoX2JwZl90cmFtcG9saW5lX3NpemVgIGlzIGVtYmVkZGVkIGluIHRoZSBCUEYgdHJhbXBvbGluZSBsb2dpYy4gQW5kIGBicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZ2AgcGxheXMgYSB2aXRhbCByb2xlIGluIHRoZSBCUEYgZGlzcGF0Y2hlciBsb2dpYywgc28gdGhvc2UgYXJlIGNvbmZpcm1lZCBhcyBhY3RpdmUgY29tcG9uZW50cy5cblxuSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgaW5mbHVlbmNlIHRoaXMgYXJlYTogYEJQRl9KSVRgLCBgQlBGX1NZU0NBTExgLCBhbmQgYEVYRUNNRU1gLiBMZXQgbWUgcXVpY2tseSBjb25maXJtIHRoYXQgYEVYRUNNRU1gIGlzIGFjdHVhbGx5IGEgY29uZmlndXJhYmxlIG9wdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwMjMsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxMzoxMjo1OC44ODkwNDIyMDRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzMTk4OTgxODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEVYRUNNRU1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTQ1ND1jb25maWcgSU9NTVVfTU1fREFUQVxcbi0tXFxubW0vS2NvbmZpZy0xNDU2LVxcbm1tL0tjb25maWc6MTQ1Nzpjb25maWcgRVhFQ01FTVxcbm1tL0tjb25maWctMTQ1OC1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDEzOjEzOjAyLjIwODk0OTA4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxOTIxMjQ1MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyByZXF1ZXN0ZWQsIGdlYXJlZCB0b3dhcmQgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5SaWdodCwgc28gSSdtIGZvY3VzaW5nIG9uIHRoZXNlIHN5c3RlbSBjb25maWd1cmF0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYEVYRUNNRU1gIOKAkyBkZWZpbml0ZWx5LCB0aGF0J3MgYSBrbm93biBjb25maWcsIGl0J3MgcHJldHR5IGNsZWFyLiBOb3csIEkgbmVlZCB0byB2ZXJpZnkgc29tZXRoaW5nIGVsc2UuIE15IG1lbnRhbCBjaGVja2xpc3QgZGljdGF0ZXMgdGhhdCBJIG11c3QgY29uZmlybSB0aGUgc3RhdHVzIG9mIGBCUEZfSklUYC4gSXMgaXQgYWxzbyBjb25maWd1cmVkLCBvciBkbyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgZnVydGhlcj8gVGhpcyBpcyB0aGUgY29yZSBvZiB3aGF0IEkgYW0gZG9pbmcgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTc1MiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDEzOjEzOjA2LjQwMTA3Njk3OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkxMTY4NTg5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX0pJVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI3PWNvbmZpZyBCUEZfU1lTQ0FMTFxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTQxLVxcbmtlcm5lbC9icGYvS2NvbmZpZzo0Mjpjb25maWcgQlBGX0pJVFxcbmtlcm5lbC9icGYvS2NvbmZpZy00My1cXHRib29sIFxcXCJFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclxcXCJcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy01Ny1cXG5rZXJuZWwvYnBmL0tjb25maWc6NTg6Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXFxua2VybmVsL2JwZi9LY29uZmlnLTU5LVxcdGJvb2wgXFxcIlBlcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXFxcIlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTY4LVxcbmtlcm5lbC9icGYvS2NvbmZpZzo2OTpjb25maWcgQlBGX0pJVF9ERUZBVUxUX09OXFxua2VybmVsL2JwZi9LY29uZmlnLTcwLVxcdGRlZl9ib29sIEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVQgfHwgQlBGX0pJVF9BTFdBWVNfT05cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTM6MTM6MDkuMzEyNzY5NTEzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0MjI1NzM5MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYSBmaXJzdC1wZXJzb24sIGV4cGVydCBwZXJzcGVjdGl2ZSwgYWltaW5nIGZvciBhIGZ1bHNvbWUgcmVuZGVyaW5nOlxuXG4qKk15IEJQRiBDb25maWcgQ29uc2lkZXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBvbiBteSBtaW5kIGlzIGNvbmZpcm1pbmcgdGhhdCBgQlBGX0pJVGAgaXMgaW5kZWVkIGEgY29uZmlndXJhdGlvbiBvcHRpb24sIHdoaWNoIGlzIHByZXR0eSBmdW5kYW1lbnRhbCB0byBob3cgdGhpbmdzIHdvcmsuICpZZXMsIGNvbmZpcm1lZDsgd2Uga25vdyBgQlBGX0pJVGAgaXMgYSBjb25maWcgcGFyYW1ldGVyLiBMZXQncyBtb3ZlIG9uKi5cblxuTm93LCBzaW5jZSB3ZSdyZSBkaXZpbmcgaW50byBCUEYgY29uZmlndXJhdGlvbnMsIHRoZSBuYXR1cmFsIG5leHQgc3RlcCwgKmZvciBtZSosIGlzIHRvIGxvb2sgYXQgYEJQRl9TWVNDQUxMYC4gSSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIHRoYXQncyBhbHNvIGV4cG9zZWQgYXMgYSBjb25maWd1cmFibGUgb3B0aW9uLiBJdCdzIG9mdGVuIGludGVydHdpbmVkIHdpdGggdGhlIG92ZXJhbGwgQlBGIHNldHVwLCBzbyB1bmRlcnN0YW5kaW5nIGl0cyBzdGF0dXMgaXMga2V5IHRvIGV2YWx1YXRpbmcgdGhlIG92ZXJhbGwgcGljdHVyZS4gSSdsbCBuZWVkIHRvIGtub3cgd2hldGhlciBJIGNhbiBtb2RpZnkgaXQgZGlyZWN0bHksIG9yIGlmIGl0J3MgaW1wbGljaXRseSBlbmFibGVkIG9yIGRpc2FibGVkIGJhc2VkIG9uIG90aGVyIHNldHRpbmdzLiBLbm93aW5nIHRoaXMgaXMgY3JpdGljYWwgdG8gcHJvcGVyIEJQRiBwcm9ncmFtIG9wZXJhdGlvbiwgc2VjdXJpdHkgYW5kIHBvcnRhYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjE0OCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDEzOjEzOjE3LjczNTM0NzY4NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYxNTU2NjczMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTM6MTM6MjAuMzUwOTIyOTM4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwNjUzMjI5MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBDb25maWd1cmF0aW9uIGFuZCBTeW1ib2wgVmlzaWJpbGl0eSoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYEJQRl9TWVNDQUxMYCBpcyBpbmRlZWQgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgbWFraW5nIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBgQlBGX0pJVGAsIGBCUEZfU1lTQ0FMTGAsIGFuZCBgRVhFQ01FTWAuIE15IGZvY3VzIGlzIG9uIHRoZXNlIHN5bWJvbHM6IGBhbGxvY19uZXdfcGFja2AsIGBicGZfcHJvZ19wYWNrX2FsbG9jYCwgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAsIGFuZCBgYnBmX2Rpc3BhdGNoZXJfY2hhbmdlX3Byb2dgLlxuXG5MZXQncyBzdGFydCBieSBjaGVja2luZyB0aGUgc2NvcGUgb2YgdGhlc2Uga2V5IHN5bWJvbHMuIEkgc2VlIHRoYXQgYGFsbG9jX25ld19wYWNrYCBpcyBzdGF0aWMsIGRlZmluZWQgd2l0aGluIGBrZXJuZWwvYnBmL2NvcmUuY2AuIEdvb2QsIGdvdCB0aGF0LiBOb3csIEknbSB2ZXJpZnlpbmcgdGhhdCBgYnBmX3Byb2dfcGFja19hbGxvY2AgaXMgZXhwb3J0ZWQgb3IgZ2xvYmFsIOKAkyBjb25maXJtZWQsIGl0J3MgZ2xvYmFsLiBGb2xsb3dpbmcgdGhhdCwgSSdtIGNoZWNraW5nIGBhcmNoX2JwZl90cmFtcG9saW5lX3NpemVgJ3Mgc2NvcGUgLSBpdCdzIGdsb2JhbC4gQW5kIGZpbmFsbHksIEkgc2VlIHRoYXQgYGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nYCBpcyBhbHNvIGdsb2JhbC5cblxuQWxyaWdodCwgSSd2ZSBnb3QgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNjb3BlIG9mIHRoZXNlIHN5bWJvbHMgbm93LiBJJ2xsIGRvY3VtZW50IG15IGZpbmRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjUwMCwiT3V0cHV0VG9rZW5zIjoxNzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTM6MTM6MjkuNDE2MjQ3ODI4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2ODkwNDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiRVhFQ01FTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jX25ld19wYWNrXCIsXG4gICAgXCJicGZfcHJvZ19wYWNrX2FsbG9jXCIsXG4gICAgXCJhcmNoX2JwZl90cmFtcG9saW5lX3NpemVcIixcbiAgICBcImJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIEpJVCBtZW1vcnkgYWxsb2NhdGlvbiBsb2dpYywgaW50cm9kdWNpbmcgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AgYW5kIHVwZGF0aW5nIGBicGZfaml0X2FsbG9jX2V4ZWNgIHRvIHVzZSBgZXhlY21lbV9hbGxvY2AuIEl0IGFsc28gY2hhbmdlcyB4ODYgQlBGIEpJVCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gYW5kIHVwZGF0ZXMgQlBGIHRyYW1wb2xpbmUgYW5kIGRpc3BhdGNoZXIgbG9naWMgdG8gdXNlIHRoZSBuZXcgYWxsb2NhdGlvbiBtZXRob2RzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIEJQRiBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiRVhFQ01FTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jX25ld19wYWNrXCIsXG4gICAgXCJicGZfcHJvZ19wYWNrX2FsbG9jXCIsXG4gICAgXCJhcmNoX2JwZl90cmFtcG9saW5lX3NpemVcIixcbiAgICBcImJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIEpJVCBtZW1vcnkgYWxsb2NhdGlvbiBsb2dpYywgaW50cm9kdWNpbmcgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AgYW5kIHVwZGF0aW5nIGBicGZfaml0X2FsbG9jX2V4ZWNgIHRvIHVzZSBgZXhlY21lbV9hbGxvY2AuIEl0IGFsc28gY2hhbmdlcyB4ODYgQlBGIEpJVCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gYW5kIHVwZGF0ZXMgQlBGIHRyYW1wb2xpbmUgYW5kIGRpc3BhdGNoZXIgbG9naWMgdG8gdXNlIHRoZSBuZXcgYWxsb2NhdGlvbiBtZXRob2RzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIEJQRiBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow264jk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-16 12:41:12 +0000 UTC FinishedAt: 2026-07-16 13:13:31 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d1f4b56417a3dc1a0600f960b14f46bd25eda89d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT", "BPF_SYSCALL", "EXECMEM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d1f4b56417a3dc1a0600f960b14f46bd25eda89d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT", "BPF_SYSCALL", "EXECMEM" ], "series_id": "45611898-a4ab-44b9-b247-defc65fa751b" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "alloc_new_pack", "bpf_prog_pack_alloc", "arch_bpf_trampoline_size", "bpf_dispatcher_change_prog" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDEzOjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7RVhFQ01FTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX25ld19wYWNrJiMzNDssCiAgICAmIzM0O2JwZl9wcm9nX3BhY2tfYWxsb2MmIzM0OywKICAgICYjMzQ7YXJjaF9icGZfdHJhbXBvbGluZV9zaXplJiMzNDssCiAgICAmIzM0O2JwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEJQRiBKSVQgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMsIGludHJvZHVjaW5nIGBicGZfaml0X2FsbG9jX2V4ZWNfcndgIGFuZCB1cGRhdGluZyBgYnBmX2ppdF9hbGxvY19leGVjYCB0byB1c2UgYGV4ZWNtZW1fYWxsb2NgLiBJdCBhbHNvIGNoYW5nZXMgeDg2IEJQRiBKSVQgbWVtb3J5IGluaXRpYWxpemF0aW9uIGFuZCB1cGRhdGVzIEJQRiB0cmFtcG9saW5lIGFuZCBkaXNwYXRjaGVyIGxvZ2ljIHRvIHVzZSB0aGUgbmV3IGFsbG9jYXRpb24gbWV0aG9kcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBCUEYgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTM6MTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5ZGE3MTQwZDEyZjFmNjdiNDgxYjA1ZDA0MGMzZDk0ZWQ1N2FiZDdkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMTYgMTM6MTA6MjcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vaW5pdC5jIGIvYXJjaC94ODYvbW0vaW5pdC5jXG5pbmRleCBmYjY3MjE3ZmRkY2QzNy4uMDc5ZjhjN2U5ZTNjZGUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9tbS9pbml0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L21tL2luaXQuY1xuQEAgLTExMDcsMTAgJiM0MzsxMTA3LDEwIEBAIHN0cnVjdCBleGVjbWVtX2luZm8gX19pbml0ICpleGVjbWVtX2FyY2hfc2V0dXAodm9pZClcbiBcdFx0XHRcdC5hbGlnbm1lbnQgPSBNT0RVTEVfQUxJR04sXG4gXHRcdFx0fSxcbiBcdFx0XHRbRVhFQ01FTV9CUEZdID0ge1xuLVx0XHRcdFx0LmZsYWdzXHQ9IEVYRUNNRU1fS0FTQU5fU0hBRE9XLFxuJiM0MztcdFx0XHRcdC5mbGFnc1x0PSBmbGFncyxcbiBcdFx0XHRcdC5zdGFydFx0PSBzdGFydCxcbiBcdFx0XHRcdC5lbmRcdD0gTU9EVUxFU19FTkQsXG4tXHRcdFx0XHQucGdwcm90XHQ9IFBBR0VfS0VSTkVMLFxuJiM0MztcdFx0XHRcdC5wZ3Byb3RcdD0gcGdwcm90LFxuIFx0XHRcdFx0LmFsaWdubWVudCA9IE1PRFVMRV9BTElHTixcbiBcdFx0XHR9LFxuIFx0XHRcdFtFWEVDTUVNX01PRFVMRV9EQVRBXSA9IHtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbmluZGV4IGRlNzUxNWVhMWJlYWU4Li5iMmZlZWM4MWUyMzEyZSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG5AQCAtMzcwMywxMyAmIzQzOzM3MDMsMTIgQEAgaW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcbiBcdGludCByZXQ7XG4gXG4gXHQvKiBBbGxvY2F0ZSBhIHRlbXBvcmFyeSBidWZmZXIgZm9yIF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKCkuXG4tXHQgKiBUaGlzIHdpbGwgTk9UIGNhdXNlIGZyYWdtZW50YXRpb24gaW4gZGlyZWN0IG1hcCwgYXMgd2UgZG8gbm90XG4tXHQgKiBjYWxsIHNldF9tZW1vcnlfKigpIG9uIHRoaXMgYnVmZmVyLlxuIFx0ICpcbiBcdCAqIFdlIGNhbm5vdCB1c2Uga3ZtYWxsb2MgaGVyZSwgYmVjYXVzZSB3ZSBuZWVkIGltYWdlIHRvIGJlIGluXG4gXHQgKiBtb2R1bGUgbWVtb3J5IHJhbmdlLlxuJiM0MztcdCAqIFNpbmNlIGl0IG11c3QgYmUgd3JpdGFibGUgdXNlIGJwZl9qaXRfYWxsb2NfZXhlY19ydygpLlxuIFx0ICovXG4tXHRpbWFnZSA9IGJwZl9qaXRfYWxsb2NfZXhlYyhQQUdFX1NJWkUpO1xuJiM0MztcdGltYWdlID0gYnBmX2ppdF9hbGxvY19leGVjX3J3KFBBR0VfU0laRSk7XG4gXHRpZiAoIWltYWdlKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oIGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxuaW5kZXggMTRhY2IyNDU1NzQ2ZmMuLjMyZDUyOTdjNTU3ZTViIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxuQEAgLTEzMzMsNiAmIzQzOzEzMzMsNyBAQCBicGZfaml0X2JpbmFyeV9hbGxvYyh1bnNpZ25lZCBpbnQgcHJvZ2xlbiwgdTggKippbWFnZV9wdHIsXG4gdm9pZCBicGZfaml0X2JpbmFyeV9mcmVlKHN0cnVjdCBicGZfYmluYXJ5X2hlYWRlciAqaGRyKTtcbiB1NjQgYnBmX2ppdF9hbGxvY19leGVjX2xpbWl0KHZvaWQpO1xuIHZvaWQgKmJwZl9qaXRfYWxsb2NfZXhlYyh1bnNpZ25lZCBsb25nIHNpemUpO1xuJiM0Mzt2b2lkICpicGZfaml0X2FsbG9jX2V4ZWNfcncodW5zaWduZWQgbG9uZyBzaXplKTtcbiB2b2lkIGJwZl9qaXRfZnJlZV9leGVjKHZvaWQgKmFkZHIpO1xuIHZvaWQgYnBmX2ppdF9mcmVlKHN0cnVjdCBicGZfcHJvZyAqZnApO1xuIHN0cnVjdCBicGZfYmluYXJ5X2hlYWRlciAqXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jb3JlLmMgYi9rZXJuZWwvYnBmL2NvcmUuY1xuaW5kZXggNDdmZTA0N2FkMzBiODguLmUyMDc2NjY3YjI0NTE3IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvY29yZS5jXG5AQCAtOTE2LDYgJiM0Mzs5MTYsMTEgQEAgc3RhdGljIExJU1RfSEVBRChwYWNrX2xpc3QpO1xuIFxuICNkZWZpbmUgQlBGX1BST0dfQ0hVTktfQ09VTlQgKEJQRl9QUk9HX1BBQ0tfU0laRSAvIEJQRl9QUk9HX0NIVU5LX1NJWkUpXG4gXG4mIzQzO3N0YXRpYyBib29sIGJwZl9qaXRfbWVtX2lzX3JveCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGV4ZWNtZW1faXNfcm94KEVYRUNNRU1fQlBGKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgc3RydWN0IGJwZl9wcm9nX3BhY2sgKmFsbG9jX25ld19wYWNrKGJwZl9qaXRfZmlsbF9ob2xlX3QgYnBmX2ZpbGxfaWxsX2luc25zKVxuIHtcbiBcdHN0cnVjdCBicGZfcHJvZ19wYWNrICpwYWNrO1xuQEAgLTkyNywxNiAmIzQzOzkzMiwxOCBAQCBzdGF0aWMgc3RydWN0IGJwZl9wcm9nX3BhY2sgKmFsbG9jX25ld19wYWNrKGJwZl9qaXRfZmlsbF9ob2xlX3QgYnBmX2ZpbGxfaWxsX2luc1xuIFx0cGFjay1cdTAwM2VwdHIgPSBicGZfaml0X2FsbG9jX2V4ZWMoQlBGX1BST0dfUEFDS19TSVpFKTtcbiBcdGlmICghcGFjay1cdTAwM2VwdHIpXG4gXHRcdGdvdG8gb3V0O1xuLVx0YnBmX2ZpbGxfaWxsX2luc25zKHBhY2stXHUwMDNlcHRyLCBCUEZfUFJPR19QQUNLX1NJWkUpO1xuIFx0Yml0bWFwX3plcm8ocGFjay1cdTAwM2ViaXRtYXAsIEJQRl9QUk9HX1BBQ0tfU0laRSAvIEJQRl9QUk9HX0NIVU5LX1NJWkUpO1xuIFxuIFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2YnBmX3ByZWRfZmx1c2hfZW5hYmxlZCkpXG4gXHRcdHBhY2stXHUwMDNlYXJjaF9mbHVzaF9uZWVkZWQgPSB0cnVlO1xuLVx0c2V0X3ZtX2ZsdXNoX3Jlc2V0X3Blcm1zKHBhY2stXHUwMDNlcHRyKTtcbi1cdGVyciA9IHNldF9tZW1vcnlfcm94KCh1bnNpZ25lZCBsb25nKXBhY2stXHUwMDNlcHRyLFxuLVx0XHRcdCAgICAgQlBGX1BST0dfUEFDS19TSVpFIC8gUEFHRV9TSVpFKTtcbi1cdGlmIChlcnIpXG4tXHRcdGdvdG8gb3V0O1xuJiM0MztcdGlmICghYnBmX2ppdF9tZW1faXNfcm94KCkpIHtcbiYjNDM7XHRcdGJwZl9maWxsX2lsbF9pbnNucyhwYWNrLVx1MDAzZXB0ciwgQlBGX1BST0dfUEFDS19TSVpFKTtcbiYjNDM7XHRcdHNldF92bV9mbHVzaF9yZXNldF9wZXJtcyhwYWNrLVx1MDAzZXB0cik7XG4mIzQzO1x0XHRlcnIgPSBzZXRfbWVtb3J5X3JveCgodW5zaWduZWQgbG9uZylwYWNrLVx1MDAzZXB0cixcbiYjNDM7XHRcdFx0XHQgICAgIEJQRl9QUk9HX1BBQ0tfU0laRSAvIFBBR0VfU0laRSk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4gXHRsaXN0X2FkZF90YWlsKFx1MDAyNnBhY2stXHUwMDNlbGlzdCwgXHUwMDI2cGFja19saXN0KTtcbiBcdHJldHVybiBwYWNrO1xuIFxuQEAgLTk2NSw3ICYjNDM7OTcyLDcgQEAgdm9pZCAqYnBmX3Byb2dfcGFja19hbGxvYyh1MzIgc2l6ZSwgYnBmX2ppdF9maWxsX2hvbGVfdCBicGZfZmlsbF9pbGxfaW5zbnMsIGJvb2xcbiBcdFx0XHRwcl93YXJuX29uY2UoXCYjMzQ7QlBGOiBQcmVkaWN0b3JzIG5vdCBmbHVzaGVkIGZvciBhbGxvY2F0aW9ucyBncmVhdGVyIHRoYW4gQlBGX1BST0dfUEFDS19TSVpFXFxuXCYjMzQ7KTtcbiBcdFx0c2l6ZSA9IHJvdW5kX3VwKHNpemUsIFBBR0VfU0laRSk7XG4gXHRcdHB0ciA9IGJwZl9qaXRfYWxsb2NfZXhlYyhzaXplKTtcbi1cdFx0aWYgKHB0cikge1xuJiM0MztcdFx0aWYgKHB0ciBcdTAwMjZcdTAwMjYgIWJwZl9qaXRfbWVtX2lzX3JveCgpKSB7XG4gXHRcdFx0aW50IGVycjtcbiBcbiBcdFx0XHRicGZfZmlsbF9pbGxfaW5zbnMocHRyLCBzaXplKTtcbkBAIC0xMTE2LDEyICYjNDM7MTEyMywxNyBAQCB2b2lkIGJwZl9qaXRfdW5jaGFyZ2VfbW9kbWVtKHUzMiBzaXplKVxuIFx0YXRvbWljX2xvbmdfc3ViKHNpemUsIFx1MDAyNmJwZl9qaXRfY3VycmVudCk7XG4gfVxuIFxuLXZvaWQgKl9fd2VhayBicGZfaml0X2FsbG9jX2V4ZWModW5zaWduZWQgbG9uZyBzaXplKVxuJiM0Mzt2b2lkICpicGZfaml0X2FsbG9jX2V4ZWModW5zaWduZWQgbG9uZyBzaXplKVxuIHtcbiBcdHJldHVybiBleGVjbWVtX2FsbG9jKEVYRUNNRU1fQlBGLCBzaXplKTtcbiB9XG4gXG4tdm9pZCBfX3dlYWsgYnBmX2ppdF9mcmVlX2V4ZWModm9pZCAqYWRkcilcbiYjNDM7dm9pZCAqYnBmX2ppdF9hbGxvY19leGVjX3J3KHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBleGVjbWVtX2FsbG9jX3J3KEVYRUNNRU1fQlBGLCBzaXplKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBicGZfaml0X2ZyZWVfZXhlYyh2b2lkICphZGRyKVxuIHtcbiBcdGV4ZWNtZW1fZnJlZShhZGRyKTtcbiB9XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9kaXNwYXRjaGVyLmMgYi9rZXJuZWwvYnBmL2Rpc3BhdGNoZXIuY1xuaW5kZXggZWEyZDYwZGMxZmVlYjcuLjc5ZjBjMjIyYzU4MzQwIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9kaXNwYXRjaGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvZGlzcGF0Y2hlci5jXG5AQCAtMTQ4LDcgJiM0MzsxNDgsMTAgQEAgdm9pZCBicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZyhzdHJ1Y3QgYnBmX2Rpc3BhdGNoZXIgKmQsIHN0cnVjdCBicGZfcHJvZyAqZnJvbSxcbiBcdFx0ZC1cdTAwM2VpbWFnZSA9IGJwZl9wcm9nX3BhY2tfYWxsb2MoUEFHRV9TSVpFLCBicGZfaml0X2ZpbGxfaG9sZV93aXRoX3plcm8sIGZhbHNlKTtcbiBcdFx0aWYgKCFkLVx1MDAzZWltYWdlKVxuIFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRkLVx1MDAzZXJ3X2ltYWdlID0gYnBmX2ppdF9hbGxvY19leGVjKFBBR0VfU0laRSk7XG4mIzQzO1x0XHQvKiBkLVx1MDAzZXJ3X2ltYWdlIGRvZXNuJiMzOTt0IG5lZWQgdG8gYmUgaW4gbW9kdWxlIG1lbW9yeSByYW5nZSwgc28gd2VcbiYjNDM7XHRcdCAqIGNhbiB1c2UgdnphbGxvYy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0ZC1cdTAwM2Vyd19pbWFnZSA9IHZ6YWxsb2MoUEFHRV9TSVpFKTtcbiBcdFx0aWYgKCFkLVx1MDAzZXJ3X2ltYWdlKSB7XG4gXHRcdFx0YnBmX3Byb2dfcGFja19mcmVlKGQtXHUwMDNlaW1hZ2UsIFBBR0VfU0laRSk7XG4gXHRcdFx0ZC1cdTAwM2VpbWFnZSA9IE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTM6MTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0pJVCYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtFWEVDTUVNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2NfbmV3X3BhY2smIzM0OywKICAgICYjMzQ7YnBmX3Byb2dfcGFja19hbGxvYyYjMzQ7LAogICAgJiMzNDthcmNoX2JwZl90cmFtcG9saW5lX3NpemUmIzM0OywKICAgICYjMzQ7YnBmX2Rpc3BhdGNoZXJfY2hhbmdlX3Byb2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIEpJVCBtZW1vcnkgYWxsb2NhdGlvbiBsb2dpYywgaW50cm9kdWNpbmcgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AgYW5kIHVwZGF0aW5nIGBicGZfaml0X2FsbG9jX2V4ZWNgIHRvIHVzZSBgZXhlY21lbV9hbGxvY2AuIEl0IGFsc28gY2hhbmdlcyB4ODYgQlBGIEpJVCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gYW5kIHVwZGF0ZXMgQlBGIHRyYW1wb2xpbmUgYW5kIGRpc3BhdGNoZXIgbG9naWMgdG8gdXNlIHRoZSBuZXcgYWxsb2NhdGlvbiBtZXRob2RzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIEJQRiBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOWRhNzE0MGQxMmYxZjY3YjQ4MWIwNWQwNDBjM2Q5NGVkNTdhYmQ3ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDE2IDEzOjEwOjI3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vaW5pdC5jIGIvYXJjaC94ODYvbW0vaW5pdC5jCmluZGV4IGZiNjcyMTdmZGRjZDM3Li4wNzlmOGM3ZTllM2NkZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vaW5pdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L21tL2luaXQuYwpAQCAtMTEwNywxMCAmIzQzOzExMDcsMTAgQEAgc3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKQogCQkJCS5hbGlnbm1lbnQgPSBNT0RVTEVfQUxJR04sCiAJCQl9LAogCQkJW0VYRUNNRU1fQlBGXSA9IHsKLQkJCQkuZmxhZ3MJPSBFWEVDTUVNX0tBU0FOX1NIQURPVywKJiM0MzsJCQkJLmZsYWdzCT0gZmxhZ3MsCiAJCQkJLnN0YXJ0CT0gc3RhcnQsCiAJCQkJLmVuZAk9IE1PRFVMRVNfRU5ELAotCQkJCS5wZ3Byb3QJPSBQQUdFX0tFUk5FTCwKJiM0MzsJCQkJLnBncHJvdAk9IHBncHJvdCwKIAkJCQkuYWxpZ25tZW50ID0gTU9EVUxFX0FMSUdOLAogCQkJfSwKIAkJCVtFWEVDTUVNX01PRFVMRV9EQVRBXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYwppbmRleCBkZTc1MTVlYTFiZWFlOC4uYjJmZWVjODFlMjMxMmUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMKQEAgLTM3MDMsMTMgJiM0MzszNzAzLDEyIEBAIGludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsCiAJaW50IHJldDsKIAogCS8qIEFsbG9jYXRlIGEgdGVtcG9yYXJ5IGJ1ZmZlciBmb3IgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoKS4KLQkgKiBUaGlzIHdpbGwgTk9UIGNhdXNlIGZyYWdtZW50YXRpb24gaW4gZGlyZWN0IG1hcCwgYXMgd2UgZG8gbm90Ci0JICogY2FsbCBzZXRfbWVtb3J5XyooKSBvbiB0aGlzIGJ1ZmZlci4KIAkgKgogCSAqIFdlIGNhbm5vdCB1c2Uga3ZtYWxsb2MgaGVyZSwgYmVjYXVzZSB3ZSBuZWVkIGltYWdlIHRvIGJlIGluCiAJICogbW9kdWxlIG1lbW9yeSByYW5nZS4KJiM0MzsJICogU2luY2UgaXQgbXVzdCBiZSB3cml0YWJsZSB1c2UgYnBmX2ppdF9hbGxvY19leGVjX3J3KCkuCiAJICovCi0JaW1hZ2UgPSBicGZfaml0X2FsbG9jX2V4ZWMoUEFHRV9TSVpFKTsKJiM0MzsJaW1hZ2UgPSBicGZfaml0X2FsbG9jX2V4ZWNfcncoUEFHRV9TSVpFKTsKIAlpZiAoIWltYWdlKQogCQlyZXR1cm4gLUVOT01FTTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmgKaW5kZXggMTRhY2IyNDU1NzQ2ZmMuLjMyZDUyOTdjNTU3ZTViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmgKQEAgLTEzMzMsNiAmIzQzOzEzMzMsNyBAQCBicGZfaml0X2JpbmFyeV9hbGxvYyh1bnNpZ25lZCBpbnQgcHJvZ2xlbiwgdTggKippbWFnZV9wdHIsCiB2b2lkIGJwZl9qaXRfYmluYXJ5X2ZyZWUoc3RydWN0IGJwZl9iaW5hcnlfaGVhZGVyICpoZHIpOwogdTY0IGJwZl9qaXRfYWxsb2NfZXhlY19saW1pdCh2b2lkKTsKIHZvaWQgKmJwZl9qaXRfYWxsb2NfZXhlYyh1bnNpZ25lZCBsb25nIHNpemUpOwomIzQzO3ZvaWQgKmJwZl9qaXRfYWxsb2NfZXhlY19ydyh1bnNpZ25lZCBsb25nIHNpemUpOwogdm9pZCBicGZfaml0X2ZyZWVfZXhlYyh2b2lkICphZGRyKTsKIHZvaWQgYnBmX2ppdF9mcmVlKHN0cnVjdCBicGZfcHJvZyAqZnApOwogc3RydWN0IGJwZl9iaW5hcnlfaGVhZGVyICoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY29yZS5jIGIva2VybmVsL2JwZi9jb3JlLmMKaW5kZXggNDdmZTA0N2FkMzBiODguLmUyMDc2NjY3YjI0NTE3IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2NvcmUuYwpAQCAtOTE2LDYgJiM0Mzs5MTYsMTEgQEAgc3RhdGljIExJU1RfSEVBRChwYWNrX2xpc3QpOwogCiAjZGVmaW5lIEJQRl9QUk9HX0NIVU5LX0NPVU5UIChCUEZfUFJPR19QQUNLX1NJWkUgLyBCUEZfUFJPR19DSFVOS19TSVpFKQogCiYjNDM7c3RhdGljIGJvb2wgYnBmX2ppdF9tZW1faXNfcm94KHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gZXhlY21lbV9pc19yb3goRVhFQ01FTV9CUEYpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2dfcGFjayAqYWxsb2NfbmV3X3BhY2soYnBmX2ppdF9maWxsX2hvbGVfdCBicGZfZmlsbF9pbGxfaW5zbnMpCiB7CiAJc3RydWN0IGJwZl9wcm9nX3BhY2sgKnBhY2s7CkBAIC05MjcsMTYgJiM0Mzs5MzIsMTggQEAgc3RhdGljIHN0cnVjdCBicGZfcHJvZ19wYWNrICphbGxvY19uZXdfcGFjayhicGZfaml0X2ZpbGxfaG9sZV90IGJwZl9maWxsX2lsbF9pbnMKIAlwYWNrLSZndDtwdHIgPSBicGZfaml0X2FsbG9jX2V4ZWMoQlBGX1BST0dfUEFDS19TSVpFKTsKIAlpZiAoIXBhY2stJmd0O3B0cikKIAkJZ290byBvdXQ7Ci0JYnBmX2ZpbGxfaWxsX2luc25zKHBhY2stJmd0O3B0ciwgQlBGX1BST0dfUEFDS19TSVpFKTsKIAliaXRtYXBfemVybyhwYWNrLSZndDtiaXRtYXAsIEJQRl9QUk9HX1BBQ0tfU0laRSAvIEJQRl9QUk9HX0NIVU5LX1NJWkUpOwogCiAJaWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoJmFtcDticGZfcHJlZF9mbHVzaF9lbmFibGVkKSkKIAkJcGFjay0mZ3Q7YXJjaF9mbHVzaF9uZWVkZWQgPSB0cnVlOwotCXNldF92bV9mbHVzaF9yZXNldF9wZXJtcyhwYWNrLSZndDtwdHIpOwotCWVyciA9IHNldF9tZW1vcnlfcm94KCh1bnNpZ25lZCBsb25nKXBhY2stJmd0O3B0ciwKLQkJCSAgICAgQlBGX1BST0dfUEFDS19TSVpFIC8gUEFHRV9TSVpFKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKJiM0MzsJaWYgKCFicGZfaml0X21lbV9pc19yb3goKSkgewomIzQzOwkJYnBmX2ZpbGxfaWxsX2luc25zKHBhY2stJmd0O3B0ciwgQlBGX1BST0dfUEFDS19TSVpFKTsKJiM0MzsJCXNldF92bV9mbHVzaF9yZXNldF9wZXJtcyhwYWNrLSZndDtwdHIpOwomIzQzOwkJZXJyID0gc2V0X21lbW9yeV9yb3goKHVuc2lnbmVkIGxvbmcpcGFjay0mZ3Q7cHRyLAomIzQzOwkJCQkgICAgIEJQRl9QUk9HX1BBQ0tfU0laRSAvIFBBR0VfU0laRSk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwl9CiAJbGlzdF9hZGRfdGFpbCgmYW1wO3BhY2stJmd0O2xpc3QsICZhbXA7cGFja19saXN0KTsKIAlyZXR1cm4gcGFjazsKIApAQCAtOTY1LDcgJiM0Mzs5NzIsNyBAQCB2b2lkICpicGZfcHJvZ19wYWNrX2FsbG9jKHUzMiBzaXplLCBicGZfaml0X2ZpbGxfaG9sZV90IGJwZl9maWxsX2lsbF9pbnNucywgYm9vbAogCQkJcHJfd2Fybl9vbmNlKCYjMzQ7QlBGOiBQcmVkaWN0b3JzIG5vdCBmbHVzaGVkIGZvciBhbGxvY2F0aW9ucyBncmVhdGVyIHRoYW4gQlBGX1BST0dfUEFDS19TSVpFXG4mIzM0Oyk7CiAJCXNpemUgPSByb3VuZF91cChzaXplLCBQQUdFX1NJWkUpOwogCQlwdHIgPSBicGZfaml0X2FsbG9jX2V4ZWMoc2l6ZSk7Ci0JCWlmIChwdHIpIHsKJiM0MzsJCWlmIChwdHIgJmFtcDsmYW1wOyAhYnBmX2ppdF9tZW1faXNfcm94KCkpIHsKIAkJCWludCBlcnI7CiAKIAkJCWJwZl9maWxsX2lsbF9pbnNucyhwdHIsIHNpemUpOwpAQCAtMTExNiwxMiAmIzQzOzExMjMsMTcgQEAgdm9pZCBicGZfaml0X3VuY2hhcmdlX21vZG1lbSh1MzIgc2l6ZSkKIAlhdG9taWNfbG9uZ19zdWIoc2l6ZSwgJmFtcDticGZfaml0X2N1cnJlbnQpOwogfQogCi12b2lkICpfX3dlYWsgYnBmX2ppdF9hbGxvY19leGVjKHVuc2lnbmVkIGxvbmcgc2l6ZSkKJiM0Mzt2b2lkICpicGZfaml0X2FsbG9jX2V4ZWModW5zaWduZWQgbG9uZyBzaXplKQogewogCXJldHVybiBleGVjbWVtX2FsbG9jKEVYRUNNRU1fQlBGLCBzaXplKTsKIH0KIAotdm9pZCBfX3dlYWsgYnBmX2ppdF9mcmVlX2V4ZWModm9pZCAqYWRkcikKJiM0Mzt2b2lkICpicGZfaml0X2FsbG9jX2V4ZWNfcncodW5zaWduZWQgbG9uZyBzaXplKQomIzQzO3sKJiM0MzsJcmV0dXJuIGV4ZWNtZW1fYWxsb2NfcncoRVhFQ01FTV9CUEYsIHNpemUpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGJwZl9qaXRfZnJlZV9leGVjKHZvaWQgKmFkZHIpCiB7CiAJZXhlY21lbV9mcmVlKGFkZHIpOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9kaXNwYXRjaGVyLmMgYi9rZXJuZWwvYnBmL2Rpc3BhdGNoZXIuYwppbmRleCBlYTJkNjBkYzFmZWViNy4uNzlmMGMyMjJjNTgzNDAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvZGlzcGF0Y2hlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvZGlzcGF0Y2hlci5jCkBAIC0xNDgsNyAmIzQzOzE0OCwxMCBAQCB2b2lkIGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nKHN0cnVjdCBicGZfZGlzcGF0Y2hlciAqZCwgc3RydWN0IGJwZl9wcm9nICpmcm9tLAogCQlkLSZndDtpbWFnZSA9IGJwZl9wcm9nX3BhY2tfYWxsb2MoUEFHRV9TSVpFLCBicGZfaml0X2ZpbGxfaG9sZV93aXRoX3plcm8sIGZhbHNlKTsKIAkJaWYgKCFkLSZndDtpbWFnZSkKIAkJCWdvdG8gb3V0OwotCQlkLSZndDtyd19pbWFnZSA9IGJwZl9qaXRfYWxsb2NfZXhlYyhQQUdFX1NJWkUpOwomIzQzOwkJLyogZC0mZ3Q7cndfaW1hZ2UgZG9lc24mIzM5O3QgbmVlZCB0byBiZSBpbiBtb2R1bGUgbWVtb3J5IHJhbmdlLCBzbyB3ZQomIzQzOwkJICogY2FuIHVzZSB2emFsbG9jLgomIzQzOwkJICovCiYjNDM7CQlkLSZndDtyd19pbWFnZSA9IHZ6YWxsb2MoUEFHRV9TSVpFKTsKIAkJaWYgKCFkLSZndDtyd19pbWFnZSkgewogCQkJYnBmX3Byb2dfcGFja19mcmVlKGQtJmd0O2ltYWdlLCBQQUdFX1NJWkUpOwogCQkJZC0mZ3Q7aW1hZ2UgPSBOVUxMOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxMzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzMzCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEJQRiBKSVQgTWVtb3J5IEFsbG9jYXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtBaCwgaXQmIzM5O3MgbWVzc2luZyB3aXRoIEJQRiBKSVQgbWVtb3J5IGFsbG9jYXRpb24uJiMzNDsgU3BlY2lmaWNhbGx5LCBJIHNlZSBpdCYjMzk7cyB0b3VjaGluZyBgYnBmX2ppdF9hbGxvY19leGVjYCwgaW50cm9kdWNpbmcgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AsIGFuZCB0aGVuIHRoZXJlIGFyZSBjaGFuZ2VzIHRvIGBhcmNoL3g4Ni9tbS9pbml0LmNgLiBJbnRlcmVzdGluZy4gVGhlIGBpbml0LmNgIGNoYW5nZXMgbG9vayBsaWtlIHRoZXkmIzM5O3JlIG1ha2luZyB0aGluZ3MgbW9yZSBmbGV4aWJsZSBieSB1c2luZyBgZmxhZ3NgIGFuZCBgcGdwcm90YCBpbnN0ZWFkIG9mIHRob3NlIGhhcmRjb2RlZCBjb25zdGFudHMgKGBFWEVDTUVNX0tBU0FOX1NIQURPV2AsIGBQQUdFX0tFUk5FTGApIGZvciBgRVhFQ01FTV9CUEZgLiBBIGdvb2QgZGVzaWduIGRlY2lzaW9uLgoKVGhlbiB0aGVyZSYjMzk7cyB0aGUgYGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nYCBjaGFuZ2UuIEl04oCZcyB1c2luZyBgdnphbGxvY2AgZm9yIGBkLSZndDtyd19pbWFnZWAgbm93LCBpbnN0ZWFkIG9mIHRoZSBwb3RlbnRpYWxseSBtb3JlIHNwZWNpZmljIGFsbG9jYXRpb24gb2YgYGJwZl9qaXRfYWxsb2NfZXhlY2AuIEFuZCB0aGVyZSYjMzk7cyBhbHNvIGEgbmV3IGZ1bmN0aW9uLCBgYnBmX2ppdF9tZW1faXNfcm94KClgLCBhcHBlYXJpbmcgaW4gYGtlcm5lbC9icGYvY29yZS5jYC4gSG1tLCBhIG5ldyBwcmltaXRpdmU/CgpBbHJpZ2h0LCB0aGlzIGlzIGZ1bmRhbWVudGFsLiBUaGlzIHBhdGNoIGNsZWFybHkgbW9kaWZpZXMgdGhlIGNvcmUgQlBGIEpJVCBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgeDg2IEJQRiBKSVQgc3BlY2lmaWNhbGx5LiBHaXZlbiBCUEYmIzM5O3Mgd2lkZXNwcmVhZCB1c2FnZSwgdGhpcyBkZWZpbml0ZWx5IGlzIHJlYWNoYWJsZS4gSXQgc2VlcyBhIGxvdCBvZiB1c2UuIElzIGl0IGZ1enphYmxlPyBBYnNvbHV0ZWx5LiBJdOKAmXMgZnVuY3Rpb25hbCwgc28gaXQgc2hvdWxkIGJlLgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgYXJjaC94ODYvbW0vaW5pdC5jYCBhbmQgc2VlIGV4YWN0bHkgd2hhdCB0aG9zZSBgZmxhZ3NgIGFuZCBgcGdwcm90YCBhcmUuIEkmIzM5O2xsIGdldCB0aGUgZGV0YWlscyBvbiB0aGUgdXNlIG9mIGByZWFkLWZpbGVgIGFyb3VuZCBsaW5lIDExMDcuLi4gYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTM6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9pbml0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwOTA6XHRcdFx0XHRcdC5zdGFydFx0PSBzdGFydCxcbjEwOTE6XHRcdFx0XHRcdC5lbmRcdD0gTU9EVUxFU19FTkQsXG4xMDkyOlx0XHRcdFx0XHQucGdwcm90XHQ9IHBncHJvdCxcbjEwOTM6XHRcdFx0XHRcdC5hbGlnbm1lbnQgPSBNT0RVTEVfQUxJR04sXG4xMDk0Olx0XHRcdFx0fSxcbjEwOTU6XHRcdFx0XHRbRVhFQ01FTV9LUFJPQkVTXSA9IHtcbjEwOTY6XHRcdFx0XHRcdC5mbGFnc1x0PSBmbGFncyxcbjEwOTc6XHRcdFx0XHRcdC5zdGFydFx0PSBzdGFydCxcbjEwOTg6XHRcdFx0XHRcdC5lbmRcdD0gTU9EVUxFU19FTkQsXG4xMDk5Olx0XHRcdFx0XHQucGdwcm90XHQ9IFBBR0VfS0VSTkVMX1JPWCxcbjExMDA6XHRcdFx0XHRcdC5hbGlnbm1lbnQgPSBNT0RVTEVfQUxJR04sXG4xMTAxOlx0XHRcdFx0fSxcbjExMDI6XHRcdFx0XHRbRVhFQ01FTV9GVFJBQ0VdID0ge1xuMTEwMzpcdFx0XHRcdFx0LmZsYWdzXHQ9IGZsYWdzLFxuMTEwNDpcdFx0XHRcdFx0LnN0YXJ0XHQ9IHN0YXJ0LFxuMTEwNTpcdFx0XHRcdFx0LmVuZFx0PSBNT0RVTEVTX0VORCxcbjExMDY6XHRcdFx0XHRcdC5wZ3Byb3RcdD0gcGdwcm90LFxuMTEwNzpcdFx0XHRcdFx0LmFsaWdubWVudCA9IE1PRFVMRV9BTElHTixcbjExMDg6XHRcdFx0XHR9LFxuMTEwOTpcdFx0XHRcdFtFWEVDTUVNX0JQRl0gPSB7XG4xMTEwOlx0XHRcdFx0XHQuZmxhZ3NcdD0gZmxhZ3MsXG4xMTExOlx0XHRcdFx0XHQuc3RhcnRcdD0gc3RhcnQsXG4xMTEyOlx0XHRcdFx0XHQuZW5kXHQ9IE1PRFVMRVNfRU5ELFxuMTExMzpcdFx0XHRcdFx0LnBncHJvdFx0PSBwZ3Byb3QsXG4xMTE0Olx0XHRcdFx0XHQuYWxpZ25tZW50ID0gTU9EVUxFX0FMSUdOLFxuMTExNTpcdFx0XHRcdH0sXG4xMTE2Olx0XHRcdFx0W0VYRUNNRU1fTU9EVUxFX0RBVEFdID0ge1xuMTExNzpcdFx0XHRcdFx0LmZsYWdzXHQ9IEVYRUNNRU1fS0FTQU5fU0hBRE9XLFxuMTExODpcdFx0XHRcdFx0LnN0YXJ0XHQ9IHN0YXJ0LFxuMTExOTpcdFx0XHRcdFx0LmVuZFx0PSBNT0RVTEVTX0VORCxcbjExMjA6XHRcdFx0XHRcdC5wZ3Byb3RcdD0gUEFHRV9LRVJORUwsXG4xMTIxOlx0XHRcdFx0XHQuYWxpZ25tZW50ID0gTU9EVUxFX0FMSUdOLFxuMTEyMjpcdFx0XHRcdH0sXG4xMTIzOlx0XHRcdH0sXG4xMTI0Olx0XHR9O1xuMTEyNTpcdFxuMTEyNjpcdFx0cmV0dXJuIFx1MDAyNmV4ZWNtZW1faW5mbztcbjExMjc6XHR9XG4xMTI4Olx0I2VuZGlmIC8qIENPTkZJR19FWEVDTUVNICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTM6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk2OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVjZW50IENvZGUgQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byB0aGVzZSBtZW1vcnkgYWxsb2NhdGlvbiB1cGRhdGVzLiBUaGUgY29yZSBhcmNoaXRlY3R1cmFsIHNldHVwIGFkanVzdG1lbnRzIHNlZW0gdG8gYmUgbmVzdGxlZCB3aXRoaW4gYGFyY2gveDg2L21tL2luaXQuY2AsIHNwZWNpZmljYWxseSB0aGUgYGV4ZWNtZW1fYXJjaF9zZXR1cGAgZnVuY3Rpb24uIFRoYXQmIzM5O3MgdGhlIGZpcnN0IGtleSBhcmVhIHRvIHVuZGVyc3RhbmQuIFRoZW4sIGl0IGxvb2tzIGxpa2UgdGhlIGFjdHVhbCBCUEYgSklUIG1lbW9yeSBhbGxvY2F0aW9uIGhhcHBlbnMgaW4gYGtlcm5lbC9icGYvY29yZS5jYCDigJMgc3BlY2lmaWNhbGx5IHRoZSBgYnBmX2ppdF9hbGxvY19leGVjYCBhbmQgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2Agcm91dGluZXMuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlOyB0aGVzZSBmdW5jdGlvbnMgYXJlIHJlc3BvbnNpYmxlIGZvciB0aGUganVzdC1pbi10aW1lIGNvbXBpbGF0aW9uIGFuZCByZWxhdGVkIG1lbW9yeS4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBga2VybmVsL2JwZi9jb3JlLmNgLCBwcm9iYWJseSBzdGFydGluZyBhcm91bmQgbGluZSA5MTYuIFRoYXQmIzM5O3MgbGlrZWx5IHdoZXJlIHRoZSBhbGxvY2F0aW9uIHN0cmF0ZWd5IGl0c2VsZiBpcyBpbXBsZW1lbnRlZCwgc28gbGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDEzOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDkxMDpcdCAqIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAyTUIuXG4gOTExOlx0ICovXG4gOTEyOlx0I2RlZmluZSBCUEZfUFJPR19QQUNLX1NJWkUgKFNaXzJNICogbnVtX3Bvc3NpYmxlX25vZGVzKCkpXG4gOTEzOlx0I2Vsc2VcbiA5MTQ6XHQjZGVmaW5lIEJQRl9QUk9HX1BBQ0tfU0laRSBQQUdFX1NJWkVcbiA5MTU6XHQjZW5kaWZcbiA5MTY6XHRcbiA5MTc6XHQjZGVmaW5lIEJQRl9QUk9HX0NIVU5LX0NPVU5UIChCUEZfUFJPR19QQUNLX1NJWkUgLyBCUEZfUFJPR19DSFVOS19TSVpFKVxuIDkxODpcdFxuIDkxOTpcdHN0YXRpYyBib29sIGJwZl9qaXRfbWVtX2lzX3JveCh2b2lkKVxuIDkyMDpcdHtcbiA5MjE6XHRcdHJldHVybiBleGVjbWVtX2lzX3JveChFWEVDTUVNX0JQRik7XG4gOTIyOlx0fVxuIDkyMzpcdFxuIDkyNDpcdHN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2dfcGFjayAqYWxsb2NfbmV3X3BhY2soYnBmX2ppdF9maWxsX2hvbGVfdCBicGZfZmlsbF9pbGxfaW5zbnMpXG4gOTI1Olx0e1xuIDkyNjpcdFx0c3RydWN0IGJwZl9wcm9nX3BhY2sgKnBhY2s7XG4gOTI3Olx0XHRpbnQgZXJyO1xuIDkyODpcdFxuIDkyOTpcdFx0cGFjayA9IGt6YWxsb2NfZmxleCgqcGFjaywgYml0bWFwLCBCSVRTX1RPX0xPTkdTKEJQRl9QUk9HX0NIVU5LX0NPVU5UKSk7XG4gOTMwOlx0XHRpZiAoIXBhY2spXG4gOTMxOlx0XHRcdHJldHVybiBOVUxMO1xuIDkzMjpcdFx0cGFjay1cdTAwM2VwdHIgPSBicGZfaml0X2FsbG9jX2V4ZWMoQlBGX1BST0dfUEFDS19TSVpFKTtcbiA5MzM6XHRcdGlmICghcGFjay1cdTAwM2VwdHIpXG4gOTM0Olx0XHRcdGdvdG8gb3V0O1xuIDkzNTpcdFx0Yml0bWFwX3plcm8ocGFjay1cdTAwM2ViaXRtYXAsIEJQRl9QUk9HX1BBQ0tfU0laRSAvIEJQRl9QUk9HX0NIVU5LX1NJWkUpO1xuIDkzNjpcdFxuIDkzNzpcdFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXHUwMDI2YnBmX3ByZWRfZmx1c2hfZW5hYmxlZCkpXG4gOTM4Olx0XHRcdHBhY2stXHUwMDNlYXJjaF9mbHVzaF9uZWVkZWQgPSB0cnVlO1xuIDkzOTpcdFx0aWYgKCFicGZfaml0X21lbV9pc19yb3goKSkge1xuIDk0MDpcdFx0XHRicGZfZmlsbF9pbGxfaW5zbnMocGFjay1cdTAwM2VwdHIsIEJQRl9QUk9HX1BBQ0tfU0laRSk7XG4gOTQxOlx0XHRcdHNldF92bV9mbHVzaF9yZXNldF9wZXJtcyhwYWNrLVx1MDAzZXB0cik7XG4gOTQyOlx0XHRcdGVyciA9IHNldF9tZW1vcnlfcm94KCh1bnNpZ25lZCBsb25nKXBhY2stXHUwMDNlcHRyLFxuIDk0MzpcdFx0XHRcdFx0ICAgICBCUEZfUFJPR19QQUNLX1NJWkUgLyBQQUdFX1NJWkUpO1xuIDk0NDpcdFx0XHRpZiAoZXJyKVxuIDk0NTpcdFx0XHRcdGdvdG8gb3V0O1xuIDk0NjpcdFx0fVxuIDk0NzpcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZwYWNrLVx1MDAzZWxpc3QsIFx1MDAyNnBhY2tfbGlzdCk7XG4gOTQ4Olx0XHRyZXR1cm4gcGFjaztcbiA5NDk6XHRcbiA5NTA6XHRvdXQ6XG4gOTUxOlx0XHRicGZfaml0X2ZyZWVfZXhlYyhwYWNrLVx1MDAzZXB0cik7XG4gOTUyOlx0XHRrZnJlZShwYWNrKTtcbiA5NTM6XHRcdHJldHVybiBOVUxMO1xuIDk1NDpcdH1cbiA5NTU6XHRcbiA5NTY6XHR2b2lkICpicGZfcHJvZ19wYWNrX2FsbG9jKHUzMiBzaXplLCBicGZfaml0X2ZpbGxfaG9sZV90IGJwZl9maWxsX2lsbF9pbnNucywgYm9vbCB3YXNfY2xhc3NpYylcbiA5NTc6XHR7XG4gOTU4Olx0XHR1bnNpZ25lZCBpbnQgbmJpdHMgPSBCUEZfUFJPR19TSVpFX1RPX05CSVRTKHNpemUpO1xuIDk1OTpcdFx0c3RydWN0IGJwZl9wcm9nX3BhY2sgKnBhY2ssICpmYWxsYmFja19wYWNrID0gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxMzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTQ0CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgSklUIENvbXBpbGF0aW9uIGZvciBPcHRpbWl6YXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHplcm8gaW4gb24gYSBzcGVjaWZpYyBhcmVhIHdpdGhpbiB0aGUgQlBGIEpJVCBjb21waWxhdGlvbiBwcm9jZXNzLiBUaGUgY29yZSBmdW5jdGlvbnMgSSBzaG91bGQgcHJpb3JpdGl6ZSBmb3IgdGhpcyBhbmFseXNpcyBhcmU6IGBhbGxvY19uZXdfcGFja2AsIGBicGZfcHJvZ19wYWNrX2FsbG9jYCwgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAsIGFuZCBgYnBmX2Rpc3BhdGNoZXJfY2hhbmdlX3Byb2dgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IGBhcmNoX2JwZl90cmFtcG9saW5lX3NpemVgIGZlZWxzIGxpa2UgYSBjcml0aWNhbCBwb2ludC4gSG1tLCBpdCBzZWVtcyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIGBicGZfaml0X2FsbG9jX2V4ZWNfcndgLiBSaWdodCwgdGhhdCYjMzk7cyB3aGVyZSB0aGUgbWVtb3J5IGFsbG9jYXRpb24gYW5kIHBvdGVudGlhbCBjb2RlIGdlbmVyYXRpb24gd291bGQgaGFwcGVuLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgYWxsIGZpdHMgdG9nZXRoZXIuIEJlc3QgdG8ganVtcCBpbnRvIHRoZSBjb2RlIGFuZCBleGFtaW5lIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgIGFyb3VuZCBsaW5lIDM3MDMuIFRoYXQmIzM5O3MgdGhlIGxpa2VseSBsb2NhdGlvbiBmb3Igc29tZSBrZXkgY2hhbmdlcy4gR290dGEgdW5kZXJzdGFuZCBob3cgdGhlIHRyYW1wb2xpbmUgc2l6ZSBjYWxjdWxhdGlvbiByZWxhdGVzIHRvIHRoZSBSVyBhbGxvY2F0aW9uIHdpdGhpbiB0aGUgSklUIGVudmlyb25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDEzOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzY5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNjkwOlx0XHR0bXAgPSBicGZfYXJjaF90ZXh0X2NvcHkoaW1hZ2UsIHJ3X2ltYWdlLCBzaXplKTtcbjM2OTE6XHRcdGlmIChJU19FUlIodG1wKSlcbjM2OTI6XHRcdFx0cmV0ID0gUFRSX0VSUih0bXApO1xuMzY5MzpcdG91dDpcbjM2OTQ6XHRcdGt2ZnJlZShyd19pbWFnZSk7XG4zNjk1Olx0XHRyZXR1cm4gcmV0O1xuMzY5NjpcdH1cbjM2OTc6XHRcbjM2OTg6XHRpbnQgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTMyIGZsYWdzLFxuMzY5OTpcdFx0XHRcdCAgICAgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG5vZGVzLCB2b2lkICpmdW5jX2FkZHIpXG4zNzAwOlx0e1xuMzcwMTpcdFx0c3RydWN0IGJwZl90cmFtcF9pbWFnZSBpbTtcbjM3MDI6XHRcdHZvaWQgKmltYWdlO1xuMzcwMzpcdFx0aW50IHJldDtcbjM3MDQ6XHRcbjM3MDU6XHRcdC8qIEFsbG9jYXRlIGEgdGVtcG9yYXJ5IGJ1ZmZlciBmb3IgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoKS5cbjM3MDY6XHRcdCAqXG4zNzA3Olx0XHQgKiBXZSBjYW5ub3QgdXNlIGt2bWFsbG9jIGhlcmUsIGJlY2F1c2Ugd2UgbmVlZCBpbWFnZSB0byBiZSBpblxuMzcwODpcdFx0ICogbW9kdWxlIG1lbW9yeSByYW5nZS5cbjM3MDk6XHRcdCAqIFNpbmNlIGl0IG11c3QgYmUgd3JpdGFibGUgdXNlIGJwZl9qaXRfYWxsb2NfZXhlY19ydygpLlxuMzcxMDpcdFx0ICovXG4zNzExOlx0XHRpbWFnZSA9IGJwZl9qaXRfYWxsb2NfZXhlY19ydyhQQUdFX1NJWkUpO1xuMzcxMjpcdFx0aWYgKCFpbWFnZSlcbjM3MTM6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4zNzE0Olx0XG4zNzE1Olx0XHRyZXQgPSBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShcdTAwMjZpbSwgaW1hZ2UsIGltYWdlICYjNDM7IFBBR0VfU0laRSwgaW1hZ2UsXG4zNzE2Olx0XHRcdFx0XHRcdCAgICBtLCBmbGFncywgdG5vZGVzLCBmdW5jX2FkZHIpO1xuMzcxNzpcdFx0YnBmX2ppdF9mcmVlX2V4ZWMoaW1hZ2UpO1xuMzcxODpcdFx0cmV0dXJuIHJldDtcbjM3MTk6XHR9XG4zNzIwOlx0XG4zNzIxOlx0c3RhdGljIGludCBlbWl0X2JwZl9kaXNwYXRjaGVyKHU4ICoqcHByb2csIGludCBhLCBpbnQgYiwgczY0ICpwcm9ncywgdTggKmltYWdlLCB1OCAqYnVmKVxuMzcyMjpcdHtcbjM3MjM6XHRcdHU4ICpqZ19yZWxvYywgKnByb2cgPSAqcHByb2c7XG4zNzI0Olx0XHRpbnQgcGl2b3QsIGVyciwgamdfYnl0ZXMgPSAxO1xuMzcyNTpcdFx0czY0IGpnX29mZnNldDtcbjM3MjY6XHRcbjM3Mjc6XHRcdGlmIChhID09IGIpIHtcbjM3Mjg6XHRcdFx0LyogTGVhZiBub2RlIG9mIHJlY3Vyc2lvbiwgaS5lLiBub3QgYSByYW5nZSBvZiBpbmRpY2VzXG4zNzI5Olx0XHRcdCAqIGFueW1vcmUuXG4zNzMwOlx0XHRcdCAqL1xuMzczMTpcdFx0XHRFTUlUMShhZGRfMW1vZCgweDQ4LCBCUEZfUkVHXzMpKTtcdC8qIGNtcCByZHgsZnVuYyAqL1xuMzczMjpcdFx0XHRpZiAoIWlzX3NpbW0zMihwcm9nc1thXSkpXG4zNzMzOlx0XHRcdFx0cmV0dXJuIC0xO1xuMzczNDpcdFx0XHRFTUlUMl9vZmYzMigweDgxLCBhZGRfMXJlZygweEY4LCBCUEZfUkVHXzMpLFxuMzczNTpcdFx0XHRcdCAgICBwcm9nc1thXSk7XG4zNzM2Olx0XHRcdGVyciA9IGVtaXRfY29uZF9uZWFyX2p1bXAoXHUwMDI2cHJvZyxcdC8qIGplIGZ1bmMgKi9cbjM3Mzc6XHRcdFx0XHRcdFx0ICAodm9pZCAqKXByb2dzW2FdLCBpbWFnZSAmIzQzOyAocHJvZyAtIGJ1ZiksXG4zNzM4Olx0XHRcdFx0XHRcdCAgWDg2X0pFKTtcbjM3Mzk6XHRcdFx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxMzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzU2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkJQRiBKSVQgQ29tcGlsYXRpb24gQ29uZmlndXJhdGlvbiBWZXJpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBCUEYgSklUIGNvbXBpbGF0aW9uIGlzc3VlLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyB2ZXJpZnkgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbiBmbGFncyBhcmUgZW5hYmxlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX0JQRl9KSVRgIGlzIHNldCwgb2J2aW91c2x5LiBUaGVuLCBiZWNhdXNlIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29kZSBpcyBoYW5naW5nIG91dCBpbiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYCwgSSYjMzk7bGwgYWxzbyBjb25maXJtIHRoYXQgYENPTkZJR19YODZfNjRgIGlzIGNvbmZpZ3VyZWQsIHNpbmNlIHRoYXQgc2VlbXMgcmVsZXZhbnQgdG8gdGhhdCBwYXRoLiBGaW5hbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlbmFibGVkLCBnaXZlbiB0aGF0IHRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbSB1c2VzIHN5c2NhbGxzLiAKCldpdGggdGhvc2UgcHJlcmVxdWlzaXRlcyBjaGVja2VkIG9mZiwgSSYjMzk7bGwgZ28gdGFrZSBhIGxvb2sgYXQgYGtlcm5lbC9icGYvZGlzcGF0Y2hlci5jYC4gTXkgaHVuY2ggaXMgdGhhdCB0aGVyZSYjMzk7cyBzb21ldGhpbmcgcG90ZW50aWFsbHkgYXdyeSBhcm91bmQgbGluZSAxNDgsIHNvIEkmIzM5O2xsIHN0YXJ0IHRoZXJlIGFuZCB0cmFjZSB0aGUgbG9naWMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgaW4gdGhhdCBhcmVhLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRpc3BhdGNoZXIgaXMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgSklULgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxMzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvZGlzcGF0Y2hlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDA6XHRcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuIDE0MTpcdFx0aW50IHByZXZfbnVtX3Byb2dzO1xuIDE0MjpcdFxuIDE0MzpcdFx0aWYgKGZyb20gPT0gdG8pXG4gMTQ0Olx0XHRcdHJldHVybjtcbiAxNDU6XHRcbiAxNDY6XHRcdG11dGV4X2xvY2soXHUwMDI2ZC1cdTAwM2VtdXRleCk7XG4gMTQ3Olx0XHRpZiAoIWQtXHUwMDNlaW1hZ2UpIHtcbiAxNDg6XHRcdFx0ZC1cdTAwM2VpbWFnZSA9IGJwZl9wcm9nX3BhY2tfYWxsb2MoUEFHRV9TSVpFLCBicGZfaml0X2ZpbGxfaG9sZV93aXRoX3plcm8sIGZhbHNlKTtcbiAxNDk6XHRcdFx0aWYgKCFkLVx1MDAzZWltYWdlKVxuIDE1MDpcdFx0XHRcdGdvdG8gb3V0O1xuIDE1MTpcdFx0XHQvKiBkLVx1MDAzZXJ3X2ltYWdlIGRvZXNuJiMzOTt0IG5lZWQgdG8gYmUgaW4gbW9kdWxlIG1lbW9yeSByYW5nZSwgc28gd2VcbiAxNTI6XHRcdFx0ICogY2FuIHVzZSB2emFsbG9jLlxuIDE1MzpcdFx0XHQgKi9cbiAxNTQ6XHRcdFx0ZC1cdTAwM2Vyd19pbWFnZSA9IHZ6YWxsb2MoUEFHRV9TSVpFKTtcbiAxNTU6XHRcdFx0aWYgKCFkLVx1MDAzZXJ3X2ltYWdlKSB7XG4gMTU2Olx0XHRcdFx0YnBmX3Byb2dfcGFja19mcmVlKGQtXHUwMDNlaW1hZ2UsIFBBR0VfU0laRSk7XG4gMTU3Olx0XHRcdFx0ZC1cdTAwM2VpbWFnZSA9IE5VTEw7XG4gMTU4Olx0XHRcdFx0Z290byBvdXQ7XG4gMTU5Olx0XHRcdH1cbiAxNjA6XHRcdFx0YnBmX2ltYWdlX2tzeW1faW5pdChkLVx1MDAzZWltYWdlLCBQQUdFX1NJWkUsIFx1MDAyNmQtXHUwMDNla3N5bSk7XG4gMTYxOlx0XHRcdGJwZl9pbWFnZV9rc3ltX2FkZChcdTAwMjZkLVx1MDAzZWtzeW0pO1xuIDE2MjpcdFx0fVxuIDE2MzpcdFxuIDE2NDpcdFx0cHJldl9udW1fcHJvZ3MgPSBkLVx1MDAzZW51bV9wcm9ncztcbiAxNjU6XHRcdGNoYW5nZWQgfD0gYnBmX2Rpc3BhdGNoZXJfcmVtb3ZlX3Byb2coZCwgZnJvbSk7XG4gMTY2Olx0XHRjaGFuZ2VkIHw9IGJwZl9kaXNwYXRjaGVyX2FkZF9wcm9nKGQsIHRvKTtcbiAxNjc6XHRcbiAxNjg6XHRcdGlmICghY2hhbmdlZClcbiAxNjk6XHRcdFx0Z290byBvdXQ7XG4gMTcwOlx0XG4gMTcxOlx0XHRicGZfZGlzcGF0Y2hlcl91cGRhdGUoZCwgcHJldl9udW1fcHJvZ3MpO1xuIDE3MjpcdG91dDpcbiAxNzM6XHRcdG11dGV4X3VubG9jayhcdTAwMjZkLVx1MDAzZW11dGV4KTtcbiAxNzQ6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDEzOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNDgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIEJQRiBKSVQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIHNlZSB0aGUgY29uZmlndXJhdGlvbiBmb3IgYGtlcm5lbC9icGYvZGlzcGF0Y2hlci5jYCBpcyBkcml2ZW4gYnkgYENPTkZJR19CUEZfSklUYC4gTXkgbmV4dCBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB2ZXJpZnkgd2hldGhlciB0aGUgY29tcGlsYXRpb24gb2YgYGRpc3BhdGNoZXIuY2AgaXMgYWN0dWFsbHkgY29uZGl0aW9uYWwgYmFzZWQgb24gdGhpcyBjb25maWcuIFRoZSBtb3N0IG9idmlvdXMgcGxhY2UgdG8gZG8gdGhhdCBpcyBpbiBga2VybmVsL2JwZi9NYWtlZmlsZWAuIEkgbmVlZCB0byBxdWlja2x5IGNyb3NzLXJlZmVyZW5jZSB0aGF0IGBNYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jeSBhbmQgdW5kZXJzdGFuZCB0aGUgYnVpbGQgcHJvY2Vzcy4gR290dGEgbWFrZSBzdXJlIHRoZSBKSVQgY29tcGlsZXIgZGVwZW5kZW5jeSBpcyBoYW5kbGVkIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTM6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdG9iai15IDo9IGNvcmUub1xuICAgMzpcdGlmbmVxICgkKENPTkZJR19CUEZfSklUX0FMV0FZU19PTikseSlcbiAgIDQ6XHQjIF9fX2JwZl9wcm9nX3J1bigpIG5lZWRzIEdDU0UgZGlzYWJsZWQgb24geDg2OyBzZWUgMzE5M2MwODM2ZjIwMyBmb3IgZGV0YWlsc1xuICAgNTpcdGNmbGFncy1ub2djc2UtJChDT05GSUdfWDg2KSQoQ09ORklHX0NDX0lTX0dDQykgOj0gLWZuby1nY3NlXG4gICA2Olx0ZW5kaWZcbiAgIDc6XHRDRkxBR1NfY29yZS5vICYjNDM7PSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxuICAgODpcdFxuICAgOTpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHN5c2NhbGwubyB2ZXJpZmllci5vIGlub2RlLm8gaGVscGVycy5vIHRudW0ubyBjbnVtLm8gbG9nLm8gdG9rZW4ubyBsaXZlbmVzcy5vIGNvbnN0X2ZvbGQub1xuICAxMDpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xuICAxMTpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGhhc2h0YWIubyBhcnJheW1hcC5vIHBlcmNwdV9mcmVlbGlzdC5vIGJwZl9scnVfbGlzdC5vIGxwbV90cmllLm8gbWFwX2luX21hcC5vIGJsb29tX2ZpbHRlci5vXG4gIDEyOlx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gbG9jYWxfc3RvcmFnZS5vIHF1ZXVlX3N0YWNrX21hcHMubyByaW5nYnVmLm8gYnBmX2luc25fYXJyYXkub1xuICAxMzpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9sb2NhbF9zdG9yYWdlLm8gYnBmX3Rhc2tfc3RvcmFnZS5vXG4gIDE0Olx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gZml4dXBzLm8gY2ZnLm8gc3RhdGVzLm8gYmFja3RyYWNrLm8gY2hlY2tfYnRmLm9cbiAgMTU6XHRvYmotJHtDT05GSUdfQlBGX0xTTX1cdCAgJiM0Mzs9IGJwZl9pbm9kZV9zdG9yYWdlLm9cbiAgMTY6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBkaXNhc20ubyBtcHJvZy5vXG4gIDE3Olx0b2JqLSQoQ09ORklHX0JQRl9KSVQpICYjNDM7PSB0cmFtcG9saW5lLm9cbiAgMTg6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xuICAxOTpcdGlmZXEgKCQoQ09ORklHX01NVSkkKENPTkZJR182NEJJVCkseXkpXG4gIDIwOlx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYXJlbmEubyByYW5nZV90cmVlLm9cbiAgMjE6XHRlbmRpZlxuICAyMjpcdG9iai0kKENPTkZJR19CUEZfSklUKSAmIzQzOz0gZGlzcGF0Y2hlci5vXG4gIDIzOlx0aWZlcSAoJChDT05GSUdfTkVUKSx5KVxuICAyNDpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGRldm1hcC5vXG4gIDI1Olx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gY3B1bWFwLm9cbiAgMjY6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBvZmZsb2FkLm9cbiAgMjc6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBuZXRfbmFtZXNwYWNlLm9cbiAgMjg6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSB0Y3gub1xuICAyOTpcdGVuZGlmXG4gIDMwOlx0aWZlcSAoJChDT05GSUdfUEVSRl9FVkVOVFMpLHkpXG4gIDMxOlx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gc3RhY2ttYXAub1xuICAzMjpcdGVuZGlmXG4gIDMzOlx0aWZlcSAoJChDT05GSUdfQ0dST1VQUykseSlcbiAgMzQ6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjZ3JvdXBfaXRlci5vIGJwZl9jZ3JwX3N0b3JhZ2Uub1xuICAzNTpcdGVuZGlmXG4gIDM2Olx0b2JqLSQoQ09ORklHX0NHUk9VUF9CUEYpICYjNDM7PSBjZ3JvdXAub1xuICAzNzpcdGlmZXEgKCQoQ09ORklHX0lORVQpLHkpXG4gIDM4Olx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gcmV1c2Vwb3J0X2FycmF5Lm9cbiAgMzk6XHRlbmRpZlxuICA0MDpcdGlmZXEgKCQoQ09ORklHX1NZU0ZTKSx5KVxuICA0MTpcdG9iai0kKENPTkZJR19ERUJVR19JTkZPX0JURikgJiM0Mzs9IHN5c2ZzX2J0Zi5vXG4gIDQyOlx0ZW5kaWZcbiAgNDM6XHRpZmVxICgkKENPTkZJR19CUEZfSklUKSx5KVxuICA0NDpcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9zdHJ1Y3Rfb3BzLm9cbiAgNDU6XHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBjcHVtYXNrLm9cbiAgNDY6XHQjIGJwZl9sc21fcHJvdG8ubyBtdXN0IHByZWNlZGUgYnBmX2xzbS5vLiBUaGUgY3VycmVudCBwYWhvbGUgbG9naWNcbiAgNDc6XHQjIGRlZHVwbGljYXRlcyBmdW5jdGlvbiBwcm90b3R5cGVzIHdpdGhpblxuICA0ODpcdCMgYnRmX2VuY29kZXJfX2FkZF9zYXZlZF9mdW5jKCkgYnkga2VlcGluZyB0aGUgZmlyc3QgaW5zdGFuY2Ugc2Vlbi4gV2VcbiAgNDk6XHQjIG5lZWQgdGhlIGZ1bmN0aW9uIHByb3RvdHlwZShzKSBpbiBicGZfbHNtX3Byb3RvLm8gdG8gdGFrZSBwcmVjZWRlbmNlXG4gIDUwOlx0IyBvdmVyIHRob3NlIHdpdGhpbiBicGZfbHNtLm8uIEhhdmluZyBicGZfbHNtX3Byb3RvLm8gcHJlY2VkZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjQyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIGZvciBCUEYgSklUIGFuZCBSZWxhdGVkIEZlYXR1cmVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYW5kIGl0IGxvb2tzIGxpa2UgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX0JQRl9KSVRgIGlzIGVuYWJsZWQg4oCTIHRoYXQmIzM5O3MgYSBnaXZlbi4gSSBrbmV3IHRoYXQsIG9mIGNvdXJzZSwgYnV0IGl0JiMzOTtzIGdvb2QgdG8gY29uZmlybS4gVGhlbiBJIGFsc28gbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZDsgdGhhdCYjMzk7cyBhIGNvbW1vbiBwcmVyZXF1aXNpdGUgZm9yIG1hbnkgQlBGIGZ1bmN0aW9uYWxpdGllcywgc28gdGhhdCBtYWtlcyBzZW5zZS4gSG1tLCBhbmQgaXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlcyBpbiBgYXJjaC94ODYvbW0vaW5pdC5jYCBkZXBlbmQgb24gYENPTkZJR19FWEVDTUVNYC4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoYXQgYGFyY2gveDg2L21tL2luaXQuY2AgZmlsZSBhZ2FpbiBqdXN0IHRvIGJlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBjcnVjaWFsLiBHb3R0YSBnZXQgdGhpcyByaWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTM6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9pbml0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMjA6XHRcdFx0XHRcdC5wZ3Byb3RcdD0gUEFHRV9LRVJORUwsXG4xMTIxOlx0XHRcdFx0XHQuYWxpZ25tZW50ID0gTU9EVUxFX0FMSUdOLFxuMTEyMjpcdFx0XHRcdH0sXG4xMTIzOlx0XHRcdH0sXG4xMTI0Olx0XHR9O1xuMTEyNTpcdFxuMTEyNjpcdFx0cmV0dXJuIFx1MDAyNmV4ZWNtZW1faW5mbztcbjExMjc6XHR9XG4xMTI4Olx0I2VuZGlmIC8qIENPTkZJR19FWEVDTUVNICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDEzOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDY1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gYW5kIEJQRiBKSVQgQWxsb2NhdGlvbioqCgpBbHJpZ2h0LCB5ZXAsIGRlZmluaXRlbHkgbmVlZCB0byBjb25maXJtIHRoYXQgYENPTkZJR19FWEVDTUVNYCBpcyBlbmFibGVkLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHJlcXVpcmVtZW50LCBhbmQgSSYjMzk7bSBwcmV0dHkgY2VydGFpbiBpdCYjMzk7cyBiYWtlZCBpbnRvIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBKSVQgd29ya3MuIENhbiYjMzk7dCBieXBhc3MgdGhhdCBtZW1vcnkgYWxsb2NhdGlvbiBwb2xpY3kuCgpOb3csIGxldCBtZSBxdWlja2x5IHBpdm90IHRvIGBrZXJuZWwvYnBmL2NvcmUuY2AuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgbXkgdW5kZXJzdGFuZGluZywgc3BlY2lmaWNhbGx5IHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFyb3VuZCBgYnBmX2ppdF9hbGxvY19leGVjYC4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIHJlY2FsbCB0aGUga2V5IGludGVyYWN0aW9ucyB0aGVyZSwgZXNwZWNpYWxseSB3aGF0IGhhcHBlbnMgd2hlbiB0aGUgZmxhZyBpcyBzZXQuIFRoYXQgZnVuY3Rpb24gaXMgdGhlIGNvcmUgb2YgaG93IHdlIGFjdHVhbGx5IGdldCB0aGUgZXhlY3V0YWJsZSBtZW1vcnkuIE5lZWQgdG8ga2VlcCB0aGF0IHBpY3R1cmUgY2xlYXIgaW4gbXkgaGVhZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTM6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTExNTpcdFx0XHR9XG4xMTE2Olx0XHR9XG4xMTE3Olx0XG4xMTE4Olx0XHRyZXR1cm4gMDtcbjExMTk6XHR9XG4xMTIwOlx0XG4xMTIxOlx0dm9pZCBicGZfaml0X3VuY2hhcmdlX21vZG1lbSh1MzIgc2l6ZSlcbjExMjI6XHR7XG4xMTIzOlx0XHRhdG9taWNfbG9uZ19zdWIoc2l6ZSwgXHUwMDI2YnBmX2ppdF9jdXJyZW50KTtcbjExMjQ6XHR9XG4xMTI1Olx0XG4xMTI2Olx0dm9pZCAqYnBmX2ppdF9hbGxvY19leGVjKHVuc2lnbmVkIGxvbmcgc2l6ZSlcbjExMjc6XHR7XG4xMTI4Olx0XHRyZXR1cm4gZXhlY21lbV9hbGxvYyhFWEVDTUVNX0JQRiwgc2l6ZSk7XG4xMTI5Olx0fVxuMTEzMDpcdFxuMTEzMTpcdHZvaWQgKmJwZl9qaXRfYWxsb2NfZXhlY19ydyh1bnNpZ25lZCBsb25nIHNpemUpXG4xMTMyOlx0e1xuMTEzMzpcdFx0cmV0dXJuIGV4ZWNtZW1fYWxsb2NfcncoRVhFQ01FTV9CUEYsIHNpemUpO1xuMTEzNDpcdH1cbjExMzU6XHRcbjExMzY6XHR2b2lkIGJwZl9qaXRfZnJlZV9leGVjKHZvaWQgKmFkZHIpXG4xMTM3Olx0e1xuMTEzODpcdFx0ZXhlY21lbV9mcmVlKGFkZHIpO1xuMTEzOTpcdH1cbjExNDA6XHRcbjExNDE6XHRzdHJ1Y3QgYnBmX2JpbmFyeV9oZWFkZXIgKlxuMTE0MjpcdGJwZl9qaXRfYmluYXJ5X2FsbG9jKHVuc2lnbmVkIGludCBwcm9nbGVuLCB1OCAqKmltYWdlX3B0cixcbjExNDM6XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgYWxpZ25tZW50LFxuMTE0NDpcdFx0XHQgICAgIGJwZl9qaXRfZmlsbF9ob2xlX3QgYnBmX2ZpbGxfaWxsX2luc25zKVxuMTE0NTpcdHtcbjExNDY6XHRcdHN0cnVjdCBicGZfYmluYXJ5X2hlYWRlciAqaGRyO1xuMTE0NzpcdFx0dTMyIHNpemUsIGhvbGUsIHN0YXJ0O1xuMTE0ODpcdFxuMTE0OTpcdFx0V0FSTl9PTl9PTkNFKCFpc19wb3dlcl9vZl8yKGFsaWdubWVudCkgfHxcbjExNTA6XHRcdFx0ICAgICBhbGlnbm1lbnQgXHUwMDNlIEJQRl9JTUFHRV9BTElHTk1FTlQpO1xuMTE1MTpcdFxuMTE1MjpcdFx0LyogTW9zdCBvZiBCUEYgZmlsdGVycyBhcmUgcmVhbGx5IHNtYWxsLCBidXQgaWYgc29tZSBvZiB0aGVtXG4xMTUzOlx0XHQgKiBmaWxsIGEgcGFnZSwgYWxsb3cgYXQgbGVhc3QgMTI4IGV4dHJhIGJ5dGVzIHRvIGluc2VydCBhXG4xMTU0Olx0XHQgKiByYW5kb20gc2VjdGlvbiBvZiBpbGxlZ2FsIGluc3RydWN0aW9ucy5cbjExNTU6XHRcdCAqL1xuMTE1NjpcdFx0c2l6ZSA9IHJvdW5kX3VwKHByb2dsZW4gJiM0Mzsgc2l6ZW9mKCpoZHIpICYjNDM7IDEyOCwgUEFHRV9TSVpFKTtcbjExNTc6XHRcbjExNTg6XHRcdGlmIChicGZfaml0X2NoYXJnZV9tb2RtZW0oc2l6ZSkpXG4xMTU5Olx0XHRcdHJldHVybiBOVUxMO1xuMTE2MDpcdFx0aGRyID0gYnBmX2ppdF9hbGxvY19leGVjKHNpemUpO1xuMTE2MTpcdFx0aWYgKCFoZHIpIHtcbjExNjI6XHRcdFx0YnBmX2ppdF91bmNoYXJnZV9tb2RtZW0oc2l6ZSk7XG4xMTYzOlx0XHRcdHJldHVybiBOVUxMO1xuMTE2NDpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxMzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTAyMwoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDI4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGdW5jdGlvbmFsIENoYW5nZXMqKgoKT2theSwgdGhlc2UgY2hhbmdlcyBzZWVtIHNvbGlkIOKAkyB0aGV5JiMzOTtyZSBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwgYW5kIHRoZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUsIHdoaWNoIGlzIGNydWNpYWwuIE15IGluaXRpYWwgbGlzdCBvZiBmb2N1cyBzeW1ib2xzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludDogYGJwZl9wcm9nX3BhY2tfYWxsb2NgLCBgYWxsb2NfbmV3X3BhY2tgLCBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYCwgYGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nYCwgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AsIGFuZCBgYnBmX2ppdF9hbGxvY19leGVjYC4KCldhaXQgYSBtaW51dGUuLi4gdGhpbmtpbmcgYWJvdXQgaXQgbW9yZSwgYGJwZl9qaXRfYWxsb2NfZXhlY2AgYW5kIGBicGZfaml0X2FsbG9jX2V4ZWNfcndgIGFyZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIHdyYXBwZXJzIGFyb3VuZCBgZXhlY21lbV9hbGxvY2AgYW5kIGBleGVjbWVtX2FsbG9jX3J3YC4gSXQgbWlnaHQgYmUgbW9yZSBpbnNpZ2h0ZnVsIHRvIHByaW9yaXRpemUgYGJwZl9wcm9nX3BhY2tfYWxsb2NgIGFuZCBgYWxsb2NfbmV3X3BhY2tgIGluc3RlYWQsIGFzIHRoZXkmIzM5O3JlIGNsb3NlciB0byB0aGUgY29yZSBhbGxvY2F0aW9uIGxvZ2ljLiBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYCBhbmQgYGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nYCBhcmUgZGVmaW5pdGVseSByZWxldmFudCwgYW5kIHNob3VsZCBiZSBpbmNsdWRlZCBvbiB0aGUgbGlzdC4KCkxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIHJlYWNoYWJpbGl0eSBvZiB0aGVzZSBrZXkgZWxlbWVudHMuIEkga25vdyBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYCBpcyBlbWJlZGRlZCBpbiB0aGUgQlBGIHRyYW1wb2xpbmUgbG9naWMuIEFuZCBgYnBmX2Rpc3BhdGNoZXJfY2hhbmdlX3Byb2dgIHBsYXlzIGEgdml0YWwgcm9sZSBpbiB0aGUgQlBGIGRpc3BhdGNoZXIgbG9naWMsIHNvIHRob3NlIGFyZSBjb25maXJtZWQgYXMgYWN0aXZlIGNvbXBvbmVudHMuCgpJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBpbmZsdWVuY2UgdGhpcyBhcmVhOiBgQlBGX0pJVGAsIGBCUEZfU1lTQ0FMTGAsIGFuZCBgRVhFQ01FTWAuIExldCBtZSBxdWlja2x5IGNvbmZpcm0gdGhhdCBgRVhFQ01FTWAgaXMgYWN0dWFsbHkgYSBjb25maWd1cmFibGUgb3B0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxMzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRVhFQ01FTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTE0NTQ9Y29uZmlnIElPTU1VX01NX0RBVEFcbi0tXG5tbS9LY29uZmlnLTE0NTYtXG5tbS9LY29uZmlnOjE0NTc6Y29uZmlnIEVYRUNNRU1cbm1tL0tjb25maWctMTQ1OC1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3NTIKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyByZXF1ZXN0ZWQsIGdlYXJlZCB0b3dhcmQgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKClJpZ2h0LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZXNlIHN5c3RlbSBjb25maWd1cmF0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYEVYRUNNRU1gIOKAkyBkZWZpbml0ZWx5LCB0aGF0JiMzOTtzIGEga25vd24gY29uZmlnLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIuIE5vdywgSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgZWxzZS4gTXkgbWVudGFsIGNoZWNrbGlzdCBkaWN0YXRlcyB0aGF0IEkgbXVzdCBjb25maXJtIHRoZSBzdGF0dXMgb2YgYEJQRl9KSVRgLiBJcyBpdCBhbHNvIGNvbmZpZ3VyZWQsIG9yIGRvIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyPyBUaGlzIGlzIHRoZSBjb3JlIG9mIHdoYXQgSSBhbSBkb2luZyBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDEzOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfSklUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNz1jb25maWcgQlBGX1NZU0NBTExcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctNDEtXG5rZXJuZWwvYnBmL0tjb25maWc6NDI6Y29uZmlnIEJQRl9KSVRcbmtlcm5lbC9icGYvS2NvbmZpZy00My1cdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcJiMzNDtcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctNTctXG5rZXJuZWwvYnBmL0tjb25maWc6NTg6Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXG5rZXJuZWwvYnBmL0tjb25maWctNTktXHRib29sIFwmIzM0O1Blcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXCYjMzQ7XG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTY4LVxua2VybmVsL2JwZi9LY29uZmlnOjY5OmNvbmZpZyBCUEZfSklUX0RFRkFVTFRfT05cbmtlcm5lbC9icGYvS2NvbmZpZy03MC1cdGRlZl9ib29sIEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVQgfHwgQlBGX0pJVF9BTFdBWVNfT05cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxNDgKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYSBmaXJzdC1wZXJzb24sIGV4cGVydCBwZXJzcGVjdGl2ZSwgYWltaW5nIGZvciBhIGZ1bHNvbWUgcmVuZGVyaW5nOgoKKipNeSBCUEYgQ29uZmlnIENvbnNpZGVyYXRpb24qKgoKQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIG9uIG15IG1pbmQgaXMgY29uZmlybWluZyB0aGF0IGBCUEZfSklUYCBpcyBpbmRlZWQgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgd2hpY2ggaXMgcHJldHR5IGZ1bmRhbWVudGFsIHRvIGhvdyB0aGluZ3Mgd29yay4gKlllcywgY29uZmlybWVkOyB3ZSBrbm93IGBCUEZfSklUYCBpcyBhIGNvbmZpZyBwYXJhbWV0ZXIuIExldCYjMzk7cyBtb3ZlIG9uKi4KCk5vdywgc2luY2Ugd2UmIzM5O3JlIGRpdmluZyBpbnRvIEJQRiBjb25maWd1cmF0aW9ucywgdGhlIG5hdHVyYWwgbmV4dCBzdGVwLCAqZm9yIG1lKiwgaXMgdG8gbG9vayBhdCBgQlBGX1NZU0NBTExgLiBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgdGhhdCYjMzk7cyBhbHNvIGV4cG9zZWQgYXMgYSBjb25maWd1cmFibGUgb3B0aW9uLiBJdCYjMzk7cyBvZnRlbiBpbnRlcnR3aW5lZCB3aXRoIHRoZSBvdmVyYWxsIEJQRiBzZXR1cCwgc28gdW5kZXJzdGFuZGluZyBpdHMgc3RhdHVzIGlzIGtleSB0byBldmFsdWF0aW5nIHRoZSBvdmVyYWxsIHBpY3R1cmUuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIEkgY2FuIG1vZGlmeSBpdCBkaXJlY3RseSwgb3IgaWYgaXQmIzM5O3MgaW1wbGljaXRseSBlbmFibGVkIG9yIGRpc2FibGVkIGJhc2VkIG9uIG90aGVyIHNldHRpbmdzLiBLbm93aW5nIHRoaXMgaXMgY3JpdGljYWwgdG8gcHJvcGVyIEJQRiBwcm9ncmFtIG9wZXJhdGlvbiwgc2VjdXJpdHkgYW5kIHBvcnRhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1MDAKCQkJCQkJCW91dHB1dDogMTc1CgkJCQkJCQl0aG91Z2h0czogMjA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgQ29uZmlndXJhdGlvbiBhbmQgU3ltYm9sIFZpc2liaWxpdHkqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYEJQRl9TWVNDQUxMYCBpcyBpbmRlZWQgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgbWFraW5nIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBgQlBGX0pJVGAsIGBCUEZfU1lTQ0FMTGAsIGFuZCBgRVhFQ01FTWAuIE15IGZvY3VzIGlzIG9uIHRoZXNlIHN5bWJvbHM6IGBhbGxvY19uZXdfcGFja2AsIGBicGZfcHJvZ19wYWNrX2FsbG9jYCwgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAsIGFuZCBgYnBmX2Rpc3BhdGNoZXJfY2hhbmdlX3Byb2dgLgoKTGV0JiMzOTtzIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBzY29wZSBvZiB0aGVzZSBrZXkgc3ltYm9scy4gSSBzZWUgdGhhdCBgYWxsb2NfbmV3X3BhY2tgIGlzIHN0YXRpYywgZGVmaW5lZCB3aXRoaW4gYGtlcm5lbC9icGYvY29yZS5jYC4gR29vZCwgZ290IHRoYXQuIE5vdywgSSYjMzk7bSB2ZXJpZnlpbmcgdGhhdCBgYnBmX3Byb2dfcGFja19hbGxvY2AgaXMgZXhwb3J0ZWQgb3IgZ2xvYmFsIOKAkyBjb25maXJtZWQsIGl0JiMzOTtzIGdsb2JhbC4gRm9sbG93aW5nIHRoYXQsIEkmIzM5O20gY2hlY2tpbmcgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAmIzM5O3Mgc2NvcGUgLSBpdCYjMzk7cyBnbG9iYWwuIEFuZCBmaW5hbGx5LCBJIHNlZSB0aGF0IGBicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZ2AgaXMgYWxzbyBnbG9iYWwuCgpBbHJpZ2h0LCBJJiMzOTt2ZSBnb3QgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNjb3BlIG9mIHRoZXNlIHN5bWJvbHMgbm93LiBJJiMzOTtsbCBkb2N1bWVudCBteSBmaW5kaW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7RVhFQ01FTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX25ld19wYWNrJiMzNDssCiAgICAmIzM0O2JwZl9wcm9nX3BhY2tfYWxsb2MmIzM0OywKICAgICYjMzQ7YXJjaF9icGZfdHJhbXBvbGluZV9zaXplJiMzNDssCiAgICAmIzM0O2JwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEJQRiBKSVQgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMsIGludHJvZHVjaW5nIGBicGZfaml0X2FsbG9jX2V4ZWNfcndgIGFuZCB1cGRhdGluZyBgYnBmX2ppdF9hbGxvY19leGVjYCB0byB1c2UgYGV4ZWNtZW1fYWxsb2NgLiBJdCBhbHNvIGNoYW5nZXMgeDg2IEJQRiBKSVQgbWVtb3J5IGluaXRpYWxpemF0aW9uIGFuZCB1cGRhdGVzIEJQRiB0cmFtcG9saW5lIGFuZCBkaXNwYXRjaGVyIGxvZ2ljIHRvIHVzZSB0aGUgbmV3IGFsbG9jYXRpb24gbWV0aG9kcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBCUEYgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7RVhFQ01FTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX25ld19wYWNrJiMzNDssCiAgICAmIzM0O2JwZl9wcm9nX3BhY2tfYWxsb2MmIzM0OywKICAgICYjMzQ7YXJjaF9icGZfdHJhbXBvbGluZV9zaXplJiMzNDssCiAgICAmIzM0O2JwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEJQRiBKSVQgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMsIGludHJvZHVjaW5nIGBicGZfaml0X2FsbG9jX2V4ZWNfcndgIGFuZCB1cGRhdGluZyBgYnBmX2ppdF9hbGxvY19leGVjYCB0byB1c2UgYGV4ZWNtZW1fYWxsb2NgLiBJdCBhbHNvIGNoYW5nZXMgeDg2IEJQRiBKSVQgbWVtb3J5IGluaXRpYWxpemF0aW9uIGFuZCB1cGRhdGVzIEJQRiB0cmFtcG9saW5lIGFuZCBkaXNwYXRjaGVyIGxvZ2ljIHRvIHVzZSB0aGUgbmV3IGFsbG9jYXRpb24gbWV0aG9kcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBCUEYgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxMzoxMDoyOS4wOTMwNTk4NzVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODA1MTAwOTg2NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkVYRUNNRU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19uZXdfcGFja1wiLFxuICAgIFwiYnBmX3Byb2dfcGFja19hbGxvY1wiLFxuICAgIFwiYXJjaF9icGZfdHJhbXBvbGluZV9zaXplXCIsXG4gICAgXCJicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEJQRiBKSVQgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMsIGludHJvZHVjaW5nIGBicGZfaml0X2FsbG9jX2V4ZWNfcndgIGFuZCB1cGRhdGluZyBgYnBmX2ppdF9hbGxvY19leGVjYCB0byB1c2UgYGV4ZWNtZW1fYWxsb2NgLiBJdCBhbHNvIGNoYW5nZXMgeDg2IEJQRiBKSVQgbWVtb3J5IGluaXRpYWxpemF0aW9uIGFuZCB1cGRhdGVzIEJQRiB0cmFtcG9saW5lIGFuZCBkaXNwYXRjaGVyIGxvZ2ljIHRvIHVzZSB0aGUgbmV3IGFsbG9jYXRpb24gbWV0aG9kcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBCUEYgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDEzOjEwOjI5LjA5MzA3NTc1NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA0NjA5OTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOWRhNzE0MGQxMmYxZjY3YjQ4MWIwNWQwNDBjM2Q5NGVkNTdhYmQ3ZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAxNiAxMzoxMDoyNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pbml0LmMgYi9hcmNoL3g4Ni9tbS9pbml0LmNcXG5pbmRleCBmYjY3MjE3ZmRkY2QzNy4uMDc5ZjhjN2U5ZTNjZGUgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvbW0vaW5pdC5jXFxuKysrIGIvYXJjaC94ODYvbW0vaW5pdC5jXFxuQEAgLTExMDcsMTAgKzExMDcsMTAgQEAgc3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxcbiBcXHRcXHRcXHRcXHQuYWxpZ25tZW50ID0gTU9EVUxFX0FMSUdOLFxcbiBcXHRcXHRcXHR9LFxcbiBcXHRcXHRcXHRbRVhFQ01FTV9CUEZdID0ge1xcbi1cXHRcXHRcXHRcXHQuZmxhZ3NcXHQ9IEVYRUNNRU1fS0FTQU5fU0hBRE9XLFxcbitcXHRcXHRcXHRcXHQuZmxhZ3NcXHQ9IGZsYWdzLFxcbiBcXHRcXHRcXHRcXHQuc3RhcnRcXHQ9IHN0YXJ0LFxcbiBcXHRcXHRcXHRcXHQuZW5kXFx0PSBNT0RVTEVTX0VORCxcXG4tXFx0XFx0XFx0XFx0LnBncHJvdFxcdD0gUEFHRV9LRVJORUwsXFxuK1xcdFxcdFxcdFxcdC5wZ3Byb3RcXHQ9IHBncHJvdCxcXG4gXFx0XFx0XFx0XFx0LmFsaWdubWVudCA9IE1PRFVMRV9BTElHTixcXG4gXFx0XFx0XFx0fSxcXG4gXFx0XFx0XFx0W0VYRUNNRU1fTU9EVUxFX0RBVEFdID0ge1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcXG5pbmRleCBkZTc1MTVlYTFiZWFlOC4uYjJmZWVjODFlMjMxMmUgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXFxuKysrIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXFxuQEAgLTM3MDMsMTMgKzM3MDMsMTIgQEAgaW50IGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZShjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHUzMiBmbGFncyxcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdC8qIEFsbG9jYXRlIGEgdGVtcG9yYXJ5IGJ1ZmZlciBmb3IgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoKS5cXG4tXFx0ICogVGhpcyB3aWxsIE5PVCBjYXVzZSBmcmFnbWVudGF0aW9uIGluIGRpcmVjdCBtYXAsIGFzIHdlIGRvIG5vdFxcbi1cXHQgKiBjYWxsIHNldF9tZW1vcnlfKigpIG9uIHRoaXMgYnVmZmVyLlxcbiBcXHQgKlxcbiBcXHQgKiBXZSBjYW5ub3QgdXNlIGt2bWFsbG9jIGhlcmUsIGJlY2F1c2Ugd2UgbmVlZCBpbWFnZSB0byBiZSBpblxcbiBcXHQgKiBtb2R1bGUgbWVtb3J5IHJhbmdlLlxcbitcXHQgKiBTaW5jZSBpdCBtdXN0IGJlIHdyaXRhYmxlIHVzZSBicGZfaml0X2FsbG9jX2V4ZWNfcncoKS5cXG4gXFx0ICovXFxuLVxcdGltYWdlID0gYnBmX2ppdF9hbGxvY19leGVjKFBBR0VfU0laRSk7XFxuK1xcdGltYWdlID0gYnBmX2ppdF9hbGxvY19leGVjX3J3KFBBR0VfU0laRSk7XFxuIFxcdGlmICghaW1hZ2UpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcXG5pbmRleCAxNGFjYjI0NTU3NDZmYy4uMzJkNTI5N2M1NTdlNWIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcXG5AQCAtMTMzMyw2ICsxMzMzLDcgQEAgYnBmX2ppdF9iaW5hcnlfYWxsb2ModW5zaWduZWQgaW50IHByb2dsZW4sIHU4ICoqaW1hZ2VfcHRyLFxcbiB2b2lkIGJwZl9qaXRfYmluYXJ5X2ZyZWUoc3RydWN0IGJwZl9iaW5hcnlfaGVhZGVyICpoZHIpO1xcbiB1NjQgYnBmX2ppdF9hbGxvY19leGVjX2xpbWl0KHZvaWQpO1xcbiB2b2lkICpicGZfaml0X2FsbG9jX2V4ZWModW5zaWduZWQgbG9uZyBzaXplKTtcXG4rdm9pZCAqYnBmX2ppdF9hbGxvY19leGVjX3J3KHVuc2lnbmVkIGxvbmcgc2l6ZSk7XFxuIHZvaWQgYnBmX2ppdF9mcmVlX2V4ZWModm9pZCAqYWRkcik7XFxuIHZvaWQgYnBmX2ppdF9mcmVlKHN0cnVjdCBicGZfcHJvZyAqZnApO1xcbiBzdHJ1Y3QgYnBmX2JpbmFyeV9oZWFkZXIgKlxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NvcmUuYyBiL2tlcm5lbC9icGYvY29yZS5jXFxuaW5kZXggNDdmZTA0N2FkMzBiODguLmUyMDc2NjY3YjI0NTE3IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvY29yZS5jXFxuKysrIGIva2VybmVsL2JwZi9jb3JlLmNcXG5AQCAtOTE2LDYgKzkxNiwxMSBAQCBzdGF0aWMgTElTVF9IRUFEKHBhY2tfbGlzdCk7XFxuIFxcbiAjZGVmaW5lIEJQRl9QUk9HX0NIVU5LX0NPVU5UIChCUEZfUFJPR19QQUNLX1NJWkUgLyBCUEZfUFJPR19DSFVOS19TSVpFKVxcbiBcXG4rc3RhdGljIGJvb2wgYnBmX2ppdF9tZW1faXNfcm94KHZvaWQpXFxuK3tcXG4rXFx0cmV0dXJuIGV4ZWNtZW1faXNfcm94KEVYRUNNRU1fQlBGKTtcXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCBicGZfcHJvZ19wYWNrICphbGxvY19uZXdfcGFjayhicGZfaml0X2ZpbGxfaG9sZV90IGJwZl9maWxsX2lsbF9pbnNucylcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX3Byb2dfcGFjayAqcGFjaztcXG5AQCAtOTI3LDE2ICs5MzIsMTggQEAgc3RhdGljIHN0cnVjdCBicGZfcHJvZ19wYWNrICphbGxvY19uZXdfcGFjayhicGZfaml0X2ZpbGxfaG9sZV90IGJwZl9maWxsX2lsbF9pbnNcXG4gXFx0cGFjay1cXHUwMDNlcHRyID0gYnBmX2ppdF9hbGxvY19leGVjKEJQRl9QUk9HX1BBQ0tfU0laRSk7XFxuIFxcdGlmICghcGFjay1cXHUwMDNlcHRyKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4tXFx0YnBmX2ZpbGxfaWxsX2luc25zKHBhY2stXFx1MDAzZXB0ciwgQlBGX1BST0dfUEFDS19TSVpFKTtcXG4gXFx0Yml0bWFwX3plcm8ocGFjay1cXHUwMDNlYml0bWFwLCBCUEZfUFJPR19QQUNLX1NJWkUgLyBCUEZfUFJPR19DSFVOS19TSVpFKTtcXG4gXFxuIFxcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZicGZfcHJlZF9mbHVzaF9lbmFibGVkKSlcXG4gXFx0XFx0cGFjay1cXHUwMDNlYXJjaF9mbHVzaF9uZWVkZWQgPSB0cnVlO1xcbi1cXHRzZXRfdm1fZmx1c2hfcmVzZXRfcGVybXMocGFjay1cXHUwMDNlcHRyKTtcXG4tXFx0ZXJyID0gc2V0X21lbW9yeV9yb3goKHVuc2lnbmVkIGxvbmcpcGFjay1cXHUwMDNlcHRyLFxcbi1cXHRcXHRcXHQgICAgIEJQRl9QUk9HX1BBQ0tfU0laRSAvIFBBR0VfU0laRSk7XFxuLVxcdGlmIChlcnIpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAoIWJwZl9qaXRfbWVtX2lzX3JveCgpKSB7XFxuK1xcdFxcdGJwZl9maWxsX2lsbF9pbnNucyhwYWNrLVxcdTAwM2VwdHIsIEJQRl9QUk9HX1BBQ0tfU0laRSk7XFxuK1xcdFxcdHNldF92bV9mbHVzaF9yZXNldF9wZXJtcyhwYWNrLVxcdTAwM2VwdHIpO1xcbitcXHRcXHRlcnIgPSBzZXRfbWVtb3J5X3JveCgodW5zaWduZWQgbG9uZylwYWNrLVxcdTAwM2VwdHIsXFxuK1xcdFxcdFxcdFxcdCAgICAgQlBGX1BST0dfUEFDS19TSVpFIC8gUEFHRV9TSVpFKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4gXFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2cGFjay1cXHUwMDNlbGlzdCwgXFx1MDAyNnBhY2tfbGlzdCk7XFxuIFxcdHJldHVybiBwYWNrO1xcbiBcXG5AQCAtOTY1LDcgKzk3Miw3IEBAIHZvaWQgKmJwZl9wcm9nX3BhY2tfYWxsb2ModTMyIHNpemUsIGJwZl9qaXRfZmlsbF9ob2xlX3QgYnBmX2ZpbGxfaWxsX2luc25zLCBib29sXFxuIFxcdFxcdFxcdHByX3dhcm5fb25jZShcXFwiQlBGOiBQcmVkaWN0b3JzIG5vdCBmbHVzaGVkIGZvciBhbGxvY2F0aW9ucyBncmVhdGVyIHRoYW4gQlBGX1BST0dfUEFDS19TSVpFXFxcXG5cXFwiKTtcXG4gXFx0XFx0c2l6ZSA9IHJvdW5kX3VwKHNpemUsIFBBR0VfU0laRSk7XFxuIFxcdFxcdHB0ciA9IGJwZl9qaXRfYWxsb2NfZXhlYyhzaXplKTtcXG4tXFx0XFx0aWYgKHB0cikge1xcbitcXHRcXHRpZiAocHRyIFxcdTAwMjZcXHUwMDI2ICFicGZfaml0X21lbV9pc19yb3goKSkge1xcbiBcXHRcXHRcXHRpbnQgZXJyO1xcbiBcXG4gXFx0XFx0XFx0YnBmX2ZpbGxfaWxsX2luc25zKHB0ciwgc2l6ZSk7XFxuQEAgLTExMTYsMTIgKzExMjMsMTcgQEAgdm9pZCBicGZfaml0X3VuY2hhcmdlX21vZG1lbSh1MzIgc2l6ZSlcXG4gXFx0YXRvbWljX2xvbmdfc3ViKHNpemUsIFxcdTAwMjZicGZfaml0X2N1cnJlbnQpO1xcbiB9XFxuIFxcbi12b2lkICpfX3dlYWsgYnBmX2ppdF9hbGxvY19leGVjKHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG4rdm9pZCAqYnBmX2ppdF9hbGxvY19leGVjKHVuc2lnbmVkIGxvbmcgc2l6ZSlcXG4ge1xcbiBcXHRyZXR1cm4gZXhlY21lbV9hbGxvYyhFWEVDTUVNX0JQRiwgc2l6ZSk7XFxuIH1cXG4gXFxuLXZvaWQgX193ZWFrIGJwZl9qaXRfZnJlZV9leGVjKHZvaWQgKmFkZHIpXFxuK3ZvaWQgKmJwZl9qaXRfYWxsb2NfZXhlY19ydyh1bnNpZ25lZCBsb25nIHNpemUpXFxuK3tcXG4rXFx0cmV0dXJuIGV4ZWNtZW1fYWxsb2NfcncoRVhFQ01FTV9CUEYsIHNpemUpO1xcbit9XFxuK1xcbit2b2lkIGJwZl9qaXRfZnJlZV9leGVjKHZvaWQgKmFkZHIpXFxuIHtcXG4gXFx0ZXhlY21lbV9mcmVlKGFkZHIpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZGlzcGF0Y2hlci5jIGIva2VybmVsL2JwZi9kaXNwYXRjaGVyLmNcXG5pbmRleCBlYTJkNjBkYzFmZWViNy4uNzlmMGMyMjJjNTgzNDAgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9kaXNwYXRjaGVyLmNcXG4rKysgYi9rZXJuZWwvYnBmL2Rpc3BhdGNoZXIuY1xcbkBAIC0xNDgsNyArMTQ4LDEwIEBAIHZvaWQgYnBmX2Rpc3BhdGNoZXJfY2hhbmdlX3Byb2coc3RydWN0IGJwZl9kaXNwYXRjaGVyICpkLCBzdHJ1Y3QgYnBmX3Byb2cgKmZyb20sXFxuIFxcdFxcdGQtXFx1MDAzZWltYWdlID0gYnBmX3Byb2dfcGFja19hbGxvYyhQQUdFX1NJWkUsIGJwZl9qaXRfZmlsbF9ob2xlX3dpdGhfemVybywgZmFsc2UpO1xcbiBcXHRcXHRpZiAoIWQtXFx1MDAzZWltYWdlKVxcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4tXFx0XFx0ZC1cXHUwMDNlcndfaW1hZ2UgPSBicGZfaml0X2FsbG9jX2V4ZWMoUEFHRV9TSVpFKTtcXG4rXFx0XFx0LyogZC1cXHUwMDNlcndfaW1hZ2UgZG9lc24ndCBuZWVkIHRvIGJlIGluIG1vZHVsZSBtZW1vcnkgcmFuZ2UsIHNvIHdlXFxuK1xcdFxcdCAqIGNhbiB1c2UgdnphbGxvYy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGQtXFx1MDAzZXJ3X2ltYWdlID0gdnphbGxvYyhQQUdFX1NJWkUpO1xcbiBcXHRcXHRpZiAoIWQtXFx1MDAzZXJ3X2ltYWdlKSB7XFxuIFxcdFxcdFxcdGJwZl9wcm9nX3BhY2tfZnJlZShkLVxcdTAwM2VpbWFnZSwgUEFHRV9TSVpFKTtcXG4gXFx0XFx0XFx0ZC1cXHUwMDNlaW1hZ2UgPSBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxMzoxMDoyOS44OTgzMTM5MzdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3OTcwNDgzMTM2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiRVhFQ01FTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jX25ld19wYWNrXCIsXG4gICAgXCJicGZfcHJvZ19wYWNrX2FsbG9jXCIsXG4gICAgXCJhcmNoX2JwZl90cmFtcG9saW5lX3NpemVcIixcbiAgICBcImJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIEpJVCBtZW1vcnkgYWxsb2NhdGlvbiBsb2dpYywgaW50cm9kdWNpbmcgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AgYW5kIHVwZGF0aW5nIGBicGZfaml0X2FsbG9jX2V4ZWNgIHRvIHVzZSBgZXhlY21lbV9hbGxvY2AuIEl0IGFsc28gY2hhbmdlcyB4ODYgQlBGIEpJVCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gYW5kIHVwZGF0ZXMgQlBGIHRyYW1wb2xpbmUgYW5kIGRpc3BhdGNoZXIgbG9naWMgdG8gdXNlIHRoZSBuZXcgYWxsb2NhdGlvbiBtZXRob2RzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIEJQRiBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5ZGE3MTQwZDEyZjFmNjdiNDgxYjA1ZDA0MGMzZDk0ZWQ1N2FiZDdkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMTYgMTM6MTA6MjcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pbml0LmMgYi9hcmNoL3g4Ni9tbS9pbml0LmNcbmluZGV4IGZiNjcyMTdmZGRjZDM3Li4wNzlmOGM3ZTllM2NkZSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L21tL2luaXQuY1xuKysrIGIvYXJjaC94ODYvbW0vaW5pdC5jXG5AQCAtMTEwNywxMCArMTEwNywxMCBAQCBzdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpXG4gXHRcdFx0XHQuYWxpZ25tZW50ID0gTU9EVUxFX0FMSUdOLFxuIFx0XHRcdH0sXG4gXHRcdFx0W0VYRUNNRU1fQlBGXSA9IHtcbi1cdFx0XHRcdC5mbGFnc1x0PSBFWEVDTUVNX0tBU0FOX1NIQURPVyxcbitcdFx0XHRcdC5mbGFnc1x0PSBmbGFncyxcbiBcdFx0XHRcdC5zdGFydFx0PSBzdGFydCxcbiBcdFx0XHRcdC5lbmRcdD0gTU9EVUxFU19FTkQsXG4tXHRcdFx0XHQucGdwcm90XHQ9IFBBR0VfS0VSTkVMLFxuK1x0XHRcdFx0LnBncHJvdFx0PSBwZ3Byb3QsXG4gXHRcdFx0XHQuYWxpZ25tZW50ID0gTU9EVUxFX0FMSUdOLFxuIFx0XHRcdH0sXG4gXHRcdFx0W0VYRUNNRU1fTU9EVUxFX0RBVEFdID0ge1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuaW5kZXggZGU3NTE1ZWExYmVhZTguLmIyZmVlYzgxZTIzMTJlIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG4rKysgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbkBAIC0zNzAzLDEzICszNzAzLDEyIEBAIGludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXG4gXHRpbnQgcmV0O1xuIFxuIFx0LyogQWxsb2NhdGUgYSB0ZW1wb3JhcnkgYnVmZmVyIGZvciBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZSgpLlxuLVx0ICogVGhpcyB3aWxsIE5PVCBjYXVzZSBmcmFnbWVudGF0aW9uIGluIGRpcmVjdCBtYXAsIGFzIHdlIGRvIG5vdFxuLVx0ICogY2FsbCBzZXRfbWVtb3J5XyooKSBvbiB0aGlzIGJ1ZmZlci5cbiBcdCAqXG4gXHQgKiBXZSBjYW5ub3QgdXNlIGt2bWFsbG9jIGhlcmUsIGJlY2F1c2Ugd2UgbmVlZCBpbWFnZSB0byBiZSBpblxuIFx0ICogbW9kdWxlIG1lbW9yeSByYW5nZS5cbitcdCAqIFNpbmNlIGl0IG11c3QgYmUgd3JpdGFibGUgdXNlIGJwZl9qaXRfYWxsb2NfZXhlY19ydygpLlxuIFx0ICovXG4tXHRpbWFnZSA9IGJwZl9qaXRfYWxsb2NfZXhlYyhQQUdFX1NJWkUpO1xuK1x0aW1hZ2UgPSBicGZfaml0X2FsbG9jX2V4ZWNfcncoUEFHRV9TSVpFKTtcbiBcdGlmICghaW1hZ2UpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmggYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG5pbmRleCAxNGFjYjI0NTU3NDZmYy4uMzJkNTI5N2M1NTdlNWIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oXG5AQCAtMTMzMyw2ICsxMzMzLDcgQEAgYnBmX2ppdF9iaW5hcnlfYWxsb2ModW5zaWduZWQgaW50IHByb2dsZW4sIHU4ICoqaW1hZ2VfcHRyLFxuIHZvaWQgYnBmX2ppdF9iaW5hcnlfZnJlZShzdHJ1Y3QgYnBmX2JpbmFyeV9oZWFkZXIgKmhkcik7XG4gdTY0IGJwZl9qaXRfYWxsb2NfZXhlY19saW1pdCh2b2lkKTtcbiB2b2lkICpicGZfaml0X2FsbG9jX2V4ZWModW5zaWduZWQgbG9uZyBzaXplKTtcbit2b2lkICpicGZfaml0X2FsbG9jX2V4ZWNfcncodW5zaWduZWQgbG9uZyBzaXplKTtcbiB2b2lkIGJwZl9qaXRfZnJlZV9leGVjKHZvaWQgKmFkZHIpO1xuIHZvaWQgYnBmX2ppdF9mcmVlKHN0cnVjdCBicGZfcHJvZyAqZnApO1xuIHN0cnVjdCBicGZfYmluYXJ5X2hlYWRlciAqXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jb3JlLmMgYi9rZXJuZWwvYnBmL2NvcmUuY1xuaW5kZXggNDdmZTA0N2FkMzBiODguLmUyMDc2NjY3YjI0NTE3IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9jb3JlLmNcbisrKyBiL2tlcm5lbC9icGYvY29yZS5jXG5AQCAtOTE2LDYgKzkxNiwxMSBAQCBzdGF0aWMgTElTVF9IRUFEKHBhY2tfbGlzdCk7XG4gXG4gI2RlZmluZSBCUEZfUFJPR19DSFVOS19DT1VOVCAoQlBGX1BST0dfUEFDS19TSVpFIC8gQlBGX1BST0dfQ0hVTktfU0laRSlcbiBcbitzdGF0aWMgYm9vbCBicGZfaml0X21lbV9pc19yb3godm9pZClcbit7XG4rXHRyZXR1cm4gZXhlY21lbV9pc19yb3goRVhFQ01FTV9CUEYpO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IGJwZl9wcm9nX3BhY2sgKmFsbG9jX25ld19wYWNrKGJwZl9qaXRfZmlsbF9ob2xlX3QgYnBmX2ZpbGxfaWxsX2luc25zKVxuIHtcbiBcdHN0cnVjdCBicGZfcHJvZ19wYWNrICpwYWNrO1xuQEAgLTkyNywxNiArOTMyLDE4IEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2dfcGFjayAqYWxsb2NfbmV3X3BhY2soYnBmX2ppdF9maWxsX2hvbGVfdCBicGZfZmlsbF9pbGxfaW5zXG4gXHRwYWNrLVx1MDAzZXB0ciA9IGJwZl9qaXRfYWxsb2NfZXhlYyhCUEZfUFJPR19QQUNLX1NJWkUpO1xuIFx0aWYgKCFwYWNrLVx1MDAzZXB0cilcbiBcdFx0Z290byBvdXQ7XG4tXHRicGZfZmlsbF9pbGxfaW5zbnMocGFjay1cdTAwM2VwdHIsIEJQRl9QUk9HX1BBQ0tfU0laRSk7XG4gXHRiaXRtYXBfemVybyhwYWNrLVx1MDAzZWJpdG1hcCwgQlBGX1BST0dfUEFDS19TSVpFIC8gQlBGX1BST0dfQ0hVTktfU0laRSk7XG4gXG4gXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZicGZfcHJlZF9mbHVzaF9lbmFibGVkKSlcbiBcdFx0cGFjay1cdTAwM2VhcmNoX2ZsdXNoX25lZWRlZCA9IHRydWU7XG4tXHRzZXRfdm1fZmx1c2hfcmVzZXRfcGVybXMocGFjay1cdTAwM2VwdHIpO1xuLVx0ZXJyID0gc2V0X21lbW9yeV9yb3goKHVuc2lnbmVkIGxvbmcpcGFjay1cdTAwM2VwdHIsXG4tXHRcdFx0ICAgICBCUEZfUFJPR19QQUNLX1NJWkUgLyBQQUdFX1NJWkUpO1xuLVx0aWYgKGVycilcbi1cdFx0Z290byBvdXQ7XG4rXHRpZiAoIWJwZl9qaXRfbWVtX2lzX3JveCgpKSB7XG4rXHRcdGJwZl9maWxsX2lsbF9pbnNucyhwYWNrLVx1MDAzZXB0ciwgQlBGX1BST0dfUEFDS19TSVpFKTtcbitcdFx0c2V0X3ZtX2ZsdXNoX3Jlc2V0X3Blcm1zKHBhY2stXHUwMDNlcHRyKTtcbitcdFx0ZXJyID0gc2V0X21lbW9yeV9yb3goKHVuc2lnbmVkIGxvbmcpcGFjay1cdTAwM2VwdHIsXG4rXHRcdFx0XHQgICAgIEJQRl9QUk9HX1BBQ0tfU0laRSAvIFBBR0VfU0laRSk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0Z290byBvdXQ7XG4rXHR9XG4gXHRsaXN0X2FkZF90YWlsKFx1MDAyNnBhY2stXHUwMDNlbGlzdCwgXHUwMDI2cGFja19saXN0KTtcbiBcdHJldHVybiBwYWNrO1xuIFxuQEAgLTk2NSw3ICs5NzIsNyBAQCB2b2lkICpicGZfcHJvZ19wYWNrX2FsbG9jKHUzMiBzaXplLCBicGZfaml0X2ZpbGxfaG9sZV90IGJwZl9maWxsX2lsbF9pbnNucywgYm9vbFxuIFx0XHRcdHByX3dhcm5fb25jZShcIkJQRjogUHJlZGljdG9ycyBub3QgZmx1c2hlZCBmb3IgYWxsb2NhdGlvbnMgZ3JlYXRlciB0aGFuIEJQRl9QUk9HX1BBQ0tfU0laRVxcblwiKTtcbiBcdFx0c2l6ZSA9IHJvdW5kX3VwKHNpemUsIFBBR0VfU0laRSk7XG4gXHRcdHB0ciA9IGJwZl9qaXRfYWxsb2NfZXhlYyhzaXplKTtcbi1cdFx0aWYgKHB0cikge1xuK1x0XHRpZiAocHRyIFx1MDAyNlx1MDAyNiAhYnBmX2ppdF9tZW1faXNfcm94KCkpIHtcbiBcdFx0XHRpbnQgZXJyO1xuIFxuIFx0XHRcdGJwZl9maWxsX2lsbF9pbnNucyhwdHIsIHNpemUpO1xuQEAgLTExMTYsMTIgKzExMjMsMTcgQEAgdm9pZCBicGZfaml0X3VuY2hhcmdlX21vZG1lbSh1MzIgc2l6ZSlcbiBcdGF0b21pY19sb25nX3N1YihzaXplLCBcdTAwMjZicGZfaml0X2N1cnJlbnQpO1xuIH1cbiBcbi12b2lkICpfX3dlYWsgYnBmX2ppdF9hbGxvY19leGVjKHVuc2lnbmVkIGxvbmcgc2l6ZSlcbit2b2lkICpicGZfaml0X2FsbG9jX2V4ZWModW5zaWduZWQgbG9uZyBzaXplKVxuIHtcbiBcdHJldHVybiBleGVjbWVtX2FsbG9jKEVYRUNNRU1fQlBGLCBzaXplKTtcbiB9XG4gXG4tdm9pZCBfX3dlYWsgYnBmX2ppdF9mcmVlX2V4ZWModm9pZCAqYWRkcilcbit2b2lkICpicGZfaml0X2FsbG9jX2V4ZWNfcncodW5zaWduZWQgbG9uZyBzaXplKVxuK3tcbitcdHJldHVybiBleGVjbWVtX2FsbG9jX3J3KEVYRUNNRU1fQlBGLCBzaXplKTtcbit9XG4rXG4rdm9pZCBicGZfaml0X2ZyZWVfZXhlYyh2b2lkICphZGRyKVxuIHtcbiBcdGV4ZWNtZW1fZnJlZShhZGRyKTtcbiB9XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9kaXNwYXRjaGVyLmMgYi9rZXJuZWwvYnBmL2Rpc3BhdGNoZXIuY1xuaW5kZXggZWEyZDYwZGMxZmVlYjcuLjc5ZjBjMjIyYzU4MzQwIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9kaXNwYXRjaGVyLmNcbisrKyBiL2tlcm5lbC9icGYvZGlzcGF0Y2hlci5jXG5AQCAtMTQ4LDcgKzE0OCwxMCBAQCB2b2lkIGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nKHN0cnVjdCBicGZfZGlzcGF0Y2hlciAqZCwgc3RydWN0IGJwZl9wcm9nICpmcm9tLFxuIFx0XHRkLVx1MDAzZWltYWdlID0gYnBmX3Byb2dfcGFja19hbGxvYyhQQUdFX1NJWkUsIGJwZl9qaXRfZmlsbF9ob2xlX3dpdGhfemVybywgZmFsc2UpO1xuIFx0XHRpZiAoIWQtXHUwMDNlaW1hZ2UpXG4gXHRcdFx0Z290byBvdXQ7XG4tXHRcdGQtXHUwMDNlcndfaW1hZ2UgPSBicGZfaml0X2FsbG9jX2V4ZWMoUEFHRV9TSVpFKTtcbitcdFx0LyogZC1cdTAwM2Vyd19pbWFnZSBkb2Vzbid0IG5lZWQgdG8gYmUgaW4gbW9kdWxlIG1lbW9yeSByYW5nZSwgc28gd2VcbitcdFx0ICogY2FuIHVzZSB2emFsbG9jLlxuK1x0XHQgKi9cbitcdFx0ZC1cdTAwM2Vyd19pbWFnZSA9IHZ6YWxsb2MoUEFHRV9TSVpFKTtcbiBcdFx0aWYgKCFkLVx1MDAzZXJ3X2ltYWdlKSB7XG4gXHRcdFx0YnBmX3Byb2dfcGFja19mcmVlKGQtXHUwMDNlaW1hZ2UsIFBBR0VfU0laRSk7XG4gXHRcdFx0ZC1cdTAwM2VpbWFnZSA9IE5VTEw7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxMzoxMDoyOS44OTgzMTU1MTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDA1NzgzNDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJQRiBKSVQgTWVtb3J5IEFsbG9jYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIFwiQWgsIGl0J3MgbWVzc2luZyB3aXRoIEJQRiBKSVQgbWVtb3J5IGFsbG9jYXRpb24uXCIgU3BlY2lmaWNhbGx5LCBJIHNlZSBpdCdzIHRvdWNoaW5nIGBicGZfaml0X2FsbG9jX2V4ZWNgLCBpbnRyb2R1Y2luZyBgYnBmX2ppdF9hbGxvY19leGVjX3J3YCwgYW5kIHRoZW4gdGhlcmUgYXJlIGNoYW5nZXMgdG8gYGFyY2gveDg2L21tL2luaXQuY2AuIEludGVyZXN0aW5nLiBUaGUgYGluaXQuY2AgY2hhbmdlcyBsb29rIGxpa2UgdGhleSdyZSBtYWtpbmcgdGhpbmdzIG1vcmUgZmxleGlibGUgYnkgdXNpbmcgYGZsYWdzYCBhbmQgYHBncHJvdGAgaW5zdGVhZCBvZiB0aG9zZSBoYXJkY29kZWQgY29uc3RhbnRzIChgRVhFQ01FTV9LQVNBTl9TSEFET1dgLCBgUEFHRV9LRVJORUxgKSBmb3IgYEVYRUNNRU1fQlBGYC4gQSBnb29kIGRlc2lnbiBkZWNpc2lvbi5cblxuVGhlbiB0aGVyZSdzIHRoZSBgYnBmX2Rpc3BhdGNoZXJfY2hhbmdlX3Byb2dgIGNoYW5nZS4gSXTigJlzIHVzaW5nIGB2emFsbG9jYCBmb3IgYGQtXHUwMDNlcndfaW1hZ2VgIG5vdywgaW5zdGVhZCBvZiB0aGUgcG90ZW50aWFsbHkgbW9yZSBzcGVjaWZpYyBhbGxvY2F0aW9uIG9mIGBicGZfaml0X2FsbG9jX2V4ZWNgLiBBbmQgdGhlcmUncyBhbHNvIGEgbmV3IGZ1bmN0aW9uLCBgYnBmX2ppdF9tZW1faXNfcm94KClgLCBhcHBlYXJpbmcgaW4gYGtlcm5lbC9icGYvY29yZS5jYC4gSG1tLCBhIG5ldyBwcmltaXRpdmU/XG5cbkFscmlnaHQsIHRoaXMgaXMgZnVuZGFtZW50YWwuIFRoaXMgcGF0Y2ggY2xlYXJseSBtb2RpZmllcyB0aGUgY29yZSBCUEYgSklUIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCB4ODYgQlBGIEpJVCBzcGVjaWZpY2FsbHkuIEdpdmVuIEJQRidzIHdpZGVzcHJlYWQgdXNhZ2UsIHRoaXMgZGVmaW5pdGVseSBpcyByZWFjaGFibGUuIEl0IHNlZXMgYSBsb3Qgb2YgdXNlLiBJcyBpdCBmdXp6YWJsZT8gQWJzb2x1dGVseS4gSXTigJlzIGZ1bmN0aW9uYWwsIHNvIGl0IHNob3VsZCBiZS5cblxuT2theSwgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBhcmNoL3g4Ni9tbS9pbml0LmNgIGFuZCBzZWUgZXhhY3RseSB3aGF0IHRob3NlIGBmbGFnc2AgYW5kIGBwZ3Byb3RgIGFyZS4gSSdsbCBnZXQgdGhlIGRldGFpbHMgb24gdGhlIHVzZSBvZiBgcmVhZC1maWxlYCBhcm91bmQgbGluZSAxMTA3Li4uIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzMzLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjczLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTM6MTA6MzUuOTA0MTAwNzk0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvbW0vaW5pdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwOTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwOTA6XFx0XFx0XFx0XFx0XFx0LnN0YXJ0XFx0PSBzdGFydCxcXG4xMDkxOlxcdFxcdFxcdFxcdFxcdC5lbmRcXHQ9IE1PRFVMRVNfRU5ELFxcbjEwOTI6XFx0XFx0XFx0XFx0XFx0LnBncHJvdFxcdD0gcGdwcm90LFxcbjEwOTM6XFx0XFx0XFx0XFx0XFx0LmFsaWdubWVudCA9IE1PRFVMRV9BTElHTixcXG4xMDk0OlxcdFxcdFxcdFxcdH0sXFxuMTA5NTpcXHRcXHRcXHRcXHRbRVhFQ01FTV9LUFJPQkVTXSA9IHtcXG4xMDk2OlxcdFxcdFxcdFxcdFxcdC5mbGFnc1xcdD0gZmxhZ3MsXFxuMTA5NzpcXHRcXHRcXHRcXHRcXHQuc3RhcnRcXHQ9IHN0YXJ0LFxcbjEwOTg6XFx0XFx0XFx0XFx0XFx0LmVuZFxcdD0gTU9EVUxFU19FTkQsXFxuMTA5OTpcXHRcXHRcXHRcXHRcXHQucGdwcm90XFx0PSBQQUdFX0tFUk5FTF9ST1gsXFxuMTEwMDpcXHRcXHRcXHRcXHRcXHQuYWxpZ25tZW50ID0gTU9EVUxFX0FMSUdOLFxcbjExMDE6XFx0XFx0XFx0XFx0fSxcXG4xMTAyOlxcdFxcdFxcdFxcdFtFWEVDTUVNX0ZUUkFDRV0gPSB7XFxuMTEwMzpcXHRcXHRcXHRcXHRcXHQuZmxhZ3NcXHQ9IGZsYWdzLFxcbjExMDQ6XFx0XFx0XFx0XFx0XFx0LnN0YXJ0XFx0PSBzdGFydCxcXG4xMTA1OlxcdFxcdFxcdFxcdFxcdC5lbmRcXHQ9IE1PRFVMRVNfRU5ELFxcbjExMDY6XFx0XFx0XFx0XFx0XFx0LnBncHJvdFxcdD0gcGdwcm90LFxcbjExMDc6XFx0XFx0XFx0XFx0XFx0LmFsaWdubWVudCA9IE1PRFVMRV9BTElHTixcXG4xMTA4OlxcdFxcdFxcdFxcdH0sXFxuMTEwOTpcXHRcXHRcXHRcXHRbRVhFQ01FTV9CUEZdID0ge1xcbjExMTA6XFx0XFx0XFx0XFx0XFx0LmZsYWdzXFx0PSBmbGFncyxcXG4xMTExOlxcdFxcdFxcdFxcdFxcdC5zdGFydFxcdD0gc3RhcnQsXFxuMTExMjpcXHRcXHRcXHRcXHRcXHQuZW5kXFx0PSBNT0RVTEVTX0VORCxcXG4xMTEzOlxcdFxcdFxcdFxcdFxcdC5wZ3Byb3RcXHQ9IHBncHJvdCxcXG4xMTE0OlxcdFxcdFxcdFxcdFxcdC5hbGlnbm1lbnQgPSBNT0RVTEVfQUxJR04sXFxuMTExNTpcXHRcXHRcXHRcXHR9LFxcbjExMTY6XFx0XFx0XFx0XFx0W0VYRUNNRU1fTU9EVUxFX0RBVEFdID0ge1xcbjExMTc6XFx0XFx0XFx0XFx0XFx0LmZsYWdzXFx0PSBFWEVDTUVNX0tBU0FOX1NIQURPVyxcXG4xMTE4OlxcdFxcdFxcdFxcdFxcdC5zdGFydFxcdD0gc3RhcnQsXFxuMTExOTpcXHRcXHRcXHRcXHRcXHQuZW5kXFx0PSBNT0RVTEVTX0VORCxcXG4xMTIwOlxcdFxcdFxcdFxcdFxcdC5wZ3Byb3RcXHQ9IFBBR0VfS0VSTkVMLFxcbjExMjE6XFx0XFx0XFx0XFx0XFx0LmFsaWdubWVudCA9IE1PRFVMRV9BTElHTixcXG4xMTIyOlxcdFxcdFxcdFxcdH0sXFxuMTEyMzpcXHRcXHRcXHR9LFxcbjExMjQ6XFx0XFx0fTtcXG4xMTI1OlxcdFxcbjExMjY6XFx0XFx0cmV0dXJuIFxcdTAwMjZleGVjbWVtX2luZm87XFxuMTEyNzpcXHR9XFxuMTEyODpcXHQjZW5kaWYgLyogQ09ORklHX0VYRUNNRU0gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTM6MTA6MzUuOTA0MTkzNTA0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODcyNzExMTA0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlY2VudCBDb2RlIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIHRoZXNlIG1lbW9yeSBhbGxvY2F0aW9uIHVwZGF0ZXMuIFRoZSBjb3JlIGFyY2hpdGVjdHVyYWwgc2V0dXAgYWRqdXN0bWVudHMgc2VlbSB0byBiZSBuZXN0bGVkIHdpdGhpbiBgYXJjaC94ODYvbW0vaW5pdC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgZXhlY21lbV9hcmNoX3NldHVwYCBmdW5jdGlvbi4gVGhhdCdzIHRoZSBmaXJzdCBrZXkgYXJlYSB0byB1bmRlcnN0YW5kLiBUaGVuLCBpdCBsb29rcyBsaWtlIHRoZSBhY3R1YWwgQlBGIEpJVCBtZW1vcnkgYWxsb2NhdGlvbiBoYXBwZW5zIGluIGBrZXJuZWwvYnBmL2NvcmUuY2Ag4oCTIHNwZWNpZmljYWxseSB0aGUgYGJwZl9qaXRfYWxsb2NfZXhlY2AgYW5kIGBicGZfaml0X2FsbG9jX2V4ZWNfcndgIHJvdXRpbmVzLiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZTsgdGhlc2UgZnVuY3Rpb25zIGFyZSByZXNwb25zaWJsZSBmb3IgdGhlIGp1c3QtaW4tdGltZSBjb21waWxhdGlvbiBhbmQgcmVsYXRlZCBtZW1vcnkuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGtlcm5lbC9icGYvY29yZS5jYCwgcHJvYmFibHkgc3RhcnRpbmcgYXJvdW5kIGxpbmUgOTE2LiBUaGF0J3MgbGlrZWx5IHdoZXJlIHRoZSBhbGxvY2F0aW9uIHN0cmF0ZWd5IGl0c2VsZiBpcyBpbXBsZW1lbnRlZCwgc28gbGV0J3Mgc2VlIHdoYXQncyBnb2luZyBvbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk2OCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTM6MTA6NDQuNjMxMzA3MjJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTc0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTEwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTEwOlxcdCAqIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAyTUIuXFxuIDkxMTpcXHQgKi9cXG4gOTEyOlxcdCNkZWZpbmUgQlBGX1BST0dfUEFDS19TSVpFIChTWl8yTSAqIG51bV9wb3NzaWJsZV9ub2RlcygpKVxcbiA5MTM6XFx0I2Vsc2VcXG4gOTE0OlxcdCNkZWZpbmUgQlBGX1BST0dfUEFDS19TSVpFIFBBR0VfU0laRVxcbiA5MTU6XFx0I2VuZGlmXFxuIDkxNjpcXHRcXG4gOTE3OlxcdCNkZWZpbmUgQlBGX1BST0dfQ0hVTktfQ09VTlQgKEJQRl9QUk9HX1BBQ0tfU0laRSAvIEJQRl9QUk9HX0NIVU5LX1NJWkUpXFxuIDkxODpcXHRcXG4gOTE5OlxcdHN0YXRpYyBib29sIGJwZl9qaXRfbWVtX2lzX3JveCh2b2lkKVxcbiA5MjA6XFx0e1xcbiA5MjE6XFx0XFx0cmV0dXJuIGV4ZWNtZW1faXNfcm94KEVYRUNNRU1fQlBGKTtcXG4gOTIyOlxcdH1cXG4gOTIzOlxcdFxcbiA5MjQ6XFx0c3RhdGljIHN0cnVjdCBicGZfcHJvZ19wYWNrICphbGxvY19uZXdfcGFjayhicGZfaml0X2ZpbGxfaG9sZV90IGJwZl9maWxsX2lsbF9pbnNucylcXG4gOTI1OlxcdHtcXG4gOTI2OlxcdFxcdHN0cnVjdCBicGZfcHJvZ19wYWNrICpwYWNrO1xcbiA5Mjc6XFx0XFx0aW50IGVycjtcXG4gOTI4OlxcdFxcbiA5Mjk6XFx0XFx0cGFjayA9IGt6YWxsb2NfZmxleCgqcGFjaywgYml0bWFwLCBCSVRTX1RPX0xPTkdTKEJQRl9QUk9HX0NIVU5LX0NPVU5UKSk7XFxuIDkzMDpcXHRcXHRpZiAoIXBhY2spXFxuIDkzMTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gOTMyOlxcdFxcdHBhY2stXFx1MDAzZXB0ciA9IGJwZl9qaXRfYWxsb2NfZXhlYyhCUEZfUFJPR19QQUNLX1NJWkUpO1xcbiA5MzM6XFx0XFx0aWYgKCFwYWNrLVxcdTAwM2VwdHIpXFxuIDkzNDpcXHRcXHRcXHRnb3RvIG91dDtcXG4gOTM1OlxcdFxcdGJpdG1hcF96ZXJvKHBhY2stXFx1MDAzZWJpdG1hcCwgQlBGX1BST0dfUEFDS19TSVpFIC8gQlBGX1BST0dfQ0hVTktfU0laRSk7XFxuIDkzNjpcXHRcXG4gOTM3OlxcdFxcdGlmIChzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFxcdTAwMjZicGZfcHJlZF9mbHVzaF9lbmFibGVkKSlcXG4gOTM4OlxcdFxcdFxcdHBhY2stXFx1MDAzZWFyY2hfZmx1c2hfbmVlZGVkID0gdHJ1ZTtcXG4gOTM5OlxcdFxcdGlmICghYnBmX2ppdF9tZW1faXNfcm94KCkpIHtcXG4gOTQwOlxcdFxcdFxcdGJwZl9maWxsX2lsbF9pbnNucyhwYWNrLVxcdTAwM2VwdHIsIEJQRl9QUk9HX1BBQ0tfU0laRSk7XFxuIDk0MTpcXHRcXHRcXHRzZXRfdm1fZmx1c2hfcmVzZXRfcGVybXMocGFjay1cXHUwMDNlcHRyKTtcXG4gOTQyOlxcdFxcdFxcdGVyciA9IHNldF9tZW1vcnlfcm94KCh1bnNpZ25lZCBsb25nKXBhY2stXFx1MDAzZXB0cixcXG4gOTQzOlxcdFxcdFxcdFxcdFxcdCAgICAgQlBGX1BST0dfUEFDS19TSVpFIC8gUEFHRV9TSVpFKTtcXG4gOTQ0OlxcdFxcdFxcdGlmIChlcnIpXFxuIDk0NTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gOTQ2OlxcdFxcdH1cXG4gOTQ3OlxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNnBhY2stXFx1MDAzZWxpc3QsIFxcdTAwMjZwYWNrX2xpc3QpO1xcbiA5NDg6XFx0XFx0cmV0dXJuIHBhY2s7XFxuIDk0OTpcXHRcXG4gOTUwOlxcdG91dDpcXG4gOTUxOlxcdFxcdGJwZl9qaXRfZnJlZV9leGVjKHBhY2stXFx1MDAzZXB0cik7XFxuIDk1MjpcXHRcXHRrZnJlZShwYWNrKTtcXG4gOTUzOlxcdFxcdHJldHVybiBOVUxMO1xcbiA5NTQ6XFx0fVxcbiA5NTU6XFx0XFxuIDk1NjpcXHR2b2lkICpicGZfcHJvZ19wYWNrX2FsbG9jKHUzMiBzaXplLCBicGZfaml0X2ZpbGxfaG9sZV90IGJwZl9maWxsX2lsbF9pbnNucywgYm9vbCB3YXNfY2xhc3NpYylcXG4gOTU3OlxcdHtcXG4gOTU4OlxcdFxcdHVuc2lnbmVkIGludCBuYml0cyA9IEJQRl9QUk9HX1NJWkVfVE9fTkJJVFMoc2l6ZSk7XFxuIDk1OTpcXHRcXHRzdHJ1Y3QgYnBmX3Byb2dfcGFjayAqcGFjaywgKmZhbGxiYWNrX3BhY2sgPSBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxMzoxMDo0NC42MzE3MDkwNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MDM4NTk3MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBKSVQgQ29tcGlsYXRpb24gZm9yIE9wdGltaXphdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIGEgc3BlY2lmaWMgYXJlYSB3aXRoaW4gdGhlIEJQRiBKSVQgY29tcGlsYXRpb24gcHJvY2Vzcy4gVGhlIGNvcmUgZnVuY3Rpb25zIEkgc2hvdWxkIHByaW9yaXRpemUgZm9yIHRoaXMgYW5hbHlzaXMgYXJlOiBgYWxsb2NfbmV3X3BhY2tgLCBgYnBmX3Byb2dfcGFja19hbGxvY2AsIGBhcmNoX2JwZl90cmFtcG9saW5lX3NpemVgLCBhbmQgYGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYCBmZWVscyBsaWtlIGEgY3JpdGljYWwgcG9pbnQuIEhtbSwgaXQgc2VlbXMgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCBgYnBmX2ppdF9hbGxvY19leGVjX3J3YC4gUmlnaHQsIHRoYXQncyB3aGVyZSB0aGUgbWVtb3J5IGFsbG9jYXRpb24gYW5kIHBvdGVudGlhbCBjb2RlIGdlbmVyYXRpb24gd291bGQgaGFwcGVuLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgYWxsIGZpdHMgdG9nZXRoZXIuIEJlc3QgdG8ganVtcCBpbnRvIHRoZSBjb2RlIGFuZCBleGFtaW5lIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgIGFyb3VuZCBsaW5lIDM3MDMuIFRoYXQncyB0aGUgbGlrZWx5IGxvY2F0aW9uIGZvciBzb21lIGtleSBjaGFuZ2VzLiBHb3R0YSB1bmRlcnN0YW5kIGhvdyB0aGUgdHJhbXBvbGluZSBzaXplIGNhbGN1bGF0aW9uIHJlbGF0ZXMgdG8gdGhlIFJXIGFsbG9jYXRpb24gd2l0aGluIHRoZSBKSVQgZW52aXJvbm1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxNDQsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxMzoxMDo0OC41MzU1NzE5MzRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjk2NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNjkwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNjkwOlxcdFxcdHRtcCA9IGJwZl9hcmNoX3RleHRfY29weShpbWFnZSwgcndfaW1hZ2UsIHNpemUpO1xcbjM2OTE6XFx0XFx0aWYgKElTX0VSUih0bXApKVxcbjM2OTI6XFx0XFx0XFx0cmV0ID0gUFRSX0VSUih0bXApO1xcbjM2OTM6XFx0b3V0OlxcbjM2OTQ6XFx0XFx0a3ZmcmVlKHJ3X2ltYWdlKTtcXG4zNjk1OlxcdFxcdHJldHVybiByZXQ7XFxuMzY5NjpcXHR9XFxuMzY5NzpcXHRcXG4zNjk4OlxcdGludCBhcmNoX2JwZl90cmFtcG9saW5lX3NpemUoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1MzIgZmxhZ3MsXFxuMzY5OTpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfdHJhbXBfbm9kZXMgKnRub2Rlcywgdm9pZCAqZnVuY19hZGRyKVxcbjM3MDA6XFx0e1xcbjM3MDE6XFx0XFx0c3RydWN0IGJwZl90cmFtcF9pbWFnZSBpbTtcXG4zNzAyOlxcdFxcdHZvaWQgKmltYWdlO1xcbjM3MDM6XFx0XFx0aW50IHJldDtcXG4zNzA0OlxcdFxcbjM3MDU6XFx0XFx0LyogQWxsb2NhdGUgYSB0ZW1wb3JhcnkgYnVmZmVyIGZvciBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZSgpLlxcbjM3MDY6XFx0XFx0ICpcXG4zNzA3OlxcdFxcdCAqIFdlIGNhbm5vdCB1c2Uga3ZtYWxsb2MgaGVyZSwgYmVjYXVzZSB3ZSBuZWVkIGltYWdlIHRvIGJlIGluXFxuMzcwODpcXHRcXHQgKiBtb2R1bGUgbWVtb3J5IHJhbmdlLlxcbjM3MDk6XFx0XFx0ICogU2luY2UgaXQgbXVzdCBiZSB3cml0YWJsZSB1c2UgYnBmX2ppdF9hbGxvY19leGVjX3J3KCkuXFxuMzcxMDpcXHRcXHQgKi9cXG4zNzExOlxcdFxcdGltYWdlID0gYnBmX2ppdF9hbGxvY19leGVjX3J3KFBBR0VfU0laRSk7XFxuMzcxMjpcXHRcXHRpZiAoIWltYWdlKVxcbjM3MTM6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMzcxNDpcXHRcXG4zNzE1OlxcdFxcdHJldCA9IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKFxcdTAwMjZpbSwgaW1hZ2UsIGltYWdlICsgUEFHRV9TSVpFLCBpbWFnZSxcXG4zNzE2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBtLCBmbGFncywgdG5vZGVzLCBmdW5jX2FkZHIpO1xcbjM3MTc6XFx0XFx0YnBmX2ppdF9mcmVlX2V4ZWMoaW1hZ2UpO1xcbjM3MTg6XFx0XFx0cmV0dXJuIHJldDtcXG4zNzE5OlxcdH1cXG4zNzIwOlxcdFxcbjM3MjE6XFx0c3RhdGljIGludCBlbWl0X2JwZl9kaXNwYXRjaGVyKHU4ICoqcHByb2csIGludCBhLCBpbnQgYiwgczY0ICpwcm9ncywgdTggKmltYWdlLCB1OCAqYnVmKVxcbjM3MjI6XFx0e1xcbjM3MjM6XFx0XFx0dTggKmpnX3JlbG9jLCAqcHJvZyA9ICpwcHJvZztcXG4zNzI0OlxcdFxcdGludCBwaXZvdCwgZXJyLCBqZ19ieXRlcyA9IDE7XFxuMzcyNTpcXHRcXHRzNjQgamdfb2Zmc2V0O1xcbjM3MjY6XFx0XFxuMzcyNzpcXHRcXHRpZiAoYSA9PSBiKSB7XFxuMzcyODpcXHRcXHRcXHQvKiBMZWFmIG5vZGUgb2YgcmVjdXJzaW9uLCBpLmUuIG5vdCBhIHJhbmdlIG9mIGluZGljZXNcXG4zNzI5OlxcdFxcdFxcdCAqIGFueW1vcmUuXFxuMzczMDpcXHRcXHRcXHQgKi9cXG4zNzMxOlxcdFxcdFxcdEVNSVQxKGFkZF8xbW9kKDB4NDgsIEJQRl9SRUdfMykpO1xcdC8qIGNtcCByZHgsZnVuYyAqL1xcbjM3MzI6XFx0XFx0XFx0aWYgKCFpc19zaW1tMzIocHJvZ3NbYV0pKVxcbjM3MzM6XFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbjM3MzQ6XFx0XFx0XFx0RU1JVDJfb2ZmMzIoMHg4MSwgYWRkXzFyZWcoMHhGOCwgQlBGX1JFR18zKSxcXG4zNzM1OlxcdFxcdFxcdFxcdCAgICBwcm9nc1thXSk7XFxuMzczNjpcXHRcXHRcXHRlcnIgPSBlbWl0X2NvbmRfbmVhcl9qdW1wKFxcdTAwMjZwcm9nLFxcdC8qIGplIGZ1bmMgKi9cXG4zNzM3OlxcdFxcdFxcdFxcdFxcdFxcdCAgKHZvaWQgKilwcm9nc1thXSwgaW1hZ2UgKyAocHJvZyAtIGJ1ZiksXFxuMzczODpcXHRcXHRcXHRcXHRcXHRcXHQgIFg4Nl9KRSk7XFxuMzczOTpcXHRcXHRcXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxMzoxMDo0OC41Mzc4NzI5MjRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzM2OTYwNzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipCUEYgSklUIENvbXBpbGF0aW9uIENvbmZpZ3VyYXRpb24gVmVyaWZpY2F0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIEJQRiBKSVQgY29tcGlsYXRpb24gaXNzdWUuIEZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0J3MgdmVyaWZ5IHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb24gZmxhZ3MgYXJlIGVuYWJsZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19CUEZfSklUYCBpcyBzZXQsIG9idmlvdXNseS4gVGhlbiwgYmVjYXVzZSB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGUgaXMgaGFuZ2luZyBvdXQgaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AsIEknbGwgYWxzbyBjb25maXJtIHRoYXQgYENPTkZJR19YODZfNjRgIGlzIGNvbmZpZ3VyZWQsIHNpbmNlIHRoYXQgc2VlbXMgcmVsZXZhbnQgdG8gdGhhdCBwYXRoLiBGaW5hbGx5LCBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQsIGdpdmVuIHRoYXQgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtIHVzZXMgc3lzY2FsbHMuIFxuXG5XaXRoIHRob3NlIHByZXJlcXVpc2l0ZXMgY2hlY2tlZCBvZmYsIEknbGwgZ28gdGFrZSBhIGxvb2sgYXQgYGtlcm5lbC9icGYvZGlzcGF0Y2hlci5jYC4gTXkgaHVuY2ggaXMgdGhhdCB0aGVyZSdzIHNvbWV0aGluZyBwb3RlbnRpYWxseSBhd3J5IGFyb3VuZCBsaW5lIDE0OCwgc28gSSdsbCBzdGFydCB0aGVyZSBhbmQgdHJhY2UgdGhlIGxvZ2ljLiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyBpbiB0aGF0IGFyZWEuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZGlzcGF0Y2hlciBpcyBpbnRlcmFjdGluZyB3aXRoIHRoZSBKSVQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNTYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDEzOjEwOjUzLjI3NDgzODYzOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzMyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9kaXNwYXRjaGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTQwOlxcdFxcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xcbiAxNDE6XFx0XFx0aW50IHByZXZfbnVtX3Byb2dzO1xcbiAxNDI6XFx0XFxuIDE0MzpcXHRcXHRpZiAoZnJvbSA9PSB0bylcXG4gMTQ0OlxcdFxcdFxcdHJldHVybjtcXG4gMTQ1OlxcdFxcbiAxNDY6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZC1cXHUwMDNlbXV0ZXgpO1xcbiAxNDc6XFx0XFx0aWYgKCFkLVxcdTAwM2VpbWFnZSkge1xcbiAxNDg6XFx0XFx0XFx0ZC1cXHUwMDNlaW1hZ2UgPSBicGZfcHJvZ19wYWNrX2FsbG9jKFBBR0VfU0laRSwgYnBmX2ppdF9maWxsX2hvbGVfd2l0aF96ZXJvLCBmYWxzZSk7XFxuIDE0OTpcXHRcXHRcXHRpZiAoIWQtXFx1MDAzZWltYWdlKVxcbiAxNTA6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDE1MTpcXHRcXHRcXHQvKiBkLVxcdTAwM2Vyd19pbWFnZSBkb2Vzbid0IG5lZWQgdG8gYmUgaW4gbW9kdWxlIG1lbW9yeSByYW5nZSwgc28gd2VcXG4gMTUyOlxcdFxcdFxcdCAqIGNhbiB1c2UgdnphbGxvYy5cXG4gMTUzOlxcdFxcdFxcdCAqL1xcbiAxNTQ6XFx0XFx0XFx0ZC1cXHUwMDNlcndfaW1hZ2UgPSB2emFsbG9jKFBBR0VfU0laRSk7XFxuIDE1NTpcXHRcXHRcXHRpZiAoIWQtXFx1MDAzZXJ3X2ltYWdlKSB7XFxuIDE1NjpcXHRcXHRcXHRcXHRicGZfcHJvZ19wYWNrX2ZyZWUoZC1cXHUwMDNlaW1hZ2UsIFBBR0VfU0laRSk7XFxuIDE1NzpcXHRcXHRcXHRcXHRkLVxcdTAwM2VpbWFnZSA9IE5VTEw7XFxuIDE1ODpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gMTU5OlxcdFxcdFxcdH1cXG4gMTYwOlxcdFxcdFxcdGJwZl9pbWFnZV9rc3ltX2luaXQoZC1cXHUwMDNlaW1hZ2UsIFBBR0VfU0laRSwgXFx1MDAyNmQtXFx1MDAzZWtzeW0pO1xcbiAxNjE6XFx0XFx0XFx0YnBmX2ltYWdlX2tzeW1fYWRkKFxcdTAwMjZkLVxcdTAwM2Vrc3ltKTtcXG4gMTYyOlxcdFxcdH1cXG4gMTYzOlxcdFxcbiAxNjQ6XFx0XFx0cHJldl9udW1fcHJvZ3MgPSBkLVxcdTAwM2VudW1fcHJvZ3M7XFxuIDE2NTpcXHRcXHRjaGFuZ2VkIHw9IGJwZl9kaXNwYXRjaGVyX3JlbW92ZV9wcm9nKGQsIGZyb20pO1xcbiAxNjY6XFx0XFx0Y2hhbmdlZCB8PSBicGZfZGlzcGF0Y2hlcl9hZGRfcHJvZyhkLCB0byk7XFxuIDE2NzpcXHRcXG4gMTY4OlxcdFxcdGlmICghY2hhbmdlZClcXG4gMTY5OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAxNzA6XFx0XFxuIDE3MTpcXHRcXHRicGZfZGlzcGF0Y2hlcl91cGRhdGUoZCwgcHJldl9udW1fcHJvZ3MpO1xcbiAxNzI6XFx0b3V0OlxcbiAxNzM6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkLVxcdTAwM2VtdXRleCk7XFxuIDE3NDpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDEzOjEwOjUzLjI3NDk3NTA4OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDg1ODk2MTc4ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBCUEYgSklUIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGUgY29uZmlndXJhdGlvbiBmb3IgYGtlcm5lbC9icGYvZGlzcGF0Y2hlci5jYCBpcyBkcml2ZW4gYnkgYENPTkZJR19CUEZfSklUYC4gTXkgbmV4dCBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB2ZXJpZnkgd2hldGhlciB0aGUgY29tcGlsYXRpb24gb2YgYGRpc3BhdGNoZXIuY2AgaXMgYWN0dWFsbHkgY29uZGl0aW9uYWwgYmFzZWQgb24gdGhpcyBjb25maWcuIFRoZSBtb3N0IG9idmlvdXMgcGxhY2UgdG8gZG8gdGhhdCBpcyBpbiBga2VybmVsL2JwZi9NYWtlZmlsZWAuIEkgbmVlZCB0byBxdWlja2x5IGNyb3NzLXJlZmVyZW5jZSB0aGF0IGBNYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jeSBhbmQgdW5kZXJzdGFuZCB0aGUgYnVpbGQgcHJvY2Vzcy4gR290dGEgbWFrZSBzdXJlIHRoZSBKSVQgY29tcGlsZXIgZGVwZW5kZW5jeSBpcyBoYW5kbGVkIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI0OCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTM6MTI6NDEuODY0NTk2NDUyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0b2JqLXkgOj0gY29yZS5vXFxuICAgMzpcXHRpZm5lcSAoJChDT05GSUdfQlBGX0pJVF9BTFdBWVNfT04pLHkpXFxuICAgNDpcXHQjIF9fX2JwZl9wcm9nX3J1bigpIG5lZWRzIEdDU0UgZGlzYWJsZWQgb24geDg2OyBzZWUgMzE5M2MwODM2ZjIwMyBmb3IgZGV0YWlsc1xcbiAgIDU6XFx0Y2ZsYWdzLW5vZ2NzZS0kKENPTkZJR19YODYpJChDT05GSUdfQ0NfSVNfR0NDKSA6PSAtZm5vLWdjc2VcXG4gICA2OlxcdGVuZGlmXFxuICAgNzpcXHRDRkxBR1NfY29yZS5vICs9IC1Xbm8tb3ZlcnJpZGUtaW5pdCAkKGNmbGFncy1ub2djc2UteXkpXFxuICAgODpcXHRcXG4gICA5OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc3lzY2FsbC5vIHZlcmlmaWVyLm8gaW5vZGUubyBoZWxwZXJzLm8gdG51bS5vIGNudW0ubyBsb2cubyB0b2tlbi5vIGxpdmVuZXNzLm8gY29uc3RfZm9sZC5vXFxuICAxMDpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xcbiAgMTE6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub1xcbiAgMTI6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBsb2NhbF9zdG9yYWdlLm8gcXVldWVfc3RhY2tfbWFwcy5vIHJpbmdidWYubyBicGZfaW5zbl9hcnJheS5vXFxuICAxMzpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9sb2NhbF9zdG9yYWdlLm8gYnBmX3Rhc2tfc3RvcmFnZS5vXFxuICAxNDpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGZpeHVwcy5vIGNmZy5vIHN0YXRlcy5vIGJhY2t0cmFjay5vIGNoZWNrX2J0Zi5vXFxuICAxNTpcXHRvYmotJHtDT05GSUdfQlBGX0xTTX1cXHQgICs9IGJwZl9pbm9kZV9zdG9yYWdlLm9cXG4gIDE2OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gZGlzYXNtLm8gbXByb2cub1xcbiAgMTc6XFx0b2JqLSQoQ09ORklHX0JQRl9KSVQpICs9IHRyYW1wb2xpbmUub1xcbiAgMTg6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBidGYubyBtZW1hbGxvYy5vIHJxc3BpbmxvY2subyBzdHJlYW0ub1xcbiAgMTk6XFx0aWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcXG4gIDIwOlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYXJlbmEubyByYW5nZV90cmVlLm9cXG4gIDIxOlxcdGVuZGlmXFxuICAyMjpcXHRvYmotJChDT05GSUdfQlBGX0pJVCkgKz0gZGlzcGF0Y2hlci5vXFxuICAyMzpcXHRpZmVxICgkKENPTkZJR19ORVQpLHkpXFxuICAyNDpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGRldm1hcC5vXFxuICAyNTpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGNwdW1hcC5vXFxuICAyNjpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IG9mZmxvYWQub1xcbiAgMjc6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBuZXRfbmFtZXNwYWNlLm9cXG4gIDI4OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gdGN4Lm9cXG4gIDI5OlxcdGVuZGlmXFxuICAzMDpcXHRpZmVxICgkKENPTkZJR19QRVJGX0VWRU5UUykseSlcXG4gIDMxOlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc3RhY2ttYXAub1xcbiAgMzI6XFx0ZW5kaWZcXG4gIDMzOlxcdGlmZXEgKCQoQ09ORklHX0NHUk9VUFMpLHkpXFxuICAzNDpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGNncm91cF9pdGVyLm8gYnBmX2NncnBfc3RvcmFnZS5vXFxuICAzNTpcXHRlbmRpZlxcbiAgMzY6XFx0b2JqLSQoQ09ORklHX0NHUk9VUF9CUEYpICs9IGNncm91cC5vXFxuICAzNzpcXHRpZmVxICgkKENPTkZJR19JTkVUKSx5KVxcbiAgMzg6XFx0b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSByZXVzZXBvcnRfYXJyYXkub1xcbiAgMzk6XFx0ZW5kaWZcXG4gIDQwOlxcdGlmZXEgKCQoQ09ORklHX1NZU0ZTKSx5KVxcbiAgNDE6XFx0b2JqLSQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSArPSBzeXNmc19idGYub1xcbiAgNDI6XFx0ZW5kaWZcXG4gIDQzOlxcdGlmZXEgKCQoQ09ORklHX0JQRl9KSVQpLHkpXFxuICA0NDpcXHRvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9zdHJ1Y3Rfb3BzLm9cXG4gIDQ1OlxcdG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gY3B1bWFzay5vXFxuICA0NjpcXHQjIGJwZl9sc21fcHJvdG8ubyBtdXN0IHByZWNlZGUgYnBmX2xzbS5vLiBUaGUgY3VycmVudCBwYWhvbGUgbG9naWNcXG4gIDQ3OlxcdCMgZGVkdXBsaWNhdGVzIGZ1bmN0aW9uIHByb3RvdHlwZXMgd2l0aGluXFxuICA0ODpcXHQjIGJ0Zl9lbmNvZGVyX19hZGRfc2F2ZWRfZnVuYygpIGJ5IGtlZXBpbmcgdGhlIGZpcnN0IGluc3RhbmNlIHNlZW4uIFdlXFxuICA0OTpcXHQjIG5lZWQgdGhlIGZ1bmN0aW9uIHByb3RvdHlwZShzKSBpbiBicGZfbHNtX3Byb3RvLm8gdG8gdGFrZSBwcmVjZWRlbmNlXFxuICA1MDpcXHQjIG92ZXIgdGhvc2Ugd2l0aGluIGJwZl9sc20uby4gSGF2aW5nIGJwZl9sc21fcHJvdG8ubyBwcmVjZWRlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDEzOjEyOjQxLjg2NDcyMjU1MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTk0ODcwNzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyBmb3IgQlBGIEpJVCBhbmQgUmVsYXRlZCBGZWF0dXJlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYnVpbGQgY29uZmlndXJhdGlvbiBhbmQgaXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gbWFrZSBzdXJlIGBDT05GSUdfQlBGX0pJVGAgaXMgZW5hYmxlZCDigJMgdGhhdCdzIGEgZ2l2ZW4uIEkga25ldyB0aGF0LCBvZiBjb3Vyc2UsIGJ1dCBpdCdzIGdvb2QgdG8gY29uZmlybS4gVGhlbiBJIGFsc28gbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZDsgdGhhdCdzIGEgY29tbW9uIHByZXJlcXVpc2l0ZSBmb3IgbWFueSBCUEYgZnVuY3Rpb25hbGl0aWVzLCBzbyB0aGF0IG1ha2VzIHNlbnNlLiBIbW0sIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2VzIGluIGBhcmNoL3g4Ni9tbS9pbml0LmNgIGRlcGVuZCBvbiBgQ09ORklHX0VYRUNNRU1gLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhhdCBgYXJjaC94ODYvbW0vaW5pdC5jYCBmaWxlIGFnYWluIGp1c3QgdG8gYmUgc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3J1Y2lhbC4gR290dGEgZ2V0IHRoaXMgcmlnaHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2NDIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDEzOjEyOjQ2LjA1OTU5NjQ1OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvbW0vaW5pdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMjA6XFx0XFx0XFx0XFx0XFx0LnBncHJvdFxcdD0gUEFHRV9LRVJORUwsXFxuMTEyMTpcXHRcXHRcXHRcXHRcXHQuYWxpZ25tZW50ID0gTU9EVUxFX0FMSUdOLFxcbjExMjI6XFx0XFx0XFx0XFx0fSxcXG4xMTIzOlxcdFxcdFxcdH0sXFxuMTEyNDpcXHRcXHR9O1xcbjExMjU6XFx0XFxuMTEyNjpcXHRcXHRyZXR1cm4gXFx1MDAyNmV4ZWNtZW1faW5mbztcXG4xMTI3OlxcdH1cXG4xMTI4OlxcdCNlbmRpZiAvKiBDT05GSUdfRVhFQ01FTSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxMzoxMjo0Ni4wNTk3NDIxNjlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYxMTY4MzMwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIENvbmZpZ3VyYXRpb24gYW5kIEJQRiBKSVQgQWxsb2NhdGlvbioqXG5cbkFscmlnaHQsIHllcCwgZGVmaW5pdGVseSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX0VYRUNNRU1gIGlzIGVuYWJsZWQuIEl0J3MgYSBmdW5kYW1lbnRhbCByZXF1aXJlbWVudCwgYW5kIEknbSBwcmV0dHkgY2VydGFpbiBpdCdzIGJha2VkIGludG8gbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIEpJVCB3b3Jrcy4gQ2FuJ3QgYnlwYXNzIHRoYXQgbWVtb3J5IGFsbG9jYXRpb24gcG9saWN5LlxuXG5Ob3csIGxldCBtZSBxdWlja2x5IHBpdm90IHRvIGBrZXJuZWwvYnBmL2NvcmUuY2AuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgbXkgdW5kZXJzdGFuZGluZywgc3BlY2lmaWNhbGx5IHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFyb3VuZCBgYnBmX2ppdF9hbGxvY19leGVjYC4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIHJlY2FsbCB0aGUga2V5IGludGVyYWN0aW9ucyB0aGVyZSwgZXNwZWNpYWxseSB3aGF0IGhhcHBlbnMgd2hlbiB0aGUgZmxhZyBpcyBzZXQuIFRoYXQgZnVuY3Rpb24gaXMgdGhlIGNvcmUgb2YgaG93IHdlIGFjdHVhbGx5IGdldCB0aGUgZXhlY3V0YWJsZSBtZW1vcnkuIE5lZWQgdG8ga2VlcCB0aGF0IHBpY3R1cmUgY2xlYXIgaW4gbXkgaGVhZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwNjUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDEzOjEyOjUwLjY3MTQyOTU3NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDQzMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTExNSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTExNTpcXHRcXHRcXHR9XFxuMTExNjpcXHRcXHR9XFxuMTExNzpcXHRcXG4xMTE4OlxcdFxcdHJldHVybiAwO1xcbjExMTk6XFx0fVxcbjExMjA6XFx0XFxuMTEyMTpcXHR2b2lkIGJwZl9qaXRfdW5jaGFyZ2VfbW9kbWVtKHUzMiBzaXplKVxcbjExMjI6XFx0e1xcbjExMjM6XFx0XFx0YXRvbWljX2xvbmdfc3ViKHNpemUsIFxcdTAwMjZicGZfaml0X2N1cnJlbnQpO1xcbjExMjQ6XFx0fVxcbjExMjU6XFx0XFxuMTEyNjpcXHR2b2lkICpicGZfaml0X2FsbG9jX2V4ZWModW5zaWduZWQgbG9uZyBzaXplKVxcbjExMjc6XFx0e1xcbjExMjg6XFx0XFx0cmV0dXJuIGV4ZWNtZW1fYWxsb2MoRVhFQ01FTV9CUEYsIHNpemUpO1xcbjExMjk6XFx0fVxcbjExMzA6XFx0XFxuMTEzMTpcXHR2b2lkICpicGZfaml0X2FsbG9jX2V4ZWNfcncodW5zaWduZWQgbG9uZyBzaXplKVxcbjExMzI6XFx0e1xcbjExMzM6XFx0XFx0cmV0dXJuIGV4ZWNtZW1fYWxsb2NfcncoRVhFQ01FTV9CUEYsIHNpemUpO1xcbjExMzQ6XFx0fVxcbjExMzU6XFx0XFxuMTEzNjpcXHR2b2lkIGJwZl9qaXRfZnJlZV9leGVjKHZvaWQgKmFkZHIpXFxuMTEzNzpcXHR7XFxuMTEzODpcXHRcXHRleGVjbWVtX2ZyZWUoYWRkcik7XFxuMTEzOTpcXHR9XFxuMTE0MDpcXHRcXG4xMTQxOlxcdHN0cnVjdCBicGZfYmluYXJ5X2hlYWRlciAqXFxuMTE0MjpcXHRicGZfaml0X2JpbmFyeV9hbGxvYyh1bnNpZ25lZCBpbnQgcHJvZ2xlbiwgdTggKippbWFnZV9wdHIsXFxuMTE0MzpcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBhbGlnbm1lbnQsXFxuMTE0NDpcXHRcXHRcXHQgICAgIGJwZl9qaXRfZmlsbF9ob2xlX3QgYnBmX2ZpbGxfaWxsX2luc25zKVxcbjExNDU6XFx0e1xcbjExNDY6XFx0XFx0c3RydWN0IGJwZl9iaW5hcnlfaGVhZGVyICpoZHI7XFxuMTE0NzpcXHRcXHR1MzIgc2l6ZSwgaG9sZSwgc3RhcnQ7XFxuMTE0ODpcXHRcXG4xMTQ5OlxcdFxcdFdBUk5fT05fT05DRSghaXNfcG93ZXJfb2ZfMihhbGlnbm1lbnQpIHx8XFxuMTE1MDpcXHRcXHRcXHQgICAgIGFsaWdubWVudCBcXHUwMDNlIEJQRl9JTUFHRV9BTElHTk1FTlQpO1xcbjExNTE6XFx0XFxuMTE1MjpcXHRcXHQvKiBNb3N0IG9mIEJQRiBmaWx0ZXJzIGFyZSByZWFsbHkgc21hbGwsIGJ1dCBpZiBzb21lIG9mIHRoZW1cXG4xMTUzOlxcdFxcdCAqIGZpbGwgYSBwYWdlLCBhbGxvdyBhdCBsZWFzdCAxMjggZXh0cmEgYnl0ZXMgdG8gaW5zZXJ0IGFcXG4xMTU0OlxcdFxcdCAqIHJhbmRvbSBzZWN0aW9uIG9mIGlsbGVnYWwgaW5zdHJ1Y3Rpb25zLlxcbjExNTU6XFx0XFx0ICovXFxuMTE1NjpcXHRcXHRzaXplID0gcm91bmRfdXAocHJvZ2xlbiArIHNpemVvZigqaGRyKSArIDEyOCwgUEFHRV9TSVpFKTtcXG4xMTU3OlxcdFxcbjExNTg6XFx0XFx0aWYgKGJwZl9qaXRfY2hhcmdlX21vZG1lbShzaXplKSlcXG4xMTU5OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjExNjA6XFx0XFx0aGRyID0gYnBmX2ppdF9hbGxvY19leGVjKHNpemUpO1xcbjExNjE6XFx0XFx0aWYgKCFoZHIpIHtcXG4xMTYyOlxcdFxcdFxcdGJwZl9qaXRfdW5jaGFyZ2VfbW9kbWVtKHNpemUpO1xcbjExNjM6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMTE2NDpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDEzOjEyOjUwLjY3MTgzNzU1NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjE3MTk3NTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZ1bmN0aW9uYWwgQ2hhbmdlcyoqXG5cbk9rYXksIHRoZXNlIGNoYW5nZXMgc2VlbSBzb2xpZCDigJMgdGhleSdyZSBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwgYW5kIHRoZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUsIHdoaWNoIGlzIGNydWNpYWwuIE15IGluaXRpYWwgbGlzdCBvZiBmb2N1cyBzeW1ib2xzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludDogYGJwZl9wcm9nX3BhY2tfYWxsb2NgLCBgYWxsb2NfbmV3X3BhY2tgLCBgYXJjaF9icGZfdHJhbXBvbGluZV9zaXplYCwgYGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nYCwgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AsIGFuZCBgYnBmX2ppdF9hbGxvY19leGVjYC5cblxuV2FpdCBhIG1pbnV0ZS4uLiB0aGlua2luZyBhYm91dCBpdCBtb3JlLCBgYnBmX2ppdF9hbGxvY19leGVjYCBhbmQgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AgYXJlIHByZXR0eSBzdHJhaWdodGZvcndhcmQgd3JhcHBlcnMgYXJvdW5kIGBleGVjbWVtX2FsbG9jYCBhbmQgYGV4ZWNtZW1fYWxsb2NfcndgLiBJdCBtaWdodCBiZSBtb3JlIGluc2lnaHRmdWwgdG8gcHJpb3JpdGl6ZSBgYnBmX3Byb2dfcGFja19hbGxvY2AgYW5kIGBhbGxvY19uZXdfcGFja2AgaW5zdGVhZCwgYXMgdGhleSdyZSBjbG9zZXIgdG8gdGhlIGNvcmUgYWxsb2NhdGlvbiBsb2dpYy4gYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAgYW5kIGBicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZ2AgYXJlIGRlZmluaXRlbHkgcmVsZXZhbnQsIGFuZCBzaG91bGQgYmUgaW5jbHVkZWQgb24gdGhlIGxpc3QuXG5cbkxldCdzIGRvdWJsZS1jaGVjayB0aGUgcmVhY2hhYmlsaXR5IG9mIHRoZXNlIGtleSBlbGVtZW50cy4gSSBrbm93IGBhcmNoX2JwZl90cmFtcG9saW5lX3NpemVgIGlzIGVtYmVkZGVkIGluIHRoZSBCUEYgdHJhbXBvbGluZSBsb2dpYy4gQW5kIGBicGZfZGlzcGF0Y2hlcl9jaGFuZ2VfcHJvZ2AgcGxheXMgYSB2aXRhbCByb2xlIGluIHRoZSBCUEYgZGlzcGF0Y2hlciBsb2dpYywgc28gdGhvc2UgYXJlIGNvbmZpcm1lZCBhcyBhY3RpdmUgY29tcG9uZW50cy5cblxuSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgaW5mbHVlbmNlIHRoaXMgYXJlYTogYEJQRl9KSVRgLCBgQlBGX1NZU0NBTExgLCBhbmQgYEVYRUNNRU1gLiBMZXQgbWUgcXVpY2tseSBjb25maXJtIHRoYXQgYEVYRUNNRU1gIGlzIGFjdHVhbGx5IGEgY29uZmlndXJhYmxlIG9wdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwMjMsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxMzoxMjo1OC44ODkwNDIyMDRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzMTk4OTgxODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEVYRUNNRU1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTQ1ND1jb25maWcgSU9NTVVfTU1fREFUQVxcbi0tXFxubW0vS2NvbmZpZy0xNDU2LVxcbm1tL0tjb25maWc6MTQ1Nzpjb25maWcgRVhFQ01FTVxcbm1tL0tjb25maWctMTQ1OC1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDEzOjEzOjAyLjIwODk0OTA4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxOTIxMjQ1MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyByZXF1ZXN0ZWQsIGdlYXJlZCB0b3dhcmQgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5SaWdodCwgc28gSSdtIGZvY3VzaW5nIG9uIHRoZXNlIHN5c3RlbSBjb25maWd1cmF0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYEVYRUNNRU1gIOKAkyBkZWZpbml0ZWx5LCB0aGF0J3MgYSBrbm93biBjb25maWcsIGl0J3MgcHJldHR5IGNsZWFyLiBOb3csIEkgbmVlZCB0byB2ZXJpZnkgc29tZXRoaW5nIGVsc2UuIE15IG1lbnRhbCBjaGVja2xpc3QgZGljdGF0ZXMgdGhhdCBJIG11c3QgY29uZmlybSB0aGUgc3RhdHVzIG9mIGBCUEZfSklUYC4gSXMgaXQgYWxzbyBjb25maWd1cmVkLCBvciBkbyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgZnVydGhlcj8gVGhpcyBpcyB0aGUgY29yZSBvZiB3aGF0IEkgYW0gZG9pbmcgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTc1MiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDEzOjEzOjA2LjQwMTA3Njk3OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkxMTY4NTg5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX0pJVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9LY29uZmlnPTI3PWNvbmZpZyBCUEZfU1lTQ0FMTFxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTQxLVxcbmtlcm5lbC9icGYvS2NvbmZpZzo0Mjpjb25maWcgQlBGX0pJVFxcbmtlcm5lbC9icGYvS2NvbmZpZy00My1cXHRib29sIFxcXCJFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclxcXCJcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy01Ny1cXG5rZXJuZWwvYnBmL0tjb25maWc6NTg6Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXFxua2VybmVsL2JwZi9LY29uZmlnLTU5LVxcdGJvb2wgXFxcIlBlcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXFxcIlxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTY4LVxcbmtlcm5lbC9icGYvS2NvbmZpZzo2OTpjb25maWcgQlBGX0pJVF9ERUZBVUxUX09OXFxua2VybmVsL2JwZi9LY29uZmlnLTcwLVxcdGRlZl9ib29sIEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVQgfHwgQlBGX0pJVF9BTFdBWVNfT05cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTM6MTM6MDkuMzEyNzY5NTEzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0MjI1NzM5MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYSBmaXJzdC1wZXJzb24sIGV4cGVydCBwZXJzcGVjdGl2ZSwgYWltaW5nIGZvciBhIGZ1bHNvbWUgcmVuZGVyaW5nOlxuXG4qKk15IEJQRiBDb25maWcgQ29uc2lkZXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBvbiBteSBtaW5kIGlzIGNvbmZpcm1pbmcgdGhhdCBgQlBGX0pJVGAgaXMgaW5kZWVkIGEgY29uZmlndXJhdGlvbiBvcHRpb24sIHdoaWNoIGlzIHByZXR0eSBmdW5kYW1lbnRhbCB0byBob3cgdGhpbmdzIHdvcmsuICpZZXMsIGNvbmZpcm1lZDsgd2Uga25vdyBgQlBGX0pJVGAgaXMgYSBjb25maWcgcGFyYW1ldGVyLiBMZXQncyBtb3ZlIG9uKi5cblxuTm93LCBzaW5jZSB3ZSdyZSBkaXZpbmcgaW50byBCUEYgY29uZmlndXJhdGlvbnMsIHRoZSBuYXR1cmFsIG5leHQgc3RlcCwgKmZvciBtZSosIGlzIHRvIGxvb2sgYXQgYEJQRl9TWVNDQUxMYC4gSSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIHRoYXQncyBhbHNvIGV4cG9zZWQgYXMgYSBjb25maWd1cmFibGUgb3B0aW9uLiBJdCdzIG9mdGVuIGludGVydHdpbmVkIHdpdGggdGhlIG92ZXJhbGwgQlBGIHNldHVwLCBzbyB1bmRlcnN0YW5kaW5nIGl0cyBzdGF0dXMgaXMga2V5IHRvIGV2YWx1YXRpbmcgdGhlIG92ZXJhbGwgcGljdHVyZS4gSSdsbCBuZWVkIHRvIGtub3cgd2hldGhlciBJIGNhbiBtb2RpZnkgaXQgZGlyZWN0bHksIG9yIGlmIGl0J3MgaW1wbGljaXRseSBlbmFibGVkIG9yIGRpc2FibGVkIGJhc2VkIG9uIG90aGVyIHNldHRpbmdzLiBLbm93aW5nIHRoaXMgaXMgY3JpdGljYWwgdG8gcHJvcGVyIEJQRiBwcm9ncmFtIG9wZXJhdGlvbiwgc2VjdXJpdHkgYW5kIHBvcnRhYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjE0OCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDEzOjEzOjE3LjczNTM0NzY4NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYxNTU2NjczMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTM6MTM6MjAuMzUwOTIyOTM4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwNjUzMjI5MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBDb25maWd1cmF0aW9uIGFuZCBTeW1ib2wgVmlzaWJpbGl0eSoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYEJQRl9TWVNDQUxMYCBpcyBpbmRlZWQgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgbWFraW5nIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBgQlBGX0pJVGAsIGBCUEZfU1lTQ0FMTGAsIGFuZCBgRVhFQ01FTWAuIE15IGZvY3VzIGlzIG9uIHRoZXNlIHN5bWJvbHM6IGBhbGxvY19uZXdfcGFja2AsIGBicGZfcHJvZ19wYWNrX2FsbG9jYCwgYGFyY2hfYnBmX3RyYW1wb2xpbmVfc2l6ZWAsIGFuZCBgYnBmX2Rpc3BhdGNoZXJfY2hhbmdlX3Byb2dgLlxuXG5MZXQncyBzdGFydCBieSBjaGVja2luZyB0aGUgc2NvcGUgb2YgdGhlc2Uga2V5IHN5bWJvbHMuIEkgc2VlIHRoYXQgYGFsbG9jX25ld19wYWNrYCBpcyBzdGF0aWMsIGRlZmluZWQgd2l0aGluIGBrZXJuZWwvYnBmL2NvcmUuY2AuIEdvb2QsIGdvdCB0aGF0LiBOb3csIEknbSB2ZXJpZnlpbmcgdGhhdCBgYnBmX3Byb2dfcGFja19hbGxvY2AgaXMgZXhwb3J0ZWQgb3IgZ2xvYmFsIOKAkyBjb25maXJtZWQsIGl0J3MgZ2xvYmFsLiBGb2xsb3dpbmcgdGhhdCwgSSdtIGNoZWNraW5nIGBhcmNoX2JwZl90cmFtcG9saW5lX3NpemVgJ3Mgc2NvcGUgLSBpdCdzIGdsb2JhbC4gQW5kIGZpbmFsbHksIEkgc2VlIHRoYXQgYGJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nYCBpcyBhbHNvIGdsb2JhbC5cblxuQWxyaWdodCwgSSd2ZSBnb3QgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNjb3BlIG9mIHRoZXNlIHN5bWJvbHMgbm93LiBJJ2xsIGRvY3VtZW50IG15IGZpbmRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjUwMCwiT3V0cHV0VG9rZW5zIjoxNzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTM6MTM6MjkuNDE2MjQ3ODI4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2ODkwNDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiRVhFQ01FTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jX25ld19wYWNrXCIsXG4gICAgXCJicGZfcHJvZ19wYWNrX2FsbG9jXCIsXG4gICAgXCJhcmNoX2JwZl90cmFtcG9saW5lX3NpemVcIixcbiAgICBcImJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIEpJVCBtZW1vcnkgYWxsb2NhdGlvbiBsb2dpYywgaW50cm9kdWNpbmcgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AgYW5kIHVwZGF0aW5nIGBicGZfaml0X2FsbG9jX2V4ZWNgIHRvIHVzZSBgZXhlY21lbV9hbGxvY2AuIEl0IGFsc28gY2hhbmdlcyB4ODYgQlBGIEpJVCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gYW5kIHVwZGF0ZXMgQlBGIHRyYW1wb2xpbmUgYW5kIGRpc3BhdGNoZXIgbG9naWMgdG8gdXNlIHRoZSBuZXcgYWxsb2NhdGlvbiBtZXRob2RzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIEJQRiBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfSklUXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiRVhFQ01FTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jX25ld19wYWNrXCIsXG4gICAgXCJicGZfcHJvZ19wYWNrX2FsbG9jXCIsXG4gICAgXCJhcmNoX2JwZl90cmFtcG9saW5lX3NpemVcIixcbiAgICBcImJwZl9kaXNwYXRjaGVyX2NoYW5nZV9wcm9nXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgQlBGIEpJVCBtZW1vcnkgYWxsb2NhdGlvbiBsb2dpYywgaW50cm9kdWNpbmcgYGJwZl9qaXRfYWxsb2NfZXhlY19yd2AgYW5kIHVwZGF0aW5nIGBicGZfaml0X2FsbG9jX2V4ZWNgIHRvIHVzZSBgZXhlY21lbV9hbGxvY2AuIEl0IGFsc28gY2hhbmdlcyB4ODYgQlBGIEpJVCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gYW5kIHVwZGF0ZXMgQlBGIHRyYW1wb2xpbmUgYW5kIGRpc3BhdGNoZXIgbG9naWMgdG8gdXNlIHRoZSBuZXcgYWxsb2NhdGlvbiBtZXRob2RzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIEJQRiBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow264jk[1] Phase: Succeeded StartedAt: 2026-07-16 13:13:41 +0000 UTC FinishedAt: 2026-07-16 13:13:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow264jk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-16 13:13:41 +0000 UTC FinishedAt: 2026-07-16 13:13:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow264jk[2] Phase: Succeeded StartedAt: 2026-07-16 13:13:41 +0000 UTC FinishedAt: 2026-07-16 17:13:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow264jk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["alloc_new_pack","bpf_prog_pack_alloc","arch_bpf_trampoline_size","bpf_dispatcher_change_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"45611898-a4ab-44b9-b247-defc65fa751b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-16 13:13:41 +0000 UTC FinishedAt: 2026-07-16 17:13:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["alloc_new_pack","bpf_prog_pack_alloc","arch_bpf_trampoline_size","bpf_dispatcher_change_prog"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"45611898-a4ab-44b9-b247-defc65fa751b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow264jk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["alloc_new_pack","bpf_prog_pack_alloc","arch_bpf_trampoline_size","bpf_dispatcher_change_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"45611898-a4ab-44b9-b247-defc65fa751b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-16 13:13:41 +0000 UTC FinishedAt: 2026-07-16 13:13:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow264jk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["alloc_new_pack","bpf_prog_pack_alloc","arch_bpf_trampoline_size","bpf_dispatcher_change_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"45611898-a4ab-44b9-b247-defc65fa751b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-16 13:13:41 +0000 UTC FinishedAt: 2026-07-16 13:13:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow264jk/series-workflow264jk-convert-artifact-4043463261/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow264jk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["alloc_new_pack","bpf_prog_pack_alloc","arch_bpf_trampoline_size","bpf_dispatcher_change_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"45611898-a4ab-44b9-b247-defc65fa751b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-16 13:13:51 +0000 UTC FinishedAt: 2026-07-16 13:38:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow264jk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["alloc_new_pack","bpf_prog_pack_alloc","arch_bpf_trampoline_size","bpf_dispatcher_change_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"45611898-a4ab-44b9-b247-defc65fa751b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-16 13:13:51 +0000 UTC FinishedAt: 2026-07-16 13:38:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*002757ba-8ae2-4ea4-a28b-2e096686edc3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow264jk/series-workflow264jk-convert-artifact-4043463261/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "8070b15e-7e17-4b10-9202-bfc7921bf94c", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow264jk/series-workflow264jk-build-action-4253363603/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow264jk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["alloc_new_pack","bpf_prog_pack_alloc","arch_bpf_trampoline_size","bpf_dispatcher_change_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"45611898-a4ab-44b9-b247-defc65fa751b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-16 13:13:51 +0000 UTC FinishedAt: 2026-07-16 13:38:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*002757ba-8ae2-4ea4-a28b-2e096686edc3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow264jk/series-workflow264jk-convert-artifact-4043463261/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "8070b15e-7e17-4b10-9202-bfc7921bf94c", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow264jk/series-workflow264jk-build-action-4253363603/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow264jk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["alloc_new_pack","bpf_prog_pack_alloc","arch_bpf_trampoline_size","bpf_dispatcher_change_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"45611898-a4ab-44b9-b247-defc65fa751b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-16 13:38:36 +0000 UTC FinishedAt: 2026-07-16 13:38:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow264jk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["alloc_new_pack","bpf_prog_pack_alloc","arch_bpf_trampoline_size","bpf_dispatcher_change_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"45611898-a4ab-44b9-b247-defc65fa751b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-16 13:38:36 +0000 UTC FinishedAt: 2026-07-16 13:38:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow264jk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["alloc_new_pack","bpf_prog_pack_alloc","arch_bpf_trampoline_size","bpf_dispatcher_change_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"45611898-a4ab-44b9-b247-defc65fa751b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-16 13:38:36 +0000 UTC FinishedAt: 2026-07-16 13:38:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow264jk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["alloc_new_pack","bpf_prog_pack_alloc","arch_bpf_trampoline_size","bpf_dispatcher_change_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"45611898-a4ab-44b9-b247-defc65fa751b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-16 13:38:36 +0000 UTC FinishedAt: 2026-07-16 13:38:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"45611898-a4ab-44b9-b247-defc65fa751b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow264jk/series-workflow264jk-convert-artifact-3122578232/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow264jk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["alloc_new_pack","bpf_prog_pack_alloc","arch_bpf_trampoline_size","bpf_dispatcher_change_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"45611898-a4ab-44b9-b247-defc65fa751b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-16 13:38:46 +0000 UTC FinishedAt: 2026-07-16 13:40:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow264jk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["alloc_new_pack","bpf_prog_pack_alloc","arch_bpf_trampoline_size","bpf_dispatcher_change_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"45611898-a4ab-44b9-b247-defc65fa751b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-16 13:38:46 +0000 UTC FinishedAt: 2026-07-16 13:40:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8070b15e-7e17-4b10-9202-bfc7921bf94c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow264jk/series-workflow264jk-build-action-4253363603/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow264jk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["alloc_new_pack","bpf_prog_pack_alloc","arch_bpf_trampoline_size","bpf_dispatcher_change_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"45611898-a4ab-44b9-b247-defc65fa751b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-16 13:40:55 +0000 UTC FinishedAt: 2026-07-16 13:40:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow264jk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["alloc_new_pack","bpf_prog_pack_alloc","arch_bpf_trampoline_size","bpf_dispatcher_change_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"45611898-a4ab-44b9-b247-defc65fa751b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-16 13:40:55 +0000 UTC FinishedAt: 2026-07-16 13:40:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow264jk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["alloc_new_pack","bpf_prog_pack_alloc","arch_bpf_trampoline_size","bpf_dispatcher_change_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"45611898-a4ab-44b9-b247-defc65fa751b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-16 13:40:55 +0000 UTC FinishedAt: 2026-07-16 14:10:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow264jk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["alloc_new_pack","bpf_prog_pack_alloc","arch_bpf_trampoline_size","bpf_dispatcher_change_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"45611898-a4ab-44b9-b247-defc65fa751b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-16 13:40:55 +0000 UTC FinishedAt: 2026-07-16 14:10:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*002757ba-8ae2-4ea4-a28b-2e096686edc3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow264jk/series-workflow264jk-convert-artifact-3122578232/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "f283872c-3311-4371-b017-9cef75979580", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow264jk/series-workflow264jk-build-action-1748163620/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow264jk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["alloc_new_pack","bpf_prog_pack_alloc","arch_bpf_trampoline_size","bpf_dispatcher_change_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"45611898-a4ab-44b9-b247-defc65fa751b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-16 13:40:55 +0000 UTC FinishedAt: 2026-07-16 14:10:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*002757ba-8ae2-4ea4-a28b-2e096686edc3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow264jk/series-workflow264jk-convert-artifact-3122578232/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "f283872c-3311-4371-b017-9cef75979580", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow264jk/series-workflow264jk-build-action-1748163620/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow264jk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["alloc_new_pack","bpf_prog_pack_alloc","arch_bpf_trampoline_size","bpf_dispatcher_change_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"45611898-a4ab-44b9-b247-defc65fa751b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-16 14:10:20 +0000 UTC FinishedAt: 2026-07-16 14:10:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow264jk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["alloc_new_pack","bpf_prog_pack_alloc","arch_bpf_trampoline_size","bpf_dispatcher_change_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"45611898-a4ab-44b9-b247-defc65fa751b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-16 14:10:20 +0000 UTC FinishedAt: 2026-07-16 14:10:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow264jk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["alloc_new_pack","bpf_prog_pack_alloc","arch_bpf_trampoline_size","bpf_dispatcher_change_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"45611898-a4ab-44b9-b247-defc65fa751b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-16 14:10:20 +0000 UTC FinishedAt: 2026-07-16 14:12:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow264jk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["alloc_new_pack","bpf_prog_pack_alloc","arch_bpf_trampoline_size","bpf_dispatcher_change_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"45611898-a4ab-44b9-b247-defc65fa751b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-16 14:10:20 +0000 UTC FinishedAt: 2026-07-16 14:12:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f283872c-3311-4371-b017-9cef75979580,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow264jk/series-workflow264jk-build-action-1748163620/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow264jk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["alloc_new_pack","bpf_prog_pack_alloc","arch_bpf_trampoline_size","bpf_dispatcher_change_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"45611898-a4ab-44b9-b247-defc65fa751b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-16 14:12:27 +0000 UTC FinishedAt: 2026-07-16 17:13:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow264jk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["alloc_new_pack","bpf_prog_pack_alloc","arch_bpf_trampoline_size","bpf_dispatcher_change_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"45611898-a4ab-44b9-b247-defc65fa751b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-16 14:12:27 +0000 UTC FinishedAt: 2026-07-16 17:13:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["alloc_new_pack","bpf_prog_pack_alloc","arch_bpf_trampoline_size","bpf_dispatcher_change_prog"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*8070b15e-7e17-4b10-9202-bfc7921bf94c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f283872c-3311-4371-b017-9cef75979580,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow264jk/series-workflow264jk-build-action-4253363603/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow264jk/series-workflow264jk-build-action-1748163620/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow264jk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["alloc_new_pack","bpf_prog_pack_alloc","arch_bpf_trampoline_size","bpf_dispatcher_change_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"45611898-a4ab-44b9-b247-defc65fa751b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-16 14:12:27 +0000 UTC FinishedAt: 2026-07-16 14:12:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow264jk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["alloc_new_pack","bpf_prog_pack_alloc","arch_bpf_trampoline_size","bpf_dispatcher_change_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"45611898-a4ab-44b9-b247-defc65fa751b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-16 14:12:27 +0000 UTC FinishedAt: 2026-07-16 14:12:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["alloc_new_pack","bpf_prog_pack_alloc","arch_bpf_trampoline_size","bpf_dispatcher_change_prog"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow264jk/series-workflow264jk-convert-artifact-1209846161/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow264jk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["alloc_new_pack","bpf_prog_pack_alloc","arch_bpf_trampoline_size","bpf_dispatcher_change_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"45611898-a4ab-44b9-b247-defc65fa751b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-16 14:12:27 +0000 UTC FinishedAt: 2026-07-16 14:12:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow264jk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["alloc_new_pack","bpf_prog_pack_alloc","arch_bpf_trampoline_size","bpf_dispatcher_change_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"45611898-a4ab-44b9-b247-defc65fa751b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-16 14:12:27 +0000 UTC FinishedAt: 2026-07-16 14:12:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow264jk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["alloc_new_pack","bpf_prog_pack_alloc","arch_bpf_trampoline_size","bpf_dispatcher_change_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"45611898-a4ab-44b9-b247-defc65fa751b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-16 14:12:27 +0000 UTC FinishedAt: 2026-07-16 14:12:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow264jk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["alloc_new_pack","bpf_prog_pack_alloc","arch_bpf_trampoline_size","bpf_dispatcher_change_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"45611898-a4ab-44b9-b247-defc65fa751b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-16 14:12:38 +0000 UTC FinishedAt: 2026-07-16 17:13:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow264jk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["alloc_new_pack","bpf_prog_pack_alloc","arch_bpf_trampoline_size","bpf_dispatcher_change_prog"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL","EXECMEM"],"series_id":"45611898-a4ab-44b9-b247-defc65fa751b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-16 14:12:38 +0000 UTC FinishedAt: 2026-07-16 17:13:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8070b15e-7e17-4b10-9202-bfc7921bf94c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f283872c-3311-4371-b017-9cef75979580,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow264jk/series-workflow264jk-build-action-4253363603/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow264jk/series-workflow264jk-build-action-1748163620/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow264jk/series-workflow264jk-convert-artifact-1209846161/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}