Name: series-workflowcw5c5 Phase: Succeeded StartedAt: 2026-09-14 09:17:37 +0000 UTC FinishedAt: 2026-09-14 14:08:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw5c5[0] Phase: Succeeded StartedAt: 2026-09-14 09:17:37 +0000 UTC FinishedAt: 2026-09-14 10:15:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw5c5[0].run-triage Phase: Succeeded StartedAt: 2026-09-14 09:17:37 +0000 UTC FinishedAt: 2026-09-14 10:15:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "fd9beb8870736e1c6a0b2351d88a161aaeb2b326", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "fd9beb8870736e1c6a0b2351d88a161aaeb2b326", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET" ], "series_id": "5cefdd6c-24b4-452c-bf6c-f55c19f1942f" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tcp_rcv_established", "tcp_validate_incoming" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "fd9beb8870736e1c6a0b2351d88a161aaeb2b326", "base_tree": "net" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfcmN2X2VzdGFibGlzaGVkJiMzNDssCiAgICAmIzM0O3RjcF92YWxpZGF0ZV9pbmNvbWluZyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRjcF9yY3ZfZXN0YWJsaXNoZWQoKSB0byByZXF1aXJlIHRoZSBpbmNvbWluZyBBQ0sgc2VxdWVuY2UgbnVtYmVyIHRvIGJlIHdpdGhpbiBbU05ELlVOQSwgU05ELk5YVF0gdmlhIGJldHdlZW4oVENQX1NLQl9DQihza2IpLVx1MDAzZWFja19zZXEsIHRwLVx1MDAzZXNuZF91bmEsIHRwLVx1MDAzZXNuZF9ueHQpIGJlZm9yZSB0YWtpbmcgdGhlIFRDUCBmYXN0IHBhdGgsIGRpdmVydGluZyBwYWNrZXRzIHdpdGggb2xkIEFDS3MgdG8gdGhlIHNsb3cgcGF0aCBmb3IgcHJvcGVyIFJGQyA1OTYxIHZhbGlkYXRpb24uXG5cbkFsbCB2YXJpYWJsZXMgaW52b2x2ZWQgKFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VhY2tfc2VxLCB0cC1cdTAwM2VzbmRfdW5hLCB0cC1cdTAwM2VzbmRfbnh0KSBhcmUgaW5pdGlhbGl6ZWQgdTMyIHZhbHVlcy4gVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG1lbW9yeSwgYWx0ZXIgYnVmZmVyIHNpemVzLCBjb3B5IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWx0ZXJzIHRoZSBmYXN0LXBhdGggaGVhZGVyIHByZWRpY3Rpb24gY29uZGl0aW9uIGluIHRjcF9yY3ZfZXN0YWJsaXNoZWQoKSB0byByZXF1aXJlIHRoZSBBQ0sgc2VxdWVuY2UgbnVtYmVyIHRvIGZhbGwgYmV0d2VlbiBTTkQuVU5BIGFuZCBTTkQuTlhULiBTZWdtZW50cyB3aXRoIG9sZCBBQ0tzIGFyZSBub3cgcmVkaXJlY3RlZCB0byB0aGUgc2xvdyBwYXRoICh0Y3BfdmFsaWRhdGVfaW5jb21pbmcoKSkgdG8gcHJldmVudCBSRkMgNTk2MSBibGluZCBkYXRhIGluamVjdGlvbi4gVGhpcyBhbHRlcnMgY29yZSBUQ1AgcmVjZWl2ZSBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBUQ1Agc29ja2V0IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6MTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiMzE5ODMzYTBmMDUzM2RiN2Y4ZDY4YTIyNjAyMGRlMjkwN2M1ZTZhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMTA6MTI6NDggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lucHV0LmMgYi9uZXQvaXB2NC90Y3BfaW5wdXQuY1xuaW5kZXggZGFmZjkzZDUxMzQyOC4uMDNkMzE3YTU4MTMyNCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9pbnB1dC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfaW5wdXQuY1xuQEAgLTY0OTAsNiAmIzQzOzY0OTAsNyBAQCBzdGF0aWMgYm9vbCB0Y3BfdmFsaWRhdGVfaW5jb21pbmcoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuICAqXHQgIG9yIHB1cmUgcmVjZWl2ZXJzICh0aGlzIG1lYW5zIGVpdGhlciB0aGUgc2VxdWVuY2UgbnVtYmVyIG9yIHRoZSBhY2tcbiAgKlx0ICB2YWx1ZSBtdXN0IHN0YXkgY29uc3RhbnQpXG4gICpcdC0gVW5leHBlY3RlZCBUQ1Agb3B0aW9uLlxuJiM0MzsgKlx0LSBBQ0sgc2VxdWVuY2UgbnVtYmVyIGlzIG91dHNpZGUgW1NORC5VTkEsIFNORC5OWFRdLlxuICAqXG4gICpcdFdoZW4gdGhlc2UgY29uZGl0aW9ucyBhcmUgbm90IHNhdGlzZmllZCBpdCBkcm9wcyBpbnRvIGEgc3RhbmRhcmRcbiAgKlx0cmVjZWl2ZSBwcm9jZWR1cmUgcGF0dGVybmVkIGFmdGVyIFJGQzc5MyB0byBoYW5kbGUgYWxsIGNhc2VzLlxuQEAgLTY1MzksNyAmIzQzOzY1NDAsNyBAQCB2b2lkIHRjcF9yY3ZfZXN0YWJsaXNoZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0aWYgKCh0Y3BfZmxhZ193b3JkKHRoKSBcdTAwMjYgVENQX0hQX0JJVFMpID09IHRwLVx1MDAzZXByZWRfZmxhZ3MgXHUwMDI2XHUwMDI2XG4gXHQgICAgVENQX1NLQl9DQihza2IpLVx1MDAzZXNlcSA9PSB0cC1cdTAwM2VyY3Zfbnh0IFx1MDAyNlx1MDAyNlxuLVx0ICAgICFhZnRlcihUQ1BfU0tCX0NCKHNrYiktXHUwMDNlYWNrX3NlcSwgdHAtXHUwMDNlc25kX254dCkpIHtcbiYjNDM7XHQgICAgYmV0d2VlbihUQ1BfU0tCX0NCKHNrYiktXHUwMDNlYWNrX3NlcSwgdHAtXHUwMDNlc25kX3VuYSwgdHAtXHUwMDNlc25kX254dCkpIHtcbiBcdFx0aW50IHRjcF9oZWFkZXJfbGVuID0gdHAtXHUwMDNldGNwX2hlYWRlcl9sZW47XG4gXHRcdHMzMiBkZWx0YSA9IDA7XG4gXHRcdGludCBmbGFnID0gMDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX3JmYzU5NjFfcmVqZWN0LW9sZC1hY2sucGt0IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3BhY2tldGRyaWxsL3RjcF9yZmM1OTYxX3JlamVjdC1vbGQtYWNrLnBrdFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjMyZGQ5ZGUxZDM2NjJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3BfcmZjNTk2MV9yZWplY3Qtb2xkLWFjay5wa3RcbkBAIC0wLDAgJiM0MzsxLDI5IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO1xuJiM0MztgLi9kZWZhdWx0cy5zaFxuJiM0MztzeXNjdGwgLXEgbmV0LmlwdjQudGNwX2ludmFsaWRfcmF0ZWxpbWl0PTBcbiYjNDM7YFxuJiM0MztcbiYjNDM7Ly8gVGVzdCByZWplY3Rpb24gb2YgZGF0YSBzZWdtZW50cyBjYXJyeWluZyBleGNlc3NpdmVseSBvbGQgQUNLc1xuJiM0MztcbiYjNDM7MCBzb2NrZXQoLi4uLCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApID0gM1xuJiM0MzsmIzQzOzAgc2V0c29ja29wdCgzLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsIFsxXSwgNCkgPSAwXG4mIzQzOyYjNDM7MCBiaW5kKDMsIC4uLiwgLi4uKSA9IDBcbiYjNDM7JiM0MzswIGxpc3RlbigzLCAxMDI0KSA9IDBcbiYjNDM7XG4mIzQzOy8vIC0tLS0tLS0tLS0tLS0tLS0gSGFuZHNoYWtlIC0tLS0tLS0tLS0tLS0tLS0tLS0gLy9cbiYjNDM7JiM0MzswIFx1MDAzYyBTIDA6MCgwKSB3aW4gNjU1MzVcbiYjNDM7JiM0MzswIFx1MDAzZSBTLiAwOjAoMCkgYWNrIDEgXHUwMDNjLi4uXHUwMDNlXG4mIzQzOyYjNDM7MCBcdTAwM2MgLiAxOjEoMCkgYWNrIDEgd2luIDY1NTM1XG4mIzQzOyYjNDM7MCBhY2NlcHQoMywgLi4uLCAuLi4pID0gNFxuJiM0MztcbiYjNDM7Ly8gUG9wdWxhdGUgcmVjZWl2ZSBtZW1vcnkgc28gdGhlIGZvbGxvd2luZyBzZWdtZW50IGNhbiB1c2VcbiYjNDM7Ly8gaGVhZGVyIHByZWRpY3Rpb24uXG4mIzQzOyYjNDM7MCBcdTAwM2MgUC4gMTo1MDEoNTAwKSBhY2sgMSB3aW4gNjU1MzVcbiYjNDM7JiM0MzswIFx1MDAzZSAuIDE6MSgwKSBhY2sgNTAxXG4mIzQzO1xuJiM0MzsvLyBTZW5kIGFuIGluLXNlcXVlbmNlIGRhdGEgc2VnbWVudCBjYXJyeWluZyBhbiBleGNlc3NpdmVseSBvbGQgQUNLLlxuJiM0MzsmIzQzOzAgXHUwMDNjIFAuIDUwMToxNTAxKDEwMDApIGFjayAyNzk0OTY3Mzk3IHdpbiA2NTUzNVxuJiM0MztcbiYjNDM7Ly8gQ2hhbGxlbmdlIEFDSzsgUkNWLk5YVCBtdXN0IHJlbWFpbiA1MDEuXG4mIzQzOyYjNDM7MCBcdTAwM2UgLiAxOjEoMCkgYWNrIDUwMVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfcmN2X2VzdGFibGlzaGVkJiMzNDssCiAgICAmIzM0O3RjcF92YWxpZGF0ZV9pbmNvbWluZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbHRlcnMgdGhlIGZhc3QtcGF0aCBoZWFkZXIgcHJlZGljdGlvbiBjb25kaXRpb24gaW4gdGNwX3Jjdl9lc3RhYmxpc2hlZCgpIHRvIHJlcXVpcmUgdGhlIEFDSyBzZXF1ZW5jZSBudW1iZXIgdG8gZmFsbCBiZXR3ZWVuIFNORC5VTkEgYW5kIFNORC5OWFQuIFNlZ21lbnRzIHdpdGggb2xkIEFDS3MgYXJlIG5vdyByZWRpcmVjdGVkIHRvIHRoZSBzbG93IHBhdGggKHRjcF92YWxpZGF0ZV9pbmNvbWluZygpKSB0byBwcmV2ZW50IFJGQyA1OTYxIGJsaW5kIGRhdGEgaW5qZWN0aW9uLiBUaGlzIGFsdGVycyBjb3JlIFRDUCByZWNlaXZlIGxvZ2ljIGFuZCBpcyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIFRDUCBzb2NrZXQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGIzMTk4MzNhMGYwNTMzZGI3ZjhkNjhhMjI2MDIwZGUyOTA3YzVlNmEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCAxNCAxMDoxMjo0OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pbnB1dC5jIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKaW5kZXggZGFmZjkzZDUxMzQyOC4uMDNkMzE3YTU4MTMyNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2lucHV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKQEAgLTY0OTAsNiAmIzQzOzY0OTAsNyBAQCBzdGF0aWMgYm9vbCB0Y3BfdmFsaWRhdGVfaW5jb21pbmcoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogICoJICBvciBwdXJlIHJlY2VpdmVycyAodGhpcyBtZWFucyBlaXRoZXIgdGhlIHNlcXVlbmNlIG51bWJlciBvciB0aGUgYWNrCiAgKgkgIHZhbHVlIG11c3Qgc3RheSBjb25zdGFudCkKICAqCS0gVW5leHBlY3RlZCBUQ1Agb3B0aW9uLgomIzQzOyAqCS0gQUNLIHNlcXVlbmNlIG51bWJlciBpcyBvdXRzaWRlIFtTTkQuVU5BLCBTTkQuTlhUXS4KICAqCiAgKglXaGVuIHRoZXNlIGNvbmRpdGlvbnMgYXJlIG5vdCBzYXRpc2ZpZWQgaXQgZHJvcHMgaW50byBhIHN0YW5kYXJkCiAgKglyZWNlaXZlIHByb2NlZHVyZSBwYXR0ZXJuZWQgYWZ0ZXIgUkZDNzkzIHRvIGhhbmRsZSBhbGwgY2FzZXMuCkBAIC02NTM5LDcgJiM0Mzs2NTQwLDcgQEAgdm9pZCB0Y3BfcmN2X2VzdGFibGlzaGVkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAogCWlmICgodGNwX2ZsYWdfd29yZCh0aCkgJmFtcDsgVENQX0hQX0JJVFMpID09IHRwLSZndDtwcmVkX2ZsYWdzICZhbXA7JmFtcDsKIAkgICAgVENQX1NLQl9DQihza2IpLSZndDtzZXEgPT0gdHAtJmd0O3Jjdl9ueHQgJmFtcDsmYW1wOwotCSAgICAhYWZ0ZXIoVENQX1NLQl9DQihza2IpLSZndDthY2tfc2VxLCB0cC0mZ3Q7c25kX254dCkpIHsKJiM0MzsJICAgIGJldHdlZW4oVENQX1NLQl9DQihza2IpLSZndDthY2tfc2VxLCB0cC0mZ3Q7c25kX3VuYSwgdHAtJmd0O3NuZF9ueHQpKSB7CiAJCWludCB0Y3BfaGVhZGVyX2xlbiA9IHRwLSZndDt0Y3BfaGVhZGVyX2xlbjsKIAkJczMyIGRlbHRhID0gMDsKIAkJaW50IGZsYWcgPSAwOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3BhY2tldGRyaWxsL3RjcF9yZmM1OTYxX3JlamVjdC1vbGQtYWNrLnBrdCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3BfcmZjNTk2MV9yZWplY3Qtb2xkLWFjay5wa3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uMzJkZDlkZTFkMzY2MgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3BfcmZjNTk2MV9yZWplY3Qtb2xkLWFjay5wa3QKQEAgLTAsMCAmIzQzOzEsMjkgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzO2AuL2RlZmF1bHRzLnNoCiYjNDM7c3lzY3RsIC1xIG5ldC5pcHY0LnRjcF9pbnZhbGlkX3JhdGVsaW1pdD0wCiYjNDM7YAomIzQzOwomIzQzOy8vIFRlc3QgcmVqZWN0aW9uIG9mIGRhdGEgc2VnbWVudHMgY2FycnlpbmcgZXhjZXNzaXZlbHkgb2xkIEFDS3MKJiM0MzsKJiM0MzswIHNvY2tldCguLi4sIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCkgPSAzCiYjNDM7JiM0MzswIHNldHNvY2tvcHQoMywgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCBbMV0sIDQpID0gMAomIzQzOyYjNDM7MCBiaW5kKDMsIC4uLiwgLi4uKSA9IDAKJiM0MzsmIzQzOzAgbGlzdGVuKDMsIDEwMjQpID0gMAomIzQzOwomIzQzOy8vIC0tLS0tLS0tLS0tLS0tLS0gSGFuZHNoYWtlIC0tLS0tLS0tLS0tLS0tLS0tLS0gLy8KJiM0MzsmIzQzOzAgJmx0OyBTIDA6MCgwKSB3aW4gNjU1MzUKJiM0MzsmIzQzOzAgJmd0OyBTLiAwOjAoMCkgYWNrIDEgJmx0Oy4uLiZndDsKJiM0MzsmIzQzOzAgJmx0OyAuIDE6MSgwKSBhY2sgMSB3aW4gNjU1MzUKJiM0MzsmIzQzOzAgYWNjZXB0KDMsIC4uLiwgLi4uKSA9IDQKJiM0MzsKJiM0MzsvLyBQb3B1bGF0ZSByZWNlaXZlIG1lbW9yeSBzbyB0aGUgZm9sbG93aW5nIHNlZ21lbnQgY2FuIHVzZQomIzQzOy8vIGhlYWRlciBwcmVkaWN0aW9uLgomIzQzOyYjNDM7MCAmbHQ7IFAuIDE6NTAxKDUwMCkgYWNrIDEgd2luIDY1NTM1CiYjNDM7JiM0MzswICZndDsgLiAxOjEoMCkgYWNrIDUwMQomIzQzOwomIzQzOy8vIFNlbmQgYW4gaW4tc2VxdWVuY2UgZGF0YSBzZWdtZW50IGNhcnJ5aW5nIGFuIGV4Y2Vzc2l2ZWx5IG9sZCBBQ0suCiYjNDM7JiM0MzswICZsdDsgUC4gNTAxOjE1MDEoMTAwMCkgYWNrIDI3OTQ5NjczOTcgd2luIDY1NTM1CiYjNDM7CiYjNDM7Ly8gQ2hhbGxlbmdlIEFDSzsgUkNWLk5YVCBtdXN0IHJlbWFpbiA1MDEuCiYjNDM7JiM0MzswICZndDsgLiAxOjEoMCkgYWNrIDUwMQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTk4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFRDUCBJbnB1dCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHdlIGhhdmUgYSBwYXRjaCB0aGF0JiMzOTtzIHN1YnRseSBhbHRlcmluZyB0aGUgQUNLIHByb2Nlc3NpbmcgbG9naWMgd2l0aGluIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBpbiB0aGUgYG5ldC9pcHY0YCBkaXJlY3RvcnksIHNwZWNpZmljYWxseSB3aXRoaW4gYHRjcF9pbnB1dC5jYC4gTG9va2luZyBhdCB0aGUgZGlmZiwgaXQgbG9va3MgbGlrZSBhIGNoYW5nZSB0byBob3cgQUNLIHNlcXVlbmNlcyBhcmUgZXZhbHVhdGVkIGlzIGJlaW5nIG1hZGUuIEl0JiMzOTtzIHRpZ2h0ZW5pbmcgdGhlIGNvbmRpdGlvbnMgZm9yIHdoZW4gYW4gQUNLIGlzIGFjY2VwdGVkLCB1c2luZyBgYmV0d2VlbmAgaW5zdGVhZCBvZiBhIHBvdGVudGlhbGx5IGxlc3MgcHJlY2lzZSBgIWFmdGVyYCBjaGVjay4gVGhlIGNvZGUgc25pcHBldCBJIHNlZSBzaG93cyB0aGF0IHRoZSBjaGVjayBgIWFmdGVyKFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7YWNrX3NlcSwgdHAtJmd0O3NuZF9ueHQpYCBpcyBiZWluZyByZXBsYWNlZCB3aXRoIGBiZXR3ZWVuKFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7YWNrX3NlcSwgdHAtJmd0O3NuZF91bmEsIHRwLSZndDtzbmRfbnh0KWAuIEl0IGxvb2tzIGxpa2UgaXQgaXMgcmVsYXRlZCB0byBoYW5kbGluZyBvZiBvbGQgYWNrbm93bGVkZ2VtZW50cy4KCkl0JiMzOTtzIGltbWVkaWF0ZWx5IGNsZWFyIHRoaXMgcmVsYXRlcyB0byBhbiBpc3N1ZSB0aGF0IHByb2JhYmx5IGludm9sdmVzIHJlb3JkZXJpbmcgb3IgZGVsYXllZCBBQ0tzLCBvciBtYXliZSBldmVuIHByb3RlY3Rpb24gYWdhaW5zdCBBQ0sgYXR0YWNrcy4gQW5kIHRoZSBpbmNsdXNpb24gb2YgYSBwYWNrZXRkcmlsbCB0ZXN0LCBgdGNwX3JmYzU5NjFfcmVqZWN0LW9sZC1hY2sucGt0YCwgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBzcGVjaWZpYyBzY2VuYXJpbyBkZWZpbmVkIGluIFJGQyA1OTYxIHJlbGF0ZWQgdG8gcmVqZWN0aW5nIG9sZCBBQ0tzLiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSBvbGQgYmVoYXZpb3Igd2FzIHRvIHNlZSB3aGF0IHRoZSB2dWxuZXJhYmlsaXR5IGNvdWxkIGhhdmUgYmVlbi4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIGZ1bmN0aW9uIG1vcmUgZGVlcGx5IHRvIGdyYXNwIHRoZSBmdWxsIGltcGxpY2F0aW9ucy4gSSB3aWxsIHVzZSB0aGUgYHJlYWQtZmlsZWAgY29tbWFuZCB0byBsb2FkIHRoZSBjb2RlLiBJIGFtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgYGFja19zZXFgIGludGVyYWN0cyB3aXRoIGBzbmRfdW5hYCBhbmQgYHNuZF9ueHRgIGluIG5vcm1hbCBvcGVyYXRpb24uIEkmIzM5O20gYWxzbyBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0IG9mIHRoaXMgY2hhbmdlLCBhbmQgd2hhdCBsZWQgdG8gdGhpcyBwYXJ0aWN1bGFyIGxpbmUgYmVpbmcgdXBkYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9pbnB1dC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjUzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2NTMwOlx0XHR0cC1cdTAwM2VyeF9vcHQuYWNjZWNuID0gMDtcbjY1MzE6XHRcbjY1MzI6XHRcdC8qXHRwcmVkX2ZsYWdzIGlzIDB4Uz8xMCBcdTAwM2NcdTAwM2MgMTYgJiM0Mzsgc25kX3duZFxuNjUzMzpcdFx0ICpcdGlmIGhlYWRlcl9wcmVkaWN0aW9uIGlzIHRvIGJlIG1hZGVcbjY1MzQ6XHRcdCAqXHQmIzM5O1MmIzM5OyB3aWxsIGFsd2F5cyBiZSB0cC1cdTAwM2V0Y3BfaGVhZGVyX2xlbiBcdTAwM2VcdTAwM2UgMlxuNjUzNTpcdFx0ICpcdCYjMzk7PyYjMzk7IHdpbGwgYmUgMCBmb3IgdGhlIGZhc3QgcGF0aCwgb3RoZXJ3aXNlIHByZWRfZmxhZ3MgaXMgMCB0b1xuNjUzNjpcdFx0ICogIHR1cm4gaXQgb2ZmXHQod2hlbiB0aGVyZSBhcmUgaG9sZXMgaW4gdGhlIHJlY2VpdmVcbjY1Mzc6XHRcdCAqXHQgc3BhY2UgZm9yIGluc3RhbmNlKVxuNjUzODpcdFx0ICpcdFBTSCBmbGFnIGlzIGlnbm9yZWQuXG42NTM5Olx0XHQgKi9cbjY1NDA6XHRcbjY1NDE6XHRcdGlmICgodGNwX2ZsYWdfd29yZCh0aCkgXHUwMDI2IFRDUF9IUF9CSVRTKSA9PSB0cC1cdTAwM2VwcmVkX2ZsYWdzIFx1MDAyNlx1MDAyNlxuNjU0MjpcdFx0ICAgIFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VzZXEgPT0gdHAtXHUwMDNlcmN2X254dCBcdTAwMjZcdTAwMjZcbjY1NDM6XHRcdCAgICBiZXR3ZWVuKFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VhY2tfc2VxLCB0cC1cdTAwM2VzbmRfdW5hLCB0cC1cdTAwM2VzbmRfbnh0KSkge1xuNjU0NDpcdFx0XHRpbnQgdGNwX2hlYWRlcl9sZW4gPSB0cC1cdTAwM2V0Y3BfaGVhZGVyX2xlbjtcbjY1NDU6XHRcdFx0czMyIGRlbHRhID0gMDtcbjY1NDY6XHRcdFx0aW50IGZsYWcgPSAwO1xuNjU0NzpcdFxuNjU0ODpcdFx0XHQvKiBUaW1lc3RhbXAgaGVhZGVyIHByZWRpY3Rpb246IHRjcF9oZWFkZXJfbGVuXG42NTQ5Olx0XHRcdCAqIGlzIGF1dG9tYXRpY2FsbHkgZXF1YWwgdG8gdGgtXHUwMDNlZG9mZio0IGR1ZSB0byBwcmVkX2ZsYWdzXG42NTUwOlx0XHRcdCAqIG1hdGNoLlxuNjU1MTpcdFx0XHQgKi9cbjY1NTI6XHRcbjY1NTM6XHRcdFx0LyogQ2hlY2sgdGltZXN0YW1wICovXG42NTU0Olx0XHRcdGlmICh0Y3BfaGVhZGVyX2xlbiA9PSBzaXplb2Yoc3RydWN0IHRjcGhkcikgJiM0MzsgVENQT0xFTl9UU1RBTVBfQUxJR05FRCkge1xuNjU1NTpcdFx0XHRcdC8qIE5vPyBTbG93IHBhdGghICovXG42NTU2Olx0XHRcdFx0aWYgKCF0Y3BfcGFyc2VfYWxpZ25lZF90aW1lc3RhbXAodHAsIHRoKSlcbjY1NTc6XHRcdFx0XHRcdGdvdG8gc2xvd19wYXRoO1xuNjU1ODpcdFxuNjU1OTpcdFx0XHRcdGRlbHRhID0gdHAtXHUwMDNlcnhfb3B0LnJjdl90c3ZhbCAtXG42NTYwOlx0XHRcdFx0XHR0cC1cdTAwM2VyeF9vcHQudHNfcmVjZW50O1xuNjU2MTpcdFx0XHRcdC8qIElmIFBBV1MgZmFpbGVkLCBjaGVjayBpdCBtb3JlIGNhcmVmdWxseSBpbiBzbG93IHBhdGggKi9cbjY1NjI6XHRcdFx0XHRpZiAoZGVsdGEgXHUwMDNjIDApXG42NTYzOlx0XHRcdFx0XHRnb3RvIHNsb3dfcGF0aDtcbjY1NjQ6XHRcbjY1NjU6XHRcdFx0XHQvKiBETyBOT1QgdXBkYXRlIHRzX3JlY2VudCBoZXJlLCBpZiBjaGVja3N1bSBmYWlsc1xuNjU2NjpcdFx0XHRcdCAqIGFuZCB0aW1lc3RhbXAgd2FzIGNvcnJ1cHRlZCBwYXJ0LCBpdCB3aWxsIHJlc3VsdFxuNjU2NzpcdFx0XHRcdCAqIGluIGEgaHVuZyBjb25uZWN0aW9uIHNpbmNlIHdlIHdpbGwgZHJvcCBhbGxcbjY1Njg6XHRcdFx0XHQgKiBmdXR1cmUgcGFja2V0cyBkdWUgdG8gdGhlIFBBV1MgdGVzdC5cbjY1Njk6XHRcdFx0XHQgKi9cbjY1NzA6XHRcdFx0fVxuNjU3MTpcdFxuNjU3MjpcdFx0XHRpZiAobGVuIFx1MDAzYz0gdGNwX2hlYWRlcl9sZW4pIHtcbjY1NzM6XHRcdFx0XHQvKiBCdWxrIGRhdGEgdHJhbnNmZXI6IHNlbmRlciAqL1xuNjU3NDpcdFx0XHRcdGlmIChsZW4gPT0gdGNwX2hlYWRlcl9sZW4pIHtcbjY1NzU6XHRcdFx0XHRcdC8qIFByZWRpY3RlZCBwYWNrZXQgaXMgaW4gd2luZG93IGJ5IGRlZmluaXRpb24uXG42NTc2Olx0XHRcdFx0XHQgKiBzZXEgPT0gcmN2X254dCBhbmQgcmN2X3d1cCBcdTAwM2M9IHJjdl9ueHQuXG42NTc3Olx0XHRcdFx0XHQgKiBIZW5jZSwgY2hlY2sgc2VxXHUwMDNjPXJjdl93dXAgcmVkdWNlcyB0bzpcbjY1Nzg6XHRcdFx0XHRcdCAqL1xuNjU3OTpcdFx0XHRcdFx0aWYgKHRjcF9oZWFkZXJfbGVuID09XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE2OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDgwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBUQ1AgSGVhZGVyIFByZWRpY3Rpb24gQ2hhbmdlIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGNoYW5nZSBpbiBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAuIEl0IHNlZW1zIHRoZXkmIzM5O3ZlIHRpZ2h0ZW5lZCB1cCB0aGUgaGVhZGVyIHByZWRpY3Rpb24gbG9naWMsIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyB0aGUgYGFja19zZXFgLiBQcmV2aW91c2x5LCBpZiBgYWNrX3NlcWAgd2FzICpiZWZvcmUqIGB0cC0mZ3Q7c25kX3VuYWAsIGl0IGNvdWxkIHN0aWxsIHRha2UgdGhlIGZhc3QgcGF0aC4gTm93LCBpdCYjMzk7cyBleHBsaWNpdGx5IGV4Y2x1ZGVkIGZyb20gdGhlIGZhc3QgcGF0aCwgZm9yY2luZyBpdCBkb3duIHRoZSBzbG93IHBhdGggaWYgYGFja19zZXFgIGlzIG91dHNpZGUgYFtTTkQuVU5BLCBTTkQuTlhUXWAuIFRoZSBjb21tZW50IG1lbnRpb25zIFJGQyA1OTYxIGFuZCAmIzM0O2JsaW5kIGRhdGEgaW5qZWN0aW9uIG9yIG9sZCBBQ0tzJiMzNDsuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlIOKAkyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBwb3RlbnRpYWxseSBoYW5kbGluZyBvdXQtb2Ytb3JkZXIgb3IgbWFsaWNpb3VzIEFDS3MuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IElzIHRoaXMgcmVhY2hhYmxlIGNvZGU/IE9mIGNvdXJzZSEgYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIGlzIHRoZSBoZWFydCBvZiBUQ1AgcGFja2V0IHByb2Nlc3NpbmcgZm9yIGVzdGFibGlzaGVkIGNvbm5lY3Rpb25zLiBUaGlzIGlzIHN0YW5kYXJkIHN0dWZmLCBzbyB0aGF0JiMzOTtzIGEgZGVmaW5pdGUgJiMzNDt5ZXMuJiMzNDsKCk5leHQsIGxldCYjMzk7cyBzZWUgaWYgaXQmIzM5O3MgZnV6emFibGUuIFRoZSAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IGd1aWRlbGluZXMgYXJlIG15IGd1aWRlIGhlcmUuIFJlYWNoYWJpbGl0eSBpcyB0aGUgcHJpbWFyeSBnYXRlLCBhbmQgdGhpcyBjb2RlIGRlZmluaXRlbHkgZXhlY3V0ZXMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGVuLCBjb3JlIHN1YnN5c3RlbXMgbGlrZSBuZXR3b3JraW5nIGFyZSBwcmltZSB0YXJnZXRzLCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4KCkFscmlnaHQsIHdoYXQgZnVuY3Rpb25zIHNob3VsZCBJIGZvY3VzIG9uPyBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAgaXMgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgdGhpcyBzaG91bGQgYmUgbXkgbWFpbiBlbnRyeXBvaW50LiBCdXQgYW0gSSB2aW9sYXRpbmcgdGhlICYjMzQ7QVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTJiMzNDsgcnVsZT8gSSBuZWVkIHRvIGJlIGNhcmVmdWwgbm90IHRvIGRpbHV0ZSB0aGUgZnV6emluZyBlZmZvcnQuIElzIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBhIGdlbmVyaWMgZnVuY3Rpb24gY2FsbGVkIGJ5IGV2ZXJ5dGhpbmc/IE5vLCBpdCYjMzk7cyBzcGVjaWZpYyB0byBUQ1AgcGFja2V0IHJlY2VpdmUuIEl0JiMzOTtzIGNhbGxlZCB3aGVuIHBhY2tldHMgYXJlIHJlY2VpdmVkIG9uIGVzdGFibGlzaGVkIFRDUCBzb2NrZXRzLCBzbyBpdCYjMzk7cyBub3QgdWJpcXVpdG91cy4gQnV0IGRvZXMgaXQgY2FsbCBzbG93X3BhdGggb3IgdGNwX3ZhbGlkYXRlX2luY29taW5nPyBJZiBpdCBkb2VzLCB0aGVuIHRoZSB3b3JrIGlzIGV2ZW4gbW9yZSBmb2N1c2VkLiBJIG5lZWQgdG8gY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG5ldC9pcHY0L3RjcF9pbnB1dC5jYCBhcm91bmQgbGluZXMgNjU0MC02NjUwIHRvIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfaW5wdXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY2NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjY0MDpcdFxuNjY0MTpcdFx0XHRcdGlmIChUQ1BfU0tCX0NCKHNrYiktXHUwMDNlYWNrX3NlcSAhPSB0cC1cdTAwM2VzbmRfdW5hKSB7XG42NjQyOlx0XHRcdFx0XHQvKiBXZWxsLCBvbmx5IG9uZSBzbWFsbCBqdW1wbGV0IGluIGZhc3QgcGF0aC4uLiAqL1xuNjY0MzpcdFx0XHRcdFx0dGNwX2Fjayhzaywgc2tiLCBmbGFnIHwgRkxBR19EQVRBKTtcbjY2NDQ6XHRcdFx0XHRcdHRjcF9kYXRhX3NuZF9jaGVjayhzayk7XG42NjQ1Olx0XHRcdFx0XHRpZiAoIWluZXRfY3NrX2Fja19zY2hlZHVsZWQoc2spKVxuNjY0NjpcdFx0XHRcdFx0XHRnb3RvIG5vX2FjaztcbjY2NDc6XHRcdFx0XHR9IGVsc2Uge1xuNjY0ODpcdFx0XHRcdFx0dGNwX3VwZGF0ZV93bCh0cCwgVENQX1NLQl9DQihza2IpLVx1MDAzZXNlcSk7XG42NjQ5Olx0XHRcdFx0fVxuNjY1MDpcdFxuNjY1MTpcdFx0XHRcdF9fdGNwX2Fja19zbmRfY2hlY2soc2ssIDApO1xuNjY1MjpcdG5vX2FjazpcbjY2NTM6XHRcdFx0XHRpZiAoZWF0ZW4pXG42NjU0Olx0XHRcdFx0XHRrZnJlZV9za2JfcGFydGlhbChza2IsIGZyYWdzdG9sZW4pO1xuNjY1NTpcdFx0XHRcdHRjcF9kYXRhX3JlYWR5KHNrKTtcbjY2NTY6XHRcdFx0XHRyZXR1cm47XG42NjU3Olx0XHRcdH1cbjY2NTg6XHRcdH1cbjY2NTk6XHRcbjY2NjA6XHRzbG93X3BhdGg6XG42NjYxOlx0XHRpZiAobGVuIFx1MDAzYyAodGgtXHUwMDNlZG9mZiBcdTAwM2NcdTAwM2MgMikgfHwgdGNwX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpXG42NjYyOlx0XHRcdGdvdG8gY3N1bV9lcnJvcjtcbjY2NjM6XHRcbjY2NjQ6XHRcdGlmICghdGgtXHUwMDNlYWNrIFx1MDAyNlx1MDAyNiAhdGgtXHUwMDNlcnN0IFx1MDAyNlx1MDAyNiAhdGgtXHUwMDNlc3luKSB7XG42NjY1Olx0XHRcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9UQ1BfRkxBR1M7XG42NjY2Olx0XHRcdGdvdG8gZGlzY2FyZDtcbjY2Njc6XHRcdH1cbjY2Njg6XHRcbjY2Njk6XHRcdC8qXG42NjcwOlx0XHQgKlx0U3RhbmRhcmQgc2xvdyBwYXRoLlxuNjY3MTpcdFx0ICovXG42NjcyOlx0dmFsaWRhdGU6XG42NjczOlx0XHRpZiAoIXRjcF92YWxpZGF0ZV9pbmNvbWluZyhzaywgc2tiLCB0aCwgMSkpXG42Njc0Olx0XHRcdHJldHVybjtcbjY2NzU6XHRcbjY2NzY6XHRzdGVwNTpcbjY2Nzc6XHRcdHRjcF9lY25fcmVjZWl2ZWRfY291bnRlcnNfcGF5bG9hZChzaywgc2tiKTtcbjY2Nzg6XHRcbjY2Nzk6XHRcdHJlYXNvbiA9IHRjcF9hY2soc2ssIHNrYiwgRkxBR19TTE9XUEFUSCB8IEZMQUdfVVBEQVRFX1RTX1JFQ0VOVCk7XG42NjgwOlx0XHRpZiAoKGludClyZWFzb24gXHUwMDNjIDApIHtcbjY2ODE6XHRcdFx0cmVhc29uID0gLXJlYXNvbjtcbjY2ODI6XHRcdFx0Z290byBkaXNjYXJkO1xuNjY4MzpcdFx0fVxuNjY4NDpcdFx0dGNwX3Jjdl9ydHRfbWVhc3VyZV90cyhzaywgc2tiKTtcbjY2ODU6XHRcbjY2ODY6XHRcdC8qIFByb2Nlc3MgdXJnZW50IGRhdGEuICovXG42Njg3Olx0XHR0Y3BfdXJnKHNrLCBza2IsIHRoKTtcbjY2ODg6XHRcbjY2ODk6XHRcdC8qIHN0ZXAgNzogcHJvY2VzcyB0aGUgc2VnbWVudCB0ZXh0ICovXG42NjkwOlx0XHR0Y3BfZGF0YV9xdWV1ZShzaywgc2tiKTtcbjY2OTE6XHRcbjY2OTI6XHRcdHRjcF9kYXRhX3NuZF9jaGVjayhzayk7XG42NjkzOlx0XHR0Y3BfYWNrX3NuZF9jaGVjayhzayk7XG42Njk0Olx0XHRyZXR1cm47XG42Njk1Olx0XG42Njk2Olx0Y3N1bV9lcnJvcjpcbjY2OTc6XHRcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9UQ1BfQ1NVTTtcbjY2OTg6XHRcdHRyYWNlX3RjcF9iYWRfY3N1bShza2IpO1xuNjY5OTpcdFx0VENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIFRDUF9NSUJfQ1NVTUVSUk9SUyk7XG42NzAwOlx0XHRUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgVENQX01JQl9JTkVSUlMpO1xuNjcwMTpcdFxuNjcwMjpcdGRpc2NhcmQ6XG42NzAzOlx0XHR0Y3BfZHJvcF9yZWFzb24oc2ssIHNrYiwgcmVhc29uKTtcbjY3MDQ6XHR9XG42NzA1Olx0XG42NzA2Olx0dm9pZCB0Y3BfaW5pdF90cmFuc2ZlcihzdHJ1Y3Qgc29jayAqc2ssIGludCBicGZfb3AsIHN0cnVjdCBza19idWZmICpza2IpXG42NzA3Olx0e1xuNjcwODpcdFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xuNjcwOTpcdFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XG42NzEwOlx0XG42NzExOlx0XHR0Y3BfbXR1cF9pbml0KHNrKTtcbjY3MTI6XHRcdGljc2stXHUwMDNlaWNza19hZl9vcHMtXHUwMDNlcmVidWlsZF9oZWFkZXIoc2spO1xuNjcxMzpcdFx0dGNwX2luaXRfbWV0cmljcyhzayk7XG42NzE0Olx0XG42NzE1Olx0XHQvKiBJbml0aWFsaXplIHRoZSBjb25nZXN0aW9uIHdpbmRvdyB0byBzdGFydCB0aGUgdHJhbnNmZXIuXG42NzE2Olx0XHQgKiBDdXQgY3duZCBkb3duIHRvIDEgcGVyIFJGQzU2ODEgaWYgU1lOIG9yIFNZTi1BQ0sgaGFzIGJlZW5cbjY3MTc6XHRcdCAqIHJldHJhbnNtaXR0ZWQuIEluIGxpZ2h0IG9mIFJGQzYyOTggbW9yZSBhZ2dyZXNzaXZlIDFzZWNcbjY3MTg6XHRcdCAqIGluaXRSVE8sIHdlIG9ubHkgcmVzZXQgY3duZCB3aGVuIG1vcmUgdGhhbiAxIFNZTi9TWU4tQUNLXG42NzE5Olx0XHQgKiByZXRyYW5zbWlzc2lvbiBoYXMgb2NjdXJyZWQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY4MwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqQW5hbHl6aW5nIHRoZSBUQ1AgU2VxdWVuY2UgVmVyaWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2tpbmcgdGhpcyBgYWNrX3NlcWAgdmFsdWUgYW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gYHRwLSZndDtzbmRfdW5hYCB3aXRoaW4gdGhlIFRDUCBzZXF1ZW5jZS4gV2hlbiBgYWNrX3NlcWAgcHJlY2VkZXMgYHRwLSZndDtzbmRfdW5hYCwgdGhlIGZsb3cgbm93IGltbWVkaWF0ZWx5IGJyYW5jaGVzIHRvIHRoZSBgc2xvd19wYXRoOmAgbGFiZWwsIGFuZCB0aGF0IHF1aWNrbHkgbGFuZHMgbWUgaW4gYHRjcF92YWxpZGF0ZV9pbmNvbWluZygpYC4gR2l2ZW4gdGhhdCBJIGhhdmUgYSBnb29kIGhhbmRsZSBvbiBob3cgdGhlIGNvZGUgYmFzZSB3b3JrcywgYW5kIGFtIHRyeWluZyB0byB1bmRlcnN0YW5kICp3aHkqIGEgcmVjZW50IGlzc3VlIGlzIGhhcHBlbmluZywgbXkgbmV4dCBzdG9wIGlzIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgc2NydXRpbml6aW5nIHRoZSBsb2dpYyB3aXRoaW4gYHRjcF92YWxpZGF0ZV9pbmNvbWluZygpYCwgbGlrZWx5IGFyb3VuZCBsaW5lIDY0OTAuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIHRoZXJlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2lucHV0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY0NTA6XHRcdFx0ICAgIFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VzZXEgJiM0MzsgMSA9PSB0cC1cdTAwM2VyY3Zfbnh0IFx1MDAyNlx1MDAyNlxuNjQ1MTpcdFx0XHQgICAgVENQX1NLQl9DQihza2IpLVx1MDAzZWFja19zZXEgPT0gdHAtXHUwMDNlc25kX254dClcbjY0NTI6XHRcdFx0XHRnb3RvIHBhc3M7XG42NDUzOlx0c3luX2NoYWxsZW5nZTpcbjY0NTQ6XHRcdFx0aWYgKHN5bl9pbmVycilcbjY0NTU6XHRcdFx0XHRUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgVENQX01JQl9JTkVSUlMpO1xuNjQ1NjpcdFx0XHRORVRfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1RDUFNZTkNIQUxMRU5HRSk7XG42NDU3Olx0XHRcdHRjcF9zZW5kX2NoYWxsZW5nZV9hY2soc2ssIGFjY2Vjbl9yZWZsZWN0b3IpO1xuNjQ1ODpcdFx0XHRTS0JfRFJfU0VUKHJlYXNvbiwgVENQX0lOVkFMSURfU1lOKTtcbjY0NTk6XHRcdFx0Z290byBkaXNjYXJkO1xuNjQ2MDpcdFx0fVxuNjQ2MTpcdFxuNjQ2MjpcdHBhc3M6XG42NDYzOlx0XHRicGZfc2tvcHNfcGFyc2VfaGRyKHNrLCBza2IpO1xuNjQ2NDpcdFxuNjQ2NTpcdFx0cmV0dXJuIHRydWU7XG42NDY2Olx0XG42NDY3Olx0ZGlzY2FyZDpcbjY0Njg6XHRcdHRjcF9kcm9wX3JlYXNvbihzaywgc2tiLCByZWFzb24pO1xuNjQ2OTpcdFx0cmV0dXJuIGZhbHNlO1xuNjQ3MDpcdFxuNjQ3MTpcdHJlc2V0OlxuNjQ3MjpcdFx0dGNwX3Jlc2V0KHNrLCBza2IpO1xuNjQ3MzpcdFx0X19rZnJlZV9za2Ioc2tiKTtcbjY0NzQ6XHRcdHJldHVybiBmYWxzZTtcbjY0NzU6XHR9XG42NDc2Olx0XG42NDc3Olx0LypcbjY0Nzg6XHQgKlx0VENQIHJlY2VpdmUgZnVuY3Rpb24gZm9yIHRoZSBFU1RBQkxJU0hFRCBzdGF0ZS5cbjY0Nzk6XHQgKlxuNjQ4MDpcdCAqXHRJdCBpcyBzcGxpdCBpbnRvIGEgZmFzdCBwYXRoIGFuZCBhIHNsb3cgcGF0aC4gVGhlIGZhc3QgcGF0aCBpc1xuNjQ4MTpcdCAqIFx0ZGlzYWJsZWQgd2hlbjpcbjY0ODI6XHQgKlx0LSBBIHplcm8gd2luZG93IHdhcyBhbm5vdW5jZWQgZnJvbSB1cyAtIHplcm8gd2luZG93IHByb2JpbmdcbjY0ODM6XHQgKiAgICAgICAgaXMgb25seSBoYW5kbGVkIHByb3Blcmx5IGluIHRoZSBzbG93IHBhdGguXG42NDg0Olx0ICpcdC0gT3V0IG9mIG9yZGVyIHNlZ21lbnRzIGFycml2ZWQuXG42NDg1Olx0ICpcdC0gVXJnZW50IGRhdGEgaXMgZXhwZWN0ZWQuXG42NDg2Olx0ICpcdC0gVGhlcmUgaXMgbm8gYnVmZmVyIHNwYWNlIGxlZnRcbjY0ODc6XHQgKlx0LSBVbmV4cGVjdGVkIFRDUCBmbGFncy93aW5kb3cgdmFsdWVzL2hlYWRlciBsZW5ndGhzIGFyZSByZWNlaXZlZFxuNjQ4ODpcdCAqXHQgIChkZXRlY3RlZCBieSBjaGVja2luZyB0aGUgVENQIGhlYWRlciBhZ2FpbnN0IHByZWRfZmxhZ3MpXG42NDg5Olx0ICpcdC0gRGF0YSBpcyBzZW50IGluIGJvdGggZGlyZWN0aW9ucy4gRmFzdCBwYXRoIG9ubHkgc3VwcG9ydHMgcHVyZSBzZW5kZXJzXG42NDkwOlx0ICpcdCAgb3IgcHVyZSByZWNlaXZlcnMgKHRoaXMgbWVhbnMgZWl0aGVyIHRoZSBzZXF1ZW5jZSBudW1iZXIgb3IgdGhlIGFja1xuNjQ5MTpcdCAqXHQgIHZhbHVlIG11c3Qgc3RheSBjb25zdGFudClcbjY0OTI6XHQgKlx0LSBVbmV4cGVjdGVkIFRDUCBvcHRpb24uXG42NDkzOlx0ICpcdC0gQUNLIHNlcXVlbmNlIG51bWJlciBpcyBvdXRzaWRlIFtTTkQuVU5BLCBTTkQuTlhUXS5cbjY0OTQ6XHQgKlxuNjQ5NTpcdCAqXHRXaGVuIHRoZXNlIGNvbmRpdGlvbnMgYXJlIG5vdCBzYXRpc2ZpZWQgaXQgZHJvcHMgaW50byBhIHN0YW5kYXJkXG42NDk2Olx0ICpcdHJlY2VpdmUgcHJvY2VkdXJlIHBhdHRlcm5lZCBhZnRlciBSRkM3OTMgdG8gaGFuZGxlIGFsbCBjYXNlcy5cbjY0OTc6XHQgKlx0VGhlIGZpcnN0IHRocmVlIGNhc2VzIGFyZSBndWFyYW50ZWVkIGJ5IHByb3BlciBwcmVkX2ZsYWdzIHNldHRpbmcsXG42NDk4Olx0ICpcdHRoZSByZXN0IGlzIGNoZWNrZWQgaW5saW5lLiBGYXN0IHByb2Nlc3NpbmcgaXMgdHVybmVkIG9uIGluXG42NDk5Olx0ICpcdHRjcF9kYXRhX3F1ZXVlIHdoZW4gZXZlcnl0aGluZyBpcyBPSy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzY3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gVENQIFZhbGlkYXRpb24gZm9yIFJGQyA1OTYxIENvbXBhdGliaWxpdHkqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwmIzM5O3MgYHRjcF92YWxpZGF0ZV9pbmNvbWluZ2AgZnVuY3Rpb24gaGFuZGxlcyBpbmNvbWluZyBUQ1Agc2VnbWVudHMsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byBSRkMgNTk2MSwgb3IgaG93IGl0IHRyZWF0cyBvbGRlciBhY2tub3dsZWRnZW1lbnRzLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb2RlIHRvIGZpZ3VyZSB0aGlzIG91dC4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgaW4gdGhlIGBuZXQvaXB2NC90Y3BfaW5wdXQuY2AgZmlsZSwgd2hlcmUgdGhlIGNvcmUgVENQIGlucHV0IHByb2Nlc3NpbmcgbG9naWMgcmVzaWRlcy4gSSYjMzk7bGwgZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGxpbmVzIDYzNzAgdGhyb3VnaCA2NDUwLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIGxvZ2ljIGJlaW5nIHVzZWQuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLiBUaGlzIHdpbGwgYmUgdGhlIGtleSBwYXJ0IG9mIHRoaXMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2lucHV0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MzcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzYzNzA6XHRcdFx0XHRpZiAodGgtXHUwMDNlc3luKVxuNjM3MTpcdFx0XHRcdFx0Z290byBzeW5fY2hhbGxlbmdlO1xuNjM3MjpcdFxuNjM3MzpcdFx0XHRcdGlmIChyZWFzb24gPT0gU0tCX0RST1BfUkVBU09OX1RDUF9JTlZBTElEX1NFUVVFTkNFIHx8XG42Mzc0Olx0XHRcdFx0ICAgIHJlYXNvbiA9PSBTS0JfRFJPUF9SRUFTT05fVENQX0lOVkFMSURfRU5EX1NFUVVFTkNFKVxuNjM3NTpcdFx0XHRcdFx0TkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksXG42Mzc2Olx0XHRcdFx0XHRcdCAgICAgIExJTlVYX01JQl9CRVlPTkRfV0lORE9XKTtcbjYzNzc6XHRcdFx0XHRpZiAoIXRjcF9vb3dfcmF0ZV9saW1pdGVkKHNvY2tfbmV0KHNrKSwgc2tiLFxuNjM3ODpcdFx0XHRcdFx0XHRcdCAgTElOVVhfTUlCX1RDUEFDS1NLSVBQRURTRVEsXG42Mzc5Olx0XHRcdFx0XHRcdFx0ICBcdTAwMjZ0cC1cdTAwM2VsYXN0X29vd19hY2tfdGltZSkpXG42MzgwOlx0XHRcdFx0XHR0Y3Bfc2VuZF9kdXBhY2soc2ssIHNrYik7XG42MzgxOlx0XHRcdH0gZWxzZSBpZiAodGNwX3Jlc2V0X2NoZWNrKHNrLCBza2IpKSB7XG42MzgyOlx0XHRcdFx0Z290byByZXNldDtcbjYzODM6XHRcdFx0fVxuNjM4NDpcdFx0XHRnb3RvIGRpc2NhcmQ7XG42Mzg1Olx0XHR9XG42Mzg2Olx0XG42Mzg3Olx0XHQvKiBTdGVwIDI6IGNoZWNrIFJTVCBiaXQgKi9cbjYzODg6XHRcdGlmICh0aC1cdTAwM2Vyc3QpIHtcbjYzODk6XHRcdFx0LyogUkZDIDU5NjEgMy4yIChleHRlbmQgdG8gbWF0Y2ggYWdhaW5zdCAoUkNWLk5YVCAtIDEpIGFmdGVyIGFcbjYzOTA6XHRcdFx0ICogRklOIGFuZCBTQUNLIHRvbyBpZiBhdmFpbGFibGUpOlxuNjM5MTpcdFx0XHQgKiBJZiBzZXEgbnVtIG1hdGNoZXMgUkNWLk5YVCBvciAoUkNWLk5YVCAtIDEpIGFmdGVyIGEgRklOLCBvclxuNjM5MjpcdFx0XHQgKiB0aGUgcmlnaHQtbW9zdCBTQUNLIGJsb2NrLFxuNjM5MzpcdFx0XHQgKiB0aGVuXG42Mzk0Olx0XHRcdCAqICAgICBSRVNFVCB0aGUgY29ubmVjdGlvblxuNjM5NTpcdFx0XHQgKiBlbHNlXG42Mzk2Olx0XHRcdCAqICAgICBTZW5kIGEgY2hhbGxlbmdlIEFDS1xuNjM5NzpcdFx0XHQgKi9cbjYzOTg6XHRcdFx0aWYgKFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VzZXEgPT0gdHAtXHUwMDNlcmN2X254dCB8fFxuNjM5OTpcdFx0XHQgICAgdGNwX3Jlc2V0X2NoZWNrKHNrLCBza2IpKVxuNjQwMDpcdFx0XHRcdGdvdG8gcmVzZXQ7XG42NDAxOlx0XG42NDAyOlx0XHRcdGlmICh0Y3BfaXNfc2Fjayh0cCkgXHUwMDI2XHUwMDI2IHRwLVx1MDAzZXJ4X29wdC5udW1fc2Fja3MgXHUwMDNlIDApIHtcbjY0MDM6XHRcdFx0XHRzdHJ1Y3QgdGNwX3NhY2tfYmxvY2sgKnNwID0gXHUwMDI2dHAtXHUwMDNlc2VsZWN0aXZlX2Fja3NbMF07XG42NDA0Olx0XHRcdFx0aW50IG1heF9zYWNrID0gc3BbMF0uZW5kX3NlcTtcbjY0MDU6XHRcdFx0XHRpbnQgdGhpc19zYWNrO1xuNjQwNjpcdFxuNjQwNzpcdFx0XHRcdGZvciAodGhpc19zYWNrID0gMTsgdGhpc19zYWNrIFx1MDAzYyB0cC1cdTAwM2VyeF9vcHQubnVtX3NhY2tzO1xuNjQwODpcdFx0XHRcdCAgICAgJiM0MzsmIzQzO3RoaXNfc2Fjaykge1xuNjQwOTpcdFx0XHRcdFx0bWF4X3NhY2sgPSBhZnRlcihzcFt0aGlzX3NhY2tdLmVuZF9zZXEsXG42NDEwOlx0XHRcdFx0XHRcdFx0IG1heF9zYWNrKSA/XG42NDExOlx0XHRcdFx0XHRcdHNwW3RoaXNfc2Fja10uZW5kX3NlcSA6IG1heF9zYWNrO1xuNjQxMjpcdFx0XHRcdH1cbjY0MTM6XHRcbjY0MTQ6XHRcdFx0XHRpZiAoVENQX1NLQl9DQihza2IpLVx1MDAzZXNlcSA9PSBtYXhfc2FjaylcbjY0MTU6XHRcdFx0XHRcdGdvdG8gcmVzZXQ7XG42NDE2Olx0XHRcdH1cbjY0MTc6XHRcbjY0MTg6XHRcdFx0LyogRGlzYWJsZSBURk8gaWYgUlNUIGlzIG91dC1vZi1vcmRlclxuNjQxOTpcdFx0XHQgKiBhbmQgbm8gZGF0YSBoYXMgYmVlbiByZWNlaXZlZFxuNjQyMDpcdFx0XHQgKiBmb3IgY3VycmVudCBhY3RpdmUgVEZPIHNvY2tldFxuNjQyMTpcdFx0XHQgKi9cbjY0MjI6XHRcdFx0aWYgKHRwLVx1MDAzZXN5bl9mYXN0b3BlbiBcdTAwMjZcdTAwMjYgIXRwLVx1MDAzZWRhdGFfc2Vnc19pbiBcdTAwMjZcdTAwMjZcbjY0MjM6XHRcdFx0ICAgIHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9FU1RBQkxJU0hFRClcbjY0MjQ6XHRcdFx0XHR0Y3BfZmFzdG9wZW5fYWN0aXZlX2Rpc2FibGUoc2spO1xuNjQyNTpcdFx0XHR0Y3Bfc2VuZF9jaGFsbGVuZ2VfYWNrKHNrLCBmYWxzZSk7XG42NDI2Olx0XHRcdFNLQl9EUl9TRVQocmVhc29uLCBUQ1BfUkVTRVQpO1xuNjQyNzpcdFx0XHRnb3RvIGRpc2NhcmQ7XG42NDI4Olx0XHR9XG42NDI5Olx0XG42NDMwOlx0XHQvKiBzdGVwIDM6IGNoZWNrIHNlY3VyaXR5IGFuZCBwcmVjZWRlbmNlIFtpZ25vcmVkXSAqL1xuNjQzMTpcdFxuNjQzMjpcdFx0Lyogc3RlcCA0OiBDaGVjayBmb3IgYSBTWU5cbjY0MzM6XHRcdCAqIFJGQyA1OTYxIDQuMiA6IFNlbmQgYSBjaGFsbGVuZ2UgYWNrXG42NDM0Olx0XHQgKi9cbjY0MzU6XHRcdGlmICh0aC1cdTAwM2VzeW4pIHtcbjY0MzY6XHRcdFx0aWYgKHRjcF9lY25fbW9kZV9hY2NlY24odHApKSB7XG42NDM3Olx0XHRcdFx0YWNjZWNuX3JlZmxlY3RvciA9IHRydWU7XG42NDM4Olx0XHRcdFx0dHAtXHUwMDNlc3luX2VjdF9yY3YgPSBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlaXBfZHNmaWVsZCBcdTAwMjZcbjY0Mzk6XHRcdFx0XHRcdFx0ICBJTkVUX0VDTl9NQVNLO1xuNjQ0MDpcdFx0XHRcdGlmICh0cC1cdTAwM2VyeF9vcHQuYWNjZWNuIFx1MDAyNlx1MDAyNlxuNjQ0MTpcdFx0XHRcdCAgICB0cC1cdTAwM2VzYXdfYWNjZWNuX29wdCBcdTAwM2MgVENQX0FDQ0VDTl9PUFRfQ09VTlRFUl9TRUVOKSB7XG42NDQyOlx0XHRcdFx0XHR1OCBzYXdfb3B0ID0gdGNwX2FjY2Vjbl9vcHRpb25faW5pdChza2IsIHRwLVx1MDAzZXJ4X29wdC5hY2NlY24pO1xuNjQ0MzpcdFxuNjQ0NDpcdFx0XHRcdFx0dGNwX2FjY2Vjbl9zYXdfb3B0X2ZhaWxfcmVjdih0cCwgc2F3X29wdCk7XG42NDQ1Olx0XHRcdFx0XHR0Y3BfYWNjZWNuX29wdF9kZW1hbmRfbWluKHNrLCAxKTtcbjY0NDY6XHRcdFx0XHR9XG42NDQ3Olx0XHRcdH1cbjY0NDg6XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9TWU5fUkVDViBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfc29ja2V0IFx1MDAyNlx1MDAyNiB0aC1cdTAwM2VhY2sgXHUwMDI2XHUwMDI2XG42NDQ5Olx0XHRcdCAgICBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlc2VxICYjNDM7IDEgPT0gVENQX1NLQl9DQihza2IpLVx1MDAzZWVuZF9zZXEgXHUwMDI2XHUwMDI2XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzk2CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTmF2aWdhdGluZyBUQ1AgQWNrbm93bGVkZ2VtZW50IFZhbGlkYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBvbiBzdGVwIGZpdmUsIHdoaWNoIHNheXMgdG8gY2hlY2sgdGhlIEFDSyBmaWVsZCBpbiBgdGNwX3ZhbGlkYXRlX2luY29taW5nYC4gQnV0LCBob2xkIG9uIGEgc2Vjb25kLi4uIHdoZXJlICppcyogdGhhdCBjaGVjayBhY3R1YWxseSBoYXBwZW5pbmc/IEkgZG9uJiMzOTt0IHNlZSBpdCBleHBsaWNpdGx5LiBUaGlzIGlzIHdoZXJlIEkgaGF2ZSB0byBzdGFydCBkaWdnaW5nLgoKTXkgZmlyc3QgdGhvdWdodCBpcyB0byB1c2UgYGdyZXBgIHRvIHNlYXJjaCBmb3IgYHJmYzU5NjFgIHdpdGhpbiB0aGUgY29kZS4gVGhhdCBSRkMgaXMgcHJvYmFibHkgcmVsZXZhbnQgaGVyZS4gQWx0ZXJuYXRpdmVseSwgSSBzaG91bGQgbG9vayBhdCB0aGUgYHRjcF9hY2tgIGZ1bmN0aW9uIGl0c2VsZiDigJMgdGhhdCYjMzk7cyB0aGUgbW9zdCBsaWtlbHkgcGxhY2UuIEl0JiMzOTtzIGFsc28gd29ydGggbXkgdGltZSB0byBnbyBiYWNrIHRvIHRoZSBjb2RlIGRpcmVjdGx5IGFib3ZlIHRoZSBzcGVjaWZpYyBjYWxsIHRvIGB0Y3BfdmFsaWRhdGVfaW5jb21pbmdgIG9yIGFueSByZWxhdGVkIGNvZGUgd2l0aGluIHRoZSBmdW5jdGlvbi4gSSBjb3VsZCBldmVuIGNoZWNrIGB0Y3BfYWNrYCBmb3IgYW55IGNsdWVzIEkgbWlnaHQgaGF2ZSBtaXNzZWQuIEdvdHRhIGJlIG1ldGhvZGljYWwgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmZjNTk2MXxSRkMgNTk2MSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9pbnB1dC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9pbnB1dC5jPTQwMzE9c3RhdGljIHZvaWQgdGNwX3NlbmRfYWNrX3JlZmxlY3RfZWN0KHN0cnVjdCBzb2NrICpzaywgYm9vbCBhY2NlY25fcmVmbGVjdG9yKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQwNDAtXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo0MDQxOi8qIENvbnN1bWUgb25lIHNsb3QgZnJvbSB0aGUgcGVyLW5ldG5zIFJGQyA1OTYxIGNoYWxsZW5nZSBBQ0sgcXVvdGEuXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00MDQyLSAqIFJldHVybnMgdHJ1ZSBpZiBhIGNoYWxsZW5nZSBBQ0sgbWF5IGJlIHNlbnQuXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9NDA0ND1zdGF0aWMgYm9vbCB0Y3BfY2hhbGxlbmdlX2Fja19hbGxvd2VkKHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00MDY3LVxubmV0L2lwdjQvdGNwX2lucHV0LmM6NDA2ODovKiBSRkMgNTk2MSA3IFtBQ0sgVGhyb3R0bGluZ10gKi9cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQwNjktc3RhdGljIHZvaWQgdGNwX3NlbmRfY2hhbGxlbmdlX2FjayhzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgYWNjZWNuX3JlZmxlY3Rvcilcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00MDc5LVxubmV0L2lwdjQvdGNwX2lucHV0LmM6NDA4MDpcdC8qIFRoZW4gY2hlY2sgdGhlIHBlci1uZXRucyBSRkMgNTk2MSByYXRlIGxpbWl0LiAqL1xubmV0L2lwdjQvdGNwX2lucHV0LmMtNDA4MS1cdGlmICh0Y3BfY2hhbGxlbmdlX2Fja19hbGxvd2VkKG5ldCkpIHtcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz00Mjc2PXN0YXRpYyBpbnQgdGNwX2FjayhzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGludCBmbGFnKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQzMDktXHRcdG1heF93aW5kb3cgPSBtaW5fdCh1NjQsIHRwLVx1MDAzZW1heF93aW5kb3csIHRwLVx1MDAzZWJ5dGVzX2Fja2VkKTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjQzMTA6XHRcdC8qIFJGQyA1OTYxIDUuMiBbQmxpbmQgRGF0YSBJbmplY3Rpb24gQXR0YWNrXS5bTWl0aWdhdGlvbl0gKi9cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQzMTEtXHRcdGlmIChiZWZvcmUoYWNrLCBwcmlvcl9zbmRfdW5hIC0gbWF4X3dpbmRvdykpIHtcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00MzE5LVx0LyogSWYgdGhlIGFjayBpbmNsdWRlcyBkYXRhIHdlIGhhdmVuJiMzOTt0IHNlbnQgeWV0LCBkcm9wIHRoZVxubmV0L2lwdjQvdGNwX2lucHV0LmM6NDMyMDpcdCAqIHNlZ21lbnQuICBSRkMgNzkzIFNlY3Rpb24gMy45IGFuZCBSRkMgNTk2MSBTZWN0aW9uIDUuMlxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDMyMS1cdCAqIHJlcXVpcmUgdXMgdG8gc2VuZCBhbiBBQ0sgYmFjayBpbiB0aGF0IGNhc2UuXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9NjI3Nz1zdGF0aWMgdm9pZCB0Y3BfdXJnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHRjcGhkciAqdGgpXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjMwNC0gKiBGSU4gaXMgc2VudCBmb2xsb3dlZCBieSBhIFJTVCBwYWNrZXQuIFRoZSBSU1QgaXMgc2VudCB3aXRoIHRoZSBzYW1lXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo2MzA1OiAqIHNlcXVlbmNlIG51bWJlciBhcyB0aGUgRklOLCBhbmQgdGh1cyBhY2NvcmRpbmcgdG8gUkZDIDU5NjEgYSBjaGFsbGVuZ2Vcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTYzMDYtICogQUNLIHNob3VsZCBiZSBzZW50LiBIb3dldmVyLCBNYWMgT1NYIHJhdGUgbGltaXRzIHJlcGxpZXMgdG8gY2hhbGxlbmdlXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9NjMyMj1zdGF0aWMgYm9vbCB0Y3BfdmFsaWRhdGVfaW5jb21pbmcoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTYzODgtXHRpZiAodGgtXHUwMDNlcnN0KSB7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo2Mzg5Olx0XHQvKiBSRkMgNTk2MSAzLjIgKGV4dGVuZCB0byBtYXRjaCBhZ2FpbnN0IChSQ1YuTlhUIC0gMSkgYWZ0ZXIgYVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjM5MC1cdFx0ICogRklOIGFuZCBTQUNLIHRvbyBpZiBhdmFpbGFibGUpOlxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTY0MzItXHQvKiBzdGVwIDQ6IENoZWNrIGZvciBhIFNZTlxubmV0L2lwdjQvdGNwX2lucHV0LmM6NjQzMzpcdCAqIFJGQyA1OTYxIDQuMiA6IFNlbmQgYSBjaGFsbGVuZ2UgYWNrXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy02NDM0LVx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjczCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGNvZGUgc25pcHBldCwgdGhpbmtpbmcgb3V0IGxvdWQgYXMgSSBwcm9jZXNzIGl0OgoKKipEZWVwIERpdmUgaW50byBgdGNwX2Fja2AgYW5kIHRoZSBSRkMgNTk2MSBNaXRpZ2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyB6b29tIGluIG9uIGxpbmUgNDMxMCB3aXRoaW4gdGhlIGB0Y3BfYWNrYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgYmxvY2sgYXJvdW5kIGxpbmUgNDMwMCB0byBnaXZlIG1lIHNvbWUgY29udGV4dC4gSSYjMzk7bSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIHRoZSBjb21tZW50IHJlZmVyZW5jaW5nIFJGQyA1OTYxLCBzZWN0aW9uIDUuMiwgYW5kIGl0cyByZWxhdGlvbiB0byAmIzM0O0JsaW5kIERhdGEgSW5qZWN0aW9uIEF0dGFja3MuJiMzNDsgTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHJlY2FsbCB3aGF0IHRoYXQgc3BlY2lmaWMgc2VjdGlvbiBvZiB0aGUgUkZDIG91dGxpbmVzLCBlc3BlY2lhbGx5IGl0cyBtaXRpZ2F0aW9uIHN0cmF0ZWdpZXMuCgpUaGUgY29kZSBpdHNlbGYsIHdpdGggdGhhdCBgaWZgIHN0YXRlbWVudCwgc3VnZ2VzdHMgc29tZSBraW5kIG9mIGNoZWNrIG9yIGEgZ3VhcmQuIEkgcmVjb2duaXplIHRoZSB1c2Ugb2YgYGJlZm9yZSgpYCBtYWNybywgd2hpY2ggbGlrZWx5IG1lYW5zIHRoYXQgdGhpcyBjb2RlIGlzIGRlc2lnbmVkIHRvIGlkZW50aWZ5IGEgc2l0dWF0aW9uIHdoZXJlIGFuIGluY29taW5nIGFja25vd2xlZGdlbWVudCAoYGFja2ApIGZhbGxzICpiZWZvcmUqIGEgY2FsY3VsYXRlZCBwb2ludC4gVGhlIHNlY29uZCB2YWx1ZSB1c2VzIGBwcmlvcl9zbmRfdW5hYCwgbGlrZWx5IGluZGljYXRpbmcgdGhlIHVuYWNrbm93bGVkZ2VkIHNlZ21lbnQgdGhhdCB3YXMgc2VudCwgYW5kIGBtYXhfd2luZG93YCBpcyB0aGUgYWR2ZXJ0aXNlZCB3aW5kb3cgc2l6ZS4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgY2hlY2sgaXMgcmVsYXRlZCB0byBob3cgdGhlIFRDUCBzdGFjayBkZWFscyB3aXRoIG91dC1vZi1vcmRlciBhY2tub3dsZWRnZW1lbnRzIG9yIHBvdGVudGlhbGx5IG1hbGljaW91cyBhY2tub3dsZWRnZW1lbnRzIHRyeWluZyB0byBpbmplY3QgZGF0YS4gVGhpcyBtYWtlcyBpdCBwZXJmZWN0IHRvIGRldGVjdCBhdHRhY2tzLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgaWYgdGhpcyBjb25kaXRpb25hbCBldmFsdWF0ZXMgdG8gYHRydWVgLCBzb21lIGtpbmQgb2Ygc2VjdXJpdHkgbWVhc3VyZSBpcyB0cmlnZ2VyZWQg4oCTIHBlcmhhcHMgZHJvcHBpbmcgdGhlIGFja25vd2xlZGdlbWVudCwgbG9nZ2luZyBhbiBldmVudCwgb3IgaW5pdGlhdGluZyBzb21lIGZvcm0gb2YgcmV0cmFuc21pc3Npb24vdmFsaWRhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IHB1cnBvc2Ugb2YgdGhhdCBjb21wYXJpc29uLiBJIGtub3cgdGhpcyBjb2RlIGlzIGltcG9ydGFudCBmb3IgZW5zdXJpbmcgdGhlIHN0YWJpbGl0eSBhbmQgc2VjdXJpdHkgb2YgdGhlIG5ldHdvcmsgY29ubmVjdGlvbi4gSSBuZWVkIHRvIGRldGVybWluZSB3aGF0IGlzIGJlaW5nIHByb3RlY3RlZCBoZXJlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9pbnB1dC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDI5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MjkwOlx0XHRpbnQgcmV4bWl0ID0gUkVYTUlUX05PTkU7IC8qIEZsYWcgdG8gKHJlKXRyYW5zbWl0IHRvIHJlY292ZXIgbG9zc2VzICovXG40MjkxOlx0XHR1MzIgZWNuX2NvdW50ID0gMDtcdCAgLyogRGlkIHdlIHJlY2VpdmUgRUNFL2FuIEFjY0VDTiBBQ0UgdXBkYXRlPyAqL1xuNDI5MjpcdFx0dTMyIHByaW9yX2ZhY2s7XG40MjkzOlx0XG40Mjk0Olx0XHRzYWNrX3N0YXRlLmZpcnN0X3NhY2t0ID0gMDtcbjQyOTU6XHRcdHNhY2tfc3RhdGUucmF0ZSA9IFx1MDAyNnJzO1xuNDI5NjpcdFx0c2Fja19zdGF0ZS5zYWNrX2RlbGl2ZXJlZCA9IDA7XG40Mjk3Olx0XHRzYWNrX3N0YXRlLmRlbGl2ZXJlZF9ieXRlcyA9IDA7XG40Mjk4Olx0XG40Mjk5Olx0XHQvKiBXZSB2ZXJ5IGxpa2VseSB3aWxsIG5lZWQgdG8gYWNjZXNzIHJ0eCBxdWV1ZS4gKi9cbjQzMDA6XHRcdHByZWZldGNoKHNrLVx1MDAzZXRjcF9ydHhfcXVldWUucmJfbm9kZSk7XG40MzAxOlx0XG40MzAyOlx0XHQvKiBJZiB0aGUgYWNrIGlzIG9sZGVyIHRoYW4gcHJldmlvdXMgYWNrc1xuNDMwMzpcdFx0ICogdGhlbiB3ZSBjYW4gcHJvYmFibHkgaWdub3JlIGl0LlxuNDMwNDpcdFx0ICovXG40MzA1Olx0XHRpZiAoYmVmb3JlKGFjaywgcHJpb3Jfc25kX3VuYSkpIHtcbjQzMDY6XHRcdFx0dTMyIG1heF93aW5kb3c7XG40MzA3Olx0XG40MzA4Olx0XHRcdC8qIGRvIG5vdCBhY2NlcHQgQUNLIGZvciBieXRlcyB3ZSBuZXZlciBzZW50LiAqL1xuNDMwOTpcdFx0XHRtYXhfd2luZG93ID0gbWluX3QodTY0LCB0cC1cdTAwM2VtYXhfd2luZG93LCB0cC1cdTAwM2VieXRlc19hY2tlZCk7XG40MzEwOlx0XHRcdC8qIFJGQyA1OTYxIDUuMiBbQmxpbmQgRGF0YSBJbmplY3Rpb24gQXR0YWNrXS5bTWl0aWdhdGlvbl0gKi9cbjQzMTE6XHRcdFx0aWYgKGJlZm9yZShhY2ssIHByaW9yX3NuZF91bmEgLSBtYXhfd2luZG93KSkge1xuNDMxMjpcdFx0XHRcdGlmICghKGZsYWcgXHUwMDI2IEZMQUdfTk9fQ0hBTExFTkdFX0FDSykpXG40MzEzOlx0XHRcdFx0XHR0Y3Bfc2VuZF9jaGFsbGVuZ2VfYWNrKHNrLCBmYWxzZSk7XG40MzE0Olx0XHRcdFx0cmV0dXJuIC1TS0JfRFJPUF9SRUFTT05fVENQX1RPT19PTERfQUNLO1xuNDMxNTpcdFx0XHR9XG40MzE2Olx0XHRcdGdvdG8gb2xkX2FjaztcbjQzMTc6XHRcdH1cbjQzMTg6XHRcbjQzMTk6XHRcdC8qIElmIHRoZSBhY2sgaW5jbHVkZXMgZGF0YSB3ZSBoYXZlbiYjMzk7dCBzZW50IHlldCwgZHJvcCB0aGVcbjQzMjA6XHRcdCAqIHNlZ21lbnQuICBSRkMgNzkzIFNlY3Rpb24gMy45IGFuZCBSRkMgNTk2MSBTZWN0aW9uIDUuMlxuNDMyMTpcdFx0ICogcmVxdWlyZSB1cyB0byBzZW5kIGFuIEFDSyBiYWNrIGluIHRoYXQgY2FzZS5cbjQzMjI6XHRcdCAqL1xuNDMyMzpcdFx0aWYgKGFmdGVyKGFjaywgdHAtXHUwMDNlc25kX254dCkpIHtcbjQzMjQ6XHRcdFx0aWYgKCEoZmxhZyBcdTAwMjYgRkxBR19OT19DSEFMTEVOR0VfQUNLKSlcbjQzMjU6XHRcdFx0XHR0Y3Bfc2VuZF9jaGFsbGVuZ2VfYWNrKHNrLCBmYWxzZSk7XG40MzI2Olx0XHRcdHJldHVybiAtU0tCX0RST1BfUkVBU09OX1RDUF9BQ0tfVU5TRU5UX0RBVEE7XG40MzI3Olx0XHR9XG40MzI4Olx0XG40MzI5Olx0XHRpZiAoYWZ0ZXIoYWNrLCBwcmlvcl9zbmRfdW5hKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg1MwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEyODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgVENQIFNlY3VyaXR5IEZpeDogV29ydGh5IG9mIEZ1enppbmc/KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgd2l0aGluIHRoZSBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWJvdXQgbWl0aWdhdGluZyBibGluZCBkYXRhIGluamVjdGlvbiBhdHRhY2tzIGFzIGRlc2NyaWJlZCBpbiBSRkMgNTk2MS4gQmVmb3JlIHRoZSBwYXRjaCwgYSBjYXJlZnVsbHkgY3JhZnRlZCBwYWNrZXQgd2l0aCBhbiBvbGQgQUNLLCBidXQgbWF0Y2hpbmcgdGhlIHByZWRpY3RlZCBmbGFncywgY291bGQgYnlwYXNzIHRoZSBjaGVjayBhbmQgaW5qZWN0IGRhdGEsIGV2ZW4gdGhvdWdoIGB0Y3BfYWNrYCBtaWdodCBoYXZlIHJldHVybmVkIGFuIGVycm9yLiBUaGUgY3J1Y2lhbCBmbGF3IHdhcyB0aGF0IHRoZSBmYXN0IHBhdGggaW4gYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIHdhcyBpZ25vcmluZyB0aGF0IG5lZ2F0aXZlIHJldHVybi4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgc3RyaWN0ZXIgY2hlY2sgb24gdGhlIGBhY2tfc2VxYCwgc2VuZGluZyB0aGVzZSBwYWNrZXRzIHRvIHRoZSBzbG93IHBhdGggZm9yIHByb3BlciBoYW5kbGluZyBhbmQgZHJvcHBpbmcgdGhlbSBiZWZvcmUgdGhlIGRhdGEgaXMgcXVldWVkLiBUaGF0JiMzOTtzIGEgc29saWQgcHJvdG9jb2wgYW5kIHNlY3VyaXR5IGltcHJvdmVtZW50LgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHkuIFdlJiMzOTtyZSBtb2RpZnlpbmcgY29yZSBUQ1AgaW5wdXQgbG9naWMgd2l0aGluIGBuZXQvaXB2NC90Y3BfaW5wdXQuY2AuIFRoYXQmIzM5O3MgYSBwcmltZSB0YXJnZXQuIFRDUCBlc3RhYmxpc2hlZCByZWNlaXZpbmcgaXMgY29tbW9uLCByZWFjaGFibGUgdGhyb3VnaCBhbnkgVENQIHNvY2tldCByZWNlaXZpbmcgcGFja2V0cyBvbiBsb29wYmFjaywgdmV0aCwgdGFwLCBldGMuIFN5emthbGxlciYjMzk7cyBhbHJlYWR5IGNvbnN0YW50bHkgdGVzdGluZyB0aGVzZSBzY2VuYXJpb3MuCgpMZXQmIzM5O3MgYXBwbHkgdGhlIGBXb3J0aEZ1enppbmdgIGNyaXRlcmlhOiBJdCYjMzk7cyBub3QgYSBub24ta2VybmVsIG9yIG5vbi1leGVjdXRhYmxlIGNvbXBvbmVudCwgaXQmIzM5O3Mgbm90IGhhcmR3YXJlLXNwZWNpZmljLCBhbmQgaXQmIzM5O3Mgbm90IGFuIHVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoLiBUaGlzIHBhdGNoIGRpcmVjdGx5IG1vZGlmaWVzIHJlYWNoYWJsZSwgZXhlY3V0YWJsZSBjb2RlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtLiBUaGF0IG1lYW5zIGBXb3J0aEZ1enppbmc6IHRydWVgLgoKTmV4dCwgdGhlIGBGb2N1c1N5bWJvbHNgLiBXaGF0IGZ1bmN0aW9ucyBhcmUga2V5IGhlcmU/IEl0IHN0YXJ0cyB3aXRoIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCwgdGhlIGV4YWN0IGZ1bmN0aW9uIHdoZXJlIHRoZSB2dWxuZXJhYmlsaXR5IHdhcyBwcmVzZW50IGFuZCB0aGUgY29uZGl0aW9uIHdhcyBtb2RpZmllZC4gQnV0LCB3YWl0LiBJcyBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAgdWJpcXVpdG91cz8gVGhlIGd1aWRhbmNlIHNheXMgdG8gYXZvaWQgZ2VuZXJpYyBmdW5jdGlvbnMuIElzIGl0IGxpa2UgYGttYWxsb2NgIG9yIHBhZ2UgZmF1bHRzPyBOby4gSXQgaXMgc3BlY2lmaWNhbGx5IGNhbGxlZCBmb3IgVENQIHBhY2tldHMgb24gZXN0YWJsaXNoZWQgc29ja2V0cy4gU28sIGl0IGlzIGEgZ29vZCBjYW5kaWRhdGUuCgpXaGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgaW52b2x2ZWQ/IEluIHRoZSBzbG93IHBhdGgsIGB0Y3BfdmFsaWRhdGVfaW5jb21pbmdgIGFuZCBgdGNwX2Fja2AuIFRoZSBwYXRjaCBhbHRlcnMgdGhlIGJlaGF2aW9yIG9mIHRoZSBmYXN0IHBhdGggaW4gYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIGJhc2VkIG9uIHdoYXQgdGhlIGxvd2VyLWxldmVsIGZ1bmN0aW9ucyByZXBvcnQuIFNvIHRoZXkgc2hvdWxkIGJlIGV4YW1pbmVkLgoKVGhlIGtleSBjaGFuZ2UgaXMgaW5zaWRlIGB0Y3BfcmN2X2VzdGFibGlzaGVkYC4gTGV0JiMzOTtzIGNvbmZpcm06IElzIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBub24tc3RhdGljPyBZZXMsIGl0JiMzOTtzIGB2b2lkIHRjcF9yY3ZfZXN0YWJsaXNoZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKWAuIE5vdywgd2hhdCBhYm91dCBgdGNwX2Fja2A/IEl0JiMzOTtzIGBzdGF0aWMgaW50IHRjcF9hY2soLi4uKWAuIE9rYXksIGlzIGB0Y3BfYWNrYCBpbmxpbmVkIG9yIG5vdD8gSXQmIzM5O3MgYSBsYXJnZSBmdW5jdGlvbiwgc28gaXQmIzM5O3MgbGlrZWx5IGEgc3ltYm9sLiBCdXQgYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIGlzIGRlZmluaXRlbHkgYW4gZXhwb3J0ZWQvZ2xvYmFsIHN5bWJvbCBpbiBgdGNwX2lucHV0LmNgLiBHaXZlbiB0aGF0IGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBpcyBub24tc3RhdGljLCB0aGUgY2hhbmdlIGlzIG1hZGUgZGlyZWN0bHkgdGhlcmUsIGFuZCBgdGNwX2Fja2AgaXMgcGFydCBvZiB0aGUgY29udHJvbCBmbG93LiBCb3RoIHdhcnJhbnQgZm9jdXMuIE5vdywgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayB3aGF0IGNhbGxzIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfcmN2X2VzdGFibGlzaGVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9pbnB1dC5jPTYzMjI9c3RhdGljIGJvb2wgdGNwX3ZhbGlkYXRlX2luY29taW5nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy02NTAwLSAqL1xubmV0L2lwdjQvdGNwX2lucHV0LmM6NjUwMTp2b2lkIHRjcF9yY3ZfZXN0YWJsaXNoZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjUwMi17XG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYz0xODMwPWludCB0Y3BfdjRfZG9fcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTE4NTMtXHRcdH1cbm5ldC9pcHY0L3RjcF9pcHY0LmM6MTg1NDpcdFx0dGNwX3Jjdl9lc3RhYmxpc2hlZChzaywgc2tiKTtcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMTg1NS1cdFx0cmV0dXJuIDA7XG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYz0xOTAxPWVudW0gc2tiX2Ryb3BfcmVhc29uIHRjcF9hZGRfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYy0xOTgwLVx0XHQvKiBXZSBoYXZlIHRvIHVwZGF0ZSBib3RoIFRDUF9TS0JfQ0IodGFpbCktXHUwMDNldGNwX2ZsYWdzIGFuZFxubmV0L2lwdjQvdGNwX2lwdjQuYzoxOTgxOlx0XHQgKiB0aHRhaWwtXHUwMDNlZmluLCBzbyB0aGF0IHRoZSBmYXN0IHBhdGggaW4gdGNwX3Jjdl9lc3RhYmxpc2hlZCgpXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTE5ODItXHRcdCAqIGlzIG5vdCBlbnRlcmVkIGlmIHdlIGFwcGVuZCBhIHBhY2tldCB3aXRoIGEgRklOLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTI0NgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgVENQIFJlY2VpdmUgUGF0aCBpbiBJUHY2KioKCk9rYXksIHNvIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBpcyBnZXR0aW5nIGNhbGxlZCBmcm9tIGBuZXQvaXB2Ni90Y3BfaXB2Ni5jYC4gVGhhdCYjMzk7cyBhbiBpbnRlcmVzdGluZyBkZXRhaWwgSSBuZWVkIHRvIHF1aWNrbHkgZXhwbG9yZS4gU2luY2UgSSBhbHJlYWR5IGtub3cgdGhlIFRDUCBzdGFjayBpbnNpZGUgYW5kIG91dCwgdGhpcyBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGFuIElQdjYtc3BlY2lmaWMgYXNwZWN0IG9mIHRoZSBlc3RhYmxpc2hlZCBjb25uZWN0aW9uIHJlY2VpdmluZyBwcm9jZXNzLiBNeSBndXQgdGVsbHMgbWUgdGhlcmUgbWlnaHQgYmUgc29tZSBJUHY2LXNwZWNpZmljIGhhbmRsaW5nIGhhcHBlbmluZyBhdCB0aGF0IGVudHJ5IHBvaW50LiBMZXQmIzM5O3MgZGVsdmUgaW50byBgbmV0L2lwdjYvdGNwX2lwdjYuY2AgYW5kIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMgYW5kIGZpZ3VyZSBvdXQgd2hhdCBzcGVjaWZpYyBmdW5jdGlvbnMgb3IgY29kZSBwYXRocyBhcmUgYmVpbmcgdXNlZCBhdCB0aGF0IGNhbGwgc2l0ZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gbG9va2luZyBmb3IgZGlmZmVyZW5jZXMgb3IgYWRkaXRpb25zIHRvIHRoZSBzdGFuZGFyZCBUQ1AgcmVjZWl2ZSBoYW5kbGluZyB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBhZGFwdGVkIHRvIHRoZSBJUHY2IGVudmlyb25tZW50LCB3aGljaCBtaWdodCBpbmRpY2F0ZSBzcGVjaWZpYyBJUHY2IGhlYWRlciBvciBhZGRyZXNzIHByb2Nlc3NpbmcuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBqdW1wIGludG8gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9yY3ZfZXN0YWJsaXNoZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvdGNwX2lwdjYuYz0xNTY3PWludCB0Y3BfdjZfZG9fcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTE1NzYtXHQgICBGcm9tIGJhY2tsb2cgaXQgYWx3YXlzIGdvZXMgaGVyZS4gS2VyYm9vbS4uLlxubmV0L2lwdjYvdGNwX2lwdjYuYzoxNTc3Olx0ICAgRm9ydHVuYXRlbHksIHRjcF9yY3ZfZXN0YWJsaXNoZWQgYW5kIHJjdl9lc3RhYmxpc2hlZFxubmV0L2lwdjYvdGNwX2lwdjYuYy0xNTc4LVx0ICAgaGFuZGxlIHRoZW0gY29ycmVjdGx5LCBidXQgaXQgaXMgbm90IGNhc2Ugd2l0aFxuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTYyNi1cbm5ldC9pcHY2L3RjcF9pcHY2LmM6MTYyNzpcdFx0dGNwX3Jjdl9lc3RhYmxpc2hlZChzaywgc2tiKTtcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTYyOC1cdFx0aWYgKG9wdF9za2IpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzUwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBDb2RlIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyB0aGUgY29yZSBvZiB0aGlzIGNoYW5nZSBzZWVtcyB0byBiZSB3aXRoaW4gYHRjcF9yY3ZfZXN0YWJsaXNoZWRgLiBUaGF0JiMzOTtzIHRoZSBzcGVjaWZpYyBmdW5jdGlvbiB0aGF0IHdhcyBkaXJlY3RseSBtb2RpZmllZC4gSSBzaG91bGQgYWxzbyBjb25zaWRlciBob3cgdGhpcyBpbXBhY3RzIHJlbGF0ZWQgZnVuY3Rpb25zLiBgdGNwX3ZhbGlkYXRlX2luY29taW5nYCBhbmQgYHRjcF9hY2tgIGFyZSBib3RoIGNhbGxlZCBmcm9tIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCwgYW5kIHRob3VnaCB0aGV5JiMzOTtyZSBzdGF0aWMsIHRoZXkgYXJlIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIGluIHRoZSBjb250ZXh0IG9mIHRoaXMgY2hhbmdlLgoKSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIGlzIGluZGVlZCB0aGUgcHJpbWFyeSBmdW5jdGlvbiB0aGF0IHJlY2VpdmVkIHRoZSBtb2RpZmljYXRpb25zOyB0aGF0JiMzOTtzIHRoZSBmb2N1cy4gR2l2ZW4gdGhhdCBgdGNwX3ZhbGlkYXRlX2luY29taW5nYCBpcyBzdGF0aWMsIGl0cyBzeW1ib2wgcmVwcmVzZW50YXRpb24gaW4gdm1saW51eCBkZXBlbmRzIG9uIGlubGluaW5nLiBIb3dldmVyLCBiZWNhdXNlIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBpcyBub24tc3RhdGljLCBpdCBpcyBkZWZpbml0ZWx5IGEgdmFsaWQgc3ltYm9sLgoKVG8gbWFrZSBzdXJlIEkgaGF2ZSBhIGNvbXBsZXRlIHBpY3R1cmUsIEkgbmVlZCB0byBjaGVjayBpZiBhbnkgb3RoZXIgZnVuY3Rpb25zIHdlcmUgdG91Y2hlZCBieSB0aGlzIHBhdGNoLiBGcm9tIHdoYXQgSSBzZWUsIHRoZSBtb2RpZmljYXRpb24gb25seSBhZmZlY3RzIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBpdHNlbGYsIGFuZCBpdCByZXNpZGVzIHdpdGhpbiBgbmV0L2lwdjQvdGNwX2lucHV0LmNgLgoKTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIEkgY2FuIHNlZSB0aGF0IGBuZXQvaXB2NC90Y3BfaW5wdXQuY2AgaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX0lORVRgIGlzIGVuYWJsZWQuIFRpbWUgdG8gY2hlY2sgYG5ldC9pcHY0L01ha2VmaWxlYCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSByZWxldmFudCBidWlsZCBydWxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX2lucHV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L01ha2VmaWxlPTY9b2JqLXkgICAgIDo9IHJvdXRlLm8gaW5ldHBlZXIubyBwcm90b2NvbC5vIFxcXG4tLVxubmV0L2lwdjQvTWFrZWZpbGUtOS1cdCAgICAgaW5ldF90aW1ld2FpdF9zb2NrLm8gaW5ldF9jb25uZWN0aW9uX3NvY2subyBcXFxubmV0L2lwdjQvTWFrZWZpbGU6MTA6XHQgICAgIHRjcC5vIHRjcF9pbnB1dC5vIHRjcF9vdXRwdXQubyB0Y3BfdGltZXIubyB0Y3BfaXB2NC5vIFxcXG5uZXQvaXB2NC9NYWtlZmlsZS0xMS1cdCAgICAgdGNwX21pbmlzb2Nrcy5vIHRjcF9jb25nLm8gdGNwX21ldHJpY3MubyB0Y3BfZmFzdG9wZW4ubyBcXFxuLS1cbm5ldC9pcHY0L2luZXRfdGltZXdhaXRfc29jay5jPTE2OD1zdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICppbmV0X3R3c2tfYWxsb2MoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L2luZXRfdGltZXdhaXRfc29jay5jLTIyMi0vKiBUaGVzZSBhcmUgYWx3YXlzIGNhbGxlZCBmcm9tIEJIIGNvbnRleHQuICBTZWUgY2FsbGVycyBpblxubmV0L2lwdjQvaW5ldF90aW1ld2FpdF9zb2NrLmM6MjIzOiAqIHRjcF9pbnB1dC5jIHRvIHZlcmlmeSB0aGlzLlxubmV0L2lwdjQvaW5ldF90aW1ld2FpdF9zb2NrLmMtMjI0LSAqL1xuLS1cbm5ldC9pcHY0L3RjcC5jPTE1NTE9dm9pZCBfX3RjcF9jbGVhbnVwX3JidWYoc3RydWN0IHNvY2sgKnNrLCBpbnQgY29waWVkKVxuLS1cbm5ldC9pcHY0L3RjcC5jLTE1NTgtXG5uZXQvaXB2NC90Y3AuYzoxNTU5Olx0XHRpZiAoLyogT25jZS1wZXItdHdvLXNlZ21lbnRzIEFDSyB3YXMgbm90IHNlbnQgYnkgdGNwX2lucHV0LmMgKi9cbm5ldC9pcHY0L3RjcC5jLTE1NjAtXHRcdCAgICB0cC1cdTAwM2VyY3Zfbnh0IC0gdHAtXHUwMDNlcmN2X3d1cCBcdTAwM2UgaWNzay1cdTAwM2VpY3NrX2Fjay5yY3ZfbXNzIHx8XG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYy0xMi0gKlx0XHRsaW51eC9pcHY0L3RjcC5jXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjEzOiAqXHRcdGxpbnV4L2lwdjQvdGNwX2lucHV0LmNcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMTQtICpcdFx0bGludXgvaXB2NC90Y3Bfb3V0cHV0LmNcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTIwNDU9c3RhdGljIHZvaWQgdGNwX3Y0X2ZpbGxfY2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IGlwaGRyICppcGgsXG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYy0yMDY2LS8qXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjIwNjc6ICpcdEZyb20gdGNwX2lucHV0LmNcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMjA2OC0gKi9cbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NDEwMT1zdGF0aWMgdm9pZCB0Y3BfY29ubmVjdF9pbml0KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDEwOS1cdC8qIFdlJiMzOTtsbCBmaXggdGhpcyB1cCB3aGVuIHdlIGdldCBhIHJlc3BvbnNlIGZyb20gdGhlIG90aGVyIGVuZC5cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0MTEwOlx0ICogU2VlIHRjcF9pbnB1dC5jOnRjcF9yY3Zfc3RhdGVfcHJvY2VzcyBjYXNlIFRDUF9TWU5fU0VOVC5cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MTExLVx0ICovXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTQ0MDI9dTMyIHRjcF9kZWxhY2tfbWF4KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDQwOS0vKiBTZW5kIG91dCBhIGRlbGF5ZWQgYWNrLCB0aGUgY2FsbGVyIGRvZXMgdGhlIHBvbGljeSBjaGVja2luZ1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjQ0MTA6ICogdG8gc2VlIGlmIHdlIHNob3VsZCBldmVuIGJlIGhlcmUuICBTZWUgdGNwX2lucHV0LmM6dGNwX2Fja19zbmRfY2hlY2soKVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQ0MTEtICogZm9yIGRldGFpbHMuXG4tLVxubmV0L2lwdjQvdGNwX3RpbWVyLmM9NTM1PXZvaWQgdGNwX3JldHJhbnNtaXRfdGltZXIoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcF90aW1lci5jLTY2MS1cdCAqIHRodXMgdGhlIG9sZCB2YWx1ZSBtaWdodCBhbHJlYWR5IGJlIHRvbyBoaWdoIGNvbXBhcmVkIHRvIHRoZSB2YWx1ZVxubmV0L2lwdjQvdGNwX3RpbWVyLmM6NjYyOlx0ICogc2V0IGJ5ICYjMzk7dGNwX3NldF9ydG8mIzM5OyBpbiB0Y3BfaW5wdXQuYyB3aGljaCByZXNldHMgdGhlIHJ0byB3aXRob3V0XG5uZXQvaXB2NC90Y3BfdGltZXIuYy02NjMtXHQgKiBiYWNrb2ZmLiBMaW1pdCB0byBUQ1BfVEhJTl9MSU5FQVJfUkVUUklFUyBiZWZvcmUgaW5pdGlhdGluZ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzMzNAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIHRoZSBOZXR3b3JrIFN0YWNrIEJ1aWxkIFByb2Nlc3MqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBgbmV0L2lwdjRgIGNvbXBvbmVudCBpcyBiZWluZyBidWlsdCB3aXRoaW4gdGhlIGxhcmdlciBrZXJuZWwgZnJhbWV3b3JrLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCwgYXMgYWx3YXlzLCBpcyB0aGUgYG5ldC9NYWtlZmlsZWAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIHRoZSBvcmNoZXN0cmF0b3Igb2YgZGVwZW5kZW5jaWVzIGFuZCBidWlsZCBydWxlcyBmb3IgdGhpcyBwYXJ0IG9mIHRoZSBuZXR3b3JrIHN0YWNrLiBJIG5lZWQgdG8gdHJhY2UgdGhyb3VnaCBpdCBhbmQgc2VlIGhvdyBgaXB2NGAgaXMgc3BlY2lmaWNhbGx5IGluY29ycG9yYXRlZCwgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgZ290Y2hhcyBhbmQgZGVwZW5kZW5jaWVzIHRoYXQgbmVlZCB0byBiZSBjb25zaWRlcmVkLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCBgbmV0L01ha2VmaWxlYCByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcHY0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9NYWtlZmlsZT0xNj1vYmotJChDT05GSUdfTkVURklMVEVSKVx0XHQmIzQzOz0gbmV0ZmlsdGVyL1xubmV0L01ha2VmaWxlOjE3Om9iai0kKENPTkZJR19JTkVUKVx0XHQmIzQzOz0gaXB2NC9cbm5ldC9NYWtlZmlsZS0xOC1vYmotJChDT05GSUdfVExTKVx0XHQmIzQzOz0gdGxzL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzU5MgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDExMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFRDUCBJbnB1dCBNb2R1bGUgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGF0IGBDT05GSUdfSU5FVGAgaXMgZW5hYmxlZCwgdGhhdCYjMzk7cyBjcnVjaWFsLiBOb3csIG15IG5leHQgbW92ZSBpcyB0byBjaGVjayBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgdGllZCB0byBlaXRoZXIgYHRjcF9pbnB1dC5vYCBvciwgbW9yZSBicm9hZGx5LCBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAuIEkmIzM5O2xsIHN0YXJ0IGRpZ2dpbmcgdGhyb3VnaCB0aGUgcmVsZXZhbnQgYE1ha2VmaWxlYCBpbiB0aGUgYG5ldC9pcHY0YCBkaXJlY3RvcnksIHRoZSB1c3VhbCBzdXNwZWN0LiBBaCwgdGhlcmUgaXQgaXM6IGBvYmoteSA6PSByb3V0ZS5vIGluZXRwZWVyLm8gcHJvdG9jb2wubyAuLi4gdGNwLm8gdGNwX2lucHV0Lm8gLi4uYCBMb29rcyBsaWtlIHdoZW5ldmVyIGBDT05GSUdfSU5FVGAgaXMgc2V0IHRvICYjMzk7eSYjMzk7LCBgdGNwX2lucHV0Lm9gIGdldHMgY29tcGlsZWQsIHdoaWNoIGlzIGV4cGVjdGVkLiBKdXN0IHRvIGJlIGNvbXBsZXRlbHkgdGhvcm91Z2gsIEnigJlsbCBjcm9zcy1yZWZlcmVuY2UgdGhpcyB3aXRoIHRoZSBgbmV0L2lwdjQvS2NvbmZpZ2AgZmlsZSB0byBjb25maXJtIHRoYXQgYENPTkZJR19JTkVUYCBpcyBkZWZpbmVkIGFuZCB3aGF0IG90aGVyIGRlcGVuZGVuY2llcyBhcmUgaW4gcGxheS4gSXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gY292ZXIgYWxsIGJhc2VzIHdpdGggdGhpcyBzb3J0IG9mIGNvbmZpZ3VyYXRpb24gbG9naWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJTkVUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTMzMD1jb25maWcgTkVUX0ZPVV9JUF9UVU5ORUxTXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zMzgtXG5uZXQvaXB2NC9LY29uZmlnOjMzOTpjb25maWcgSU5FVF9BSFxubmV0L2lwdjQvS2NvbmZpZy0zNDAtXHR0cmlzdGF0ZSBcJiMzNDtJUDogQUggdHJhbnNmb3JtYXRpb25cJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM1My1cbm5ldC9pcHY0L0tjb25maWc6MzU0OmNvbmZpZyBJTkVUX0VTUFxubmV0L2lwdjQvS2NvbmZpZy0zNTUtXHR0cmlzdGF0ZSBcJiMzNDtJUDogRVNQIHRyYW5zZm9ybWF0aW9uXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zNjgtXG5uZXQvaXB2NC9LY29uZmlnOjM2OTpjb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxubmV0L2lwdjQvS2NvbmZpZy0zNzAtXHR0cmlzdGF0ZSBcJiMzNDtJUDogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM4MS1cbm5ldC9pcHY0L0tjb25maWc6MzgyOmNvbmZpZyBJTkVUX0VTUElOVENQXG5uZXQvaXB2NC9LY29uZmlnLTM4My1cdGJvb2wgXCYjMzQ7SVA6IEVTUCBpbiBUQ1AgZW5jYXBzdWxhdGlvbiAoUkZDIDgyMjkpXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zOTMtXG5uZXQvaXB2NC9LY29uZmlnOjM5NDpjb25maWcgSU5FVF9JUENPTVBcbm5ldC9pcHY0L0tjb25maWctMzk1LVx0dHJpc3RhdGUgXCYjMzQ7SVA6IElQQ29tcCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctNDAzLVxubmV0L2lwdjQvS2NvbmZpZzo0MDQ6Y29uZmlnIElORVRfVEFCTEVfUEVSVFVSQl9PUkRFUlxubmV0L2lwdjQvS2NvbmZpZy00MDUtXHRpbnQgXCYjMzQ7SU5FVDogU291cmNlIHBvcnQgcGVydHVyYmF0aW9uIHRhYmxlIHNpemUgKGFzIHBvd2VyIG9mIDIpXCYjMzQ7IGlmIEVYUEVSVFxuLS1cbm5ldC9pcHY0L0tjb25maWctNDEzLVxubmV0L2lwdjQvS2NvbmZpZzo0MTQ6Y29uZmlnIElORVRfWEZSTV9UVU5ORUxcbm5ldC9pcHY0L0tjb25maWctNDE1LVx0dHJpc3RhdGVcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQxOC1cbm5ldC9pcHY0L0tjb25maWc6NDE5OmNvbmZpZyBJTkVUX1RVTk5FTFxubmV0L2lwdjQvS2NvbmZpZy00MjAtXHR0cmlzdGF0ZVxuLS1cbm5ldC9pcHY0L0tjb25maWctNDIyLVxubmV0L2lwdjQvS2NvbmZpZzo0MjM6Y29uZmlnIElORVRfRElBR1xubmV0L2lwdjQvS2NvbmZpZy00MjQtXHR0cmlzdGF0ZSBcJiMzNDtJTkVUOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQzNC1cbm5ldC9pcHY0L0tjb25maWc6NDM1OmNvbmZpZyBJTkVUX1RDUF9ESUFHXG5uZXQvaXB2NC9LY29uZmlnLTQzNi1cdGRlcGVuZHMgb24gSU5FVF9ESUFHXG4tLVxubmV0L2lwdjQvS2NvbmZpZy00MzgtXG5uZXQvaXB2NC9LY29uZmlnOjQzOTpjb25maWcgSU5FVF9VRFBfRElBR1xubmV0L2lwdjQvS2NvbmZpZy00NDAtXHR0cmlzdGF0ZSBcJiMzNDtVRFA6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctNDQ2LVxubmV0L2lwdjQvS2NvbmZpZzo0NDc6Y29uZmlnIElORVRfUkFXX0RJQUdcbm5ldC9pcHY0L0tjb25maWctNDQ4LVx0dHJpc3RhdGUgXCYjMzQ7UkFXOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQ1NC1cbm5ldC9pcHY0L0tjb25maWc6NDU1OmNvbmZpZyBJTkVUX0RJQUdfREVTVFJPWVxubmV0L2lwdjQvS2NvbmZpZy00NTYtXHRib29sIFwmIzM0O0lORVQ6IGFsbG93IHByaXZpbGVnZWQgcHJvY2VzcyB0byBhZG1pbmlzdHJhdGl2ZWx5IGNsb3NlIHNvY2tldHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg3NTkKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIHF1ZXJ5OgoKKipUcmFjaW5nIHRoZSBDb25maWd1cmF0aW9uIG9mIGBjb25maWcgSU5FVGAqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGBjb25maWcgSU5FVGAgdmFyaWFibGUgb3IgZGlyZWN0aXZlIGlzIGRlZmluZWQgd2l0aGluIHRoaXMgc3lzdGVtLiBJIGNhbiYjMzk7dCBqdXN0IGFzc3VtZSBJIGFscmVhZHkga25vdywgc28gbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZG8gYSBxdWljayBhbmQgZGlydHkgc2VhcmNoIHRvIGxvY2F0ZSBpdHMgZGVmaW5pdGlvbi4gVGhlIGJlc3Qgd2F5IHRvIGRvIHRoYXQgd291bGQgYmUgd2l0aCBgZ3JlcGAuIEkgd2FudCB0byBiZSBzcGVjaWZpYywgSSYjMzk7bGwgdXNlIGEgZG9sbGFyIHNpZ24gYCRgIHRvIGVuc3VyZSBJJiMzOTttIGZpbmRpbmcgdGhlICpleGFjdCogbWF0Y2ggb2YgYGNvbmZpZyBJTkVUYCBhdCB0aGUgZW5kIG9mIGEgbGluZSwgb3IgYSB2YXJpYWJsZSB3aXRoIHRoYXQgZXhhY3QgbmFtZS4gVGhpcyBzaG91bGQgaGVscCBtZSBhdm9pZCBhY2NpZGVudGFsbHkgcGlja2luZyB1cCBtYXRjaGVzIHdoZXJlIGBJTkVUYCBpcyBwYXJ0IG9mIGEgbGFyZ2VyIHdvcmQgb3IgdmFyaWFibGUgbmFtZSBsaWtlIGBJTkVUX0FERFJFU1NgLiBVc2luZyBgZ3JlcCAmIzM0O2NvbmZpZyBJTkVUJCYjMzQ7YCBzaG91bGQgZ2l2ZSBtZSBhIGNvbmNpc2UgbGlzdGluZyBvZiBhbnkgZmlsZXMgd2hlcmUgdGhhdCBzcGVjaWZpYyBkaXJlY3RpdmUgaXMgZGVmaW5lZCwgd2hpY2ggd2lsbCBwcm92aWRlIHRoZSBjb250ZXh0IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCB1c2FnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElORVQkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz05OT1jb25maWcgTkVUX0hBTkRTSEFLRV9LVU5JVF9URVNUXG4tLVxubmV0L0tjb25maWctMTEzLVxubmV0L0tjb25maWc6MTE0OmNvbmZpZyBJTkVUXG5uZXQvS2NvbmZpZy0xMTUtXHRib29sIFwmIzM0O1RDUC9JUCBuZXR3b3JraW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDg2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBMYWJ5cmludGgqKgoKT2theSwgc28gSSYjMzk7bSBkZWFsaW5nIHdpdGggdGhlIGBJTkVUYCBjb25maWd1cmF0aW9uIG9wdGlvbiwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgYnJvYWRlciBuZXR3b3JraW5nIGNvbmZpZ3VyYXRpb24uIFRoZSBoaW50IHBvaW50cyB0byBgbmV0L0tjb25maWdgLCBzcGVjaWZpY2FsbHkgbGluZSAxMTQuIEhvd2V2ZXIsIHRoYXQmIzM5O3MgcmFyZWx5IGVub3VnaCBjb250ZXh0IGluIGEgc3ByYXdsaW5nIGNvbmZpZ3VyYXRpb24gZmlsZSBsaWtlIHRoaXMgb25lLiBUbyBnZXQgYSBoYW5kbGUgb24gd2hhdCBgSU5FVGAgYWN0dWFsbHkgKm1lYW5zKiBhbmQgd2hhdCBpdHMgZGVwZW5kZW5jaWVzIG1pZ2h0IGJlLCBJJiMzOTttIGdvaW5nIHRvIGJhY2sgdXAgYSBiaXQgYW5kIHRha2UgYSBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBsaW5lcy4gTGV0JiMzOTtzIHNlZS4uLiBsaW5lcyAxMTAgdGhyb3VnaCAxMzAgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGZlZWwgZm9yIHRoZSBsb2NhbCBlbnZpcm9ubWVudCBvZiB0aGlzIG9wdGlvbi4gVGhpcyB0eXBpY2FsbHkgcmV2ZWFscyB0aGUgcmVsYXRpb25zaGlwcyB3aXRoIG90aGVyIGNvbmZpZyBvcHRpb25zLCB0aGUgaGVscCB0ZXh0IGRlc2NyaWJpbmcgaXQsIGFuZCBhbnkgZGVwZW5kZW5jaWVzIG9yIGRlZmF1bHQgdmFsdWVzLiBJdCB3aWxsIHRha2UgYSBmZXcgbWludXRlcyB0byByZWFkIGJ1dCBpdCYjMzk7cyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHR3ZWFraW5nIHRoaXMgc3BlY2lmaWMgb3B0aW9uLiBJJiMzOTtsbCBmb2N1cyBvbiByZWxhdGlvbnNoaXBzIGFuZCBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDExMDpcdFxuIDExMTpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCByZWZlclxuIDExMjpcdFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbiBpbiBEb2N1bWVudGF0aW9uL2Rldi10b29scy9rdW5pdC8uXG4gMTEzOlx0XG4gMTE0Olx0Y29uZmlnIElORVRcbiAxMTU6XHRcdGJvb2wgXCYjMzQ7VENQL0lQIG5ldHdvcmtpbmdcJiMzNDtcbiAxMTY6XHRcdGhlbHBcbiAxMTc6XHRcdCAgVGhlc2UgYXJlIHRoZSBwcm90b2NvbHMgdXNlZCBvbiB0aGUgSW50ZXJuZXQgYW5kIG9uIG1vc3QgbG9jYWxcbiAxMTg6XHRcdCAgRXRoZXJuZXRzLiBJdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdG8gc2F5IFkgaGVyZSAodGhpcyB3aWxsIGVubGFyZ2VcbiAxMTk6XHRcdCAgeW91ciBrZXJuZWwgYnkgYWJvdXQgNDAwIEtCKSwgc2luY2Ugc29tZSBwcm9ncmFtcyAoZS5nLiB0aGUgWCB3aW5kb3dcbiAxMjA6XHRcdCAgc3lzdGVtKSB1c2UgVENQL0lQIGV2ZW4gaWYgeW91ciBtYWNoaW5lIGlzIG5vdCBjb25uZWN0ZWQgdG8gYW55XG4gMTIxOlx0XHQgIG90aGVyIGNvbXB1dGVyLiBZb3Ugd2lsbCBnZXQgdGhlIHNvLWNhbGxlZCBsb29wYmFjayBkZXZpY2Ugd2hpY2hcbiAxMjI6XHRcdCAgYWxsb3dzIHlvdSB0byBwaW5nIHlvdXJzZWxmIChncmVhdCBmdW4sIHRoYXQhKS5cbiAxMjM6XHRcbiAxMjQ6XHRcdCAgRm9yIGFuIGV4Y2VsbGVudCBpbnRyb2R1Y3Rpb24gdG8gTGludXggbmV0d29ya2luZywgcGxlYXNlIHJlYWQgdGhlXG4gMTI1Olx0XHQgIExpbnV4IE5ldHdvcmtpbmcgSE9XVE8sIGF2YWlsYWJsZSBmcm9tXG4gMTI2Olx0XHQgIFx1MDAzY2h0dHA6Ly93d3cudGxkcC5vcmcvZG9jcy5odG1sI2hvd3RvXHUwMDNlLlxuIDEyNzpcdFxuIDEyODpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSBhbmQgYWxzbyB0byBcJiMzNDsvcHJvYyBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7IGFuZFxuIDEyOTpcdFx0ICBcJiMzNDtTeXNjdGwgc3VwcG9ydFwmIzM0OyBiZWxvdywgeW91IGNhbiBjaGFuZ2UgdmFyaW91cyBhc3BlY3RzIG9mIHRoZVxuIDEzMDpcdFx0ICBiZWhhdmlvciBvZiB0aGUgVENQL0lQIGNvZGUgYnkgd3JpdGluZyB0byB0aGUgKHZpcnR1YWwpIGZpbGVzIGluXG4gMTMxOlx0XHQgIC9wcm9jL3N5cy9uZXQvaXB2NC8qOyB0aGUgb3B0aW9ucyBhcmUgZXhwbGFpbmVkIGluIHRoZSBmaWxlXG4gMTMyOlx0XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3RcdTAwM2UuXG4gMTMzOlx0XG4gMTM0Olx0XHQgIFNob3J0IGFuc3dlcjogc2F5IFkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5ODAzCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkluaXRpYWwgQXNzZXNzbWVudDogQ09ORklHX0lORVQgYW5kIFRDUCBJbnZhbGlkIFJhdGUgTGltaXQqKgoKQWxyaWdodCwgc28gYENPTkZJR19JTkVUYCBsb29rcyBjbGVhbiDigJMgbm8gZXhwbGljaXQgZGVwZW5kZW5jaWVzIGJlc2lkZXMgYE5FVGAsIHdoaWNoIGlzIGJhc2ljYWxseSBhIGdpdmVuLiBJJiMzOTttIGFsd2F5cyB0aG9yb3VnaCB0aG91Z2gsIHNvIGJlZm9yZSBJIG1vdmUgb24sIEkgd2FudCB0byBjb25maXJtIHRoZXJlIGFyZW4mIzM5O3QgYW55IGhpZGRlbiBpbXBsaWNhdGlvbnMgb3Igb3RoZXIgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLgoKTm93LCB0aGF0IHBhY2tldGRyaWxsIHRlc3QuLi4gYHN5c2N0bCAtcSBuZXQuaXB2NC50Y3BfaW52YWxpZF9yYXRlbGltaXQ9MGAuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgdGhpcyBzcGVjaWZpYyBzeXNjdGwgaXMgYmVpbmcgc2V0LiBJdCYjMzk7cyB0aGUgYHRjcF9pbnZhbGlkX3JhdGVsaW1pdGAgdGhhdCYjMzk7cyB0aGUga2V5LiBCZXN0IHRvIGRvIGEgcXVpY2sgZ3JlcC4gTGV0JiMzOTtzIHNlZSB3aGVyZSB0aGF0IHZhcmlhYmxlIGlzIHVzZWQgYW5kIHdoYXQmIzM5O3MgZ29pbmcgb24uIEdvdHRhIHN0YXkgb24gdG9wIG9mIGFsbCB0aGUgbW92aW5nIHBhcnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfaW52YWxpZF9yYXRlbGltaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jPTYyNz1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSBpcHY0X25ldF90YWJsZVtdID0ge1xuLS1cbm5ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jLTE0MjYtXHR7XG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYzoxNDI3Olx0XHQucHJvY25hbWVcdD0gXCYjMzQ7dGNwX2ludmFsaWRfcmF0ZWxpbWl0XCYjMzQ7LFxubmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmM6MTQyODpcdFx0LmRhdGFcdFx0PSBcdTAwMjZpbml0X25ldC5pcHY0LnN5c2N0bF90Y3BfaW52YWxpZF9yYXRlbGltaXQsXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYy0xNDI5LVx0XHQubWF4bGVuXHRcdD0gc2l6ZW9mKGludCksXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9Mzk4OT1zdGF0aWMgYm9vbCBfX3RjcF9vb3dfcmF0ZV9saW1pdGVkKHN0cnVjdCBuZXQgKm5ldCwgaW50IG1pYl9pZHgsXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtMzk5OC1cdFx0aWYgKDAgXHUwMDNjPSBlbGFwc2VkIFx1MDAyNlx1MDAyNlxubmV0L2lwdjQvdGNwX2lucHV0LmM6Mzk5OTpcdFx0ICAgIGVsYXBzZWQgXHUwMDNjIFJFQURfT05DRShuZXQtXHUwMDNlaXB2NC5zeXNjdGxfdGNwX2ludmFsaWRfcmF0ZWxpbWl0KSkge1xubmV0L2lwdjQvdGNwX2lucHV0LmMtNDAwMC1cdFx0XHRORVRfSU5DX1NUQVRTKG5ldCwgbWliX2lkeCk7XG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYz0zNDMzPXN0YXRpYyBpbnQgX19uZXRfaW5pdCB0Y3Bfc2tfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYy0zNDk0LVx0bmV0LVx1MDAzZWlwdjQuc3lzY3RsX3RjcF9hdXRvY29ya2luZyA9IDE7XG5uZXQvaXB2NC90Y3BfaXB2NC5jOjM0OTU6XHRuZXQtXHUwMDNlaXB2NC5zeXNjdGxfdGNwX2ludmFsaWRfcmF0ZWxpbWl0ID0gSFovMjtcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzQ5Ni1cdG5ldC1cdTAwM2VpcHY0LnN5c2N0bF90Y3BfcGFjaW5nX3NzX3JhdGlvID0gMjAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDU3MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYHN5c2N0bF90Y3BfaW52YWxpZF9yYXRlbGltaXRgIGluIHRoZSBUQ1AvSU5FVCBDb250ZXh0KioKCk9rYXksIHNvIGBzeXNjdGxfdGNwX2ludmFsaWRfcmF0ZWxpbWl0YCBpcyBjbGVhcmx5IHBhcnQgb2YgdGhlIGNvcmUgVENQL0lORVQgc3RhY2suIExldCYjMzk7cyBtYWtlIHN1cmUgd2UmIzM5O3JlIGZvY3VzZWQgb24gdGhlIGNvcnJlY3Qgc3ltYm9scyBoZXJlLiBJJiMzOTtsbCBkb3VibGUtY2hlY2sgdG8gc2VlIGlmIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBpcyB0aGUga2V5IGFyZWEuIEFyZSB0aGVyZSAqb3RoZXIqIHN5bWJvbHMgdGhhdCBtaWdodCBiZSBpbXBvcnRhbnQ/CgpBbHJpZ2h0LCBsZXQmIzM5O3MgZXhhbWluZSB0aGUgY2FsbGVycyBvciByZWxhdGVkIGhlbHBlciBmdW5jdGlvbnMgZm9yIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBhcyB0aGF0JiMzOTtzIHRoZSBvbmUgdGhhdCB3YXMgbW9kaWZpZWQuIEFoYSEgYHRjcF9yY3ZfZXN0YWJsaXNoZWRgICpjYWxscyogYHRjcF92YWxpZGF0ZV9pbmNvbWluZ2Agb24gdGhlIHNsb3cgcGF0aCwgdGhhdCBtYWtlcyBzZW5zZS4gSG1tLCB3YWl0IGEgbWludXRlLCBgdGNwX3ZhbGlkYXRlX2luY29taW5nYCBpcyAqc3RhdGljKi4gVGhhdCBtZWFucyBpdCYjMzk7cyBub3QgZXhwb3J0ZWQuIExldCBtZSBqdXN0IGNvbmZpcm0gaXRzIHNpZ25hdHVyZTogYHN0YXRpYyBib29sIHRjcF92YWxpZGF0ZV9pbmNvbWluZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoLCBpbnQgc3luX2luZXJyKWAuCgpJJiMzOTtsbCBjaGVjayBob3cgbWFueSB0aW1lcyBpdCYjMzk7cyBjYWxsZWQgd2l0aGluIGB0Y3BfaW5wdXQuY2AganVzdCB0byBiZSBjZXJ0YWluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSByYXRlbGltaXQsIGFuZCBpZiB0aGUgZmFjdCB0aGF0IGl0JiMzOTtzIHN0YXRpYyBpcyBhIGNvbnN0cmFpbnQgb24gb3VyIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfdmFsaWRhdGVfaW5jb21pbmcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2lucHV0LmM9NjMxMD1zdGF0aWMgYm9vbCB0Y3BfcmVzZXRfY2hlY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTYzMjEtICovXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo2MzIyOnN0YXRpYyBib29sIHRjcF92YWxpZGF0ZV9pbmNvbWluZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy02MzIzLVx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgdGNwaGRyICp0aCwgaW50IHN5bl9pbmVycilcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz02NTAxPXZvaWQgdGNwX3Jjdl9lc3RhYmxpc2hlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjY3Mi12YWxpZGF0ZTpcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjY2NzM6XHRpZiAoIXRjcF92YWxpZGF0ZV9pbmNvbWluZyhzaywgc2tiLCB0aCwgMSkpXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy02Njc0LVx0XHRyZXR1cm47XG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9NzE1Mz10Y3BfcmN2X3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTcyMjctXHR9XG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3MjI4Olx0aWYgKCF0Y3BfdmFsaWRhdGVfaW5jb21pbmcoc2ssIHNrYiwgdGgsIDApKVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzIyOS1cdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNDUxCgkJCQkJCQlvdXRwdXQ6IDEzNAoJCQkJCQkJdGhvdWdodHM6IDQ2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBSZWFzb25pbmcgb24gSW5jbHVkaW5nIEZ1bmN0aW9ucyBpbiB0aGUgUmV2aWV3KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgd2hpY2ggZnVuY3Rpb25zIHRvIGluY2x1ZGUgaW4gdGhpcyByZXZpZXcuIGB0Y3BfdmFsaWRhdGVfaW5jb21pbmdgIGdldHMgY2FsbGVkIGZyb20gYm90aCBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAgYW5kIGB0Y3BfcmN2X3N0YXRlX3Byb2Nlc3NgLiBJdCYjMzk7cyBhIGRlY2VudC1zaXplZCBmdW5jdGlvbiBhbmQgY2FsbGVkIGZyb20gbXVsdGlwbGUgcGxhY2VzLCBzbyB0aGUgY29tcGlsZXIgKm1pZ2h0KiBub3QgaW5saW5lIGl0LCBvciBhdCBsZWFzdCBrZWVwIGEgc3ltYm9sIGFyb3VuZCBmb3IgaXQuIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCwgb24gdGhlIG90aGVyIGhhbmQsIGlzIGRlZmluaXRlbHkgbm9uLXN0YXRpYyBhbmQgKmhhcyogYSBzeW1ib2wuIFRoZSBxdWVzdGlvbiBpcywgc2hvdWxkIEkgbGlzdCBib3RoLCBvciBqdXN0IGB0Y3BfcmN2X2VzdGFibGlzaGVkYD8KCldhaXQgYSBtaW51dGUsIHRoZSBpbnN0cnVjdGlvbnMuIFRoZSBpbnN0cnVjdGlvbnMgY2xlYXJseSBzdGF0ZSB0aGF0IEkgbmVlZCB0byBsaXN0IGZ1bmN0aW9ucyB0aGF0IGVpdGhlciBpbXBsZW1lbnQgdGhlIGFsdGVyZWQgbG9naWMgZGlyZWN0bHksIG9yIGFyZSBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzLiBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAgaXMgKmV4YWN0bHkqIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIGJlZW4gYWx0ZXJlZC4gSW5jbHVkaW5nIGJvdGggYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIGFuZCBgdGNwX3ZhbGlkYXRlX2luY29taW5nYCBzZWVtcyB2ZXJ5IGZvY3VzZWQgYW5kIHRhcmdldGVkLiBJIHNob3VsZCBkZWZpbml0ZWx5IGluY2x1ZGUgYHRjcF9yY3ZfZXN0YWJsaXNoZWRgLgoKQnV0IGxldCBtZSBxdWlja2x5IGNoZWNrIGlmIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBpcyBsaWtlLCAqdWJpcXVpdG91cyouIElzIGl0IGNhbGxlZCBieSBhbG1vc3QgZXZlcnl0aGluZyB0aGF0IHJ1bnMgdW5kZXIgc3l6a2FsbGVyPyBOby4gU3l6a2FsbGVyIHJ1bnMgc3lzY2FsbHMgYWNyb3NzIGFsbCBzdWJzeXN0ZW1zOiB2ZnMsIG1tLCBicGYsIHVzYiwgbmV0LCBldGMuIFRDUCBwYWNrZXQgcmVjZWl2ZSBvbmx5IGV4ZWN1dGVzIHdoZW4gVENQIG5ldHdvcmsgcGFja2V0cyBhcmUgcHJvY2Vzc2VkIGJ5IGEgVENQIHNvY2tldCBpbiBFU1RBQkxJU0hFRCBzdGF0ZS4gVGhhdCYjMzk7cyBub3QgbGlrZSBtZW1vcnkgYWxsb2NhdG9ycywgbXV0ZXhlcywgcGFnZSBmYXVsdHMsIG9yIG90aGVyIHN1Y2ggZnVuZGFtZW50YWwsIHdpZGVseS11c2VkIHRoaW5ncy4gU28sIGl0JiMzOTtzIHByZXR0eSB0YXJnZXRlZC4KCkxldCYjMzk7cyBjaGVjayBgV29ydGhGdXp6aW5nYCBuZXh0LCBpdCBpcywgaW4gZmFjdCwgYFdvcnRoRnV6emluZzogdHJ1ZWAuIFRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGBbJiMzNDtJTkVUJiMzNDtdYCB3aGljaCBpcyB3aGF0IGlzIGV4cGVjdGVkLiBUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIGBbJiMzNDt0Y3BfcmN2X2VzdGFibGlzaGVkJiMzNDssICYjMzQ7dGNwX3ZhbGlkYXRlX2luY29taW5nJiMzNDtdYCBzbyB0aGF0JiMzOTtzIGdvb2QuCgpPa2F5LCBsZXQmIzM5O3MgbmFpbCBkb3duIGEgcmVhbGx5IGNsZWFyIHN1bW1hcnkgc3RhdGVtZW50IGZvciB0aGlzLiBIZXJlJiMzOTtzIHdoYXQgSSYjMzk7dmUgZ290OgoKJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgVENQIGZhc3QtcGF0aCBoZWFkZXIgcHJlZGljdGlvbiBjaGVjayBpbiBgdGNwX3Jjdl9lc3RhYmxpc2hlZCgpYCB0byBlbnN1cmUgaW5jb21pbmcgQUNLIHNlcXVlbmNlIG51bWJlcnMgYXJlIHdpdGhpbiBgW1NORC5VTkEsIFNORC5OWFRdYC4gUGFja2V0cyBjYXJyeWluZyBvbGQgQUNLcyBub3cgZmFsbCBiYWNrIHRvIHRoZSBzbG93IHBhdGggKGB0Y3BfdmFsaWRhdGVfaW5jb21pbmcoKWApLCBtaXRpZ2F0aW5nIGJsaW5kIGRhdGEgaW5qZWN0aW9uIGF0dGFja3MgcGVyIFJGQyA1OTYxLiBUaGlzIG1vZGlmaWVzIGNvcmUgVENQIGluY29taW5nIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgbmV0d29yayBmdXp6aW5nIHdpdGggVENQIHNvY2tldHMuJiMzNDsKClRoYXQgc2hvdWxkIGJlIGdvb2QuIFRpbWUgdG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfcmN2X2VzdGFibGlzaGVkJiMzNDssCiAgICAmIzM0O3RjcF92YWxpZGF0ZV9pbmNvbWluZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbHRlcnMgdGhlIGZhc3QtcGF0aCBoZWFkZXIgcHJlZGljdGlvbiBjb25kaXRpb24gaW4gdGNwX3Jjdl9lc3RhYmxpc2hlZCgpIHRvIHJlcXVpcmUgdGhlIEFDSyBzZXF1ZW5jZSBudW1iZXIgdG8gZmFsbCBiZXR3ZWVuIFNORC5VTkEgYW5kIFNORC5OWFQuIFNlZ21lbnRzIHdpdGggb2xkIEFDS3MgYXJlIG5vdyByZWRpcmVjdGVkIHRvIHRoZSBzbG93IHBhdGggKHRjcF92YWxpZGF0ZV9pbmNvbWluZygpKSB0byBwcmV2ZW50IFJGQyA1OTYxIGJsaW5kIGRhdGEgaW5qZWN0aW9uLiBUaGlzIGFsdGVycyBjb3JlIFRDUCByZWNlaXZlIGxvZ2ljIGFuZCBpcyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIFRDUCBzb2NrZXQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF9yY3ZfZXN0YWJsaXNoZWQmIzM0OywKICAgICYjMzQ7dGNwX3ZhbGlkYXRlX2luY29taW5nJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFsdGVycyB0aGUgZmFzdC1wYXRoIGhlYWRlciBwcmVkaWN0aW9uIGNvbmRpdGlvbiBpbiB0Y3BfcmN2X2VzdGFibGlzaGVkKCkgdG8gcmVxdWlyZSB0aGUgQUNLIHNlcXVlbmNlIG51bWJlciB0byBmYWxsIGJldHdlZW4gU05ELlVOQSBhbmQgU05ELk5YVC4gU2VnbWVudHMgd2l0aCBvbGQgQUNLcyBhcmUgbm93IHJlZGlyZWN0ZWQgdG8gdGhlIHNsb3cgcGF0aCAodGNwX3ZhbGlkYXRlX2luY29taW5nKCkpIHRvIHByZXZlbnQgUkZDIDU5NjEgYmxpbmQgZGF0YSBpbmplY3Rpb24uIFRoaXMgYWx0ZXJzIGNvcmUgVENQIHJlY2VpdmUgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgVENQIHNvY2tldCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDoxNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjE0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGNwX3Jjdl9lc3RhYmxpc2hlZCgpIHRvIHJlcXVpcmUgdGhlIGluY29taW5nIEFDSyBzZXF1ZW5jZSBudW1iZXIgdG8gYmUgd2l0aGluIFtTTkQuVU5BLCBTTkQuTlhUXSB2aWEgYmV0d2VlbihUQ1BfU0tCX0NCKHNrYiktXHUwMDNlYWNrX3NlcSwgdHAtXHUwMDNlc25kX3VuYSwgdHAtXHUwMDNlc25kX254dCkgYmVmb3JlIHRha2luZyB0aGUgVENQIGZhc3QgcGF0aCwgZGl2ZXJ0aW5nIHBhY2tldHMgd2l0aCBvbGQgQUNLcyB0byB0aGUgc2xvdyBwYXRoIGZvciBwcm9wZXIgUkZDIDU5NjEgdmFsaWRhdGlvbi5cblxuQWxsIHZhcmlhYmxlcyBpbnZvbHZlZCAoVENQX1NLQl9DQihza2IpLVx1MDAzZWFja19zZXEsIHRwLVx1MDAzZXNuZF91bmEsIHRwLVx1MDAzZXNuZF9ueHQpIGFyZSBpbml0aWFsaXplZCB1MzIgdmFsdWVzLiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgbWVtb3J5LCBhbHRlciBidWZmZXIgc2l6ZXMsIGNvcHkga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjMxOTgzM2EwZjA1MzNkYjdmOGQ2OGEyMjYwMjBkZTI5MDdjNWU2YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDE0IDEwOjEyOjQ4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lucHV0LmMgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwppbmRleCBkYWZmOTNkNTEzNDI4Li4wM2QzMTdhNTgxMzI0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaW5wdXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwpAQCAtNjQ5MCw2ICYjNDM7NjQ5MCw3IEBAIHN0YXRpYyBib29sIHRjcF92YWxpZGF0ZV9pbmNvbWluZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsCiAgKgkgIG9yIHB1cmUgcmVjZWl2ZXJzICh0aGlzIG1lYW5zIGVpdGhlciB0aGUgc2VxdWVuY2UgbnVtYmVyIG9yIHRoZSBhY2sKICAqCSAgdmFsdWUgbXVzdCBzdGF5IGNvbnN0YW50KQogICoJLSBVbmV4cGVjdGVkIFRDUCBvcHRpb24uCiYjNDM7ICoJLSBBQ0sgc2VxdWVuY2UgbnVtYmVyIGlzIG91dHNpZGUgW1NORC5VTkEsIFNORC5OWFRdLgogICoKICAqCVdoZW4gdGhlc2UgY29uZGl0aW9ucyBhcmUgbm90IHNhdGlzZmllZCBpdCBkcm9wcyBpbnRvIGEgc3RhbmRhcmQKICAqCXJlY2VpdmUgcHJvY2VkdXJlIHBhdHRlcm5lZCBhZnRlciBSRkM3OTMgdG8gaGFuZGxlIGFsbCBjYXNlcy4KQEAgLTY1MzksNyAmIzQzOzY1NDAsNyBAQCB2b2lkIHRjcF9yY3ZfZXN0YWJsaXNoZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCiAJaWYgKCh0Y3BfZmxhZ193b3JkKHRoKSAmYW1wOyBUQ1BfSFBfQklUUykgPT0gdHAtJmd0O3ByZWRfZmxhZ3MgJmFtcDsmYW1wOwogCSAgICBUQ1BfU0tCX0NCKHNrYiktJmd0O3NlcSA9PSB0cC0mZ3Q7cmN2X254dCAmYW1wOyZhbXA7Ci0JICAgICFhZnRlcihUQ1BfU0tCX0NCKHNrYiktJmd0O2Fja19zZXEsIHRwLSZndDtzbmRfbnh0KSkgewomIzQzOwkgICAgYmV0d2VlbihUQ1BfU0tCX0NCKHNrYiktJmd0O2Fja19zZXEsIHRwLSZndDtzbmRfdW5hLCB0cC0mZ3Q7c25kX254dCkpIHsKIAkJaW50IHRjcF9oZWFkZXJfbGVuID0gdHAtJmd0O3RjcF9oZWFkZXJfbGVuOwogCQlzMzIgZGVsdGEgPSAwOwogCQlpbnQgZmxhZyA9IDA7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX3JmYzU5NjFfcmVqZWN0LW9sZC1hY2sucGt0IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3BhY2tldGRyaWxsL3RjcF9yZmM1OTYxX3JlamVjdC1vbGQtYWNrLnBrdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4zMmRkOWRlMWQzNjYyCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3BhY2tldGRyaWxsL3RjcF9yZmM1OTYxX3JlamVjdC1vbGQtYWNrLnBrdApAQCAtMCwwICYjNDM7MSwyOSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7YC4vZGVmYXVsdHMuc2gKJiM0MztzeXNjdGwgLXEgbmV0LmlwdjQudGNwX2ludmFsaWRfcmF0ZWxpbWl0PTAKJiM0MztgCiYjNDM7CiYjNDM7Ly8gVGVzdCByZWplY3Rpb24gb2YgZGF0YSBzZWdtZW50cyBjYXJyeWluZyBleGNlc3NpdmVseSBvbGQgQUNLcwomIzQzOwomIzQzOzAgc29ja2V0KC4uLiwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQKSA9IDMKJiM0MzsmIzQzOzAgc2V0c29ja29wdCgzLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsIFsxXSwgNCkgPSAwCiYjNDM7JiM0MzswIGJpbmQoMywgLi4uLCAuLi4pID0gMAomIzQzOyYjNDM7MCBsaXN0ZW4oMywgMTAyNCkgPSAwCiYjNDM7CiYjNDM7Ly8gLS0tLS0tLS0tLS0tLS0tLSBIYW5kc2hha2UgLS0tLS0tLS0tLS0tLS0tLS0tLSAvLwomIzQzOyYjNDM7MCAmbHQ7IFMgMDowKDApIHdpbiA2NTUzNQomIzQzOyYjNDM7MCAmZ3Q7IFMuIDA6MCgwKSBhY2sgMSAmbHQ7Li4uJmd0OwomIzQzOyYjNDM7MCAmbHQ7IC4gMToxKDApIGFjayAxIHdpbiA2NTUzNQomIzQzOyYjNDM7MCBhY2NlcHQoMywgLi4uLCAuLi4pID0gNAomIzQzOwomIzQzOy8vIFBvcHVsYXRlIHJlY2VpdmUgbWVtb3J5IHNvIHRoZSBmb2xsb3dpbmcgc2VnbWVudCBjYW4gdXNlCiYjNDM7Ly8gaGVhZGVyIHByZWRpY3Rpb24uCiYjNDM7JiM0MzswICZsdDsgUC4gMTo1MDEoNTAwKSBhY2sgMSB3aW4gNjU1MzUKJiM0MzsmIzQzOzAgJmd0OyAuIDE6MSgwKSBhY2sgNTAxCiYjNDM7CiYjNDM7Ly8gU2VuZCBhbiBpbi1zZXF1ZW5jZSBkYXRhIHNlZ21lbnQgY2FycnlpbmcgYW4gZXhjZXNzaXZlbHkgb2xkIEFDSy4KJiM0MzsmIzQzOzAgJmx0OyBQLiA1MDE6MTUwMSgxMDAwKSBhY2sgMjc5NDk2NzM5NyB3aW4gNjU1MzUKJiM0MzsKJiM0MzsvLyBDaGFsbGVuZ2UgQUNLOyBSQ1YuTlhUIG11c3QgcmVtYWluIDUwMS4KJiM0MzsmIzQzOzAgJmd0OyAuIDE6MSgwKSBhY2sgNTAxCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODEwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFRDUCBJbnB1dCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhdGNoIHRvIGBuZXQvaXB2NC90Y3BfaW5wdXQuY2AuIEl0JiMzOTtzIGEgZmFpcmx5IGZvY3VzZWQgY2hhbmdlLCB3aGljaCBpcyB1c3VhbGx5IGEgZ29vZCBzaWduLiBMb29rcyBsaWtlIHRoZXkgYXJlIGFkZGluZyBhIG5ldyBjb25kaXRpb24gdG8gdGhlIGB0Y3BfdmFsaWRhdGVfaW5jb21pbmdgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGV5IGFyZSBiZWluZyBtb3JlIHN0cmluZ2VudCBhYm91dCB2YWxpZGF0aW5nIGluY29taW5nIEFDS3MuCgpUaGUgcGF0Y2ggaXRzZWxmIG1vZGlmaWVzIHRoZSB2YWxpZGF0aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAgZnVuY3Rpb24uIEl0IHNlZW1zIHRoYXQgcHJldmlvdXNseSwgYW4gQUNLIHdhcyBhY2NlcHRlZCBpZiBpdCB3YXNuJiMzOTt0ICphZnRlciogYHNuZF9ueHRgLiBOb3csIHRoZSBjb25kaXRpb24gaXMgYGJldHdlZW4oVENQX1NLQl9DQihza2IpLSZndDthY2tfc2VxLCB0cC0mZ3Q7c25kX3VuYSwgdHAtJmd0O3NuZF9ueHQpYC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQmIzM5O3MgZW5mb3JjaW5nIHRoYXQgdGhlIEFDSyBzZXF1ZW5jZSBudW1iZXIgbXVzdCBmYWxsIHdpdGhpbiB0aGUgZXhwZWN0ZWQgd2luZG93IC0gYHNuZF91bmFgIHRvIGBzbmRfbnh0YC4gIFRoaXMgaXMgYSBnb29kIGltcHJvdmVtZW50OyBpdCBwcmV2ZW50cyBhIHZ1bG5lcmFiaWxpdHkgd2hlcmUgYW4gb2xkIEFDSyB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIHdpbmRvdywgYnV0IG5vdCAmIzM0O2FmdGVyJiMzNDsgYHNuZF9ueHRgIG1pZ2h0IGJlIGFjY2VwdGVkLCB3aGljaCBjb3VsZCBiZSBleHBsb2l0ZWQuCgpUaGUgbmV3IGNvbmRpdGlvbiBsb29rcyBsaWtlIGl0IGlzIGFkZHJlc3NpbmcgYSBjYXNlIHdoZXJlIGFuIEFDSyBzZXF1ZW5jZSBudW1iZXIgbWlnaHQgZmFsbCBvdXRzaWRlIG9mIHRoZSB2YWxpZCB3aW5kb3cuIFRoaXMgaXMgZ29vZCBiZWNhdXNlIGl0IGV4cGxpY2l0bHkgcHJldmVudHMgdGhhdC4KClRoZSBwcmVzZW5jZSBvZiB0aGUgcGFja2V0ZHJpbGwgdGVzdCwgYHRjcF9yZmM1OTYxX3JlamVjdC1vbGQtYWNrLnBrdGAsIGlzIGFsc28gdGVsbGluZy4gVGhpcyBpcyBsaWtlbHkgYW4gaW50ZWdyYXRpb24gdGVzdCBkZXNpZ25lZCB0byBjb25maXJtIHRoYXQgdGhpcyBuZXcgdmFsaWRhdGlvbiBsb2dpYyAqY29ycmVjdGx5KiByZWplY3RzIG9sZCBvciBvdXQtb2Ytd2luZG93IEFDS3MuIFRoYXQmIzM5O3MgcHJlY2lzZWx5IHdoYXQgSSYjMzk7ZCBleHBlY3Q7IGl0JiMzOTtzIGNydWNpYWwgdG8gaGF2ZSBhIHRlc3QgY2FzZSBmb3IgdGhpcyB0eXBlIG9mIGNoYW5nZS4gVGhpcyBwYXRjaCBpcyBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSBSRkMgNTk2MS4gVGhpcyBpcyBhIGdvb2QgaW1wcm92ZW1lbnQgdG8gbWFrZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfaW5wdXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY1MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjUzMDpcdFx0dHAtXHUwMDNlcnhfb3B0LmFjY2VjbiA9IDA7XG42NTMxOlx0XG42NTMyOlx0XHQvKlx0cHJlZF9mbGFncyBpcyAweFM/MTAgXHUwMDNjXHUwMDNjIDE2ICYjNDM7IHNuZF93bmRcbjY1MzM6XHRcdCAqXHRpZiBoZWFkZXJfcHJlZGljdGlvbiBpcyB0byBiZSBtYWRlXG42NTM0Olx0XHQgKlx0JiMzOTtTJiMzOTsgd2lsbCBhbHdheXMgYmUgdHAtXHUwMDNldGNwX2hlYWRlcl9sZW4gXHUwMDNlXHUwMDNlIDJcbjY1MzU6XHRcdCAqXHQmIzM5Oz8mIzM5OyB3aWxsIGJlIDAgZm9yIHRoZSBmYXN0IHBhdGgsIG90aGVyd2lzZSBwcmVkX2ZsYWdzIGlzIDAgdG9cbjY1MzY6XHRcdCAqICB0dXJuIGl0IG9mZlx0KHdoZW4gdGhlcmUgYXJlIGhvbGVzIGluIHRoZSByZWNlaXZlXG42NTM3Olx0XHQgKlx0IHNwYWNlIGZvciBpbnN0YW5jZSlcbjY1Mzg6XHRcdCAqXHRQU0ggZmxhZyBpcyBpZ25vcmVkLlxuNjUzOTpcdFx0ICovXG42NTQwOlx0XG42NTQxOlx0XHRpZiAoKHRjcF9mbGFnX3dvcmQodGgpIFx1MDAyNiBUQ1BfSFBfQklUUykgPT0gdHAtXHUwMDNlcHJlZF9mbGFncyBcdTAwMjZcdTAwMjZcbjY1NDI6XHRcdCAgICBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlc2VxID09IHRwLVx1MDAzZXJjdl9ueHQgXHUwMDI2XHUwMDI2XG42NTQzOlx0XHQgICAgYmV0d2VlbihUQ1BfU0tCX0NCKHNrYiktXHUwMDNlYWNrX3NlcSwgdHAtXHUwMDNlc25kX3VuYSwgdHAtXHUwMDNlc25kX254dCkpIHtcbjY1NDQ6XHRcdFx0aW50IHRjcF9oZWFkZXJfbGVuID0gdHAtXHUwMDNldGNwX2hlYWRlcl9sZW47XG42NTQ1Olx0XHRcdHMzMiBkZWx0YSA9IDA7XG42NTQ2Olx0XHRcdGludCBmbGFnID0gMDtcbjY1NDc6XHRcbjY1NDg6XHRcdFx0LyogVGltZXN0YW1wIGhlYWRlciBwcmVkaWN0aW9uOiB0Y3BfaGVhZGVyX2xlblxuNjU0OTpcdFx0XHQgKiBpcyBhdXRvbWF0aWNhbGx5IGVxdWFsIHRvIHRoLVx1MDAzZWRvZmYqNCBkdWUgdG8gcHJlZF9mbGFnc1xuNjU1MDpcdFx0XHQgKiBtYXRjaC5cbjY1NTE6XHRcdFx0ICovXG42NTUyOlx0XG42NTUzOlx0XHRcdC8qIENoZWNrIHRpbWVzdGFtcCAqL1xuNjU1NDpcdFx0XHRpZiAodGNwX2hlYWRlcl9sZW4gPT0gc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpICYjNDM7IFRDUE9MRU5fVFNUQU1QX0FMSUdORUQpIHtcbjY1NTU6XHRcdFx0XHQvKiBObz8gU2xvdyBwYXRoISAqL1xuNjU1NjpcdFx0XHRcdGlmICghdGNwX3BhcnNlX2FsaWduZWRfdGltZXN0YW1wKHRwLCB0aCkpXG42NTU3Olx0XHRcdFx0XHRnb3RvIHNsb3dfcGF0aDtcbjY1NTg6XHRcbjY1NTk6XHRcdFx0XHRkZWx0YSA9IHRwLVx1MDAzZXJ4X29wdC5yY3ZfdHN2YWwgLVxuNjU2MDpcdFx0XHRcdFx0dHAtXHUwMDNlcnhfb3B0LnRzX3JlY2VudDtcbjY1NjE6XHRcdFx0XHQvKiBJZiBQQVdTIGZhaWxlZCwgY2hlY2sgaXQgbW9yZSBjYXJlZnVsbHkgaW4gc2xvdyBwYXRoICovXG42NTYyOlx0XHRcdFx0aWYgKGRlbHRhIFx1MDAzYyAwKVxuNjU2MzpcdFx0XHRcdFx0Z290byBzbG93X3BhdGg7XG42NTY0Olx0XG42NTY1Olx0XHRcdFx0LyogRE8gTk9UIHVwZGF0ZSB0c19yZWNlbnQgaGVyZSwgaWYgY2hlY2tzdW0gZmFpbHNcbjY1NjY6XHRcdFx0XHQgKiBhbmQgdGltZXN0YW1wIHdhcyBjb3JydXB0ZWQgcGFydCwgaXQgd2lsbCByZXN1bHRcbjY1Njc6XHRcdFx0XHQgKiBpbiBhIGh1bmcgY29ubmVjdGlvbiBzaW5jZSB3ZSB3aWxsIGRyb3AgYWxsXG42NTY4Olx0XHRcdFx0ICogZnV0dXJlIHBhY2tldHMgZHVlIHRvIHRoZSBQQVdTIHRlc3QuXG42NTY5Olx0XHRcdFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MTUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqRGl2aW5nIERlZXAgaW50byB0aGUgJiMzOTtTbG93IFBhdGgmIzM5OyoqCgpBbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBhc3N1bXB0aW9uIOKAkyB0aGUgJiMzNDtmYXN0IHBhdGgmIzM0OyDigJMgZGlkbiYjMzk7dCBwYW4gb3V0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYWx0ZXJuYXRpdmUgcm91dGUuIElmIHRoZSBzeXN0ZW0gaXMgbm90IHRha2luZyB0aGUgb3B0aW1pemVkIGV4ZWN1dGlvbiwgSSBuZWVkIHRvIGtub3cgd2h5LiBUaGF0IGxlYWRzIG1lIHRvIGBzbG93X3BhdGhgLiBOb3csIEkgd2FudCB0byB6ZXJvIGluIG9uIHdoYXQmIzM5O3MgYWN0dWFsbHkgaGFwcGVuaW5nIHdoZW4gdGhpbmdzIGFyZW4mIzM5O3QgcnVubmluZyBhcyBleHBlY3RlZC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGxpbmVzIDY1NzAgdGhyb3VnaCA2NjQwLiBUaGF0IGJsb2NrIGlzIHdoZXJlIHRoZSBjb2RlIGRldmlhdGVzIGZyb20gdGhlIGZhc3Qgcm91dGUsIGFuZCB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjcml0aWNhbCBwcm9ibGVtIG1pZ2h0IGJlIGhpZGluZy4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIHN0YXJ0IGludmVzdGlnYXRpbmcgdGhhdCBwYXJ0aWN1bGFyIHNlY3Rpb24gb2YgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfaW5wdXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY1NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjU3MDpcdFx0XHR9XG42NTcxOlx0XG42NTcyOlx0XHRcdGlmIChsZW4gXHUwMDNjPSB0Y3BfaGVhZGVyX2xlbikge1xuNjU3MzpcdFx0XHRcdC8qIEJ1bGsgZGF0YSB0cmFuc2Zlcjogc2VuZGVyICovXG42NTc0Olx0XHRcdFx0aWYgKGxlbiA9PSB0Y3BfaGVhZGVyX2xlbikge1xuNjU3NTpcdFx0XHRcdFx0LyogUHJlZGljdGVkIHBhY2tldCBpcyBpbiB3aW5kb3cgYnkgZGVmaW5pdGlvbi5cbjY1NzY6XHRcdFx0XHRcdCAqIHNlcSA9PSByY3Zfbnh0IGFuZCByY3Zfd3VwIFx1MDAzYz0gcmN2X254dC5cbjY1Nzc6XHRcdFx0XHRcdCAqIEhlbmNlLCBjaGVjayBzZXFcdTAwM2M9cmN2X3d1cCByZWR1Y2VzIHRvOlxuNjU3ODpcdFx0XHRcdFx0ICovXG42NTc5Olx0XHRcdFx0XHRpZiAodGNwX2hlYWRlcl9sZW4gPT1cbjY1ODA6XHRcdFx0XHRcdCAgICAoc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpICYjNDM7IFRDUE9MRU5fVFNUQU1QX0FMSUdORUQpIFx1MDAyNlx1MDAyNlxuNjU4MTpcdFx0XHRcdFx0ICAgIHRwLVx1MDAzZXJjdl9ueHQgPT0gdHAtXHUwMDNlcmN2X3d1cClcbjY1ODI6XHRcdFx0XHRcdFx0ZmxhZyB8PSBfX3RjcF9yZXBsYWNlX3RzX3JlY2VudCh0cCxcbjY1ODM6XHRcdFx0XHRcdFx0XHRcdFx0XHRkZWx0YSk7XG42NTg0Olx0XG42NTg1Olx0XHRcdFx0XHR0Y3BfZWNuX3JlY2VpdmVkX2NvdW50ZXJzKHNrLCBza2IsIDApO1xuNjU4NjpcdFxuNjU4NzpcdFx0XHRcdFx0LyogV2Uga25vdyB0aGF0IHN1Y2ggcGFja2V0cyBhcmUgY2hlY2tzdW1tZWRcbjY1ODg6XHRcdFx0XHRcdCAqIG9uIGVudHJ5LlxuNjU4OTpcdFx0XHRcdFx0ICovXG42NTkwOlx0XHRcdFx0XHR0Y3BfYWNrKHNrLCBza2IsIGZsYWcpO1xuNjU5MTpcdFx0XHRcdFx0X19rZnJlZV9za2Ioc2tiKTtcbjY1OTI6XHRcdFx0XHRcdHRjcF9kYXRhX3NuZF9jaGVjayhzayk7XG42NTkzOlx0XHRcdFx0XHQvKiBXaGVuIHJlY2VpdmluZyBwdXJlIGFjayBpbiBmYXN0IHBhdGgsIHVwZGF0ZVxuNjU5NDpcdFx0XHRcdFx0ICogbGFzdCB0cyBlY3IgZGlyZWN0bHkgaW5zdGVhZCBvZiBjYWxsaW5nXG42NTk1Olx0XHRcdFx0XHQgKiB0Y3BfcmN2X3J0dF9tZWFzdXJlX3RzKClcbjY1OTY6XHRcdFx0XHRcdCAqL1xuNjU5NzpcdFx0XHRcdFx0dHAtXHUwMDNlcmN2X3J0dF9sYXN0X3RzZWNyID0gdHAtXHUwMDNlcnhfb3B0LnJjdl90c2VjcjtcbjY1OTg6XHRcdFx0XHRcdHJldHVybjtcbjY1OTk6XHRcdFx0XHR9IGVsc2UgeyAvKiBIZWFkZXIgdG9vIHNtYWxsICovXG42NjAwOlx0XHRcdFx0XHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fUEtUX1RPT19TTUFMTDtcbjY2MDE6XHRcdFx0XHRcdFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBUQ1BfTUlCX0lORVJSUyk7XG42NjAyOlx0XHRcdFx0XHRnb3RvIGRpc2NhcmQ7XG42NjAzOlx0XHRcdFx0fVxuNjYwNDpcdFx0XHR9IGVsc2Uge1xuNjYwNTpcdFx0XHRcdGludCBlYXRlbiA9IDA7XG42NjA2Olx0XHRcdFx0Ym9vbCBmcmFnc3RvbGVuID0gZmFsc2U7XG42NjA3Olx0XG42NjA4Olx0XHRcdFx0aWYgKHRjcF9jaGVja3N1bV9jb21wbGV0ZShza2IpKVxuNjYwOTpcdFx0XHRcdFx0Z290byBjc3VtX2Vycm9yO1xuNjYxMDpcdFxuNjYxMTpcdFx0XHRcdGlmIChhZnRlcihUQ1BfU0tCX0NCKHNrYiktXHUwMDNlZW5kX3NlcSxcbjY2MTI6XHRcdFx0XHRcdCAgdHAtXHUwMDNlcmN2X254dCAmIzQzOyB0Y3BfcmVjZWl2ZV93aW5kb3codHApKSlcbjY2MTM6XHRcdFx0XHRcdGdvdG8gdmFsaWRhdGU7XG42NjE0Olx0XG42NjE1Olx0XHRcdFx0aWYgKChpbnQpc2tiLVx1MDAzZXRydWVzaXplIFx1MDAzZSBzay1cdTAwM2Vza19mb3J3YXJkX2FsbG9jKVxuNjYxNjpcdFx0XHRcdFx0Z290byBzdGVwNTtcbjY2MTc6XHRcbjY2MTg6XHRcdFx0XHQvKiBQcmVkaWN0ZWQgcGFja2V0IGlzIGluIHdpbmRvdyBieSBkZWZpbml0aW9uLlxuNjYxOTpcdFx0XHRcdCAqIHNlcSA9PSByY3Zfbnh0IGFuZCByY3Zfd3VwIFx1MDAzYz0gcmN2X254dC5cbjY2MjA6XHRcdFx0XHQgKiBIZW5jZSwgY2hlY2sgc2VxXHUwMDNjPXJjdl93dXAgcmVkdWNlcyB0bzpcbjY2MjE6XHRcdFx0XHQgKi9cbjY2MjI6XHRcdFx0XHRpZiAodGNwX2hlYWRlcl9sZW4gPT1cbjY2MjM6XHRcdFx0XHQgICAgKHNpemVvZihzdHJ1Y3QgdGNwaGRyKSAmIzQzOyBUQ1BPTEVOX1RTVEFNUF9BTElHTkVEKSBcdTAwMjZcdTAwMjZcbjY2MjQ6XHRcdFx0XHQgICAgdHAtXHUwMDNlcmN2X254dCA9PSB0cC1cdTAwM2VyY3Zfd3VwKVxuNjYyNTpcdFx0XHRcdFx0ZmxhZyB8PSBfX3RjcF9yZXBsYWNlX3RzX3JlY2VudCh0cCxcbjY2MjY6XHRcdFx0XHRcdFx0XHRcdFx0ZGVsdGEpO1xuNjYyNzpcdFxuNjYyODpcdFx0XHRcdHRjcF9yY3ZfcnR0X21lYXN1cmVfdHMoc2ssIHNrYik7XG42NjI5Olx0XG42NjMwOlx0XHRcdFx0TkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9UQ1BIUEhJVFMpO1xuNjYzMTpcdFxuNjYzMjpcdFx0XHRcdC8qIEJ1bGsgZGF0YSB0cmFuc2ZlcjogcmVjZWl2ZXIgKi9cbjY2MzM6XHRcdFx0XHR0Y3BfY2xlYW51cF9za2Ioc2tiKTtcbjY2MzQ6XHRcdFx0XHRfX3NrYl9wdWxsKHNrYiwgdGNwX2hlYWRlcl9sZW4pO1xuNjYzNTpcdFx0XHRcdHRjcF9lY25fcmVjZWl2ZWRfY291bnRlcnMoc2ssIHNrYixcbjY2MzY6XHRcdFx0XHRcdFx0XHQgIGxlbiAtIHRjcF9oZWFkZXJfbGVuKTtcbjY2Mzc6XHRcdFx0XHRlYXRlbiA9IHRjcF9xdWV1ZV9yY3Yoc2ssIHNrYiwgXHUwMDI2ZnJhZ3N0b2xlbik7XG42NjM4Olx0XG42NjM5Olx0XHRcdFx0dGNwX2V2ZW50X2RhdGFfcmVjdihzaywgc2tiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc4OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDMyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRDUCBBQ0sgU2VxdWVuY2UgVmFsaWRhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiB0aGlzIGBiZXR3ZWVuKFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7YWNrX3NlcSwgdHAtJmd0O3NuZF91bmEsIHRwLSZndDtzbmRfbnh0KWAgY2hlY2suIEJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgY29kZSB1c2VkIGAhYWZ0ZXIoVENQX1NLQl9DQihza2IpLSZndDthY2tfc2VxLCB0cC0mZ3Q7c25kX254dClgLCB3aGljaCBlZmZlY3RpdmVseSBtZWFucyBgYWNrX3NlcWAgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYHRwLSZndDtzbmRfbnh0YC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBIb3dldmVyLCBJIG5lZWQgdG8gY29uc2lkZXIgYSBwb3RlbnRpYWwgaXNzdWU6IHdoYXQgaGFwcGVucyBpZiBgYWNrX3NlcWAgaXMgYWN0dWFsbHkgKmxlc3MgdGhhbiogYHRwLSZndDtzbmRfdW5hYD8gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYW4gJiMzNDtvbGQmIzM0OyBBQ0ssIG9uZSB0aGF0IGFja25vd2xlZGdlcyBkYXRhICpiZWZvcmUqIG91ciBTZW5kIFVuYWNrbm93bGVkZ2VkIHNlcXVlbmNlLiBSRkMgNTk2MSBhbmQgb3RoZXIgVENQIHN0YW5kYXJkcyBwcm9iYWJseSBoYXZlIHNwZWNpZmljIHJlcXVpcmVtZW50cyBmb3IgaGFuZGxpbmcgdGhlc2UsIHBvdGVudGlhbGx5IHJlamVjdGluZyB0aGVtIG91dHJpZ2h0LCBlc3BlY2lhbGx5IGNoYWxsZW5nZSBBQ0tzIHRoYXQgYXJlIHJpZGljdWxvdXNseSBvdXQgb2Ygc2VxdWVuY2UuCgpUaGUgcHJvYmxlbSwgYXMgSSBzZWUgaXQsIGlzIHRoYXQgdGhlIG9yaWdpbmFsIGZhc3QgcGF0aCBsb2dpYywgYmFzZWQgb24gYCFhZnRlcihhY2tfc2VxLCBzbmRfbnh0KWAsIHdvdWxkIGluY29ycmVjdGx5IGFsbG93IHRoZXNlIG9sZCBBQ0tzIHRocm91Z2ggaWYgdGhleSB3ZXJlIGluIHRoZSByYW5nZSBvZiBgc25kX3VuYWAgdG8gYHNuZF9ueHRgLiBTaW5jZSBhbiBvbGQgQUNLIHdpbGwgaGF2ZSBgYWNrX3NlcSAmbHQ7PSBzbmRfbnh0YCwgdGhlIGZhc3QgcGF0aCB3b3VsZCBoYXZlIGJlZW4gbWlzdGFrZW5seSB0cmlnZ2VyZWQuIFRoaXMgaXMgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSwgc2luY2UgZGF0YSBzZWdtZW50cyB3aXRoIHRoZXNlIG9sZCBBQ0tzIHdvdWxkIGJlIHByb2Nlc3NlZC4KCk5vdywgd2l0aCB0aGlzIHBhdGNoLCB1c2luZyBgYmV0d2VlbihUQ1BfU0tCX0NCKHNrYiktJmd0O2Fja19zZXEsIHRwLSZndDtzbmRfdW5hLCB0cC0mZ3Q7c25kX254dClgLCBpdCYjMzk7cyBjbGVhciB0aGUgaW50ZW50aW9uIGlzIHRvIGNvcnJlY3QgdGhpcy4gQW4gYGFja19zZXFgIGxlc3MgdGhhbiBgdHAtJmd0O3NuZF91bmFgIHdpbGwgKm5vdCogZmFsbCB3aXRoaW4gdGhpcyByYW5nZSwgdGh1cyBhdm9pZGluZyB0aGUgZmFzdCBwYXRoLiBJbnN0ZWFkLCBpdCB3aWxsIGRyb3AgaW50byB0aGUgc2xvdyBwYXRoLCB3aGVyZSBgdGNwX3ZhbGlkYXRlX2luY29taW5nYCBoYW5kbGVzIG1vcmUgdGhvcm91Z2ggY2hlY2tzIGZvciBSRkMgNTk2MSBjb21wbGlhbmNlLiBUaGlzIHNlZW1zIGxpa2UgYSBzb2xpZCBzb2x1dGlvbi4KCk15IG5leHQgc3RlcCBpcyB0byBjb25maXJtIHRoaXMuIEkgbmVlZCB0byBkaXZlIGludG8gYHRjcF92YWxpZGF0ZV9pbmNvbWluZ2Agb3IgdGhlIHNsb3cgcGF0aCBjb2RlIHRvIHZlcmlmeSBleGFjdGx5IGhvdyBSRkMgNTk2MSYjMzk7cyBzdGlwdWxhdGlvbnMgZm9yIG9sZCBBQ0tzIGFyZSBpbXBsZW1lbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfaW5wdXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY2NTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjY1NTpcdFx0XHRcdHRjcF9kYXRhX3JlYWR5KHNrKTtcbjY2NTY6XHRcdFx0XHRyZXR1cm47XG42NjU3Olx0XHRcdH1cbjY2NTg6XHRcdH1cbjY2NTk6XHRcbjY2NjA6XHRzbG93X3BhdGg6XG42NjYxOlx0XHRpZiAobGVuIFx1MDAzYyAodGgtXHUwMDNlZG9mZiBcdTAwM2NcdTAwM2MgMikgfHwgdGNwX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpXG42NjYyOlx0XHRcdGdvdG8gY3N1bV9lcnJvcjtcbjY2NjM6XHRcbjY2NjQ6XHRcdGlmICghdGgtXHUwMDNlYWNrIFx1MDAyNlx1MDAyNiAhdGgtXHUwMDNlcnN0IFx1MDAyNlx1MDAyNiAhdGgtXHUwMDNlc3luKSB7XG42NjY1Olx0XHRcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9UQ1BfRkxBR1M7XG42NjY2Olx0XHRcdGdvdG8gZGlzY2FyZDtcbjY2Njc6XHRcdH1cbjY2Njg6XHRcbjY2Njk6XHRcdC8qXG42NjcwOlx0XHQgKlx0U3RhbmRhcmQgc2xvdyBwYXRoLlxuNjY3MTpcdFx0ICovXG42NjcyOlx0dmFsaWRhdGU6XG42NjczOlx0XHRpZiAoIXRjcF92YWxpZGF0ZV9pbmNvbWluZyhzaywgc2tiLCB0aCwgMSkpXG42Njc0Olx0XHRcdHJldHVybjtcbjY2NzU6XHRcbjY2NzY6XHRzdGVwNTpcbjY2Nzc6XHRcdHRjcF9lY25fcmVjZWl2ZWRfY291bnRlcnNfcGF5bG9hZChzaywgc2tiKTtcbjY2Nzg6XHRcbjY2Nzk6XHRcdHJlYXNvbiA9IHRjcF9hY2soc2ssIHNrYiwgRkxBR19TTE9XUEFUSCB8IEZMQUdfVVBEQVRFX1RTX1JFQ0VOVCk7XG42NjgwOlx0XHRpZiAoKGludClyZWFzb24gXHUwMDNjIDApIHtcbjY2ODE6XHRcdFx0cmVhc29uID0gLXJlYXNvbjtcbjY2ODI6XHRcdFx0Z290byBkaXNjYXJkO1xuNjY4MzpcdFx0fVxuNjY4NDpcdFx0dGNwX3Jjdl9ydHRfbWVhc3VyZV90cyhzaywgc2tiKTtcbjY2ODU6XHRcbjY2ODY6XHRcdC8qIFByb2Nlc3MgdXJnZW50IGRhdGEuICovXG42Njg3Olx0XHR0Y3BfdXJnKHNrLCBza2IsIHRoKTtcbjY2ODg6XHRcbjY2ODk6XHRcdC8qIHN0ZXAgNzogcHJvY2VzcyB0aGUgc2VnbWVudCB0ZXh0ICovXG42NjkwOlx0XHR0Y3BfZGF0YV9xdWV1ZShzaywgc2tiKTtcbjY2OTE6XHRcbjY2OTI6XHRcdHRjcF9kYXRhX3NuZF9jaGVjayhzayk7XG42NjkzOlx0XHR0Y3BfYWNrX3NuZF9jaGVjayhzayk7XG42Njk0Olx0XHRyZXR1cm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNjIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcsIGV4cHJlc3NlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgRGVlcGVyIGludG8gTmV0d29yayBWYWxpZGF0aW9uKioKCk9rYXksIHNvIHdlJiMzOTt2ZSBiZWVuIGV4YW1pbmluZyB0aGUgaW5jb21pbmcgbmV0d29yayB0cmFmZmljIHZhbGlkYXRpb24gcm91dGluZXMuIEl0JiMzOTtzIGNydWNpYWwsIGFuZCBJJiMzOTt2ZSBnb3QgYSBzcGVjaWZpYyBhcmVhIEkgd2FudCB0byBmb2N1cyBvbiBub3cuIExldCYjMzk7cyBzaGlmdCBvdXIgYXR0ZW50aW9uIHRvIHRoZSBgdGNwX3ZhbGlkYXRlX2luY29taW5nYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDY0OTAgaW4gdGhlIHJlbGV2YW50IGNvZGUuIFRoYXQmIzM5O3Mgd2hlcmUgSSBiZWxpZXZlIHdlIG1pZ2h0IGZpbmQgc29tZSBpbnRlcmVzdGluZyBudWFuY2VzIHRoYXQgd2FycmFudCBhIGRlZXBlciBsb29rLiBJJiMzOTttIHRoaW5raW5nIHRoZXJlIGNvdWxkIGJlIHNvbWUgc3VidGxlIHZ1bG5lcmFiaWxpdGllcyBvciBpbmVmZmljaWVuY2llcyBsdXJraW5nIHRoZXJlIHRoYXQgd2UgbmVlZCB0byBleHBvc2UuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2lucHV0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY0ODA6XHQgKlx0SXQgaXMgc3BsaXQgaW50byBhIGZhc3QgcGF0aCBhbmQgYSBzbG93IHBhdGguIFRoZSBmYXN0IHBhdGggaXNcbjY0ODE6XHQgKiBcdGRpc2FibGVkIHdoZW46XG42NDgyOlx0ICpcdC0gQSB6ZXJvIHdpbmRvdyB3YXMgYW5ub3VuY2VkIGZyb20gdXMgLSB6ZXJvIHdpbmRvdyBwcm9iaW5nXG42NDgzOlx0ICogICAgICAgIGlzIG9ubHkgaGFuZGxlZCBwcm9wZXJseSBpbiB0aGUgc2xvdyBwYXRoLlxuNjQ4NDpcdCAqXHQtIE91dCBvZiBvcmRlciBzZWdtZW50cyBhcnJpdmVkLlxuNjQ4NTpcdCAqXHQtIFVyZ2VudCBkYXRhIGlzIGV4cGVjdGVkLlxuNjQ4NjpcdCAqXHQtIFRoZXJlIGlzIG5vIGJ1ZmZlciBzcGFjZSBsZWZ0XG42NDg3Olx0ICpcdC0gVW5leHBlY3RlZCBUQ1AgZmxhZ3Mvd2luZG93IHZhbHVlcy9oZWFkZXIgbGVuZ3RocyBhcmUgcmVjZWl2ZWRcbjY0ODg6XHQgKlx0ICAoZGV0ZWN0ZWQgYnkgY2hlY2tpbmcgdGhlIFRDUCBoZWFkZXIgYWdhaW5zdCBwcmVkX2ZsYWdzKVxuNjQ4OTpcdCAqXHQtIERhdGEgaXMgc2VudCBpbiBib3RoIGRpcmVjdGlvbnMuIEZhc3QgcGF0aCBvbmx5IHN1cHBvcnRzIHB1cmUgc2VuZGVyc1xuNjQ5MDpcdCAqXHQgIG9yIHB1cmUgcmVjZWl2ZXJzICh0aGlzIG1lYW5zIGVpdGhlciB0aGUgc2VxdWVuY2UgbnVtYmVyIG9yIHRoZSBhY2tcbjY0OTE6XHQgKlx0ICB2YWx1ZSBtdXN0IHN0YXkgY29uc3RhbnQpXG42NDkyOlx0ICpcdC0gVW5leHBlY3RlZCBUQ1Agb3B0aW9uLlxuNjQ5MzpcdCAqXHQtIEFDSyBzZXF1ZW5jZSBudW1iZXIgaXMgb3V0c2lkZSBbU05ELlVOQSwgU05ELk5YVF0uXG42NDk0Olx0ICpcbjY0OTU6XHQgKlx0V2hlbiB0aGVzZSBjb25kaXRpb25zIGFyZSBub3Qgc2F0aXNmaWVkIGl0IGRyb3BzIGludG8gYSBzdGFuZGFyZFxuNjQ5NjpcdCAqXHRyZWNlaXZlIHByb2NlZHVyZSBwYXR0ZXJuZWQgYWZ0ZXIgUkZDNzkzIHRvIGhhbmRsZSBhbGwgY2FzZXMuXG42NDk3Olx0ICpcdFRoZSBmaXJzdCB0aHJlZSBjYXNlcyBhcmUgZ3VhcmFudGVlZCBieSBwcm9wZXIgcHJlZF9mbGFncyBzZXR0aW5nLFxuNjQ5ODpcdCAqXHR0aGUgcmVzdCBpcyBjaGVja2VkIGlubGluZS4gRmFzdCBwcm9jZXNzaW5nIGlzIHR1cm5lZCBvbiBpblxuNjQ5OTpcdCAqXHR0Y3BfZGF0YV9xdWV1ZSB3aGVuIGV2ZXJ5dGhpbmcgaXMgT0suXG42NTAwOlx0ICovXG42NTAxOlx0dm9pZCB0Y3BfcmN2X2VzdGFibGlzaGVkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjY1MDI6XHR7XG42NTAzOlx0XHRlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRDtcbjY1MDQ6XHRcdGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoID0gKGNvbnN0IHN0cnVjdCB0Y3BoZHIgKilza2ItXHUwMDNlZGF0YTtcbjY1MDU6XHRcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xuNjUwNjpcdFx0dW5zaWduZWQgaW50IGxlbiA9IHNrYi1cdTAwM2VsZW47XG42NTA3Olx0XG42NTA4Olx0XHQvKiBUQ1AgY29uZ2VzdGlvbiB3aW5kb3cgdHJhY2tpbmcgKi9cbjY1MDk6XHRcdHRyYWNlX3RjcF9wcm9iZShzaywgc2tiKTtcbjY1MTA6XHRcbjY1MTE6XHRcdHRjcF9tc3RhbXBfcmVmcmVzaF9pbmxpbmUodHApO1xuNjUxMjpcdFx0aWYgKHVubGlrZWx5KCFyY3VfYWNjZXNzX3BvaW50ZXIoc2stXHUwMDNlc2tfcnhfZHN0KSkpXG42NTEzOlx0XHRcdGluZXRfY3NrKHNrKS1cdTAwM2VpY3NrX2FmX29wcy1cdTAwM2Vza19yeF9kc3Rfc2V0KHNrLCBza2IpO1xuNjUxNDpcdFx0LypcbjY1MTU6XHRcdCAqXHRIZWFkZXIgcHJlZGljdGlvbi5cbjY1MTY6XHRcdCAqXHRUaGUgY29kZSBsb29zZWx5IGZvbGxvd3MgdGhlIG9uZSBpbiB0aGUgZmFtb3VzXG42NTE3Olx0XHQgKlx0XCYjMzQ7MzAgaW5zdHJ1Y3Rpb24gVENQIHJlY2VpdmVcJiMzNDsgVmFuIEphY29ic29uIG1haWwuXG42NTE4Olx0XHQgKlxuNjUxOTpcdFx0ICpcdFZhbiYjMzk7cyB0cmljayBpcyB0byBkZXBvc2l0IGJ1ZmZlcnMgaW50byBzb2NrZXQgcXVldWVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA5NgoJCQkJCQkJb3V0cHV0OiAxOTUKCQkJCQkJCXRob3VnaHRzOiA5NTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTWVtb3J5IFNhZmV0eSBBbmFseXNpcyBvZiBUQ1AgRmFzdCBQYXRoIENoYW5nZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBjaGFuZ2UgZnJvbSBhIG1lbW9yeSBzYWZldHkgcGVyc3BlY3RpdmUuIFRoZSBjb3JlIG9mIGl0IHJlcGxhY2VzIHRoZSBwcmV2aW91cyBjaGVjayBmb3IgYGFja19zZXFgIGJlaW5nICphZnRlciogYHNuZF9ueHRgIHdpdGggYSBtb3JlIHByZWNpc2UgYGJldHdlZW5gIGNoZWNrIHRoYXQgY29uZmlybXMgYGFja19zZXFgIGZhbGxzIHdpdGhpbiB0aGUgcmFuZ2UgYFtzbmRfdW5hLCBzbmRfbnh0XWAuIFRoZSBgYmV0d2VlbmAgbWFjcm8sIGRlZmluZWQgaW4gYG5ldC90Y3AuaGAsIGNsZXZlcmx5IHVzZXMgdW5zaWduZWQgaW50ZWdlciBhcml0aG1ldGljIHRvIGVmZmljaWVudGx5IGRldGVybWluZSBpZiBgYWNrX3NlcWAgaXMgd2l0aGluIHRoaXMgcmFuZ2UuCgpUaGUgY3JpdGljYWwgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgbWVtb3J5IHNhZmV0eSB2dWxuZXJhYmlsaXRpZXMuIEFyZSB3ZSBsb29raW5nIGF0IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcz8gSXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgdGhlIGFuc3dlciBpcyBuby4gYGFja19zZXFgLCBgc25kX3VuYWAsIGFuZCBgc25kX254dGAgYXJlIGFsbCBlc3RhYmxpc2hlZCwgaW5pdGlhbGl6ZWQgc2VxdWVuY2UgbnVtYmVycywgc28gd2UgYXJlbiYjMzk7dCBpbnRyb2R1Y2luZyBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGlzIGNoZWNrIGFsc28gZG9lc24mIzM5O3QgaW52b2x2ZSBhbnkgY29weWluZyB0byB1c2Vyc3BhY2Ugb3IgYWx0ZXJhdGlvbiBvZiBidWZmZXIgbGVuZ3RocyB0aGF0IG1pZ2h0IGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEuIENyaXRpY2FsbHksIHBhY2tldHMgd2l0aCAmIzM0O29sZCYjMzQ7IEFDS3MgYXJlIHNpbXBseSBkaXZlcnRlZCB0byB0aGUgZXhpc3Rpbmcgc2xvdyBwYXRoIGZvciBzdGFuZGFyZCBwcm9jZXNzaW5nLCB3aGljaCBpcyBhbHJlYWR5IGRlc2lnbmVkIHRvIGhhbmRsZSB0aGVzZSBjYXNlcyBzYWZlbHkuIE5vIG5ldyBhbGxvY2F0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBzdHJ1Y3QgcGFkZGluZyBhcmUgaW50cm9kdWNlZC4KCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIHRoZSBLTVNBTiB2cy4gS0FTQU4gaW1wbGljYXRpb25zLiBSZW1lbWJlciwgS01TQU4gaXMgZm9yIGNhdGNoaW5nICp1bmluaXRpYWxpemVkKiBtZW1vcnkgcmVhZHMsIHdoaWxlIEtBU0FOIGFuZCBvdGhlciBzdGFuZGFyZCBkZWJ1Z2dlcnMgaGFuZGxlIGlzc3VlcyBsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBhbmQgbG9jay1yZWxhdGVkIGJ1Z3MuIEtNU0FOIGlzIHJlc291cmNlLWludGVuc2l2ZSwgc28gd2Ugb25seSB1c2UgaXQgd2hlbiAqdW5pbml0aWFsaXplZCBtZW1vcnkqIHJpc2tzIGFyZSBzcGVjaWZpY2FsbHkgaW50cm9kdWNlZCBvciBleHBvc2VkLgoKTG9va2luZyBhdCB0aGUgS01TQU4gY3JpdGVyaWEsIHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgdHJpZ2dlciBhbnkgb2YgdGhlbTogSXQmIzM5O3Mgbm90IGludm9sdmluZyBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSwgY29uZGl0aW9uYWwgbG9naWMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBkYXRhLCBhbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMsIG9yIGFsdGVyaW5nIGJvdW5kcyBjaGVja3MgaW4gYSB3YXkgdGhhdCBhbGxvd3MgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgYXJlIGZ1bGx5IGluaXRpYWxpemVkLgoKVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgY2hhbmdlIHByaW1hcmlseSB0aWdodGVucyB0aGUgZmFzdCBwYXRoIGNvbmRpdGlvbiB0byBlbnN1cmUgdGhhdCB0aGUgQUNLcyBiZWluZyBwcm9jZXNzZWQgYXJlIHdpdGhpbiBhIHZhbGlkIHNlcXVlbmNlIG51bWJlciByYW5nZSAoYXMgcGVyIFJGQyA1OTYxKSwgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcywgYE5lZWRzS01TQU5gIGlzIGRlZmluaXRpdmVseSBgZmFsc2VgLiBUaGUgcGF0Y2ggc2ltcGx5IHJlcm91dGVzIG9sZGVyIEFDS3MgdG8gYW4gZXhpc3Rpbmcgc2FmZSBzbG93IHBhdGguCgpTbywgSSYjMzk7bSBjYWxsaW5nIGBzZXQtcmVzdWx0c2Agd2l0aCBgTmVlZHNLTVNBTjogZmFsc2VgIGFuZCBwcm92aWRpbmcgYSBjbGVhciBleHBsYW5hdGlvbiBvZiB0aGlzIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0Y3BfcmN2X2VzdGFibGlzaGVkKCkgdG8gcmVxdWlyZSB0aGUgaW5jb21pbmcgQUNLIHNlcXVlbmNlIG51bWJlciB0byBiZSB3aXRoaW4gW1NORC5VTkEsIFNORC5OWFRdIHZpYSBiZXR3ZWVuKFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VhY2tfc2VxLCB0cC1cdTAwM2VzbmRfdW5hLCB0cC1cdTAwM2VzbmRfbnh0KSBiZWZvcmUgdGFraW5nIHRoZSBUQ1AgZmFzdCBwYXRoLCBkaXZlcnRpbmcgcGFja2V0cyB3aXRoIG9sZCBBQ0tzIHRvIHRoZSBzbG93IHBhdGggZm9yIHByb3BlciBSRkMgNTk2MSB2YWxpZGF0aW9uLlxuXG5BbGwgdmFyaWFibGVzIGludm9sdmVkIChUQ1BfU0tCX0NCKHNrYiktXHUwMDNlYWNrX3NlcSwgdHAtXHUwMDNlc25kX3VuYSwgdHAtXHUwMDNlc25kX254dCkgYXJlIGluaXRpYWxpemVkIHUzMiB2YWx1ZXMuIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBtZW1vcnksIGFsdGVyIGJ1ZmZlciBzaXplcywgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0Y3BfcmN2X2VzdGFibGlzaGVkKCkgdG8gcmVxdWlyZSB0aGUgaW5jb21pbmcgQUNLIHNlcXVlbmNlIG51bWJlciB0byBiZSB3aXRoaW4gW1NORC5VTkEsIFNORC5OWFRdIHZpYSBiZXR3ZWVuKFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VhY2tfc2VxLCB0cC1cdTAwM2VzbmRfdW5hLCB0cC1cdTAwM2VzbmRfbnh0KSBiZWZvcmUgdGFraW5nIHRoZSBUQ1AgZmFzdCBwYXRoLCBkaXZlcnRpbmcgcGFja2V0cyB3aXRoIG9sZCBBQ0tzIHRvIHRoZSBzbG93IHBhdGggZm9yIHByb3BlciBSRkMgNTk2MSB2YWxpZGF0aW9uLlxuXG5BbGwgdmFyaWFibGVzIGludm9sdmVkIChUQ1BfU0tCX0NCKHNrYiktXHUwMDNlYWNrX3NlcSwgdHAtXHUwMDNlc25kX3VuYSwgdHAtXHUwMDNlc25kX254dCkgYXJlIGluaXRpYWxpemVkIHUzMiB2YWx1ZXMuIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBtZW1vcnksIGFsdGVyIGJ1ZmZlciBzaXplcywgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjEyOjUwLjE3MDc1NzMxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5OTQ0MDQ3OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3BfcmN2X2VzdGFibGlzaGVkXCIsXG4gICAgXCJ0Y3BfdmFsaWRhdGVfaW5jb21pbmdcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRjcF9yY3ZfZXN0YWJsaXNoZWQoKSB0byByZXF1aXJlIHRoZSBpbmNvbWluZyBBQ0sgc2VxdWVuY2UgbnVtYmVyIHRvIGJlIHdpdGhpbiBbU05ELlVOQSwgU05ELk5YVF0gdmlhIGJldHdlZW4oVENQX1NLQl9DQihza2IpLVxcdTAwM2VhY2tfc2VxLCB0cC1cXHUwMDNlc25kX3VuYSwgdHAtXFx1MDAzZXNuZF9ueHQpIGJlZm9yZSB0YWtpbmcgdGhlIFRDUCBmYXN0IHBhdGgsIGRpdmVydGluZyBwYWNrZXRzIHdpdGggb2xkIEFDS3MgdG8gdGhlIHNsb3cgcGF0aCBmb3IgcHJvcGVyIFJGQyA1OTYxIHZhbGlkYXRpb24uXFxuXFxuQWxsIHZhcmlhYmxlcyBpbnZvbHZlZCAoVENQX1NLQl9DQihza2IpLVxcdTAwM2VhY2tfc2VxLCB0cC1cXHUwMDNlc25kX3VuYSwgdHAtXFx1MDAzZXNuZF9ueHQpIGFyZSBpbml0aWFsaXplZCB1MzIgdmFsdWVzLiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgbWVtb3J5LCBhbHRlciBidWZmZXIgc2l6ZXMsIGNvcHkga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsdGVycyB0aGUgZmFzdC1wYXRoIGhlYWRlciBwcmVkaWN0aW9uIGNvbmRpdGlvbiBpbiB0Y3BfcmN2X2VzdGFibGlzaGVkKCkgdG8gcmVxdWlyZSB0aGUgQUNLIHNlcXVlbmNlIG51bWJlciB0byBmYWxsIGJldHdlZW4gU05ELlVOQSBhbmQgU05ELk5YVC4gU2VnbWVudHMgd2l0aCBvbGQgQUNLcyBhcmUgbm93IHJlZGlyZWN0ZWQgdG8gdGhlIHNsb3cgcGF0aCAodGNwX3ZhbGlkYXRlX2luY29taW5nKCkpIHRvIHByZXZlbnQgUkZDIDU5NjEgYmxpbmQgZGF0YSBpbmplY3Rpb24uIFRoaXMgYWx0ZXJzIGNvcmUgVENQIHJlY2VpdmUgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgVENQIHNvY2tldCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDoxMjo1MC4xNzA3NjM4NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3MDE4NjQ0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGIzMTk4MzNhMGYwNTMzZGI3ZjhkNjhhMjI2MDIwZGUyOTA3YzVlNmFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgMTQgMTA6MTI6NDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lucHV0LmMgYi9uZXQvaXB2NC90Y3BfaW5wdXQuY1xcbmluZGV4IGRhZmY5M2Q1MTM0MjguLjAzZDMxN2E1ODEzMjQgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvdGNwX2lucHV0LmNcXG4rKysgYi9uZXQvaXB2NC90Y3BfaW5wdXQuY1xcbkBAIC02NDkwLDYgKzY0OTAsNyBAQCBzdGF0aWMgYm9vbCB0Y3BfdmFsaWRhdGVfaW5jb21pbmcoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAgKlxcdCAgb3IgcHVyZSByZWNlaXZlcnMgKHRoaXMgbWVhbnMgZWl0aGVyIHRoZSBzZXF1ZW5jZSBudW1iZXIgb3IgdGhlIGFja1xcbiAgKlxcdCAgdmFsdWUgbXVzdCBzdGF5IGNvbnN0YW50KVxcbiAgKlxcdC0gVW5leHBlY3RlZCBUQ1Agb3B0aW9uLlxcbisgKlxcdC0gQUNLIHNlcXVlbmNlIG51bWJlciBpcyBvdXRzaWRlIFtTTkQuVU5BLCBTTkQuTlhUXS5cXG4gICpcXG4gICpcXHRXaGVuIHRoZXNlIGNvbmRpdGlvbnMgYXJlIG5vdCBzYXRpc2ZpZWQgaXQgZHJvcHMgaW50byBhIHN0YW5kYXJkXFxuICAqXFx0cmVjZWl2ZSBwcm9jZWR1cmUgcGF0dGVybmVkIGFmdGVyIFJGQzc5MyB0byBoYW5kbGUgYWxsIGNhc2VzLlxcbkBAIC02NTM5LDcgKzY1NDAsNyBAQCB2b2lkIHRjcF9yY3ZfZXN0YWJsaXNoZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXG4gXFx0aWYgKCh0Y3BfZmxhZ193b3JkKHRoKSBcXHUwMDI2IFRDUF9IUF9CSVRTKSA9PSB0cC1cXHUwMDNlcHJlZF9mbGFncyBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgVENQX1NLQl9DQihza2IpLVxcdTAwM2VzZXEgPT0gdHAtXFx1MDAzZXJjdl9ueHQgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgICFhZnRlcihUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZWFja19zZXEsIHRwLVxcdTAwM2VzbmRfbnh0KSkge1xcbitcXHQgICAgYmV0d2VlbihUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZWFja19zZXEsIHRwLVxcdTAwM2VzbmRfdW5hLCB0cC1cXHUwMDNlc25kX254dCkpIHtcXG4gXFx0XFx0aW50IHRjcF9oZWFkZXJfbGVuID0gdHAtXFx1MDAzZXRjcF9oZWFkZXJfbGVuO1xcbiBcXHRcXHRzMzIgZGVsdGEgPSAwO1xcbiBcXHRcXHRpbnQgZmxhZyA9IDA7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3BfcmZjNTk2MV9yZWplY3Qtb2xkLWFjay5wa3QgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX3JmYzU5NjFfcmVqZWN0LW9sZC1hY2sucGt0XFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4zMmRkOWRlMWQzNjYyXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3BfcmZjNTk2MV9yZWplY3Qtb2xkLWFjay5wa3RcXG5AQCAtMCwwICsxLDI5IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbitgLi9kZWZhdWx0cy5zaFxcbitzeXNjdGwgLXEgbmV0LmlwdjQudGNwX2ludmFsaWRfcmF0ZWxpbWl0PTBcXG4rYFxcbitcXG4rLy8gVGVzdCByZWplY3Rpb24gb2YgZGF0YSBzZWdtZW50cyBjYXJyeWluZyBleGNlc3NpdmVseSBvbGQgQUNLc1xcbitcXG4rMCBzb2NrZXQoLi4uLCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApID0gM1xcbisrMCBzZXRzb2Nrb3B0KDMsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgWzFdLCA0KSA9IDBcXG4rKzAgYmluZCgzLCAuLi4sIC4uLikgPSAwXFxuKyswIGxpc3RlbigzLCAxMDI0KSA9IDBcXG4rXFxuKy8vIC0tLS0tLS0tLS0tLS0tLS0gSGFuZHNoYWtlIC0tLS0tLS0tLS0tLS0tLS0tLS0gLy9cXG4rKzAgXFx1MDAzYyBTIDA6MCgwKSB3aW4gNjU1MzVcXG4rKzAgXFx1MDAzZSBTLiAwOjAoMCkgYWNrIDEgXFx1MDAzYy4uLlxcdTAwM2VcXG4rKzAgXFx1MDAzYyAuIDE6MSgwKSBhY2sgMSB3aW4gNjU1MzVcXG4rKzAgYWNjZXB0KDMsIC4uLiwgLi4uKSA9IDRcXG4rXFxuKy8vIFBvcHVsYXRlIHJlY2VpdmUgbWVtb3J5IHNvIHRoZSBmb2xsb3dpbmcgc2VnbWVudCBjYW4gdXNlXFxuKy8vIGhlYWRlciBwcmVkaWN0aW9uLlxcbisrMCBcXHUwMDNjIFAuIDE6NTAxKDUwMCkgYWNrIDEgd2luIDY1NTM1XFxuKyswIFxcdTAwM2UgLiAxOjEoMCkgYWNrIDUwMVxcbitcXG4rLy8gU2VuZCBhbiBpbi1zZXF1ZW5jZSBkYXRhIHNlZ21lbnQgY2FycnlpbmcgYW4gZXhjZXNzaXZlbHkgb2xkIEFDSy5cXG4rKzAgXFx1MDAzYyBQLiA1MDE6MTUwMSgxMDAwKSBhY2sgMjc5NDk2NzM5NyB3aW4gNjU1MzVcXG4rXFxuKy8vIENoYWxsZW5nZSBBQ0s7IFJDVi5OWFQgbXVzdCByZW1haW4gNTAxLlxcbisrMCBcXHUwMDNlIC4gMToxKDApIGFjayA1MDFcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6MTI6NTEuNjQxNjI0MjUzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo5NjE1MzcyMDIxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX3Jjdl9lc3RhYmxpc2hlZFwiLFxuICAgIFwidGNwX3ZhbGlkYXRlX2luY29taW5nXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWx0ZXJzIHRoZSBmYXN0LXBhdGggaGVhZGVyIHByZWRpY3Rpb24gY29uZGl0aW9uIGluIHRjcF9yY3ZfZXN0YWJsaXNoZWQoKSB0byByZXF1aXJlIHRoZSBBQ0sgc2VxdWVuY2UgbnVtYmVyIHRvIGZhbGwgYmV0d2VlbiBTTkQuVU5BIGFuZCBTTkQuTlhULiBTZWdtZW50cyB3aXRoIG9sZCBBQ0tzIGFyZSBub3cgcmVkaXJlY3RlZCB0byB0aGUgc2xvdyBwYXRoICh0Y3BfdmFsaWRhdGVfaW5jb21pbmcoKSkgdG8gcHJldmVudCBSRkMgNTk2MSBibGluZCBkYXRhIGluamVjdGlvbi4gVGhpcyBhbHRlcnMgY29yZSBUQ1AgcmVjZWl2ZSBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBUQ1Agc29ja2V0IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjMxOTgzM2EwZjA1MzNkYjdmOGQ2OGEyMjYwMjBkZTI5MDdjNWU2YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDE0IDEwOjEyOjQ4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lucHV0LmMgYi9uZXQvaXB2NC90Y3BfaW5wdXQuY1xuaW5kZXggZGFmZjkzZDUxMzQyOC4uMDNkMzE3YTU4MTMyNCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9pbnB1dC5jXG4rKysgYi9uZXQvaXB2NC90Y3BfaW5wdXQuY1xuQEAgLTY0OTAsNiArNjQ5MCw3IEBAIHN0YXRpYyBib29sIHRjcF92YWxpZGF0ZV9pbmNvbWluZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gICpcdCAgb3IgcHVyZSByZWNlaXZlcnMgKHRoaXMgbWVhbnMgZWl0aGVyIHRoZSBzZXF1ZW5jZSBudW1iZXIgb3IgdGhlIGFja1xuICAqXHQgIHZhbHVlIG11c3Qgc3RheSBjb25zdGFudClcbiAgKlx0LSBVbmV4cGVjdGVkIFRDUCBvcHRpb24uXG4rICpcdC0gQUNLIHNlcXVlbmNlIG51bWJlciBpcyBvdXRzaWRlIFtTTkQuVU5BLCBTTkQuTlhUXS5cbiAgKlxuICAqXHRXaGVuIHRoZXNlIGNvbmRpdGlvbnMgYXJlIG5vdCBzYXRpc2ZpZWQgaXQgZHJvcHMgaW50byBhIHN0YW5kYXJkXG4gICpcdHJlY2VpdmUgcHJvY2VkdXJlIHBhdHRlcm5lZCBhZnRlciBSRkM3OTMgdG8gaGFuZGxlIGFsbCBjYXNlcy5cbkBAIC02NTM5LDcgKzY1NDAsNyBAQCB2b2lkIHRjcF9yY3ZfZXN0YWJsaXNoZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0aWYgKCh0Y3BfZmxhZ193b3JkKHRoKSBcdTAwMjYgVENQX0hQX0JJVFMpID09IHRwLVx1MDAzZXByZWRfZmxhZ3MgXHUwMDI2XHUwMDI2XG4gXHQgICAgVENQX1NLQl9DQihza2IpLVx1MDAzZXNlcSA9PSB0cC1cdTAwM2VyY3Zfbnh0IFx1MDAyNlx1MDAyNlxuLVx0ICAgICFhZnRlcihUQ1BfU0tCX0NCKHNrYiktXHUwMDNlYWNrX3NlcSwgdHAtXHUwMDNlc25kX254dCkpIHtcbitcdCAgICBiZXR3ZWVuKFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VhY2tfc2VxLCB0cC1cdTAwM2VzbmRfdW5hLCB0cC1cdTAwM2VzbmRfbnh0KSkge1xuIFx0XHRpbnQgdGNwX2hlYWRlcl9sZW4gPSB0cC1cdTAwM2V0Y3BfaGVhZGVyX2xlbjtcbiBcdFx0czMyIGRlbHRhID0gMDtcbiBcdFx0aW50IGZsYWcgPSAwO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3BfcmZjNTk2MV9yZWplY3Qtb2xkLWFjay5wa3QgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX3JmYzU5NjFfcmVqZWN0LW9sZC1hY2sucGt0XG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMzJkZDlkZTFkMzY2MlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3BhY2tldGRyaWxsL3RjcF9yZmM1OTYxX3JlamVjdC1vbGQtYWNrLnBrdFxuQEAgLTAsMCArMSwyOSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rYC4vZGVmYXVsdHMuc2hcbitzeXNjdGwgLXEgbmV0LmlwdjQudGNwX2ludmFsaWRfcmF0ZWxpbWl0PTBcbitgXG4rXG4rLy8gVGVzdCByZWplY3Rpb24gb2YgZGF0YSBzZWdtZW50cyBjYXJyeWluZyBleGNlc3NpdmVseSBvbGQgQUNLc1xuK1xuKzAgc29ja2V0KC4uLiwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQKSA9IDNcbisrMCBzZXRzb2Nrb3B0KDMsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgWzFdLCA0KSA9IDBcbisrMCBiaW5kKDMsIC4uLiwgLi4uKSA9IDBcbisrMCBsaXN0ZW4oMywgMTAyNCkgPSAwXG4rXG4rLy8gLS0tLS0tLS0tLS0tLS0tLSBIYW5kc2hha2UgLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuKyswIFx1MDAzYyBTIDA6MCgwKSB3aW4gNjU1MzVcbisrMCBcdTAwM2UgUy4gMDowKDApIGFjayAxIFx1MDAzYy4uLlx1MDAzZVxuKyswIFx1MDAzYyAuIDE6MSgwKSBhY2sgMSB3aW4gNjU1MzVcbisrMCBhY2NlcHQoMywgLi4uLCAuLi4pID0gNFxuK1xuKy8vIFBvcHVsYXRlIHJlY2VpdmUgbWVtb3J5IHNvIHRoZSBmb2xsb3dpbmcgc2VnbWVudCBjYW4gdXNlXG4rLy8gaGVhZGVyIHByZWRpY3Rpb24uXG4rKzAgXHUwMDNjIFAuIDE6NTAxKDUwMCkgYWNrIDEgd2luIDY1NTM1XG4rKzAgXHUwMDNlIC4gMToxKDApIGFjayA1MDFcbitcbisvLyBTZW5kIGFuIGluLXNlcXVlbmNlIGRhdGEgc2VnbWVudCBjYXJyeWluZyBhbiBleGNlc3NpdmVseSBvbGQgQUNLLlxuKyswIFx1MDAzYyBQLiA1MDE6MTUwMSgxMDAwKSBhY2sgMjc5NDk2NzM5NyB3aW4gNjU1MzVcbitcbisvLyBDaGFsbGVuZ2UgQUNLOyBSQ1YuTlhUIG11c3QgcmVtYWluIDUwMS5cbisrMCBcdTAwM2UgLiAxOjEoMCkgYWNrIDUwMVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6MTI6NTEuNjQxNjI2MTEzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTA4OTc2NDg2ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVENQIElucHV0IFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHdlIGhhdmUgYSBwYXRjaCB0aGF0J3Mgc3VidGx5IGFsdGVyaW5nIHRoZSBBQ0sgcHJvY2Vzc2luZyBsb2dpYyB3aXRoaW4gYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIGluIHRoZSBgbmV0L2lwdjRgIGRpcmVjdG9yeSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgdGNwX2lucHV0LmNgLiBMb29raW5nIGF0IHRoZSBkaWZmLCBpdCBsb29rcyBsaWtlIGEgY2hhbmdlIHRvIGhvdyBBQ0sgc2VxdWVuY2VzIGFyZSBldmFsdWF0ZWQgaXMgYmVpbmcgbWFkZS4gSXQncyB0aWdodGVuaW5nIHRoZSBjb25kaXRpb25zIGZvciB3aGVuIGFuIEFDSyBpcyBhY2NlcHRlZCwgdXNpbmcgYGJldHdlZW5gIGluc3RlYWQgb2YgYSBwb3RlbnRpYWxseSBsZXNzIHByZWNpc2UgYCFhZnRlcmAgY2hlY2suIFRoZSBjb2RlIHNuaXBwZXQgSSBzZWUgc2hvd3MgdGhhdCB0aGUgY2hlY2sgYCFhZnRlcihUQ1BfU0tCX0NCKHNrYiktXHUwMDNlYWNrX3NlcSwgdHAtXHUwMDNlc25kX254dClgIGlzIGJlaW5nIHJlcGxhY2VkIHdpdGggYGJldHdlZW4oVENQX1NLQl9DQihza2IpLVx1MDAzZWFja19zZXEsIHRwLVx1MDAzZXNuZF91bmEsIHRwLVx1MDAzZXNuZF9ueHQpYC4gSXQgbG9va3MgbGlrZSBpdCBpcyByZWxhdGVkIHRvIGhhbmRsaW5nIG9mIG9sZCBhY2tub3dsZWRnZW1lbnRzLlxuXG5JdCdzIGltbWVkaWF0ZWx5IGNsZWFyIHRoaXMgcmVsYXRlcyB0byBhbiBpc3N1ZSB0aGF0IHByb2JhYmx5IGludm9sdmVzIHJlb3JkZXJpbmcgb3IgZGVsYXllZCBBQ0tzLCBvciBtYXliZSBldmVuIHByb3RlY3Rpb24gYWdhaW5zdCBBQ0sgYXR0YWNrcy4gQW5kIHRoZSBpbmNsdXNpb24gb2YgYSBwYWNrZXRkcmlsbCB0ZXN0LCBgdGNwX3JmYzU5NjFfcmVqZWN0LW9sZC1hY2sucGt0YCwgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBzcGVjaWZpYyBzY2VuYXJpbyBkZWZpbmVkIGluIFJGQyA1OTYxIHJlbGF0ZWQgdG8gcmVqZWN0aW5nIG9sZCBBQ0tzLiBJJ20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIG9sZCBiZWhhdmlvciB3YXMgdG8gc2VlIHdoYXQgdGhlIHZ1bG5lcmFiaWxpdHkgY291bGQgaGF2ZSBiZWVuLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBmdW5jdGlvbiBtb3JlIGRlZXBseSB0byBncmFzcCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMuIEkgd2lsbCB1c2UgdGhlIGByZWFkLWZpbGVgIGNvbW1hbmQgdG8gbG9hZCB0aGUgY29kZS4gSSBhbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIGBhY2tfc2VxYCBpbnRlcmFjdHMgd2l0aCBgc25kX3VuYWAgYW5kIGBzbmRfbnh0YCBpbiBub3JtYWwgb3BlcmF0aW9uLiBJJ20gYWxzbyBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0IG9mIHRoaXMgY2hhbmdlLCBhbmQgd2hhdCBsZWQgdG8gdGhpcyBwYXJ0aWN1bGFyIGxpbmUgYmVpbmcgdXBkYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU5OCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjEzOjAyLjUzOTI4MTI1NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMDgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3BfaW5wdXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NTMwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2NTMwOlxcdFxcdHRwLVxcdTAwM2VyeF9vcHQuYWNjZWNuID0gMDtcXG42NTMxOlxcdFxcbjY1MzI6XFx0XFx0LypcXHRwcmVkX2ZsYWdzIGlzIDB4Uz8xMCBcXHUwMDNjXFx1MDAzYyAxNiArIHNuZF93bmRcXG42NTMzOlxcdFxcdCAqXFx0aWYgaGVhZGVyX3ByZWRpY3Rpb24gaXMgdG8gYmUgbWFkZVxcbjY1MzQ6XFx0XFx0ICpcXHQnUycgd2lsbCBhbHdheXMgYmUgdHAtXFx1MDAzZXRjcF9oZWFkZXJfbGVuIFxcdTAwM2VcXHUwMDNlIDJcXG42NTM1OlxcdFxcdCAqXFx0Jz8nIHdpbGwgYmUgMCBmb3IgdGhlIGZhc3QgcGF0aCwgb3RoZXJ3aXNlIHByZWRfZmxhZ3MgaXMgMCB0b1xcbjY1MzY6XFx0XFx0ICogIHR1cm4gaXQgb2ZmXFx0KHdoZW4gdGhlcmUgYXJlIGhvbGVzIGluIHRoZSByZWNlaXZlXFxuNjUzNzpcXHRcXHQgKlxcdCBzcGFjZSBmb3IgaW5zdGFuY2UpXFxuNjUzODpcXHRcXHQgKlxcdFBTSCBmbGFnIGlzIGlnbm9yZWQuXFxuNjUzOTpcXHRcXHQgKi9cXG42NTQwOlxcdFxcbjY1NDE6XFx0XFx0aWYgKCh0Y3BfZmxhZ193b3JkKHRoKSBcXHUwMDI2IFRDUF9IUF9CSVRTKSA9PSB0cC1cXHUwMDNlcHJlZF9mbGFncyBcXHUwMDI2XFx1MDAyNlxcbjY1NDI6XFx0XFx0ICAgIFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNlc2VxID09IHRwLVxcdTAwM2VyY3Zfbnh0IFxcdTAwMjZcXHUwMDI2XFxuNjU0MzpcXHRcXHQgICAgYmV0d2VlbihUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZWFja19zZXEsIHRwLVxcdTAwM2VzbmRfdW5hLCB0cC1cXHUwMDNlc25kX254dCkpIHtcXG42NTQ0OlxcdFxcdFxcdGludCB0Y3BfaGVhZGVyX2xlbiA9IHRwLVxcdTAwM2V0Y3BfaGVhZGVyX2xlbjtcXG42NTQ1OlxcdFxcdFxcdHMzMiBkZWx0YSA9IDA7XFxuNjU0NjpcXHRcXHRcXHRpbnQgZmxhZyA9IDA7XFxuNjU0NzpcXHRcXG42NTQ4OlxcdFxcdFxcdC8qIFRpbWVzdGFtcCBoZWFkZXIgcHJlZGljdGlvbjogdGNwX2hlYWRlcl9sZW5cXG42NTQ5OlxcdFxcdFxcdCAqIGlzIGF1dG9tYXRpY2FsbHkgZXF1YWwgdG8gdGgtXFx1MDAzZWRvZmYqNCBkdWUgdG8gcHJlZF9mbGFnc1xcbjY1NTA6XFx0XFx0XFx0ICogbWF0Y2guXFxuNjU1MTpcXHRcXHRcXHQgKi9cXG42NTUyOlxcdFxcbjY1NTM6XFx0XFx0XFx0LyogQ2hlY2sgdGltZXN0YW1wICovXFxuNjU1NDpcXHRcXHRcXHRpZiAodGNwX2hlYWRlcl9sZW4gPT0gc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpICsgVENQT0xFTl9UU1RBTVBfQUxJR05FRCkge1xcbjY1NTU6XFx0XFx0XFx0XFx0LyogTm8/IFNsb3cgcGF0aCEgKi9cXG42NTU2OlxcdFxcdFxcdFxcdGlmICghdGNwX3BhcnNlX2FsaWduZWRfdGltZXN0YW1wKHRwLCB0aCkpXFxuNjU1NzpcXHRcXHRcXHRcXHRcXHRnb3RvIHNsb3dfcGF0aDtcXG42NTU4OlxcdFxcbjY1NTk6XFx0XFx0XFx0XFx0ZGVsdGEgPSB0cC1cXHUwMDNlcnhfb3B0LnJjdl90c3ZhbCAtXFxuNjU2MDpcXHRcXHRcXHRcXHRcXHR0cC1cXHUwMDNlcnhfb3B0LnRzX3JlY2VudDtcXG42NTYxOlxcdFxcdFxcdFxcdC8qIElmIFBBV1MgZmFpbGVkLCBjaGVjayBpdCBtb3JlIGNhcmVmdWxseSBpbiBzbG93IHBhdGggKi9cXG42NTYyOlxcdFxcdFxcdFxcdGlmIChkZWx0YSBcXHUwMDNjIDApXFxuNjU2MzpcXHRcXHRcXHRcXHRcXHRnb3RvIHNsb3dfcGF0aDtcXG42NTY0OlxcdFxcbjY1NjU6XFx0XFx0XFx0XFx0LyogRE8gTk9UIHVwZGF0ZSB0c19yZWNlbnQgaGVyZSwgaWYgY2hlY2tzdW0gZmFpbHNcXG42NTY2OlxcdFxcdFxcdFxcdCAqIGFuZCB0aW1lc3RhbXAgd2FzIGNvcnJ1cHRlZCBwYXJ0LCBpdCB3aWxsIHJlc3VsdFxcbjY1Njc6XFx0XFx0XFx0XFx0ICogaW4gYSBodW5nIGNvbm5lY3Rpb24gc2luY2Ugd2Ugd2lsbCBkcm9wIGFsbFxcbjY1Njg6XFx0XFx0XFx0XFx0ICogZnV0dXJlIHBhY2tldHMgZHVlIHRvIHRoZSBQQVdTIHRlc3QuXFxuNjU2OTpcXHRcXHRcXHRcXHQgKi9cXG42NTcwOlxcdFxcdFxcdH1cXG42NTcxOlxcdFxcbjY1NzI6XFx0XFx0XFx0aWYgKGxlbiBcXHUwMDNjPSB0Y3BfaGVhZGVyX2xlbikge1xcbjY1NzM6XFx0XFx0XFx0XFx0LyogQnVsayBkYXRhIHRyYW5zZmVyOiBzZW5kZXIgKi9cXG42NTc0OlxcdFxcdFxcdFxcdGlmIChsZW4gPT0gdGNwX2hlYWRlcl9sZW4pIHtcXG42NTc1OlxcdFxcdFxcdFxcdFxcdC8qIFByZWRpY3RlZCBwYWNrZXQgaXMgaW4gd2luZG93IGJ5IGRlZmluaXRpb24uXFxuNjU3NjpcXHRcXHRcXHRcXHRcXHQgKiBzZXEgPT0gcmN2X254dCBhbmQgcmN2X3d1cCBcXHUwMDNjPSByY3Zfbnh0LlxcbjY1Nzc6XFx0XFx0XFx0XFx0XFx0ICogSGVuY2UsIGNoZWNrIHNlcVxcdTAwM2M9cmN2X3d1cCByZWR1Y2VzIHRvOlxcbjY1Nzg6XFx0XFx0XFx0XFx0XFx0ICovXFxuNjU3OTpcXHRcXHRcXHRcXHRcXHRpZiAodGNwX2hlYWRlcl9sZW4gPT1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6MTM6MDIuNTM5Njk0MDE0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTIyNzUzNjc4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBUQ1AgSGVhZGVyIFByZWRpY3Rpb24gQ2hhbmdlIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBjaGFuZ2UgaW4gYHRjcF9yY3ZfZXN0YWJsaXNoZWRgLiBJdCBzZWVtcyB0aGV5J3ZlIHRpZ2h0ZW5lZCB1cCB0aGUgaGVhZGVyIHByZWRpY3Rpb24gbG9naWMsIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyB0aGUgYGFja19zZXFgLiBQcmV2aW91c2x5LCBpZiBgYWNrX3NlcWAgd2FzICpiZWZvcmUqIGB0cC1cdTAwM2VzbmRfdW5hYCwgaXQgY291bGQgc3RpbGwgdGFrZSB0aGUgZmFzdCBwYXRoLiBOb3csIGl0J3MgZXhwbGljaXRseSBleGNsdWRlZCBmcm9tIHRoZSBmYXN0IHBhdGgsIGZvcmNpbmcgaXQgZG93biB0aGUgc2xvdyBwYXRoIGlmIGBhY2tfc2VxYCBpcyBvdXRzaWRlIGBbU05ELlVOQSwgU05ELk5YVF1gLiBUaGUgY29tbWVudCBtZW50aW9ucyBSRkMgNTk2MSBhbmQgXCJibGluZCBkYXRhIGluamVjdGlvbiBvciBvbGQgQUNLc1wiLiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZSDigJMgd2UncmUgdGFsa2luZyBhYm91dCBwb3RlbnRpYWxseSBoYW5kbGluZyBvdXQtb2Ytb3JkZXIgb3IgbWFsaWNpb3VzIEFDS3MuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogSXMgdGhpcyByZWFjaGFibGUgY29kZT8gT2YgY291cnNlISBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAgaXMgdGhlIGhlYXJ0IG9mIFRDUCBwYWNrZXQgcHJvY2Vzc2luZyBmb3IgZXN0YWJsaXNoZWQgY29ubmVjdGlvbnMuIFRoaXMgaXMgc3RhbmRhcmQgc3R1ZmYsIHNvIHRoYXQncyBhIGRlZmluaXRlIFwieWVzLlwiXG5cbk5leHQsIGxldCdzIHNlZSBpZiBpdCdzIGZ1enphYmxlLiBUaGUgXCJXb3J0aEZ1enppbmdcIiBndWlkZWxpbmVzIGFyZSBteSBndWlkZSBoZXJlLiBSZWFjaGFiaWxpdHkgaXMgdGhlIHByaW1hcnkgZ2F0ZSwgYW5kIHRoaXMgY29kZSBkZWZpbml0ZWx5IGV4ZWN1dGVzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlbiwgY29yZSBzdWJzeXN0ZW1zIGxpa2UgbmV0d29ya2luZyBhcmUgcHJpbWUgdGFyZ2V0cywgc28gdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuXG5cbkFscmlnaHQsIHdoYXQgZnVuY3Rpb25zIHNob3VsZCBJIGZvY3VzIG9uPyBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAgaXMgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgdGhpcyBzaG91bGQgYmUgbXkgbWFpbiBlbnRyeXBvaW50LiBCdXQgYW0gSSB2aW9sYXRpbmcgdGhlIFwiQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTXCIgcnVsZT8gSSBuZWVkIHRvIGJlIGNhcmVmdWwgbm90IHRvIGRpbHV0ZSB0aGUgZnV6emluZyBlZmZvcnQuIElzIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBhIGdlbmVyaWMgZnVuY3Rpb24gY2FsbGVkIGJ5IGV2ZXJ5dGhpbmc/IE5vLCBpdCdzIHNwZWNpZmljIHRvIFRDUCBwYWNrZXQgcmVjZWl2ZS4gSXQncyBjYWxsZWQgd2hlbiBwYWNrZXRzIGFyZSByZWNlaXZlZCBvbiBlc3RhYmxpc2hlZCBUQ1Agc29ja2V0cywgc28gaXQncyBub3QgdWJpcXVpdG91cy4gQnV0IGRvZXMgaXQgY2FsbCBzbG93X3BhdGggb3IgdGNwX3ZhbGlkYXRlX2luY29taW5nPyBJZiBpdCBkb2VzLCB0aGVuIHRoZSB3b3JrIGlzIGV2ZW4gbW9yZSBmb2N1c2VkLiBJIG5lZWQgdG8gY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG5ldC9pcHY0L3RjcF9pbnB1dC5jYCBhcm91bmQgbGluZXMgNjU0MC02NjUwIHRvIGNvbmZpcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNjksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDoxMzowNy43NjcyMzI3MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MTg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3BfaW5wdXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NjQwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2NjQwOlxcdFxcbjY2NDE6XFx0XFx0XFx0XFx0aWYgKFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNlYWNrX3NlcSAhPSB0cC1cXHUwMDNlc25kX3VuYSkge1xcbjY2NDI6XFx0XFx0XFx0XFx0XFx0LyogV2VsbCwgb25seSBvbmUgc21hbGwganVtcGxldCBpbiBmYXN0IHBhdGguLi4gKi9cXG42NjQzOlxcdFxcdFxcdFxcdFxcdHRjcF9hY2soc2ssIHNrYiwgZmxhZyB8IEZMQUdfREFUQSk7XFxuNjY0NDpcXHRcXHRcXHRcXHRcXHR0Y3BfZGF0YV9zbmRfY2hlY2soc2spO1xcbjY2NDU6XFx0XFx0XFx0XFx0XFx0aWYgKCFpbmV0X2Nza19hY2tfc2NoZWR1bGVkKHNrKSlcXG42NjQ2OlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gbm9fYWNrO1xcbjY2NDc6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG42NjQ4OlxcdFxcdFxcdFxcdFxcdHRjcF91cGRhdGVfd2wodHAsIFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNlc2VxKTtcXG42NjQ5OlxcdFxcdFxcdFxcdH1cXG42NjUwOlxcdFxcbjY2NTE6XFx0XFx0XFx0XFx0X190Y3BfYWNrX3NuZF9jaGVjayhzaywgMCk7XFxuNjY1MjpcXHRub19hY2s6XFxuNjY1MzpcXHRcXHRcXHRcXHRpZiAoZWF0ZW4pXFxuNjY1NDpcXHRcXHRcXHRcXHRcXHRrZnJlZV9za2JfcGFydGlhbChza2IsIGZyYWdzdG9sZW4pO1xcbjY2NTU6XFx0XFx0XFx0XFx0dGNwX2RhdGFfcmVhZHkoc2spO1xcbjY2NTY6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbjY2NTc6XFx0XFx0XFx0fVxcbjY2NTg6XFx0XFx0fVxcbjY2NTk6XFx0XFxuNjY2MDpcXHRzbG93X3BhdGg6XFxuNjY2MTpcXHRcXHRpZiAobGVuIFxcdTAwM2MgKHRoLVxcdTAwM2Vkb2ZmIFxcdTAwM2NcXHUwMDNjIDIpIHx8IHRjcF9jaGVja3N1bV9jb21wbGV0ZShza2IpKVxcbjY2NjI6XFx0XFx0XFx0Z290byBjc3VtX2Vycm9yO1xcbjY2NjM6XFx0XFxuNjY2NDpcXHRcXHRpZiAoIXRoLVxcdTAwM2VhY2sgXFx1MDAyNlxcdTAwMjYgIXRoLVxcdTAwM2Vyc3QgXFx1MDAyNlxcdTAwMjYgIXRoLVxcdTAwM2VzeW4pIHtcXG42NjY1OlxcdFxcdFxcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9UQ1BfRkxBR1M7XFxuNjY2NjpcXHRcXHRcXHRnb3RvIGRpc2NhcmQ7XFxuNjY2NzpcXHRcXHR9XFxuNjY2ODpcXHRcXG42NjY5OlxcdFxcdC8qXFxuNjY3MDpcXHRcXHQgKlxcdFN0YW5kYXJkIHNsb3cgcGF0aC5cXG42NjcxOlxcdFxcdCAqL1xcbjY2NzI6XFx0dmFsaWRhdGU6XFxuNjY3MzpcXHRcXHRpZiAoIXRjcF92YWxpZGF0ZV9pbmNvbWluZyhzaywgc2tiLCB0aCwgMSkpXFxuNjY3NDpcXHRcXHRcXHRyZXR1cm47XFxuNjY3NTpcXHRcXG42Njc2OlxcdHN0ZXA1OlxcbjY2Nzc6XFx0XFx0dGNwX2Vjbl9yZWNlaXZlZF9jb3VudGVyc19wYXlsb2FkKHNrLCBza2IpO1xcbjY2Nzg6XFx0XFxuNjY3OTpcXHRcXHRyZWFzb24gPSB0Y3BfYWNrKHNrLCBza2IsIEZMQUdfU0xPV1BBVEggfCBGTEFHX1VQREFURV9UU19SRUNFTlQpO1xcbjY2ODA6XFx0XFx0aWYgKChpbnQpcmVhc29uIFxcdTAwM2MgMCkge1xcbjY2ODE6XFx0XFx0XFx0cmVhc29uID0gLXJlYXNvbjtcXG42NjgyOlxcdFxcdFxcdGdvdG8gZGlzY2FyZDtcXG42NjgzOlxcdFxcdH1cXG42Njg0OlxcdFxcdHRjcF9yY3ZfcnR0X21lYXN1cmVfdHMoc2ssIHNrYik7XFxuNjY4NTpcXHRcXG42Njg2OlxcdFxcdC8qIFByb2Nlc3MgdXJnZW50IGRhdGEuICovXFxuNjY4NzpcXHRcXHR0Y3BfdXJnKHNrLCBza2IsIHRoKTtcXG42Njg4OlxcdFxcbjY2ODk6XFx0XFx0Lyogc3RlcCA3OiBwcm9jZXNzIHRoZSBzZWdtZW50IHRleHQgKi9cXG42NjkwOlxcdFxcdHRjcF9kYXRhX3F1ZXVlKHNrLCBza2IpO1xcbjY2OTE6XFx0XFxuNjY5MjpcXHRcXHR0Y3BfZGF0YV9zbmRfY2hlY2soc2spO1xcbjY2OTM6XFx0XFx0dGNwX2Fja19zbmRfY2hlY2soc2spO1xcbjY2OTQ6XFx0XFx0cmV0dXJuO1xcbjY2OTU6XFx0XFxuNjY5NjpcXHRjc3VtX2Vycm9yOlxcbjY2OTc6XFx0XFx0cmVhc29uID0gU0tCX0RST1BfUkVBU09OX1RDUF9DU1VNO1xcbjY2OTg6XFx0XFx0dHJhY2VfdGNwX2JhZF9jc3VtKHNrYik7XFxuNjY5OTpcXHRcXHRUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgVENQX01JQl9DU1VNRVJST1JTKTtcXG42NzAwOlxcdFxcdFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBUQ1BfTUlCX0lORVJSUyk7XFxuNjcwMTpcXHRcXG42NzAyOlxcdGRpc2NhcmQ6XFxuNjcwMzpcXHRcXHR0Y3BfZHJvcF9yZWFzb24oc2ssIHNrYiwgcmVhc29uKTtcXG42NzA0OlxcdH1cXG42NzA1OlxcdFxcbjY3MDY6XFx0dm9pZCB0Y3BfaW5pdF90cmFuc2ZlcihzdHJ1Y3Qgc29jayAqc2ssIGludCBicGZfb3AsIHN0cnVjdCBza19idWZmICpza2IpXFxuNjcwNzpcXHR7XFxuNjcwODpcXHRcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxuNjcwOTpcXHRcXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcXG42NzEwOlxcdFxcbjY3MTE6XFx0XFx0dGNwX210dXBfaW5pdChzayk7XFxuNjcxMjpcXHRcXHRpY3NrLVxcdTAwM2VpY3NrX2FmX29wcy1cXHUwMDNlcmVidWlsZF9oZWFkZXIoc2spO1xcbjY3MTM6XFx0XFx0dGNwX2luaXRfbWV0cmljcyhzayk7XFxuNjcxNDpcXHRcXG42NzE1OlxcdFxcdC8qIEluaXRpYWxpemUgdGhlIGNvbmdlc3Rpb24gd2luZG93IHRvIHN0YXJ0IHRoZSB0cmFuc2Zlci5cXG42NzE2OlxcdFxcdCAqIEN1dCBjd25kIGRvd24gdG8gMSBwZXIgUkZDNTY4MSBpZiBTWU4gb3IgU1lOLUFDSyBoYXMgYmVlblxcbjY3MTc6XFx0XFx0ICogcmV0cmFuc21pdHRlZC4gSW4gbGlnaHQgb2YgUkZDNjI5OCBtb3JlIGFnZ3Jlc3NpdmUgMXNlY1xcbjY3MTg6XFx0XFx0ICogaW5pdFJUTywgd2Ugb25seSByZXNldCBjd25kIHdoZW4gbW9yZSB0aGFuIDEgU1lOL1NZTi1BQ0tcXG42NzE5OlxcdFxcdCAqIHJldHJhbnNtaXNzaW9uIGhhcyBvY2N1cnJlZC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6MTM6MDcuNzY3Njg3MjFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxOTkxNzAxMjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkFuYWx5emluZyB0aGUgVENQIFNlcXVlbmNlIFZlcmlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSB0cmFja2luZyB0aGlzIGBhY2tfc2VxYCB2YWx1ZSBhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byBgdHAtXHUwMDNlc25kX3VuYWAgd2l0aGluIHRoZSBUQ1Agc2VxdWVuY2UuIFdoZW4gYGFja19zZXFgIHByZWNlZGVzIGB0cC1cdTAwM2VzbmRfdW5hYCwgdGhlIGZsb3cgbm93IGltbWVkaWF0ZWx5IGJyYW5jaGVzIHRvIHRoZSBgc2xvd19wYXRoOmAgbGFiZWwsIGFuZCB0aGF0IHF1aWNrbHkgbGFuZHMgbWUgaW4gYHRjcF92YWxpZGF0ZV9pbmNvbWluZygpYC4gR2l2ZW4gdGhhdCBJIGhhdmUgYSBnb29kIGhhbmRsZSBvbiBob3cgdGhlIGNvZGUgYmFzZSB3b3JrcywgYW5kIGFtIHRyeWluZyB0byB1bmRlcnN0YW5kICp3aHkqIGEgcmVjZW50IGlzc3VlIGlzIGhhcHBlbmluZywgbXkgbmV4dCBzdG9wIGlzIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgc2NydXRpbml6aW5nIHRoZSBsb2dpYyB3aXRoaW4gYHRjcF92YWxpZGF0ZV9pbmNvbWluZygpYCwgbGlrZWx5IGFyb3VuZCBsaW5lIDY0OTAuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQncyBnb2luZyBvbiB0aGVyZSFcblxuXG4iLCJJbnB1dFRva2VucyI6NzY4MywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6MTM6MDkuNzU5MzkwNjM5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI3NTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcF9pbnB1dC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY0NTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjY0NTA6XFx0XFx0XFx0ICAgIFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNlc2VxICsgMSA9PSB0cC1cXHUwMDNlcmN2X254dCBcXHUwMDI2XFx1MDAyNlxcbjY0NTE6XFx0XFx0XFx0ICAgIFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNlYWNrX3NlcSA9PSB0cC1cXHUwMDNlc25kX254dClcXG42NDUyOlxcdFxcdFxcdFxcdGdvdG8gcGFzcztcXG42NDUzOlxcdHN5bl9jaGFsbGVuZ2U6XFxuNjQ1NDpcXHRcXHRcXHRpZiAoc3luX2luZXJyKVxcbjY0NTU6XFx0XFx0XFx0XFx0VENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIFRDUF9NSUJfSU5FUlJTKTtcXG42NDU2OlxcdFxcdFxcdE5FVF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfVENQU1lOQ0hBTExFTkdFKTtcXG42NDU3OlxcdFxcdFxcdHRjcF9zZW5kX2NoYWxsZW5nZV9hY2soc2ssIGFjY2Vjbl9yZWZsZWN0b3IpO1xcbjY0NTg6XFx0XFx0XFx0U0tCX0RSX1NFVChyZWFzb24sIFRDUF9JTlZBTElEX1NZTik7XFxuNjQ1OTpcXHRcXHRcXHRnb3RvIGRpc2NhcmQ7XFxuNjQ2MDpcXHRcXHR9XFxuNjQ2MTpcXHRcXG42NDYyOlxcdHBhc3M6XFxuNjQ2MzpcXHRcXHRicGZfc2tvcHNfcGFyc2VfaGRyKHNrLCBza2IpO1xcbjY0NjQ6XFx0XFxuNjQ2NTpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG42NDY2OlxcdFxcbjY0Njc6XFx0ZGlzY2FyZDpcXG42NDY4OlxcdFxcdHRjcF9kcm9wX3JlYXNvbihzaywgc2tiLCByZWFzb24pO1xcbjY0Njk6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjY0NzA6XFx0XFxuNjQ3MTpcXHRyZXNldDpcXG42NDcyOlxcdFxcdHRjcF9yZXNldChzaywgc2tiKTtcXG42NDczOlxcdFxcdF9fa2ZyZWVfc2tiKHNrYik7XFxuNjQ3NDpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuNjQ3NTpcXHR9XFxuNjQ3NjpcXHRcXG42NDc3OlxcdC8qXFxuNjQ3ODpcXHQgKlxcdFRDUCByZWNlaXZlIGZ1bmN0aW9uIGZvciB0aGUgRVNUQUJMSVNIRUQgc3RhdGUuXFxuNjQ3OTpcXHQgKlxcbjY0ODA6XFx0ICpcXHRJdCBpcyBzcGxpdCBpbnRvIGEgZmFzdCBwYXRoIGFuZCBhIHNsb3cgcGF0aC4gVGhlIGZhc3QgcGF0aCBpc1xcbjY0ODE6XFx0ICogXFx0ZGlzYWJsZWQgd2hlbjpcXG42NDgyOlxcdCAqXFx0LSBBIHplcm8gd2luZG93IHdhcyBhbm5vdW5jZWQgZnJvbSB1cyAtIHplcm8gd2luZG93IHByb2JpbmdcXG42NDgzOlxcdCAqICAgICAgICBpcyBvbmx5IGhhbmRsZWQgcHJvcGVybHkgaW4gdGhlIHNsb3cgcGF0aC5cXG42NDg0OlxcdCAqXFx0LSBPdXQgb2Ygb3JkZXIgc2VnbWVudHMgYXJyaXZlZC5cXG42NDg1OlxcdCAqXFx0LSBVcmdlbnQgZGF0YSBpcyBleHBlY3RlZC5cXG42NDg2OlxcdCAqXFx0LSBUaGVyZSBpcyBubyBidWZmZXIgc3BhY2UgbGVmdFxcbjY0ODc6XFx0ICpcXHQtIFVuZXhwZWN0ZWQgVENQIGZsYWdzL3dpbmRvdyB2YWx1ZXMvaGVhZGVyIGxlbmd0aHMgYXJlIHJlY2VpdmVkXFxuNjQ4ODpcXHQgKlxcdCAgKGRldGVjdGVkIGJ5IGNoZWNraW5nIHRoZSBUQ1AgaGVhZGVyIGFnYWluc3QgcHJlZF9mbGFncylcXG42NDg5OlxcdCAqXFx0LSBEYXRhIGlzIHNlbnQgaW4gYm90aCBkaXJlY3Rpb25zLiBGYXN0IHBhdGggb25seSBzdXBwb3J0cyBwdXJlIHNlbmRlcnNcXG42NDkwOlxcdCAqXFx0ICBvciBwdXJlIHJlY2VpdmVycyAodGhpcyBtZWFucyBlaXRoZXIgdGhlIHNlcXVlbmNlIG51bWJlciBvciB0aGUgYWNrXFxuNjQ5MTpcXHQgKlxcdCAgdmFsdWUgbXVzdCBzdGF5IGNvbnN0YW50KVxcbjY0OTI6XFx0ICpcXHQtIFVuZXhwZWN0ZWQgVENQIG9wdGlvbi5cXG42NDkzOlxcdCAqXFx0LSBBQ0sgc2VxdWVuY2UgbnVtYmVyIGlzIG91dHNpZGUgW1NORC5VTkEsIFNORC5OWFRdLlxcbjY0OTQ6XFx0ICpcXG42NDk1OlxcdCAqXFx0V2hlbiB0aGVzZSBjb25kaXRpb25zIGFyZSBub3Qgc2F0aXNmaWVkIGl0IGRyb3BzIGludG8gYSBzdGFuZGFyZFxcbjY0OTY6XFx0ICpcXHRyZWNlaXZlIHByb2NlZHVyZSBwYXR0ZXJuZWQgYWZ0ZXIgUkZDNzkzIHRvIGhhbmRsZSBhbGwgY2FzZXMuXFxuNjQ5NzpcXHQgKlxcdFRoZSBmaXJzdCB0aHJlZSBjYXNlcyBhcmUgZ3VhcmFudGVlZCBieSBwcm9wZXIgcHJlZF9mbGFncyBzZXR0aW5nLFxcbjY0OTg6XFx0ICpcXHR0aGUgcmVzdCBpcyBjaGVja2VkIGlubGluZS4gRmFzdCBwcm9jZXNzaW5nIGlzIHR1cm5lZCBvbiBpblxcbjY0OTk6XFx0ICpcXHR0Y3BfZGF0YV9xdWV1ZSB3aGVuIGV2ZXJ5dGhpbmcgaXMgT0suXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjEzOjA5Ljc1OTgyMDMyOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjg4NTA5OTg3NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIFRDUCBWYWxpZGF0aW9uIGZvciBSRkMgNTk2MSBDb21wYXRpYmlsaXR5KipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwncyBgdGNwX3ZhbGlkYXRlX2luY29taW5nYCBmdW5jdGlvbiBoYW5kbGVzIGluY29taW5nIFRDUCBzZWdtZW50cywgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIFJGQyA1OTYxLCBvciBob3cgaXQgdHJlYXRzIG9sZGVyIGFja25vd2xlZGdlbWVudHMuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgY29kZSB0byBmaWd1cmUgdGhpcyBvdXQuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIGluIHRoZSBgbmV0L2lwdjQvdGNwX2lucHV0LmNgIGZpbGUsIHdoZXJlIHRoZSBjb3JlIFRDUCBpbnB1dCBwcm9jZXNzaW5nIGxvZ2ljIHJlc2lkZXMuIEknbGwgZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGxpbmVzIDYzNzAgdGhyb3VnaCA2NDUwLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIGxvZ2ljIGJlaW5nIHVzZWQuIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuIFRoaXMgd2lsbCBiZSB0aGUga2V5IHBhcnQgb2YgdGhpcyBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc2NywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6MTM6MTguNjEwODIyNjhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzUwMDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcF9pbnB1dC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYzNzAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjYzNzA6XFx0XFx0XFx0XFx0aWYgKHRoLVxcdTAwM2VzeW4pXFxuNjM3MTpcXHRcXHRcXHRcXHRcXHRnb3RvIHN5bl9jaGFsbGVuZ2U7XFxuNjM3MjpcXHRcXG42MzczOlxcdFxcdFxcdFxcdGlmIChyZWFzb24gPT0gU0tCX0RST1BfUkVBU09OX1RDUF9JTlZBTElEX1NFUVVFTkNFIHx8XFxuNjM3NDpcXHRcXHRcXHRcXHQgICAgcmVhc29uID09IFNLQl9EUk9QX1JFQVNPTl9UQ1BfSU5WQUxJRF9FTkRfU0VRVUVOQ0UpXFxuNjM3NTpcXHRcXHRcXHRcXHRcXHRORVRfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSxcXG42Mzc2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIExJTlVYX01JQl9CRVlPTkRfV0lORE9XKTtcXG42Mzc3OlxcdFxcdFxcdFxcdGlmICghdGNwX29vd19yYXRlX2xpbWl0ZWQoc29ja19uZXQoc2spLCBza2IsXFxuNjM3ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIExJTlVYX01JQl9UQ1BBQ0tTS0lQUEVEU0VRLFxcbjYzNzk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2dHAtXFx1MDAzZWxhc3Rfb293X2Fja190aW1lKSlcXG42MzgwOlxcdFxcdFxcdFxcdFxcdHRjcF9zZW5kX2R1cGFjayhzaywgc2tiKTtcXG42MzgxOlxcdFxcdFxcdH0gZWxzZSBpZiAodGNwX3Jlc2V0X2NoZWNrKHNrLCBza2IpKSB7XFxuNjM4MjpcXHRcXHRcXHRcXHRnb3RvIHJlc2V0O1xcbjYzODM6XFx0XFx0XFx0fVxcbjYzODQ6XFx0XFx0XFx0Z290byBkaXNjYXJkO1xcbjYzODU6XFx0XFx0fVxcbjYzODY6XFx0XFxuNjM4NzpcXHRcXHQvKiBTdGVwIDI6IGNoZWNrIFJTVCBiaXQgKi9cXG42Mzg4OlxcdFxcdGlmICh0aC1cXHUwMDNlcnN0KSB7XFxuNjM4OTpcXHRcXHRcXHQvKiBSRkMgNTk2MSAzLjIgKGV4dGVuZCB0byBtYXRjaCBhZ2FpbnN0IChSQ1YuTlhUIC0gMSkgYWZ0ZXIgYVxcbjYzOTA6XFx0XFx0XFx0ICogRklOIGFuZCBTQUNLIHRvbyBpZiBhdmFpbGFibGUpOlxcbjYzOTE6XFx0XFx0XFx0ICogSWYgc2VxIG51bSBtYXRjaGVzIFJDVi5OWFQgb3IgKFJDVi5OWFQgLSAxKSBhZnRlciBhIEZJTiwgb3JcXG42MzkyOlxcdFxcdFxcdCAqIHRoZSByaWdodC1tb3N0IFNBQ0sgYmxvY2ssXFxuNjM5MzpcXHRcXHRcXHQgKiB0aGVuXFxuNjM5NDpcXHRcXHRcXHQgKiAgICAgUkVTRVQgdGhlIGNvbm5lY3Rpb25cXG42Mzk1OlxcdFxcdFxcdCAqIGVsc2VcXG42Mzk2OlxcdFxcdFxcdCAqICAgICBTZW5kIGEgY2hhbGxlbmdlIEFDS1xcbjYzOTc6XFx0XFx0XFx0ICovXFxuNjM5ODpcXHRcXHRcXHRpZiAoVENQX1NLQl9DQihza2IpLVxcdTAwM2VzZXEgPT0gdHAtXFx1MDAzZXJjdl9ueHQgfHxcXG42Mzk5OlxcdFxcdFxcdCAgICB0Y3BfcmVzZXRfY2hlY2soc2ssIHNrYikpXFxuNjQwMDpcXHRcXHRcXHRcXHRnb3RvIHJlc2V0O1xcbjY0MDE6XFx0XFxuNjQwMjpcXHRcXHRcXHRpZiAodGNwX2lzX3NhY2sodHApIFxcdTAwMjZcXHUwMDI2IHRwLVxcdTAwM2VyeF9vcHQubnVtX3NhY2tzIFxcdTAwM2UgMCkge1xcbjY0MDM6XFx0XFx0XFx0XFx0c3RydWN0IHRjcF9zYWNrX2Jsb2NrICpzcCA9IFxcdTAwMjZ0cC1cXHUwMDNlc2VsZWN0aXZlX2Fja3NbMF07XFxuNjQwNDpcXHRcXHRcXHRcXHRpbnQgbWF4X3NhY2sgPSBzcFswXS5lbmRfc2VxO1xcbjY0MDU6XFx0XFx0XFx0XFx0aW50IHRoaXNfc2FjaztcXG42NDA2OlxcdFxcbjY0MDc6XFx0XFx0XFx0XFx0Zm9yICh0aGlzX3NhY2sgPSAxOyB0aGlzX3NhY2sgXFx1MDAzYyB0cC1cXHUwMDNlcnhfb3B0Lm51bV9zYWNrcztcXG42NDA4OlxcdFxcdFxcdFxcdCAgICAgKyt0aGlzX3NhY2spIHtcXG42NDA5OlxcdFxcdFxcdFxcdFxcdG1heF9zYWNrID0gYWZ0ZXIoc3BbdGhpc19zYWNrXS5lbmRfc2VxLFxcbjY0MTA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IG1heF9zYWNrKSA/XFxuNjQxMTpcXHRcXHRcXHRcXHRcXHRcXHRzcFt0aGlzX3NhY2tdLmVuZF9zZXEgOiBtYXhfc2FjaztcXG42NDEyOlxcdFxcdFxcdFxcdH1cXG42NDEzOlxcdFxcbjY0MTQ6XFx0XFx0XFx0XFx0aWYgKFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNlc2VxID09IG1heF9zYWNrKVxcbjY0MTU6XFx0XFx0XFx0XFx0XFx0Z290byByZXNldDtcXG42NDE2OlxcdFxcdFxcdH1cXG42NDE3OlxcdFxcbjY0MTg6XFx0XFx0XFx0LyogRGlzYWJsZSBURk8gaWYgUlNUIGlzIG91dC1vZi1vcmRlclxcbjY0MTk6XFx0XFx0XFx0ICogYW5kIG5vIGRhdGEgaGFzIGJlZW4gcmVjZWl2ZWRcXG42NDIwOlxcdFxcdFxcdCAqIGZvciBjdXJyZW50IGFjdGl2ZSBURk8gc29ja2V0XFxuNjQyMTpcXHRcXHRcXHQgKi9cXG42NDIyOlxcdFxcdFxcdGlmICh0cC1cXHUwMDNlc3luX2Zhc3RvcGVuIFxcdTAwMjZcXHUwMDI2ICF0cC1cXHUwMDNlZGF0YV9zZWdzX2luIFxcdTAwMjZcXHUwMDI2XFxuNjQyMzpcXHRcXHRcXHQgICAgc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9FU1RBQkxJU0hFRClcXG42NDI0OlxcdFxcdFxcdFxcdHRjcF9mYXN0b3Blbl9hY3RpdmVfZGlzYWJsZShzayk7XFxuNjQyNTpcXHRcXHRcXHR0Y3Bfc2VuZF9jaGFsbGVuZ2VfYWNrKHNrLCBmYWxzZSk7XFxuNjQyNjpcXHRcXHRcXHRTS0JfRFJfU0VUKHJlYXNvbiwgVENQX1JFU0VUKTtcXG42NDI3OlxcdFxcdFxcdGdvdG8gZGlzY2FyZDtcXG42NDI4OlxcdFxcdH1cXG42NDI5OlxcdFxcbjY0MzA6XFx0XFx0Lyogc3RlcCAzOiBjaGVjayBzZWN1cml0eSBhbmQgcHJlY2VkZW5jZSBbaWdub3JlZF0gKi9cXG42NDMxOlxcdFxcbjY0MzI6XFx0XFx0Lyogc3RlcCA0OiBDaGVjayBmb3IgYSBTWU5cXG42NDMzOlxcdFxcdCAqIFJGQyA1OTYxIDQuMiA6IFNlbmQgYSBjaGFsbGVuZ2UgYWNrXFxuNjQzNDpcXHRcXHQgKi9cXG42NDM1OlxcdFxcdGlmICh0aC1cXHUwMDNlc3luKSB7XFxuNjQzNjpcXHRcXHRcXHRpZiAodGNwX2Vjbl9tb2RlX2FjY2Vjbih0cCkpIHtcXG42NDM3OlxcdFxcdFxcdFxcdGFjY2Vjbl9yZWZsZWN0b3IgPSB0cnVlO1xcbjY0Mzg6XFx0XFx0XFx0XFx0dHAtXFx1MDAzZXN5bl9lY3RfcmN2ID0gVENQX1NLQl9DQihza2IpLVxcdTAwM2VpcF9kc2ZpZWxkIFxcdTAwMjZcXG42NDM5OlxcdFxcdFxcdFxcdFxcdFxcdCAgSU5FVF9FQ05fTUFTSztcXG42NDQwOlxcdFxcdFxcdFxcdGlmICh0cC1cXHUwMDNlcnhfb3B0LmFjY2VjbiBcXHUwMDI2XFx1MDAyNlxcbjY0NDE6XFx0XFx0XFx0XFx0ICAgIHRwLVxcdTAwM2VzYXdfYWNjZWNuX29wdCBcXHUwMDNjIFRDUF9BQ0NFQ05fT1BUX0NPVU5URVJfU0VFTikge1xcbjY0NDI6XFx0XFx0XFx0XFx0XFx0dTggc2F3X29wdCA9IHRjcF9hY2NlY25fb3B0aW9uX2luaXQoc2tiLCB0cC1cXHUwMDNlcnhfb3B0LmFjY2Vjbik7XFxuNjQ0MzpcXHRcXG42NDQ0OlxcdFxcdFxcdFxcdFxcdHRjcF9hY2NlY25fc2F3X29wdF9mYWlsX3JlY3YodHAsIHNhd19vcHQpO1xcbjY0NDU6XFx0XFx0XFx0XFx0XFx0dGNwX2FjY2Vjbl9vcHRfZGVtYW5kX21pbihzaywgMSk7XFxuNjQ0NjpcXHRcXHRcXHRcXHR9XFxuNjQ0NzpcXHRcXHRcXHR9XFxuNjQ0ODpcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9TWU5fUkVDViBcXHUwMDI2XFx1MDAyNiBzay1cXHUwMDNlc2tfc29ja2V0IFxcdTAwMjZcXHUwMDI2IHRoLVxcdTAwM2VhY2sgXFx1MDAyNlxcdTAwMjZcXG42NDQ5OlxcdFxcdFxcdCAgICBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZXNlcSArIDEgPT0gVENQX1NLQl9DQihza2IpLVxcdTAwM2VlbmRfc2VxIFxcdTAwMjZcXHUwMDI2XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjEzOjE4LjYxMTE3N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2ODAzNTk2MzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk5hdmlnYXRpbmcgVENQIEFja25vd2xlZGdlbWVudCBWYWxpZGF0aW9uKipcblxuT2theSwgc28gSSdtIG9uIHN0ZXAgZml2ZSwgd2hpY2ggc2F5cyB0byBjaGVjayB0aGUgQUNLIGZpZWxkIGluIGB0Y3BfdmFsaWRhdGVfaW5jb21pbmdgLiBCdXQsIGhvbGQgb24gYSBzZWNvbmQuLi4gd2hlcmUgKmlzKiB0aGF0IGNoZWNrIGFjdHVhbGx5IGhhcHBlbmluZz8gSSBkb24ndCBzZWUgaXQgZXhwbGljaXRseS4gVGhpcyBpcyB3aGVyZSBJIGhhdmUgdG8gc3RhcnQgZGlnZ2luZy5cblxuTXkgZmlyc3QgdGhvdWdodCBpcyB0byB1c2UgYGdyZXBgIHRvIHNlYXJjaCBmb3IgYHJmYzU5NjFgIHdpdGhpbiB0aGUgY29kZS4gVGhhdCBSRkMgaXMgcHJvYmFibHkgcmVsZXZhbnQgaGVyZS4gQWx0ZXJuYXRpdmVseSwgSSBzaG91bGQgbG9vayBhdCB0aGUgYHRjcF9hY2tgIGZ1bmN0aW9uIGl0c2VsZiDigJMgdGhhdCdzIHRoZSBtb3N0IGxpa2VseSBwbGFjZS4gSXQncyBhbHNvIHdvcnRoIG15IHRpbWUgdG8gZ28gYmFjayB0byB0aGUgY29kZSBkaXJlY3RseSBhYm92ZSB0aGUgc3BlY2lmaWMgY2FsbCB0byBgdGNwX3ZhbGlkYXRlX2luY29taW5nYCBvciBhbnkgcmVsYXRlZCBjb2RlIHdpdGhpbiB0aGUgZnVuY3Rpb24uIEkgY291bGQgZXZlbiBjaGVjayBgdGNwX2Fja2AgZm9yIGFueSBjbHVlcyBJIG1pZ2h0IGhhdmUgbWlzc2VkLiBHb3R0YSBiZSBtZXRob2RpY2FsIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzk2LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDoxMzoyNS40MTQ3NzU4OTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MDk4MjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJmYzU5NjF8UkZDIDU5NjFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvdGNwX2lucHV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwX2lucHV0LmM9NDAzMT1zdGF0aWMgdm9pZCB0Y3Bfc2VuZF9hY2tfcmVmbGVjdF9lY3Qoc3RydWN0IHNvY2sgKnNrLCBib29sIGFjY2Vjbl9yZWZsZWN0b3IpXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00MDQwLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjQwNDE6LyogQ29uc3VtZSBvbmUgc2xvdCBmcm9tIHRoZSBwZXItbmV0bnMgUkZDIDU5NjEgY2hhbGxlbmdlIEFDSyBxdW90YS5cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00MDQyLSAqIFJldHVybnMgdHJ1ZSBpZiBhIGNoYWxsZW5nZSBBQ0sgbWF5IGJlIHNlbnQuXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz00MDQ0PXN0YXRpYyBib29sIHRjcF9jaGFsbGVuZ2VfYWNrX2FsbG93ZWQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDA2Ny1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo0MDY4Oi8qIFJGQyA1OTYxIDcgW0FDSyBUaHJvdHRsaW5nXSAqL1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQwNjktc3RhdGljIHZvaWQgdGNwX3NlbmRfY2hhbGxlbmdlX2FjayhzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgYWNjZWNuX3JlZmxlY3RvcilcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQwNzktXFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NDA4MDpcXHQvKiBUaGVuIGNoZWNrIHRoZSBwZXItbmV0bnMgUkZDIDU5NjEgcmF0ZSBsaW1pdC4gKi9cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00MDgxLVxcdGlmICh0Y3BfY2hhbGxlbmdlX2Fja19hbGxvd2VkKG5ldCkpIHtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTQyNzY9c3RhdGljIGludCB0Y3BfYWNrKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGZsYWcpXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00MzA5LVxcdFxcdG1heF93aW5kb3cgPSBtaW5fdCh1NjQsIHRwLVxcdTAwM2VtYXhfd2luZG93LCB0cC1cXHUwMDNlYnl0ZXNfYWNrZWQpO1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjQzMTA6XFx0XFx0LyogUkZDIDU5NjEgNS4yIFtCbGluZCBEYXRhIEluamVjdGlvbiBBdHRhY2tdLltNaXRpZ2F0aW9uXSAqL1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQzMTEtXFx0XFx0aWYgKGJlZm9yZShhY2ssIHByaW9yX3NuZF91bmEgLSBtYXhfd2luZG93KSkge1xcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDMxOS1cXHQvKiBJZiB0aGUgYWNrIGluY2x1ZGVzIGRhdGEgd2UgaGF2ZW4ndCBzZW50IHlldCwgZHJvcCB0aGVcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo0MzIwOlxcdCAqIHNlZ21lbnQuICBSRkMgNzkzIFNlY3Rpb24gMy45IGFuZCBSRkMgNTk2MSBTZWN0aW9uIDUuMlxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQzMjEtXFx0ICogcmVxdWlyZSB1cyB0byBzZW5kIGFuIEFDSyBiYWNrIGluIHRoYXQgY2FzZS5cXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTYyNzc9c3RhdGljIHZvaWQgdGNwX3VyZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjMwNC0gKiBGSU4gaXMgc2VudCBmb2xsb3dlZCBieSBhIFJTVCBwYWNrZXQuIFRoZSBSU1QgaXMgc2VudCB3aXRoIHRoZSBzYW1lXFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NjMwNTogKiBzZXF1ZW5jZSBudW1iZXIgYXMgdGhlIEZJTiwgYW5kIHRodXMgYWNjb3JkaW5nIHRvIFJGQyA1OTYxIGEgY2hhbGxlbmdlXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjMwNi0gKiBBQ0sgc2hvdWxkIGJlIHNlbnQuIEhvd2V2ZXIsIE1hYyBPU1ggcmF0ZSBsaW1pdHMgcmVwbGllcyB0byBjaGFsbGVuZ2VcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTYzMjI9c3RhdGljIGJvb2wgdGNwX3ZhbGlkYXRlX2luY29taW5nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTYzODgtXFx0aWYgKHRoLVxcdTAwM2Vyc3QpIHtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo2Mzg5OlxcdFxcdC8qIFJGQyA1OTYxIDMuMiAoZXh0ZW5kIHRvIG1hdGNoIGFnYWluc3QgKFJDVi5OWFQgLSAxKSBhZnRlciBhXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjM5MC1cXHRcXHQgKiBGSU4gYW5kIFNBQ0sgdG9vIGlmIGF2YWlsYWJsZSk6XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy02NDMyLVxcdC8qIHN0ZXAgNDogQ2hlY2sgZm9yIGEgU1lOXFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NjQzMzpcXHQgKiBSRkMgNTk2MSA0LjIgOiBTZW5kIGEgY2hhbGxlbmdlIGFja1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTY0MzQtXFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjEzOjI1LjQ2ODg3ODcwNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1MTgyNjQ5ODIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGNvZGUgc25pcHBldCwgdGhpbmtpbmcgb3V0IGxvdWQgYXMgSSBwcm9jZXNzIGl0OlxuXG4qKkRlZXAgRGl2ZSBpbnRvIGB0Y3BfYWNrYCBhbmQgdGhlIFJGQyA1OTYxIE1pdGlnYXRpb24qKlxuXG5Pa2F5LCBsZXQncyB6b29tIGluIG9uIGxpbmUgNDMxMCB3aXRoaW4gdGhlIGB0Y3BfYWNrYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSBibG9jayBhcm91bmQgbGluZSA0MzAwIHRvIGdpdmUgbWUgc29tZSBjb250ZXh0LiBJJ20gaW1tZWRpYXRlbHkgaW50ZXJlc3RlZCBpbiB0aGUgY29tbWVudCByZWZlcmVuY2luZyBSRkMgNTk2MSwgc2VjdGlvbiA1LjIsIGFuZCBpdHMgcmVsYXRpb24gdG8gXCJCbGluZCBEYXRhIEluamVjdGlvbiBBdHRhY2tzLlwiIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byByZWNhbGwgd2hhdCB0aGF0IHNwZWNpZmljIHNlY3Rpb24gb2YgdGhlIFJGQyBvdXRsaW5lcywgZXNwZWNpYWxseSBpdHMgbWl0aWdhdGlvbiBzdHJhdGVnaWVzLlxuXG5UaGUgY29kZSBpdHNlbGYsIHdpdGggdGhhdCBgaWZgIHN0YXRlbWVudCwgc3VnZ2VzdHMgc29tZSBraW5kIG9mIGNoZWNrIG9yIGEgZ3VhcmQuIEkgcmVjb2duaXplIHRoZSB1c2Ugb2YgYGJlZm9yZSgpYCBtYWNybywgd2hpY2ggbGlrZWx5IG1lYW5zIHRoYXQgdGhpcyBjb2RlIGlzIGRlc2lnbmVkIHRvIGlkZW50aWZ5IGEgc2l0dWF0aW9uIHdoZXJlIGFuIGluY29taW5nIGFja25vd2xlZGdlbWVudCAoYGFja2ApIGZhbGxzICpiZWZvcmUqIGEgY2FsY3VsYXRlZCBwb2ludC4gVGhlIHNlY29uZCB2YWx1ZSB1c2VzIGBwcmlvcl9zbmRfdW5hYCwgbGlrZWx5IGluZGljYXRpbmcgdGhlIHVuYWNrbm93bGVkZ2VkIHNlZ21lbnQgdGhhdCB3YXMgc2VudCwgYW5kIGBtYXhfd2luZG93YCBpcyB0aGUgYWR2ZXJ0aXNlZCB3aW5kb3cgc2l6ZS4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgY2hlY2sgaXMgcmVsYXRlZCB0byBob3cgdGhlIFRDUCBzdGFjayBkZWFscyB3aXRoIG91dC1vZi1vcmRlciBhY2tub3dsZWRnZW1lbnRzIG9yIHBvdGVudGlhbGx5IG1hbGljaW91cyBhY2tub3dsZWRnZW1lbnRzIHRyeWluZyB0byBpbmplY3QgZGF0YS4gVGhpcyBtYWtlcyBpdCBwZXJmZWN0IHRvIGRldGVjdCBhdHRhY2tzLiBJJ20gZ3Vlc3NpbmcgdGhhdCBpZiB0aGlzIGNvbmRpdGlvbmFsIGV2YWx1YXRlcyB0byBgdHJ1ZWAsIHNvbWUga2luZCBvZiBzZWN1cml0eSBtZWFzdXJlIGlzIHRyaWdnZXJlZCDigJMgcGVyaGFwcyBkcm9wcGluZyB0aGUgYWNrbm93bGVkZ2VtZW50LCBsb2dnaW5nIGFuIGV2ZW50LCBvciBpbml0aWF0aW5nIHNvbWUgZm9ybSBvZiByZXRyYW5zbWlzc2lvbi92YWxpZGF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgcHVycG9zZSBvZiB0aGF0IGNvbXBhcmlzb24uIEkga25vdyB0aGlzIGNvZGUgaXMgaW1wb3J0YW50IGZvciBlbnN1cmluZyB0aGUgc3RhYmlsaXR5IGFuZCBzZWN1cml0eSBvZiB0aGUgbmV0d29yayBjb25uZWN0aW9uLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIHdoYXQgaXMgYmVpbmcgcHJvdGVjdGVkIGhlcmUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjczLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6MTM6MzAuNjUxNTMxOTg3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyNDg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3BfaW5wdXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MjkwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MjkwOlxcdFxcdGludCByZXhtaXQgPSBSRVhNSVRfTk9ORTsgLyogRmxhZyB0byAocmUpdHJhbnNtaXQgdG8gcmVjb3ZlciBsb3NzZXMgKi9cXG40MjkxOlxcdFxcdHUzMiBlY25fY291bnQgPSAwO1xcdCAgLyogRGlkIHdlIHJlY2VpdmUgRUNFL2FuIEFjY0VDTiBBQ0UgdXBkYXRlPyAqL1xcbjQyOTI6XFx0XFx0dTMyIHByaW9yX2ZhY2s7XFxuNDI5MzpcXHRcXG40Mjk0OlxcdFxcdHNhY2tfc3RhdGUuZmlyc3Rfc2Fja3QgPSAwO1xcbjQyOTU6XFx0XFx0c2Fja19zdGF0ZS5yYXRlID0gXFx1MDAyNnJzO1xcbjQyOTY6XFx0XFx0c2Fja19zdGF0ZS5zYWNrX2RlbGl2ZXJlZCA9IDA7XFxuNDI5NzpcXHRcXHRzYWNrX3N0YXRlLmRlbGl2ZXJlZF9ieXRlcyA9IDA7XFxuNDI5ODpcXHRcXG40Mjk5OlxcdFxcdC8qIFdlIHZlcnkgbGlrZWx5IHdpbGwgbmVlZCB0byBhY2Nlc3MgcnR4IHF1ZXVlLiAqL1xcbjQzMDA6XFx0XFx0cHJlZmV0Y2goc2stXFx1MDAzZXRjcF9ydHhfcXVldWUucmJfbm9kZSk7XFxuNDMwMTpcXHRcXG40MzAyOlxcdFxcdC8qIElmIHRoZSBhY2sgaXMgb2xkZXIgdGhhbiBwcmV2aW91cyBhY2tzXFxuNDMwMzpcXHRcXHQgKiB0aGVuIHdlIGNhbiBwcm9iYWJseSBpZ25vcmUgaXQuXFxuNDMwNDpcXHRcXHQgKi9cXG40MzA1OlxcdFxcdGlmIChiZWZvcmUoYWNrLCBwcmlvcl9zbmRfdW5hKSkge1xcbjQzMDY6XFx0XFx0XFx0dTMyIG1heF93aW5kb3c7XFxuNDMwNzpcXHRcXG40MzA4OlxcdFxcdFxcdC8qIGRvIG5vdCBhY2NlcHQgQUNLIGZvciBieXRlcyB3ZSBuZXZlciBzZW50LiAqL1xcbjQzMDk6XFx0XFx0XFx0bWF4X3dpbmRvdyA9IG1pbl90KHU2NCwgdHAtXFx1MDAzZW1heF93aW5kb3csIHRwLVxcdTAwM2VieXRlc19hY2tlZCk7XFxuNDMxMDpcXHRcXHRcXHQvKiBSRkMgNTk2MSA1LjIgW0JsaW5kIERhdGEgSW5qZWN0aW9uIEF0dGFja10uW01pdGlnYXRpb25dICovXFxuNDMxMTpcXHRcXHRcXHRpZiAoYmVmb3JlKGFjaywgcHJpb3Jfc25kX3VuYSAtIG1heF93aW5kb3cpKSB7XFxuNDMxMjpcXHRcXHRcXHRcXHRpZiAoIShmbGFnIFxcdTAwMjYgRkxBR19OT19DSEFMTEVOR0VfQUNLKSlcXG40MzEzOlxcdFxcdFxcdFxcdFxcdHRjcF9zZW5kX2NoYWxsZW5nZV9hY2soc2ssIGZhbHNlKTtcXG40MzE0OlxcdFxcdFxcdFxcdHJldHVybiAtU0tCX0RST1BfUkVBU09OX1RDUF9UT09fT0xEX0FDSztcXG40MzE1OlxcdFxcdFxcdH1cXG40MzE2OlxcdFxcdFxcdGdvdG8gb2xkX2FjaztcXG40MzE3OlxcdFxcdH1cXG40MzE4OlxcdFxcbjQzMTk6XFx0XFx0LyogSWYgdGhlIGFjayBpbmNsdWRlcyBkYXRhIHdlIGhhdmVuJ3Qgc2VudCB5ZXQsIGRyb3AgdGhlXFxuNDMyMDpcXHRcXHQgKiBzZWdtZW50LiAgUkZDIDc5MyBTZWN0aW9uIDMuOSBhbmQgUkZDIDU5NjEgU2VjdGlvbiA1LjJcXG40MzIxOlxcdFxcdCAqIHJlcXVpcmUgdXMgdG8gc2VuZCBhbiBBQ0sgYmFjayBpbiB0aGF0IGNhc2UuXFxuNDMyMjpcXHRcXHQgKi9cXG40MzIzOlxcdFxcdGlmIChhZnRlcihhY2ssIHRwLVxcdTAwM2VzbmRfbnh0KSkge1xcbjQzMjQ6XFx0XFx0XFx0aWYgKCEoZmxhZyBcXHUwMDI2IEZMQUdfTk9fQ0hBTExFTkdFX0FDSykpXFxuNDMyNTpcXHRcXHRcXHRcXHR0Y3Bfc2VuZF9jaGFsbGVuZ2VfYWNrKHNrLCBmYWxzZSk7XFxuNDMyNjpcXHRcXHRcXHRyZXR1cm4gLVNLQl9EUk9QX1JFQVNPTl9UQ1BfQUNLX1VOU0VOVF9EQVRBO1xcbjQzMjc6XFx0XFx0fVxcbjQzMjg6XFx0XFxuNDMyOTpcXHRcXHRpZiAoYWZ0ZXIoYWNrLCBwcmlvcl9zbmRfdW5hKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDoxMzozMC42NTE4NTkxMjdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjMyOTE3Njk0OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVENQIFNlY3VyaXR5IEZpeDogV29ydGh5IG9mIEZ1enppbmc/KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IHdpdGhpbiB0aGUgYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGl0J3MgYWJvdXQgbWl0aWdhdGluZyBibGluZCBkYXRhIGluamVjdGlvbiBhdHRhY2tzIGFzIGRlc2NyaWJlZCBpbiBSRkMgNTk2MS4gQmVmb3JlIHRoZSBwYXRjaCwgYSBjYXJlZnVsbHkgY3JhZnRlZCBwYWNrZXQgd2l0aCBhbiBvbGQgQUNLLCBidXQgbWF0Y2hpbmcgdGhlIHByZWRpY3RlZCBmbGFncywgY291bGQgYnlwYXNzIHRoZSBjaGVjayBhbmQgaW5qZWN0IGRhdGEsIGV2ZW4gdGhvdWdoIGB0Y3BfYWNrYCBtaWdodCBoYXZlIHJldHVybmVkIGFuIGVycm9yLiBUaGUgY3J1Y2lhbCBmbGF3IHdhcyB0aGF0IHRoZSBmYXN0IHBhdGggaW4gYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIHdhcyBpZ25vcmluZyB0aGF0IG5lZ2F0aXZlIHJldHVybi4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgc3RyaWN0ZXIgY2hlY2sgb24gdGhlIGBhY2tfc2VxYCwgc2VuZGluZyB0aGVzZSBwYWNrZXRzIHRvIHRoZSBzbG93IHBhdGggZm9yIHByb3BlciBoYW5kbGluZyBhbmQgZHJvcHBpbmcgdGhlbSBiZWZvcmUgdGhlIGRhdGEgaXMgcXVldWVkLiBUaGF0J3MgYSBzb2xpZCBwcm90b2NvbCBhbmQgc2VjdXJpdHkgaW1wcm92ZW1lbnQuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBXZSdyZSBtb2RpZnlpbmcgY29yZSBUQ1AgaW5wdXQgbG9naWMgd2l0aGluIGBuZXQvaXB2NC90Y3BfaW5wdXQuY2AuIFRoYXQncyBhIHByaW1lIHRhcmdldC4gVENQIGVzdGFibGlzaGVkIHJlY2VpdmluZyBpcyBjb21tb24sIHJlYWNoYWJsZSB0aHJvdWdoIGFueSBUQ1Agc29ja2V0IHJlY2VpdmluZyBwYWNrZXRzIG9uIGxvb3BiYWNrLCB2ZXRoLCB0YXAsIGV0Yy4gU3l6a2FsbGVyJ3MgYWxyZWFkeSBjb25zdGFudGx5IHRlc3RpbmcgdGhlc2Ugc2NlbmFyaW9zLlxuXG5MZXQncyBhcHBseSB0aGUgYFdvcnRoRnV6emluZ2AgY3JpdGVyaWE6IEl0J3Mgbm90IGEgbm9uLWtlcm5lbCBvciBub24tZXhlY3V0YWJsZSBjb21wb25lbnQsIGl0J3Mgbm90IGhhcmR3YXJlLXNwZWNpZmljLCBhbmQgaXQncyBub3QgYW4gdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGguIFRoaXMgcGF0Y2ggZGlyZWN0bHkgbW9kaWZpZXMgcmVhY2hhYmxlLCBleGVjdXRhYmxlIGNvZGUgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0uIFRoYXQgbWVhbnMgYFdvcnRoRnV6emluZzogdHJ1ZWAuXG5cbk5leHQsIHRoZSBgRm9jdXNTeW1ib2xzYC4gV2hhdCBmdW5jdGlvbnMgYXJlIGtleSBoZXJlPyBJdCBzdGFydHMgd2l0aCBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAsIHRoZSBleGFjdCBmdW5jdGlvbiB3aGVyZSB0aGUgdnVsbmVyYWJpbGl0eSB3YXMgcHJlc2VudCBhbmQgdGhlIGNvbmRpdGlvbiB3YXMgbW9kaWZpZWQuIEJ1dCwgd2FpdC4gSXMgYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIHViaXF1aXRvdXM/IFRoZSBndWlkYW5jZSBzYXlzIHRvIGF2b2lkIGdlbmVyaWMgZnVuY3Rpb25zLiBJcyBpdCBsaWtlIGBrbWFsbG9jYCBvciBwYWdlIGZhdWx0cz8gTm8uIEl0IGlzIHNwZWNpZmljYWxseSBjYWxsZWQgZm9yIFRDUCBwYWNrZXRzIG9uIGVzdGFibGlzaGVkIHNvY2tldHMuIFNvLCBpdCBpcyBhIGdvb2QgY2FuZGlkYXRlLlxuXG5XaGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgaW52b2x2ZWQ/IEluIHRoZSBzbG93IHBhdGgsIGB0Y3BfdmFsaWRhdGVfaW5jb21pbmdgIGFuZCBgdGNwX2Fja2AuIFRoZSBwYXRjaCBhbHRlcnMgdGhlIGJlaGF2aW9yIG9mIHRoZSBmYXN0IHBhdGggaW4gYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIGJhc2VkIG9uIHdoYXQgdGhlIGxvd2VyLWxldmVsIGZ1bmN0aW9ucyByZXBvcnQuIFNvIHRoZXkgc2hvdWxkIGJlIGV4YW1pbmVkLlxuXG5UaGUga2V5IGNoYW5nZSBpcyBpbnNpZGUgYHRjcF9yY3ZfZXN0YWJsaXNoZWRgLiBMZXQncyBjb25maXJtOiBJcyBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAgbm9uLXN0YXRpYz8gWWVzLCBpdCdzIGB2b2lkIHRjcF9yY3ZfZXN0YWJsaXNoZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKWAuIE5vdywgd2hhdCBhYm91dCBgdGNwX2Fja2A/IEl0J3MgYHN0YXRpYyBpbnQgdGNwX2FjayguLi4pYC4gT2theSwgaXMgYHRjcF9hY2tgIGlubGluZWQgb3Igbm90PyBJdCdzIGEgbGFyZ2UgZnVuY3Rpb24sIHNvIGl0J3MgbGlrZWx5IGEgc3ltYm9sLiBCdXQgYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIGlzIGRlZmluaXRlbHkgYW4gZXhwb3J0ZWQvZ2xvYmFsIHN5bWJvbCBpbiBgdGNwX2lucHV0LmNgLiBHaXZlbiB0aGF0IGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBpcyBub24tc3RhdGljLCB0aGUgY2hhbmdlIGlzIG1hZGUgZGlyZWN0bHkgdGhlcmUsIGFuZCBgdGNwX2Fja2AgaXMgcGFydCBvZiB0aGUgY29udHJvbCBmbG93LiBCb3RoIHdhcnJhbnQgZm9jdXMuIE5vdywgbGV0J3MgZG91YmxlLWNoZWNrIHdoYXQgY2FsbHMgYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODUzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI4OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjEzOjUzLjk0MzYzMDYxOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkyNDU4MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX3Jjdl9lc3RhYmxpc2hlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwX2lucHV0LmM9NjMyMj1zdGF0aWMgYm9vbCB0Y3BfdmFsaWRhdGVfaW5jb21pbmcoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjUwMC0gKi9cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo2NTAxOnZvaWQgdGNwX3Jjdl9lc3RhYmxpc2hlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjUwMi17XFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTE4MzA9aW50IHRjcF92NF9kb19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0xODUzLVxcdFxcdH1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjE4NTQ6XFx0XFx0dGNwX3Jjdl9lc3RhYmxpc2hlZChzaywgc2tiKTtcXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTE4NTUtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTE5MDE9ZW51bSBza2JfZHJvcF9yZWFzb24gdGNwX2FkZF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMTk4MC1cXHRcXHQvKiBXZSBoYXZlIHRvIHVwZGF0ZSBib3RoIFRDUF9TS0JfQ0IodGFpbCktXFx1MDAzZXRjcF9mbGFncyBhbmRcXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjE5ODE6XFx0XFx0ICogdGh0YWlsLVxcdTAwM2VmaW4sIHNvIHRoYXQgdGhlIGZhc3QgcGF0aCBpbiB0Y3BfcmN2X2VzdGFibGlzaGVkKClcXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTE5ODItXFx0XFx0ICogaXMgbm90IGVudGVyZWQgaWYgd2UgYXBwZW5kIGEgcGFja2V0IHdpdGggYSBGSU4uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjEzOjUzLjk5Mjg4MjIyMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMjA0MTgwMzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIFRDUCBSZWNlaXZlIFBhdGggaW4gSVB2NioqXG5cbk9rYXksIHNvIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBpcyBnZXR0aW5nIGNhbGxlZCBmcm9tIGBuZXQvaXB2Ni90Y3BfaXB2Ni5jYC4gVGhhdCdzIGFuIGludGVyZXN0aW5nIGRldGFpbCBJIG5lZWQgdG8gcXVpY2tseSBleHBsb3JlLiBTaW5jZSBJIGFscmVhZHkga25vdyB0aGUgVENQIHN0YWNrIGluc2lkZSBhbmQgb3V0LCB0aGlzIHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBhbiBJUHY2LXNwZWNpZmljIGFzcGVjdCBvZiB0aGUgZXN0YWJsaXNoZWQgY29ubmVjdGlvbiByZWNlaXZpbmcgcHJvY2Vzcy4gTXkgZ3V0IHRlbGxzIG1lIHRoZXJlIG1pZ2h0IGJlIHNvbWUgSVB2Ni1zcGVjaWZpYyBoYW5kbGluZyBoYXBwZW5pbmcgYXQgdGhhdCBlbnRyeSBwb2ludC4gTGV0J3MgZGVsdmUgaW50byBgbmV0L2lwdjYvdGNwX2lwdjYuY2AgYW5kIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMgYW5kIGZpZ3VyZSBvdXQgd2hhdCBzcGVjaWZpYyBmdW5jdGlvbnMgb3IgY29kZSBwYXRocyBhcmUgYmVpbmcgdXNlZCBhdCB0aGF0IGNhbGwgc2l0ZS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBsb29raW5nIGZvciBkaWZmZXJlbmNlcyBvciBhZGRpdGlvbnMgdG8gdGhlIHN0YW5kYXJkIFRDUCByZWNlaXZlIGhhbmRsaW5nIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgYWRhcHRlZCB0byB0aGUgSVB2NiBlbnZpcm9ubWVudCwgd2hpY2ggbWlnaHQgaW5kaWNhdGUgc3BlY2lmaWMgSVB2NiBoZWFkZXIgb3IgYWRkcmVzcyBwcm9jZXNzaW5nLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQganVtcCBpbnRvIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTI0NiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjEzOjU2LjE5NzA2NTEzNVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1NDM1NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX3Jjdl9lc3RhYmxpc2hlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvdGNwX2lwdjYuYz0xNTY3PWludCB0Y3BfdjZfZG9fcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTU3Ni1cXHQgICBGcm9tIGJhY2tsb2cgaXQgYWx3YXlzIGdvZXMgaGVyZS4gS2VyYm9vbS4uLlxcbm5ldC9pcHY2L3RjcF9pcHY2LmM6MTU3NzpcXHQgICBGb3J0dW5hdGVseSwgdGNwX3Jjdl9lc3RhYmxpc2hlZCBhbmQgcmN2X2VzdGFibGlzaGVkXFxubmV0L2lwdjYvdGNwX2lwdjYuYy0xNTc4LVxcdCAgIGhhbmRsZSB0aGVtIGNvcnJlY3RseSwgYnV0IGl0IGlzIG5vdCBjYXNlIHdpdGhcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTYyNi1cXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jOjE2Mjc6XFx0XFx0dGNwX3Jjdl9lc3RhYmxpc2hlZChzaywgc2tiKTtcXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTE2MjgtXFx0XFx0aWYgKG9wdF9za2IpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjEzOjU2LjI0NDYxMzAxN1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1MjA4NjIzNDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBDb2RlIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIHNlZW1zIHRvIGJlIHdpdGhpbiBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAuIFRoYXQncyB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gdGhhdCB3YXMgZGlyZWN0bHkgbW9kaWZpZWQuIEkgc2hvdWxkIGFsc28gY29uc2lkZXIgaG93IHRoaXMgaW1wYWN0cyByZWxhdGVkIGZ1bmN0aW9ucy4gYHRjcF92YWxpZGF0ZV9pbmNvbWluZ2AgYW5kIGB0Y3BfYWNrYCBhcmUgYm90aCBjYWxsZWQgZnJvbSBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAsIGFuZCB0aG91Z2ggdGhleSdyZSBzdGF0aWMsIHRoZXkgYXJlIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIGluIHRoZSBjb250ZXh0IG9mIHRoaXMgY2hhbmdlLlxuXG5JJ3ZlIGNvbmZpcm1lZCB0aGF0IGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBpcyBpbmRlZWQgdGhlIHByaW1hcnkgZnVuY3Rpb24gdGhhdCByZWNlaXZlZCB0aGUgbW9kaWZpY2F0aW9uczsgdGhhdCdzIHRoZSBmb2N1cy4gR2l2ZW4gdGhhdCBgdGNwX3ZhbGlkYXRlX2luY29taW5nYCBpcyBzdGF0aWMsIGl0cyBzeW1ib2wgcmVwcmVzZW50YXRpb24gaW4gdm1saW51eCBkZXBlbmRzIG9uIGlubGluaW5nLiBIb3dldmVyLCBiZWNhdXNlIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBpcyBub24tc3RhdGljLCBpdCBpcyBkZWZpbml0ZWx5IGEgdmFsaWQgc3ltYm9sLlxuXG5UbyBtYWtlIHN1cmUgSSBoYXZlIGEgY29tcGxldGUgcGljdHVyZSwgSSBuZWVkIHRvIGNoZWNrIGlmIGFueSBvdGhlciBmdW5jdGlvbnMgd2VyZSB0b3VjaGVkIGJ5IHRoaXMgcGF0Y2guIEZyb20gd2hhdCBJIHNlZSwgdGhlIG1vZGlmaWNhdGlvbiBvbmx5IGFmZmVjdHMgYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIGl0c2VsZiwgYW5kIGl0IHJlc2lkZXMgd2l0aGluIGBuZXQvaXB2NC90Y3BfaW5wdXQuY2AuXG5cbk5vdywgSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLiBJIGNhbiBzZWUgdGhhdCBgbmV0L2lwdjQvdGNwX2lucHV0LmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19JTkVUYCBpcyBlbmFibGVkLiBUaW1lIHRvIGNoZWNrIGBuZXQvaXB2NC9NYWtlZmlsZWAgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgcmVsZXZhbnQgYnVpbGQgcnVsZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzUwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjE0OjAxLjQ1MzIzODg2N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAxMDkzMDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX2lucHV0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9NYWtlZmlsZT02PW9iai15ICAgICA6PSByb3V0ZS5vIGluZXRwZWVyLm8gcHJvdG9jb2wubyBcXFxcXFxuLS1cXG5uZXQvaXB2NC9NYWtlZmlsZS05LVxcdCAgICAgaW5ldF90aW1ld2FpdF9zb2NrLm8gaW5ldF9jb25uZWN0aW9uX3NvY2subyBcXFxcXFxubmV0L2lwdjQvTWFrZWZpbGU6MTA6XFx0ICAgICB0Y3AubyB0Y3BfaW5wdXQubyB0Y3Bfb3V0cHV0Lm8gdGNwX3RpbWVyLm8gdGNwX2lwdjQubyBcXFxcXFxubmV0L2lwdjQvTWFrZWZpbGUtMTEtXFx0ICAgICB0Y3BfbWluaXNvY2tzLm8gdGNwX2NvbmcubyB0Y3BfbWV0cmljcy5vIHRjcF9mYXN0b3Blbi5vIFxcXFxcXG4tLVxcbm5ldC9pcHY0L2luZXRfdGltZXdhaXRfc29jay5jPTE2OD1zdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICppbmV0X3R3c2tfYWxsb2MoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvaW5ldF90aW1ld2FpdF9zb2NrLmMtMjIyLS8qIFRoZXNlIGFyZSBhbHdheXMgY2FsbGVkIGZyb20gQkggY29udGV4dC4gIFNlZSBjYWxsZXJzIGluXFxubmV0L2lwdjQvaW5ldF90aW1ld2FpdF9zb2NrLmM6MjIzOiAqIHRjcF9pbnB1dC5jIHRvIHZlcmlmeSB0aGlzLlxcbm5ldC9pcHY0L2luZXRfdGltZXdhaXRfc29jay5jLTIyNC0gKi9cXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTE1NTE9dm9pZCBfX3RjcF9jbGVhbnVwX3JidWYoc3RydWN0IHNvY2sgKnNrLCBpbnQgY29waWVkKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTU1OC1cXG5uZXQvaXB2NC90Y3AuYzoxNTU5OlxcdFxcdGlmICgvKiBPbmNlLXBlci10d28tc2VnbWVudHMgQUNLIHdhcyBub3Qgc2VudCBieSB0Y3BfaW5wdXQuYyAqL1xcbm5ldC9pcHY0L3RjcC5jLTE1NjAtXFx0XFx0ICAgIHRwLVxcdTAwM2VyY3Zfbnh0IC0gdHAtXFx1MDAzZXJjdl93dXAgXFx1MDAzZSBpY3NrLVxcdTAwM2VpY3NrX2Fjay5yY3ZfbXNzIHx8XFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTEyLSAqXFx0XFx0bGludXgvaXB2NC90Y3AuY1xcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MTM6ICpcXHRcXHRsaW51eC9pcHY0L3RjcF9pbnB1dC5jXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0xNC0gKlxcdFxcdGxpbnV4L2lwdjQvdGNwX291dHB1dC5jXFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTIwNDU9c3RhdGljIHZvaWQgdGNwX3Y0X2ZpbGxfY2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IGlwaGRyICppcGgsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTIwNjYtLypcXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjIwNjc6ICpcXHRGcm9tIHRjcF9pbnB1dC5jXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0yMDY4LSAqL1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTQxMDE9c3RhdGljIHZvaWQgdGNwX2Nvbm5lY3RfaW5pdChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDEwOS1cXHQvKiBXZSdsbCBmaXggdGhpcyB1cCB3aGVuIHdlIGdldCBhIHJlc3BvbnNlIGZyb20gdGhlIG90aGVyIGVuZC5cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6NDExMDpcXHQgKiBTZWUgdGNwX2lucHV0LmM6dGNwX3Jjdl9zdGF0ZV9wcm9jZXNzIGNhc2UgVENQX1NZTl9TRU5ULlxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MTExLVxcdCAqL1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTQ0MDI9dTMyIHRjcF9kZWxhY2tfbWF4KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00NDA5LS8qIFNlbmQgb3V0IGEgZGVsYXllZCBhY2ssIHRoZSBjYWxsZXIgZG9lcyB0aGUgcG9saWN5IGNoZWNraW5nXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjQ0MTA6ICogdG8gc2VlIGlmIHdlIHNob3VsZCBldmVuIGJlIGhlcmUuICBTZWUgdGNwX2lucHV0LmM6dGNwX2Fja19zbmRfY2hlY2soKVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00NDExLSAqIGZvciBkZXRhaWxzLlxcbi0tXFxubmV0L2lwdjQvdGNwX3RpbWVyLmM9NTM1PXZvaWQgdGNwX3JldHJhbnNtaXRfdGltZXIoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdGNwX3RpbWVyLmMtNjYxLVxcdCAqIHRodXMgdGhlIG9sZCB2YWx1ZSBtaWdodCBhbHJlYWR5IGJlIHRvbyBoaWdoIGNvbXBhcmVkIHRvIHRoZSB2YWx1ZVxcbm5ldC9pcHY0L3RjcF90aW1lci5jOjY2MjpcXHQgKiBzZXQgYnkgJ3RjcF9zZXRfcnRvJyBpbiB0Y3BfaW5wdXQuYyB3aGljaCByZXNldHMgdGhlIHJ0byB3aXRob3V0XFxubmV0L2lwdjQvdGNwX3RpbWVyLmMtNjYzLVxcdCAqIGJhY2tvZmYuIExpbWl0IHRvIFRDUF9USElOX0xJTkVBUl9SRVRSSUVTIGJlZm9yZSBpbml0aWF0aW5nXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjE0OjAxLjUwMzM1MzE0OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0NTAxNjA5ODIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyB0aGUgTmV0d29yayBTdGFjayBCdWlsZCBQcm9jZXNzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBgbmV0L2lwdjRgIGNvbXBvbmVudCBpcyBiZWluZyBidWlsdCB3aXRoaW4gdGhlIGxhcmdlciBrZXJuZWwgZnJhbWV3b3JrLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCwgYXMgYWx3YXlzLCBpcyB0aGUgYG5ldC9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgdGhlIG9yY2hlc3RyYXRvciBvZiBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIHJ1bGVzIGZvciB0aGlzIHBhcnQgb2YgdGhlIG5ldHdvcmsgc3RhY2suIEkgbmVlZCB0byB0cmFjZSB0aHJvdWdoIGl0IGFuZCBzZWUgaG93IGBpcHY0YCBpcyBzcGVjaWZpY2FsbHkgaW5jb3Jwb3JhdGVkLCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBnb3RjaGFzIGFuZCBkZXBlbmRlbmNpZXMgdGhhdCBuZWVkIHRvIGJlIGNvbnNpZGVyZWQuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQgYG5ldC9NYWtlZmlsZWAgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczMzQsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDoxNDowNi4wMDQ5NjY2NTJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNzg3MzYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdjRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9NYWtlZmlsZT0xNj1vYmotJChDT05GSUdfTkVURklMVEVSKVxcdFxcdCs9IG5ldGZpbHRlci9cXG5uZXQvTWFrZWZpbGU6MTc6b2JqLSQoQ09ORklHX0lORVQpXFx0XFx0Kz0gaXB2NC9cXG5uZXQvTWFrZWZpbGUtMTgtb2JqLSQoQ09ORklHX1RMUylcXHRcXHQrPSB0bHMvXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjE0OjA2LjA1ODc1ODk0M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNzQ3NjkwMjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgVENQIElucHV0IE1vZHVsZSBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCBgQ09ORklHX0lORVRgIGlzIGVuYWJsZWQsIHRoYXQncyBjcnVjaWFsLiBOb3csIG15IG5leHQgbW92ZSBpcyB0byBjaGVjayBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgdGllZCB0byBlaXRoZXIgYHRjcF9pbnB1dC5vYCBvciwgbW9yZSBicm9hZGx5LCBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAuIEknbGwgc3RhcnQgZGlnZ2luZyB0aHJvdWdoIHRoZSByZWxldmFudCBgTWFrZWZpbGVgIGluIHRoZSBgbmV0L2lwdjRgIGRpcmVjdG9yeSwgdGhlIHVzdWFsIHN1c3BlY3QuIEFoLCB0aGVyZSBpdCBpczogYG9iai15IDo9IHJvdXRlLm8gaW5ldHBlZXIubyBwcm90b2NvbC5vIC4uLiB0Y3AubyB0Y3BfaW5wdXQubyAuLi5gIExvb2tzIGxpa2Ugd2hlbmV2ZXIgYENPTkZJR19JTkVUYCBpcyBzZXQgdG8gJ3knLCBgdGNwX2lucHV0Lm9gIGdldHMgY29tcGlsZWQsIHdoaWNoIGlzIGV4cGVjdGVkLiBKdXN0IHRvIGJlIGNvbXBsZXRlbHkgdGhvcm91Z2gsIEnigJlsbCBjcm9zcy1yZWZlcmVuY2UgdGhpcyB3aXRoIHRoZSBgbmV0L2lwdjQvS2NvbmZpZ2AgZmlsZSB0byBjb25maXJtIHRoYXQgYENPTkZJR19JTkVUYCBpcyBkZWZpbmVkIGFuZCB3aGF0IG90aGVyIGRlcGVuZGVuY2llcyBhcmUgaW4gcGxheS4gSXQncyBhbHdheXMgZ29vZCB0byBjb3ZlciBhbGwgYmFzZXMgd2l0aCB0aGlzIHNvcnQgb2YgY29uZmlndXJhdGlvbiBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc1OTIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6MTQ6MDguODA2NDUyMDJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTM3MjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJTkVUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz0zMzA9Y29uZmlnIE5FVF9GT1VfSVBfVFVOTkVMU1xcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zMzgtXFxubmV0L2lwdjQvS2NvbmZpZzozMzk6Y29uZmlnIElORVRfQUhcXG5uZXQvaXB2NC9LY29uZmlnLTM0MC1cXHR0cmlzdGF0ZSBcXFwiSVA6IEFIIHRyYW5zZm9ybWF0aW9uXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zNTMtXFxubmV0L2lwdjQvS2NvbmZpZzozNTQ6Y29uZmlnIElORVRfRVNQXFxubmV0L2lwdjQvS2NvbmZpZy0zNTUtXFx0dHJpc3RhdGUgXFxcIklQOiBFU1AgdHJhbnNmb3JtYXRpb25cXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM2OC1cXG5uZXQvaXB2NC9LY29uZmlnOjM2OTpjb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxcbm5ldC9pcHY0L0tjb25maWctMzcwLVxcdHRyaXN0YXRlIFxcXCJJUDogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM4MS1cXG5uZXQvaXB2NC9LY29uZmlnOjM4Mjpjb25maWcgSU5FVF9FU1BJTlRDUFxcbm5ldC9pcHY0L0tjb25maWctMzgzLVxcdGJvb2wgXFxcIklQOiBFU1AgaW4gVENQIGVuY2Fwc3VsYXRpb24gKFJGQyA4MjI5KVxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzkzLVxcbm5ldC9pcHY0L0tjb25maWc6Mzk0OmNvbmZpZyBJTkVUX0lQQ09NUFxcbm5ldC9pcHY0L0tjb25maWctMzk1LVxcdHRyaXN0YXRlIFxcXCJJUDogSVBDb21wIHRyYW5zZm9ybWF0aW9uXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MDMtXFxubmV0L2lwdjQvS2NvbmZpZzo0MDQ6Y29uZmlnIElORVRfVEFCTEVfUEVSVFVSQl9PUkRFUlxcbm5ldC9pcHY0L0tjb25maWctNDA1LVxcdGludCBcXFwiSU5FVDogU291cmNlIHBvcnQgcGVydHVyYmF0aW9uIHRhYmxlIHNpemUgKGFzIHBvd2VyIG9mIDIpXFxcIiBpZiBFWFBFUlRcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNDEzLVxcbm5ldC9pcHY0L0tjb25maWc6NDE0OmNvbmZpZyBJTkVUX1hGUk1fVFVOTkVMXFxubmV0L2lwdjQvS2NvbmZpZy00MTUtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNDE4LVxcbm5ldC9pcHY0L0tjb25maWc6NDE5OmNvbmZpZyBJTkVUX1RVTk5FTFxcbm5ldC9pcHY0L0tjb25maWctNDIwLVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTQyMi1cXG5uZXQvaXB2NC9LY29uZmlnOjQyMzpjb25maWcgSU5FVF9ESUFHXFxubmV0L2lwdjQvS2NvbmZpZy00MjQtXFx0dHJpc3RhdGUgXFxcIklORVQ6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNDM0LVxcbm5ldC9pcHY0L0tjb25maWc6NDM1OmNvbmZpZyBJTkVUX1RDUF9ESUFHXFxubmV0L2lwdjQvS2NvbmZpZy00MzYtXFx0ZGVwZW5kcyBvbiBJTkVUX0RJQUdcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNDM4LVxcbm5ldC9pcHY0L0tjb25maWc6NDM5OmNvbmZpZyBJTkVUX1VEUF9ESUFHXFxubmV0L2lwdjQvS2NvbmZpZy00NDAtXFx0dHJpc3RhdGUgXFxcIlVEUDogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00NDYtXFxubmV0L2lwdjQvS2NvbmZpZzo0NDc6Y29uZmlnIElORVRfUkFXX0RJQUdcXG5uZXQvaXB2NC9LY29uZmlnLTQ0OC1cXHR0cmlzdGF0ZSBcXFwiUkFXOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTQ1NC1cXG5uZXQvaXB2NC9LY29uZmlnOjQ1NTpjb25maWcgSU5FVF9ESUFHX0RFU1RST1lcXG5uZXQvaXB2NC9LY29uZmlnLTQ1Ni1cXHRib29sIFxcXCJJTkVUOiBhbGxvdyBwcml2aWxlZ2VkIHByb2Nlc3MgdG8gYWRtaW5pc3RyYXRpdmVseSBjbG9zZSBzb2NrZXRzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDoxNDowOC44NTE5OTIzNzNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzI4MjY3MTUxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgcXVlcnk6XG5cbioqVHJhY2luZyB0aGUgQ29uZmlndXJhdGlvbiBvZiBgY29uZmlnIElORVRgKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGBjb25maWcgSU5FVGAgdmFyaWFibGUgb3IgZGlyZWN0aXZlIGlzIGRlZmluZWQgd2l0aGluIHRoaXMgc3lzdGVtLiBJIGNhbid0IGp1c3QgYXNzdW1lIEkgYWxyZWFkeSBrbm93LCBzbyBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkbyBhIHF1aWNrIGFuZCBkaXJ0eSBzZWFyY2ggdG8gbG9jYXRlIGl0cyBkZWZpbml0aW9uLiBUaGUgYmVzdCB3YXkgdG8gZG8gdGhhdCB3b3VsZCBiZSB3aXRoIGBncmVwYC4gSSB3YW50IHRvIGJlIHNwZWNpZmljLCBJJ2xsIHVzZSBhIGRvbGxhciBzaWduIGAkYCB0byBlbnN1cmUgSSdtIGZpbmRpbmcgdGhlICpleGFjdCogbWF0Y2ggb2YgYGNvbmZpZyBJTkVUYCBhdCB0aGUgZW5kIG9mIGEgbGluZSwgb3IgYSB2YXJpYWJsZSB3aXRoIHRoYXQgZXhhY3QgbmFtZS4gVGhpcyBzaG91bGQgaGVscCBtZSBhdm9pZCBhY2NpZGVudGFsbHkgcGlja2luZyB1cCBtYXRjaGVzIHdoZXJlIGBJTkVUYCBpcyBwYXJ0IG9mIGEgbGFyZ2VyIHdvcmQgb3IgdmFyaWFibGUgbmFtZSBsaWtlIGBJTkVUX0FERFJFU1NgLiBVc2luZyBgZ3JlcCBcImNvbmZpZyBJTkVUJFwiYCBzaG91bGQgZ2l2ZSBtZSBhIGNvbmNpc2UgbGlzdGluZyBvZiBhbnkgZmlsZXMgd2hlcmUgdGhhdCBzcGVjaWZpYyBkaXJlY3RpdmUgaXMgZGVmaW5lZCwgd2hpY2ggd2lsbCBwcm92aWRlIHRoZSBjb250ZXh0IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCB1c2FnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3NTksIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDoxNDoxMi4xMzQ2Njc0NDNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NTEzODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJTkVUJFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTk5PWNvbmZpZyBORVRfSEFORFNIQUtFX0tVTklUX1RFU1RcXG4tLVxcbm5ldC9LY29uZmlnLTExMy1cXG5uZXQvS2NvbmZpZzoxMTQ6Y29uZmlnIElORVRcXG5uZXQvS2NvbmZpZy0xMTUtXFx0Ym9vbCBcXFwiVENQL0lQIG5ldHdvcmtpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjE0OjEyLjIwMzE4NTgwMloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMjkyNTg1NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFieXJpbnRoKipcblxuT2theSwgc28gSSdtIGRlYWxpbmcgd2l0aCB0aGUgYElORVRgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaXRzIGNvbnRleHQgd2l0aGluIHRoZSBicm9hZGVyIG5ldHdvcmtpbmcgY29uZmlndXJhdGlvbi4gVGhlIGhpbnQgcG9pbnRzIHRvIGBuZXQvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBsaW5lIDExNC4gSG93ZXZlciwgdGhhdCdzIHJhcmVseSBlbm91Z2ggY29udGV4dCBpbiBhIHNwcmF3bGluZyBjb25maWd1cmF0aW9uIGZpbGUgbGlrZSB0aGlzIG9uZS4gVG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQgYElORVRgIGFjdHVhbGx5ICptZWFucyogYW5kIHdoYXQgaXRzIGRlcGVuZGVuY2llcyBtaWdodCBiZSwgSSdtIGdvaW5nIHRvIGJhY2sgdXAgYSBiaXQgYW5kIHRha2UgYSBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBsaW5lcy4gTGV0J3Mgc2VlLi4uIGxpbmVzIDExMCB0aHJvdWdoIDEzMCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgZmVlbCBmb3IgdGhlIGxvY2FsIGVudmlyb25tZW50IG9mIHRoaXMgb3B0aW9uLiBUaGlzIHR5cGljYWxseSByZXZlYWxzIHRoZSByZWxhdGlvbnNoaXBzIHdpdGggb3RoZXIgY29uZmlnIG9wdGlvbnMsIHRoZSBoZWxwIHRleHQgZGVzY3JpYmluZyBpdCwgYW5kIGFueSBkZXBlbmRlbmNpZXMgb3IgZGVmYXVsdCB2YWx1ZXMuIEl0IHdpbGwgdGFrZSBhIGZldyBtaW51dGVzIHRvIHJlYWQgYnV0IGl0J3MgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0d2Vha2luZyB0aGlzIHNwZWNpZmljIG9wdGlvbi4gSSdsbCBmb2N1cyBvbiByZWxhdGlvbnNoaXBzIGFuZCBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MDg2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6MTQ6MTQuNDk1Nzc0NTUyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDExMDpcXHRcXG4gMTExOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcmVmZXJcXG4gMTEyOlxcdFxcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24gaW4gRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva3VuaXQvLlxcbiAxMTM6XFx0XFxuIDExNDpcXHRjb25maWcgSU5FVFxcbiAxMTU6XFx0XFx0Ym9vbCBcXFwiVENQL0lQIG5ldHdvcmtpbmdcXFwiXFxuIDExNjpcXHRcXHRoZWxwXFxuIDExNzpcXHRcXHQgIFRoZXNlIGFyZSB0aGUgcHJvdG9jb2xzIHVzZWQgb24gdGhlIEludGVybmV0IGFuZCBvbiBtb3N0IGxvY2FsXFxuIDExODpcXHRcXHQgIEV0aGVybmV0cy4gSXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRvIHNheSBZIGhlcmUgKHRoaXMgd2lsbCBlbmxhcmdlXFxuIDExOTpcXHRcXHQgIHlvdXIga2VybmVsIGJ5IGFib3V0IDQwMCBLQiksIHNpbmNlIHNvbWUgcHJvZ3JhbXMgKGUuZy4gdGhlIFggd2luZG93XFxuIDEyMDpcXHRcXHQgIHN5c3RlbSkgdXNlIFRDUC9JUCBldmVuIGlmIHlvdXIgbWFjaGluZSBpcyBub3QgY29ubmVjdGVkIHRvIGFueVxcbiAxMjE6XFx0XFx0ICBvdGhlciBjb21wdXRlci4gWW91IHdpbGwgZ2V0IHRoZSBzby1jYWxsZWQgbG9vcGJhY2sgZGV2aWNlIHdoaWNoXFxuIDEyMjpcXHRcXHQgIGFsbG93cyB5b3UgdG8gcGluZyB5b3Vyc2VsZiAoZ3JlYXQgZnVuLCB0aGF0ISkuXFxuIDEyMzpcXHRcXG4gMTI0OlxcdFxcdCAgRm9yIGFuIGV4Y2VsbGVudCBpbnRyb2R1Y3Rpb24gdG8gTGludXggbmV0d29ya2luZywgcGxlYXNlIHJlYWQgdGhlXFxuIDEyNTpcXHRcXHQgIExpbnV4IE5ldHdvcmtpbmcgSE9XVE8sIGF2YWlsYWJsZSBmcm9tXFxuIDEyNjpcXHRcXHQgIFxcdTAwM2NodHRwOi8vd3d3LnRsZHAub3JnL2RvY3MuaHRtbCNob3d0b1xcdTAwM2UuXFxuIDEyNzpcXHRcXG4gMTI4OlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUgYW5kIGFsc28gdG8gXFxcIi9wcm9jIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiIGFuZFxcbiAxMjk6XFx0XFx0ICBcXFwiU3lzY3RsIHN1cHBvcnRcXFwiIGJlbG93LCB5b3UgY2FuIGNoYW5nZSB2YXJpb3VzIGFzcGVjdHMgb2YgdGhlXFxuIDEzMDpcXHRcXHQgIGJlaGF2aW9yIG9mIHRoZSBUQ1AvSVAgY29kZSBieSB3cml0aW5nIHRvIHRoZSAodmlydHVhbCkgZmlsZXMgaW5cXG4gMTMxOlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9pcHY0Lyo7IHRoZSBvcHRpb25zIGFyZSBleHBsYWluZWQgaW4gdGhlIGZpbGVcXG4gMTMyOlxcdFxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3RcXHUwMDNlLlxcbiAxMzM6XFx0XFxuIDEzNDpcXHRcXHQgIFNob3J0IGFuc3dlcjogc2F5IFkuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjE0OjE0LjQ5NTg1MDAxMloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNjc3NzU0MDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBDT05GSUdfSU5FVCBhbmQgVENQIEludmFsaWQgUmF0ZSBMaW1pdCoqXG5cbkFscmlnaHQsIHNvIGBDT05GSUdfSU5FVGAgbG9va3MgY2xlYW4g4oCTIG5vIGV4cGxpY2l0IGRlcGVuZGVuY2llcyBiZXNpZGVzIGBORVRgLCB3aGljaCBpcyBiYXNpY2FsbHkgYSBnaXZlbi4gSSdtIGFsd2F5cyB0aG9yb3VnaCB0aG91Z2gsIHNvIGJlZm9yZSBJIG1vdmUgb24sIEkgd2FudCB0byBjb25maXJtIHRoZXJlIGFyZW4ndCBhbnkgaGlkZGVuIGltcGxpY2F0aW9ucyBvciBvdGhlciBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuXG5cbk5vdywgdGhhdCBwYWNrZXRkcmlsbCB0ZXN0Li4uIGBzeXNjdGwgLXEgbmV0LmlwdjQudGNwX2ludmFsaWRfcmF0ZWxpbWl0PTBgLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgdGhpcyBzcGVjaWZpYyBzeXNjdGwgaXMgYmVpbmcgc2V0LiBJdCdzIHRoZSBgdGNwX2ludmFsaWRfcmF0ZWxpbWl0YCB0aGF0J3MgdGhlIGtleS4gQmVzdCB0byBkbyBhIHF1aWNrIGdyZXAuIExldCdzIHNlZSB3aGVyZSB0aGF0IHZhcmlhYmxlIGlzIHVzZWQgYW5kIHdoYXQncyBnb2luZyBvbi4gR290dGEgc3RheSBvbiB0b3Agb2YgYWxsIHRoZSBtb3ZpbmcgcGFydHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODAzLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDoxNDoxNy4xNzM2MDY1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDQ2OTQ1NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX2ludmFsaWRfcmF0ZWxpbWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmM9NjI3PXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjRfbmV0X3RhYmxlW10gPSB7XFxuLS1cXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYy0xNDI2LVxcdHtcXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYzoxNDI3OlxcdFxcdC5wcm9jbmFtZVxcdD0gXFxcInRjcF9pbnZhbGlkX3JhdGVsaW1pdFxcXCIsXFxubmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmM6MTQyODpcXHRcXHQuZGF0YVxcdFxcdD0gXFx1MDAyNmluaXRfbmV0LmlwdjQuc3lzY3RsX3RjcF9pbnZhbGlkX3JhdGVsaW1pdCxcXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYy0xNDI5LVxcdFxcdC5tYXhsZW5cXHRcXHQ9IHNpemVvZihpbnQpLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9Mzk4OT1zdGF0aWMgYm9vbCBfX3RjcF9vb3dfcmF0ZV9saW1pdGVkKHN0cnVjdCBuZXQgKm5ldCwgaW50IG1pYl9pZHgsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0zOTk4LVxcdFxcdGlmICgwIFxcdTAwM2M9IGVsYXBzZWQgXFx1MDAyNlxcdTAwMjZcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzozOTk5OlxcdFxcdCAgICBlbGFwc2VkIFxcdTAwM2MgUkVBRF9PTkNFKG5ldC1cXHUwMDNlaXB2NC5zeXNjdGxfdGNwX2ludmFsaWRfcmF0ZWxpbWl0KSkge1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQwMDAtXFx0XFx0XFx0TkVUX0lOQ19TVEFUUyhuZXQsIG1pYl9pZHgpO1xcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYz0zNDMzPXN0YXRpYyBpbnQgX19uZXRfaW5pdCB0Y3Bfc2tfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTM0OTQtXFx0bmV0LVxcdTAwM2VpcHY0LnN5c2N0bF90Y3BfYXV0b2NvcmtpbmcgPSAxO1xcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzQ5NTpcXHRuZXQtXFx1MDAzZWlwdjQuc3lzY3RsX3RjcF9pbnZhbGlkX3JhdGVsaW1pdCA9IEhaLzI7XFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zNDk2LVxcdG5ldC1cXHUwMDNlaXB2NC5zeXNjdGxfdGNwX3BhY2luZ19zc19yYXRpbyA9IDIwMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6MTQ6MTcuNDE4MzA3MjhaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mjc5NjA4NTExOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYHN5c2N0bF90Y3BfaW52YWxpZF9yYXRlbGltaXRgIGluIHRoZSBUQ1AvSU5FVCBDb250ZXh0KipcblxuT2theSwgc28gYHN5c2N0bF90Y3BfaW52YWxpZF9yYXRlbGltaXRgIGlzIGNsZWFybHkgcGFydCBvZiB0aGUgY29yZSBUQ1AvSU5FVCBzdGFjay4gTGV0J3MgbWFrZSBzdXJlIHdlJ3JlIGZvY3VzZWQgb24gdGhlIGNvcnJlY3Qgc3ltYm9scyBoZXJlLiBJJ2xsIGRvdWJsZS1jaGVjayB0byBzZWUgaWYgYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIGlzIHRoZSBrZXkgYXJlYS4gQXJlIHRoZXJlICpvdGhlciogc3ltYm9scyB0aGF0IG1pZ2h0IGJlIGltcG9ydGFudD9cblxuQWxyaWdodCwgbGV0J3MgZXhhbWluZSB0aGUgY2FsbGVycyBvciByZWxhdGVkIGhlbHBlciBmdW5jdGlvbnMgZm9yIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBhcyB0aGF0J3MgdGhlIG9uZSB0aGF0IHdhcyBtb2RpZmllZC4gQWhhISBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAgKmNhbGxzKiBgdGNwX3ZhbGlkYXRlX2luY29taW5nYCBvbiB0aGUgc2xvdyBwYXRoLCB0aGF0IG1ha2VzIHNlbnNlLiBIbW0sIHdhaXQgYSBtaW51dGUsIGB0Y3BfdmFsaWRhdGVfaW5jb21pbmdgIGlzICpzdGF0aWMqLiBUaGF0IG1lYW5zIGl0J3Mgbm90IGV4cG9ydGVkLiBMZXQgbWUganVzdCBjb25maXJtIGl0cyBzaWduYXR1cmU6IGBzdGF0aWMgYm9vbCB0Y3BfdmFsaWRhdGVfaW5jb21pbmcoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdGNwaGRyICp0aCwgaW50IHN5bl9pbmVycilgLlxuXG5JJ2xsIGNoZWNrIGhvdyBtYW55IHRpbWVzIGl0J3MgY2FsbGVkIHdpdGhpbiBgdGNwX2lucHV0LmNgIGp1c3QgdG8gYmUgY2VydGFpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgcmF0ZWxpbWl0LCBhbmQgaWYgdGhlIGZhY3QgdGhhdCBpdCdzIHN0YXRpYyBpcyBhIGNvbnN0cmFpbnQgb24gb3VyIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDU3MSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDoxNDoyMC4yMTQzOTQ1MDlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MDMzODcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF92YWxpZGF0ZV9pbmNvbWluZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwX2lucHV0LmM9NjMxMD1zdGF0aWMgYm9vbCB0Y3BfcmVzZXRfY2hlY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjMyMS0gKi9cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo2MzIyOnN0YXRpYyBib29sIHRjcF92YWxpZGF0ZV9pbmNvbWluZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjMyMy1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoLCBpbnQgc3luX2luZXJyKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9NjUwMT12b2lkIHRjcF9yY3ZfZXN0YWJsaXNoZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjY3Mi12YWxpZGF0ZTpcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo2NjczOlxcdGlmICghdGNwX3ZhbGlkYXRlX2luY29taW5nKHNrLCBza2IsIHRoLCAxKSlcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy02Njc0LVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTcxNTM9dGNwX3Jjdl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTcyMjctXFx0fVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjcyMjg6XFx0aWYgKCF0Y3BfdmFsaWRhdGVfaW5jb21pbmcoc2ssIHNrYiwgdGgsIDApKVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTcyMjktXFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjE0OjIwLjI3MDQzMjc2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc0NTI2NTA1NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgUmVhc29uaW5nIG9uIEluY2x1ZGluZyBGdW5jdGlvbnMgaW4gdGhlIFJldmlldyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB3aGljaCBmdW5jdGlvbnMgdG8gaW5jbHVkZSBpbiB0aGlzIHJldmlldy4gYHRjcF92YWxpZGF0ZV9pbmNvbWluZ2AgZ2V0cyBjYWxsZWQgZnJvbSBib3RoIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBhbmQgYHRjcF9yY3Zfc3RhdGVfcHJvY2Vzc2AuIEl0J3MgYSBkZWNlbnQtc2l6ZWQgZnVuY3Rpb24gYW5kIGNhbGxlZCBmcm9tIG11bHRpcGxlIHBsYWNlcywgc28gdGhlIGNvbXBpbGVyICptaWdodCogbm90IGlubGluZSBpdCwgb3IgYXQgbGVhc3Qga2VlcCBhIHN5bWJvbCBhcm91bmQgZm9yIGl0LiBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAsIG9uIHRoZSBvdGhlciBoYW5kLCBpcyBkZWZpbml0ZWx5IG5vbi1zdGF0aWMgYW5kICpoYXMqIGEgc3ltYm9sLiBUaGUgcXVlc3Rpb24gaXMsIHNob3VsZCBJIGxpc3QgYm90aCwgb3IganVzdCBgdGNwX3Jjdl9lc3RhYmxpc2hlZGA/XG5cbldhaXQgYSBtaW51dGUsIHRoZSBpbnN0cnVjdGlvbnMuIFRoZSBpbnN0cnVjdGlvbnMgY2xlYXJseSBzdGF0ZSB0aGF0IEkgbmVlZCB0byBsaXN0IGZ1bmN0aW9ucyB0aGF0IGVpdGhlciBpbXBsZW1lbnQgdGhlIGFsdGVyZWQgbG9naWMgZGlyZWN0bHksIG9yIGFyZSBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzLiBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAgaXMgKmV4YWN0bHkqIHRoZSBmdW5jdGlvbiB0aGF0J3MgYmVlbiBhbHRlcmVkLiBJbmNsdWRpbmcgYm90aCBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAgYW5kIGB0Y3BfdmFsaWRhdGVfaW5jb21pbmdgIHNlZW1zIHZlcnkgZm9jdXNlZCBhbmQgdGFyZ2V0ZWQuIEkgc2hvdWxkIGRlZmluaXRlbHkgaW5jbHVkZSBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAuXG5cbkJ1dCBsZXQgbWUgcXVpY2tseSBjaGVjayBpZiBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAgaXMgbGlrZSwgKnViaXF1aXRvdXMqLiBJcyBpdCBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5dGhpbmcgdGhhdCBydW5zIHVuZGVyIHN5emthbGxlcj8gTm8uIFN5emthbGxlciBydW5zIHN5c2NhbGxzIGFjcm9zcyBhbGwgc3Vic3lzdGVtczogdmZzLCBtbSwgYnBmLCB1c2IsIG5ldCwgZXRjLiBUQ1AgcGFja2V0IHJlY2VpdmUgb25seSBleGVjdXRlcyB3aGVuIFRDUCBuZXR3b3JrIHBhY2tldHMgYXJlIHByb2Nlc3NlZCBieSBhIFRDUCBzb2NrZXQgaW4gRVNUQUJMSVNIRUQgc3RhdGUuIFRoYXQncyBub3QgbGlrZSBtZW1vcnkgYWxsb2NhdG9ycywgbXV0ZXhlcywgcGFnZSBmYXVsdHMsIG9yIG90aGVyIHN1Y2ggZnVuZGFtZW50YWwsIHdpZGVseS11c2VkIHRoaW5ncy4gU28sIGl0J3MgcHJldHR5IHRhcmdldGVkLlxuXG5MZXQncyBjaGVjayBgV29ydGhGdXp6aW5nYCBuZXh0LCBpdCBpcywgaW4gZmFjdCwgYFdvcnRoRnV6emluZzogdHJ1ZWAuIFRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGBbXCJJTkVUXCJdYCB3aGljaCBpcyB3aGF0IGlzIGV4cGVjdGVkLiBUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIGBbXCJ0Y3BfcmN2X2VzdGFibGlzaGVkXCIsIFwidGNwX3ZhbGlkYXRlX2luY29taW5nXCJdYCBzbyB0aGF0J3MgZ29vZC5cblxuT2theSwgbGV0J3MgbmFpbCBkb3duIGEgcmVhbGx5IGNsZWFyIHN1bW1hcnkgc3RhdGVtZW50IGZvciB0aGlzLiBIZXJlJ3Mgd2hhdCBJJ3ZlIGdvdDpcblxuXCJUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgVENQIGZhc3QtcGF0aCBoZWFkZXIgcHJlZGljdGlvbiBjaGVjayBpbiBgdGNwX3Jjdl9lc3RhYmxpc2hlZCgpYCB0byBlbnN1cmUgaW5jb21pbmcgQUNLIHNlcXVlbmNlIG51bWJlcnMgYXJlIHdpdGhpbiBgW1NORC5VTkEsIFNORC5OWFRdYC4gUGFja2V0cyBjYXJyeWluZyBvbGQgQUNLcyBub3cgZmFsbCBiYWNrIHRvIHRoZSBzbG93IHBhdGggKGB0Y3BfdmFsaWRhdGVfaW5jb21pbmcoKWApLCBtaXRpZ2F0aW5nIGJsaW5kIGRhdGEgaW5qZWN0aW9uIGF0dGFja3MgcGVyIFJGQyA1OTYxLiBUaGlzIG1vZGlmaWVzIGNvcmUgVENQIGluY29taW5nIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgbmV0d29yayBmdXp6aW5nIHdpdGggVENQIHNvY2tldHMuXCJcblxuVGhhdCBzaG91bGQgYmUgZ29vZC4gVGltZSB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQ1MSwiT3V0cHV0VG9rZW5zIjoxMzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6MTQ6MjcuNzIzMDg2OTU4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzIyNTM5MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3BfcmN2X2VzdGFibGlzaGVkXCIsXG4gICAgXCJ0Y3BfdmFsaWRhdGVfaW5jb21pbmdcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhbHRlcnMgdGhlIGZhc3QtcGF0aCBoZWFkZXIgcHJlZGljdGlvbiBjb25kaXRpb24gaW4gdGNwX3Jjdl9lc3RhYmxpc2hlZCgpIHRvIHJlcXVpcmUgdGhlIEFDSyBzZXF1ZW5jZSBudW1iZXIgdG8gZmFsbCBiZXR3ZWVuIFNORC5VTkEgYW5kIFNORC5OWFQuIFNlZ21lbnRzIHdpdGggb2xkIEFDS3MgYXJlIG5vdyByZWRpcmVjdGVkIHRvIHRoZSBzbG93IHBhdGggKHRjcF92YWxpZGF0ZV9pbmNvbWluZygpKSB0byBwcmV2ZW50IFJGQyA1OTYxIGJsaW5kIGRhdGEgaW5qZWN0aW9uLiBUaGlzIGFsdGVycyBjb3JlIFRDUCByZWNlaXZlIGxvZ2ljIGFuZCBpcyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIFRDUCBzb2NrZXQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX3Jjdl9lc3RhYmxpc2hlZFwiLFxuICAgIFwidGNwX3ZhbGlkYXRlX2luY29taW5nXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWx0ZXJzIHRoZSBmYXN0LXBhdGggaGVhZGVyIHByZWRpY3Rpb24gY29uZGl0aW9uIGluIHRjcF9yY3ZfZXN0YWJsaXNoZWQoKSB0byByZXF1aXJlIHRoZSBBQ0sgc2VxdWVuY2UgbnVtYmVyIHRvIGZhbGwgYmV0d2VlbiBTTkQuVU5BIGFuZCBTTkQuTlhULiBTZWdtZW50cyB3aXRoIG9sZCBBQ0tzIGFyZSBub3cgcmVkaXJlY3RlZCB0byB0aGUgc2xvdyBwYXRoICh0Y3BfdmFsaWRhdGVfaW5jb21pbmcoKSkgdG8gcHJldmVudCBSRkMgNTk2MSBibGluZCBkYXRhIGluamVjdGlvbi4gVGhpcyBhbHRlcnMgY29yZSBUQ1AgcmVjZWl2ZSBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBUQ1Agc29ja2V0IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjE0OjI3Ljc5NTM0Nzc0NloiLCJTZXEiOjM1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzIzMTk0NDg5MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDoxNDoyNy43OTU3NTc4MTZaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMjMxOTAzNDE0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGNwX3Jjdl9lc3RhYmxpc2hlZCgpIHRvIHJlcXVpcmUgdGhlIGluY29taW5nIEFDSyBzZXF1ZW5jZSBudW1iZXIgdG8gYmUgd2l0aGluIFtTTkQuVU5BLCBTTkQuTlhUXSB2aWEgYmV0d2VlbihUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZWFja19zZXEsIHRwLVxcdTAwM2VzbmRfdW5hLCB0cC1cXHUwMDNlc25kX254dCkgYmVmb3JlIHRha2luZyB0aGUgVENQIGZhc3QgcGF0aCwgZGl2ZXJ0aW5nIHBhY2tldHMgd2l0aCBvbGQgQUNLcyB0byB0aGUgc2xvdyBwYXRoIGZvciBwcm9wZXIgUkZDIDU5NjEgdmFsaWRhdGlvbi5cXG5cXG5BbGwgdmFyaWFibGVzIGludm9sdmVkIChUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZWFja19zZXEsIHRwLVxcdTAwM2VzbmRfdW5hLCB0cC1cXHUwMDNlc25kX254dCkgYXJlIGluaXRpYWxpemVkIHUzMiB2YWx1ZXMuIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBtZW1vcnksIGFsdGVyIGJ1ZmZlciBzaXplcywgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjMxOTgzM2EwZjA1MzNkYjdmOGQ2OGEyMjYwMjBkZTI5MDdjNWU2YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDE0IDEwOjEyOjQ4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lucHV0LmMgYi9uZXQvaXB2NC90Y3BfaW5wdXQuY1xuaW5kZXggZGFmZjkzZDUxMzQyOC4uMDNkMzE3YTU4MTMyNCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9pbnB1dC5jXG4rKysgYi9uZXQvaXB2NC90Y3BfaW5wdXQuY1xuQEAgLTY0OTAsNiArNjQ5MCw3IEBAIHN0YXRpYyBib29sIHRjcF92YWxpZGF0ZV9pbmNvbWluZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gICpcdCAgb3IgcHVyZSByZWNlaXZlcnMgKHRoaXMgbWVhbnMgZWl0aGVyIHRoZSBzZXF1ZW5jZSBudW1iZXIgb3IgdGhlIGFja1xuICAqXHQgIHZhbHVlIG11c3Qgc3RheSBjb25zdGFudClcbiAgKlx0LSBVbmV4cGVjdGVkIFRDUCBvcHRpb24uXG4rICpcdC0gQUNLIHNlcXVlbmNlIG51bWJlciBpcyBvdXRzaWRlIFtTTkQuVU5BLCBTTkQuTlhUXS5cbiAgKlxuICAqXHRXaGVuIHRoZXNlIGNvbmRpdGlvbnMgYXJlIG5vdCBzYXRpc2ZpZWQgaXQgZHJvcHMgaW50byBhIHN0YW5kYXJkXG4gICpcdHJlY2VpdmUgcHJvY2VkdXJlIHBhdHRlcm5lZCBhZnRlciBSRkM3OTMgdG8gaGFuZGxlIGFsbCBjYXNlcy5cbkBAIC02NTM5LDcgKzY1NDAsNyBAQCB2b2lkIHRjcF9yY3ZfZXN0YWJsaXNoZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0aWYgKCh0Y3BfZmxhZ193b3JkKHRoKSBcdTAwMjYgVENQX0hQX0JJVFMpID09IHRwLVx1MDAzZXByZWRfZmxhZ3MgXHUwMDI2XHUwMDI2XG4gXHQgICAgVENQX1NLQl9DQihza2IpLVx1MDAzZXNlcSA9PSB0cC1cdTAwM2VyY3Zfbnh0IFx1MDAyNlx1MDAyNlxuLVx0ICAgICFhZnRlcihUQ1BfU0tCX0NCKHNrYiktXHUwMDNlYWNrX3NlcSwgdHAtXHUwMDNlc25kX254dCkpIHtcbitcdCAgICBiZXR3ZWVuKFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VhY2tfc2VxLCB0cC1cdTAwM2VzbmRfdW5hLCB0cC1cdTAwM2VzbmRfbnh0KSkge1xuIFx0XHRpbnQgdGNwX2hlYWRlcl9sZW4gPSB0cC1cdTAwM2V0Y3BfaGVhZGVyX2xlbjtcbiBcdFx0czMyIGRlbHRhID0gMDtcbiBcdFx0aW50IGZsYWcgPSAwO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3BfcmZjNTk2MV9yZWplY3Qtb2xkLWFjay5wa3QgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX3JmYzU5NjFfcmVqZWN0LW9sZC1hY2sucGt0XG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMzJkZDlkZTFkMzY2MlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3BhY2tldGRyaWxsL3RjcF9yZmM1OTYxX3JlamVjdC1vbGQtYWNrLnBrdFxuQEAgLTAsMCArMSwyOSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rYC4vZGVmYXVsdHMuc2hcbitzeXNjdGwgLXEgbmV0LmlwdjQudGNwX2ludmFsaWRfcmF0ZWxpbWl0PTBcbitgXG4rXG4rLy8gVGVzdCByZWplY3Rpb24gb2YgZGF0YSBzZWdtZW50cyBjYXJyeWluZyBleGNlc3NpdmVseSBvbGQgQUNLc1xuK1xuKzAgc29ja2V0KC4uLiwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQKSA9IDNcbisrMCBzZXRzb2Nrb3B0KDMsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgWzFdLCA0KSA9IDBcbisrMCBiaW5kKDMsIC4uLiwgLi4uKSA9IDBcbisrMCBsaXN0ZW4oMywgMTAyNCkgPSAwXG4rXG4rLy8gLS0tLS0tLS0tLS0tLS0tLSBIYW5kc2hha2UgLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuKyswIFx1MDAzYyBTIDA6MCgwKSB3aW4gNjU1MzVcbisrMCBcdTAwM2UgUy4gMDowKDApIGFjayAxIFx1MDAzYy4uLlx1MDAzZVxuKyswIFx1MDAzYyAuIDE6MSgwKSBhY2sgMSB3aW4gNjU1MzVcbisrMCBhY2NlcHQoMywgLi4uLCAuLi4pID0gNFxuK1xuKy8vIFBvcHVsYXRlIHJlY2VpdmUgbWVtb3J5IHNvIHRoZSBmb2xsb3dpbmcgc2VnbWVudCBjYW4gdXNlXG4rLy8gaGVhZGVyIHByZWRpY3Rpb24uXG4rKzAgXHUwMDNjIFAuIDE6NTAxKDUwMCkgYWNrIDEgd2luIDY1NTM1XG4rKzAgXHUwMDNlIC4gMToxKDApIGFjayA1MDFcbitcbisvLyBTZW5kIGFuIGluLXNlcXVlbmNlIGRhdGEgc2VnbWVudCBjYXJyeWluZyBhbiBleGNlc3NpdmVseSBvbGQgQUNLLlxuKyswIFx1MDAzYyBQLiA1MDE6MTUwMSgxMDAwKSBhY2sgMjc5NDk2NzM5NyB3aW4gNjU1MzVcbitcbisvLyBDaGFsbGVuZ2UgQUNLOyBSQ1YuTlhUIG11c3QgcmVtYWluIDUwMS5cbisrMCBcdTAwM2UgLiAxOjEoMCkgYWNrIDUwMVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6MTQ6MjcuNzk1NzU4NzE2WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU3MjY3NjA5MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVENQIElucHV0IFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhdGNoIHRvIGBuZXQvaXB2NC90Y3BfaW5wdXQuY2AuIEl0J3MgYSBmYWlybHkgZm9jdXNlZCBjaGFuZ2UsIHdoaWNoIGlzIHVzdWFsbHkgYSBnb29kIHNpZ24uIExvb2tzIGxpa2UgdGhleSBhcmUgYWRkaW5nIGEgbmV3IGNvbmRpdGlvbiB0byB0aGUgYHRjcF92YWxpZGF0ZV9pbmNvbWluZ2AgZnVuY3Rpb24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZXkgYXJlIGJlaW5nIG1vcmUgc3RyaW5nZW50IGFib3V0IHZhbGlkYXRpbmcgaW5jb21pbmcgQUNLcy5cblxuVGhlIHBhdGNoIGl0c2VsZiBtb2RpZmllcyB0aGUgdmFsaWRhdGlvbiBsb2dpYywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0aGF0IHByZXZpb3VzbHksIGFuIEFDSyB3YXMgYWNjZXB0ZWQgaWYgaXQgd2Fzbid0ICphZnRlciogYHNuZF9ueHRgLiBOb3csIHRoZSBjb25kaXRpb24gaXMgYGJldHdlZW4oVENQX1NLQl9DQihza2IpLVx1MDAzZWFja19zZXEsIHRwLVx1MDAzZXNuZF91bmEsIHRwLVx1MDAzZXNuZF9ueHQpYC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQncyBlbmZvcmNpbmcgdGhhdCB0aGUgQUNLIHNlcXVlbmNlIG51bWJlciBtdXN0IGZhbGwgd2l0aGluIHRoZSBleHBlY3RlZCB3aW5kb3cgLSBgc25kX3VuYWAgdG8gYHNuZF9ueHRgLiAgVGhpcyBpcyBhIGdvb2QgaW1wcm92ZW1lbnQ7IGl0IHByZXZlbnRzIGEgdnVsbmVyYWJpbGl0eSB3aGVyZSBhbiBvbGQgQUNLIHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgd2luZG93LCBidXQgbm90IFwiYWZ0ZXJcIiBgc25kX254dGAgbWlnaHQgYmUgYWNjZXB0ZWQsIHdoaWNoIGNvdWxkIGJlIGV4cGxvaXRlZC5cblxuVGhlIG5ldyBjb25kaXRpb24gbG9va3MgbGlrZSBpdCBpcyBhZGRyZXNzaW5nIGEgY2FzZSB3aGVyZSBhbiBBQ0sgc2VxdWVuY2UgbnVtYmVyIG1pZ2h0IGZhbGwgb3V0c2lkZSBvZiB0aGUgdmFsaWQgd2luZG93LiBUaGlzIGlzIGdvb2QgYmVjYXVzZSBpdCBleHBsaWNpdGx5IHByZXZlbnRzIHRoYXQuXG5cblRoZSBwcmVzZW5jZSBvZiB0aGUgcGFja2V0ZHJpbGwgdGVzdCwgYHRjcF9yZmM1OTYxX3JlamVjdC1vbGQtYWNrLnBrdGAsIGlzIGFsc28gdGVsbGluZy4gVGhpcyBpcyBsaWtlbHkgYW4gaW50ZWdyYXRpb24gdGVzdCBkZXNpZ25lZCB0byBjb25maXJtIHRoYXQgdGhpcyBuZXcgdmFsaWRhdGlvbiBsb2dpYyAqY29ycmVjdGx5KiByZWplY3RzIG9sZCBvciBvdXQtb2Ytd2luZG93IEFDS3MuIFRoYXQncyBwcmVjaXNlbHkgd2hhdCBJJ2QgZXhwZWN0OyBpdCdzIGNydWNpYWwgdG8gaGF2ZSBhIHRlc3QgY2FzZSBmb3IgdGhpcyB0eXBlIG9mIGNoYW5nZS4gVGhpcyBwYXRjaCBpcyBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSBSRkMgNTk2MS4gVGhpcyBpcyBhIGdvb2QgaW1wcm92ZW1lbnQgdG8gbWFrZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgxMCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjE0OjMzLjUyMjUyMTk3MVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDMzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdGNwX2lucHV0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjUzMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjUzMDpcXHRcXHR0cC1cXHUwMDNlcnhfb3B0LmFjY2VjbiA9IDA7XFxuNjUzMTpcXHRcXG42NTMyOlxcdFxcdC8qXFx0cHJlZF9mbGFncyBpcyAweFM/MTAgXFx1MDAzY1xcdTAwM2MgMTYgKyBzbmRfd25kXFxuNjUzMzpcXHRcXHQgKlxcdGlmIGhlYWRlcl9wcmVkaWN0aW9uIGlzIHRvIGJlIG1hZGVcXG42NTM0OlxcdFxcdCAqXFx0J1MnIHdpbGwgYWx3YXlzIGJlIHRwLVxcdTAwM2V0Y3BfaGVhZGVyX2xlbiBcXHUwMDNlXFx1MDAzZSAyXFxuNjUzNTpcXHRcXHQgKlxcdCc/JyB3aWxsIGJlIDAgZm9yIHRoZSBmYXN0IHBhdGgsIG90aGVyd2lzZSBwcmVkX2ZsYWdzIGlzIDAgdG9cXG42NTM2OlxcdFxcdCAqICB0dXJuIGl0IG9mZlxcdCh3aGVuIHRoZXJlIGFyZSBob2xlcyBpbiB0aGUgcmVjZWl2ZVxcbjY1Mzc6XFx0XFx0ICpcXHQgc3BhY2UgZm9yIGluc3RhbmNlKVxcbjY1Mzg6XFx0XFx0ICpcXHRQU0ggZmxhZyBpcyBpZ25vcmVkLlxcbjY1Mzk6XFx0XFx0ICovXFxuNjU0MDpcXHRcXG42NTQxOlxcdFxcdGlmICgodGNwX2ZsYWdfd29yZCh0aCkgXFx1MDAyNiBUQ1BfSFBfQklUUykgPT0gdHAtXFx1MDAzZXByZWRfZmxhZ3MgXFx1MDAyNlxcdTAwMjZcXG42NTQyOlxcdFxcdCAgICBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZXNlcSA9PSB0cC1cXHUwMDNlcmN2X254dCBcXHUwMDI2XFx1MDAyNlxcbjY1NDM6XFx0XFx0ICAgIGJldHdlZW4oVENQX1NLQl9DQihza2IpLVxcdTAwM2VhY2tfc2VxLCB0cC1cXHUwMDNlc25kX3VuYSwgdHAtXFx1MDAzZXNuZF9ueHQpKSB7XFxuNjU0NDpcXHRcXHRcXHRpbnQgdGNwX2hlYWRlcl9sZW4gPSB0cC1cXHUwMDNldGNwX2hlYWRlcl9sZW47XFxuNjU0NTpcXHRcXHRcXHRzMzIgZGVsdGEgPSAwO1xcbjY1NDY6XFx0XFx0XFx0aW50IGZsYWcgPSAwO1xcbjY1NDc6XFx0XFxuNjU0ODpcXHRcXHRcXHQvKiBUaW1lc3RhbXAgaGVhZGVyIHByZWRpY3Rpb246IHRjcF9oZWFkZXJfbGVuXFxuNjU0OTpcXHRcXHRcXHQgKiBpcyBhdXRvbWF0aWNhbGx5IGVxdWFsIHRvIHRoLVxcdTAwM2Vkb2ZmKjQgZHVlIHRvIHByZWRfZmxhZ3NcXG42NTUwOlxcdFxcdFxcdCAqIG1hdGNoLlxcbjY1NTE6XFx0XFx0XFx0ICovXFxuNjU1MjpcXHRcXG42NTUzOlxcdFxcdFxcdC8qIENoZWNrIHRpbWVzdGFtcCAqL1xcbjY1NTQ6XFx0XFx0XFx0aWYgKHRjcF9oZWFkZXJfbGVuID09IHNpemVvZihzdHJ1Y3QgdGNwaGRyKSArIFRDUE9MRU5fVFNUQU1QX0FMSUdORUQpIHtcXG42NTU1OlxcdFxcdFxcdFxcdC8qIE5vPyBTbG93IHBhdGghICovXFxuNjU1NjpcXHRcXHRcXHRcXHRpZiAoIXRjcF9wYXJzZV9hbGlnbmVkX3RpbWVzdGFtcCh0cCwgdGgpKVxcbjY1NTc6XFx0XFx0XFx0XFx0XFx0Z290byBzbG93X3BhdGg7XFxuNjU1ODpcXHRcXG42NTU5OlxcdFxcdFxcdFxcdGRlbHRhID0gdHAtXFx1MDAzZXJ4X29wdC5yY3ZfdHN2YWwgLVxcbjY1NjA6XFx0XFx0XFx0XFx0XFx0dHAtXFx1MDAzZXJ4X29wdC50c19yZWNlbnQ7XFxuNjU2MTpcXHRcXHRcXHRcXHQvKiBJZiBQQVdTIGZhaWxlZCwgY2hlY2sgaXQgbW9yZSBjYXJlZnVsbHkgaW4gc2xvdyBwYXRoICovXFxuNjU2MjpcXHRcXHRcXHRcXHRpZiAoZGVsdGEgXFx1MDAzYyAwKVxcbjY1NjM6XFx0XFx0XFx0XFx0XFx0Z290byBzbG93X3BhdGg7XFxuNjU2NDpcXHRcXG42NTY1OlxcdFxcdFxcdFxcdC8qIERPIE5PVCB1cGRhdGUgdHNfcmVjZW50IGhlcmUsIGlmIGNoZWNrc3VtIGZhaWxzXFxuNjU2NjpcXHRcXHRcXHRcXHQgKiBhbmQgdGltZXN0YW1wIHdhcyBjb3JydXB0ZWQgcGFydCwgaXQgd2lsbCByZXN1bHRcXG42NTY3OlxcdFxcdFxcdFxcdCAqIGluIGEgaHVuZyBjb25uZWN0aW9uIHNpbmNlIHdlIHdpbGwgZHJvcCBhbGxcXG42NTY4OlxcdFxcdFxcdFxcdCAqIGZ1dHVyZSBwYWNrZXRzIGR1ZSB0byB0aGUgUEFXUyB0ZXN0LlxcbjY1Njk6XFx0XFx0XFx0XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjE0OjMzLjUyMjk2NzIwMVoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0NTk3NjU2OTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqRGl2aW5nIERlZXAgaW50byB0aGUgJ1Nsb3cgUGF0aCcqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBhc3N1bXB0aW9uIOKAkyB0aGUgXCJmYXN0IHBhdGhcIiDigJMgZGlkbid0IHBhbiBvdXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBhbHRlcm5hdGl2ZSByb3V0ZS4gSWYgdGhlIHN5c3RlbSBpcyBub3QgdGFraW5nIHRoZSBvcHRpbWl6ZWQgZXhlY3V0aW9uLCBJIG5lZWQgdG8ga25vdyB3aHkuIFRoYXQgbGVhZHMgbWUgdG8gYHNsb3dfcGF0aGAuIE5vdywgSSB3YW50IHRvIHplcm8gaW4gb24gd2hhdCdzIGFjdHVhbGx5IGhhcHBlbmluZyB3aGVuIHRoaW5ncyBhcmVuJ3QgcnVubmluZyBhcyBleHBlY3RlZC4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgbGluZXMgNjU3MCB0aHJvdWdoIDY2NDAuIFRoYXQgYmxvY2sgaXMgd2hlcmUgdGhlIGNvZGUgZGV2aWF0ZXMgZnJvbSB0aGUgZmFzdCByb3V0ZSwgYW5kIHRoYXQncyB3aGVyZSB0aGUgY3JpdGljYWwgcHJvYmxlbSBtaWdodCBiZSBoaWRpbmcuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBzdGFydCBpbnZlc3RpZ2F0aW5nIHRoYXQgcGFydGljdWxhciBzZWN0aW9uIG9mIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MTUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjE0OjM4LjEyMDYyNzA4WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxOTg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3BfaW5wdXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NTcwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2NTcwOlxcdFxcdFxcdH1cXG42NTcxOlxcdFxcbjY1NzI6XFx0XFx0XFx0aWYgKGxlbiBcXHUwMDNjPSB0Y3BfaGVhZGVyX2xlbikge1xcbjY1NzM6XFx0XFx0XFx0XFx0LyogQnVsayBkYXRhIHRyYW5zZmVyOiBzZW5kZXIgKi9cXG42NTc0OlxcdFxcdFxcdFxcdGlmIChsZW4gPT0gdGNwX2hlYWRlcl9sZW4pIHtcXG42NTc1OlxcdFxcdFxcdFxcdFxcdC8qIFByZWRpY3RlZCBwYWNrZXQgaXMgaW4gd2luZG93IGJ5IGRlZmluaXRpb24uXFxuNjU3NjpcXHRcXHRcXHRcXHRcXHQgKiBzZXEgPT0gcmN2X254dCBhbmQgcmN2X3d1cCBcXHUwMDNjPSByY3Zfbnh0LlxcbjY1Nzc6XFx0XFx0XFx0XFx0XFx0ICogSGVuY2UsIGNoZWNrIHNlcVxcdTAwM2M9cmN2X3d1cCByZWR1Y2VzIHRvOlxcbjY1Nzg6XFx0XFx0XFx0XFx0XFx0ICovXFxuNjU3OTpcXHRcXHRcXHRcXHRcXHRpZiAodGNwX2hlYWRlcl9sZW4gPT1cXG42NTgwOlxcdFxcdFxcdFxcdFxcdCAgICAoc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpICsgVENQT0xFTl9UU1RBTVBfQUxJR05FRCkgXFx1MDAyNlxcdTAwMjZcXG42NTgxOlxcdFxcdFxcdFxcdFxcdCAgICB0cC1cXHUwMDNlcmN2X254dCA9PSB0cC1cXHUwMDNlcmN2X3d1cClcXG42NTgyOlxcdFxcdFxcdFxcdFxcdFxcdGZsYWcgfD0gX190Y3BfcmVwbGFjZV90c19yZWNlbnQodHAsXFxuNjU4MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRkZWx0YSk7XFxuNjU4NDpcXHRcXG42NTg1OlxcdFxcdFxcdFxcdFxcdHRjcF9lY25fcmVjZWl2ZWRfY291bnRlcnMoc2ssIHNrYiwgMCk7XFxuNjU4NjpcXHRcXG42NTg3OlxcdFxcdFxcdFxcdFxcdC8qIFdlIGtub3cgdGhhdCBzdWNoIHBhY2tldHMgYXJlIGNoZWNrc3VtbWVkXFxuNjU4ODpcXHRcXHRcXHRcXHRcXHQgKiBvbiBlbnRyeS5cXG42NTg5OlxcdFxcdFxcdFxcdFxcdCAqL1xcbjY1OTA6XFx0XFx0XFx0XFx0XFx0dGNwX2Fjayhzaywgc2tiLCBmbGFnKTtcXG42NTkxOlxcdFxcdFxcdFxcdFxcdF9fa2ZyZWVfc2tiKHNrYik7XFxuNjU5MjpcXHRcXHRcXHRcXHRcXHR0Y3BfZGF0YV9zbmRfY2hlY2soc2spO1xcbjY1OTM6XFx0XFx0XFx0XFx0XFx0LyogV2hlbiByZWNlaXZpbmcgcHVyZSBhY2sgaW4gZmFzdCBwYXRoLCB1cGRhdGVcXG42NTk0OlxcdFxcdFxcdFxcdFxcdCAqIGxhc3QgdHMgZWNyIGRpcmVjdGx5IGluc3RlYWQgb2YgY2FsbGluZ1xcbjY1OTU6XFx0XFx0XFx0XFx0XFx0ICogdGNwX3Jjdl9ydHRfbWVhc3VyZV90cygpXFxuNjU5NjpcXHRcXHRcXHRcXHRcXHQgKi9cXG42NTk3OlxcdFxcdFxcdFxcdFxcdHRwLVxcdTAwM2VyY3ZfcnR0X2xhc3RfdHNlY3IgPSB0cC1cXHUwMDNlcnhfb3B0LnJjdl90c2VjcjtcXG42NTk4OlxcdFxcdFxcdFxcdFxcdHJldHVybjtcXG42NTk5OlxcdFxcdFxcdFxcdH0gZWxzZSB7IC8qIEhlYWRlciB0b28gc21hbGwgKi9cXG42NjAwOlxcdFxcdFxcdFxcdFxcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9QS1RfVE9PX1NNQUxMO1xcbjY2MDE6XFx0XFx0XFx0XFx0XFx0VENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIFRDUF9NSUJfSU5FUlJTKTtcXG42NjAyOlxcdFxcdFxcdFxcdFxcdGdvdG8gZGlzY2FyZDtcXG42NjAzOlxcdFxcdFxcdFxcdH1cXG42NjA0OlxcdFxcdFxcdH0gZWxzZSB7XFxuNjYwNTpcXHRcXHRcXHRcXHRpbnQgZWF0ZW4gPSAwO1xcbjY2MDY6XFx0XFx0XFx0XFx0Ym9vbCBmcmFnc3RvbGVuID0gZmFsc2U7XFxuNjYwNzpcXHRcXG42NjA4OlxcdFxcdFxcdFxcdGlmICh0Y3BfY2hlY2tzdW1fY29tcGxldGUoc2tiKSlcXG42NjA5OlxcdFxcdFxcdFxcdFxcdGdvdG8gY3N1bV9lcnJvcjtcXG42NjEwOlxcdFxcbjY2MTE6XFx0XFx0XFx0XFx0aWYgKGFmdGVyKFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNlZW5kX3NlcSxcXG42NjEyOlxcdFxcdFxcdFxcdFxcdCAgdHAtXFx1MDAzZXJjdl9ueHQgKyB0Y3BfcmVjZWl2ZV93aW5kb3codHApKSlcXG42NjEzOlxcdFxcdFxcdFxcdFxcdGdvdG8gdmFsaWRhdGU7XFxuNjYxNDpcXHRcXG42NjE1OlxcdFxcdFxcdFxcdGlmICgoaW50KXNrYi1cXHUwMDNldHJ1ZXNpemUgXFx1MDAzZSBzay1cXHUwMDNlc2tfZm9yd2FyZF9hbGxvYylcXG42NjE2OlxcdFxcdFxcdFxcdFxcdGdvdG8gc3RlcDU7XFxuNjYxNzpcXHRcXG42NjE4OlxcdFxcdFxcdFxcdC8qIFByZWRpY3RlZCBwYWNrZXQgaXMgaW4gd2luZG93IGJ5IGRlZmluaXRpb24uXFxuNjYxOTpcXHRcXHRcXHRcXHQgKiBzZXEgPT0gcmN2X254dCBhbmQgcmN2X3d1cCBcXHUwMDNjPSByY3Zfbnh0LlxcbjY2MjA6XFx0XFx0XFx0XFx0ICogSGVuY2UsIGNoZWNrIHNlcVxcdTAwM2M9cmN2X3d1cCByZWR1Y2VzIHRvOlxcbjY2MjE6XFx0XFx0XFx0XFx0ICovXFxuNjYyMjpcXHRcXHRcXHRcXHRpZiAodGNwX2hlYWRlcl9sZW4gPT1cXG42NjIzOlxcdFxcdFxcdFxcdCAgICAoc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpICsgVENQT0xFTl9UU1RBTVBfQUxJR05FRCkgXFx1MDAyNlxcdTAwMjZcXG42NjI0OlxcdFxcdFxcdFxcdCAgICB0cC1cXHUwMDNlcmN2X254dCA9PSB0cC1cXHUwMDNlcmN2X3d1cClcXG42NjI1OlxcdFxcdFxcdFxcdFxcdGZsYWcgfD0gX190Y3BfcmVwbGFjZV90c19yZWNlbnQodHAsXFxuNjYyNjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRkZWx0YSk7XFxuNjYyNzpcXHRcXG42NjI4OlxcdFxcdFxcdFxcdHRjcF9yY3ZfcnR0X21lYXN1cmVfdHMoc2ssIHNrYik7XFxuNjYyOTpcXHRcXG42NjMwOlxcdFxcdFxcdFxcdE5FVF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfVENQSFBISVRTKTtcXG42NjMxOlxcdFxcbjY2MzI6XFx0XFx0XFx0XFx0LyogQnVsayBkYXRhIHRyYW5zZmVyOiByZWNlaXZlciAqL1xcbjY2MzM6XFx0XFx0XFx0XFx0dGNwX2NsZWFudXBfc2tiKHNrYik7XFxuNjYzNDpcXHRcXHRcXHRcXHRfX3NrYl9wdWxsKHNrYiwgdGNwX2hlYWRlcl9sZW4pO1xcbjY2MzU6XFx0XFx0XFx0XFx0dGNwX2Vjbl9yZWNlaXZlZF9jb3VudGVycyhzaywgc2tiLFxcbjY2MzY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBsZW4gLSB0Y3BfaGVhZGVyX2xlbik7XFxuNjYzNzpcXHRcXHRcXHRcXHRlYXRlbiA9IHRjcF9xdWV1ZV9yY3Yoc2ssIHNrYiwgXFx1MDAyNmZyYWdzdG9sZW4pO1xcbjY2Mzg6XFx0XFxuNjYzOTpcXHRcXHRcXHRcXHR0Y3BfZXZlbnRfZGF0YV9yZWN2KHNrLCBza2IpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDoxNDozOC4xMjEwNDkxNloiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1MDM3NDgwNTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVENQIEFDSyBTZXF1ZW5jZSBWYWxpZGF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiB0aGlzIGBiZXR3ZWVuKFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VhY2tfc2VxLCB0cC1cdTAwM2VzbmRfdW5hLCB0cC1cdTAwM2VzbmRfbnh0KWAgY2hlY2suIEJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgY29kZSB1c2VkIGAhYWZ0ZXIoVENQX1NLQl9DQihza2IpLVx1MDAzZWFja19zZXEsIHRwLVx1MDAzZXNuZF9ueHQpYCwgd2hpY2ggZWZmZWN0aXZlbHkgbWVhbnMgYGFja19zZXFgIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGB0cC1cdTAwM2VzbmRfbnh0YC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBIb3dldmVyLCBJIG5lZWQgdG8gY29uc2lkZXIgYSBwb3RlbnRpYWwgaXNzdWU6IHdoYXQgaGFwcGVucyBpZiBgYWNrX3NlcWAgaXMgYWN0dWFsbHkgKmxlc3MgdGhhbiogYHRwLVx1MDAzZXNuZF91bmFgPyBXZSdyZSB0YWxraW5nIGFib3V0IGFuIFwib2xkXCIgQUNLLCBvbmUgdGhhdCBhY2tub3dsZWRnZXMgZGF0YSAqYmVmb3JlKiBvdXIgU2VuZCBVbmFja25vd2xlZGdlZCBzZXF1ZW5jZS4gUkZDIDU5NjEgYW5kIG90aGVyIFRDUCBzdGFuZGFyZHMgcHJvYmFibHkgaGF2ZSBzcGVjaWZpYyByZXF1aXJlbWVudHMgZm9yIGhhbmRsaW5nIHRoZXNlLCBwb3RlbnRpYWxseSByZWplY3RpbmcgdGhlbSBvdXRyaWdodCwgZXNwZWNpYWxseSBjaGFsbGVuZ2UgQUNLcyB0aGF0IGFyZSByaWRpY3Vsb3VzbHkgb3V0IG9mIHNlcXVlbmNlLlxuXG5UaGUgcHJvYmxlbSwgYXMgSSBzZWUgaXQsIGlzIHRoYXQgdGhlIG9yaWdpbmFsIGZhc3QgcGF0aCBsb2dpYywgYmFzZWQgb24gYCFhZnRlcihhY2tfc2VxLCBzbmRfbnh0KWAsIHdvdWxkIGluY29ycmVjdGx5IGFsbG93IHRoZXNlIG9sZCBBQ0tzIHRocm91Z2ggaWYgdGhleSB3ZXJlIGluIHRoZSByYW5nZSBvZiBgc25kX3VuYWAgdG8gYHNuZF9ueHRgLiBTaW5jZSBhbiBvbGQgQUNLIHdpbGwgaGF2ZSBgYWNrX3NlcSBcdTAwM2M9IHNuZF9ueHRgLCB0aGUgZmFzdCBwYXRoIHdvdWxkIGhhdmUgYmVlbiBtaXN0YWtlbmx5IHRyaWdnZXJlZC4gVGhpcyBpcyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5LCBzaW5jZSBkYXRhIHNlZ21lbnRzIHdpdGggdGhlc2Ugb2xkIEFDS3Mgd291bGQgYmUgcHJvY2Vzc2VkLlxuXG5Ob3csIHdpdGggdGhpcyBwYXRjaCwgdXNpbmcgYGJldHdlZW4oVENQX1NLQl9DQihza2IpLVx1MDAzZWFja19zZXEsIHRwLVx1MDAzZXNuZF91bmEsIHRwLVx1MDAzZXNuZF9ueHQpYCwgaXQncyBjbGVhciB0aGUgaW50ZW50aW9uIGlzIHRvIGNvcnJlY3QgdGhpcy4gQW4gYGFja19zZXFgIGxlc3MgdGhhbiBgdHAtXHUwMDNlc25kX3VuYWAgd2lsbCAqbm90KiBmYWxsIHdpdGhpbiB0aGlzIHJhbmdlLCB0aHVzIGF2b2lkaW5nIHRoZSBmYXN0IHBhdGguIEluc3RlYWQsIGl0IHdpbGwgZHJvcCBpbnRvIHRoZSBzbG93IHBhdGgsIHdoZXJlIGB0Y3BfdmFsaWRhdGVfaW5jb21pbmdgIGhhbmRsZXMgbW9yZSB0aG9yb3VnaCBjaGVja3MgZm9yIFJGQyA1OTYxIGNvbXBsaWFuY2UuIFRoaXMgc2VlbXMgbGlrZSBhIHNvbGlkIHNvbHV0aW9uLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gY29uZmlybSB0aGlzLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIGB0Y3BfdmFsaWRhdGVfaW5jb21pbmdgIG9yIHRoZSBzbG93IHBhdGggY29kZSB0byB2ZXJpZnkgZXhhY3RseSBob3cgUkZDIDU5NjEncyBzdGlwdWxhdGlvbnMgZm9yIG9sZCBBQ0tzIGFyZSBpbXBsZW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc4OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjE0OjQzLjE1ODUzMjkzNloiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjE5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdGNwX2lucHV0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjY1NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjY1NTpcXHRcXHRcXHRcXHR0Y3BfZGF0YV9yZWFkeShzayk7XFxuNjY1NjpcXHRcXHRcXHRcXHRyZXR1cm47XFxuNjY1NzpcXHRcXHRcXHR9XFxuNjY1ODpcXHRcXHR9XFxuNjY1OTpcXHRcXG42NjYwOlxcdHNsb3dfcGF0aDpcXG42NjYxOlxcdFxcdGlmIChsZW4gXFx1MDAzYyAodGgtXFx1MDAzZWRvZmYgXFx1MDAzY1xcdTAwM2MgMikgfHwgdGNwX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpXFxuNjY2MjpcXHRcXHRcXHRnb3RvIGNzdW1fZXJyb3I7XFxuNjY2MzpcXHRcXG42NjY0OlxcdFxcdGlmICghdGgtXFx1MDAzZWFjayBcXHUwMDI2XFx1MDAyNiAhdGgtXFx1MDAzZXJzdCBcXHUwMDI2XFx1MDAyNiAhdGgtXFx1MDAzZXN5bikge1xcbjY2NjU6XFx0XFx0XFx0cmVhc29uID0gU0tCX0RST1BfUkVBU09OX1RDUF9GTEFHUztcXG42NjY2OlxcdFxcdFxcdGdvdG8gZGlzY2FyZDtcXG42NjY3OlxcdFxcdH1cXG42NjY4OlxcdFxcbjY2Njk6XFx0XFx0LypcXG42NjcwOlxcdFxcdCAqXFx0U3RhbmRhcmQgc2xvdyBwYXRoLlxcbjY2NzE6XFx0XFx0ICovXFxuNjY3MjpcXHR2YWxpZGF0ZTpcXG42NjczOlxcdFxcdGlmICghdGNwX3ZhbGlkYXRlX2luY29taW5nKHNrLCBza2IsIHRoLCAxKSlcXG42Njc0OlxcdFxcdFxcdHJldHVybjtcXG42Njc1OlxcdFxcbjY2NzY6XFx0c3RlcDU6XFxuNjY3NzpcXHRcXHR0Y3BfZWNuX3JlY2VpdmVkX2NvdW50ZXJzX3BheWxvYWQoc2ssIHNrYik7XFxuNjY3ODpcXHRcXG42Njc5OlxcdFxcdHJlYXNvbiA9IHRjcF9hY2soc2ssIHNrYiwgRkxBR19TTE9XUEFUSCB8IEZMQUdfVVBEQVRFX1RTX1JFQ0VOVCk7XFxuNjY4MDpcXHRcXHRpZiAoKGludClyZWFzb24gXFx1MDAzYyAwKSB7XFxuNjY4MTpcXHRcXHRcXHRyZWFzb24gPSAtcmVhc29uO1xcbjY2ODI6XFx0XFx0XFx0Z290byBkaXNjYXJkO1xcbjY2ODM6XFx0XFx0fVxcbjY2ODQ6XFx0XFx0dGNwX3Jjdl9ydHRfbWVhc3VyZV90cyhzaywgc2tiKTtcXG42Njg1OlxcdFxcbjY2ODY6XFx0XFx0LyogUHJvY2VzcyB1cmdlbnQgZGF0YS4gKi9cXG42Njg3OlxcdFxcdHRjcF91cmcoc2ssIHNrYiwgdGgpO1xcbjY2ODg6XFx0XFxuNjY4OTpcXHRcXHQvKiBzdGVwIDc6IHByb2Nlc3MgdGhlIHNlZ21lbnQgdGV4dCAqL1xcbjY2OTA6XFx0XFx0dGNwX2RhdGFfcXVldWUoc2ssIHNrYik7XFxuNjY5MTpcXHRcXG42NjkyOlxcdFxcdHRjcF9kYXRhX3NuZF9jaGVjayhzayk7XFxuNjY5MzpcXHRcXHR0Y3BfYWNrX3NuZF9jaGVjayhzayk7XFxuNjY5NDpcXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjE0OjQzLjE1ODk1NzAyNloiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5MzQ5NjA3NjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRoaW5raW5nLCBleHByZXNzZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gTmV0d29yayBWYWxpZGF0aW9uKipcblxuT2theSwgc28gd2UndmUgYmVlbiBleGFtaW5pbmcgdGhlIGluY29taW5nIG5ldHdvcmsgdHJhZmZpYyB2YWxpZGF0aW9uIHJvdXRpbmVzLiBJdCdzIGNydWNpYWwsIGFuZCBJJ3ZlIGdvdCBhIHNwZWNpZmljIGFyZWEgSSB3YW50IHRvIGZvY3VzIG9uIG5vdy4gTGV0J3Mgc2hpZnQgb3VyIGF0dGVudGlvbiB0byB0aGUgYHRjcF92YWxpZGF0ZV9pbmNvbWluZ2AgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA2NDkwIGluIHRoZSByZWxldmFudCBjb2RlLiBUaGF0J3Mgd2hlcmUgSSBiZWxpZXZlIHdlIG1pZ2h0IGZpbmQgc29tZSBpbnRlcmVzdGluZyBudWFuY2VzIHRoYXQgd2FycmFudCBhIGRlZXBlciBsb29rLiBJJ20gdGhpbmtpbmcgdGhlcmUgY291bGQgYmUgc29tZSBzdWJ0bGUgdnVsbmVyYWJpbGl0aWVzIG9yIGluZWZmaWNpZW5jaWVzIGx1cmtpbmcgdGhlcmUgdGhhdCB3ZSBuZWVkIHRvIGV4cG9zZS4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTYyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDoxNDo1Mi41MDg1NjcxNDdaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDAzMjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcF9pbnB1dC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY0ODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjY0ODA6XFx0ICpcXHRJdCBpcyBzcGxpdCBpbnRvIGEgZmFzdCBwYXRoIGFuZCBhIHNsb3cgcGF0aC4gVGhlIGZhc3QgcGF0aCBpc1xcbjY0ODE6XFx0ICogXFx0ZGlzYWJsZWQgd2hlbjpcXG42NDgyOlxcdCAqXFx0LSBBIHplcm8gd2luZG93IHdhcyBhbm5vdW5jZWQgZnJvbSB1cyAtIHplcm8gd2luZG93IHByb2JpbmdcXG42NDgzOlxcdCAqICAgICAgICBpcyBvbmx5IGhhbmRsZWQgcHJvcGVybHkgaW4gdGhlIHNsb3cgcGF0aC5cXG42NDg0OlxcdCAqXFx0LSBPdXQgb2Ygb3JkZXIgc2VnbWVudHMgYXJyaXZlZC5cXG42NDg1OlxcdCAqXFx0LSBVcmdlbnQgZGF0YSBpcyBleHBlY3RlZC5cXG42NDg2OlxcdCAqXFx0LSBUaGVyZSBpcyBubyBidWZmZXIgc3BhY2UgbGVmdFxcbjY0ODc6XFx0ICpcXHQtIFVuZXhwZWN0ZWQgVENQIGZsYWdzL3dpbmRvdyB2YWx1ZXMvaGVhZGVyIGxlbmd0aHMgYXJlIHJlY2VpdmVkXFxuNjQ4ODpcXHQgKlxcdCAgKGRldGVjdGVkIGJ5IGNoZWNraW5nIHRoZSBUQ1AgaGVhZGVyIGFnYWluc3QgcHJlZF9mbGFncylcXG42NDg5OlxcdCAqXFx0LSBEYXRhIGlzIHNlbnQgaW4gYm90aCBkaXJlY3Rpb25zLiBGYXN0IHBhdGggb25seSBzdXBwb3J0cyBwdXJlIHNlbmRlcnNcXG42NDkwOlxcdCAqXFx0ICBvciBwdXJlIHJlY2VpdmVycyAodGhpcyBtZWFucyBlaXRoZXIgdGhlIHNlcXVlbmNlIG51bWJlciBvciB0aGUgYWNrXFxuNjQ5MTpcXHQgKlxcdCAgdmFsdWUgbXVzdCBzdGF5IGNvbnN0YW50KVxcbjY0OTI6XFx0ICpcXHQtIFVuZXhwZWN0ZWQgVENQIG9wdGlvbi5cXG42NDkzOlxcdCAqXFx0LSBBQ0sgc2VxdWVuY2UgbnVtYmVyIGlzIG91dHNpZGUgW1NORC5VTkEsIFNORC5OWFRdLlxcbjY0OTQ6XFx0ICpcXG42NDk1OlxcdCAqXFx0V2hlbiB0aGVzZSBjb25kaXRpb25zIGFyZSBub3Qgc2F0aXNmaWVkIGl0IGRyb3BzIGludG8gYSBzdGFuZGFyZFxcbjY0OTY6XFx0ICpcXHRyZWNlaXZlIHByb2NlZHVyZSBwYXR0ZXJuZWQgYWZ0ZXIgUkZDNzkzIHRvIGhhbmRsZSBhbGwgY2FzZXMuXFxuNjQ5NzpcXHQgKlxcdFRoZSBmaXJzdCB0aHJlZSBjYXNlcyBhcmUgZ3VhcmFudGVlZCBieSBwcm9wZXIgcHJlZF9mbGFncyBzZXR0aW5nLFxcbjY0OTg6XFx0ICpcXHR0aGUgcmVzdCBpcyBjaGVja2VkIGlubGluZS4gRmFzdCBwcm9jZXNzaW5nIGlzIHR1cm5lZCBvbiBpblxcbjY0OTk6XFx0ICpcXHR0Y3BfZGF0YV9xdWV1ZSB3aGVuIGV2ZXJ5dGhpbmcgaXMgT0suXFxuNjUwMDpcXHQgKi9cXG42NTAxOlxcdHZvaWQgdGNwX3Jjdl9lc3RhYmxpc2hlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuNjUwMjpcXHR7XFxuNjUwMzpcXHRcXHRlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRDtcXG42NTA0OlxcdFxcdGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoID0gKGNvbnN0IHN0cnVjdCB0Y3BoZHIgKilza2ItXFx1MDAzZWRhdGE7XFxuNjUwNTpcXHRcXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcXG42NTA2OlxcdFxcdHVuc2lnbmVkIGludCBsZW4gPSBza2ItXFx1MDAzZWxlbjtcXG42NTA3OlxcdFxcbjY1MDg6XFx0XFx0LyogVENQIGNvbmdlc3Rpb24gd2luZG93IHRyYWNraW5nICovXFxuNjUwOTpcXHRcXHR0cmFjZV90Y3BfcHJvYmUoc2ssIHNrYik7XFxuNjUxMDpcXHRcXG42NTExOlxcdFxcdHRjcF9tc3RhbXBfcmVmcmVzaF9pbmxpbmUodHApO1xcbjY1MTI6XFx0XFx0aWYgKHVubGlrZWx5KCFyY3VfYWNjZXNzX3BvaW50ZXIoc2stXFx1MDAzZXNrX3J4X2RzdCkpKVxcbjY1MTM6XFx0XFx0XFx0aW5ldF9jc2soc2spLVxcdTAwM2VpY3NrX2FmX29wcy1cXHUwMDNlc2tfcnhfZHN0X3NldChzaywgc2tiKTtcXG42NTE0OlxcdFxcdC8qXFxuNjUxNTpcXHRcXHQgKlxcdEhlYWRlciBwcmVkaWN0aW9uLlxcbjY1MTY6XFx0XFx0ICpcXHRUaGUgY29kZSBsb29zZWx5IGZvbGxvd3MgdGhlIG9uZSBpbiB0aGUgZmFtb3VzXFxuNjUxNzpcXHRcXHQgKlxcdFxcXCIzMCBpbnN0cnVjdGlvbiBUQ1AgcmVjZWl2ZVxcXCIgVmFuIEphY29ic29uIG1haWwuXFxuNjUxODpcXHRcXHQgKlxcbjY1MTk6XFx0XFx0ICpcXHRWYW4ncyB0cmljayBpcyB0byBkZXBvc2l0IGJ1ZmZlcnMgaW50byBzb2NrZXQgcXVldWVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6MTQ6NTIuNTA4OTc1NDY3WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc2MDU3OTY5NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTWVtb3J5IFNhZmV0eSBBbmFseXNpcyBvZiBUQ1AgRmFzdCBQYXRoIENoYW5nZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAgY2hhbmdlIGZyb20gYSBtZW1vcnkgc2FmZXR5IHBlcnNwZWN0aXZlLiBUaGUgY29yZSBvZiBpdCByZXBsYWNlcyB0aGUgcHJldmlvdXMgY2hlY2sgZm9yIGBhY2tfc2VxYCBiZWluZyAqYWZ0ZXIqIGBzbmRfbnh0YCB3aXRoIGEgbW9yZSBwcmVjaXNlIGBiZXR3ZWVuYCBjaGVjayB0aGF0IGNvbmZpcm1zIGBhY2tfc2VxYCBmYWxscyB3aXRoaW4gdGhlIHJhbmdlIGBbc25kX3VuYSwgc25kX254dF1gLiBUaGUgYGJldHdlZW5gIG1hY3JvLCBkZWZpbmVkIGluIGBuZXQvdGNwLmhgLCBjbGV2ZXJseSB1c2VzIHVuc2lnbmVkIGludGVnZXIgYXJpdGhtZXRpYyB0byBlZmZpY2llbnRseSBkZXRlcm1pbmUgaWYgYGFja19zZXFgIGlzIHdpdGhpbiB0aGlzIHJhbmdlLlxuXG5UaGUgY3JpdGljYWwgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgbWVtb3J5IHNhZmV0eSB2dWxuZXJhYmlsaXRpZXMuIEFyZSB3ZSBsb29raW5nIGF0IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcz8gSXQncyBwcmV0dHkgY2xlYXIgdGhhdCB0aGUgYW5zd2VyIGlzIG5vLiBgYWNrX3NlcWAsIGBzbmRfdW5hYCwgYW5kIGBzbmRfbnh0YCBhcmUgYWxsIGVzdGFibGlzaGVkLCBpbml0aWFsaXplZCBzZXF1ZW5jZSBudW1iZXJzLCBzbyB3ZSBhcmVuJ3QgaW50cm9kdWNpbmcgYW55IG5ldyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhpcyBjaGVjayBhbHNvIGRvZXNuJ3QgaW52b2x2ZSBhbnkgY29weWluZyB0byB1c2Vyc3BhY2Ugb3IgYWx0ZXJhdGlvbiBvZiBidWZmZXIgbGVuZ3RocyB0aGF0IG1pZ2h0IGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEuIENyaXRpY2FsbHksIHBhY2tldHMgd2l0aCBcIm9sZFwiIEFDS3MgYXJlIHNpbXBseSBkaXZlcnRlZCB0byB0aGUgZXhpc3Rpbmcgc2xvdyBwYXRoIGZvciBzdGFuZGFyZCBwcm9jZXNzaW5nLCB3aGljaCBpcyBhbHJlYWR5IGRlc2lnbmVkIHRvIGhhbmRsZSB0aGVzZSBjYXNlcyBzYWZlbHkuIE5vIG5ldyBhbGxvY2F0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBzdHJ1Y3QgcGFkZGluZyBhcmUgaW50cm9kdWNlZC5cblxuTm93LCBsZXQncyBjb25zaWRlciB0aGUgS01TQU4gdnMuIEtBU0FOIGltcGxpY2F0aW9ucy4gUmVtZW1iZXIsIEtNU0FOIGlzIGZvciBjYXRjaGluZyAqdW5pbml0aWFsaXplZCogbWVtb3J5IHJlYWRzLCB3aGlsZSBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQgZGVidWdnZXJzIGhhbmRsZSBpc3N1ZXMgbGlrZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgYW5kIGxvY2stcmVsYXRlZCBidWdzLiBLTVNBTiBpcyByZXNvdXJjZS1pbnRlbnNpdmUsIHNvIHdlIG9ubHkgdXNlIGl0IHdoZW4gKnVuaW5pdGlhbGl6ZWQgbWVtb3J5KiByaXNrcyBhcmUgc3BlY2lmaWNhbGx5IGludHJvZHVjZWQgb3IgZXhwb3NlZC5cblxuTG9va2luZyBhdCB0aGUgS01TQU4gY3JpdGVyaWEsIHRoaXMgcGF0Y2ggZG9lc24ndCB0cmlnZ2VyIGFueSBvZiB0aGVtOiBJdCdzIG5vdCBpbnZvbHZpbmcga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIGNvbmRpdGlvbmFsIGxvZ2ljIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZGF0YSwgYWxsb2NhdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciBhbHRlcmluZyBib3VuZHMgY2hlY2tzIGluIGEgd2F5IHRoYXQgYWxsb3dzIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIGFyZSBmdWxseSBpbml0aWFsaXplZC5cblxuVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgY2hhbmdlIHByaW1hcmlseSB0aWdodGVucyB0aGUgZmFzdCBwYXRoIGNvbmRpdGlvbiB0byBlbnN1cmUgdGhhdCB0aGUgQUNLcyBiZWluZyBwcm9jZXNzZWQgYXJlIHdpdGhpbiBhIHZhbGlkIHNlcXVlbmNlIG51bWJlciByYW5nZSAoYXMgcGVyIFJGQyA1OTYxKSwgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGl2ZWx5IGBmYWxzZWAuIFRoZSBwYXRjaCBzaW1wbHkgcmVyb3V0ZXMgb2xkZXIgQUNLcyB0byBhbiBleGlzdGluZyBzYWZlIHNsb3cgcGF0aC5cblxuU28sIEknbSBjYWxsaW5nIGBzZXQtcmVzdWx0c2Agd2l0aCBgTmVlZHNLTVNBTjogZmFsc2VgIGFuZCBwcm92aWRpbmcgYSBjbGVhciBleHBsYW5hdGlvbiBvZiB0aGlzIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDk2LCJPdXRwdXRUb2tlbnMiOjE5NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjE1OjAwLjExNDc3NDU4WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0Y3BfcmN2X2VzdGFibGlzaGVkKCkgdG8gcmVxdWlyZSB0aGUgaW5jb21pbmcgQUNLIHNlcXVlbmNlIG51bWJlciB0byBiZSB3aXRoaW4gW1NORC5VTkEsIFNORC5OWFRdIHZpYSBiZXR3ZWVuKFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNlYWNrX3NlcSwgdHAtXFx1MDAzZXNuZF91bmEsIHRwLVxcdTAwM2VzbmRfbnh0KSBiZWZvcmUgdGFraW5nIHRoZSBUQ1AgZmFzdCBwYXRoLCBkaXZlcnRpbmcgcGFja2V0cyB3aXRoIG9sZCBBQ0tzIHRvIHRoZSBzbG93IHBhdGggZm9yIHByb3BlciBSRkMgNTk2MSB2YWxpZGF0aW9uLlxcblxcbkFsbCB2YXJpYWJsZXMgaW52b2x2ZWQgKFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNlYWNrX3NlcSwgdHAtXFx1MDAzZXNuZF91bmEsIHRwLVxcdTAwM2VzbmRfbnh0KSBhcmUgaW5pdGlhbGl6ZWQgdTMyIHZhbHVlcy4gVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG1lbW9yeSwgYWx0ZXIgYnVmZmVyIHNpemVzLCBjb3B5IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0Y3BfcmN2X2VzdGFibGlzaGVkKCkgdG8gcmVxdWlyZSB0aGUgaW5jb21pbmcgQUNLIHNlcXVlbmNlIG51bWJlciB0byBiZSB3aXRoaW4gW1NORC5VTkEsIFNORC5OWFRdIHZpYSBiZXR3ZWVuKFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNlYWNrX3NlcSwgdHAtXFx1MDAzZXNuZF91bmEsIHRwLVxcdTAwM2VzbmRfbnh0KSBiZWZvcmUgdGFraW5nIHRoZSBUQ1AgZmFzdCBwYXRoLCBkaXZlcnRpbmcgcGFja2V0cyB3aXRoIG9sZCBBQ0tzIHRvIHRoZSBzbG93IHBhdGggZm9yIHByb3BlciBSRkMgNTk2MSB2YWxpZGF0aW9uLlxcblxcbkFsbCB2YXJpYWJsZXMgaW52b2x2ZWQgKFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNlYWNrX3NlcSwgdHAtXFx1MDAzZXNuZF91bmEsIHRwLVxcdTAwM2VzbmRfbnh0KSBhcmUgaW5pdGlhbGl6ZWQgdTMyIHZhbHVlcy4gVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG1lbW9yeSwgYWx0ZXIgYnVmZmVyIHNpemVzLCBjb3B5IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowcw5c5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-14 09:17:37 +0000 UTC FinishedAt: 2026-09-14 10:15:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "fd9beb8870736e1c6a0b2351d88a161aaeb2b326", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "fd9beb8870736e1c6a0b2351d88a161aaeb2b326", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET" ], "series_id": "5cefdd6c-24b4-452c-bf6c-f55c19f1942f" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tcp_rcv_established", "tcp_validate_incoming" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "fd9beb8870736e1c6a0b2351d88a161aaeb2b326", "base_tree": "net" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfcmN2X2VzdGFibGlzaGVkJiMzNDssCiAgICAmIzM0O3RjcF92YWxpZGF0ZV9pbmNvbWluZyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRjcF9yY3ZfZXN0YWJsaXNoZWQoKSB0byByZXF1aXJlIHRoZSBpbmNvbWluZyBBQ0sgc2VxdWVuY2UgbnVtYmVyIHRvIGJlIHdpdGhpbiBbU05ELlVOQSwgU05ELk5YVF0gdmlhIGJldHdlZW4oVENQX1NLQl9DQihza2IpLVx1MDAzZWFja19zZXEsIHRwLVx1MDAzZXNuZF91bmEsIHRwLVx1MDAzZXNuZF9ueHQpIGJlZm9yZSB0YWtpbmcgdGhlIFRDUCBmYXN0IHBhdGgsIGRpdmVydGluZyBwYWNrZXRzIHdpdGggb2xkIEFDS3MgdG8gdGhlIHNsb3cgcGF0aCBmb3IgcHJvcGVyIFJGQyA1OTYxIHZhbGlkYXRpb24uXG5cbkFsbCB2YXJpYWJsZXMgaW52b2x2ZWQgKFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VhY2tfc2VxLCB0cC1cdTAwM2VzbmRfdW5hLCB0cC1cdTAwM2VzbmRfbnh0KSBhcmUgaW5pdGlhbGl6ZWQgdTMyIHZhbHVlcy4gVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG1lbW9yeSwgYWx0ZXIgYnVmZmVyIHNpemVzLCBjb3B5IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWx0ZXJzIHRoZSBmYXN0LXBhdGggaGVhZGVyIHByZWRpY3Rpb24gY29uZGl0aW9uIGluIHRjcF9yY3ZfZXN0YWJsaXNoZWQoKSB0byByZXF1aXJlIHRoZSBBQ0sgc2VxdWVuY2UgbnVtYmVyIHRvIGZhbGwgYmV0d2VlbiBTTkQuVU5BIGFuZCBTTkQuTlhULiBTZWdtZW50cyB3aXRoIG9sZCBBQ0tzIGFyZSBub3cgcmVkaXJlY3RlZCB0byB0aGUgc2xvdyBwYXRoICh0Y3BfdmFsaWRhdGVfaW5jb21pbmcoKSkgdG8gcHJldmVudCBSRkMgNTk2MSBibGluZCBkYXRhIGluamVjdGlvbi4gVGhpcyBhbHRlcnMgY29yZSBUQ1AgcmVjZWl2ZSBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBUQ1Agc29ja2V0IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6MTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiMzE5ODMzYTBmMDUzM2RiN2Y4ZDY4YTIyNjAyMGRlMjkwN2M1ZTZhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMTA6MTI6NDggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lucHV0LmMgYi9uZXQvaXB2NC90Y3BfaW5wdXQuY1xuaW5kZXggZGFmZjkzZDUxMzQyOC4uMDNkMzE3YTU4MTMyNCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9pbnB1dC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfaW5wdXQuY1xuQEAgLTY0OTAsNiAmIzQzOzY0OTAsNyBAQCBzdGF0aWMgYm9vbCB0Y3BfdmFsaWRhdGVfaW5jb21pbmcoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuICAqXHQgIG9yIHB1cmUgcmVjZWl2ZXJzICh0aGlzIG1lYW5zIGVpdGhlciB0aGUgc2VxdWVuY2UgbnVtYmVyIG9yIHRoZSBhY2tcbiAgKlx0ICB2YWx1ZSBtdXN0IHN0YXkgY29uc3RhbnQpXG4gICpcdC0gVW5leHBlY3RlZCBUQ1Agb3B0aW9uLlxuJiM0MzsgKlx0LSBBQ0sgc2VxdWVuY2UgbnVtYmVyIGlzIG91dHNpZGUgW1NORC5VTkEsIFNORC5OWFRdLlxuICAqXG4gICpcdFdoZW4gdGhlc2UgY29uZGl0aW9ucyBhcmUgbm90IHNhdGlzZmllZCBpdCBkcm9wcyBpbnRvIGEgc3RhbmRhcmRcbiAgKlx0cmVjZWl2ZSBwcm9jZWR1cmUgcGF0dGVybmVkIGFmdGVyIFJGQzc5MyB0byBoYW5kbGUgYWxsIGNhc2VzLlxuQEAgLTY1MzksNyAmIzQzOzY1NDAsNyBAQCB2b2lkIHRjcF9yY3ZfZXN0YWJsaXNoZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0aWYgKCh0Y3BfZmxhZ193b3JkKHRoKSBcdTAwMjYgVENQX0hQX0JJVFMpID09IHRwLVx1MDAzZXByZWRfZmxhZ3MgXHUwMDI2XHUwMDI2XG4gXHQgICAgVENQX1NLQl9DQihza2IpLVx1MDAzZXNlcSA9PSB0cC1cdTAwM2VyY3Zfbnh0IFx1MDAyNlx1MDAyNlxuLVx0ICAgICFhZnRlcihUQ1BfU0tCX0NCKHNrYiktXHUwMDNlYWNrX3NlcSwgdHAtXHUwMDNlc25kX254dCkpIHtcbiYjNDM7XHQgICAgYmV0d2VlbihUQ1BfU0tCX0NCKHNrYiktXHUwMDNlYWNrX3NlcSwgdHAtXHUwMDNlc25kX3VuYSwgdHAtXHUwMDNlc25kX254dCkpIHtcbiBcdFx0aW50IHRjcF9oZWFkZXJfbGVuID0gdHAtXHUwMDNldGNwX2hlYWRlcl9sZW47XG4gXHRcdHMzMiBkZWx0YSA9IDA7XG4gXHRcdGludCBmbGFnID0gMDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX3JmYzU5NjFfcmVqZWN0LW9sZC1hY2sucGt0IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3BhY2tldGRyaWxsL3RjcF9yZmM1OTYxX3JlamVjdC1vbGQtYWNrLnBrdFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjMyZGQ5ZGUxZDM2NjJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3BfcmZjNTk2MV9yZWplY3Qtb2xkLWFjay5wa3RcbkBAIC0wLDAgJiM0MzsxLDI5IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO1xuJiM0MztgLi9kZWZhdWx0cy5zaFxuJiM0MztzeXNjdGwgLXEgbmV0LmlwdjQudGNwX2ludmFsaWRfcmF0ZWxpbWl0PTBcbiYjNDM7YFxuJiM0MztcbiYjNDM7Ly8gVGVzdCByZWplY3Rpb24gb2YgZGF0YSBzZWdtZW50cyBjYXJyeWluZyBleGNlc3NpdmVseSBvbGQgQUNLc1xuJiM0MztcbiYjNDM7MCBzb2NrZXQoLi4uLCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApID0gM1xuJiM0MzsmIzQzOzAgc2V0c29ja29wdCgzLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsIFsxXSwgNCkgPSAwXG4mIzQzOyYjNDM7MCBiaW5kKDMsIC4uLiwgLi4uKSA9IDBcbiYjNDM7JiM0MzswIGxpc3RlbigzLCAxMDI0KSA9IDBcbiYjNDM7XG4mIzQzOy8vIC0tLS0tLS0tLS0tLS0tLS0gSGFuZHNoYWtlIC0tLS0tLS0tLS0tLS0tLS0tLS0gLy9cbiYjNDM7JiM0MzswIFx1MDAzYyBTIDA6MCgwKSB3aW4gNjU1MzVcbiYjNDM7JiM0MzswIFx1MDAzZSBTLiAwOjAoMCkgYWNrIDEgXHUwMDNjLi4uXHUwMDNlXG4mIzQzOyYjNDM7MCBcdTAwM2MgLiAxOjEoMCkgYWNrIDEgd2luIDY1NTM1XG4mIzQzOyYjNDM7MCBhY2NlcHQoMywgLi4uLCAuLi4pID0gNFxuJiM0MztcbiYjNDM7Ly8gUG9wdWxhdGUgcmVjZWl2ZSBtZW1vcnkgc28gdGhlIGZvbGxvd2luZyBzZWdtZW50IGNhbiB1c2VcbiYjNDM7Ly8gaGVhZGVyIHByZWRpY3Rpb24uXG4mIzQzOyYjNDM7MCBcdTAwM2MgUC4gMTo1MDEoNTAwKSBhY2sgMSB3aW4gNjU1MzVcbiYjNDM7JiM0MzswIFx1MDAzZSAuIDE6MSgwKSBhY2sgNTAxXG4mIzQzO1xuJiM0MzsvLyBTZW5kIGFuIGluLXNlcXVlbmNlIGRhdGEgc2VnbWVudCBjYXJyeWluZyBhbiBleGNlc3NpdmVseSBvbGQgQUNLLlxuJiM0MzsmIzQzOzAgXHUwMDNjIFAuIDUwMToxNTAxKDEwMDApIGFjayAyNzk0OTY3Mzk3IHdpbiA2NTUzNVxuJiM0MztcbiYjNDM7Ly8gQ2hhbGxlbmdlIEFDSzsgUkNWLk5YVCBtdXN0IHJlbWFpbiA1MDEuXG4mIzQzOyYjNDM7MCBcdTAwM2UgLiAxOjEoMCkgYWNrIDUwMVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfcmN2X2VzdGFibGlzaGVkJiMzNDssCiAgICAmIzM0O3RjcF92YWxpZGF0ZV9pbmNvbWluZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbHRlcnMgdGhlIGZhc3QtcGF0aCBoZWFkZXIgcHJlZGljdGlvbiBjb25kaXRpb24gaW4gdGNwX3Jjdl9lc3RhYmxpc2hlZCgpIHRvIHJlcXVpcmUgdGhlIEFDSyBzZXF1ZW5jZSBudW1iZXIgdG8gZmFsbCBiZXR3ZWVuIFNORC5VTkEgYW5kIFNORC5OWFQuIFNlZ21lbnRzIHdpdGggb2xkIEFDS3MgYXJlIG5vdyByZWRpcmVjdGVkIHRvIHRoZSBzbG93IHBhdGggKHRjcF92YWxpZGF0ZV9pbmNvbWluZygpKSB0byBwcmV2ZW50IFJGQyA1OTYxIGJsaW5kIGRhdGEgaW5qZWN0aW9uLiBUaGlzIGFsdGVycyBjb3JlIFRDUCByZWNlaXZlIGxvZ2ljIGFuZCBpcyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIFRDUCBzb2NrZXQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGIzMTk4MzNhMGYwNTMzZGI3ZjhkNjhhMjI2MDIwZGUyOTA3YzVlNmEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCAxNCAxMDoxMjo0OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pbnB1dC5jIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKaW5kZXggZGFmZjkzZDUxMzQyOC4uMDNkMzE3YTU4MTMyNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2lucHV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKQEAgLTY0OTAsNiAmIzQzOzY0OTAsNyBAQCBzdGF0aWMgYm9vbCB0Y3BfdmFsaWRhdGVfaW5jb21pbmcoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogICoJICBvciBwdXJlIHJlY2VpdmVycyAodGhpcyBtZWFucyBlaXRoZXIgdGhlIHNlcXVlbmNlIG51bWJlciBvciB0aGUgYWNrCiAgKgkgIHZhbHVlIG11c3Qgc3RheSBjb25zdGFudCkKICAqCS0gVW5leHBlY3RlZCBUQ1Agb3B0aW9uLgomIzQzOyAqCS0gQUNLIHNlcXVlbmNlIG51bWJlciBpcyBvdXRzaWRlIFtTTkQuVU5BLCBTTkQuTlhUXS4KICAqCiAgKglXaGVuIHRoZXNlIGNvbmRpdGlvbnMgYXJlIG5vdCBzYXRpc2ZpZWQgaXQgZHJvcHMgaW50byBhIHN0YW5kYXJkCiAgKglyZWNlaXZlIHByb2NlZHVyZSBwYXR0ZXJuZWQgYWZ0ZXIgUkZDNzkzIHRvIGhhbmRsZSBhbGwgY2FzZXMuCkBAIC02NTM5LDcgJiM0Mzs2NTQwLDcgQEAgdm9pZCB0Y3BfcmN2X2VzdGFibGlzaGVkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAogCWlmICgodGNwX2ZsYWdfd29yZCh0aCkgJmFtcDsgVENQX0hQX0JJVFMpID09IHRwLSZndDtwcmVkX2ZsYWdzICZhbXA7JmFtcDsKIAkgICAgVENQX1NLQl9DQihza2IpLSZndDtzZXEgPT0gdHAtJmd0O3Jjdl9ueHQgJmFtcDsmYW1wOwotCSAgICAhYWZ0ZXIoVENQX1NLQl9DQihza2IpLSZndDthY2tfc2VxLCB0cC0mZ3Q7c25kX254dCkpIHsKJiM0MzsJICAgIGJldHdlZW4oVENQX1NLQl9DQihza2IpLSZndDthY2tfc2VxLCB0cC0mZ3Q7c25kX3VuYSwgdHAtJmd0O3NuZF9ueHQpKSB7CiAJCWludCB0Y3BfaGVhZGVyX2xlbiA9IHRwLSZndDt0Y3BfaGVhZGVyX2xlbjsKIAkJczMyIGRlbHRhID0gMDsKIAkJaW50IGZsYWcgPSAwOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3BhY2tldGRyaWxsL3RjcF9yZmM1OTYxX3JlamVjdC1vbGQtYWNrLnBrdCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3BfcmZjNTk2MV9yZWplY3Qtb2xkLWFjay5wa3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uMzJkZDlkZTFkMzY2MgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3BfcmZjNTk2MV9yZWplY3Qtb2xkLWFjay5wa3QKQEAgLTAsMCAmIzQzOzEsMjkgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzO2AuL2RlZmF1bHRzLnNoCiYjNDM7c3lzY3RsIC1xIG5ldC5pcHY0LnRjcF9pbnZhbGlkX3JhdGVsaW1pdD0wCiYjNDM7YAomIzQzOwomIzQzOy8vIFRlc3QgcmVqZWN0aW9uIG9mIGRhdGEgc2VnbWVudHMgY2FycnlpbmcgZXhjZXNzaXZlbHkgb2xkIEFDS3MKJiM0MzsKJiM0MzswIHNvY2tldCguLi4sIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCkgPSAzCiYjNDM7JiM0MzswIHNldHNvY2tvcHQoMywgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCBbMV0sIDQpID0gMAomIzQzOyYjNDM7MCBiaW5kKDMsIC4uLiwgLi4uKSA9IDAKJiM0MzsmIzQzOzAgbGlzdGVuKDMsIDEwMjQpID0gMAomIzQzOwomIzQzOy8vIC0tLS0tLS0tLS0tLS0tLS0gSGFuZHNoYWtlIC0tLS0tLS0tLS0tLS0tLS0tLS0gLy8KJiM0MzsmIzQzOzAgJmx0OyBTIDA6MCgwKSB3aW4gNjU1MzUKJiM0MzsmIzQzOzAgJmd0OyBTLiAwOjAoMCkgYWNrIDEgJmx0Oy4uLiZndDsKJiM0MzsmIzQzOzAgJmx0OyAuIDE6MSgwKSBhY2sgMSB3aW4gNjU1MzUKJiM0MzsmIzQzOzAgYWNjZXB0KDMsIC4uLiwgLi4uKSA9IDQKJiM0MzsKJiM0MzsvLyBQb3B1bGF0ZSByZWNlaXZlIG1lbW9yeSBzbyB0aGUgZm9sbG93aW5nIHNlZ21lbnQgY2FuIHVzZQomIzQzOy8vIGhlYWRlciBwcmVkaWN0aW9uLgomIzQzOyYjNDM7MCAmbHQ7IFAuIDE6NTAxKDUwMCkgYWNrIDEgd2luIDY1NTM1CiYjNDM7JiM0MzswICZndDsgLiAxOjEoMCkgYWNrIDUwMQomIzQzOwomIzQzOy8vIFNlbmQgYW4gaW4tc2VxdWVuY2UgZGF0YSBzZWdtZW50IGNhcnJ5aW5nIGFuIGV4Y2Vzc2l2ZWx5IG9sZCBBQ0suCiYjNDM7JiM0MzswICZsdDsgUC4gNTAxOjE1MDEoMTAwMCkgYWNrIDI3OTQ5NjczOTcgd2luIDY1NTM1CiYjNDM7CiYjNDM7Ly8gQ2hhbGxlbmdlIEFDSzsgUkNWLk5YVCBtdXN0IHJlbWFpbiA1MDEuCiYjNDM7JiM0MzswICZndDsgLiAxOjEoMCkgYWNrIDUwMQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTk4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFRDUCBJbnB1dCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHdlIGhhdmUgYSBwYXRjaCB0aGF0JiMzOTtzIHN1YnRseSBhbHRlcmluZyB0aGUgQUNLIHByb2Nlc3NpbmcgbG9naWMgd2l0aGluIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBpbiB0aGUgYG5ldC9pcHY0YCBkaXJlY3RvcnksIHNwZWNpZmljYWxseSB3aXRoaW4gYHRjcF9pbnB1dC5jYC4gTG9va2luZyBhdCB0aGUgZGlmZiwgaXQgbG9va3MgbGlrZSBhIGNoYW5nZSB0byBob3cgQUNLIHNlcXVlbmNlcyBhcmUgZXZhbHVhdGVkIGlzIGJlaW5nIG1hZGUuIEl0JiMzOTtzIHRpZ2h0ZW5pbmcgdGhlIGNvbmRpdGlvbnMgZm9yIHdoZW4gYW4gQUNLIGlzIGFjY2VwdGVkLCB1c2luZyBgYmV0d2VlbmAgaW5zdGVhZCBvZiBhIHBvdGVudGlhbGx5IGxlc3MgcHJlY2lzZSBgIWFmdGVyYCBjaGVjay4gVGhlIGNvZGUgc25pcHBldCBJIHNlZSBzaG93cyB0aGF0IHRoZSBjaGVjayBgIWFmdGVyKFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7YWNrX3NlcSwgdHAtJmd0O3NuZF9ueHQpYCBpcyBiZWluZyByZXBsYWNlZCB3aXRoIGBiZXR3ZWVuKFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7YWNrX3NlcSwgdHAtJmd0O3NuZF91bmEsIHRwLSZndDtzbmRfbnh0KWAuIEl0IGxvb2tzIGxpa2UgaXQgaXMgcmVsYXRlZCB0byBoYW5kbGluZyBvZiBvbGQgYWNrbm93bGVkZ2VtZW50cy4KCkl0JiMzOTtzIGltbWVkaWF0ZWx5IGNsZWFyIHRoaXMgcmVsYXRlcyB0byBhbiBpc3N1ZSB0aGF0IHByb2JhYmx5IGludm9sdmVzIHJlb3JkZXJpbmcgb3IgZGVsYXllZCBBQ0tzLCBvciBtYXliZSBldmVuIHByb3RlY3Rpb24gYWdhaW5zdCBBQ0sgYXR0YWNrcy4gQW5kIHRoZSBpbmNsdXNpb24gb2YgYSBwYWNrZXRkcmlsbCB0ZXN0LCBgdGNwX3JmYzU5NjFfcmVqZWN0LW9sZC1hY2sucGt0YCwgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBzcGVjaWZpYyBzY2VuYXJpbyBkZWZpbmVkIGluIFJGQyA1OTYxIHJlbGF0ZWQgdG8gcmVqZWN0aW5nIG9sZCBBQ0tzLiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSBvbGQgYmVoYXZpb3Igd2FzIHRvIHNlZSB3aGF0IHRoZSB2dWxuZXJhYmlsaXR5IGNvdWxkIGhhdmUgYmVlbi4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIGZ1bmN0aW9uIG1vcmUgZGVlcGx5IHRvIGdyYXNwIHRoZSBmdWxsIGltcGxpY2F0aW9ucy4gSSB3aWxsIHVzZSB0aGUgYHJlYWQtZmlsZWAgY29tbWFuZCB0byBsb2FkIHRoZSBjb2RlLiBJIGFtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgYGFja19zZXFgIGludGVyYWN0cyB3aXRoIGBzbmRfdW5hYCBhbmQgYHNuZF9ueHRgIGluIG5vcm1hbCBvcGVyYXRpb24uIEkmIzM5O20gYWxzbyBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0IG9mIHRoaXMgY2hhbmdlLCBhbmQgd2hhdCBsZWQgdG8gdGhpcyBwYXJ0aWN1bGFyIGxpbmUgYmVpbmcgdXBkYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9pbnB1dC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjUzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2NTMwOlx0XHR0cC1cdTAwM2VyeF9vcHQuYWNjZWNuID0gMDtcbjY1MzE6XHRcbjY1MzI6XHRcdC8qXHRwcmVkX2ZsYWdzIGlzIDB4Uz8xMCBcdTAwM2NcdTAwM2MgMTYgJiM0Mzsgc25kX3duZFxuNjUzMzpcdFx0ICpcdGlmIGhlYWRlcl9wcmVkaWN0aW9uIGlzIHRvIGJlIG1hZGVcbjY1MzQ6XHRcdCAqXHQmIzM5O1MmIzM5OyB3aWxsIGFsd2F5cyBiZSB0cC1cdTAwM2V0Y3BfaGVhZGVyX2xlbiBcdTAwM2VcdTAwM2UgMlxuNjUzNTpcdFx0ICpcdCYjMzk7PyYjMzk7IHdpbGwgYmUgMCBmb3IgdGhlIGZhc3QgcGF0aCwgb3RoZXJ3aXNlIHByZWRfZmxhZ3MgaXMgMCB0b1xuNjUzNjpcdFx0ICogIHR1cm4gaXQgb2ZmXHQod2hlbiB0aGVyZSBhcmUgaG9sZXMgaW4gdGhlIHJlY2VpdmVcbjY1Mzc6XHRcdCAqXHQgc3BhY2UgZm9yIGluc3RhbmNlKVxuNjUzODpcdFx0ICpcdFBTSCBmbGFnIGlzIGlnbm9yZWQuXG42NTM5Olx0XHQgKi9cbjY1NDA6XHRcbjY1NDE6XHRcdGlmICgodGNwX2ZsYWdfd29yZCh0aCkgXHUwMDI2IFRDUF9IUF9CSVRTKSA9PSB0cC1cdTAwM2VwcmVkX2ZsYWdzIFx1MDAyNlx1MDAyNlxuNjU0MjpcdFx0ICAgIFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VzZXEgPT0gdHAtXHUwMDNlcmN2X254dCBcdTAwMjZcdTAwMjZcbjY1NDM6XHRcdCAgICBiZXR3ZWVuKFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VhY2tfc2VxLCB0cC1cdTAwM2VzbmRfdW5hLCB0cC1cdTAwM2VzbmRfbnh0KSkge1xuNjU0NDpcdFx0XHRpbnQgdGNwX2hlYWRlcl9sZW4gPSB0cC1cdTAwM2V0Y3BfaGVhZGVyX2xlbjtcbjY1NDU6XHRcdFx0czMyIGRlbHRhID0gMDtcbjY1NDY6XHRcdFx0aW50IGZsYWcgPSAwO1xuNjU0NzpcdFxuNjU0ODpcdFx0XHQvKiBUaW1lc3RhbXAgaGVhZGVyIHByZWRpY3Rpb246IHRjcF9oZWFkZXJfbGVuXG42NTQ5Olx0XHRcdCAqIGlzIGF1dG9tYXRpY2FsbHkgZXF1YWwgdG8gdGgtXHUwMDNlZG9mZio0IGR1ZSB0byBwcmVkX2ZsYWdzXG42NTUwOlx0XHRcdCAqIG1hdGNoLlxuNjU1MTpcdFx0XHQgKi9cbjY1NTI6XHRcbjY1NTM6XHRcdFx0LyogQ2hlY2sgdGltZXN0YW1wICovXG42NTU0Olx0XHRcdGlmICh0Y3BfaGVhZGVyX2xlbiA9PSBzaXplb2Yoc3RydWN0IHRjcGhkcikgJiM0MzsgVENQT0xFTl9UU1RBTVBfQUxJR05FRCkge1xuNjU1NTpcdFx0XHRcdC8qIE5vPyBTbG93IHBhdGghICovXG42NTU2Olx0XHRcdFx0aWYgKCF0Y3BfcGFyc2VfYWxpZ25lZF90aW1lc3RhbXAodHAsIHRoKSlcbjY1NTc6XHRcdFx0XHRcdGdvdG8gc2xvd19wYXRoO1xuNjU1ODpcdFxuNjU1OTpcdFx0XHRcdGRlbHRhID0gdHAtXHUwMDNlcnhfb3B0LnJjdl90c3ZhbCAtXG42NTYwOlx0XHRcdFx0XHR0cC1cdTAwM2VyeF9vcHQudHNfcmVjZW50O1xuNjU2MTpcdFx0XHRcdC8qIElmIFBBV1MgZmFpbGVkLCBjaGVjayBpdCBtb3JlIGNhcmVmdWxseSBpbiBzbG93IHBhdGggKi9cbjY1NjI6XHRcdFx0XHRpZiAoZGVsdGEgXHUwMDNjIDApXG42NTYzOlx0XHRcdFx0XHRnb3RvIHNsb3dfcGF0aDtcbjY1NjQ6XHRcbjY1NjU6XHRcdFx0XHQvKiBETyBOT1QgdXBkYXRlIHRzX3JlY2VudCBoZXJlLCBpZiBjaGVja3N1bSBmYWlsc1xuNjU2NjpcdFx0XHRcdCAqIGFuZCB0aW1lc3RhbXAgd2FzIGNvcnJ1cHRlZCBwYXJ0LCBpdCB3aWxsIHJlc3VsdFxuNjU2NzpcdFx0XHRcdCAqIGluIGEgaHVuZyBjb25uZWN0aW9uIHNpbmNlIHdlIHdpbGwgZHJvcCBhbGxcbjY1Njg6XHRcdFx0XHQgKiBmdXR1cmUgcGFja2V0cyBkdWUgdG8gdGhlIFBBV1MgdGVzdC5cbjY1Njk6XHRcdFx0XHQgKi9cbjY1NzA6XHRcdFx0fVxuNjU3MTpcdFxuNjU3MjpcdFx0XHRpZiAobGVuIFx1MDAzYz0gdGNwX2hlYWRlcl9sZW4pIHtcbjY1NzM6XHRcdFx0XHQvKiBCdWxrIGRhdGEgdHJhbnNmZXI6IHNlbmRlciAqL1xuNjU3NDpcdFx0XHRcdGlmIChsZW4gPT0gdGNwX2hlYWRlcl9sZW4pIHtcbjY1NzU6XHRcdFx0XHRcdC8qIFByZWRpY3RlZCBwYWNrZXQgaXMgaW4gd2luZG93IGJ5IGRlZmluaXRpb24uXG42NTc2Olx0XHRcdFx0XHQgKiBzZXEgPT0gcmN2X254dCBhbmQgcmN2X3d1cCBcdTAwM2M9IHJjdl9ueHQuXG42NTc3Olx0XHRcdFx0XHQgKiBIZW5jZSwgY2hlY2sgc2VxXHUwMDNjPXJjdl93dXAgcmVkdWNlcyB0bzpcbjY1Nzg6XHRcdFx0XHRcdCAqL1xuNjU3OTpcdFx0XHRcdFx0aWYgKHRjcF9oZWFkZXJfbGVuID09XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE2OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDgwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBUQ1AgSGVhZGVyIFByZWRpY3Rpb24gQ2hhbmdlIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGNoYW5nZSBpbiBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAuIEl0IHNlZW1zIHRoZXkmIzM5O3ZlIHRpZ2h0ZW5lZCB1cCB0aGUgaGVhZGVyIHByZWRpY3Rpb24gbG9naWMsIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyB0aGUgYGFja19zZXFgLiBQcmV2aW91c2x5LCBpZiBgYWNrX3NlcWAgd2FzICpiZWZvcmUqIGB0cC0mZ3Q7c25kX3VuYWAsIGl0IGNvdWxkIHN0aWxsIHRha2UgdGhlIGZhc3QgcGF0aC4gTm93LCBpdCYjMzk7cyBleHBsaWNpdGx5IGV4Y2x1ZGVkIGZyb20gdGhlIGZhc3QgcGF0aCwgZm9yY2luZyBpdCBkb3duIHRoZSBzbG93IHBhdGggaWYgYGFja19zZXFgIGlzIG91dHNpZGUgYFtTTkQuVU5BLCBTTkQuTlhUXWAuIFRoZSBjb21tZW50IG1lbnRpb25zIFJGQyA1OTYxIGFuZCAmIzM0O2JsaW5kIGRhdGEgaW5qZWN0aW9uIG9yIG9sZCBBQ0tzJiMzNDsuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlIOKAkyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBwb3RlbnRpYWxseSBoYW5kbGluZyBvdXQtb2Ytb3JkZXIgb3IgbWFsaWNpb3VzIEFDS3MuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IElzIHRoaXMgcmVhY2hhYmxlIGNvZGU/IE9mIGNvdXJzZSEgYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIGlzIHRoZSBoZWFydCBvZiBUQ1AgcGFja2V0IHByb2Nlc3NpbmcgZm9yIGVzdGFibGlzaGVkIGNvbm5lY3Rpb25zLiBUaGlzIGlzIHN0YW5kYXJkIHN0dWZmLCBzbyB0aGF0JiMzOTtzIGEgZGVmaW5pdGUgJiMzNDt5ZXMuJiMzNDsKCk5leHQsIGxldCYjMzk7cyBzZWUgaWYgaXQmIzM5O3MgZnV6emFibGUuIFRoZSAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IGd1aWRlbGluZXMgYXJlIG15IGd1aWRlIGhlcmUuIFJlYWNoYWJpbGl0eSBpcyB0aGUgcHJpbWFyeSBnYXRlLCBhbmQgdGhpcyBjb2RlIGRlZmluaXRlbHkgZXhlY3V0ZXMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGVuLCBjb3JlIHN1YnN5c3RlbXMgbGlrZSBuZXR3b3JraW5nIGFyZSBwcmltZSB0YXJnZXRzLCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4KCkFscmlnaHQsIHdoYXQgZnVuY3Rpb25zIHNob3VsZCBJIGZvY3VzIG9uPyBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAgaXMgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgdGhpcyBzaG91bGQgYmUgbXkgbWFpbiBlbnRyeXBvaW50LiBCdXQgYW0gSSB2aW9sYXRpbmcgdGhlICYjMzQ7QVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTJiMzNDsgcnVsZT8gSSBuZWVkIHRvIGJlIGNhcmVmdWwgbm90IHRvIGRpbHV0ZSB0aGUgZnV6emluZyBlZmZvcnQuIElzIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBhIGdlbmVyaWMgZnVuY3Rpb24gY2FsbGVkIGJ5IGV2ZXJ5dGhpbmc/IE5vLCBpdCYjMzk7cyBzcGVjaWZpYyB0byBUQ1AgcGFja2V0IHJlY2VpdmUuIEl0JiMzOTtzIGNhbGxlZCB3aGVuIHBhY2tldHMgYXJlIHJlY2VpdmVkIG9uIGVzdGFibGlzaGVkIFRDUCBzb2NrZXRzLCBzbyBpdCYjMzk7cyBub3QgdWJpcXVpdG91cy4gQnV0IGRvZXMgaXQgY2FsbCBzbG93X3BhdGggb3IgdGNwX3ZhbGlkYXRlX2luY29taW5nPyBJZiBpdCBkb2VzLCB0aGVuIHRoZSB3b3JrIGlzIGV2ZW4gbW9yZSBmb2N1c2VkLiBJIG5lZWQgdG8gY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG5ldC9pcHY0L3RjcF9pbnB1dC5jYCBhcm91bmQgbGluZXMgNjU0MC02NjUwIHRvIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfaW5wdXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY2NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjY0MDpcdFxuNjY0MTpcdFx0XHRcdGlmIChUQ1BfU0tCX0NCKHNrYiktXHUwMDNlYWNrX3NlcSAhPSB0cC1cdTAwM2VzbmRfdW5hKSB7XG42NjQyOlx0XHRcdFx0XHQvKiBXZWxsLCBvbmx5IG9uZSBzbWFsbCBqdW1wbGV0IGluIGZhc3QgcGF0aC4uLiAqL1xuNjY0MzpcdFx0XHRcdFx0dGNwX2Fjayhzaywgc2tiLCBmbGFnIHwgRkxBR19EQVRBKTtcbjY2NDQ6XHRcdFx0XHRcdHRjcF9kYXRhX3NuZF9jaGVjayhzayk7XG42NjQ1Olx0XHRcdFx0XHRpZiAoIWluZXRfY3NrX2Fja19zY2hlZHVsZWQoc2spKVxuNjY0NjpcdFx0XHRcdFx0XHRnb3RvIG5vX2FjaztcbjY2NDc6XHRcdFx0XHR9IGVsc2Uge1xuNjY0ODpcdFx0XHRcdFx0dGNwX3VwZGF0ZV93bCh0cCwgVENQX1NLQl9DQihza2IpLVx1MDAzZXNlcSk7XG42NjQ5Olx0XHRcdFx0fVxuNjY1MDpcdFxuNjY1MTpcdFx0XHRcdF9fdGNwX2Fja19zbmRfY2hlY2soc2ssIDApO1xuNjY1MjpcdG5vX2FjazpcbjY2NTM6XHRcdFx0XHRpZiAoZWF0ZW4pXG42NjU0Olx0XHRcdFx0XHRrZnJlZV9za2JfcGFydGlhbChza2IsIGZyYWdzdG9sZW4pO1xuNjY1NTpcdFx0XHRcdHRjcF9kYXRhX3JlYWR5KHNrKTtcbjY2NTY6XHRcdFx0XHRyZXR1cm47XG42NjU3Olx0XHRcdH1cbjY2NTg6XHRcdH1cbjY2NTk6XHRcbjY2NjA6XHRzbG93X3BhdGg6XG42NjYxOlx0XHRpZiAobGVuIFx1MDAzYyAodGgtXHUwMDNlZG9mZiBcdTAwM2NcdTAwM2MgMikgfHwgdGNwX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpXG42NjYyOlx0XHRcdGdvdG8gY3N1bV9lcnJvcjtcbjY2NjM6XHRcbjY2NjQ6XHRcdGlmICghdGgtXHUwMDNlYWNrIFx1MDAyNlx1MDAyNiAhdGgtXHUwMDNlcnN0IFx1MDAyNlx1MDAyNiAhdGgtXHUwMDNlc3luKSB7XG42NjY1Olx0XHRcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9UQ1BfRkxBR1M7XG42NjY2Olx0XHRcdGdvdG8gZGlzY2FyZDtcbjY2Njc6XHRcdH1cbjY2Njg6XHRcbjY2Njk6XHRcdC8qXG42NjcwOlx0XHQgKlx0U3RhbmRhcmQgc2xvdyBwYXRoLlxuNjY3MTpcdFx0ICovXG42NjcyOlx0dmFsaWRhdGU6XG42NjczOlx0XHRpZiAoIXRjcF92YWxpZGF0ZV9pbmNvbWluZyhzaywgc2tiLCB0aCwgMSkpXG42Njc0Olx0XHRcdHJldHVybjtcbjY2NzU6XHRcbjY2NzY6XHRzdGVwNTpcbjY2Nzc6XHRcdHRjcF9lY25fcmVjZWl2ZWRfY291bnRlcnNfcGF5bG9hZChzaywgc2tiKTtcbjY2Nzg6XHRcbjY2Nzk6XHRcdHJlYXNvbiA9IHRjcF9hY2soc2ssIHNrYiwgRkxBR19TTE9XUEFUSCB8IEZMQUdfVVBEQVRFX1RTX1JFQ0VOVCk7XG42NjgwOlx0XHRpZiAoKGludClyZWFzb24gXHUwMDNjIDApIHtcbjY2ODE6XHRcdFx0cmVhc29uID0gLXJlYXNvbjtcbjY2ODI6XHRcdFx0Z290byBkaXNjYXJkO1xuNjY4MzpcdFx0fVxuNjY4NDpcdFx0dGNwX3Jjdl9ydHRfbWVhc3VyZV90cyhzaywgc2tiKTtcbjY2ODU6XHRcbjY2ODY6XHRcdC8qIFByb2Nlc3MgdXJnZW50IGRhdGEuICovXG42Njg3Olx0XHR0Y3BfdXJnKHNrLCBza2IsIHRoKTtcbjY2ODg6XHRcbjY2ODk6XHRcdC8qIHN0ZXAgNzogcHJvY2VzcyB0aGUgc2VnbWVudCB0ZXh0ICovXG42NjkwOlx0XHR0Y3BfZGF0YV9xdWV1ZShzaywgc2tiKTtcbjY2OTE6XHRcbjY2OTI6XHRcdHRjcF9kYXRhX3NuZF9jaGVjayhzayk7XG42NjkzOlx0XHR0Y3BfYWNrX3NuZF9jaGVjayhzayk7XG42Njk0Olx0XHRyZXR1cm47XG42Njk1Olx0XG42Njk2Olx0Y3N1bV9lcnJvcjpcbjY2OTc6XHRcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9UQ1BfQ1NVTTtcbjY2OTg6XHRcdHRyYWNlX3RjcF9iYWRfY3N1bShza2IpO1xuNjY5OTpcdFx0VENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIFRDUF9NSUJfQ1NVTUVSUk9SUyk7XG42NzAwOlx0XHRUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgVENQX01JQl9JTkVSUlMpO1xuNjcwMTpcdFxuNjcwMjpcdGRpc2NhcmQ6XG42NzAzOlx0XHR0Y3BfZHJvcF9yZWFzb24oc2ssIHNrYiwgcmVhc29uKTtcbjY3MDQ6XHR9XG42NzA1Olx0XG42NzA2Olx0dm9pZCB0Y3BfaW5pdF90cmFuc2ZlcihzdHJ1Y3Qgc29jayAqc2ssIGludCBicGZfb3AsIHN0cnVjdCBza19idWZmICpza2IpXG42NzA3Olx0e1xuNjcwODpcdFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xuNjcwOTpcdFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XG42NzEwOlx0XG42NzExOlx0XHR0Y3BfbXR1cF9pbml0KHNrKTtcbjY3MTI6XHRcdGljc2stXHUwMDNlaWNza19hZl9vcHMtXHUwMDNlcmVidWlsZF9oZWFkZXIoc2spO1xuNjcxMzpcdFx0dGNwX2luaXRfbWV0cmljcyhzayk7XG42NzE0Olx0XG42NzE1Olx0XHQvKiBJbml0aWFsaXplIHRoZSBjb25nZXN0aW9uIHdpbmRvdyB0byBzdGFydCB0aGUgdHJhbnNmZXIuXG42NzE2Olx0XHQgKiBDdXQgY3duZCBkb3duIHRvIDEgcGVyIFJGQzU2ODEgaWYgU1lOIG9yIFNZTi1BQ0sgaGFzIGJlZW5cbjY3MTc6XHRcdCAqIHJldHJhbnNtaXR0ZWQuIEluIGxpZ2h0IG9mIFJGQzYyOTggbW9yZSBhZ2dyZXNzaXZlIDFzZWNcbjY3MTg6XHRcdCAqIGluaXRSVE8sIHdlIG9ubHkgcmVzZXQgY3duZCB3aGVuIG1vcmUgdGhhbiAxIFNZTi9TWU4tQUNLXG42NzE5Olx0XHQgKiByZXRyYW5zbWlzc2lvbiBoYXMgb2NjdXJyZWQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY4MwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqQW5hbHl6aW5nIHRoZSBUQ1AgU2VxdWVuY2UgVmVyaWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2tpbmcgdGhpcyBgYWNrX3NlcWAgdmFsdWUgYW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gYHRwLSZndDtzbmRfdW5hYCB3aXRoaW4gdGhlIFRDUCBzZXF1ZW5jZS4gV2hlbiBgYWNrX3NlcWAgcHJlY2VkZXMgYHRwLSZndDtzbmRfdW5hYCwgdGhlIGZsb3cgbm93IGltbWVkaWF0ZWx5IGJyYW5jaGVzIHRvIHRoZSBgc2xvd19wYXRoOmAgbGFiZWwsIGFuZCB0aGF0IHF1aWNrbHkgbGFuZHMgbWUgaW4gYHRjcF92YWxpZGF0ZV9pbmNvbWluZygpYC4gR2l2ZW4gdGhhdCBJIGhhdmUgYSBnb29kIGhhbmRsZSBvbiBob3cgdGhlIGNvZGUgYmFzZSB3b3JrcywgYW5kIGFtIHRyeWluZyB0byB1bmRlcnN0YW5kICp3aHkqIGEgcmVjZW50IGlzc3VlIGlzIGhhcHBlbmluZywgbXkgbmV4dCBzdG9wIGlzIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgc2NydXRpbml6aW5nIHRoZSBsb2dpYyB3aXRoaW4gYHRjcF92YWxpZGF0ZV9pbmNvbWluZygpYCwgbGlrZWx5IGFyb3VuZCBsaW5lIDY0OTAuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIHRoZXJlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2lucHV0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY0NTA6XHRcdFx0ICAgIFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VzZXEgJiM0MzsgMSA9PSB0cC1cdTAwM2VyY3Zfbnh0IFx1MDAyNlx1MDAyNlxuNjQ1MTpcdFx0XHQgICAgVENQX1NLQl9DQihza2IpLVx1MDAzZWFja19zZXEgPT0gdHAtXHUwMDNlc25kX254dClcbjY0NTI6XHRcdFx0XHRnb3RvIHBhc3M7XG42NDUzOlx0c3luX2NoYWxsZW5nZTpcbjY0NTQ6XHRcdFx0aWYgKHN5bl9pbmVycilcbjY0NTU6XHRcdFx0XHRUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgVENQX01JQl9JTkVSUlMpO1xuNjQ1NjpcdFx0XHRORVRfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1RDUFNZTkNIQUxMRU5HRSk7XG42NDU3Olx0XHRcdHRjcF9zZW5kX2NoYWxsZW5nZV9hY2soc2ssIGFjY2Vjbl9yZWZsZWN0b3IpO1xuNjQ1ODpcdFx0XHRTS0JfRFJfU0VUKHJlYXNvbiwgVENQX0lOVkFMSURfU1lOKTtcbjY0NTk6XHRcdFx0Z290byBkaXNjYXJkO1xuNjQ2MDpcdFx0fVxuNjQ2MTpcdFxuNjQ2MjpcdHBhc3M6XG42NDYzOlx0XHRicGZfc2tvcHNfcGFyc2VfaGRyKHNrLCBza2IpO1xuNjQ2NDpcdFxuNjQ2NTpcdFx0cmV0dXJuIHRydWU7XG42NDY2Olx0XG42NDY3Olx0ZGlzY2FyZDpcbjY0Njg6XHRcdHRjcF9kcm9wX3JlYXNvbihzaywgc2tiLCByZWFzb24pO1xuNjQ2OTpcdFx0cmV0dXJuIGZhbHNlO1xuNjQ3MDpcdFxuNjQ3MTpcdHJlc2V0OlxuNjQ3MjpcdFx0dGNwX3Jlc2V0KHNrLCBza2IpO1xuNjQ3MzpcdFx0X19rZnJlZV9za2Ioc2tiKTtcbjY0NzQ6XHRcdHJldHVybiBmYWxzZTtcbjY0NzU6XHR9XG42NDc2Olx0XG42NDc3Olx0LypcbjY0Nzg6XHQgKlx0VENQIHJlY2VpdmUgZnVuY3Rpb24gZm9yIHRoZSBFU1RBQkxJU0hFRCBzdGF0ZS5cbjY0Nzk6XHQgKlxuNjQ4MDpcdCAqXHRJdCBpcyBzcGxpdCBpbnRvIGEgZmFzdCBwYXRoIGFuZCBhIHNsb3cgcGF0aC4gVGhlIGZhc3QgcGF0aCBpc1xuNjQ4MTpcdCAqIFx0ZGlzYWJsZWQgd2hlbjpcbjY0ODI6XHQgKlx0LSBBIHplcm8gd2luZG93IHdhcyBhbm5vdW5jZWQgZnJvbSB1cyAtIHplcm8gd2luZG93IHByb2JpbmdcbjY0ODM6XHQgKiAgICAgICAgaXMgb25seSBoYW5kbGVkIHByb3Blcmx5IGluIHRoZSBzbG93IHBhdGguXG42NDg0Olx0ICpcdC0gT3V0IG9mIG9yZGVyIHNlZ21lbnRzIGFycml2ZWQuXG42NDg1Olx0ICpcdC0gVXJnZW50IGRhdGEgaXMgZXhwZWN0ZWQuXG42NDg2Olx0ICpcdC0gVGhlcmUgaXMgbm8gYnVmZmVyIHNwYWNlIGxlZnRcbjY0ODc6XHQgKlx0LSBVbmV4cGVjdGVkIFRDUCBmbGFncy93aW5kb3cgdmFsdWVzL2hlYWRlciBsZW5ndGhzIGFyZSByZWNlaXZlZFxuNjQ4ODpcdCAqXHQgIChkZXRlY3RlZCBieSBjaGVja2luZyB0aGUgVENQIGhlYWRlciBhZ2FpbnN0IHByZWRfZmxhZ3MpXG42NDg5Olx0ICpcdC0gRGF0YSBpcyBzZW50IGluIGJvdGggZGlyZWN0aW9ucy4gRmFzdCBwYXRoIG9ubHkgc3VwcG9ydHMgcHVyZSBzZW5kZXJzXG42NDkwOlx0ICpcdCAgb3IgcHVyZSByZWNlaXZlcnMgKHRoaXMgbWVhbnMgZWl0aGVyIHRoZSBzZXF1ZW5jZSBudW1iZXIgb3IgdGhlIGFja1xuNjQ5MTpcdCAqXHQgIHZhbHVlIG11c3Qgc3RheSBjb25zdGFudClcbjY0OTI6XHQgKlx0LSBVbmV4cGVjdGVkIFRDUCBvcHRpb24uXG42NDkzOlx0ICpcdC0gQUNLIHNlcXVlbmNlIG51bWJlciBpcyBvdXRzaWRlIFtTTkQuVU5BLCBTTkQuTlhUXS5cbjY0OTQ6XHQgKlxuNjQ5NTpcdCAqXHRXaGVuIHRoZXNlIGNvbmRpdGlvbnMgYXJlIG5vdCBzYXRpc2ZpZWQgaXQgZHJvcHMgaW50byBhIHN0YW5kYXJkXG42NDk2Olx0ICpcdHJlY2VpdmUgcHJvY2VkdXJlIHBhdHRlcm5lZCBhZnRlciBSRkM3OTMgdG8gaGFuZGxlIGFsbCBjYXNlcy5cbjY0OTc6XHQgKlx0VGhlIGZpcnN0IHRocmVlIGNhc2VzIGFyZSBndWFyYW50ZWVkIGJ5IHByb3BlciBwcmVkX2ZsYWdzIHNldHRpbmcsXG42NDk4Olx0ICpcdHRoZSByZXN0IGlzIGNoZWNrZWQgaW5saW5lLiBGYXN0IHByb2Nlc3NpbmcgaXMgdHVybmVkIG9uIGluXG42NDk5Olx0ICpcdHRjcF9kYXRhX3F1ZXVlIHdoZW4gZXZlcnl0aGluZyBpcyBPSy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzY3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gVENQIFZhbGlkYXRpb24gZm9yIFJGQyA1OTYxIENvbXBhdGliaWxpdHkqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwmIzM5O3MgYHRjcF92YWxpZGF0ZV9pbmNvbWluZ2AgZnVuY3Rpb24gaGFuZGxlcyBpbmNvbWluZyBUQ1Agc2VnbWVudHMsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byBSRkMgNTk2MSwgb3IgaG93IGl0IHRyZWF0cyBvbGRlciBhY2tub3dsZWRnZW1lbnRzLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb2RlIHRvIGZpZ3VyZSB0aGlzIG91dC4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgaW4gdGhlIGBuZXQvaXB2NC90Y3BfaW5wdXQuY2AgZmlsZSwgd2hlcmUgdGhlIGNvcmUgVENQIGlucHV0IHByb2Nlc3NpbmcgbG9naWMgcmVzaWRlcy4gSSYjMzk7bGwgZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGxpbmVzIDYzNzAgdGhyb3VnaCA2NDUwLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIGxvZ2ljIGJlaW5nIHVzZWQuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLiBUaGlzIHdpbGwgYmUgdGhlIGtleSBwYXJ0IG9mIHRoaXMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2lucHV0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MzcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzYzNzA6XHRcdFx0XHRpZiAodGgtXHUwMDNlc3luKVxuNjM3MTpcdFx0XHRcdFx0Z290byBzeW5fY2hhbGxlbmdlO1xuNjM3MjpcdFxuNjM3MzpcdFx0XHRcdGlmIChyZWFzb24gPT0gU0tCX0RST1BfUkVBU09OX1RDUF9JTlZBTElEX1NFUVVFTkNFIHx8XG42Mzc0Olx0XHRcdFx0ICAgIHJlYXNvbiA9PSBTS0JfRFJPUF9SRUFTT05fVENQX0lOVkFMSURfRU5EX1NFUVVFTkNFKVxuNjM3NTpcdFx0XHRcdFx0TkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksXG42Mzc2Olx0XHRcdFx0XHRcdCAgICAgIExJTlVYX01JQl9CRVlPTkRfV0lORE9XKTtcbjYzNzc6XHRcdFx0XHRpZiAoIXRjcF9vb3dfcmF0ZV9saW1pdGVkKHNvY2tfbmV0KHNrKSwgc2tiLFxuNjM3ODpcdFx0XHRcdFx0XHRcdCAgTElOVVhfTUlCX1RDUEFDS1NLSVBQRURTRVEsXG42Mzc5Olx0XHRcdFx0XHRcdFx0ICBcdTAwMjZ0cC1cdTAwM2VsYXN0X29vd19hY2tfdGltZSkpXG42MzgwOlx0XHRcdFx0XHR0Y3Bfc2VuZF9kdXBhY2soc2ssIHNrYik7XG42MzgxOlx0XHRcdH0gZWxzZSBpZiAodGNwX3Jlc2V0X2NoZWNrKHNrLCBza2IpKSB7XG42MzgyOlx0XHRcdFx0Z290byByZXNldDtcbjYzODM6XHRcdFx0fVxuNjM4NDpcdFx0XHRnb3RvIGRpc2NhcmQ7XG42Mzg1Olx0XHR9XG42Mzg2Olx0XG42Mzg3Olx0XHQvKiBTdGVwIDI6IGNoZWNrIFJTVCBiaXQgKi9cbjYzODg6XHRcdGlmICh0aC1cdTAwM2Vyc3QpIHtcbjYzODk6XHRcdFx0LyogUkZDIDU5NjEgMy4yIChleHRlbmQgdG8gbWF0Y2ggYWdhaW5zdCAoUkNWLk5YVCAtIDEpIGFmdGVyIGFcbjYzOTA6XHRcdFx0ICogRklOIGFuZCBTQUNLIHRvbyBpZiBhdmFpbGFibGUpOlxuNjM5MTpcdFx0XHQgKiBJZiBzZXEgbnVtIG1hdGNoZXMgUkNWLk5YVCBvciAoUkNWLk5YVCAtIDEpIGFmdGVyIGEgRklOLCBvclxuNjM5MjpcdFx0XHQgKiB0aGUgcmlnaHQtbW9zdCBTQUNLIGJsb2NrLFxuNjM5MzpcdFx0XHQgKiB0aGVuXG42Mzk0Olx0XHRcdCAqICAgICBSRVNFVCB0aGUgY29ubmVjdGlvblxuNjM5NTpcdFx0XHQgKiBlbHNlXG42Mzk2Olx0XHRcdCAqICAgICBTZW5kIGEgY2hhbGxlbmdlIEFDS1xuNjM5NzpcdFx0XHQgKi9cbjYzOTg6XHRcdFx0aWYgKFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VzZXEgPT0gdHAtXHUwMDNlcmN2X254dCB8fFxuNjM5OTpcdFx0XHQgICAgdGNwX3Jlc2V0X2NoZWNrKHNrLCBza2IpKVxuNjQwMDpcdFx0XHRcdGdvdG8gcmVzZXQ7XG42NDAxOlx0XG42NDAyOlx0XHRcdGlmICh0Y3BfaXNfc2Fjayh0cCkgXHUwMDI2XHUwMDI2IHRwLVx1MDAzZXJ4X29wdC5udW1fc2Fja3MgXHUwMDNlIDApIHtcbjY0MDM6XHRcdFx0XHRzdHJ1Y3QgdGNwX3NhY2tfYmxvY2sgKnNwID0gXHUwMDI2dHAtXHUwMDNlc2VsZWN0aXZlX2Fja3NbMF07XG42NDA0Olx0XHRcdFx0aW50IG1heF9zYWNrID0gc3BbMF0uZW5kX3NlcTtcbjY0MDU6XHRcdFx0XHRpbnQgdGhpc19zYWNrO1xuNjQwNjpcdFxuNjQwNzpcdFx0XHRcdGZvciAodGhpc19zYWNrID0gMTsgdGhpc19zYWNrIFx1MDAzYyB0cC1cdTAwM2VyeF9vcHQubnVtX3NhY2tzO1xuNjQwODpcdFx0XHRcdCAgICAgJiM0MzsmIzQzO3RoaXNfc2Fjaykge1xuNjQwOTpcdFx0XHRcdFx0bWF4X3NhY2sgPSBhZnRlcihzcFt0aGlzX3NhY2tdLmVuZF9zZXEsXG42NDEwOlx0XHRcdFx0XHRcdFx0IG1heF9zYWNrKSA/XG42NDExOlx0XHRcdFx0XHRcdHNwW3RoaXNfc2Fja10uZW5kX3NlcSA6IG1heF9zYWNrO1xuNjQxMjpcdFx0XHRcdH1cbjY0MTM6XHRcbjY0MTQ6XHRcdFx0XHRpZiAoVENQX1NLQl9DQihza2IpLVx1MDAzZXNlcSA9PSBtYXhfc2FjaylcbjY0MTU6XHRcdFx0XHRcdGdvdG8gcmVzZXQ7XG42NDE2Olx0XHRcdH1cbjY0MTc6XHRcbjY0MTg6XHRcdFx0LyogRGlzYWJsZSBURk8gaWYgUlNUIGlzIG91dC1vZi1vcmRlclxuNjQxOTpcdFx0XHQgKiBhbmQgbm8gZGF0YSBoYXMgYmVlbiByZWNlaXZlZFxuNjQyMDpcdFx0XHQgKiBmb3IgY3VycmVudCBhY3RpdmUgVEZPIHNvY2tldFxuNjQyMTpcdFx0XHQgKi9cbjY0MjI6XHRcdFx0aWYgKHRwLVx1MDAzZXN5bl9mYXN0b3BlbiBcdTAwMjZcdTAwMjYgIXRwLVx1MDAzZWRhdGFfc2Vnc19pbiBcdTAwMjZcdTAwMjZcbjY0MjM6XHRcdFx0ICAgIHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9FU1RBQkxJU0hFRClcbjY0MjQ6XHRcdFx0XHR0Y3BfZmFzdG9wZW5fYWN0aXZlX2Rpc2FibGUoc2spO1xuNjQyNTpcdFx0XHR0Y3Bfc2VuZF9jaGFsbGVuZ2VfYWNrKHNrLCBmYWxzZSk7XG42NDI2Olx0XHRcdFNLQl9EUl9TRVQocmVhc29uLCBUQ1BfUkVTRVQpO1xuNjQyNzpcdFx0XHRnb3RvIGRpc2NhcmQ7XG42NDI4Olx0XHR9XG42NDI5Olx0XG42NDMwOlx0XHQvKiBzdGVwIDM6IGNoZWNrIHNlY3VyaXR5IGFuZCBwcmVjZWRlbmNlIFtpZ25vcmVkXSAqL1xuNjQzMTpcdFxuNjQzMjpcdFx0Lyogc3RlcCA0OiBDaGVjayBmb3IgYSBTWU5cbjY0MzM6XHRcdCAqIFJGQyA1OTYxIDQuMiA6IFNlbmQgYSBjaGFsbGVuZ2UgYWNrXG42NDM0Olx0XHQgKi9cbjY0MzU6XHRcdGlmICh0aC1cdTAwM2VzeW4pIHtcbjY0MzY6XHRcdFx0aWYgKHRjcF9lY25fbW9kZV9hY2NlY24odHApKSB7XG42NDM3Olx0XHRcdFx0YWNjZWNuX3JlZmxlY3RvciA9IHRydWU7XG42NDM4Olx0XHRcdFx0dHAtXHUwMDNlc3luX2VjdF9yY3YgPSBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlaXBfZHNmaWVsZCBcdTAwMjZcbjY0Mzk6XHRcdFx0XHRcdFx0ICBJTkVUX0VDTl9NQVNLO1xuNjQ0MDpcdFx0XHRcdGlmICh0cC1cdTAwM2VyeF9vcHQuYWNjZWNuIFx1MDAyNlx1MDAyNlxuNjQ0MTpcdFx0XHRcdCAgICB0cC1cdTAwM2VzYXdfYWNjZWNuX29wdCBcdTAwM2MgVENQX0FDQ0VDTl9PUFRfQ09VTlRFUl9TRUVOKSB7XG42NDQyOlx0XHRcdFx0XHR1OCBzYXdfb3B0ID0gdGNwX2FjY2Vjbl9vcHRpb25faW5pdChza2IsIHRwLVx1MDAzZXJ4X29wdC5hY2NlY24pO1xuNjQ0MzpcdFxuNjQ0NDpcdFx0XHRcdFx0dGNwX2FjY2Vjbl9zYXdfb3B0X2ZhaWxfcmVjdih0cCwgc2F3X29wdCk7XG42NDQ1Olx0XHRcdFx0XHR0Y3BfYWNjZWNuX29wdF9kZW1hbmRfbWluKHNrLCAxKTtcbjY0NDY6XHRcdFx0XHR9XG42NDQ3Olx0XHRcdH1cbjY0NDg6XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9TWU5fUkVDViBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfc29ja2V0IFx1MDAyNlx1MDAyNiB0aC1cdTAwM2VhY2sgXHUwMDI2XHUwMDI2XG42NDQ5Olx0XHRcdCAgICBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlc2VxICYjNDM7IDEgPT0gVENQX1NLQl9DQihza2IpLVx1MDAzZWVuZF9zZXEgXHUwMDI2XHUwMDI2XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzk2CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTmF2aWdhdGluZyBUQ1AgQWNrbm93bGVkZ2VtZW50IFZhbGlkYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBvbiBzdGVwIGZpdmUsIHdoaWNoIHNheXMgdG8gY2hlY2sgdGhlIEFDSyBmaWVsZCBpbiBgdGNwX3ZhbGlkYXRlX2luY29taW5nYC4gQnV0LCBob2xkIG9uIGEgc2Vjb25kLi4uIHdoZXJlICppcyogdGhhdCBjaGVjayBhY3R1YWxseSBoYXBwZW5pbmc/IEkgZG9uJiMzOTt0IHNlZSBpdCBleHBsaWNpdGx5LiBUaGlzIGlzIHdoZXJlIEkgaGF2ZSB0byBzdGFydCBkaWdnaW5nLgoKTXkgZmlyc3QgdGhvdWdodCBpcyB0byB1c2UgYGdyZXBgIHRvIHNlYXJjaCBmb3IgYHJmYzU5NjFgIHdpdGhpbiB0aGUgY29kZS4gVGhhdCBSRkMgaXMgcHJvYmFibHkgcmVsZXZhbnQgaGVyZS4gQWx0ZXJuYXRpdmVseSwgSSBzaG91bGQgbG9vayBhdCB0aGUgYHRjcF9hY2tgIGZ1bmN0aW9uIGl0c2VsZiDigJMgdGhhdCYjMzk7cyB0aGUgbW9zdCBsaWtlbHkgcGxhY2UuIEl0JiMzOTtzIGFsc28gd29ydGggbXkgdGltZSB0byBnbyBiYWNrIHRvIHRoZSBjb2RlIGRpcmVjdGx5IGFib3ZlIHRoZSBzcGVjaWZpYyBjYWxsIHRvIGB0Y3BfdmFsaWRhdGVfaW5jb21pbmdgIG9yIGFueSByZWxhdGVkIGNvZGUgd2l0aGluIHRoZSBmdW5jdGlvbi4gSSBjb3VsZCBldmVuIGNoZWNrIGB0Y3BfYWNrYCBmb3IgYW55IGNsdWVzIEkgbWlnaHQgaGF2ZSBtaXNzZWQuIEdvdHRhIGJlIG1ldGhvZGljYWwgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmZjNTk2MXxSRkMgNTk2MSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9pbnB1dC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9pbnB1dC5jPTQwMzE9c3RhdGljIHZvaWQgdGNwX3NlbmRfYWNrX3JlZmxlY3RfZWN0KHN0cnVjdCBzb2NrICpzaywgYm9vbCBhY2NlY25fcmVmbGVjdG9yKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQwNDAtXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo0MDQxOi8qIENvbnN1bWUgb25lIHNsb3QgZnJvbSB0aGUgcGVyLW5ldG5zIFJGQyA1OTYxIGNoYWxsZW5nZSBBQ0sgcXVvdGEuXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00MDQyLSAqIFJldHVybnMgdHJ1ZSBpZiBhIGNoYWxsZW5nZSBBQ0sgbWF5IGJlIHNlbnQuXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9NDA0ND1zdGF0aWMgYm9vbCB0Y3BfY2hhbGxlbmdlX2Fja19hbGxvd2VkKHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00MDY3LVxubmV0L2lwdjQvdGNwX2lucHV0LmM6NDA2ODovKiBSRkMgNTk2MSA3IFtBQ0sgVGhyb3R0bGluZ10gKi9cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQwNjktc3RhdGljIHZvaWQgdGNwX3NlbmRfY2hhbGxlbmdlX2FjayhzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgYWNjZWNuX3JlZmxlY3Rvcilcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00MDc5LVxubmV0L2lwdjQvdGNwX2lucHV0LmM6NDA4MDpcdC8qIFRoZW4gY2hlY2sgdGhlIHBlci1uZXRucyBSRkMgNTk2MSByYXRlIGxpbWl0LiAqL1xubmV0L2lwdjQvdGNwX2lucHV0LmMtNDA4MS1cdGlmICh0Y3BfY2hhbGxlbmdlX2Fja19hbGxvd2VkKG5ldCkpIHtcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz00Mjc2PXN0YXRpYyBpbnQgdGNwX2FjayhzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGludCBmbGFnKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQzMDktXHRcdG1heF93aW5kb3cgPSBtaW5fdCh1NjQsIHRwLVx1MDAzZW1heF93aW5kb3csIHRwLVx1MDAzZWJ5dGVzX2Fja2VkKTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjQzMTA6XHRcdC8qIFJGQyA1OTYxIDUuMiBbQmxpbmQgRGF0YSBJbmplY3Rpb24gQXR0YWNrXS5bTWl0aWdhdGlvbl0gKi9cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQzMTEtXHRcdGlmIChiZWZvcmUoYWNrLCBwcmlvcl9zbmRfdW5hIC0gbWF4X3dpbmRvdykpIHtcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00MzE5LVx0LyogSWYgdGhlIGFjayBpbmNsdWRlcyBkYXRhIHdlIGhhdmVuJiMzOTt0IHNlbnQgeWV0LCBkcm9wIHRoZVxubmV0L2lwdjQvdGNwX2lucHV0LmM6NDMyMDpcdCAqIHNlZ21lbnQuICBSRkMgNzkzIFNlY3Rpb24gMy45IGFuZCBSRkMgNTk2MSBTZWN0aW9uIDUuMlxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDMyMS1cdCAqIHJlcXVpcmUgdXMgdG8gc2VuZCBhbiBBQ0sgYmFjayBpbiB0aGF0IGNhc2UuXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9NjI3Nz1zdGF0aWMgdm9pZCB0Y3BfdXJnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHRjcGhkciAqdGgpXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjMwNC0gKiBGSU4gaXMgc2VudCBmb2xsb3dlZCBieSBhIFJTVCBwYWNrZXQuIFRoZSBSU1QgaXMgc2VudCB3aXRoIHRoZSBzYW1lXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo2MzA1OiAqIHNlcXVlbmNlIG51bWJlciBhcyB0aGUgRklOLCBhbmQgdGh1cyBhY2NvcmRpbmcgdG8gUkZDIDU5NjEgYSBjaGFsbGVuZ2Vcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTYzMDYtICogQUNLIHNob3VsZCBiZSBzZW50LiBIb3dldmVyLCBNYWMgT1NYIHJhdGUgbGltaXRzIHJlcGxpZXMgdG8gY2hhbGxlbmdlXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9NjMyMj1zdGF0aWMgYm9vbCB0Y3BfdmFsaWRhdGVfaW5jb21pbmcoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTYzODgtXHRpZiAodGgtXHUwMDNlcnN0KSB7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo2Mzg5Olx0XHQvKiBSRkMgNTk2MSAzLjIgKGV4dGVuZCB0byBtYXRjaCBhZ2FpbnN0IChSQ1YuTlhUIC0gMSkgYWZ0ZXIgYVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjM5MC1cdFx0ICogRklOIGFuZCBTQUNLIHRvbyBpZiBhdmFpbGFibGUpOlxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTY0MzItXHQvKiBzdGVwIDQ6IENoZWNrIGZvciBhIFNZTlxubmV0L2lwdjQvdGNwX2lucHV0LmM6NjQzMzpcdCAqIFJGQyA1OTYxIDQuMiA6IFNlbmQgYSBjaGFsbGVuZ2UgYWNrXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy02NDM0LVx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjczCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGNvZGUgc25pcHBldCwgdGhpbmtpbmcgb3V0IGxvdWQgYXMgSSBwcm9jZXNzIGl0OgoKKipEZWVwIERpdmUgaW50byBgdGNwX2Fja2AgYW5kIHRoZSBSRkMgNTk2MSBNaXRpZ2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyB6b29tIGluIG9uIGxpbmUgNDMxMCB3aXRoaW4gdGhlIGB0Y3BfYWNrYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgYmxvY2sgYXJvdW5kIGxpbmUgNDMwMCB0byBnaXZlIG1lIHNvbWUgY29udGV4dC4gSSYjMzk7bSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIHRoZSBjb21tZW50IHJlZmVyZW5jaW5nIFJGQyA1OTYxLCBzZWN0aW9uIDUuMiwgYW5kIGl0cyByZWxhdGlvbiB0byAmIzM0O0JsaW5kIERhdGEgSW5qZWN0aW9uIEF0dGFja3MuJiMzNDsgTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHJlY2FsbCB3aGF0IHRoYXQgc3BlY2lmaWMgc2VjdGlvbiBvZiB0aGUgUkZDIG91dGxpbmVzLCBlc3BlY2lhbGx5IGl0cyBtaXRpZ2F0aW9uIHN0cmF0ZWdpZXMuCgpUaGUgY29kZSBpdHNlbGYsIHdpdGggdGhhdCBgaWZgIHN0YXRlbWVudCwgc3VnZ2VzdHMgc29tZSBraW5kIG9mIGNoZWNrIG9yIGEgZ3VhcmQuIEkgcmVjb2duaXplIHRoZSB1c2Ugb2YgYGJlZm9yZSgpYCBtYWNybywgd2hpY2ggbGlrZWx5IG1lYW5zIHRoYXQgdGhpcyBjb2RlIGlzIGRlc2lnbmVkIHRvIGlkZW50aWZ5IGEgc2l0dWF0aW9uIHdoZXJlIGFuIGluY29taW5nIGFja25vd2xlZGdlbWVudCAoYGFja2ApIGZhbGxzICpiZWZvcmUqIGEgY2FsY3VsYXRlZCBwb2ludC4gVGhlIHNlY29uZCB2YWx1ZSB1c2VzIGBwcmlvcl9zbmRfdW5hYCwgbGlrZWx5IGluZGljYXRpbmcgdGhlIHVuYWNrbm93bGVkZ2VkIHNlZ21lbnQgdGhhdCB3YXMgc2VudCwgYW5kIGBtYXhfd2luZG93YCBpcyB0aGUgYWR2ZXJ0aXNlZCB3aW5kb3cgc2l6ZS4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgY2hlY2sgaXMgcmVsYXRlZCB0byBob3cgdGhlIFRDUCBzdGFjayBkZWFscyB3aXRoIG91dC1vZi1vcmRlciBhY2tub3dsZWRnZW1lbnRzIG9yIHBvdGVudGlhbGx5IG1hbGljaW91cyBhY2tub3dsZWRnZW1lbnRzIHRyeWluZyB0byBpbmplY3QgZGF0YS4gVGhpcyBtYWtlcyBpdCBwZXJmZWN0IHRvIGRldGVjdCBhdHRhY2tzLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgaWYgdGhpcyBjb25kaXRpb25hbCBldmFsdWF0ZXMgdG8gYHRydWVgLCBzb21lIGtpbmQgb2Ygc2VjdXJpdHkgbWVhc3VyZSBpcyB0cmlnZ2VyZWQg4oCTIHBlcmhhcHMgZHJvcHBpbmcgdGhlIGFja25vd2xlZGdlbWVudCwgbG9nZ2luZyBhbiBldmVudCwgb3IgaW5pdGlhdGluZyBzb21lIGZvcm0gb2YgcmV0cmFuc21pc3Npb24vdmFsaWRhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IHB1cnBvc2Ugb2YgdGhhdCBjb21wYXJpc29uLiBJIGtub3cgdGhpcyBjb2RlIGlzIGltcG9ydGFudCBmb3IgZW5zdXJpbmcgdGhlIHN0YWJpbGl0eSBhbmQgc2VjdXJpdHkgb2YgdGhlIG5ldHdvcmsgY29ubmVjdGlvbi4gSSBuZWVkIHRvIGRldGVybWluZSB3aGF0IGlzIGJlaW5nIHByb3RlY3RlZCBoZXJlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9pbnB1dC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDI5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MjkwOlx0XHRpbnQgcmV4bWl0ID0gUkVYTUlUX05PTkU7IC8qIEZsYWcgdG8gKHJlKXRyYW5zbWl0IHRvIHJlY292ZXIgbG9zc2VzICovXG40MjkxOlx0XHR1MzIgZWNuX2NvdW50ID0gMDtcdCAgLyogRGlkIHdlIHJlY2VpdmUgRUNFL2FuIEFjY0VDTiBBQ0UgdXBkYXRlPyAqL1xuNDI5MjpcdFx0dTMyIHByaW9yX2ZhY2s7XG40MjkzOlx0XG40Mjk0Olx0XHRzYWNrX3N0YXRlLmZpcnN0X3NhY2t0ID0gMDtcbjQyOTU6XHRcdHNhY2tfc3RhdGUucmF0ZSA9IFx1MDAyNnJzO1xuNDI5NjpcdFx0c2Fja19zdGF0ZS5zYWNrX2RlbGl2ZXJlZCA9IDA7XG40Mjk3Olx0XHRzYWNrX3N0YXRlLmRlbGl2ZXJlZF9ieXRlcyA9IDA7XG40Mjk4Olx0XG40Mjk5Olx0XHQvKiBXZSB2ZXJ5IGxpa2VseSB3aWxsIG5lZWQgdG8gYWNjZXNzIHJ0eCBxdWV1ZS4gKi9cbjQzMDA6XHRcdHByZWZldGNoKHNrLVx1MDAzZXRjcF9ydHhfcXVldWUucmJfbm9kZSk7XG40MzAxOlx0XG40MzAyOlx0XHQvKiBJZiB0aGUgYWNrIGlzIG9sZGVyIHRoYW4gcHJldmlvdXMgYWNrc1xuNDMwMzpcdFx0ICogdGhlbiB3ZSBjYW4gcHJvYmFibHkgaWdub3JlIGl0LlxuNDMwNDpcdFx0ICovXG40MzA1Olx0XHRpZiAoYmVmb3JlKGFjaywgcHJpb3Jfc25kX3VuYSkpIHtcbjQzMDY6XHRcdFx0dTMyIG1heF93aW5kb3c7XG40MzA3Olx0XG40MzA4Olx0XHRcdC8qIGRvIG5vdCBhY2NlcHQgQUNLIGZvciBieXRlcyB3ZSBuZXZlciBzZW50LiAqL1xuNDMwOTpcdFx0XHRtYXhfd2luZG93ID0gbWluX3QodTY0LCB0cC1cdTAwM2VtYXhfd2luZG93LCB0cC1cdTAwM2VieXRlc19hY2tlZCk7XG40MzEwOlx0XHRcdC8qIFJGQyA1OTYxIDUuMiBbQmxpbmQgRGF0YSBJbmplY3Rpb24gQXR0YWNrXS5bTWl0aWdhdGlvbl0gKi9cbjQzMTE6XHRcdFx0aWYgKGJlZm9yZShhY2ssIHByaW9yX3NuZF91bmEgLSBtYXhfd2luZG93KSkge1xuNDMxMjpcdFx0XHRcdGlmICghKGZsYWcgXHUwMDI2IEZMQUdfTk9fQ0hBTExFTkdFX0FDSykpXG40MzEzOlx0XHRcdFx0XHR0Y3Bfc2VuZF9jaGFsbGVuZ2VfYWNrKHNrLCBmYWxzZSk7XG40MzE0Olx0XHRcdFx0cmV0dXJuIC1TS0JfRFJPUF9SRUFTT05fVENQX1RPT19PTERfQUNLO1xuNDMxNTpcdFx0XHR9XG40MzE2Olx0XHRcdGdvdG8gb2xkX2FjaztcbjQzMTc6XHRcdH1cbjQzMTg6XHRcbjQzMTk6XHRcdC8qIElmIHRoZSBhY2sgaW5jbHVkZXMgZGF0YSB3ZSBoYXZlbiYjMzk7dCBzZW50IHlldCwgZHJvcCB0aGVcbjQzMjA6XHRcdCAqIHNlZ21lbnQuICBSRkMgNzkzIFNlY3Rpb24gMy45IGFuZCBSRkMgNTk2MSBTZWN0aW9uIDUuMlxuNDMyMTpcdFx0ICogcmVxdWlyZSB1cyB0byBzZW5kIGFuIEFDSyBiYWNrIGluIHRoYXQgY2FzZS5cbjQzMjI6XHRcdCAqL1xuNDMyMzpcdFx0aWYgKGFmdGVyKGFjaywgdHAtXHUwMDNlc25kX254dCkpIHtcbjQzMjQ6XHRcdFx0aWYgKCEoZmxhZyBcdTAwMjYgRkxBR19OT19DSEFMTEVOR0VfQUNLKSlcbjQzMjU6XHRcdFx0XHR0Y3Bfc2VuZF9jaGFsbGVuZ2VfYWNrKHNrLCBmYWxzZSk7XG40MzI2Olx0XHRcdHJldHVybiAtU0tCX0RST1BfUkVBU09OX1RDUF9BQ0tfVU5TRU5UX0RBVEE7XG40MzI3Olx0XHR9XG40MzI4Olx0XG40MzI5Olx0XHRpZiAoYWZ0ZXIoYWNrLCBwcmlvcl9zbmRfdW5hKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg1MwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEyODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgVENQIFNlY3VyaXR5IEZpeDogV29ydGh5IG9mIEZ1enppbmc/KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgd2l0aGluIHRoZSBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWJvdXQgbWl0aWdhdGluZyBibGluZCBkYXRhIGluamVjdGlvbiBhdHRhY2tzIGFzIGRlc2NyaWJlZCBpbiBSRkMgNTk2MS4gQmVmb3JlIHRoZSBwYXRjaCwgYSBjYXJlZnVsbHkgY3JhZnRlZCBwYWNrZXQgd2l0aCBhbiBvbGQgQUNLLCBidXQgbWF0Y2hpbmcgdGhlIHByZWRpY3RlZCBmbGFncywgY291bGQgYnlwYXNzIHRoZSBjaGVjayBhbmQgaW5qZWN0IGRhdGEsIGV2ZW4gdGhvdWdoIGB0Y3BfYWNrYCBtaWdodCBoYXZlIHJldHVybmVkIGFuIGVycm9yLiBUaGUgY3J1Y2lhbCBmbGF3IHdhcyB0aGF0IHRoZSBmYXN0IHBhdGggaW4gYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIHdhcyBpZ25vcmluZyB0aGF0IG5lZ2F0aXZlIHJldHVybi4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgc3RyaWN0ZXIgY2hlY2sgb24gdGhlIGBhY2tfc2VxYCwgc2VuZGluZyB0aGVzZSBwYWNrZXRzIHRvIHRoZSBzbG93IHBhdGggZm9yIHByb3BlciBoYW5kbGluZyBhbmQgZHJvcHBpbmcgdGhlbSBiZWZvcmUgdGhlIGRhdGEgaXMgcXVldWVkLiBUaGF0JiMzOTtzIGEgc29saWQgcHJvdG9jb2wgYW5kIHNlY3VyaXR5IGltcHJvdmVtZW50LgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHkuIFdlJiMzOTtyZSBtb2RpZnlpbmcgY29yZSBUQ1AgaW5wdXQgbG9naWMgd2l0aGluIGBuZXQvaXB2NC90Y3BfaW5wdXQuY2AuIFRoYXQmIzM5O3MgYSBwcmltZSB0YXJnZXQuIFRDUCBlc3RhYmxpc2hlZCByZWNlaXZpbmcgaXMgY29tbW9uLCByZWFjaGFibGUgdGhyb3VnaCBhbnkgVENQIHNvY2tldCByZWNlaXZpbmcgcGFja2V0cyBvbiBsb29wYmFjaywgdmV0aCwgdGFwLCBldGMuIFN5emthbGxlciYjMzk7cyBhbHJlYWR5IGNvbnN0YW50bHkgdGVzdGluZyB0aGVzZSBzY2VuYXJpb3MuCgpMZXQmIzM5O3MgYXBwbHkgdGhlIGBXb3J0aEZ1enppbmdgIGNyaXRlcmlhOiBJdCYjMzk7cyBub3QgYSBub24ta2VybmVsIG9yIG5vbi1leGVjdXRhYmxlIGNvbXBvbmVudCwgaXQmIzM5O3Mgbm90IGhhcmR3YXJlLXNwZWNpZmljLCBhbmQgaXQmIzM5O3Mgbm90IGFuIHVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoLiBUaGlzIHBhdGNoIGRpcmVjdGx5IG1vZGlmaWVzIHJlYWNoYWJsZSwgZXhlY3V0YWJsZSBjb2RlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtLiBUaGF0IG1lYW5zIGBXb3J0aEZ1enppbmc6IHRydWVgLgoKTmV4dCwgdGhlIGBGb2N1c1N5bWJvbHNgLiBXaGF0IGZ1bmN0aW9ucyBhcmUga2V5IGhlcmU/IEl0IHN0YXJ0cyB3aXRoIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCwgdGhlIGV4YWN0IGZ1bmN0aW9uIHdoZXJlIHRoZSB2dWxuZXJhYmlsaXR5IHdhcyBwcmVzZW50IGFuZCB0aGUgY29uZGl0aW9uIHdhcyBtb2RpZmllZC4gQnV0LCB3YWl0LiBJcyBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAgdWJpcXVpdG91cz8gVGhlIGd1aWRhbmNlIHNheXMgdG8gYXZvaWQgZ2VuZXJpYyBmdW5jdGlvbnMuIElzIGl0IGxpa2UgYGttYWxsb2NgIG9yIHBhZ2UgZmF1bHRzPyBOby4gSXQgaXMgc3BlY2lmaWNhbGx5IGNhbGxlZCBmb3IgVENQIHBhY2tldHMgb24gZXN0YWJsaXNoZWQgc29ja2V0cy4gU28sIGl0IGlzIGEgZ29vZCBjYW5kaWRhdGUuCgpXaGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgaW52b2x2ZWQ/IEluIHRoZSBzbG93IHBhdGgsIGB0Y3BfdmFsaWRhdGVfaW5jb21pbmdgIGFuZCBgdGNwX2Fja2AuIFRoZSBwYXRjaCBhbHRlcnMgdGhlIGJlaGF2aW9yIG9mIHRoZSBmYXN0IHBhdGggaW4gYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIGJhc2VkIG9uIHdoYXQgdGhlIGxvd2VyLWxldmVsIGZ1bmN0aW9ucyByZXBvcnQuIFNvIHRoZXkgc2hvdWxkIGJlIGV4YW1pbmVkLgoKVGhlIGtleSBjaGFuZ2UgaXMgaW5zaWRlIGB0Y3BfcmN2X2VzdGFibGlzaGVkYC4gTGV0JiMzOTtzIGNvbmZpcm06IElzIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBub24tc3RhdGljPyBZZXMsIGl0JiMzOTtzIGB2b2lkIHRjcF9yY3ZfZXN0YWJsaXNoZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKWAuIE5vdywgd2hhdCBhYm91dCBgdGNwX2Fja2A/IEl0JiMzOTtzIGBzdGF0aWMgaW50IHRjcF9hY2soLi4uKWAuIE9rYXksIGlzIGB0Y3BfYWNrYCBpbmxpbmVkIG9yIG5vdD8gSXQmIzM5O3MgYSBsYXJnZSBmdW5jdGlvbiwgc28gaXQmIzM5O3MgbGlrZWx5IGEgc3ltYm9sLiBCdXQgYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIGlzIGRlZmluaXRlbHkgYW4gZXhwb3J0ZWQvZ2xvYmFsIHN5bWJvbCBpbiBgdGNwX2lucHV0LmNgLiBHaXZlbiB0aGF0IGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBpcyBub24tc3RhdGljLCB0aGUgY2hhbmdlIGlzIG1hZGUgZGlyZWN0bHkgdGhlcmUsIGFuZCBgdGNwX2Fja2AgaXMgcGFydCBvZiB0aGUgY29udHJvbCBmbG93LiBCb3RoIHdhcnJhbnQgZm9jdXMuIE5vdywgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayB3aGF0IGNhbGxzIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfcmN2X2VzdGFibGlzaGVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9pbnB1dC5jPTYzMjI9c3RhdGljIGJvb2wgdGNwX3ZhbGlkYXRlX2luY29taW5nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy02NTAwLSAqL1xubmV0L2lwdjQvdGNwX2lucHV0LmM6NjUwMTp2b2lkIHRjcF9yY3ZfZXN0YWJsaXNoZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjUwMi17XG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYz0xODMwPWludCB0Y3BfdjRfZG9fcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTE4NTMtXHRcdH1cbm5ldC9pcHY0L3RjcF9pcHY0LmM6MTg1NDpcdFx0dGNwX3Jjdl9lc3RhYmxpc2hlZChzaywgc2tiKTtcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMTg1NS1cdFx0cmV0dXJuIDA7XG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYz0xOTAxPWVudW0gc2tiX2Ryb3BfcmVhc29uIHRjcF9hZGRfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYy0xOTgwLVx0XHQvKiBXZSBoYXZlIHRvIHVwZGF0ZSBib3RoIFRDUF9TS0JfQ0IodGFpbCktXHUwMDNldGNwX2ZsYWdzIGFuZFxubmV0L2lwdjQvdGNwX2lwdjQuYzoxOTgxOlx0XHQgKiB0aHRhaWwtXHUwMDNlZmluLCBzbyB0aGF0IHRoZSBmYXN0IHBhdGggaW4gdGNwX3Jjdl9lc3RhYmxpc2hlZCgpXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTE5ODItXHRcdCAqIGlzIG5vdCBlbnRlcmVkIGlmIHdlIGFwcGVuZCBhIHBhY2tldCB3aXRoIGEgRklOLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTI0NgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgVENQIFJlY2VpdmUgUGF0aCBpbiBJUHY2KioKCk9rYXksIHNvIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBpcyBnZXR0aW5nIGNhbGxlZCBmcm9tIGBuZXQvaXB2Ni90Y3BfaXB2Ni5jYC4gVGhhdCYjMzk7cyBhbiBpbnRlcmVzdGluZyBkZXRhaWwgSSBuZWVkIHRvIHF1aWNrbHkgZXhwbG9yZS4gU2luY2UgSSBhbHJlYWR5IGtub3cgdGhlIFRDUCBzdGFjayBpbnNpZGUgYW5kIG91dCwgdGhpcyBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGFuIElQdjYtc3BlY2lmaWMgYXNwZWN0IG9mIHRoZSBlc3RhYmxpc2hlZCBjb25uZWN0aW9uIHJlY2VpdmluZyBwcm9jZXNzLiBNeSBndXQgdGVsbHMgbWUgdGhlcmUgbWlnaHQgYmUgc29tZSBJUHY2LXNwZWNpZmljIGhhbmRsaW5nIGhhcHBlbmluZyBhdCB0aGF0IGVudHJ5IHBvaW50LiBMZXQmIzM5O3MgZGVsdmUgaW50byBgbmV0L2lwdjYvdGNwX2lwdjYuY2AgYW5kIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMgYW5kIGZpZ3VyZSBvdXQgd2hhdCBzcGVjaWZpYyBmdW5jdGlvbnMgb3IgY29kZSBwYXRocyBhcmUgYmVpbmcgdXNlZCBhdCB0aGF0IGNhbGwgc2l0ZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gbG9va2luZyBmb3IgZGlmZmVyZW5jZXMgb3IgYWRkaXRpb25zIHRvIHRoZSBzdGFuZGFyZCBUQ1AgcmVjZWl2ZSBoYW5kbGluZyB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBhZGFwdGVkIHRvIHRoZSBJUHY2IGVudmlyb25tZW50LCB3aGljaCBtaWdodCBpbmRpY2F0ZSBzcGVjaWZpYyBJUHY2IGhlYWRlciBvciBhZGRyZXNzIHByb2Nlc3NpbmcuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBqdW1wIGludG8gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9yY3ZfZXN0YWJsaXNoZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvdGNwX2lwdjYuYz0xNTY3PWludCB0Y3BfdjZfZG9fcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTE1NzYtXHQgICBGcm9tIGJhY2tsb2cgaXQgYWx3YXlzIGdvZXMgaGVyZS4gS2VyYm9vbS4uLlxubmV0L2lwdjYvdGNwX2lwdjYuYzoxNTc3Olx0ICAgRm9ydHVuYXRlbHksIHRjcF9yY3ZfZXN0YWJsaXNoZWQgYW5kIHJjdl9lc3RhYmxpc2hlZFxubmV0L2lwdjYvdGNwX2lwdjYuYy0xNTc4LVx0ICAgaGFuZGxlIHRoZW0gY29ycmVjdGx5LCBidXQgaXQgaXMgbm90IGNhc2Ugd2l0aFxuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTYyNi1cbm5ldC9pcHY2L3RjcF9pcHY2LmM6MTYyNzpcdFx0dGNwX3Jjdl9lc3RhYmxpc2hlZChzaywgc2tiKTtcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTYyOC1cdFx0aWYgKG9wdF9za2IpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzUwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBDb2RlIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyB0aGUgY29yZSBvZiB0aGlzIGNoYW5nZSBzZWVtcyB0byBiZSB3aXRoaW4gYHRjcF9yY3ZfZXN0YWJsaXNoZWRgLiBUaGF0JiMzOTtzIHRoZSBzcGVjaWZpYyBmdW5jdGlvbiB0aGF0IHdhcyBkaXJlY3RseSBtb2RpZmllZC4gSSBzaG91bGQgYWxzbyBjb25zaWRlciBob3cgdGhpcyBpbXBhY3RzIHJlbGF0ZWQgZnVuY3Rpb25zLiBgdGNwX3ZhbGlkYXRlX2luY29taW5nYCBhbmQgYHRjcF9hY2tgIGFyZSBib3RoIGNhbGxlZCBmcm9tIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCwgYW5kIHRob3VnaCB0aGV5JiMzOTtyZSBzdGF0aWMsIHRoZXkgYXJlIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIGluIHRoZSBjb250ZXh0IG9mIHRoaXMgY2hhbmdlLgoKSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIGlzIGluZGVlZCB0aGUgcHJpbWFyeSBmdW5jdGlvbiB0aGF0IHJlY2VpdmVkIHRoZSBtb2RpZmljYXRpb25zOyB0aGF0JiMzOTtzIHRoZSBmb2N1cy4gR2l2ZW4gdGhhdCBgdGNwX3ZhbGlkYXRlX2luY29taW5nYCBpcyBzdGF0aWMsIGl0cyBzeW1ib2wgcmVwcmVzZW50YXRpb24gaW4gdm1saW51eCBkZXBlbmRzIG9uIGlubGluaW5nLiBIb3dldmVyLCBiZWNhdXNlIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBpcyBub24tc3RhdGljLCBpdCBpcyBkZWZpbml0ZWx5IGEgdmFsaWQgc3ltYm9sLgoKVG8gbWFrZSBzdXJlIEkgaGF2ZSBhIGNvbXBsZXRlIHBpY3R1cmUsIEkgbmVlZCB0byBjaGVjayBpZiBhbnkgb3RoZXIgZnVuY3Rpb25zIHdlcmUgdG91Y2hlZCBieSB0aGlzIHBhdGNoLiBGcm9tIHdoYXQgSSBzZWUsIHRoZSBtb2RpZmljYXRpb24gb25seSBhZmZlY3RzIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBpdHNlbGYsIGFuZCBpdCByZXNpZGVzIHdpdGhpbiBgbmV0L2lwdjQvdGNwX2lucHV0LmNgLgoKTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIEkgY2FuIHNlZSB0aGF0IGBuZXQvaXB2NC90Y3BfaW5wdXQuY2AgaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX0lORVRgIGlzIGVuYWJsZWQuIFRpbWUgdG8gY2hlY2sgYG5ldC9pcHY0L01ha2VmaWxlYCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSByZWxldmFudCBidWlsZCBydWxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX2lucHV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L01ha2VmaWxlPTY9b2JqLXkgICAgIDo9IHJvdXRlLm8gaW5ldHBlZXIubyBwcm90b2NvbC5vIFxcXG4tLVxubmV0L2lwdjQvTWFrZWZpbGUtOS1cdCAgICAgaW5ldF90aW1ld2FpdF9zb2NrLm8gaW5ldF9jb25uZWN0aW9uX3NvY2subyBcXFxubmV0L2lwdjQvTWFrZWZpbGU6MTA6XHQgICAgIHRjcC5vIHRjcF9pbnB1dC5vIHRjcF9vdXRwdXQubyB0Y3BfdGltZXIubyB0Y3BfaXB2NC5vIFxcXG5uZXQvaXB2NC9NYWtlZmlsZS0xMS1cdCAgICAgdGNwX21pbmlzb2Nrcy5vIHRjcF9jb25nLm8gdGNwX21ldHJpY3MubyB0Y3BfZmFzdG9wZW4ubyBcXFxuLS1cbm5ldC9pcHY0L2luZXRfdGltZXdhaXRfc29jay5jPTE2OD1zdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICppbmV0X3R3c2tfYWxsb2MoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L2luZXRfdGltZXdhaXRfc29jay5jLTIyMi0vKiBUaGVzZSBhcmUgYWx3YXlzIGNhbGxlZCBmcm9tIEJIIGNvbnRleHQuICBTZWUgY2FsbGVycyBpblxubmV0L2lwdjQvaW5ldF90aW1ld2FpdF9zb2NrLmM6MjIzOiAqIHRjcF9pbnB1dC5jIHRvIHZlcmlmeSB0aGlzLlxubmV0L2lwdjQvaW5ldF90aW1ld2FpdF9zb2NrLmMtMjI0LSAqL1xuLS1cbm5ldC9pcHY0L3RjcC5jPTE1NTE9dm9pZCBfX3RjcF9jbGVhbnVwX3JidWYoc3RydWN0IHNvY2sgKnNrLCBpbnQgY29waWVkKVxuLS1cbm5ldC9pcHY0L3RjcC5jLTE1NTgtXG5uZXQvaXB2NC90Y3AuYzoxNTU5Olx0XHRpZiAoLyogT25jZS1wZXItdHdvLXNlZ21lbnRzIEFDSyB3YXMgbm90IHNlbnQgYnkgdGNwX2lucHV0LmMgKi9cbm5ldC9pcHY0L3RjcC5jLTE1NjAtXHRcdCAgICB0cC1cdTAwM2VyY3Zfbnh0IC0gdHAtXHUwMDNlcmN2X3d1cCBcdTAwM2UgaWNzay1cdTAwM2VpY3NrX2Fjay5yY3ZfbXNzIHx8XG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYy0xMi0gKlx0XHRsaW51eC9pcHY0L3RjcC5jXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjEzOiAqXHRcdGxpbnV4L2lwdjQvdGNwX2lucHV0LmNcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMTQtICpcdFx0bGludXgvaXB2NC90Y3Bfb3V0cHV0LmNcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTIwNDU9c3RhdGljIHZvaWQgdGNwX3Y0X2ZpbGxfY2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IGlwaGRyICppcGgsXG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYy0yMDY2LS8qXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjIwNjc6ICpcdEZyb20gdGNwX2lucHV0LmNcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMjA2OC0gKi9cbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NDEwMT1zdGF0aWMgdm9pZCB0Y3BfY29ubmVjdF9pbml0KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDEwOS1cdC8qIFdlJiMzOTtsbCBmaXggdGhpcyB1cCB3aGVuIHdlIGdldCBhIHJlc3BvbnNlIGZyb20gdGhlIG90aGVyIGVuZC5cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0MTEwOlx0ICogU2VlIHRjcF9pbnB1dC5jOnRjcF9yY3Zfc3RhdGVfcHJvY2VzcyBjYXNlIFRDUF9TWU5fU0VOVC5cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MTExLVx0ICovXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTQ0MDI9dTMyIHRjcF9kZWxhY2tfbWF4KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDQwOS0vKiBTZW5kIG91dCBhIGRlbGF5ZWQgYWNrLCB0aGUgY2FsbGVyIGRvZXMgdGhlIHBvbGljeSBjaGVja2luZ1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjQ0MTA6ICogdG8gc2VlIGlmIHdlIHNob3VsZCBldmVuIGJlIGhlcmUuICBTZWUgdGNwX2lucHV0LmM6dGNwX2Fja19zbmRfY2hlY2soKVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQ0MTEtICogZm9yIGRldGFpbHMuXG4tLVxubmV0L2lwdjQvdGNwX3RpbWVyLmM9NTM1PXZvaWQgdGNwX3JldHJhbnNtaXRfdGltZXIoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcF90aW1lci5jLTY2MS1cdCAqIHRodXMgdGhlIG9sZCB2YWx1ZSBtaWdodCBhbHJlYWR5IGJlIHRvbyBoaWdoIGNvbXBhcmVkIHRvIHRoZSB2YWx1ZVxubmV0L2lwdjQvdGNwX3RpbWVyLmM6NjYyOlx0ICogc2V0IGJ5ICYjMzk7dGNwX3NldF9ydG8mIzM5OyBpbiB0Y3BfaW5wdXQuYyB3aGljaCByZXNldHMgdGhlIHJ0byB3aXRob3V0XG5uZXQvaXB2NC90Y3BfdGltZXIuYy02NjMtXHQgKiBiYWNrb2ZmLiBMaW1pdCB0byBUQ1BfVEhJTl9MSU5FQVJfUkVUUklFUyBiZWZvcmUgaW5pdGlhdGluZ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzMzNAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIHRoZSBOZXR3b3JrIFN0YWNrIEJ1aWxkIFByb2Nlc3MqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBgbmV0L2lwdjRgIGNvbXBvbmVudCBpcyBiZWluZyBidWlsdCB3aXRoaW4gdGhlIGxhcmdlciBrZXJuZWwgZnJhbWV3b3JrLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCwgYXMgYWx3YXlzLCBpcyB0aGUgYG5ldC9NYWtlZmlsZWAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIHRoZSBvcmNoZXN0cmF0b3Igb2YgZGVwZW5kZW5jaWVzIGFuZCBidWlsZCBydWxlcyBmb3IgdGhpcyBwYXJ0IG9mIHRoZSBuZXR3b3JrIHN0YWNrLiBJIG5lZWQgdG8gdHJhY2UgdGhyb3VnaCBpdCBhbmQgc2VlIGhvdyBgaXB2NGAgaXMgc3BlY2lmaWNhbGx5IGluY29ycG9yYXRlZCwgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgZ290Y2hhcyBhbmQgZGVwZW5kZW5jaWVzIHRoYXQgbmVlZCB0byBiZSBjb25zaWRlcmVkLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCBgbmV0L01ha2VmaWxlYCByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcHY0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9NYWtlZmlsZT0xNj1vYmotJChDT05GSUdfTkVURklMVEVSKVx0XHQmIzQzOz0gbmV0ZmlsdGVyL1xubmV0L01ha2VmaWxlOjE3Om9iai0kKENPTkZJR19JTkVUKVx0XHQmIzQzOz0gaXB2NC9cbm5ldC9NYWtlZmlsZS0xOC1vYmotJChDT05GSUdfVExTKVx0XHQmIzQzOz0gdGxzL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzU5MgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDExMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFRDUCBJbnB1dCBNb2R1bGUgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGF0IGBDT05GSUdfSU5FVGAgaXMgZW5hYmxlZCwgdGhhdCYjMzk7cyBjcnVjaWFsLiBOb3csIG15IG5leHQgbW92ZSBpcyB0byBjaGVjayBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgdGllZCB0byBlaXRoZXIgYHRjcF9pbnB1dC5vYCBvciwgbW9yZSBicm9hZGx5LCBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAuIEkmIzM5O2xsIHN0YXJ0IGRpZ2dpbmcgdGhyb3VnaCB0aGUgcmVsZXZhbnQgYE1ha2VmaWxlYCBpbiB0aGUgYG5ldC9pcHY0YCBkaXJlY3RvcnksIHRoZSB1c3VhbCBzdXNwZWN0LiBBaCwgdGhlcmUgaXQgaXM6IGBvYmoteSA6PSByb3V0ZS5vIGluZXRwZWVyLm8gcHJvdG9jb2wubyAuLi4gdGNwLm8gdGNwX2lucHV0Lm8gLi4uYCBMb29rcyBsaWtlIHdoZW5ldmVyIGBDT05GSUdfSU5FVGAgaXMgc2V0IHRvICYjMzk7eSYjMzk7LCBgdGNwX2lucHV0Lm9gIGdldHMgY29tcGlsZWQsIHdoaWNoIGlzIGV4cGVjdGVkLiBKdXN0IHRvIGJlIGNvbXBsZXRlbHkgdGhvcm91Z2gsIEnigJlsbCBjcm9zcy1yZWZlcmVuY2UgdGhpcyB3aXRoIHRoZSBgbmV0L2lwdjQvS2NvbmZpZ2AgZmlsZSB0byBjb25maXJtIHRoYXQgYENPTkZJR19JTkVUYCBpcyBkZWZpbmVkIGFuZCB3aGF0IG90aGVyIGRlcGVuZGVuY2llcyBhcmUgaW4gcGxheS4gSXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gY292ZXIgYWxsIGJhc2VzIHdpdGggdGhpcyBzb3J0IG9mIGNvbmZpZ3VyYXRpb24gbG9naWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJTkVUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTMzMD1jb25maWcgTkVUX0ZPVV9JUF9UVU5ORUxTXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zMzgtXG5uZXQvaXB2NC9LY29uZmlnOjMzOTpjb25maWcgSU5FVF9BSFxubmV0L2lwdjQvS2NvbmZpZy0zNDAtXHR0cmlzdGF0ZSBcJiMzNDtJUDogQUggdHJhbnNmb3JtYXRpb25cJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM1My1cbm5ldC9pcHY0L0tjb25maWc6MzU0OmNvbmZpZyBJTkVUX0VTUFxubmV0L2lwdjQvS2NvbmZpZy0zNTUtXHR0cmlzdGF0ZSBcJiMzNDtJUDogRVNQIHRyYW5zZm9ybWF0aW9uXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zNjgtXG5uZXQvaXB2NC9LY29uZmlnOjM2OTpjb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxubmV0L2lwdjQvS2NvbmZpZy0zNzAtXHR0cmlzdGF0ZSBcJiMzNDtJUDogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM4MS1cbm5ldC9pcHY0L0tjb25maWc6MzgyOmNvbmZpZyBJTkVUX0VTUElOVENQXG5uZXQvaXB2NC9LY29uZmlnLTM4My1cdGJvb2wgXCYjMzQ7SVA6IEVTUCBpbiBUQ1AgZW5jYXBzdWxhdGlvbiAoUkZDIDgyMjkpXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zOTMtXG5uZXQvaXB2NC9LY29uZmlnOjM5NDpjb25maWcgSU5FVF9JUENPTVBcbm5ldC9pcHY0L0tjb25maWctMzk1LVx0dHJpc3RhdGUgXCYjMzQ7SVA6IElQQ29tcCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctNDAzLVxubmV0L2lwdjQvS2NvbmZpZzo0MDQ6Y29uZmlnIElORVRfVEFCTEVfUEVSVFVSQl9PUkRFUlxubmV0L2lwdjQvS2NvbmZpZy00MDUtXHRpbnQgXCYjMzQ7SU5FVDogU291cmNlIHBvcnQgcGVydHVyYmF0aW9uIHRhYmxlIHNpemUgKGFzIHBvd2VyIG9mIDIpXCYjMzQ7IGlmIEVYUEVSVFxuLS1cbm5ldC9pcHY0L0tjb25maWctNDEzLVxubmV0L2lwdjQvS2NvbmZpZzo0MTQ6Y29uZmlnIElORVRfWEZSTV9UVU5ORUxcbm5ldC9pcHY0L0tjb25maWctNDE1LVx0dHJpc3RhdGVcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQxOC1cbm5ldC9pcHY0L0tjb25maWc6NDE5OmNvbmZpZyBJTkVUX1RVTk5FTFxubmV0L2lwdjQvS2NvbmZpZy00MjAtXHR0cmlzdGF0ZVxuLS1cbm5ldC9pcHY0L0tjb25maWctNDIyLVxubmV0L2lwdjQvS2NvbmZpZzo0MjM6Y29uZmlnIElORVRfRElBR1xubmV0L2lwdjQvS2NvbmZpZy00MjQtXHR0cmlzdGF0ZSBcJiMzNDtJTkVUOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQzNC1cbm5ldC9pcHY0L0tjb25maWc6NDM1OmNvbmZpZyBJTkVUX1RDUF9ESUFHXG5uZXQvaXB2NC9LY29uZmlnLTQzNi1cdGRlcGVuZHMgb24gSU5FVF9ESUFHXG4tLVxubmV0L2lwdjQvS2NvbmZpZy00MzgtXG5uZXQvaXB2NC9LY29uZmlnOjQzOTpjb25maWcgSU5FVF9VRFBfRElBR1xubmV0L2lwdjQvS2NvbmZpZy00NDAtXHR0cmlzdGF0ZSBcJiMzNDtVRFA6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctNDQ2LVxubmV0L2lwdjQvS2NvbmZpZzo0NDc6Y29uZmlnIElORVRfUkFXX0RJQUdcbm5ldC9pcHY0L0tjb25maWctNDQ4LVx0dHJpc3RhdGUgXCYjMzQ7UkFXOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQ1NC1cbm5ldC9pcHY0L0tjb25maWc6NDU1OmNvbmZpZyBJTkVUX0RJQUdfREVTVFJPWVxubmV0L2lwdjQvS2NvbmZpZy00NTYtXHRib29sIFwmIzM0O0lORVQ6IGFsbG93IHByaXZpbGVnZWQgcHJvY2VzcyB0byBhZG1pbmlzdHJhdGl2ZWx5IGNsb3NlIHNvY2tldHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg3NTkKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIHF1ZXJ5OgoKKipUcmFjaW5nIHRoZSBDb25maWd1cmF0aW9uIG9mIGBjb25maWcgSU5FVGAqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGBjb25maWcgSU5FVGAgdmFyaWFibGUgb3IgZGlyZWN0aXZlIGlzIGRlZmluZWQgd2l0aGluIHRoaXMgc3lzdGVtLiBJIGNhbiYjMzk7dCBqdXN0IGFzc3VtZSBJIGFscmVhZHkga25vdywgc28gbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZG8gYSBxdWljayBhbmQgZGlydHkgc2VhcmNoIHRvIGxvY2F0ZSBpdHMgZGVmaW5pdGlvbi4gVGhlIGJlc3Qgd2F5IHRvIGRvIHRoYXQgd291bGQgYmUgd2l0aCBgZ3JlcGAuIEkgd2FudCB0byBiZSBzcGVjaWZpYywgSSYjMzk7bGwgdXNlIGEgZG9sbGFyIHNpZ24gYCRgIHRvIGVuc3VyZSBJJiMzOTttIGZpbmRpbmcgdGhlICpleGFjdCogbWF0Y2ggb2YgYGNvbmZpZyBJTkVUYCBhdCB0aGUgZW5kIG9mIGEgbGluZSwgb3IgYSB2YXJpYWJsZSB3aXRoIHRoYXQgZXhhY3QgbmFtZS4gVGhpcyBzaG91bGQgaGVscCBtZSBhdm9pZCBhY2NpZGVudGFsbHkgcGlja2luZyB1cCBtYXRjaGVzIHdoZXJlIGBJTkVUYCBpcyBwYXJ0IG9mIGEgbGFyZ2VyIHdvcmQgb3IgdmFyaWFibGUgbmFtZSBsaWtlIGBJTkVUX0FERFJFU1NgLiBVc2luZyBgZ3JlcCAmIzM0O2NvbmZpZyBJTkVUJCYjMzQ7YCBzaG91bGQgZ2l2ZSBtZSBhIGNvbmNpc2UgbGlzdGluZyBvZiBhbnkgZmlsZXMgd2hlcmUgdGhhdCBzcGVjaWZpYyBkaXJlY3RpdmUgaXMgZGVmaW5lZCwgd2hpY2ggd2lsbCBwcm92aWRlIHRoZSBjb250ZXh0IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCB1c2FnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElORVQkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz05OT1jb25maWcgTkVUX0hBTkRTSEFLRV9LVU5JVF9URVNUXG4tLVxubmV0L0tjb25maWctMTEzLVxubmV0L0tjb25maWc6MTE0OmNvbmZpZyBJTkVUXG5uZXQvS2NvbmZpZy0xMTUtXHRib29sIFwmIzM0O1RDUC9JUCBuZXR3b3JraW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDg2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBMYWJ5cmludGgqKgoKT2theSwgc28gSSYjMzk7bSBkZWFsaW5nIHdpdGggdGhlIGBJTkVUYCBjb25maWd1cmF0aW9uIG9wdGlvbiwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgYnJvYWRlciBuZXR3b3JraW5nIGNvbmZpZ3VyYXRpb24uIFRoZSBoaW50IHBvaW50cyB0byBgbmV0L0tjb25maWdgLCBzcGVjaWZpY2FsbHkgbGluZSAxMTQuIEhvd2V2ZXIsIHRoYXQmIzM5O3MgcmFyZWx5IGVub3VnaCBjb250ZXh0IGluIGEgc3ByYXdsaW5nIGNvbmZpZ3VyYXRpb24gZmlsZSBsaWtlIHRoaXMgb25lLiBUbyBnZXQgYSBoYW5kbGUgb24gd2hhdCBgSU5FVGAgYWN0dWFsbHkgKm1lYW5zKiBhbmQgd2hhdCBpdHMgZGVwZW5kZW5jaWVzIG1pZ2h0IGJlLCBJJiMzOTttIGdvaW5nIHRvIGJhY2sgdXAgYSBiaXQgYW5kIHRha2UgYSBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBsaW5lcy4gTGV0JiMzOTtzIHNlZS4uLiBsaW5lcyAxMTAgdGhyb3VnaCAxMzAgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGZlZWwgZm9yIHRoZSBsb2NhbCBlbnZpcm9ubWVudCBvZiB0aGlzIG9wdGlvbi4gVGhpcyB0eXBpY2FsbHkgcmV2ZWFscyB0aGUgcmVsYXRpb25zaGlwcyB3aXRoIG90aGVyIGNvbmZpZyBvcHRpb25zLCB0aGUgaGVscCB0ZXh0IGRlc2NyaWJpbmcgaXQsIGFuZCBhbnkgZGVwZW5kZW5jaWVzIG9yIGRlZmF1bHQgdmFsdWVzLiBJdCB3aWxsIHRha2UgYSBmZXcgbWludXRlcyB0byByZWFkIGJ1dCBpdCYjMzk7cyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHR3ZWFraW5nIHRoaXMgc3BlY2lmaWMgb3B0aW9uLiBJJiMzOTtsbCBmb2N1cyBvbiByZWxhdGlvbnNoaXBzIGFuZCBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDExMDpcdFxuIDExMTpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCByZWZlclxuIDExMjpcdFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbiBpbiBEb2N1bWVudGF0aW9uL2Rldi10b29scy9rdW5pdC8uXG4gMTEzOlx0XG4gMTE0Olx0Y29uZmlnIElORVRcbiAxMTU6XHRcdGJvb2wgXCYjMzQ7VENQL0lQIG5ldHdvcmtpbmdcJiMzNDtcbiAxMTY6XHRcdGhlbHBcbiAxMTc6XHRcdCAgVGhlc2UgYXJlIHRoZSBwcm90b2NvbHMgdXNlZCBvbiB0aGUgSW50ZXJuZXQgYW5kIG9uIG1vc3QgbG9jYWxcbiAxMTg6XHRcdCAgRXRoZXJuZXRzLiBJdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdG8gc2F5IFkgaGVyZSAodGhpcyB3aWxsIGVubGFyZ2VcbiAxMTk6XHRcdCAgeW91ciBrZXJuZWwgYnkgYWJvdXQgNDAwIEtCKSwgc2luY2Ugc29tZSBwcm9ncmFtcyAoZS5nLiB0aGUgWCB3aW5kb3dcbiAxMjA6XHRcdCAgc3lzdGVtKSB1c2UgVENQL0lQIGV2ZW4gaWYgeW91ciBtYWNoaW5lIGlzIG5vdCBjb25uZWN0ZWQgdG8gYW55XG4gMTIxOlx0XHQgIG90aGVyIGNvbXB1dGVyLiBZb3Ugd2lsbCBnZXQgdGhlIHNvLWNhbGxlZCBsb29wYmFjayBkZXZpY2Ugd2hpY2hcbiAxMjI6XHRcdCAgYWxsb3dzIHlvdSB0byBwaW5nIHlvdXJzZWxmIChncmVhdCBmdW4sIHRoYXQhKS5cbiAxMjM6XHRcbiAxMjQ6XHRcdCAgRm9yIGFuIGV4Y2VsbGVudCBpbnRyb2R1Y3Rpb24gdG8gTGludXggbmV0d29ya2luZywgcGxlYXNlIHJlYWQgdGhlXG4gMTI1Olx0XHQgIExpbnV4IE5ldHdvcmtpbmcgSE9XVE8sIGF2YWlsYWJsZSBmcm9tXG4gMTI2Olx0XHQgIFx1MDAzY2h0dHA6Ly93d3cudGxkcC5vcmcvZG9jcy5odG1sI2hvd3RvXHUwMDNlLlxuIDEyNzpcdFxuIDEyODpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSBhbmQgYWxzbyB0byBcJiMzNDsvcHJvYyBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7IGFuZFxuIDEyOTpcdFx0ICBcJiMzNDtTeXNjdGwgc3VwcG9ydFwmIzM0OyBiZWxvdywgeW91IGNhbiBjaGFuZ2UgdmFyaW91cyBhc3BlY3RzIG9mIHRoZVxuIDEzMDpcdFx0ICBiZWhhdmlvciBvZiB0aGUgVENQL0lQIGNvZGUgYnkgd3JpdGluZyB0byB0aGUgKHZpcnR1YWwpIGZpbGVzIGluXG4gMTMxOlx0XHQgIC9wcm9jL3N5cy9uZXQvaXB2NC8qOyB0aGUgb3B0aW9ucyBhcmUgZXhwbGFpbmVkIGluIHRoZSBmaWxlXG4gMTMyOlx0XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3RcdTAwM2UuXG4gMTMzOlx0XG4gMTM0Olx0XHQgIFNob3J0IGFuc3dlcjogc2F5IFkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5ODAzCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkluaXRpYWwgQXNzZXNzbWVudDogQ09ORklHX0lORVQgYW5kIFRDUCBJbnZhbGlkIFJhdGUgTGltaXQqKgoKQWxyaWdodCwgc28gYENPTkZJR19JTkVUYCBsb29rcyBjbGVhbiDigJMgbm8gZXhwbGljaXQgZGVwZW5kZW5jaWVzIGJlc2lkZXMgYE5FVGAsIHdoaWNoIGlzIGJhc2ljYWxseSBhIGdpdmVuLiBJJiMzOTttIGFsd2F5cyB0aG9yb3VnaCB0aG91Z2gsIHNvIGJlZm9yZSBJIG1vdmUgb24sIEkgd2FudCB0byBjb25maXJtIHRoZXJlIGFyZW4mIzM5O3QgYW55IGhpZGRlbiBpbXBsaWNhdGlvbnMgb3Igb3RoZXIgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLgoKTm93LCB0aGF0IHBhY2tldGRyaWxsIHRlc3QuLi4gYHN5c2N0bCAtcSBuZXQuaXB2NC50Y3BfaW52YWxpZF9yYXRlbGltaXQ9MGAuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgdGhpcyBzcGVjaWZpYyBzeXNjdGwgaXMgYmVpbmcgc2V0LiBJdCYjMzk7cyB0aGUgYHRjcF9pbnZhbGlkX3JhdGVsaW1pdGAgdGhhdCYjMzk7cyB0aGUga2V5LiBCZXN0IHRvIGRvIGEgcXVpY2sgZ3JlcC4gTGV0JiMzOTtzIHNlZSB3aGVyZSB0aGF0IHZhcmlhYmxlIGlzIHVzZWQgYW5kIHdoYXQmIzM5O3MgZ29pbmcgb24uIEdvdHRhIHN0YXkgb24gdG9wIG9mIGFsbCB0aGUgbW92aW5nIHBhcnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfaW52YWxpZF9yYXRlbGltaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jPTYyNz1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSBpcHY0X25ldF90YWJsZVtdID0ge1xuLS1cbm5ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jLTE0MjYtXHR7XG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYzoxNDI3Olx0XHQucHJvY25hbWVcdD0gXCYjMzQ7dGNwX2ludmFsaWRfcmF0ZWxpbWl0XCYjMzQ7LFxubmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmM6MTQyODpcdFx0LmRhdGFcdFx0PSBcdTAwMjZpbml0X25ldC5pcHY0LnN5c2N0bF90Y3BfaW52YWxpZF9yYXRlbGltaXQsXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYy0xNDI5LVx0XHQubWF4bGVuXHRcdD0gc2l6ZW9mKGludCksXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9Mzk4OT1zdGF0aWMgYm9vbCBfX3RjcF9vb3dfcmF0ZV9saW1pdGVkKHN0cnVjdCBuZXQgKm5ldCwgaW50IG1pYl9pZHgsXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtMzk5OC1cdFx0aWYgKDAgXHUwMDNjPSBlbGFwc2VkIFx1MDAyNlx1MDAyNlxubmV0L2lwdjQvdGNwX2lucHV0LmM6Mzk5OTpcdFx0ICAgIGVsYXBzZWQgXHUwMDNjIFJFQURfT05DRShuZXQtXHUwMDNlaXB2NC5zeXNjdGxfdGNwX2ludmFsaWRfcmF0ZWxpbWl0KSkge1xubmV0L2lwdjQvdGNwX2lucHV0LmMtNDAwMC1cdFx0XHRORVRfSU5DX1NUQVRTKG5ldCwgbWliX2lkeCk7XG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYz0zNDMzPXN0YXRpYyBpbnQgX19uZXRfaW5pdCB0Y3Bfc2tfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYy0zNDk0LVx0bmV0LVx1MDAzZWlwdjQuc3lzY3RsX3RjcF9hdXRvY29ya2luZyA9IDE7XG5uZXQvaXB2NC90Y3BfaXB2NC5jOjM0OTU6XHRuZXQtXHUwMDNlaXB2NC5zeXNjdGxfdGNwX2ludmFsaWRfcmF0ZWxpbWl0ID0gSFovMjtcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzQ5Ni1cdG5ldC1cdTAwM2VpcHY0LnN5c2N0bF90Y3BfcGFjaW5nX3NzX3JhdGlvID0gMjAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDU3MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYHN5c2N0bF90Y3BfaW52YWxpZF9yYXRlbGltaXRgIGluIHRoZSBUQ1AvSU5FVCBDb250ZXh0KioKCk9rYXksIHNvIGBzeXNjdGxfdGNwX2ludmFsaWRfcmF0ZWxpbWl0YCBpcyBjbGVhcmx5IHBhcnQgb2YgdGhlIGNvcmUgVENQL0lORVQgc3RhY2suIExldCYjMzk7cyBtYWtlIHN1cmUgd2UmIzM5O3JlIGZvY3VzZWQgb24gdGhlIGNvcnJlY3Qgc3ltYm9scyBoZXJlLiBJJiMzOTtsbCBkb3VibGUtY2hlY2sgdG8gc2VlIGlmIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBpcyB0aGUga2V5IGFyZWEuIEFyZSB0aGVyZSAqb3RoZXIqIHN5bWJvbHMgdGhhdCBtaWdodCBiZSBpbXBvcnRhbnQ/CgpBbHJpZ2h0LCBsZXQmIzM5O3MgZXhhbWluZSB0aGUgY2FsbGVycyBvciByZWxhdGVkIGhlbHBlciBmdW5jdGlvbnMgZm9yIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBhcyB0aGF0JiMzOTtzIHRoZSBvbmUgdGhhdCB3YXMgbW9kaWZpZWQuIEFoYSEgYHRjcF9yY3ZfZXN0YWJsaXNoZWRgICpjYWxscyogYHRjcF92YWxpZGF0ZV9pbmNvbWluZ2Agb24gdGhlIHNsb3cgcGF0aCwgdGhhdCBtYWtlcyBzZW5zZS4gSG1tLCB3YWl0IGEgbWludXRlLCBgdGNwX3ZhbGlkYXRlX2luY29taW5nYCBpcyAqc3RhdGljKi4gVGhhdCBtZWFucyBpdCYjMzk7cyBub3QgZXhwb3J0ZWQuIExldCBtZSBqdXN0IGNvbmZpcm0gaXRzIHNpZ25hdHVyZTogYHN0YXRpYyBib29sIHRjcF92YWxpZGF0ZV9pbmNvbWluZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoLCBpbnQgc3luX2luZXJyKWAuCgpJJiMzOTtsbCBjaGVjayBob3cgbWFueSB0aW1lcyBpdCYjMzk7cyBjYWxsZWQgd2l0aGluIGB0Y3BfaW5wdXQuY2AganVzdCB0byBiZSBjZXJ0YWluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSByYXRlbGltaXQsIGFuZCBpZiB0aGUgZmFjdCB0aGF0IGl0JiMzOTtzIHN0YXRpYyBpcyBhIGNvbnN0cmFpbnQgb24gb3VyIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfdmFsaWRhdGVfaW5jb21pbmcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2lucHV0LmM9NjMxMD1zdGF0aWMgYm9vbCB0Y3BfcmVzZXRfY2hlY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTYzMjEtICovXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo2MzIyOnN0YXRpYyBib29sIHRjcF92YWxpZGF0ZV9pbmNvbWluZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy02MzIzLVx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgdGNwaGRyICp0aCwgaW50IHN5bl9pbmVycilcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz02NTAxPXZvaWQgdGNwX3Jjdl9lc3RhYmxpc2hlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjY3Mi12YWxpZGF0ZTpcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjY2NzM6XHRpZiAoIXRjcF92YWxpZGF0ZV9pbmNvbWluZyhzaywgc2tiLCB0aCwgMSkpXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy02Njc0LVx0XHRyZXR1cm47XG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9NzE1Mz10Y3BfcmN2X3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTcyMjctXHR9XG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3MjI4Olx0aWYgKCF0Y3BfdmFsaWRhdGVfaW5jb21pbmcoc2ssIHNrYiwgdGgsIDApKVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzIyOS1cdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNDUxCgkJCQkJCQlvdXRwdXQ6IDEzNAoJCQkJCQkJdGhvdWdodHM6IDQ2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBSZWFzb25pbmcgb24gSW5jbHVkaW5nIEZ1bmN0aW9ucyBpbiB0aGUgUmV2aWV3KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgd2hpY2ggZnVuY3Rpb25zIHRvIGluY2x1ZGUgaW4gdGhpcyByZXZpZXcuIGB0Y3BfdmFsaWRhdGVfaW5jb21pbmdgIGdldHMgY2FsbGVkIGZyb20gYm90aCBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAgYW5kIGB0Y3BfcmN2X3N0YXRlX3Byb2Nlc3NgLiBJdCYjMzk7cyBhIGRlY2VudC1zaXplZCBmdW5jdGlvbiBhbmQgY2FsbGVkIGZyb20gbXVsdGlwbGUgcGxhY2VzLCBzbyB0aGUgY29tcGlsZXIgKm1pZ2h0KiBub3QgaW5saW5lIGl0LCBvciBhdCBsZWFzdCBrZWVwIGEgc3ltYm9sIGFyb3VuZCBmb3IgaXQuIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCwgb24gdGhlIG90aGVyIGhhbmQsIGlzIGRlZmluaXRlbHkgbm9uLXN0YXRpYyBhbmQgKmhhcyogYSBzeW1ib2wuIFRoZSBxdWVzdGlvbiBpcywgc2hvdWxkIEkgbGlzdCBib3RoLCBvciBqdXN0IGB0Y3BfcmN2X2VzdGFibGlzaGVkYD8KCldhaXQgYSBtaW51dGUsIHRoZSBpbnN0cnVjdGlvbnMuIFRoZSBpbnN0cnVjdGlvbnMgY2xlYXJseSBzdGF0ZSB0aGF0IEkgbmVlZCB0byBsaXN0IGZ1bmN0aW9ucyB0aGF0IGVpdGhlciBpbXBsZW1lbnQgdGhlIGFsdGVyZWQgbG9naWMgZGlyZWN0bHksIG9yIGFyZSBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzLiBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAgaXMgKmV4YWN0bHkqIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIGJlZW4gYWx0ZXJlZC4gSW5jbHVkaW5nIGJvdGggYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIGFuZCBgdGNwX3ZhbGlkYXRlX2luY29taW5nYCBzZWVtcyB2ZXJ5IGZvY3VzZWQgYW5kIHRhcmdldGVkLiBJIHNob3VsZCBkZWZpbml0ZWx5IGluY2x1ZGUgYHRjcF9yY3ZfZXN0YWJsaXNoZWRgLgoKQnV0IGxldCBtZSBxdWlja2x5IGNoZWNrIGlmIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBpcyBsaWtlLCAqdWJpcXVpdG91cyouIElzIGl0IGNhbGxlZCBieSBhbG1vc3QgZXZlcnl0aGluZyB0aGF0IHJ1bnMgdW5kZXIgc3l6a2FsbGVyPyBOby4gU3l6a2FsbGVyIHJ1bnMgc3lzY2FsbHMgYWNyb3NzIGFsbCBzdWJzeXN0ZW1zOiB2ZnMsIG1tLCBicGYsIHVzYiwgbmV0LCBldGMuIFRDUCBwYWNrZXQgcmVjZWl2ZSBvbmx5IGV4ZWN1dGVzIHdoZW4gVENQIG5ldHdvcmsgcGFja2V0cyBhcmUgcHJvY2Vzc2VkIGJ5IGEgVENQIHNvY2tldCBpbiBFU1RBQkxJU0hFRCBzdGF0ZS4gVGhhdCYjMzk7cyBub3QgbGlrZSBtZW1vcnkgYWxsb2NhdG9ycywgbXV0ZXhlcywgcGFnZSBmYXVsdHMsIG9yIG90aGVyIHN1Y2ggZnVuZGFtZW50YWwsIHdpZGVseS11c2VkIHRoaW5ncy4gU28sIGl0JiMzOTtzIHByZXR0eSB0YXJnZXRlZC4KCkxldCYjMzk7cyBjaGVjayBgV29ydGhGdXp6aW5nYCBuZXh0LCBpdCBpcywgaW4gZmFjdCwgYFdvcnRoRnV6emluZzogdHJ1ZWAuIFRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGBbJiMzNDtJTkVUJiMzNDtdYCB3aGljaCBpcyB3aGF0IGlzIGV4cGVjdGVkLiBUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIGBbJiMzNDt0Y3BfcmN2X2VzdGFibGlzaGVkJiMzNDssICYjMzQ7dGNwX3ZhbGlkYXRlX2luY29taW5nJiMzNDtdYCBzbyB0aGF0JiMzOTtzIGdvb2QuCgpPa2F5LCBsZXQmIzM5O3MgbmFpbCBkb3duIGEgcmVhbGx5IGNsZWFyIHN1bW1hcnkgc3RhdGVtZW50IGZvciB0aGlzLiBIZXJlJiMzOTtzIHdoYXQgSSYjMzk7dmUgZ290OgoKJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgVENQIGZhc3QtcGF0aCBoZWFkZXIgcHJlZGljdGlvbiBjaGVjayBpbiBgdGNwX3Jjdl9lc3RhYmxpc2hlZCgpYCB0byBlbnN1cmUgaW5jb21pbmcgQUNLIHNlcXVlbmNlIG51bWJlcnMgYXJlIHdpdGhpbiBgW1NORC5VTkEsIFNORC5OWFRdYC4gUGFja2V0cyBjYXJyeWluZyBvbGQgQUNLcyBub3cgZmFsbCBiYWNrIHRvIHRoZSBzbG93IHBhdGggKGB0Y3BfdmFsaWRhdGVfaW5jb21pbmcoKWApLCBtaXRpZ2F0aW5nIGJsaW5kIGRhdGEgaW5qZWN0aW9uIGF0dGFja3MgcGVyIFJGQyA1OTYxLiBUaGlzIG1vZGlmaWVzIGNvcmUgVENQIGluY29taW5nIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgbmV0d29yayBmdXp6aW5nIHdpdGggVENQIHNvY2tldHMuJiMzNDsKClRoYXQgc2hvdWxkIGJlIGdvb2QuIFRpbWUgdG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfcmN2X2VzdGFibGlzaGVkJiMzNDssCiAgICAmIzM0O3RjcF92YWxpZGF0ZV9pbmNvbWluZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbHRlcnMgdGhlIGZhc3QtcGF0aCBoZWFkZXIgcHJlZGljdGlvbiBjb25kaXRpb24gaW4gdGNwX3Jjdl9lc3RhYmxpc2hlZCgpIHRvIHJlcXVpcmUgdGhlIEFDSyBzZXF1ZW5jZSBudW1iZXIgdG8gZmFsbCBiZXR3ZWVuIFNORC5VTkEgYW5kIFNORC5OWFQuIFNlZ21lbnRzIHdpdGggb2xkIEFDS3MgYXJlIG5vdyByZWRpcmVjdGVkIHRvIHRoZSBzbG93IHBhdGggKHRjcF92YWxpZGF0ZV9pbmNvbWluZygpKSB0byBwcmV2ZW50IFJGQyA1OTYxIGJsaW5kIGRhdGEgaW5qZWN0aW9uLiBUaGlzIGFsdGVycyBjb3JlIFRDUCByZWNlaXZlIGxvZ2ljIGFuZCBpcyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIFRDUCBzb2NrZXQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF9yY3ZfZXN0YWJsaXNoZWQmIzM0OywKICAgICYjMzQ7dGNwX3ZhbGlkYXRlX2luY29taW5nJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFsdGVycyB0aGUgZmFzdC1wYXRoIGhlYWRlciBwcmVkaWN0aW9uIGNvbmRpdGlvbiBpbiB0Y3BfcmN2X2VzdGFibGlzaGVkKCkgdG8gcmVxdWlyZSB0aGUgQUNLIHNlcXVlbmNlIG51bWJlciB0byBmYWxsIGJldHdlZW4gU05ELlVOQSBhbmQgU05ELk5YVC4gU2VnbWVudHMgd2l0aCBvbGQgQUNLcyBhcmUgbm93IHJlZGlyZWN0ZWQgdG8gdGhlIHNsb3cgcGF0aCAodGNwX3ZhbGlkYXRlX2luY29taW5nKCkpIHRvIHByZXZlbnQgUkZDIDU5NjEgYmxpbmQgZGF0YSBpbmplY3Rpb24uIFRoaXMgYWx0ZXJzIGNvcmUgVENQIHJlY2VpdmUgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgVENQIHNvY2tldCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDoxNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjE0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGNwX3Jjdl9lc3RhYmxpc2hlZCgpIHRvIHJlcXVpcmUgdGhlIGluY29taW5nIEFDSyBzZXF1ZW5jZSBudW1iZXIgdG8gYmUgd2l0aGluIFtTTkQuVU5BLCBTTkQuTlhUXSB2aWEgYmV0d2VlbihUQ1BfU0tCX0NCKHNrYiktXHUwMDNlYWNrX3NlcSwgdHAtXHUwMDNlc25kX3VuYSwgdHAtXHUwMDNlc25kX254dCkgYmVmb3JlIHRha2luZyB0aGUgVENQIGZhc3QgcGF0aCwgZGl2ZXJ0aW5nIHBhY2tldHMgd2l0aCBvbGQgQUNLcyB0byB0aGUgc2xvdyBwYXRoIGZvciBwcm9wZXIgUkZDIDU5NjEgdmFsaWRhdGlvbi5cblxuQWxsIHZhcmlhYmxlcyBpbnZvbHZlZCAoVENQX1NLQl9DQihza2IpLVx1MDAzZWFja19zZXEsIHRwLVx1MDAzZXNuZF91bmEsIHRwLVx1MDAzZXNuZF9ueHQpIGFyZSBpbml0aWFsaXplZCB1MzIgdmFsdWVzLiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgbWVtb3J5LCBhbHRlciBidWZmZXIgc2l6ZXMsIGNvcHkga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjMxOTgzM2EwZjA1MzNkYjdmOGQ2OGEyMjYwMjBkZTI5MDdjNWU2YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDE0IDEwOjEyOjQ4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lucHV0LmMgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwppbmRleCBkYWZmOTNkNTEzNDI4Li4wM2QzMTdhNTgxMzI0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaW5wdXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwpAQCAtNjQ5MCw2ICYjNDM7NjQ5MCw3IEBAIHN0YXRpYyBib29sIHRjcF92YWxpZGF0ZV9pbmNvbWluZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsCiAgKgkgIG9yIHB1cmUgcmVjZWl2ZXJzICh0aGlzIG1lYW5zIGVpdGhlciB0aGUgc2VxdWVuY2UgbnVtYmVyIG9yIHRoZSBhY2sKICAqCSAgdmFsdWUgbXVzdCBzdGF5IGNvbnN0YW50KQogICoJLSBVbmV4cGVjdGVkIFRDUCBvcHRpb24uCiYjNDM7ICoJLSBBQ0sgc2VxdWVuY2UgbnVtYmVyIGlzIG91dHNpZGUgW1NORC5VTkEsIFNORC5OWFRdLgogICoKICAqCVdoZW4gdGhlc2UgY29uZGl0aW9ucyBhcmUgbm90IHNhdGlzZmllZCBpdCBkcm9wcyBpbnRvIGEgc3RhbmRhcmQKICAqCXJlY2VpdmUgcHJvY2VkdXJlIHBhdHRlcm5lZCBhZnRlciBSRkM3OTMgdG8gaGFuZGxlIGFsbCBjYXNlcy4KQEAgLTY1MzksNyAmIzQzOzY1NDAsNyBAQCB2b2lkIHRjcF9yY3ZfZXN0YWJsaXNoZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCiAJaWYgKCh0Y3BfZmxhZ193b3JkKHRoKSAmYW1wOyBUQ1BfSFBfQklUUykgPT0gdHAtJmd0O3ByZWRfZmxhZ3MgJmFtcDsmYW1wOwogCSAgICBUQ1BfU0tCX0NCKHNrYiktJmd0O3NlcSA9PSB0cC0mZ3Q7cmN2X254dCAmYW1wOyZhbXA7Ci0JICAgICFhZnRlcihUQ1BfU0tCX0NCKHNrYiktJmd0O2Fja19zZXEsIHRwLSZndDtzbmRfbnh0KSkgewomIzQzOwkgICAgYmV0d2VlbihUQ1BfU0tCX0NCKHNrYiktJmd0O2Fja19zZXEsIHRwLSZndDtzbmRfdW5hLCB0cC0mZ3Q7c25kX254dCkpIHsKIAkJaW50IHRjcF9oZWFkZXJfbGVuID0gdHAtJmd0O3RjcF9oZWFkZXJfbGVuOwogCQlzMzIgZGVsdGEgPSAwOwogCQlpbnQgZmxhZyA9IDA7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX3JmYzU5NjFfcmVqZWN0LW9sZC1hY2sucGt0IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3BhY2tldGRyaWxsL3RjcF9yZmM1OTYxX3JlamVjdC1vbGQtYWNrLnBrdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4zMmRkOWRlMWQzNjYyCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3BhY2tldGRyaWxsL3RjcF9yZmM1OTYxX3JlamVjdC1vbGQtYWNrLnBrdApAQCAtMCwwICYjNDM7MSwyOSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7YC4vZGVmYXVsdHMuc2gKJiM0MztzeXNjdGwgLXEgbmV0LmlwdjQudGNwX2ludmFsaWRfcmF0ZWxpbWl0PTAKJiM0MztgCiYjNDM7CiYjNDM7Ly8gVGVzdCByZWplY3Rpb24gb2YgZGF0YSBzZWdtZW50cyBjYXJyeWluZyBleGNlc3NpdmVseSBvbGQgQUNLcwomIzQzOwomIzQzOzAgc29ja2V0KC4uLiwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQKSA9IDMKJiM0MzsmIzQzOzAgc2V0c29ja29wdCgzLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsIFsxXSwgNCkgPSAwCiYjNDM7JiM0MzswIGJpbmQoMywgLi4uLCAuLi4pID0gMAomIzQzOyYjNDM7MCBsaXN0ZW4oMywgMTAyNCkgPSAwCiYjNDM7CiYjNDM7Ly8gLS0tLS0tLS0tLS0tLS0tLSBIYW5kc2hha2UgLS0tLS0tLS0tLS0tLS0tLS0tLSAvLwomIzQzOyYjNDM7MCAmbHQ7IFMgMDowKDApIHdpbiA2NTUzNQomIzQzOyYjNDM7MCAmZ3Q7IFMuIDA6MCgwKSBhY2sgMSAmbHQ7Li4uJmd0OwomIzQzOyYjNDM7MCAmbHQ7IC4gMToxKDApIGFjayAxIHdpbiA2NTUzNQomIzQzOyYjNDM7MCBhY2NlcHQoMywgLi4uLCAuLi4pID0gNAomIzQzOwomIzQzOy8vIFBvcHVsYXRlIHJlY2VpdmUgbWVtb3J5IHNvIHRoZSBmb2xsb3dpbmcgc2VnbWVudCBjYW4gdXNlCiYjNDM7Ly8gaGVhZGVyIHByZWRpY3Rpb24uCiYjNDM7JiM0MzswICZsdDsgUC4gMTo1MDEoNTAwKSBhY2sgMSB3aW4gNjU1MzUKJiM0MzsmIzQzOzAgJmd0OyAuIDE6MSgwKSBhY2sgNTAxCiYjNDM7CiYjNDM7Ly8gU2VuZCBhbiBpbi1zZXF1ZW5jZSBkYXRhIHNlZ21lbnQgY2FycnlpbmcgYW4gZXhjZXNzaXZlbHkgb2xkIEFDSy4KJiM0MzsmIzQzOzAgJmx0OyBQLiA1MDE6MTUwMSgxMDAwKSBhY2sgMjc5NDk2NzM5NyB3aW4gNjU1MzUKJiM0MzsKJiM0MzsvLyBDaGFsbGVuZ2UgQUNLOyBSQ1YuTlhUIG11c3QgcmVtYWluIDUwMS4KJiM0MzsmIzQzOzAgJmd0OyAuIDE6MSgwKSBhY2sgNTAxCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODEwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFRDUCBJbnB1dCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhdGNoIHRvIGBuZXQvaXB2NC90Y3BfaW5wdXQuY2AuIEl0JiMzOTtzIGEgZmFpcmx5IGZvY3VzZWQgY2hhbmdlLCB3aGljaCBpcyB1c3VhbGx5IGEgZ29vZCBzaWduLiBMb29rcyBsaWtlIHRoZXkgYXJlIGFkZGluZyBhIG5ldyBjb25kaXRpb24gdG8gdGhlIGB0Y3BfdmFsaWRhdGVfaW5jb21pbmdgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGV5IGFyZSBiZWluZyBtb3JlIHN0cmluZ2VudCBhYm91dCB2YWxpZGF0aW5nIGluY29taW5nIEFDS3MuCgpUaGUgcGF0Y2ggaXRzZWxmIG1vZGlmaWVzIHRoZSB2YWxpZGF0aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAgZnVuY3Rpb24uIEl0IHNlZW1zIHRoYXQgcHJldmlvdXNseSwgYW4gQUNLIHdhcyBhY2NlcHRlZCBpZiBpdCB3YXNuJiMzOTt0ICphZnRlciogYHNuZF9ueHRgLiBOb3csIHRoZSBjb25kaXRpb24gaXMgYGJldHdlZW4oVENQX1NLQl9DQihza2IpLSZndDthY2tfc2VxLCB0cC0mZ3Q7c25kX3VuYSwgdHAtJmd0O3NuZF9ueHQpYC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQmIzM5O3MgZW5mb3JjaW5nIHRoYXQgdGhlIEFDSyBzZXF1ZW5jZSBudW1iZXIgbXVzdCBmYWxsIHdpdGhpbiB0aGUgZXhwZWN0ZWQgd2luZG93IC0gYHNuZF91bmFgIHRvIGBzbmRfbnh0YC4gIFRoaXMgaXMgYSBnb29kIGltcHJvdmVtZW50OyBpdCBwcmV2ZW50cyBhIHZ1bG5lcmFiaWxpdHkgd2hlcmUgYW4gb2xkIEFDSyB0aGF0IGlzIG91dHNpZGUgb2YgdGhlIHdpbmRvdywgYnV0IG5vdCAmIzM0O2FmdGVyJiMzNDsgYHNuZF9ueHRgIG1pZ2h0IGJlIGFjY2VwdGVkLCB3aGljaCBjb3VsZCBiZSBleHBsb2l0ZWQuCgpUaGUgbmV3IGNvbmRpdGlvbiBsb29rcyBsaWtlIGl0IGlzIGFkZHJlc3NpbmcgYSBjYXNlIHdoZXJlIGFuIEFDSyBzZXF1ZW5jZSBudW1iZXIgbWlnaHQgZmFsbCBvdXRzaWRlIG9mIHRoZSB2YWxpZCB3aW5kb3cuIFRoaXMgaXMgZ29vZCBiZWNhdXNlIGl0IGV4cGxpY2l0bHkgcHJldmVudHMgdGhhdC4KClRoZSBwcmVzZW5jZSBvZiB0aGUgcGFja2V0ZHJpbGwgdGVzdCwgYHRjcF9yZmM1OTYxX3JlamVjdC1vbGQtYWNrLnBrdGAsIGlzIGFsc28gdGVsbGluZy4gVGhpcyBpcyBsaWtlbHkgYW4gaW50ZWdyYXRpb24gdGVzdCBkZXNpZ25lZCB0byBjb25maXJtIHRoYXQgdGhpcyBuZXcgdmFsaWRhdGlvbiBsb2dpYyAqY29ycmVjdGx5KiByZWplY3RzIG9sZCBvciBvdXQtb2Ytd2luZG93IEFDS3MuIFRoYXQmIzM5O3MgcHJlY2lzZWx5IHdoYXQgSSYjMzk7ZCBleHBlY3Q7IGl0JiMzOTtzIGNydWNpYWwgdG8gaGF2ZSBhIHRlc3QgY2FzZSBmb3IgdGhpcyB0eXBlIG9mIGNoYW5nZS4gVGhpcyBwYXRjaCBpcyBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSBSRkMgNTk2MS4gVGhpcyBpcyBhIGdvb2QgaW1wcm92ZW1lbnQgdG8gbWFrZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfaW5wdXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY1MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjUzMDpcdFx0dHAtXHUwMDNlcnhfb3B0LmFjY2VjbiA9IDA7XG42NTMxOlx0XG42NTMyOlx0XHQvKlx0cHJlZF9mbGFncyBpcyAweFM/MTAgXHUwMDNjXHUwMDNjIDE2ICYjNDM7IHNuZF93bmRcbjY1MzM6XHRcdCAqXHRpZiBoZWFkZXJfcHJlZGljdGlvbiBpcyB0byBiZSBtYWRlXG42NTM0Olx0XHQgKlx0JiMzOTtTJiMzOTsgd2lsbCBhbHdheXMgYmUgdHAtXHUwMDNldGNwX2hlYWRlcl9sZW4gXHUwMDNlXHUwMDNlIDJcbjY1MzU6XHRcdCAqXHQmIzM5Oz8mIzM5OyB3aWxsIGJlIDAgZm9yIHRoZSBmYXN0IHBhdGgsIG90aGVyd2lzZSBwcmVkX2ZsYWdzIGlzIDAgdG9cbjY1MzY6XHRcdCAqICB0dXJuIGl0IG9mZlx0KHdoZW4gdGhlcmUgYXJlIGhvbGVzIGluIHRoZSByZWNlaXZlXG42NTM3Olx0XHQgKlx0IHNwYWNlIGZvciBpbnN0YW5jZSlcbjY1Mzg6XHRcdCAqXHRQU0ggZmxhZyBpcyBpZ25vcmVkLlxuNjUzOTpcdFx0ICovXG42NTQwOlx0XG42NTQxOlx0XHRpZiAoKHRjcF9mbGFnX3dvcmQodGgpIFx1MDAyNiBUQ1BfSFBfQklUUykgPT0gdHAtXHUwMDNlcHJlZF9mbGFncyBcdTAwMjZcdTAwMjZcbjY1NDI6XHRcdCAgICBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlc2VxID09IHRwLVx1MDAzZXJjdl9ueHQgXHUwMDI2XHUwMDI2XG42NTQzOlx0XHQgICAgYmV0d2VlbihUQ1BfU0tCX0NCKHNrYiktXHUwMDNlYWNrX3NlcSwgdHAtXHUwMDNlc25kX3VuYSwgdHAtXHUwMDNlc25kX254dCkpIHtcbjY1NDQ6XHRcdFx0aW50IHRjcF9oZWFkZXJfbGVuID0gdHAtXHUwMDNldGNwX2hlYWRlcl9sZW47XG42NTQ1Olx0XHRcdHMzMiBkZWx0YSA9IDA7XG42NTQ2Olx0XHRcdGludCBmbGFnID0gMDtcbjY1NDc6XHRcbjY1NDg6XHRcdFx0LyogVGltZXN0YW1wIGhlYWRlciBwcmVkaWN0aW9uOiB0Y3BfaGVhZGVyX2xlblxuNjU0OTpcdFx0XHQgKiBpcyBhdXRvbWF0aWNhbGx5IGVxdWFsIHRvIHRoLVx1MDAzZWRvZmYqNCBkdWUgdG8gcHJlZF9mbGFnc1xuNjU1MDpcdFx0XHQgKiBtYXRjaC5cbjY1NTE6XHRcdFx0ICovXG42NTUyOlx0XG42NTUzOlx0XHRcdC8qIENoZWNrIHRpbWVzdGFtcCAqL1xuNjU1NDpcdFx0XHRpZiAodGNwX2hlYWRlcl9sZW4gPT0gc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpICYjNDM7IFRDUE9MRU5fVFNUQU1QX0FMSUdORUQpIHtcbjY1NTU6XHRcdFx0XHQvKiBObz8gU2xvdyBwYXRoISAqL1xuNjU1NjpcdFx0XHRcdGlmICghdGNwX3BhcnNlX2FsaWduZWRfdGltZXN0YW1wKHRwLCB0aCkpXG42NTU3Olx0XHRcdFx0XHRnb3RvIHNsb3dfcGF0aDtcbjY1NTg6XHRcbjY1NTk6XHRcdFx0XHRkZWx0YSA9IHRwLVx1MDAzZXJ4X29wdC5yY3ZfdHN2YWwgLVxuNjU2MDpcdFx0XHRcdFx0dHAtXHUwMDNlcnhfb3B0LnRzX3JlY2VudDtcbjY1NjE6XHRcdFx0XHQvKiBJZiBQQVdTIGZhaWxlZCwgY2hlY2sgaXQgbW9yZSBjYXJlZnVsbHkgaW4gc2xvdyBwYXRoICovXG42NTYyOlx0XHRcdFx0aWYgKGRlbHRhIFx1MDAzYyAwKVxuNjU2MzpcdFx0XHRcdFx0Z290byBzbG93X3BhdGg7XG42NTY0Olx0XG42NTY1Olx0XHRcdFx0LyogRE8gTk9UIHVwZGF0ZSB0c19yZWNlbnQgaGVyZSwgaWYgY2hlY2tzdW0gZmFpbHNcbjY1NjY6XHRcdFx0XHQgKiBhbmQgdGltZXN0YW1wIHdhcyBjb3JydXB0ZWQgcGFydCwgaXQgd2lsbCByZXN1bHRcbjY1Njc6XHRcdFx0XHQgKiBpbiBhIGh1bmcgY29ubmVjdGlvbiBzaW5jZSB3ZSB3aWxsIGRyb3AgYWxsXG42NTY4Olx0XHRcdFx0ICogZnV0dXJlIHBhY2tldHMgZHVlIHRvIHRoZSBQQVdTIHRlc3QuXG42NTY5Olx0XHRcdFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MTUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqRGl2aW5nIERlZXAgaW50byB0aGUgJiMzOTtTbG93IFBhdGgmIzM5OyoqCgpBbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBhc3N1bXB0aW9uIOKAkyB0aGUgJiMzNDtmYXN0IHBhdGgmIzM0OyDigJMgZGlkbiYjMzk7dCBwYW4gb3V0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYWx0ZXJuYXRpdmUgcm91dGUuIElmIHRoZSBzeXN0ZW0gaXMgbm90IHRha2luZyB0aGUgb3B0aW1pemVkIGV4ZWN1dGlvbiwgSSBuZWVkIHRvIGtub3cgd2h5LiBUaGF0IGxlYWRzIG1lIHRvIGBzbG93X3BhdGhgLiBOb3csIEkgd2FudCB0byB6ZXJvIGluIG9uIHdoYXQmIzM5O3MgYWN0dWFsbHkgaGFwcGVuaW5nIHdoZW4gdGhpbmdzIGFyZW4mIzM5O3QgcnVubmluZyBhcyBleHBlY3RlZC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGxpbmVzIDY1NzAgdGhyb3VnaCA2NjQwLiBUaGF0IGJsb2NrIGlzIHdoZXJlIHRoZSBjb2RlIGRldmlhdGVzIGZyb20gdGhlIGZhc3Qgcm91dGUsIGFuZCB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjcml0aWNhbCBwcm9ibGVtIG1pZ2h0IGJlIGhpZGluZy4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIHN0YXJ0IGludmVzdGlnYXRpbmcgdGhhdCBwYXJ0aWN1bGFyIHNlY3Rpb24gb2YgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfaW5wdXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY1NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjU3MDpcdFx0XHR9XG42NTcxOlx0XG42NTcyOlx0XHRcdGlmIChsZW4gXHUwMDNjPSB0Y3BfaGVhZGVyX2xlbikge1xuNjU3MzpcdFx0XHRcdC8qIEJ1bGsgZGF0YSB0cmFuc2Zlcjogc2VuZGVyICovXG42NTc0Olx0XHRcdFx0aWYgKGxlbiA9PSB0Y3BfaGVhZGVyX2xlbikge1xuNjU3NTpcdFx0XHRcdFx0LyogUHJlZGljdGVkIHBhY2tldCBpcyBpbiB3aW5kb3cgYnkgZGVmaW5pdGlvbi5cbjY1NzY6XHRcdFx0XHRcdCAqIHNlcSA9PSByY3Zfbnh0IGFuZCByY3Zfd3VwIFx1MDAzYz0gcmN2X254dC5cbjY1Nzc6XHRcdFx0XHRcdCAqIEhlbmNlLCBjaGVjayBzZXFcdTAwM2M9cmN2X3d1cCByZWR1Y2VzIHRvOlxuNjU3ODpcdFx0XHRcdFx0ICovXG42NTc5Olx0XHRcdFx0XHRpZiAodGNwX2hlYWRlcl9sZW4gPT1cbjY1ODA6XHRcdFx0XHRcdCAgICAoc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpICYjNDM7IFRDUE9MRU5fVFNUQU1QX0FMSUdORUQpIFx1MDAyNlx1MDAyNlxuNjU4MTpcdFx0XHRcdFx0ICAgIHRwLVx1MDAzZXJjdl9ueHQgPT0gdHAtXHUwMDNlcmN2X3d1cClcbjY1ODI6XHRcdFx0XHRcdFx0ZmxhZyB8PSBfX3RjcF9yZXBsYWNlX3RzX3JlY2VudCh0cCxcbjY1ODM6XHRcdFx0XHRcdFx0XHRcdFx0XHRkZWx0YSk7XG42NTg0Olx0XG42NTg1Olx0XHRcdFx0XHR0Y3BfZWNuX3JlY2VpdmVkX2NvdW50ZXJzKHNrLCBza2IsIDApO1xuNjU4NjpcdFxuNjU4NzpcdFx0XHRcdFx0LyogV2Uga25vdyB0aGF0IHN1Y2ggcGFja2V0cyBhcmUgY2hlY2tzdW1tZWRcbjY1ODg6XHRcdFx0XHRcdCAqIG9uIGVudHJ5LlxuNjU4OTpcdFx0XHRcdFx0ICovXG42NTkwOlx0XHRcdFx0XHR0Y3BfYWNrKHNrLCBza2IsIGZsYWcpO1xuNjU5MTpcdFx0XHRcdFx0X19rZnJlZV9za2Ioc2tiKTtcbjY1OTI6XHRcdFx0XHRcdHRjcF9kYXRhX3NuZF9jaGVjayhzayk7XG42NTkzOlx0XHRcdFx0XHQvKiBXaGVuIHJlY2VpdmluZyBwdXJlIGFjayBpbiBmYXN0IHBhdGgsIHVwZGF0ZVxuNjU5NDpcdFx0XHRcdFx0ICogbGFzdCB0cyBlY3IgZGlyZWN0bHkgaW5zdGVhZCBvZiBjYWxsaW5nXG42NTk1Olx0XHRcdFx0XHQgKiB0Y3BfcmN2X3J0dF9tZWFzdXJlX3RzKClcbjY1OTY6XHRcdFx0XHRcdCAqL1xuNjU5NzpcdFx0XHRcdFx0dHAtXHUwMDNlcmN2X3J0dF9sYXN0X3RzZWNyID0gdHAtXHUwMDNlcnhfb3B0LnJjdl90c2VjcjtcbjY1OTg6XHRcdFx0XHRcdHJldHVybjtcbjY1OTk6XHRcdFx0XHR9IGVsc2UgeyAvKiBIZWFkZXIgdG9vIHNtYWxsICovXG42NjAwOlx0XHRcdFx0XHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fUEtUX1RPT19TTUFMTDtcbjY2MDE6XHRcdFx0XHRcdFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBUQ1BfTUlCX0lORVJSUyk7XG42NjAyOlx0XHRcdFx0XHRnb3RvIGRpc2NhcmQ7XG42NjAzOlx0XHRcdFx0fVxuNjYwNDpcdFx0XHR9IGVsc2Uge1xuNjYwNTpcdFx0XHRcdGludCBlYXRlbiA9IDA7XG42NjA2Olx0XHRcdFx0Ym9vbCBmcmFnc3RvbGVuID0gZmFsc2U7XG42NjA3Olx0XG42NjA4Olx0XHRcdFx0aWYgKHRjcF9jaGVja3N1bV9jb21wbGV0ZShza2IpKVxuNjYwOTpcdFx0XHRcdFx0Z290byBjc3VtX2Vycm9yO1xuNjYxMDpcdFxuNjYxMTpcdFx0XHRcdGlmIChhZnRlcihUQ1BfU0tCX0NCKHNrYiktXHUwMDNlZW5kX3NlcSxcbjY2MTI6XHRcdFx0XHRcdCAgdHAtXHUwMDNlcmN2X254dCAmIzQzOyB0Y3BfcmVjZWl2ZV93aW5kb3codHApKSlcbjY2MTM6XHRcdFx0XHRcdGdvdG8gdmFsaWRhdGU7XG42NjE0Olx0XG42NjE1Olx0XHRcdFx0aWYgKChpbnQpc2tiLVx1MDAzZXRydWVzaXplIFx1MDAzZSBzay1cdTAwM2Vza19mb3J3YXJkX2FsbG9jKVxuNjYxNjpcdFx0XHRcdFx0Z290byBzdGVwNTtcbjY2MTc6XHRcbjY2MTg6XHRcdFx0XHQvKiBQcmVkaWN0ZWQgcGFja2V0IGlzIGluIHdpbmRvdyBieSBkZWZpbml0aW9uLlxuNjYxOTpcdFx0XHRcdCAqIHNlcSA9PSByY3Zfbnh0IGFuZCByY3Zfd3VwIFx1MDAzYz0gcmN2X254dC5cbjY2MjA6XHRcdFx0XHQgKiBIZW5jZSwgY2hlY2sgc2VxXHUwMDNjPXJjdl93dXAgcmVkdWNlcyB0bzpcbjY2MjE6XHRcdFx0XHQgKi9cbjY2MjI6XHRcdFx0XHRpZiAodGNwX2hlYWRlcl9sZW4gPT1cbjY2MjM6XHRcdFx0XHQgICAgKHNpemVvZihzdHJ1Y3QgdGNwaGRyKSAmIzQzOyBUQ1BPTEVOX1RTVEFNUF9BTElHTkVEKSBcdTAwMjZcdTAwMjZcbjY2MjQ6XHRcdFx0XHQgICAgdHAtXHUwMDNlcmN2X254dCA9PSB0cC1cdTAwM2VyY3Zfd3VwKVxuNjYyNTpcdFx0XHRcdFx0ZmxhZyB8PSBfX3RjcF9yZXBsYWNlX3RzX3JlY2VudCh0cCxcbjY2MjY6XHRcdFx0XHRcdFx0XHRcdFx0ZGVsdGEpO1xuNjYyNzpcdFxuNjYyODpcdFx0XHRcdHRjcF9yY3ZfcnR0X21lYXN1cmVfdHMoc2ssIHNrYik7XG42NjI5Olx0XG42NjMwOlx0XHRcdFx0TkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9UQ1BIUEhJVFMpO1xuNjYzMTpcdFxuNjYzMjpcdFx0XHRcdC8qIEJ1bGsgZGF0YSB0cmFuc2ZlcjogcmVjZWl2ZXIgKi9cbjY2MzM6XHRcdFx0XHR0Y3BfY2xlYW51cF9za2Ioc2tiKTtcbjY2MzQ6XHRcdFx0XHRfX3NrYl9wdWxsKHNrYiwgdGNwX2hlYWRlcl9sZW4pO1xuNjYzNTpcdFx0XHRcdHRjcF9lY25fcmVjZWl2ZWRfY291bnRlcnMoc2ssIHNrYixcbjY2MzY6XHRcdFx0XHRcdFx0XHQgIGxlbiAtIHRjcF9oZWFkZXJfbGVuKTtcbjY2Mzc6XHRcdFx0XHRlYXRlbiA9IHRjcF9xdWV1ZV9yY3Yoc2ssIHNrYiwgXHUwMDI2ZnJhZ3N0b2xlbik7XG42NjM4Olx0XG42NjM5Olx0XHRcdFx0dGNwX2V2ZW50X2RhdGFfcmVjdihzaywgc2tiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc4OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDMyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRDUCBBQ0sgU2VxdWVuY2UgVmFsaWRhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiB0aGlzIGBiZXR3ZWVuKFRDUF9TS0JfQ0Ioc2tiKS0mZ3Q7YWNrX3NlcSwgdHAtJmd0O3NuZF91bmEsIHRwLSZndDtzbmRfbnh0KWAgY2hlY2suIEJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgY29kZSB1c2VkIGAhYWZ0ZXIoVENQX1NLQl9DQihza2IpLSZndDthY2tfc2VxLCB0cC0mZ3Q7c25kX254dClgLCB3aGljaCBlZmZlY3RpdmVseSBtZWFucyBgYWNrX3NlcWAgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYHRwLSZndDtzbmRfbnh0YC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBIb3dldmVyLCBJIG5lZWQgdG8gY29uc2lkZXIgYSBwb3RlbnRpYWwgaXNzdWU6IHdoYXQgaGFwcGVucyBpZiBgYWNrX3NlcWAgaXMgYWN0dWFsbHkgKmxlc3MgdGhhbiogYHRwLSZndDtzbmRfdW5hYD8gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYW4gJiMzNDtvbGQmIzM0OyBBQ0ssIG9uZSB0aGF0IGFja25vd2xlZGdlcyBkYXRhICpiZWZvcmUqIG91ciBTZW5kIFVuYWNrbm93bGVkZ2VkIHNlcXVlbmNlLiBSRkMgNTk2MSBhbmQgb3RoZXIgVENQIHN0YW5kYXJkcyBwcm9iYWJseSBoYXZlIHNwZWNpZmljIHJlcXVpcmVtZW50cyBmb3IgaGFuZGxpbmcgdGhlc2UsIHBvdGVudGlhbGx5IHJlamVjdGluZyB0aGVtIG91dHJpZ2h0LCBlc3BlY2lhbGx5IGNoYWxsZW5nZSBBQ0tzIHRoYXQgYXJlIHJpZGljdWxvdXNseSBvdXQgb2Ygc2VxdWVuY2UuCgpUaGUgcHJvYmxlbSwgYXMgSSBzZWUgaXQsIGlzIHRoYXQgdGhlIG9yaWdpbmFsIGZhc3QgcGF0aCBsb2dpYywgYmFzZWQgb24gYCFhZnRlcihhY2tfc2VxLCBzbmRfbnh0KWAsIHdvdWxkIGluY29ycmVjdGx5IGFsbG93IHRoZXNlIG9sZCBBQ0tzIHRocm91Z2ggaWYgdGhleSB3ZXJlIGluIHRoZSByYW5nZSBvZiBgc25kX3VuYWAgdG8gYHNuZF9ueHRgLiBTaW5jZSBhbiBvbGQgQUNLIHdpbGwgaGF2ZSBgYWNrX3NlcSAmbHQ7PSBzbmRfbnh0YCwgdGhlIGZhc3QgcGF0aCB3b3VsZCBoYXZlIGJlZW4gbWlzdGFrZW5seSB0cmlnZ2VyZWQuIFRoaXMgaXMgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSwgc2luY2UgZGF0YSBzZWdtZW50cyB3aXRoIHRoZXNlIG9sZCBBQ0tzIHdvdWxkIGJlIHByb2Nlc3NlZC4KCk5vdywgd2l0aCB0aGlzIHBhdGNoLCB1c2luZyBgYmV0d2VlbihUQ1BfU0tCX0NCKHNrYiktJmd0O2Fja19zZXEsIHRwLSZndDtzbmRfdW5hLCB0cC0mZ3Q7c25kX254dClgLCBpdCYjMzk7cyBjbGVhciB0aGUgaW50ZW50aW9uIGlzIHRvIGNvcnJlY3QgdGhpcy4gQW4gYGFja19zZXFgIGxlc3MgdGhhbiBgdHAtJmd0O3NuZF91bmFgIHdpbGwgKm5vdCogZmFsbCB3aXRoaW4gdGhpcyByYW5nZSwgdGh1cyBhdm9pZGluZyB0aGUgZmFzdCBwYXRoLiBJbnN0ZWFkLCBpdCB3aWxsIGRyb3AgaW50byB0aGUgc2xvdyBwYXRoLCB3aGVyZSBgdGNwX3ZhbGlkYXRlX2luY29taW5nYCBoYW5kbGVzIG1vcmUgdGhvcm91Z2ggY2hlY2tzIGZvciBSRkMgNTk2MSBjb21wbGlhbmNlLiBUaGlzIHNlZW1zIGxpa2UgYSBzb2xpZCBzb2x1dGlvbi4KCk15IG5leHQgc3RlcCBpcyB0byBjb25maXJtIHRoaXMuIEkgbmVlZCB0byBkaXZlIGludG8gYHRjcF92YWxpZGF0ZV9pbmNvbWluZ2Agb3IgdGhlIHNsb3cgcGF0aCBjb2RlIHRvIHZlcmlmeSBleGFjdGx5IGhvdyBSRkMgNTk2MSYjMzk7cyBzdGlwdWxhdGlvbnMgZm9yIG9sZCBBQ0tzIGFyZSBpbXBsZW1lbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfaW5wdXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY2NTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjY1NTpcdFx0XHRcdHRjcF9kYXRhX3JlYWR5KHNrKTtcbjY2NTY6XHRcdFx0XHRyZXR1cm47XG42NjU3Olx0XHRcdH1cbjY2NTg6XHRcdH1cbjY2NTk6XHRcbjY2NjA6XHRzbG93X3BhdGg6XG42NjYxOlx0XHRpZiAobGVuIFx1MDAzYyAodGgtXHUwMDNlZG9mZiBcdTAwM2NcdTAwM2MgMikgfHwgdGNwX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpXG42NjYyOlx0XHRcdGdvdG8gY3N1bV9lcnJvcjtcbjY2NjM6XHRcbjY2NjQ6XHRcdGlmICghdGgtXHUwMDNlYWNrIFx1MDAyNlx1MDAyNiAhdGgtXHUwMDNlcnN0IFx1MDAyNlx1MDAyNiAhdGgtXHUwMDNlc3luKSB7XG42NjY1Olx0XHRcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9UQ1BfRkxBR1M7XG42NjY2Olx0XHRcdGdvdG8gZGlzY2FyZDtcbjY2Njc6XHRcdH1cbjY2Njg6XHRcbjY2Njk6XHRcdC8qXG42NjcwOlx0XHQgKlx0U3RhbmRhcmQgc2xvdyBwYXRoLlxuNjY3MTpcdFx0ICovXG42NjcyOlx0dmFsaWRhdGU6XG42NjczOlx0XHRpZiAoIXRjcF92YWxpZGF0ZV9pbmNvbWluZyhzaywgc2tiLCB0aCwgMSkpXG42Njc0Olx0XHRcdHJldHVybjtcbjY2NzU6XHRcbjY2NzY6XHRzdGVwNTpcbjY2Nzc6XHRcdHRjcF9lY25fcmVjZWl2ZWRfY291bnRlcnNfcGF5bG9hZChzaywgc2tiKTtcbjY2Nzg6XHRcbjY2Nzk6XHRcdHJlYXNvbiA9IHRjcF9hY2soc2ssIHNrYiwgRkxBR19TTE9XUEFUSCB8IEZMQUdfVVBEQVRFX1RTX1JFQ0VOVCk7XG42NjgwOlx0XHRpZiAoKGludClyZWFzb24gXHUwMDNjIDApIHtcbjY2ODE6XHRcdFx0cmVhc29uID0gLXJlYXNvbjtcbjY2ODI6XHRcdFx0Z290byBkaXNjYXJkO1xuNjY4MzpcdFx0fVxuNjY4NDpcdFx0dGNwX3Jjdl9ydHRfbWVhc3VyZV90cyhzaywgc2tiKTtcbjY2ODU6XHRcbjY2ODY6XHRcdC8qIFByb2Nlc3MgdXJnZW50IGRhdGEuICovXG42Njg3Olx0XHR0Y3BfdXJnKHNrLCBza2IsIHRoKTtcbjY2ODg6XHRcbjY2ODk6XHRcdC8qIHN0ZXAgNzogcHJvY2VzcyB0aGUgc2VnbWVudCB0ZXh0ICovXG42NjkwOlx0XHR0Y3BfZGF0YV9xdWV1ZShzaywgc2tiKTtcbjY2OTE6XHRcbjY2OTI6XHRcdHRjcF9kYXRhX3NuZF9jaGVjayhzayk7XG42NjkzOlx0XHR0Y3BfYWNrX3NuZF9jaGVjayhzayk7XG42Njk0Olx0XHRyZXR1cm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNjIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcsIGV4cHJlc3NlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgRGVlcGVyIGludG8gTmV0d29yayBWYWxpZGF0aW9uKioKCk9rYXksIHNvIHdlJiMzOTt2ZSBiZWVuIGV4YW1pbmluZyB0aGUgaW5jb21pbmcgbmV0d29yayB0cmFmZmljIHZhbGlkYXRpb24gcm91dGluZXMuIEl0JiMzOTtzIGNydWNpYWwsIGFuZCBJJiMzOTt2ZSBnb3QgYSBzcGVjaWZpYyBhcmVhIEkgd2FudCB0byBmb2N1cyBvbiBub3cuIExldCYjMzk7cyBzaGlmdCBvdXIgYXR0ZW50aW9uIHRvIHRoZSBgdGNwX3ZhbGlkYXRlX2luY29taW5nYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDY0OTAgaW4gdGhlIHJlbGV2YW50IGNvZGUuIFRoYXQmIzM5O3Mgd2hlcmUgSSBiZWxpZXZlIHdlIG1pZ2h0IGZpbmQgc29tZSBpbnRlcmVzdGluZyBudWFuY2VzIHRoYXQgd2FycmFudCBhIGRlZXBlciBsb29rLiBJJiMzOTttIHRoaW5raW5nIHRoZXJlIGNvdWxkIGJlIHNvbWUgc3VidGxlIHZ1bG5lcmFiaWxpdGllcyBvciBpbmVmZmljaWVuY2llcyBsdXJraW5nIHRoZXJlIHRoYXQgd2UgbmVlZCB0byBleHBvc2UuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDEwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2lucHV0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY0ODA6XHQgKlx0SXQgaXMgc3BsaXQgaW50byBhIGZhc3QgcGF0aCBhbmQgYSBzbG93IHBhdGguIFRoZSBmYXN0IHBhdGggaXNcbjY0ODE6XHQgKiBcdGRpc2FibGVkIHdoZW46XG42NDgyOlx0ICpcdC0gQSB6ZXJvIHdpbmRvdyB3YXMgYW5ub3VuY2VkIGZyb20gdXMgLSB6ZXJvIHdpbmRvdyBwcm9iaW5nXG42NDgzOlx0ICogICAgICAgIGlzIG9ubHkgaGFuZGxlZCBwcm9wZXJseSBpbiB0aGUgc2xvdyBwYXRoLlxuNjQ4NDpcdCAqXHQtIE91dCBvZiBvcmRlciBzZWdtZW50cyBhcnJpdmVkLlxuNjQ4NTpcdCAqXHQtIFVyZ2VudCBkYXRhIGlzIGV4cGVjdGVkLlxuNjQ4NjpcdCAqXHQtIFRoZXJlIGlzIG5vIGJ1ZmZlciBzcGFjZSBsZWZ0XG42NDg3Olx0ICpcdC0gVW5leHBlY3RlZCBUQ1AgZmxhZ3Mvd2luZG93IHZhbHVlcy9oZWFkZXIgbGVuZ3RocyBhcmUgcmVjZWl2ZWRcbjY0ODg6XHQgKlx0ICAoZGV0ZWN0ZWQgYnkgY2hlY2tpbmcgdGhlIFRDUCBoZWFkZXIgYWdhaW5zdCBwcmVkX2ZsYWdzKVxuNjQ4OTpcdCAqXHQtIERhdGEgaXMgc2VudCBpbiBib3RoIGRpcmVjdGlvbnMuIEZhc3QgcGF0aCBvbmx5IHN1cHBvcnRzIHB1cmUgc2VuZGVyc1xuNjQ5MDpcdCAqXHQgIG9yIHB1cmUgcmVjZWl2ZXJzICh0aGlzIG1lYW5zIGVpdGhlciB0aGUgc2VxdWVuY2UgbnVtYmVyIG9yIHRoZSBhY2tcbjY0OTE6XHQgKlx0ICB2YWx1ZSBtdXN0IHN0YXkgY29uc3RhbnQpXG42NDkyOlx0ICpcdC0gVW5leHBlY3RlZCBUQ1Agb3B0aW9uLlxuNjQ5MzpcdCAqXHQtIEFDSyBzZXF1ZW5jZSBudW1iZXIgaXMgb3V0c2lkZSBbU05ELlVOQSwgU05ELk5YVF0uXG42NDk0Olx0ICpcbjY0OTU6XHQgKlx0V2hlbiB0aGVzZSBjb25kaXRpb25zIGFyZSBub3Qgc2F0aXNmaWVkIGl0IGRyb3BzIGludG8gYSBzdGFuZGFyZFxuNjQ5NjpcdCAqXHRyZWNlaXZlIHByb2NlZHVyZSBwYXR0ZXJuZWQgYWZ0ZXIgUkZDNzkzIHRvIGhhbmRsZSBhbGwgY2FzZXMuXG42NDk3Olx0ICpcdFRoZSBmaXJzdCB0aHJlZSBjYXNlcyBhcmUgZ3VhcmFudGVlZCBieSBwcm9wZXIgcHJlZF9mbGFncyBzZXR0aW5nLFxuNjQ5ODpcdCAqXHR0aGUgcmVzdCBpcyBjaGVja2VkIGlubGluZS4gRmFzdCBwcm9jZXNzaW5nIGlzIHR1cm5lZCBvbiBpblxuNjQ5OTpcdCAqXHR0Y3BfZGF0YV9xdWV1ZSB3aGVuIGV2ZXJ5dGhpbmcgaXMgT0suXG42NTAwOlx0ICovXG42NTAxOlx0dm9pZCB0Y3BfcmN2X2VzdGFibGlzaGVkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjY1MDI6XHR7XG42NTAzOlx0XHRlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRDtcbjY1MDQ6XHRcdGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoID0gKGNvbnN0IHN0cnVjdCB0Y3BoZHIgKilza2ItXHUwMDNlZGF0YTtcbjY1MDU6XHRcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xuNjUwNjpcdFx0dW5zaWduZWQgaW50IGxlbiA9IHNrYi1cdTAwM2VsZW47XG42NTA3Olx0XG42NTA4Olx0XHQvKiBUQ1AgY29uZ2VzdGlvbiB3aW5kb3cgdHJhY2tpbmcgKi9cbjY1MDk6XHRcdHRyYWNlX3RjcF9wcm9iZShzaywgc2tiKTtcbjY1MTA6XHRcbjY1MTE6XHRcdHRjcF9tc3RhbXBfcmVmcmVzaF9pbmxpbmUodHApO1xuNjUxMjpcdFx0aWYgKHVubGlrZWx5KCFyY3VfYWNjZXNzX3BvaW50ZXIoc2stXHUwMDNlc2tfcnhfZHN0KSkpXG42NTEzOlx0XHRcdGluZXRfY3NrKHNrKS1cdTAwM2VpY3NrX2FmX29wcy1cdTAwM2Vza19yeF9kc3Rfc2V0KHNrLCBza2IpO1xuNjUxNDpcdFx0LypcbjY1MTU6XHRcdCAqXHRIZWFkZXIgcHJlZGljdGlvbi5cbjY1MTY6XHRcdCAqXHRUaGUgY29kZSBsb29zZWx5IGZvbGxvd3MgdGhlIG9uZSBpbiB0aGUgZmFtb3VzXG42NTE3Olx0XHQgKlx0XCYjMzQ7MzAgaW5zdHJ1Y3Rpb24gVENQIHJlY2VpdmVcJiMzNDsgVmFuIEphY29ic29uIG1haWwuXG42NTE4Olx0XHQgKlxuNjUxOTpcdFx0ICpcdFZhbiYjMzk7cyB0cmljayBpcyB0byBkZXBvc2l0IGJ1ZmZlcnMgaW50byBzb2NrZXQgcXVldWVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMTA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA5NgoJCQkJCQkJb3V0cHV0OiAxOTUKCQkJCQkJCXRob3VnaHRzOiA5NTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTWVtb3J5IFNhZmV0eSBBbmFseXNpcyBvZiBUQ1AgRmFzdCBQYXRoIENoYW5nZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBjaGFuZ2UgZnJvbSBhIG1lbW9yeSBzYWZldHkgcGVyc3BlY3RpdmUuIFRoZSBjb3JlIG9mIGl0IHJlcGxhY2VzIHRoZSBwcmV2aW91cyBjaGVjayBmb3IgYGFja19zZXFgIGJlaW5nICphZnRlciogYHNuZF9ueHRgIHdpdGggYSBtb3JlIHByZWNpc2UgYGJldHdlZW5gIGNoZWNrIHRoYXQgY29uZmlybXMgYGFja19zZXFgIGZhbGxzIHdpdGhpbiB0aGUgcmFuZ2UgYFtzbmRfdW5hLCBzbmRfbnh0XWAuIFRoZSBgYmV0d2VlbmAgbWFjcm8sIGRlZmluZWQgaW4gYG5ldC90Y3AuaGAsIGNsZXZlcmx5IHVzZXMgdW5zaWduZWQgaW50ZWdlciBhcml0aG1ldGljIHRvIGVmZmljaWVudGx5IGRldGVybWluZSBpZiBgYWNrX3NlcWAgaXMgd2l0aGluIHRoaXMgcmFuZ2UuCgpUaGUgY3JpdGljYWwgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgbWVtb3J5IHNhZmV0eSB2dWxuZXJhYmlsaXRpZXMuIEFyZSB3ZSBsb29raW5nIGF0IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcz8gSXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgdGhlIGFuc3dlciBpcyBuby4gYGFja19zZXFgLCBgc25kX3VuYWAsIGFuZCBgc25kX254dGAgYXJlIGFsbCBlc3RhYmxpc2hlZCwgaW5pdGlhbGl6ZWQgc2VxdWVuY2UgbnVtYmVycywgc28gd2UgYXJlbiYjMzk7dCBpbnRyb2R1Y2luZyBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGlzIGNoZWNrIGFsc28gZG9lc24mIzM5O3QgaW52b2x2ZSBhbnkgY29weWluZyB0byB1c2Vyc3BhY2Ugb3IgYWx0ZXJhdGlvbiBvZiBidWZmZXIgbGVuZ3RocyB0aGF0IG1pZ2h0IGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEuIENyaXRpY2FsbHksIHBhY2tldHMgd2l0aCAmIzM0O29sZCYjMzQ7IEFDS3MgYXJlIHNpbXBseSBkaXZlcnRlZCB0byB0aGUgZXhpc3Rpbmcgc2xvdyBwYXRoIGZvciBzdGFuZGFyZCBwcm9jZXNzaW5nLCB3aGljaCBpcyBhbHJlYWR5IGRlc2lnbmVkIHRvIGhhbmRsZSB0aGVzZSBjYXNlcyBzYWZlbHkuIE5vIG5ldyBhbGxvY2F0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBzdHJ1Y3QgcGFkZGluZyBhcmUgaW50cm9kdWNlZC4KCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIHRoZSBLTVNBTiB2cy4gS0FTQU4gaW1wbGljYXRpb25zLiBSZW1lbWJlciwgS01TQU4gaXMgZm9yIGNhdGNoaW5nICp1bmluaXRpYWxpemVkKiBtZW1vcnkgcmVhZHMsIHdoaWxlIEtBU0FOIGFuZCBvdGhlciBzdGFuZGFyZCBkZWJ1Z2dlcnMgaGFuZGxlIGlzc3VlcyBsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBhbmQgbG9jay1yZWxhdGVkIGJ1Z3MuIEtNU0FOIGlzIHJlc291cmNlLWludGVuc2l2ZSwgc28gd2Ugb25seSB1c2UgaXQgd2hlbiAqdW5pbml0aWFsaXplZCBtZW1vcnkqIHJpc2tzIGFyZSBzcGVjaWZpY2FsbHkgaW50cm9kdWNlZCBvciBleHBvc2VkLgoKTG9va2luZyBhdCB0aGUgS01TQU4gY3JpdGVyaWEsIHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgdHJpZ2dlciBhbnkgb2YgdGhlbTogSXQmIzM5O3Mgbm90IGludm9sdmluZyBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSwgY29uZGl0aW9uYWwgbG9naWMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBkYXRhLCBhbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMsIG9yIGFsdGVyaW5nIGJvdW5kcyBjaGVja3MgaW4gYSB3YXkgdGhhdCBhbGxvd3MgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgYXJlIGZ1bGx5IGluaXRpYWxpemVkLgoKVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgY2hhbmdlIHByaW1hcmlseSB0aWdodGVucyB0aGUgZmFzdCBwYXRoIGNvbmRpdGlvbiB0byBlbnN1cmUgdGhhdCB0aGUgQUNLcyBiZWluZyBwcm9jZXNzZWQgYXJlIHdpdGhpbiBhIHZhbGlkIHNlcXVlbmNlIG51bWJlciByYW5nZSAoYXMgcGVyIFJGQyA1OTYxKSwgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcywgYE5lZWRzS01TQU5gIGlzIGRlZmluaXRpdmVseSBgZmFsc2VgLiBUaGUgcGF0Y2ggc2ltcGx5IHJlcm91dGVzIG9sZGVyIEFDS3MgdG8gYW4gZXhpc3Rpbmcgc2FmZSBzbG93IHBhdGguCgpTbywgSSYjMzk7bSBjYWxsaW5nIGBzZXQtcmVzdWx0c2Agd2l0aCBgTmVlZHNLTVNBTjogZmFsc2VgIGFuZCBwcm92aWRpbmcgYSBjbGVhciBleHBsYW5hdGlvbiBvZiB0aGlzIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAxMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0Y3BfcmN2X2VzdGFibGlzaGVkKCkgdG8gcmVxdWlyZSB0aGUgaW5jb21pbmcgQUNLIHNlcXVlbmNlIG51bWJlciB0byBiZSB3aXRoaW4gW1NORC5VTkEsIFNORC5OWFRdIHZpYSBiZXR3ZWVuKFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VhY2tfc2VxLCB0cC1cdTAwM2VzbmRfdW5hLCB0cC1cdTAwM2VzbmRfbnh0KSBiZWZvcmUgdGFraW5nIHRoZSBUQ1AgZmFzdCBwYXRoLCBkaXZlcnRpbmcgcGFja2V0cyB3aXRoIG9sZCBBQ0tzIHRvIHRoZSBzbG93IHBhdGggZm9yIHByb3BlciBSRkMgNTk2MSB2YWxpZGF0aW9uLlxuXG5BbGwgdmFyaWFibGVzIGludm9sdmVkIChUQ1BfU0tCX0NCKHNrYiktXHUwMDNlYWNrX3NlcSwgdHAtXHUwMDNlc25kX3VuYSwgdHAtXHUwMDNlc25kX254dCkgYXJlIGluaXRpYWxpemVkIHUzMiB2YWx1ZXMuIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBtZW1vcnksIGFsdGVyIGJ1ZmZlciBzaXplcywgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0Y3BfcmN2X2VzdGFibGlzaGVkKCkgdG8gcmVxdWlyZSB0aGUgaW5jb21pbmcgQUNLIHNlcXVlbmNlIG51bWJlciB0byBiZSB3aXRoaW4gW1NORC5VTkEsIFNORC5OWFRdIHZpYSBiZXR3ZWVuKFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VhY2tfc2VxLCB0cC1cdTAwM2VzbmRfdW5hLCB0cC1cdTAwM2VzbmRfbnh0KSBiZWZvcmUgdGFraW5nIHRoZSBUQ1AgZmFzdCBwYXRoLCBkaXZlcnRpbmcgcGFja2V0cyB3aXRoIG9sZCBBQ0tzIHRvIHRoZSBzbG93IHBhdGggZm9yIHByb3BlciBSRkMgNTk2MSB2YWxpZGF0aW9uLlxuXG5BbGwgdmFyaWFibGVzIGludm9sdmVkIChUQ1BfU0tCX0NCKHNrYiktXHUwMDNlYWNrX3NlcSwgdHAtXHUwMDNlc25kX3VuYSwgdHAtXHUwMDNlc25kX254dCkgYXJlIGluaXRpYWxpemVkIHUzMiB2YWx1ZXMuIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBtZW1vcnksIGFsdGVyIGJ1ZmZlciBzaXplcywgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjEyOjUwLjE3MDc1NzMxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5OTQ0MDQ3OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3BfcmN2X2VzdGFibGlzaGVkXCIsXG4gICAgXCJ0Y3BfdmFsaWRhdGVfaW5jb21pbmdcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRjcF9yY3ZfZXN0YWJsaXNoZWQoKSB0byByZXF1aXJlIHRoZSBpbmNvbWluZyBBQ0sgc2VxdWVuY2UgbnVtYmVyIHRvIGJlIHdpdGhpbiBbU05ELlVOQSwgU05ELk5YVF0gdmlhIGJldHdlZW4oVENQX1NLQl9DQihza2IpLVxcdTAwM2VhY2tfc2VxLCB0cC1cXHUwMDNlc25kX3VuYSwgdHAtXFx1MDAzZXNuZF9ueHQpIGJlZm9yZSB0YWtpbmcgdGhlIFRDUCBmYXN0IHBhdGgsIGRpdmVydGluZyBwYWNrZXRzIHdpdGggb2xkIEFDS3MgdG8gdGhlIHNsb3cgcGF0aCBmb3IgcHJvcGVyIFJGQyA1OTYxIHZhbGlkYXRpb24uXFxuXFxuQWxsIHZhcmlhYmxlcyBpbnZvbHZlZCAoVENQX1NLQl9DQihza2IpLVxcdTAwM2VhY2tfc2VxLCB0cC1cXHUwMDNlc25kX3VuYSwgdHAtXFx1MDAzZXNuZF9ueHQpIGFyZSBpbml0aWFsaXplZCB1MzIgdmFsdWVzLiBUaGUgcGF0Y2ggZG9lcyBub3QgYWxsb2NhdGUgbWVtb3J5LCBhbHRlciBidWZmZXIgc2l6ZXMsIGNvcHkga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZSwgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsdGVycyB0aGUgZmFzdC1wYXRoIGhlYWRlciBwcmVkaWN0aW9uIGNvbmRpdGlvbiBpbiB0Y3BfcmN2X2VzdGFibGlzaGVkKCkgdG8gcmVxdWlyZSB0aGUgQUNLIHNlcXVlbmNlIG51bWJlciB0byBmYWxsIGJldHdlZW4gU05ELlVOQSBhbmQgU05ELk5YVC4gU2VnbWVudHMgd2l0aCBvbGQgQUNLcyBhcmUgbm93IHJlZGlyZWN0ZWQgdG8gdGhlIHNsb3cgcGF0aCAodGNwX3ZhbGlkYXRlX2luY29taW5nKCkpIHRvIHByZXZlbnQgUkZDIDU5NjEgYmxpbmQgZGF0YSBpbmplY3Rpb24uIFRoaXMgYWx0ZXJzIGNvcmUgVENQIHJlY2VpdmUgbG9naWMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgVENQIHNvY2tldCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDoxMjo1MC4xNzA3NjM4NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3MDE4NjQ0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGIzMTk4MzNhMGYwNTMzZGI3ZjhkNjhhMjI2MDIwZGUyOTA3YzVlNmFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBTZXAgMTQgMTA6MTI6NDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lucHV0LmMgYi9uZXQvaXB2NC90Y3BfaW5wdXQuY1xcbmluZGV4IGRhZmY5M2Q1MTM0MjguLjAzZDMxN2E1ODEzMjQgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvdGNwX2lucHV0LmNcXG4rKysgYi9uZXQvaXB2NC90Y3BfaW5wdXQuY1xcbkBAIC02NDkwLDYgKzY0OTAsNyBAQCBzdGF0aWMgYm9vbCB0Y3BfdmFsaWRhdGVfaW5jb21pbmcoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAgKlxcdCAgb3IgcHVyZSByZWNlaXZlcnMgKHRoaXMgbWVhbnMgZWl0aGVyIHRoZSBzZXF1ZW5jZSBudW1iZXIgb3IgdGhlIGFja1xcbiAgKlxcdCAgdmFsdWUgbXVzdCBzdGF5IGNvbnN0YW50KVxcbiAgKlxcdC0gVW5leHBlY3RlZCBUQ1Agb3B0aW9uLlxcbisgKlxcdC0gQUNLIHNlcXVlbmNlIG51bWJlciBpcyBvdXRzaWRlIFtTTkQuVU5BLCBTTkQuTlhUXS5cXG4gICpcXG4gICpcXHRXaGVuIHRoZXNlIGNvbmRpdGlvbnMgYXJlIG5vdCBzYXRpc2ZpZWQgaXQgZHJvcHMgaW50byBhIHN0YW5kYXJkXFxuICAqXFx0cmVjZWl2ZSBwcm9jZWR1cmUgcGF0dGVybmVkIGFmdGVyIFJGQzc5MyB0byBoYW5kbGUgYWxsIGNhc2VzLlxcbkBAIC02NTM5LDcgKzY1NDAsNyBAQCB2b2lkIHRjcF9yY3ZfZXN0YWJsaXNoZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXG4gXFx0aWYgKCh0Y3BfZmxhZ193b3JkKHRoKSBcXHUwMDI2IFRDUF9IUF9CSVRTKSA9PSB0cC1cXHUwMDNlcHJlZF9mbGFncyBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgVENQX1NLQl9DQihza2IpLVxcdTAwM2VzZXEgPT0gdHAtXFx1MDAzZXJjdl9ueHQgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgICFhZnRlcihUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZWFja19zZXEsIHRwLVxcdTAwM2VzbmRfbnh0KSkge1xcbitcXHQgICAgYmV0d2VlbihUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZWFja19zZXEsIHRwLVxcdTAwM2VzbmRfdW5hLCB0cC1cXHUwMDNlc25kX254dCkpIHtcXG4gXFx0XFx0aW50IHRjcF9oZWFkZXJfbGVuID0gdHAtXFx1MDAzZXRjcF9oZWFkZXJfbGVuO1xcbiBcXHRcXHRzMzIgZGVsdGEgPSAwO1xcbiBcXHRcXHRpbnQgZmxhZyA9IDA7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3BfcmZjNTk2MV9yZWplY3Qtb2xkLWFjay5wa3QgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX3JmYzU5NjFfcmVqZWN0LW9sZC1hY2sucGt0XFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4zMmRkOWRlMWQzNjYyXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3BfcmZjNTk2MV9yZWplY3Qtb2xkLWFjay5wa3RcXG5AQCAtMCwwICsxLDI5IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbitgLi9kZWZhdWx0cy5zaFxcbitzeXNjdGwgLXEgbmV0LmlwdjQudGNwX2ludmFsaWRfcmF0ZWxpbWl0PTBcXG4rYFxcbitcXG4rLy8gVGVzdCByZWplY3Rpb24gb2YgZGF0YSBzZWdtZW50cyBjYXJyeWluZyBleGNlc3NpdmVseSBvbGQgQUNLc1xcbitcXG4rMCBzb2NrZXQoLi4uLCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApID0gM1xcbisrMCBzZXRzb2Nrb3B0KDMsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgWzFdLCA0KSA9IDBcXG4rKzAgYmluZCgzLCAuLi4sIC4uLikgPSAwXFxuKyswIGxpc3RlbigzLCAxMDI0KSA9IDBcXG4rXFxuKy8vIC0tLS0tLS0tLS0tLS0tLS0gSGFuZHNoYWtlIC0tLS0tLS0tLS0tLS0tLS0tLS0gLy9cXG4rKzAgXFx1MDAzYyBTIDA6MCgwKSB3aW4gNjU1MzVcXG4rKzAgXFx1MDAzZSBTLiAwOjAoMCkgYWNrIDEgXFx1MDAzYy4uLlxcdTAwM2VcXG4rKzAgXFx1MDAzYyAuIDE6MSgwKSBhY2sgMSB3aW4gNjU1MzVcXG4rKzAgYWNjZXB0KDMsIC4uLiwgLi4uKSA9IDRcXG4rXFxuKy8vIFBvcHVsYXRlIHJlY2VpdmUgbWVtb3J5IHNvIHRoZSBmb2xsb3dpbmcgc2VnbWVudCBjYW4gdXNlXFxuKy8vIGhlYWRlciBwcmVkaWN0aW9uLlxcbisrMCBcXHUwMDNjIFAuIDE6NTAxKDUwMCkgYWNrIDEgd2luIDY1NTM1XFxuKyswIFxcdTAwM2UgLiAxOjEoMCkgYWNrIDUwMVxcbitcXG4rLy8gU2VuZCBhbiBpbi1zZXF1ZW5jZSBkYXRhIHNlZ21lbnQgY2FycnlpbmcgYW4gZXhjZXNzaXZlbHkgb2xkIEFDSy5cXG4rKzAgXFx1MDAzYyBQLiA1MDE6MTUwMSgxMDAwKSBhY2sgMjc5NDk2NzM5NyB3aW4gNjU1MzVcXG4rXFxuKy8vIENoYWxsZW5nZSBBQ0s7IFJDVi5OWFQgbXVzdCByZW1haW4gNTAxLlxcbisrMCBcXHUwMDNlIC4gMToxKDApIGFjayA1MDFcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6MTI6NTEuNjQxNjI0MjUzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo5NjE1MzcyMDIxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX3Jjdl9lc3RhYmxpc2hlZFwiLFxuICAgIFwidGNwX3ZhbGlkYXRlX2luY29taW5nXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWx0ZXJzIHRoZSBmYXN0LXBhdGggaGVhZGVyIHByZWRpY3Rpb24gY29uZGl0aW9uIGluIHRjcF9yY3ZfZXN0YWJsaXNoZWQoKSB0byByZXF1aXJlIHRoZSBBQ0sgc2VxdWVuY2UgbnVtYmVyIHRvIGZhbGwgYmV0d2VlbiBTTkQuVU5BIGFuZCBTTkQuTlhULiBTZWdtZW50cyB3aXRoIG9sZCBBQ0tzIGFyZSBub3cgcmVkaXJlY3RlZCB0byB0aGUgc2xvdyBwYXRoICh0Y3BfdmFsaWRhdGVfaW5jb21pbmcoKSkgdG8gcHJldmVudCBSRkMgNTk2MSBibGluZCBkYXRhIGluamVjdGlvbi4gVGhpcyBhbHRlcnMgY29yZSBUQ1AgcmVjZWl2ZSBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBUQ1Agc29ja2V0IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjMxOTgzM2EwZjA1MzNkYjdmOGQ2OGEyMjYwMjBkZTI5MDdjNWU2YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDE0IDEwOjEyOjQ4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lucHV0LmMgYi9uZXQvaXB2NC90Y3BfaW5wdXQuY1xuaW5kZXggZGFmZjkzZDUxMzQyOC4uMDNkMzE3YTU4MTMyNCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9pbnB1dC5jXG4rKysgYi9uZXQvaXB2NC90Y3BfaW5wdXQuY1xuQEAgLTY0OTAsNiArNjQ5MCw3IEBAIHN0YXRpYyBib29sIHRjcF92YWxpZGF0ZV9pbmNvbWluZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gICpcdCAgb3IgcHVyZSByZWNlaXZlcnMgKHRoaXMgbWVhbnMgZWl0aGVyIHRoZSBzZXF1ZW5jZSBudW1iZXIgb3IgdGhlIGFja1xuICAqXHQgIHZhbHVlIG11c3Qgc3RheSBjb25zdGFudClcbiAgKlx0LSBVbmV4cGVjdGVkIFRDUCBvcHRpb24uXG4rICpcdC0gQUNLIHNlcXVlbmNlIG51bWJlciBpcyBvdXRzaWRlIFtTTkQuVU5BLCBTTkQuTlhUXS5cbiAgKlxuICAqXHRXaGVuIHRoZXNlIGNvbmRpdGlvbnMgYXJlIG5vdCBzYXRpc2ZpZWQgaXQgZHJvcHMgaW50byBhIHN0YW5kYXJkXG4gICpcdHJlY2VpdmUgcHJvY2VkdXJlIHBhdHRlcm5lZCBhZnRlciBSRkM3OTMgdG8gaGFuZGxlIGFsbCBjYXNlcy5cbkBAIC02NTM5LDcgKzY1NDAsNyBAQCB2b2lkIHRjcF9yY3ZfZXN0YWJsaXNoZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0aWYgKCh0Y3BfZmxhZ193b3JkKHRoKSBcdTAwMjYgVENQX0hQX0JJVFMpID09IHRwLVx1MDAzZXByZWRfZmxhZ3MgXHUwMDI2XHUwMDI2XG4gXHQgICAgVENQX1NLQl9DQihza2IpLVx1MDAzZXNlcSA9PSB0cC1cdTAwM2VyY3Zfbnh0IFx1MDAyNlx1MDAyNlxuLVx0ICAgICFhZnRlcihUQ1BfU0tCX0NCKHNrYiktXHUwMDNlYWNrX3NlcSwgdHAtXHUwMDNlc25kX254dCkpIHtcbitcdCAgICBiZXR3ZWVuKFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VhY2tfc2VxLCB0cC1cdTAwM2VzbmRfdW5hLCB0cC1cdTAwM2VzbmRfbnh0KSkge1xuIFx0XHRpbnQgdGNwX2hlYWRlcl9sZW4gPSB0cC1cdTAwM2V0Y3BfaGVhZGVyX2xlbjtcbiBcdFx0czMyIGRlbHRhID0gMDtcbiBcdFx0aW50IGZsYWcgPSAwO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3BfcmZjNTk2MV9yZWplY3Qtb2xkLWFjay5wa3QgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX3JmYzU5NjFfcmVqZWN0LW9sZC1hY2sucGt0XG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMzJkZDlkZTFkMzY2MlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3BhY2tldGRyaWxsL3RjcF9yZmM1OTYxX3JlamVjdC1vbGQtYWNrLnBrdFxuQEAgLTAsMCArMSwyOSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rYC4vZGVmYXVsdHMuc2hcbitzeXNjdGwgLXEgbmV0LmlwdjQudGNwX2ludmFsaWRfcmF0ZWxpbWl0PTBcbitgXG4rXG4rLy8gVGVzdCByZWplY3Rpb24gb2YgZGF0YSBzZWdtZW50cyBjYXJyeWluZyBleGNlc3NpdmVseSBvbGQgQUNLc1xuK1xuKzAgc29ja2V0KC4uLiwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQKSA9IDNcbisrMCBzZXRzb2Nrb3B0KDMsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgWzFdLCA0KSA9IDBcbisrMCBiaW5kKDMsIC4uLiwgLi4uKSA9IDBcbisrMCBsaXN0ZW4oMywgMTAyNCkgPSAwXG4rXG4rLy8gLS0tLS0tLS0tLS0tLS0tLSBIYW5kc2hha2UgLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuKyswIFx1MDAzYyBTIDA6MCgwKSB3aW4gNjU1MzVcbisrMCBcdTAwM2UgUy4gMDowKDApIGFjayAxIFx1MDAzYy4uLlx1MDAzZVxuKyswIFx1MDAzYyAuIDE6MSgwKSBhY2sgMSB3aW4gNjU1MzVcbisrMCBhY2NlcHQoMywgLi4uLCAuLi4pID0gNFxuK1xuKy8vIFBvcHVsYXRlIHJlY2VpdmUgbWVtb3J5IHNvIHRoZSBmb2xsb3dpbmcgc2VnbWVudCBjYW4gdXNlXG4rLy8gaGVhZGVyIHByZWRpY3Rpb24uXG4rKzAgXHUwMDNjIFAuIDE6NTAxKDUwMCkgYWNrIDEgd2luIDY1NTM1XG4rKzAgXHUwMDNlIC4gMToxKDApIGFjayA1MDFcbitcbisvLyBTZW5kIGFuIGluLXNlcXVlbmNlIGRhdGEgc2VnbWVudCBjYXJyeWluZyBhbiBleGNlc3NpdmVseSBvbGQgQUNLLlxuKyswIFx1MDAzYyBQLiA1MDE6MTUwMSgxMDAwKSBhY2sgMjc5NDk2NzM5NyB3aW4gNjU1MzVcbitcbisvLyBDaGFsbGVuZ2UgQUNLOyBSQ1YuTlhUIG11c3QgcmVtYWluIDUwMS5cbisrMCBcdTAwM2UgLiAxOjEoMCkgYWNrIDUwMVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6MTI6NTEuNjQxNjI2MTEzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTA4OTc2NDg2ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVENQIElucHV0IFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHdlIGhhdmUgYSBwYXRjaCB0aGF0J3Mgc3VidGx5IGFsdGVyaW5nIHRoZSBBQ0sgcHJvY2Vzc2luZyBsb2dpYyB3aXRoaW4gYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIGluIHRoZSBgbmV0L2lwdjRgIGRpcmVjdG9yeSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgdGNwX2lucHV0LmNgLiBMb29raW5nIGF0IHRoZSBkaWZmLCBpdCBsb29rcyBsaWtlIGEgY2hhbmdlIHRvIGhvdyBBQ0sgc2VxdWVuY2VzIGFyZSBldmFsdWF0ZWQgaXMgYmVpbmcgbWFkZS4gSXQncyB0aWdodGVuaW5nIHRoZSBjb25kaXRpb25zIGZvciB3aGVuIGFuIEFDSyBpcyBhY2NlcHRlZCwgdXNpbmcgYGJldHdlZW5gIGluc3RlYWQgb2YgYSBwb3RlbnRpYWxseSBsZXNzIHByZWNpc2UgYCFhZnRlcmAgY2hlY2suIFRoZSBjb2RlIHNuaXBwZXQgSSBzZWUgc2hvd3MgdGhhdCB0aGUgY2hlY2sgYCFhZnRlcihUQ1BfU0tCX0NCKHNrYiktXHUwMDNlYWNrX3NlcSwgdHAtXHUwMDNlc25kX254dClgIGlzIGJlaW5nIHJlcGxhY2VkIHdpdGggYGJldHdlZW4oVENQX1NLQl9DQihza2IpLVx1MDAzZWFja19zZXEsIHRwLVx1MDAzZXNuZF91bmEsIHRwLVx1MDAzZXNuZF9ueHQpYC4gSXQgbG9va3MgbGlrZSBpdCBpcyByZWxhdGVkIHRvIGhhbmRsaW5nIG9mIG9sZCBhY2tub3dsZWRnZW1lbnRzLlxuXG5JdCdzIGltbWVkaWF0ZWx5IGNsZWFyIHRoaXMgcmVsYXRlcyB0byBhbiBpc3N1ZSB0aGF0IHByb2JhYmx5IGludm9sdmVzIHJlb3JkZXJpbmcgb3IgZGVsYXllZCBBQ0tzLCBvciBtYXliZSBldmVuIHByb3RlY3Rpb24gYWdhaW5zdCBBQ0sgYXR0YWNrcy4gQW5kIHRoZSBpbmNsdXNpb24gb2YgYSBwYWNrZXRkcmlsbCB0ZXN0LCBgdGNwX3JmYzU5NjFfcmVqZWN0LW9sZC1hY2sucGt0YCwgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBzcGVjaWZpYyBzY2VuYXJpbyBkZWZpbmVkIGluIFJGQyA1OTYxIHJlbGF0ZWQgdG8gcmVqZWN0aW5nIG9sZCBBQ0tzLiBJJ20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIG9sZCBiZWhhdmlvciB3YXMgdG8gc2VlIHdoYXQgdGhlIHZ1bG5lcmFiaWxpdHkgY291bGQgaGF2ZSBiZWVuLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBmdW5jdGlvbiBtb3JlIGRlZXBseSB0byBncmFzcCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMuIEkgd2lsbCB1c2UgdGhlIGByZWFkLWZpbGVgIGNvbW1hbmQgdG8gbG9hZCB0aGUgY29kZS4gSSBhbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIGBhY2tfc2VxYCBpbnRlcmFjdHMgd2l0aCBgc25kX3VuYWAgYW5kIGBzbmRfbnh0YCBpbiBub3JtYWwgb3BlcmF0aW9uLiBJJ20gYWxzbyBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0IG9mIHRoaXMgY2hhbmdlLCBhbmQgd2hhdCBsZWQgdG8gdGhpcyBwYXJ0aWN1bGFyIGxpbmUgYmVpbmcgdXBkYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU5OCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjEzOjAyLjUzOTI4MTI1NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMDgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3BfaW5wdXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NTMwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2NTMwOlxcdFxcdHRwLVxcdTAwM2VyeF9vcHQuYWNjZWNuID0gMDtcXG42NTMxOlxcdFxcbjY1MzI6XFx0XFx0LypcXHRwcmVkX2ZsYWdzIGlzIDB4Uz8xMCBcXHUwMDNjXFx1MDAzYyAxNiArIHNuZF93bmRcXG42NTMzOlxcdFxcdCAqXFx0aWYgaGVhZGVyX3ByZWRpY3Rpb24gaXMgdG8gYmUgbWFkZVxcbjY1MzQ6XFx0XFx0ICpcXHQnUycgd2lsbCBhbHdheXMgYmUgdHAtXFx1MDAzZXRjcF9oZWFkZXJfbGVuIFxcdTAwM2VcXHUwMDNlIDJcXG42NTM1OlxcdFxcdCAqXFx0Jz8nIHdpbGwgYmUgMCBmb3IgdGhlIGZhc3QgcGF0aCwgb3RoZXJ3aXNlIHByZWRfZmxhZ3MgaXMgMCB0b1xcbjY1MzY6XFx0XFx0ICogIHR1cm4gaXQgb2ZmXFx0KHdoZW4gdGhlcmUgYXJlIGhvbGVzIGluIHRoZSByZWNlaXZlXFxuNjUzNzpcXHRcXHQgKlxcdCBzcGFjZSBmb3IgaW5zdGFuY2UpXFxuNjUzODpcXHRcXHQgKlxcdFBTSCBmbGFnIGlzIGlnbm9yZWQuXFxuNjUzOTpcXHRcXHQgKi9cXG42NTQwOlxcdFxcbjY1NDE6XFx0XFx0aWYgKCh0Y3BfZmxhZ193b3JkKHRoKSBcXHUwMDI2IFRDUF9IUF9CSVRTKSA9PSB0cC1cXHUwMDNlcHJlZF9mbGFncyBcXHUwMDI2XFx1MDAyNlxcbjY1NDI6XFx0XFx0ICAgIFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNlc2VxID09IHRwLVxcdTAwM2VyY3Zfbnh0IFxcdTAwMjZcXHUwMDI2XFxuNjU0MzpcXHRcXHQgICAgYmV0d2VlbihUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZWFja19zZXEsIHRwLVxcdTAwM2VzbmRfdW5hLCB0cC1cXHUwMDNlc25kX254dCkpIHtcXG42NTQ0OlxcdFxcdFxcdGludCB0Y3BfaGVhZGVyX2xlbiA9IHRwLVxcdTAwM2V0Y3BfaGVhZGVyX2xlbjtcXG42NTQ1OlxcdFxcdFxcdHMzMiBkZWx0YSA9IDA7XFxuNjU0NjpcXHRcXHRcXHRpbnQgZmxhZyA9IDA7XFxuNjU0NzpcXHRcXG42NTQ4OlxcdFxcdFxcdC8qIFRpbWVzdGFtcCBoZWFkZXIgcHJlZGljdGlvbjogdGNwX2hlYWRlcl9sZW5cXG42NTQ5OlxcdFxcdFxcdCAqIGlzIGF1dG9tYXRpY2FsbHkgZXF1YWwgdG8gdGgtXFx1MDAzZWRvZmYqNCBkdWUgdG8gcHJlZF9mbGFnc1xcbjY1NTA6XFx0XFx0XFx0ICogbWF0Y2guXFxuNjU1MTpcXHRcXHRcXHQgKi9cXG42NTUyOlxcdFxcbjY1NTM6XFx0XFx0XFx0LyogQ2hlY2sgdGltZXN0YW1wICovXFxuNjU1NDpcXHRcXHRcXHRpZiAodGNwX2hlYWRlcl9sZW4gPT0gc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpICsgVENQT0xFTl9UU1RBTVBfQUxJR05FRCkge1xcbjY1NTU6XFx0XFx0XFx0XFx0LyogTm8/IFNsb3cgcGF0aCEgKi9cXG42NTU2OlxcdFxcdFxcdFxcdGlmICghdGNwX3BhcnNlX2FsaWduZWRfdGltZXN0YW1wKHRwLCB0aCkpXFxuNjU1NzpcXHRcXHRcXHRcXHRcXHRnb3RvIHNsb3dfcGF0aDtcXG42NTU4OlxcdFxcbjY1NTk6XFx0XFx0XFx0XFx0ZGVsdGEgPSB0cC1cXHUwMDNlcnhfb3B0LnJjdl90c3ZhbCAtXFxuNjU2MDpcXHRcXHRcXHRcXHRcXHR0cC1cXHUwMDNlcnhfb3B0LnRzX3JlY2VudDtcXG42NTYxOlxcdFxcdFxcdFxcdC8qIElmIFBBV1MgZmFpbGVkLCBjaGVjayBpdCBtb3JlIGNhcmVmdWxseSBpbiBzbG93IHBhdGggKi9cXG42NTYyOlxcdFxcdFxcdFxcdGlmIChkZWx0YSBcXHUwMDNjIDApXFxuNjU2MzpcXHRcXHRcXHRcXHRcXHRnb3RvIHNsb3dfcGF0aDtcXG42NTY0OlxcdFxcbjY1NjU6XFx0XFx0XFx0XFx0LyogRE8gTk9UIHVwZGF0ZSB0c19yZWNlbnQgaGVyZSwgaWYgY2hlY2tzdW0gZmFpbHNcXG42NTY2OlxcdFxcdFxcdFxcdCAqIGFuZCB0aW1lc3RhbXAgd2FzIGNvcnJ1cHRlZCBwYXJ0LCBpdCB3aWxsIHJlc3VsdFxcbjY1Njc6XFx0XFx0XFx0XFx0ICogaW4gYSBodW5nIGNvbm5lY3Rpb24gc2luY2Ugd2Ugd2lsbCBkcm9wIGFsbFxcbjY1Njg6XFx0XFx0XFx0XFx0ICogZnV0dXJlIHBhY2tldHMgZHVlIHRvIHRoZSBQQVdTIHRlc3QuXFxuNjU2OTpcXHRcXHRcXHRcXHQgKi9cXG42NTcwOlxcdFxcdFxcdH1cXG42NTcxOlxcdFxcbjY1NzI6XFx0XFx0XFx0aWYgKGxlbiBcXHUwMDNjPSB0Y3BfaGVhZGVyX2xlbikge1xcbjY1NzM6XFx0XFx0XFx0XFx0LyogQnVsayBkYXRhIHRyYW5zZmVyOiBzZW5kZXIgKi9cXG42NTc0OlxcdFxcdFxcdFxcdGlmIChsZW4gPT0gdGNwX2hlYWRlcl9sZW4pIHtcXG42NTc1OlxcdFxcdFxcdFxcdFxcdC8qIFByZWRpY3RlZCBwYWNrZXQgaXMgaW4gd2luZG93IGJ5IGRlZmluaXRpb24uXFxuNjU3NjpcXHRcXHRcXHRcXHRcXHQgKiBzZXEgPT0gcmN2X254dCBhbmQgcmN2X3d1cCBcXHUwMDNjPSByY3Zfbnh0LlxcbjY1Nzc6XFx0XFx0XFx0XFx0XFx0ICogSGVuY2UsIGNoZWNrIHNlcVxcdTAwM2M9cmN2X3d1cCByZWR1Y2VzIHRvOlxcbjY1Nzg6XFx0XFx0XFx0XFx0XFx0ICovXFxuNjU3OTpcXHRcXHRcXHRcXHRcXHRpZiAodGNwX2hlYWRlcl9sZW4gPT1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6MTM6MDIuNTM5Njk0MDE0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTIyNzUzNjc4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBUQ1AgSGVhZGVyIFByZWRpY3Rpb24gQ2hhbmdlIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBjaGFuZ2UgaW4gYHRjcF9yY3ZfZXN0YWJsaXNoZWRgLiBJdCBzZWVtcyB0aGV5J3ZlIHRpZ2h0ZW5lZCB1cCB0aGUgaGVhZGVyIHByZWRpY3Rpb24gbG9naWMsIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyB0aGUgYGFja19zZXFgLiBQcmV2aW91c2x5LCBpZiBgYWNrX3NlcWAgd2FzICpiZWZvcmUqIGB0cC1cdTAwM2VzbmRfdW5hYCwgaXQgY291bGQgc3RpbGwgdGFrZSB0aGUgZmFzdCBwYXRoLiBOb3csIGl0J3MgZXhwbGljaXRseSBleGNsdWRlZCBmcm9tIHRoZSBmYXN0IHBhdGgsIGZvcmNpbmcgaXQgZG93biB0aGUgc2xvdyBwYXRoIGlmIGBhY2tfc2VxYCBpcyBvdXRzaWRlIGBbU05ELlVOQSwgU05ELk5YVF1gLiBUaGUgY29tbWVudCBtZW50aW9ucyBSRkMgNTk2MSBhbmQgXCJibGluZCBkYXRhIGluamVjdGlvbiBvciBvbGQgQUNLc1wiLiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZSDigJMgd2UncmUgdGFsa2luZyBhYm91dCBwb3RlbnRpYWxseSBoYW5kbGluZyBvdXQtb2Ytb3JkZXIgb3IgbWFsaWNpb3VzIEFDS3MuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogSXMgdGhpcyByZWFjaGFibGUgY29kZT8gT2YgY291cnNlISBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAgaXMgdGhlIGhlYXJ0IG9mIFRDUCBwYWNrZXQgcHJvY2Vzc2luZyBmb3IgZXN0YWJsaXNoZWQgY29ubmVjdGlvbnMuIFRoaXMgaXMgc3RhbmRhcmQgc3R1ZmYsIHNvIHRoYXQncyBhIGRlZmluaXRlIFwieWVzLlwiXG5cbk5leHQsIGxldCdzIHNlZSBpZiBpdCdzIGZ1enphYmxlLiBUaGUgXCJXb3J0aEZ1enppbmdcIiBndWlkZWxpbmVzIGFyZSBteSBndWlkZSBoZXJlLiBSZWFjaGFiaWxpdHkgaXMgdGhlIHByaW1hcnkgZ2F0ZSwgYW5kIHRoaXMgY29kZSBkZWZpbml0ZWx5IGV4ZWN1dGVzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlbiwgY29yZSBzdWJzeXN0ZW1zIGxpa2UgbmV0d29ya2luZyBhcmUgcHJpbWUgdGFyZ2V0cywgc28gdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuXG5cbkFscmlnaHQsIHdoYXQgZnVuY3Rpb25zIHNob3VsZCBJIGZvY3VzIG9uPyBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAgaXMgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgdGhpcyBzaG91bGQgYmUgbXkgbWFpbiBlbnRyeXBvaW50LiBCdXQgYW0gSSB2aW9sYXRpbmcgdGhlIFwiQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTXCIgcnVsZT8gSSBuZWVkIHRvIGJlIGNhcmVmdWwgbm90IHRvIGRpbHV0ZSB0aGUgZnV6emluZyBlZmZvcnQuIElzIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBhIGdlbmVyaWMgZnVuY3Rpb24gY2FsbGVkIGJ5IGV2ZXJ5dGhpbmc/IE5vLCBpdCdzIHNwZWNpZmljIHRvIFRDUCBwYWNrZXQgcmVjZWl2ZS4gSXQncyBjYWxsZWQgd2hlbiBwYWNrZXRzIGFyZSByZWNlaXZlZCBvbiBlc3RhYmxpc2hlZCBUQ1Agc29ja2V0cywgc28gaXQncyBub3QgdWJpcXVpdG91cy4gQnV0IGRvZXMgaXQgY2FsbCBzbG93X3BhdGggb3IgdGNwX3ZhbGlkYXRlX2luY29taW5nPyBJZiBpdCBkb2VzLCB0aGVuIHRoZSB3b3JrIGlzIGV2ZW4gbW9yZSBmb2N1c2VkLiBJIG5lZWQgdG8gY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG5ldC9pcHY0L3RjcF9pbnB1dC5jYCBhcm91bmQgbGluZXMgNjU0MC02NjUwIHRvIGNvbmZpcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNjksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDoxMzowNy43NjcyMzI3MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MTg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3BfaW5wdXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NjQwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2NjQwOlxcdFxcbjY2NDE6XFx0XFx0XFx0XFx0aWYgKFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNlYWNrX3NlcSAhPSB0cC1cXHUwMDNlc25kX3VuYSkge1xcbjY2NDI6XFx0XFx0XFx0XFx0XFx0LyogV2VsbCwgb25seSBvbmUgc21hbGwganVtcGxldCBpbiBmYXN0IHBhdGguLi4gKi9cXG42NjQzOlxcdFxcdFxcdFxcdFxcdHRjcF9hY2soc2ssIHNrYiwgZmxhZyB8IEZMQUdfREFUQSk7XFxuNjY0NDpcXHRcXHRcXHRcXHRcXHR0Y3BfZGF0YV9zbmRfY2hlY2soc2spO1xcbjY2NDU6XFx0XFx0XFx0XFx0XFx0aWYgKCFpbmV0X2Nza19hY2tfc2NoZWR1bGVkKHNrKSlcXG42NjQ2OlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gbm9fYWNrO1xcbjY2NDc6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG42NjQ4OlxcdFxcdFxcdFxcdFxcdHRjcF91cGRhdGVfd2wodHAsIFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNlc2VxKTtcXG42NjQ5OlxcdFxcdFxcdFxcdH1cXG42NjUwOlxcdFxcbjY2NTE6XFx0XFx0XFx0XFx0X190Y3BfYWNrX3NuZF9jaGVjayhzaywgMCk7XFxuNjY1MjpcXHRub19hY2s6XFxuNjY1MzpcXHRcXHRcXHRcXHRpZiAoZWF0ZW4pXFxuNjY1NDpcXHRcXHRcXHRcXHRcXHRrZnJlZV9za2JfcGFydGlhbChza2IsIGZyYWdzdG9sZW4pO1xcbjY2NTU6XFx0XFx0XFx0XFx0dGNwX2RhdGFfcmVhZHkoc2spO1xcbjY2NTY6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbjY2NTc6XFx0XFx0XFx0fVxcbjY2NTg6XFx0XFx0fVxcbjY2NTk6XFx0XFxuNjY2MDpcXHRzbG93X3BhdGg6XFxuNjY2MTpcXHRcXHRpZiAobGVuIFxcdTAwM2MgKHRoLVxcdTAwM2Vkb2ZmIFxcdTAwM2NcXHUwMDNjIDIpIHx8IHRjcF9jaGVja3N1bV9jb21wbGV0ZShza2IpKVxcbjY2NjI6XFx0XFx0XFx0Z290byBjc3VtX2Vycm9yO1xcbjY2NjM6XFx0XFxuNjY2NDpcXHRcXHRpZiAoIXRoLVxcdTAwM2VhY2sgXFx1MDAyNlxcdTAwMjYgIXRoLVxcdTAwM2Vyc3QgXFx1MDAyNlxcdTAwMjYgIXRoLVxcdTAwM2VzeW4pIHtcXG42NjY1OlxcdFxcdFxcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9UQ1BfRkxBR1M7XFxuNjY2NjpcXHRcXHRcXHRnb3RvIGRpc2NhcmQ7XFxuNjY2NzpcXHRcXHR9XFxuNjY2ODpcXHRcXG42NjY5OlxcdFxcdC8qXFxuNjY3MDpcXHRcXHQgKlxcdFN0YW5kYXJkIHNsb3cgcGF0aC5cXG42NjcxOlxcdFxcdCAqL1xcbjY2NzI6XFx0dmFsaWRhdGU6XFxuNjY3MzpcXHRcXHRpZiAoIXRjcF92YWxpZGF0ZV9pbmNvbWluZyhzaywgc2tiLCB0aCwgMSkpXFxuNjY3NDpcXHRcXHRcXHRyZXR1cm47XFxuNjY3NTpcXHRcXG42Njc2OlxcdHN0ZXA1OlxcbjY2Nzc6XFx0XFx0dGNwX2Vjbl9yZWNlaXZlZF9jb3VudGVyc19wYXlsb2FkKHNrLCBza2IpO1xcbjY2Nzg6XFx0XFxuNjY3OTpcXHRcXHRyZWFzb24gPSB0Y3BfYWNrKHNrLCBza2IsIEZMQUdfU0xPV1BBVEggfCBGTEFHX1VQREFURV9UU19SRUNFTlQpO1xcbjY2ODA6XFx0XFx0aWYgKChpbnQpcmVhc29uIFxcdTAwM2MgMCkge1xcbjY2ODE6XFx0XFx0XFx0cmVhc29uID0gLXJlYXNvbjtcXG42NjgyOlxcdFxcdFxcdGdvdG8gZGlzY2FyZDtcXG42NjgzOlxcdFxcdH1cXG42Njg0OlxcdFxcdHRjcF9yY3ZfcnR0X21lYXN1cmVfdHMoc2ssIHNrYik7XFxuNjY4NTpcXHRcXG42Njg2OlxcdFxcdC8qIFByb2Nlc3MgdXJnZW50IGRhdGEuICovXFxuNjY4NzpcXHRcXHR0Y3BfdXJnKHNrLCBza2IsIHRoKTtcXG42Njg4OlxcdFxcbjY2ODk6XFx0XFx0Lyogc3RlcCA3OiBwcm9jZXNzIHRoZSBzZWdtZW50IHRleHQgKi9cXG42NjkwOlxcdFxcdHRjcF9kYXRhX3F1ZXVlKHNrLCBza2IpO1xcbjY2OTE6XFx0XFxuNjY5MjpcXHRcXHR0Y3BfZGF0YV9zbmRfY2hlY2soc2spO1xcbjY2OTM6XFx0XFx0dGNwX2Fja19zbmRfY2hlY2soc2spO1xcbjY2OTQ6XFx0XFx0cmV0dXJuO1xcbjY2OTU6XFx0XFxuNjY5NjpcXHRjc3VtX2Vycm9yOlxcbjY2OTc6XFx0XFx0cmVhc29uID0gU0tCX0RST1BfUkVBU09OX1RDUF9DU1VNO1xcbjY2OTg6XFx0XFx0dHJhY2VfdGNwX2JhZF9jc3VtKHNrYik7XFxuNjY5OTpcXHRcXHRUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgVENQX01JQl9DU1VNRVJST1JTKTtcXG42NzAwOlxcdFxcdFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBUQ1BfTUlCX0lORVJSUyk7XFxuNjcwMTpcXHRcXG42NzAyOlxcdGRpc2NhcmQ6XFxuNjcwMzpcXHRcXHR0Y3BfZHJvcF9yZWFzb24oc2ssIHNrYiwgcmVhc29uKTtcXG42NzA0OlxcdH1cXG42NzA1OlxcdFxcbjY3MDY6XFx0dm9pZCB0Y3BfaW5pdF90cmFuc2ZlcihzdHJ1Y3Qgc29jayAqc2ssIGludCBicGZfb3AsIHN0cnVjdCBza19idWZmICpza2IpXFxuNjcwNzpcXHR7XFxuNjcwODpcXHRcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxuNjcwOTpcXHRcXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcXG42NzEwOlxcdFxcbjY3MTE6XFx0XFx0dGNwX210dXBfaW5pdChzayk7XFxuNjcxMjpcXHRcXHRpY3NrLVxcdTAwM2VpY3NrX2FmX29wcy1cXHUwMDNlcmVidWlsZF9oZWFkZXIoc2spO1xcbjY3MTM6XFx0XFx0dGNwX2luaXRfbWV0cmljcyhzayk7XFxuNjcxNDpcXHRcXG42NzE1OlxcdFxcdC8qIEluaXRpYWxpemUgdGhlIGNvbmdlc3Rpb24gd2luZG93IHRvIHN0YXJ0IHRoZSB0cmFuc2Zlci5cXG42NzE2OlxcdFxcdCAqIEN1dCBjd25kIGRvd24gdG8gMSBwZXIgUkZDNTY4MSBpZiBTWU4gb3IgU1lOLUFDSyBoYXMgYmVlblxcbjY3MTc6XFx0XFx0ICogcmV0cmFuc21pdHRlZC4gSW4gbGlnaHQgb2YgUkZDNjI5OCBtb3JlIGFnZ3Jlc3NpdmUgMXNlY1xcbjY3MTg6XFx0XFx0ICogaW5pdFJUTywgd2Ugb25seSByZXNldCBjd25kIHdoZW4gbW9yZSB0aGFuIDEgU1lOL1NZTi1BQ0tcXG42NzE5OlxcdFxcdCAqIHJldHJhbnNtaXNzaW9uIGhhcyBvY2N1cnJlZC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6MTM6MDcuNzY3Njg3MjFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxOTkxNzAxMjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkFuYWx5emluZyB0aGUgVENQIFNlcXVlbmNlIFZlcmlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSB0cmFja2luZyB0aGlzIGBhY2tfc2VxYCB2YWx1ZSBhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byBgdHAtXHUwMDNlc25kX3VuYWAgd2l0aGluIHRoZSBUQ1Agc2VxdWVuY2UuIFdoZW4gYGFja19zZXFgIHByZWNlZGVzIGB0cC1cdTAwM2VzbmRfdW5hYCwgdGhlIGZsb3cgbm93IGltbWVkaWF0ZWx5IGJyYW5jaGVzIHRvIHRoZSBgc2xvd19wYXRoOmAgbGFiZWwsIGFuZCB0aGF0IHF1aWNrbHkgbGFuZHMgbWUgaW4gYHRjcF92YWxpZGF0ZV9pbmNvbWluZygpYC4gR2l2ZW4gdGhhdCBJIGhhdmUgYSBnb29kIGhhbmRsZSBvbiBob3cgdGhlIGNvZGUgYmFzZSB3b3JrcywgYW5kIGFtIHRyeWluZyB0byB1bmRlcnN0YW5kICp3aHkqIGEgcmVjZW50IGlzc3VlIGlzIGhhcHBlbmluZywgbXkgbmV4dCBzdG9wIGlzIGRlZmluaXRlbHkgZ29pbmcgdG8gYmUgc2NydXRpbml6aW5nIHRoZSBsb2dpYyB3aXRoaW4gYHRjcF92YWxpZGF0ZV9pbmNvbWluZygpYCwgbGlrZWx5IGFyb3VuZCBsaW5lIDY0OTAuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQncyBnb2luZyBvbiB0aGVyZSFcblxuXG4iLCJJbnB1dFRva2VucyI6NzY4MywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6MTM6MDkuNzU5MzkwNjM5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI3NTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcF9pbnB1dC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY0NTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjY0NTA6XFx0XFx0XFx0ICAgIFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNlc2VxICsgMSA9PSB0cC1cXHUwMDNlcmN2X254dCBcXHUwMDI2XFx1MDAyNlxcbjY0NTE6XFx0XFx0XFx0ICAgIFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNlYWNrX3NlcSA9PSB0cC1cXHUwMDNlc25kX254dClcXG42NDUyOlxcdFxcdFxcdFxcdGdvdG8gcGFzcztcXG42NDUzOlxcdHN5bl9jaGFsbGVuZ2U6XFxuNjQ1NDpcXHRcXHRcXHRpZiAoc3luX2luZXJyKVxcbjY0NTU6XFx0XFx0XFx0XFx0VENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIFRDUF9NSUJfSU5FUlJTKTtcXG42NDU2OlxcdFxcdFxcdE5FVF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfVENQU1lOQ0hBTExFTkdFKTtcXG42NDU3OlxcdFxcdFxcdHRjcF9zZW5kX2NoYWxsZW5nZV9hY2soc2ssIGFjY2Vjbl9yZWZsZWN0b3IpO1xcbjY0NTg6XFx0XFx0XFx0U0tCX0RSX1NFVChyZWFzb24sIFRDUF9JTlZBTElEX1NZTik7XFxuNjQ1OTpcXHRcXHRcXHRnb3RvIGRpc2NhcmQ7XFxuNjQ2MDpcXHRcXHR9XFxuNjQ2MTpcXHRcXG42NDYyOlxcdHBhc3M6XFxuNjQ2MzpcXHRcXHRicGZfc2tvcHNfcGFyc2VfaGRyKHNrLCBza2IpO1xcbjY0NjQ6XFx0XFxuNjQ2NTpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG42NDY2OlxcdFxcbjY0Njc6XFx0ZGlzY2FyZDpcXG42NDY4OlxcdFxcdHRjcF9kcm9wX3JlYXNvbihzaywgc2tiLCByZWFzb24pO1xcbjY0Njk6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjY0NzA6XFx0XFxuNjQ3MTpcXHRyZXNldDpcXG42NDcyOlxcdFxcdHRjcF9yZXNldChzaywgc2tiKTtcXG42NDczOlxcdFxcdF9fa2ZyZWVfc2tiKHNrYik7XFxuNjQ3NDpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuNjQ3NTpcXHR9XFxuNjQ3NjpcXHRcXG42NDc3OlxcdC8qXFxuNjQ3ODpcXHQgKlxcdFRDUCByZWNlaXZlIGZ1bmN0aW9uIGZvciB0aGUgRVNUQUJMSVNIRUQgc3RhdGUuXFxuNjQ3OTpcXHQgKlxcbjY0ODA6XFx0ICpcXHRJdCBpcyBzcGxpdCBpbnRvIGEgZmFzdCBwYXRoIGFuZCBhIHNsb3cgcGF0aC4gVGhlIGZhc3QgcGF0aCBpc1xcbjY0ODE6XFx0ICogXFx0ZGlzYWJsZWQgd2hlbjpcXG42NDgyOlxcdCAqXFx0LSBBIHplcm8gd2luZG93IHdhcyBhbm5vdW5jZWQgZnJvbSB1cyAtIHplcm8gd2luZG93IHByb2JpbmdcXG42NDgzOlxcdCAqICAgICAgICBpcyBvbmx5IGhhbmRsZWQgcHJvcGVybHkgaW4gdGhlIHNsb3cgcGF0aC5cXG42NDg0OlxcdCAqXFx0LSBPdXQgb2Ygb3JkZXIgc2VnbWVudHMgYXJyaXZlZC5cXG42NDg1OlxcdCAqXFx0LSBVcmdlbnQgZGF0YSBpcyBleHBlY3RlZC5cXG42NDg2OlxcdCAqXFx0LSBUaGVyZSBpcyBubyBidWZmZXIgc3BhY2UgbGVmdFxcbjY0ODc6XFx0ICpcXHQtIFVuZXhwZWN0ZWQgVENQIGZsYWdzL3dpbmRvdyB2YWx1ZXMvaGVhZGVyIGxlbmd0aHMgYXJlIHJlY2VpdmVkXFxuNjQ4ODpcXHQgKlxcdCAgKGRldGVjdGVkIGJ5IGNoZWNraW5nIHRoZSBUQ1AgaGVhZGVyIGFnYWluc3QgcHJlZF9mbGFncylcXG42NDg5OlxcdCAqXFx0LSBEYXRhIGlzIHNlbnQgaW4gYm90aCBkaXJlY3Rpb25zLiBGYXN0IHBhdGggb25seSBzdXBwb3J0cyBwdXJlIHNlbmRlcnNcXG42NDkwOlxcdCAqXFx0ICBvciBwdXJlIHJlY2VpdmVycyAodGhpcyBtZWFucyBlaXRoZXIgdGhlIHNlcXVlbmNlIG51bWJlciBvciB0aGUgYWNrXFxuNjQ5MTpcXHQgKlxcdCAgdmFsdWUgbXVzdCBzdGF5IGNvbnN0YW50KVxcbjY0OTI6XFx0ICpcXHQtIFVuZXhwZWN0ZWQgVENQIG9wdGlvbi5cXG42NDkzOlxcdCAqXFx0LSBBQ0sgc2VxdWVuY2UgbnVtYmVyIGlzIG91dHNpZGUgW1NORC5VTkEsIFNORC5OWFRdLlxcbjY0OTQ6XFx0ICpcXG42NDk1OlxcdCAqXFx0V2hlbiB0aGVzZSBjb25kaXRpb25zIGFyZSBub3Qgc2F0aXNmaWVkIGl0IGRyb3BzIGludG8gYSBzdGFuZGFyZFxcbjY0OTY6XFx0ICpcXHRyZWNlaXZlIHByb2NlZHVyZSBwYXR0ZXJuZWQgYWZ0ZXIgUkZDNzkzIHRvIGhhbmRsZSBhbGwgY2FzZXMuXFxuNjQ5NzpcXHQgKlxcdFRoZSBmaXJzdCB0aHJlZSBjYXNlcyBhcmUgZ3VhcmFudGVlZCBieSBwcm9wZXIgcHJlZF9mbGFncyBzZXR0aW5nLFxcbjY0OTg6XFx0ICpcXHR0aGUgcmVzdCBpcyBjaGVja2VkIGlubGluZS4gRmFzdCBwcm9jZXNzaW5nIGlzIHR1cm5lZCBvbiBpblxcbjY0OTk6XFx0ICpcXHR0Y3BfZGF0YV9xdWV1ZSB3aGVuIGV2ZXJ5dGhpbmcgaXMgT0suXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjEzOjA5Ljc1OTgyMDMyOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjg4NTA5OTg3NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIFRDUCBWYWxpZGF0aW9uIGZvciBSRkMgNTk2MSBDb21wYXRpYmlsaXR5KipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwncyBgdGNwX3ZhbGlkYXRlX2luY29taW5nYCBmdW5jdGlvbiBoYW5kbGVzIGluY29taW5nIFRDUCBzZWdtZW50cywgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIFJGQyA1OTYxLCBvciBob3cgaXQgdHJlYXRzIG9sZGVyIGFja25vd2xlZGdlbWVudHMuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgY29kZSB0byBmaWd1cmUgdGhpcyBvdXQuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIGluIHRoZSBgbmV0L2lwdjQvdGNwX2lucHV0LmNgIGZpbGUsIHdoZXJlIHRoZSBjb3JlIFRDUCBpbnB1dCBwcm9jZXNzaW5nIGxvZ2ljIHJlc2lkZXMuIEknbGwgZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGxpbmVzIDYzNzAgdGhyb3VnaCA2NDUwLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIGxvZ2ljIGJlaW5nIHVzZWQuIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuIFRoaXMgd2lsbCBiZSB0aGUga2V5IHBhcnQgb2YgdGhpcyBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc2NywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6MTM6MTguNjEwODIyNjhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzUwMDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcF9pbnB1dC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYzNzAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjYzNzA6XFx0XFx0XFx0XFx0aWYgKHRoLVxcdTAwM2VzeW4pXFxuNjM3MTpcXHRcXHRcXHRcXHRcXHRnb3RvIHN5bl9jaGFsbGVuZ2U7XFxuNjM3MjpcXHRcXG42MzczOlxcdFxcdFxcdFxcdGlmIChyZWFzb24gPT0gU0tCX0RST1BfUkVBU09OX1RDUF9JTlZBTElEX1NFUVVFTkNFIHx8XFxuNjM3NDpcXHRcXHRcXHRcXHQgICAgcmVhc29uID09IFNLQl9EUk9QX1JFQVNPTl9UQ1BfSU5WQUxJRF9FTkRfU0VRVUVOQ0UpXFxuNjM3NTpcXHRcXHRcXHRcXHRcXHRORVRfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSxcXG42Mzc2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIExJTlVYX01JQl9CRVlPTkRfV0lORE9XKTtcXG42Mzc3OlxcdFxcdFxcdFxcdGlmICghdGNwX29vd19yYXRlX2xpbWl0ZWQoc29ja19uZXQoc2spLCBza2IsXFxuNjM3ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIExJTlVYX01JQl9UQ1BBQ0tTS0lQUEVEU0VRLFxcbjYzNzk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2dHAtXFx1MDAzZWxhc3Rfb293X2Fja190aW1lKSlcXG42MzgwOlxcdFxcdFxcdFxcdFxcdHRjcF9zZW5kX2R1cGFjayhzaywgc2tiKTtcXG42MzgxOlxcdFxcdFxcdH0gZWxzZSBpZiAodGNwX3Jlc2V0X2NoZWNrKHNrLCBza2IpKSB7XFxuNjM4MjpcXHRcXHRcXHRcXHRnb3RvIHJlc2V0O1xcbjYzODM6XFx0XFx0XFx0fVxcbjYzODQ6XFx0XFx0XFx0Z290byBkaXNjYXJkO1xcbjYzODU6XFx0XFx0fVxcbjYzODY6XFx0XFxuNjM4NzpcXHRcXHQvKiBTdGVwIDI6IGNoZWNrIFJTVCBiaXQgKi9cXG42Mzg4OlxcdFxcdGlmICh0aC1cXHUwMDNlcnN0KSB7XFxuNjM4OTpcXHRcXHRcXHQvKiBSRkMgNTk2MSAzLjIgKGV4dGVuZCB0byBtYXRjaCBhZ2FpbnN0IChSQ1YuTlhUIC0gMSkgYWZ0ZXIgYVxcbjYzOTA6XFx0XFx0XFx0ICogRklOIGFuZCBTQUNLIHRvbyBpZiBhdmFpbGFibGUpOlxcbjYzOTE6XFx0XFx0XFx0ICogSWYgc2VxIG51bSBtYXRjaGVzIFJDVi5OWFQgb3IgKFJDVi5OWFQgLSAxKSBhZnRlciBhIEZJTiwgb3JcXG42MzkyOlxcdFxcdFxcdCAqIHRoZSByaWdodC1tb3N0IFNBQ0sgYmxvY2ssXFxuNjM5MzpcXHRcXHRcXHQgKiB0aGVuXFxuNjM5NDpcXHRcXHRcXHQgKiAgICAgUkVTRVQgdGhlIGNvbm5lY3Rpb25cXG42Mzk1OlxcdFxcdFxcdCAqIGVsc2VcXG42Mzk2OlxcdFxcdFxcdCAqICAgICBTZW5kIGEgY2hhbGxlbmdlIEFDS1xcbjYzOTc6XFx0XFx0XFx0ICovXFxuNjM5ODpcXHRcXHRcXHRpZiAoVENQX1NLQl9DQihza2IpLVxcdTAwM2VzZXEgPT0gdHAtXFx1MDAzZXJjdl9ueHQgfHxcXG42Mzk5OlxcdFxcdFxcdCAgICB0Y3BfcmVzZXRfY2hlY2soc2ssIHNrYikpXFxuNjQwMDpcXHRcXHRcXHRcXHRnb3RvIHJlc2V0O1xcbjY0MDE6XFx0XFxuNjQwMjpcXHRcXHRcXHRpZiAodGNwX2lzX3NhY2sodHApIFxcdTAwMjZcXHUwMDI2IHRwLVxcdTAwM2VyeF9vcHQubnVtX3NhY2tzIFxcdTAwM2UgMCkge1xcbjY0MDM6XFx0XFx0XFx0XFx0c3RydWN0IHRjcF9zYWNrX2Jsb2NrICpzcCA9IFxcdTAwMjZ0cC1cXHUwMDNlc2VsZWN0aXZlX2Fja3NbMF07XFxuNjQwNDpcXHRcXHRcXHRcXHRpbnQgbWF4X3NhY2sgPSBzcFswXS5lbmRfc2VxO1xcbjY0MDU6XFx0XFx0XFx0XFx0aW50IHRoaXNfc2FjaztcXG42NDA2OlxcdFxcbjY0MDc6XFx0XFx0XFx0XFx0Zm9yICh0aGlzX3NhY2sgPSAxOyB0aGlzX3NhY2sgXFx1MDAzYyB0cC1cXHUwMDNlcnhfb3B0Lm51bV9zYWNrcztcXG42NDA4OlxcdFxcdFxcdFxcdCAgICAgKyt0aGlzX3NhY2spIHtcXG42NDA5OlxcdFxcdFxcdFxcdFxcdG1heF9zYWNrID0gYWZ0ZXIoc3BbdGhpc19zYWNrXS5lbmRfc2VxLFxcbjY0MTA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IG1heF9zYWNrKSA/XFxuNjQxMTpcXHRcXHRcXHRcXHRcXHRcXHRzcFt0aGlzX3NhY2tdLmVuZF9zZXEgOiBtYXhfc2FjaztcXG42NDEyOlxcdFxcdFxcdFxcdH1cXG42NDEzOlxcdFxcbjY0MTQ6XFx0XFx0XFx0XFx0aWYgKFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNlc2VxID09IG1heF9zYWNrKVxcbjY0MTU6XFx0XFx0XFx0XFx0XFx0Z290byByZXNldDtcXG42NDE2OlxcdFxcdFxcdH1cXG42NDE3OlxcdFxcbjY0MTg6XFx0XFx0XFx0LyogRGlzYWJsZSBURk8gaWYgUlNUIGlzIG91dC1vZi1vcmRlclxcbjY0MTk6XFx0XFx0XFx0ICogYW5kIG5vIGRhdGEgaGFzIGJlZW4gcmVjZWl2ZWRcXG42NDIwOlxcdFxcdFxcdCAqIGZvciBjdXJyZW50IGFjdGl2ZSBURk8gc29ja2V0XFxuNjQyMTpcXHRcXHRcXHQgKi9cXG42NDIyOlxcdFxcdFxcdGlmICh0cC1cXHUwMDNlc3luX2Zhc3RvcGVuIFxcdTAwMjZcXHUwMDI2ICF0cC1cXHUwMDNlZGF0YV9zZWdzX2luIFxcdTAwMjZcXHUwMDI2XFxuNjQyMzpcXHRcXHRcXHQgICAgc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9FU1RBQkxJU0hFRClcXG42NDI0OlxcdFxcdFxcdFxcdHRjcF9mYXN0b3Blbl9hY3RpdmVfZGlzYWJsZShzayk7XFxuNjQyNTpcXHRcXHRcXHR0Y3Bfc2VuZF9jaGFsbGVuZ2VfYWNrKHNrLCBmYWxzZSk7XFxuNjQyNjpcXHRcXHRcXHRTS0JfRFJfU0VUKHJlYXNvbiwgVENQX1JFU0VUKTtcXG42NDI3OlxcdFxcdFxcdGdvdG8gZGlzY2FyZDtcXG42NDI4OlxcdFxcdH1cXG42NDI5OlxcdFxcbjY0MzA6XFx0XFx0Lyogc3RlcCAzOiBjaGVjayBzZWN1cml0eSBhbmQgcHJlY2VkZW5jZSBbaWdub3JlZF0gKi9cXG42NDMxOlxcdFxcbjY0MzI6XFx0XFx0Lyogc3RlcCA0OiBDaGVjayBmb3IgYSBTWU5cXG42NDMzOlxcdFxcdCAqIFJGQyA1OTYxIDQuMiA6IFNlbmQgYSBjaGFsbGVuZ2UgYWNrXFxuNjQzNDpcXHRcXHQgKi9cXG42NDM1OlxcdFxcdGlmICh0aC1cXHUwMDNlc3luKSB7XFxuNjQzNjpcXHRcXHRcXHRpZiAodGNwX2Vjbl9tb2RlX2FjY2Vjbih0cCkpIHtcXG42NDM3OlxcdFxcdFxcdFxcdGFjY2Vjbl9yZWZsZWN0b3IgPSB0cnVlO1xcbjY0Mzg6XFx0XFx0XFx0XFx0dHAtXFx1MDAzZXN5bl9lY3RfcmN2ID0gVENQX1NLQl9DQihza2IpLVxcdTAwM2VpcF9kc2ZpZWxkIFxcdTAwMjZcXG42NDM5OlxcdFxcdFxcdFxcdFxcdFxcdCAgSU5FVF9FQ05fTUFTSztcXG42NDQwOlxcdFxcdFxcdFxcdGlmICh0cC1cXHUwMDNlcnhfb3B0LmFjY2VjbiBcXHUwMDI2XFx1MDAyNlxcbjY0NDE6XFx0XFx0XFx0XFx0ICAgIHRwLVxcdTAwM2VzYXdfYWNjZWNuX29wdCBcXHUwMDNjIFRDUF9BQ0NFQ05fT1BUX0NPVU5URVJfU0VFTikge1xcbjY0NDI6XFx0XFx0XFx0XFx0XFx0dTggc2F3X29wdCA9IHRjcF9hY2NlY25fb3B0aW9uX2luaXQoc2tiLCB0cC1cXHUwMDNlcnhfb3B0LmFjY2Vjbik7XFxuNjQ0MzpcXHRcXG42NDQ0OlxcdFxcdFxcdFxcdFxcdHRjcF9hY2NlY25fc2F3X29wdF9mYWlsX3JlY3YodHAsIHNhd19vcHQpO1xcbjY0NDU6XFx0XFx0XFx0XFx0XFx0dGNwX2FjY2Vjbl9vcHRfZGVtYW5kX21pbihzaywgMSk7XFxuNjQ0NjpcXHRcXHRcXHRcXHR9XFxuNjQ0NzpcXHRcXHRcXHR9XFxuNjQ0ODpcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9TWU5fUkVDViBcXHUwMDI2XFx1MDAyNiBzay1cXHUwMDNlc2tfc29ja2V0IFxcdTAwMjZcXHUwMDI2IHRoLVxcdTAwM2VhY2sgXFx1MDAyNlxcdTAwMjZcXG42NDQ5OlxcdFxcdFxcdCAgICBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZXNlcSArIDEgPT0gVENQX1NLQl9DQihza2IpLVxcdTAwM2VlbmRfc2VxIFxcdTAwMjZcXHUwMDI2XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjEzOjE4LjYxMTE3N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2ODAzNTk2MzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk5hdmlnYXRpbmcgVENQIEFja25vd2xlZGdlbWVudCBWYWxpZGF0aW9uKipcblxuT2theSwgc28gSSdtIG9uIHN0ZXAgZml2ZSwgd2hpY2ggc2F5cyB0byBjaGVjayB0aGUgQUNLIGZpZWxkIGluIGB0Y3BfdmFsaWRhdGVfaW5jb21pbmdgLiBCdXQsIGhvbGQgb24gYSBzZWNvbmQuLi4gd2hlcmUgKmlzKiB0aGF0IGNoZWNrIGFjdHVhbGx5IGhhcHBlbmluZz8gSSBkb24ndCBzZWUgaXQgZXhwbGljaXRseS4gVGhpcyBpcyB3aGVyZSBJIGhhdmUgdG8gc3RhcnQgZGlnZ2luZy5cblxuTXkgZmlyc3QgdGhvdWdodCBpcyB0byB1c2UgYGdyZXBgIHRvIHNlYXJjaCBmb3IgYHJmYzU5NjFgIHdpdGhpbiB0aGUgY29kZS4gVGhhdCBSRkMgaXMgcHJvYmFibHkgcmVsZXZhbnQgaGVyZS4gQWx0ZXJuYXRpdmVseSwgSSBzaG91bGQgbG9vayBhdCB0aGUgYHRjcF9hY2tgIGZ1bmN0aW9uIGl0c2VsZiDigJMgdGhhdCdzIHRoZSBtb3N0IGxpa2VseSBwbGFjZS4gSXQncyBhbHNvIHdvcnRoIG15IHRpbWUgdG8gZ28gYmFjayB0byB0aGUgY29kZSBkaXJlY3RseSBhYm92ZSB0aGUgc3BlY2lmaWMgY2FsbCB0byBgdGNwX3ZhbGlkYXRlX2luY29taW5nYCBvciBhbnkgcmVsYXRlZCBjb2RlIHdpdGhpbiB0aGUgZnVuY3Rpb24uIEkgY291bGQgZXZlbiBjaGVjayBgdGNwX2Fja2AgZm9yIGFueSBjbHVlcyBJIG1pZ2h0IGhhdmUgbWlzc2VkLiBHb3R0YSBiZSBtZXRob2RpY2FsIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzk2LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDoxMzoyNS40MTQ3NzU4OTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MDk4MjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJmYzU5NjF8UkZDIDU5NjFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvdGNwX2lucHV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwX2lucHV0LmM9NDAzMT1zdGF0aWMgdm9pZCB0Y3Bfc2VuZF9hY2tfcmVmbGVjdF9lY3Qoc3RydWN0IHNvY2sgKnNrLCBib29sIGFjY2Vjbl9yZWZsZWN0b3IpXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00MDQwLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjQwNDE6LyogQ29uc3VtZSBvbmUgc2xvdCBmcm9tIHRoZSBwZXItbmV0bnMgUkZDIDU5NjEgY2hhbGxlbmdlIEFDSyBxdW90YS5cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00MDQyLSAqIFJldHVybnMgdHJ1ZSBpZiBhIGNoYWxsZW5nZSBBQ0sgbWF5IGJlIHNlbnQuXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz00MDQ0PXN0YXRpYyBib29sIHRjcF9jaGFsbGVuZ2VfYWNrX2FsbG93ZWQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDA2Ny1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo0MDY4Oi8qIFJGQyA1OTYxIDcgW0FDSyBUaHJvdHRsaW5nXSAqL1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQwNjktc3RhdGljIHZvaWQgdGNwX3NlbmRfY2hhbGxlbmdlX2FjayhzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgYWNjZWNuX3JlZmxlY3RvcilcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQwNzktXFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NDA4MDpcXHQvKiBUaGVuIGNoZWNrIHRoZSBwZXItbmV0bnMgUkZDIDU5NjEgcmF0ZSBsaW1pdC4gKi9cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00MDgxLVxcdGlmICh0Y3BfY2hhbGxlbmdlX2Fja19hbGxvd2VkKG5ldCkpIHtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTQyNzY9c3RhdGljIGludCB0Y3BfYWNrKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGZsYWcpXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy00MzA5LVxcdFxcdG1heF93aW5kb3cgPSBtaW5fdCh1NjQsIHRwLVxcdTAwM2VtYXhfd2luZG93LCB0cC1cXHUwMDNlYnl0ZXNfYWNrZWQpO1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjQzMTA6XFx0XFx0LyogUkZDIDU5NjEgNS4yIFtCbGluZCBEYXRhIEluamVjdGlvbiBBdHRhY2tdLltNaXRpZ2F0aW9uXSAqL1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQzMTEtXFx0XFx0aWYgKGJlZm9yZShhY2ssIHByaW9yX3NuZF91bmEgLSBtYXhfd2luZG93KSkge1xcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNDMxOS1cXHQvKiBJZiB0aGUgYWNrIGluY2x1ZGVzIGRhdGEgd2UgaGF2ZW4ndCBzZW50IHlldCwgZHJvcCB0aGVcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo0MzIwOlxcdCAqIHNlZ21lbnQuICBSRkMgNzkzIFNlY3Rpb24gMy45IGFuZCBSRkMgNTk2MSBTZWN0aW9uIDUuMlxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQzMjEtXFx0ICogcmVxdWlyZSB1cyB0byBzZW5kIGFuIEFDSyBiYWNrIGluIHRoYXQgY2FzZS5cXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTYyNzc9c3RhdGljIHZvaWQgdGNwX3VyZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjMwNC0gKiBGSU4gaXMgc2VudCBmb2xsb3dlZCBieSBhIFJTVCBwYWNrZXQuIFRoZSBSU1QgaXMgc2VudCB3aXRoIHRoZSBzYW1lXFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NjMwNTogKiBzZXF1ZW5jZSBudW1iZXIgYXMgdGhlIEZJTiwgYW5kIHRodXMgYWNjb3JkaW5nIHRvIFJGQyA1OTYxIGEgY2hhbGxlbmdlXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjMwNi0gKiBBQ0sgc2hvdWxkIGJlIHNlbnQuIEhvd2V2ZXIsIE1hYyBPU1ggcmF0ZSBsaW1pdHMgcmVwbGllcyB0byBjaGFsbGVuZ2VcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTYzMjI9c3RhdGljIGJvb2wgdGNwX3ZhbGlkYXRlX2luY29taW5nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTYzODgtXFx0aWYgKHRoLVxcdTAwM2Vyc3QpIHtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo2Mzg5OlxcdFxcdC8qIFJGQyA1OTYxIDMuMiAoZXh0ZW5kIHRvIG1hdGNoIGFnYWluc3QgKFJDVi5OWFQgLSAxKSBhZnRlciBhXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjM5MC1cXHRcXHQgKiBGSU4gYW5kIFNBQ0sgdG9vIGlmIGF2YWlsYWJsZSk6XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy02NDMyLVxcdC8qIHN0ZXAgNDogQ2hlY2sgZm9yIGEgU1lOXFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NjQzMzpcXHQgKiBSRkMgNTk2MSA0LjIgOiBTZW5kIGEgY2hhbGxlbmdlIGFja1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTY0MzQtXFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjEzOjI1LjQ2ODg3ODcwNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1MTgyNjQ5ODIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGNvZGUgc25pcHBldCwgdGhpbmtpbmcgb3V0IGxvdWQgYXMgSSBwcm9jZXNzIGl0OlxuXG4qKkRlZXAgRGl2ZSBpbnRvIGB0Y3BfYWNrYCBhbmQgdGhlIFJGQyA1OTYxIE1pdGlnYXRpb24qKlxuXG5Pa2F5LCBsZXQncyB6b29tIGluIG9uIGxpbmUgNDMxMCB3aXRoaW4gdGhlIGB0Y3BfYWNrYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSBibG9jayBhcm91bmQgbGluZSA0MzAwIHRvIGdpdmUgbWUgc29tZSBjb250ZXh0LiBJJ20gaW1tZWRpYXRlbHkgaW50ZXJlc3RlZCBpbiB0aGUgY29tbWVudCByZWZlcmVuY2luZyBSRkMgNTk2MSwgc2VjdGlvbiA1LjIsIGFuZCBpdHMgcmVsYXRpb24gdG8gXCJCbGluZCBEYXRhIEluamVjdGlvbiBBdHRhY2tzLlwiIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byByZWNhbGwgd2hhdCB0aGF0IHNwZWNpZmljIHNlY3Rpb24gb2YgdGhlIFJGQyBvdXRsaW5lcywgZXNwZWNpYWxseSBpdHMgbWl0aWdhdGlvbiBzdHJhdGVnaWVzLlxuXG5UaGUgY29kZSBpdHNlbGYsIHdpdGggdGhhdCBgaWZgIHN0YXRlbWVudCwgc3VnZ2VzdHMgc29tZSBraW5kIG9mIGNoZWNrIG9yIGEgZ3VhcmQuIEkgcmVjb2duaXplIHRoZSB1c2Ugb2YgYGJlZm9yZSgpYCBtYWNybywgd2hpY2ggbGlrZWx5IG1lYW5zIHRoYXQgdGhpcyBjb2RlIGlzIGRlc2lnbmVkIHRvIGlkZW50aWZ5IGEgc2l0dWF0aW9uIHdoZXJlIGFuIGluY29taW5nIGFja25vd2xlZGdlbWVudCAoYGFja2ApIGZhbGxzICpiZWZvcmUqIGEgY2FsY3VsYXRlZCBwb2ludC4gVGhlIHNlY29uZCB2YWx1ZSB1c2VzIGBwcmlvcl9zbmRfdW5hYCwgbGlrZWx5IGluZGljYXRpbmcgdGhlIHVuYWNrbm93bGVkZ2VkIHNlZ21lbnQgdGhhdCB3YXMgc2VudCwgYW5kIGBtYXhfd2luZG93YCBpcyB0aGUgYWR2ZXJ0aXNlZCB3aW5kb3cgc2l6ZS4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgY2hlY2sgaXMgcmVsYXRlZCB0byBob3cgdGhlIFRDUCBzdGFjayBkZWFscyB3aXRoIG91dC1vZi1vcmRlciBhY2tub3dsZWRnZW1lbnRzIG9yIHBvdGVudGlhbGx5IG1hbGljaW91cyBhY2tub3dsZWRnZW1lbnRzIHRyeWluZyB0byBpbmplY3QgZGF0YS4gVGhpcyBtYWtlcyBpdCBwZXJmZWN0IHRvIGRldGVjdCBhdHRhY2tzLiBJJ20gZ3Vlc3NpbmcgdGhhdCBpZiB0aGlzIGNvbmRpdGlvbmFsIGV2YWx1YXRlcyB0byBgdHJ1ZWAsIHNvbWUga2luZCBvZiBzZWN1cml0eSBtZWFzdXJlIGlzIHRyaWdnZXJlZCDigJMgcGVyaGFwcyBkcm9wcGluZyB0aGUgYWNrbm93bGVkZ2VtZW50LCBsb2dnaW5nIGFuIGV2ZW50LCBvciBpbml0aWF0aW5nIHNvbWUgZm9ybSBvZiByZXRyYW5zbWlzc2lvbi92YWxpZGF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgcHVycG9zZSBvZiB0aGF0IGNvbXBhcmlzb24uIEkga25vdyB0aGlzIGNvZGUgaXMgaW1wb3J0YW50IGZvciBlbnN1cmluZyB0aGUgc3RhYmlsaXR5IGFuZCBzZWN1cml0eSBvZiB0aGUgbmV0d29yayBjb25uZWN0aW9uLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIHdoYXQgaXMgYmVpbmcgcHJvdGVjdGVkIGhlcmUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjczLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6MTM6MzAuNjUxNTMxOTg3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyNDg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3BfaW5wdXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MjkwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MjkwOlxcdFxcdGludCByZXhtaXQgPSBSRVhNSVRfTk9ORTsgLyogRmxhZyB0byAocmUpdHJhbnNtaXQgdG8gcmVjb3ZlciBsb3NzZXMgKi9cXG40MjkxOlxcdFxcdHUzMiBlY25fY291bnQgPSAwO1xcdCAgLyogRGlkIHdlIHJlY2VpdmUgRUNFL2FuIEFjY0VDTiBBQ0UgdXBkYXRlPyAqL1xcbjQyOTI6XFx0XFx0dTMyIHByaW9yX2ZhY2s7XFxuNDI5MzpcXHRcXG40Mjk0OlxcdFxcdHNhY2tfc3RhdGUuZmlyc3Rfc2Fja3QgPSAwO1xcbjQyOTU6XFx0XFx0c2Fja19zdGF0ZS5yYXRlID0gXFx1MDAyNnJzO1xcbjQyOTY6XFx0XFx0c2Fja19zdGF0ZS5zYWNrX2RlbGl2ZXJlZCA9IDA7XFxuNDI5NzpcXHRcXHRzYWNrX3N0YXRlLmRlbGl2ZXJlZF9ieXRlcyA9IDA7XFxuNDI5ODpcXHRcXG40Mjk5OlxcdFxcdC8qIFdlIHZlcnkgbGlrZWx5IHdpbGwgbmVlZCB0byBhY2Nlc3MgcnR4IHF1ZXVlLiAqL1xcbjQzMDA6XFx0XFx0cHJlZmV0Y2goc2stXFx1MDAzZXRjcF9ydHhfcXVldWUucmJfbm9kZSk7XFxuNDMwMTpcXHRcXG40MzAyOlxcdFxcdC8qIElmIHRoZSBhY2sgaXMgb2xkZXIgdGhhbiBwcmV2aW91cyBhY2tzXFxuNDMwMzpcXHRcXHQgKiB0aGVuIHdlIGNhbiBwcm9iYWJseSBpZ25vcmUgaXQuXFxuNDMwNDpcXHRcXHQgKi9cXG40MzA1OlxcdFxcdGlmIChiZWZvcmUoYWNrLCBwcmlvcl9zbmRfdW5hKSkge1xcbjQzMDY6XFx0XFx0XFx0dTMyIG1heF93aW5kb3c7XFxuNDMwNzpcXHRcXG40MzA4OlxcdFxcdFxcdC8qIGRvIG5vdCBhY2NlcHQgQUNLIGZvciBieXRlcyB3ZSBuZXZlciBzZW50LiAqL1xcbjQzMDk6XFx0XFx0XFx0bWF4X3dpbmRvdyA9IG1pbl90KHU2NCwgdHAtXFx1MDAzZW1heF93aW5kb3csIHRwLVxcdTAwM2VieXRlc19hY2tlZCk7XFxuNDMxMDpcXHRcXHRcXHQvKiBSRkMgNTk2MSA1LjIgW0JsaW5kIERhdGEgSW5qZWN0aW9uIEF0dGFja10uW01pdGlnYXRpb25dICovXFxuNDMxMTpcXHRcXHRcXHRpZiAoYmVmb3JlKGFjaywgcHJpb3Jfc25kX3VuYSAtIG1heF93aW5kb3cpKSB7XFxuNDMxMjpcXHRcXHRcXHRcXHRpZiAoIShmbGFnIFxcdTAwMjYgRkxBR19OT19DSEFMTEVOR0VfQUNLKSlcXG40MzEzOlxcdFxcdFxcdFxcdFxcdHRjcF9zZW5kX2NoYWxsZW5nZV9hY2soc2ssIGZhbHNlKTtcXG40MzE0OlxcdFxcdFxcdFxcdHJldHVybiAtU0tCX0RST1BfUkVBU09OX1RDUF9UT09fT0xEX0FDSztcXG40MzE1OlxcdFxcdFxcdH1cXG40MzE2OlxcdFxcdFxcdGdvdG8gb2xkX2FjaztcXG40MzE3OlxcdFxcdH1cXG40MzE4OlxcdFxcbjQzMTk6XFx0XFx0LyogSWYgdGhlIGFjayBpbmNsdWRlcyBkYXRhIHdlIGhhdmVuJ3Qgc2VudCB5ZXQsIGRyb3AgdGhlXFxuNDMyMDpcXHRcXHQgKiBzZWdtZW50LiAgUkZDIDc5MyBTZWN0aW9uIDMuOSBhbmQgUkZDIDU5NjEgU2VjdGlvbiA1LjJcXG40MzIxOlxcdFxcdCAqIHJlcXVpcmUgdXMgdG8gc2VuZCBhbiBBQ0sgYmFjayBpbiB0aGF0IGNhc2UuXFxuNDMyMjpcXHRcXHQgKi9cXG40MzIzOlxcdFxcdGlmIChhZnRlcihhY2ssIHRwLVxcdTAwM2VzbmRfbnh0KSkge1xcbjQzMjQ6XFx0XFx0XFx0aWYgKCEoZmxhZyBcXHUwMDI2IEZMQUdfTk9fQ0hBTExFTkdFX0FDSykpXFxuNDMyNTpcXHRcXHRcXHRcXHR0Y3Bfc2VuZF9jaGFsbGVuZ2VfYWNrKHNrLCBmYWxzZSk7XFxuNDMyNjpcXHRcXHRcXHRyZXR1cm4gLVNLQl9EUk9QX1JFQVNPTl9UQ1BfQUNLX1VOU0VOVF9EQVRBO1xcbjQzMjc6XFx0XFx0fVxcbjQzMjg6XFx0XFxuNDMyOTpcXHRcXHRpZiAoYWZ0ZXIoYWNrLCBwcmlvcl9zbmRfdW5hKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDoxMzozMC42NTE4NTkxMjdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjMyOTE3Njk0OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVENQIFNlY3VyaXR5IEZpeDogV29ydGh5IG9mIEZ1enppbmc/KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IHdpdGhpbiB0aGUgYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGl0J3MgYWJvdXQgbWl0aWdhdGluZyBibGluZCBkYXRhIGluamVjdGlvbiBhdHRhY2tzIGFzIGRlc2NyaWJlZCBpbiBSRkMgNTk2MS4gQmVmb3JlIHRoZSBwYXRjaCwgYSBjYXJlZnVsbHkgY3JhZnRlZCBwYWNrZXQgd2l0aCBhbiBvbGQgQUNLLCBidXQgbWF0Y2hpbmcgdGhlIHByZWRpY3RlZCBmbGFncywgY291bGQgYnlwYXNzIHRoZSBjaGVjayBhbmQgaW5qZWN0IGRhdGEsIGV2ZW4gdGhvdWdoIGB0Y3BfYWNrYCBtaWdodCBoYXZlIHJldHVybmVkIGFuIGVycm9yLiBUaGUgY3J1Y2lhbCBmbGF3IHdhcyB0aGF0IHRoZSBmYXN0IHBhdGggaW4gYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIHdhcyBpZ25vcmluZyB0aGF0IG5lZ2F0aXZlIHJldHVybi4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgc3RyaWN0ZXIgY2hlY2sgb24gdGhlIGBhY2tfc2VxYCwgc2VuZGluZyB0aGVzZSBwYWNrZXRzIHRvIHRoZSBzbG93IHBhdGggZm9yIHByb3BlciBoYW5kbGluZyBhbmQgZHJvcHBpbmcgdGhlbSBiZWZvcmUgdGhlIGRhdGEgaXMgcXVldWVkLiBUaGF0J3MgYSBzb2xpZCBwcm90b2NvbCBhbmQgc2VjdXJpdHkgaW1wcm92ZW1lbnQuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBXZSdyZSBtb2RpZnlpbmcgY29yZSBUQ1AgaW5wdXQgbG9naWMgd2l0aGluIGBuZXQvaXB2NC90Y3BfaW5wdXQuY2AuIFRoYXQncyBhIHByaW1lIHRhcmdldC4gVENQIGVzdGFibGlzaGVkIHJlY2VpdmluZyBpcyBjb21tb24sIHJlYWNoYWJsZSB0aHJvdWdoIGFueSBUQ1Agc29ja2V0IHJlY2VpdmluZyBwYWNrZXRzIG9uIGxvb3BiYWNrLCB2ZXRoLCB0YXAsIGV0Yy4gU3l6a2FsbGVyJ3MgYWxyZWFkeSBjb25zdGFudGx5IHRlc3RpbmcgdGhlc2Ugc2NlbmFyaW9zLlxuXG5MZXQncyBhcHBseSB0aGUgYFdvcnRoRnV6emluZ2AgY3JpdGVyaWE6IEl0J3Mgbm90IGEgbm9uLWtlcm5lbCBvciBub24tZXhlY3V0YWJsZSBjb21wb25lbnQsIGl0J3Mgbm90IGhhcmR3YXJlLXNwZWNpZmljLCBhbmQgaXQncyBub3QgYW4gdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGguIFRoaXMgcGF0Y2ggZGlyZWN0bHkgbW9kaWZpZXMgcmVhY2hhYmxlLCBleGVjdXRhYmxlIGNvZGUgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0uIFRoYXQgbWVhbnMgYFdvcnRoRnV6emluZzogdHJ1ZWAuXG5cbk5leHQsIHRoZSBgRm9jdXNTeW1ib2xzYC4gV2hhdCBmdW5jdGlvbnMgYXJlIGtleSBoZXJlPyBJdCBzdGFydHMgd2l0aCBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAsIHRoZSBleGFjdCBmdW5jdGlvbiB3aGVyZSB0aGUgdnVsbmVyYWJpbGl0eSB3YXMgcHJlc2VudCBhbmQgdGhlIGNvbmRpdGlvbiB3YXMgbW9kaWZpZWQuIEJ1dCwgd2FpdC4gSXMgYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIHViaXF1aXRvdXM/IFRoZSBndWlkYW5jZSBzYXlzIHRvIGF2b2lkIGdlbmVyaWMgZnVuY3Rpb25zLiBJcyBpdCBsaWtlIGBrbWFsbG9jYCBvciBwYWdlIGZhdWx0cz8gTm8uIEl0IGlzIHNwZWNpZmljYWxseSBjYWxsZWQgZm9yIFRDUCBwYWNrZXRzIG9uIGVzdGFibGlzaGVkIHNvY2tldHMuIFNvLCBpdCBpcyBhIGdvb2QgY2FuZGlkYXRlLlxuXG5XaGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgaW52b2x2ZWQ/IEluIHRoZSBzbG93IHBhdGgsIGB0Y3BfdmFsaWRhdGVfaW5jb21pbmdgIGFuZCBgdGNwX2Fja2AuIFRoZSBwYXRjaCBhbHRlcnMgdGhlIGJlaGF2aW9yIG9mIHRoZSBmYXN0IHBhdGggaW4gYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIGJhc2VkIG9uIHdoYXQgdGhlIGxvd2VyLWxldmVsIGZ1bmN0aW9ucyByZXBvcnQuIFNvIHRoZXkgc2hvdWxkIGJlIGV4YW1pbmVkLlxuXG5UaGUga2V5IGNoYW5nZSBpcyBpbnNpZGUgYHRjcF9yY3ZfZXN0YWJsaXNoZWRgLiBMZXQncyBjb25maXJtOiBJcyBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAgbm9uLXN0YXRpYz8gWWVzLCBpdCdzIGB2b2lkIHRjcF9yY3ZfZXN0YWJsaXNoZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKWAuIE5vdywgd2hhdCBhYm91dCBgdGNwX2Fja2A/IEl0J3MgYHN0YXRpYyBpbnQgdGNwX2FjayguLi4pYC4gT2theSwgaXMgYHRjcF9hY2tgIGlubGluZWQgb3Igbm90PyBJdCdzIGEgbGFyZ2UgZnVuY3Rpb24sIHNvIGl0J3MgbGlrZWx5IGEgc3ltYm9sLiBCdXQgYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIGlzIGRlZmluaXRlbHkgYW4gZXhwb3J0ZWQvZ2xvYmFsIHN5bWJvbCBpbiBgdGNwX2lucHV0LmNgLiBHaXZlbiB0aGF0IGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBpcyBub24tc3RhdGljLCB0aGUgY2hhbmdlIGlzIG1hZGUgZGlyZWN0bHkgdGhlcmUsIGFuZCBgdGNwX2Fja2AgaXMgcGFydCBvZiB0aGUgY29udHJvbCBmbG93LiBCb3RoIHdhcnJhbnQgZm9jdXMuIE5vdywgbGV0J3MgZG91YmxlLWNoZWNrIHdoYXQgY2FsbHMgYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODUzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI4OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjEzOjUzLjk0MzYzMDYxOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkyNDU4MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX3Jjdl9lc3RhYmxpc2hlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwX2lucHV0LmM9NjMyMj1zdGF0aWMgYm9vbCB0Y3BfdmFsaWRhdGVfaW5jb21pbmcoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjUwMC0gKi9cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo2NTAxOnZvaWQgdGNwX3Jjdl9lc3RhYmxpc2hlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjUwMi17XFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTE4MzA9aW50IHRjcF92NF9kb19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0xODUzLVxcdFxcdH1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjE4NTQ6XFx0XFx0dGNwX3Jjdl9lc3RhYmxpc2hlZChzaywgc2tiKTtcXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTE4NTUtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTE5MDE9ZW51bSBza2JfZHJvcF9yZWFzb24gdGNwX2FkZF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMTk4MC1cXHRcXHQvKiBXZSBoYXZlIHRvIHVwZGF0ZSBib3RoIFRDUF9TS0JfQ0IodGFpbCktXFx1MDAzZXRjcF9mbGFncyBhbmRcXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjE5ODE6XFx0XFx0ICogdGh0YWlsLVxcdTAwM2VmaW4sIHNvIHRoYXQgdGhlIGZhc3QgcGF0aCBpbiB0Y3BfcmN2X2VzdGFibGlzaGVkKClcXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTE5ODItXFx0XFx0ICogaXMgbm90IGVudGVyZWQgaWYgd2UgYXBwZW5kIGEgcGFja2V0IHdpdGggYSBGSU4uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjEzOjUzLjk5Mjg4MjIyMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMjA0MTgwMzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIFRDUCBSZWNlaXZlIFBhdGggaW4gSVB2NioqXG5cbk9rYXksIHNvIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBpcyBnZXR0aW5nIGNhbGxlZCBmcm9tIGBuZXQvaXB2Ni90Y3BfaXB2Ni5jYC4gVGhhdCdzIGFuIGludGVyZXN0aW5nIGRldGFpbCBJIG5lZWQgdG8gcXVpY2tseSBleHBsb3JlLiBTaW5jZSBJIGFscmVhZHkga25vdyB0aGUgVENQIHN0YWNrIGluc2lkZSBhbmQgb3V0LCB0aGlzIHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBhbiBJUHY2LXNwZWNpZmljIGFzcGVjdCBvZiB0aGUgZXN0YWJsaXNoZWQgY29ubmVjdGlvbiByZWNlaXZpbmcgcHJvY2Vzcy4gTXkgZ3V0IHRlbGxzIG1lIHRoZXJlIG1pZ2h0IGJlIHNvbWUgSVB2Ni1zcGVjaWZpYyBoYW5kbGluZyBoYXBwZW5pbmcgYXQgdGhhdCBlbnRyeSBwb2ludC4gTGV0J3MgZGVsdmUgaW50byBgbmV0L2lwdjYvdGNwX2lwdjYuY2AgYW5kIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMgYW5kIGZpZ3VyZSBvdXQgd2hhdCBzcGVjaWZpYyBmdW5jdGlvbnMgb3IgY29kZSBwYXRocyBhcmUgYmVpbmcgdXNlZCBhdCB0aGF0IGNhbGwgc2l0ZS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBsb29raW5nIGZvciBkaWZmZXJlbmNlcyBvciBhZGRpdGlvbnMgdG8gdGhlIHN0YW5kYXJkIFRDUCByZWNlaXZlIGhhbmRsaW5nIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgYWRhcHRlZCB0byB0aGUgSVB2NiBlbnZpcm9ubWVudCwgd2hpY2ggbWlnaHQgaW5kaWNhdGUgc3BlY2lmaWMgSVB2NiBoZWFkZXIgb3IgYWRkcmVzcyBwcm9jZXNzaW5nLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQganVtcCBpbnRvIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTI0NiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjEzOjU2LjE5NzA2NTEzNVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1NDM1NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX3Jjdl9lc3RhYmxpc2hlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvdGNwX2lwdjYuYz0xNTY3PWludCB0Y3BfdjZfZG9fcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTU3Ni1cXHQgICBGcm9tIGJhY2tsb2cgaXQgYWx3YXlzIGdvZXMgaGVyZS4gS2VyYm9vbS4uLlxcbm5ldC9pcHY2L3RjcF9pcHY2LmM6MTU3NzpcXHQgICBGb3J0dW5hdGVseSwgdGNwX3Jjdl9lc3RhYmxpc2hlZCBhbmQgcmN2X2VzdGFibGlzaGVkXFxubmV0L2lwdjYvdGNwX2lwdjYuYy0xNTc4LVxcdCAgIGhhbmRsZSB0aGVtIGNvcnJlY3RseSwgYnV0IGl0IGlzIG5vdCBjYXNlIHdpdGhcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTYyNi1cXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jOjE2Mjc6XFx0XFx0dGNwX3Jjdl9lc3RhYmxpc2hlZChzaywgc2tiKTtcXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTE2MjgtXFx0XFx0aWYgKG9wdF9za2IpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjEzOjU2LjI0NDYxMzAxN1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1MjA4NjIzNDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBDb2RlIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIHNlZW1zIHRvIGJlIHdpdGhpbiBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAuIFRoYXQncyB0aGUgc3BlY2lmaWMgZnVuY3Rpb24gdGhhdCB3YXMgZGlyZWN0bHkgbW9kaWZpZWQuIEkgc2hvdWxkIGFsc28gY29uc2lkZXIgaG93IHRoaXMgaW1wYWN0cyByZWxhdGVkIGZ1bmN0aW9ucy4gYHRjcF92YWxpZGF0ZV9pbmNvbWluZ2AgYW5kIGB0Y3BfYWNrYCBhcmUgYm90aCBjYWxsZWQgZnJvbSBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAsIGFuZCB0aG91Z2ggdGhleSdyZSBzdGF0aWMsIHRoZXkgYXJlIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIGluIHRoZSBjb250ZXh0IG9mIHRoaXMgY2hhbmdlLlxuXG5JJ3ZlIGNvbmZpcm1lZCB0aGF0IGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBpcyBpbmRlZWQgdGhlIHByaW1hcnkgZnVuY3Rpb24gdGhhdCByZWNlaXZlZCB0aGUgbW9kaWZpY2F0aW9uczsgdGhhdCdzIHRoZSBmb2N1cy4gR2l2ZW4gdGhhdCBgdGNwX3ZhbGlkYXRlX2luY29taW5nYCBpcyBzdGF0aWMsIGl0cyBzeW1ib2wgcmVwcmVzZW50YXRpb24gaW4gdm1saW51eCBkZXBlbmRzIG9uIGlubGluaW5nLiBIb3dldmVyLCBiZWNhdXNlIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBpcyBub24tc3RhdGljLCBpdCBpcyBkZWZpbml0ZWx5IGEgdmFsaWQgc3ltYm9sLlxuXG5UbyBtYWtlIHN1cmUgSSBoYXZlIGEgY29tcGxldGUgcGljdHVyZSwgSSBuZWVkIHRvIGNoZWNrIGlmIGFueSBvdGhlciBmdW5jdGlvbnMgd2VyZSB0b3VjaGVkIGJ5IHRoaXMgcGF0Y2guIEZyb20gd2hhdCBJIHNlZSwgdGhlIG1vZGlmaWNhdGlvbiBvbmx5IGFmZmVjdHMgYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIGl0c2VsZiwgYW5kIGl0IHJlc2lkZXMgd2l0aGluIGBuZXQvaXB2NC90Y3BfaW5wdXQuY2AuXG5cbk5vdywgSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLiBJIGNhbiBzZWUgdGhhdCBgbmV0L2lwdjQvdGNwX2lucHV0LmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19JTkVUYCBpcyBlbmFibGVkLiBUaW1lIHRvIGNoZWNrIGBuZXQvaXB2NC9NYWtlZmlsZWAgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgcmVsZXZhbnQgYnVpbGQgcnVsZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzUwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjE0OjAxLjQ1MzIzODg2N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAxMDkzMDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX2lucHV0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9NYWtlZmlsZT02PW9iai15ICAgICA6PSByb3V0ZS5vIGluZXRwZWVyLm8gcHJvdG9jb2wubyBcXFxcXFxuLS1cXG5uZXQvaXB2NC9NYWtlZmlsZS05LVxcdCAgICAgaW5ldF90aW1ld2FpdF9zb2NrLm8gaW5ldF9jb25uZWN0aW9uX3NvY2subyBcXFxcXFxubmV0L2lwdjQvTWFrZWZpbGU6MTA6XFx0ICAgICB0Y3AubyB0Y3BfaW5wdXQubyB0Y3Bfb3V0cHV0Lm8gdGNwX3RpbWVyLm8gdGNwX2lwdjQubyBcXFxcXFxubmV0L2lwdjQvTWFrZWZpbGUtMTEtXFx0ICAgICB0Y3BfbWluaXNvY2tzLm8gdGNwX2NvbmcubyB0Y3BfbWV0cmljcy5vIHRjcF9mYXN0b3Blbi5vIFxcXFxcXG4tLVxcbm5ldC9pcHY0L2luZXRfdGltZXdhaXRfc29jay5jPTE2OD1zdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICppbmV0X3R3c2tfYWxsb2MoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvaW5ldF90aW1ld2FpdF9zb2NrLmMtMjIyLS8qIFRoZXNlIGFyZSBhbHdheXMgY2FsbGVkIGZyb20gQkggY29udGV4dC4gIFNlZSBjYWxsZXJzIGluXFxubmV0L2lwdjQvaW5ldF90aW1ld2FpdF9zb2NrLmM6MjIzOiAqIHRjcF9pbnB1dC5jIHRvIHZlcmlmeSB0aGlzLlxcbm5ldC9pcHY0L2luZXRfdGltZXdhaXRfc29jay5jLTIyNC0gKi9cXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTE1NTE9dm9pZCBfX3RjcF9jbGVhbnVwX3JidWYoc3RydWN0IHNvY2sgKnNrLCBpbnQgY29waWVkKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTU1OC1cXG5uZXQvaXB2NC90Y3AuYzoxNTU5OlxcdFxcdGlmICgvKiBPbmNlLXBlci10d28tc2VnbWVudHMgQUNLIHdhcyBub3Qgc2VudCBieSB0Y3BfaW5wdXQuYyAqL1xcbm5ldC9pcHY0L3RjcC5jLTE1NjAtXFx0XFx0ICAgIHRwLVxcdTAwM2VyY3Zfbnh0IC0gdHAtXFx1MDAzZXJjdl93dXAgXFx1MDAzZSBpY3NrLVxcdTAwM2VpY3NrX2Fjay5yY3ZfbXNzIHx8XFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTEyLSAqXFx0XFx0bGludXgvaXB2NC90Y3AuY1xcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MTM6ICpcXHRcXHRsaW51eC9pcHY0L3RjcF9pbnB1dC5jXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0xNC0gKlxcdFxcdGxpbnV4L2lwdjQvdGNwX291dHB1dC5jXFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTIwNDU9c3RhdGljIHZvaWQgdGNwX3Y0X2ZpbGxfY2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IGlwaGRyICppcGgsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTIwNjYtLypcXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjIwNjc6ICpcXHRGcm9tIHRjcF9pbnB1dC5jXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0yMDY4LSAqL1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTQxMDE9c3RhdGljIHZvaWQgdGNwX2Nvbm5lY3RfaW5pdChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDEwOS1cXHQvKiBXZSdsbCBmaXggdGhpcyB1cCB3aGVuIHdlIGdldCBhIHJlc3BvbnNlIGZyb20gdGhlIG90aGVyIGVuZC5cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6NDExMDpcXHQgKiBTZWUgdGNwX2lucHV0LmM6dGNwX3Jjdl9zdGF0ZV9wcm9jZXNzIGNhc2UgVENQX1NZTl9TRU5ULlxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MTExLVxcdCAqL1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTQ0MDI9dTMyIHRjcF9kZWxhY2tfbWF4KGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00NDA5LS8qIFNlbmQgb3V0IGEgZGVsYXllZCBhY2ssIHRoZSBjYWxsZXIgZG9lcyB0aGUgcG9saWN5IGNoZWNraW5nXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjQ0MTA6ICogdG8gc2VlIGlmIHdlIHNob3VsZCBldmVuIGJlIGhlcmUuICBTZWUgdGNwX2lucHV0LmM6dGNwX2Fja19zbmRfY2hlY2soKVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00NDExLSAqIGZvciBkZXRhaWxzLlxcbi0tXFxubmV0L2lwdjQvdGNwX3RpbWVyLmM9NTM1PXZvaWQgdGNwX3JldHJhbnNtaXRfdGltZXIoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdGNwX3RpbWVyLmMtNjYxLVxcdCAqIHRodXMgdGhlIG9sZCB2YWx1ZSBtaWdodCBhbHJlYWR5IGJlIHRvbyBoaWdoIGNvbXBhcmVkIHRvIHRoZSB2YWx1ZVxcbm5ldC9pcHY0L3RjcF90aW1lci5jOjY2MjpcXHQgKiBzZXQgYnkgJ3RjcF9zZXRfcnRvJyBpbiB0Y3BfaW5wdXQuYyB3aGljaCByZXNldHMgdGhlIHJ0byB3aXRob3V0XFxubmV0L2lwdjQvdGNwX3RpbWVyLmMtNjYzLVxcdCAqIGJhY2tvZmYuIExpbWl0IHRvIFRDUF9USElOX0xJTkVBUl9SRVRSSUVTIGJlZm9yZSBpbml0aWF0aW5nXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjE0OjAxLjUwMzM1MzE0OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0NTAxNjA5ODIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyB0aGUgTmV0d29yayBTdGFjayBCdWlsZCBQcm9jZXNzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBgbmV0L2lwdjRgIGNvbXBvbmVudCBpcyBiZWluZyBidWlsdCB3aXRoaW4gdGhlIGxhcmdlciBrZXJuZWwgZnJhbWV3b3JrLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCwgYXMgYWx3YXlzLCBpcyB0aGUgYG5ldC9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgdGhlIG9yY2hlc3RyYXRvciBvZiBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIHJ1bGVzIGZvciB0aGlzIHBhcnQgb2YgdGhlIG5ldHdvcmsgc3RhY2suIEkgbmVlZCB0byB0cmFjZSB0aHJvdWdoIGl0IGFuZCBzZWUgaG93IGBpcHY0YCBpcyBzcGVjaWZpY2FsbHkgaW5jb3Jwb3JhdGVkLCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBnb3RjaGFzIGFuZCBkZXBlbmRlbmNpZXMgdGhhdCBuZWVkIHRvIGJlIGNvbnNpZGVyZWQuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQgYG5ldC9NYWtlZmlsZWAgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczMzQsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDoxNDowNi4wMDQ5NjY2NTJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNzg3MzYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdjRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9NYWtlZmlsZT0xNj1vYmotJChDT05GSUdfTkVURklMVEVSKVxcdFxcdCs9IG5ldGZpbHRlci9cXG5uZXQvTWFrZWZpbGU6MTc6b2JqLSQoQ09ORklHX0lORVQpXFx0XFx0Kz0gaXB2NC9cXG5uZXQvTWFrZWZpbGUtMTgtb2JqLSQoQ09ORklHX1RMUylcXHRcXHQrPSB0bHMvXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjE0OjA2LjA1ODc1ODk0M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNzQ3NjkwMjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgVENQIElucHV0IE1vZHVsZSBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCBgQ09ORklHX0lORVRgIGlzIGVuYWJsZWQsIHRoYXQncyBjcnVjaWFsLiBOb3csIG15IG5leHQgbW92ZSBpcyB0byBjaGVjayBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgdGllZCB0byBlaXRoZXIgYHRjcF9pbnB1dC5vYCBvciwgbW9yZSBicm9hZGx5LCBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAuIEknbGwgc3RhcnQgZGlnZ2luZyB0aHJvdWdoIHRoZSByZWxldmFudCBgTWFrZWZpbGVgIGluIHRoZSBgbmV0L2lwdjRgIGRpcmVjdG9yeSwgdGhlIHVzdWFsIHN1c3BlY3QuIEFoLCB0aGVyZSBpdCBpczogYG9iai15IDo9IHJvdXRlLm8gaW5ldHBlZXIubyBwcm90b2NvbC5vIC4uLiB0Y3AubyB0Y3BfaW5wdXQubyAuLi5gIExvb2tzIGxpa2Ugd2hlbmV2ZXIgYENPTkZJR19JTkVUYCBpcyBzZXQgdG8gJ3knLCBgdGNwX2lucHV0Lm9gIGdldHMgY29tcGlsZWQsIHdoaWNoIGlzIGV4cGVjdGVkLiBKdXN0IHRvIGJlIGNvbXBsZXRlbHkgdGhvcm91Z2gsIEnigJlsbCBjcm9zcy1yZWZlcmVuY2UgdGhpcyB3aXRoIHRoZSBgbmV0L2lwdjQvS2NvbmZpZ2AgZmlsZSB0byBjb25maXJtIHRoYXQgYENPTkZJR19JTkVUYCBpcyBkZWZpbmVkIGFuZCB3aGF0IG90aGVyIGRlcGVuZGVuY2llcyBhcmUgaW4gcGxheS4gSXQncyBhbHdheXMgZ29vZCB0byBjb3ZlciBhbGwgYmFzZXMgd2l0aCB0aGlzIHNvcnQgb2YgY29uZmlndXJhdGlvbiBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc1OTIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6MTQ6MDguODA2NDUyMDJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTM3MjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJTkVUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz0zMzA9Y29uZmlnIE5FVF9GT1VfSVBfVFVOTkVMU1xcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zMzgtXFxubmV0L2lwdjQvS2NvbmZpZzozMzk6Y29uZmlnIElORVRfQUhcXG5uZXQvaXB2NC9LY29uZmlnLTM0MC1cXHR0cmlzdGF0ZSBcXFwiSVA6IEFIIHRyYW5zZm9ybWF0aW9uXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zNTMtXFxubmV0L2lwdjQvS2NvbmZpZzozNTQ6Y29uZmlnIElORVRfRVNQXFxubmV0L2lwdjQvS2NvbmZpZy0zNTUtXFx0dHJpc3RhdGUgXFxcIklQOiBFU1AgdHJhbnNmb3JtYXRpb25cXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM2OC1cXG5uZXQvaXB2NC9LY29uZmlnOjM2OTpjb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxcbm5ldC9pcHY0L0tjb25maWctMzcwLVxcdHRyaXN0YXRlIFxcXCJJUDogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM4MS1cXG5uZXQvaXB2NC9LY29uZmlnOjM4Mjpjb25maWcgSU5FVF9FU1BJTlRDUFxcbm5ldC9pcHY0L0tjb25maWctMzgzLVxcdGJvb2wgXFxcIklQOiBFU1AgaW4gVENQIGVuY2Fwc3VsYXRpb24gKFJGQyA4MjI5KVxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzkzLVxcbm5ldC9pcHY0L0tjb25maWc6Mzk0OmNvbmZpZyBJTkVUX0lQQ09NUFxcbm5ldC9pcHY0L0tjb25maWctMzk1LVxcdHRyaXN0YXRlIFxcXCJJUDogSVBDb21wIHRyYW5zZm9ybWF0aW9uXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MDMtXFxubmV0L2lwdjQvS2NvbmZpZzo0MDQ6Y29uZmlnIElORVRfVEFCTEVfUEVSVFVSQl9PUkRFUlxcbm5ldC9pcHY0L0tjb25maWctNDA1LVxcdGludCBcXFwiSU5FVDogU291cmNlIHBvcnQgcGVydHVyYmF0aW9uIHRhYmxlIHNpemUgKGFzIHBvd2VyIG9mIDIpXFxcIiBpZiBFWFBFUlRcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNDEzLVxcbm5ldC9pcHY0L0tjb25maWc6NDE0OmNvbmZpZyBJTkVUX1hGUk1fVFVOTkVMXFxubmV0L2lwdjQvS2NvbmZpZy00MTUtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNDE4LVxcbm5ldC9pcHY0L0tjb25maWc6NDE5OmNvbmZpZyBJTkVUX1RVTk5FTFxcbm5ldC9pcHY0L0tjb25maWctNDIwLVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTQyMi1cXG5uZXQvaXB2NC9LY29uZmlnOjQyMzpjb25maWcgSU5FVF9ESUFHXFxubmV0L2lwdjQvS2NvbmZpZy00MjQtXFx0dHJpc3RhdGUgXFxcIklORVQ6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNDM0LVxcbm5ldC9pcHY0L0tjb25maWc6NDM1OmNvbmZpZyBJTkVUX1RDUF9ESUFHXFxubmV0L2lwdjQvS2NvbmZpZy00MzYtXFx0ZGVwZW5kcyBvbiBJTkVUX0RJQUdcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNDM4LVxcbm5ldC9pcHY0L0tjb25maWc6NDM5OmNvbmZpZyBJTkVUX1VEUF9ESUFHXFxubmV0L2lwdjQvS2NvbmZpZy00NDAtXFx0dHJpc3RhdGUgXFxcIlVEUDogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00NDYtXFxubmV0L2lwdjQvS2NvbmZpZzo0NDc6Y29uZmlnIElORVRfUkFXX0RJQUdcXG5uZXQvaXB2NC9LY29uZmlnLTQ0OC1cXHR0cmlzdGF0ZSBcXFwiUkFXOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTQ1NC1cXG5uZXQvaXB2NC9LY29uZmlnOjQ1NTpjb25maWcgSU5FVF9ESUFHX0RFU1RST1lcXG5uZXQvaXB2NC9LY29uZmlnLTQ1Ni1cXHRib29sIFxcXCJJTkVUOiBhbGxvdyBwcml2aWxlZ2VkIHByb2Nlc3MgdG8gYWRtaW5pc3RyYXRpdmVseSBjbG9zZSBzb2NrZXRzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDoxNDowOC44NTE5OTIzNzNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzI4MjY3MTUxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgcXVlcnk6XG5cbioqVHJhY2luZyB0aGUgQ29uZmlndXJhdGlvbiBvZiBgY29uZmlnIElORVRgKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGBjb25maWcgSU5FVGAgdmFyaWFibGUgb3IgZGlyZWN0aXZlIGlzIGRlZmluZWQgd2l0aGluIHRoaXMgc3lzdGVtLiBJIGNhbid0IGp1c3QgYXNzdW1lIEkgYWxyZWFkeSBrbm93LCBzbyBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkbyBhIHF1aWNrIGFuZCBkaXJ0eSBzZWFyY2ggdG8gbG9jYXRlIGl0cyBkZWZpbml0aW9uLiBUaGUgYmVzdCB3YXkgdG8gZG8gdGhhdCB3b3VsZCBiZSB3aXRoIGBncmVwYC4gSSB3YW50IHRvIGJlIHNwZWNpZmljLCBJJ2xsIHVzZSBhIGRvbGxhciBzaWduIGAkYCB0byBlbnN1cmUgSSdtIGZpbmRpbmcgdGhlICpleGFjdCogbWF0Y2ggb2YgYGNvbmZpZyBJTkVUYCBhdCB0aGUgZW5kIG9mIGEgbGluZSwgb3IgYSB2YXJpYWJsZSB3aXRoIHRoYXQgZXhhY3QgbmFtZS4gVGhpcyBzaG91bGQgaGVscCBtZSBhdm9pZCBhY2NpZGVudGFsbHkgcGlja2luZyB1cCBtYXRjaGVzIHdoZXJlIGBJTkVUYCBpcyBwYXJ0IG9mIGEgbGFyZ2VyIHdvcmQgb3IgdmFyaWFibGUgbmFtZSBsaWtlIGBJTkVUX0FERFJFU1NgLiBVc2luZyBgZ3JlcCBcImNvbmZpZyBJTkVUJFwiYCBzaG91bGQgZ2l2ZSBtZSBhIGNvbmNpc2UgbGlzdGluZyBvZiBhbnkgZmlsZXMgd2hlcmUgdGhhdCBzcGVjaWZpYyBkaXJlY3RpdmUgaXMgZGVmaW5lZCwgd2hpY2ggd2lsbCBwcm92aWRlIHRoZSBjb250ZXh0IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCB1c2FnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3NTksIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDoxNDoxMi4xMzQ2Njc0NDNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NTEzODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJTkVUJFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTk5PWNvbmZpZyBORVRfSEFORFNIQUtFX0tVTklUX1RFU1RcXG4tLVxcbm5ldC9LY29uZmlnLTExMy1cXG5uZXQvS2NvbmZpZzoxMTQ6Y29uZmlnIElORVRcXG5uZXQvS2NvbmZpZy0xMTUtXFx0Ym9vbCBcXFwiVENQL0lQIG5ldHdvcmtpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjE0OjEyLjIwMzE4NTgwMloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMjkyNTg1NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFieXJpbnRoKipcblxuT2theSwgc28gSSdtIGRlYWxpbmcgd2l0aCB0aGUgYElORVRgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaXRzIGNvbnRleHQgd2l0aGluIHRoZSBicm9hZGVyIG5ldHdvcmtpbmcgY29uZmlndXJhdGlvbi4gVGhlIGhpbnQgcG9pbnRzIHRvIGBuZXQvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBsaW5lIDExNC4gSG93ZXZlciwgdGhhdCdzIHJhcmVseSBlbm91Z2ggY29udGV4dCBpbiBhIHNwcmF3bGluZyBjb25maWd1cmF0aW9uIGZpbGUgbGlrZSB0aGlzIG9uZS4gVG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQgYElORVRgIGFjdHVhbGx5ICptZWFucyogYW5kIHdoYXQgaXRzIGRlcGVuZGVuY2llcyBtaWdodCBiZSwgSSdtIGdvaW5nIHRvIGJhY2sgdXAgYSBiaXQgYW5kIHRha2UgYSBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBsaW5lcy4gTGV0J3Mgc2VlLi4uIGxpbmVzIDExMCB0aHJvdWdoIDEzMCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgZmVlbCBmb3IgdGhlIGxvY2FsIGVudmlyb25tZW50IG9mIHRoaXMgb3B0aW9uLiBUaGlzIHR5cGljYWxseSByZXZlYWxzIHRoZSByZWxhdGlvbnNoaXBzIHdpdGggb3RoZXIgY29uZmlnIG9wdGlvbnMsIHRoZSBoZWxwIHRleHQgZGVzY3JpYmluZyBpdCwgYW5kIGFueSBkZXBlbmRlbmNpZXMgb3IgZGVmYXVsdCB2YWx1ZXMuIEl0IHdpbGwgdGFrZSBhIGZldyBtaW51dGVzIHRvIHJlYWQgYnV0IGl0J3MgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0d2Vha2luZyB0aGlzIHNwZWNpZmljIG9wdGlvbi4gSSdsbCBmb2N1cyBvbiByZWxhdGlvbnNoaXBzIGFuZCBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MDg2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6MTQ6MTQuNDk1Nzc0NTUyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDExMDpcXHRcXG4gMTExOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcmVmZXJcXG4gMTEyOlxcdFxcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24gaW4gRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva3VuaXQvLlxcbiAxMTM6XFx0XFxuIDExNDpcXHRjb25maWcgSU5FVFxcbiAxMTU6XFx0XFx0Ym9vbCBcXFwiVENQL0lQIG5ldHdvcmtpbmdcXFwiXFxuIDExNjpcXHRcXHRoZWxwXFxuIDExNzpcXHRcXHQgIFRoZXNlIGFyZSB0aGUgcHJvdG9jb2xzIHVzZWQgb24gdGhlIEludGVybmV0IGFuZCBvbiBtb3N0IGxvY2FsXFxuIDExODpcXHRcXHQgIEV0aGVybmV0cy4gSXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRvIHNheSBZIGhlcmUgKHRoaXMgd2lsbCBlbmxhcmdlXFxuIDExOTpcXHRcXHQgIHlvdXIga2VybmVsIGJ5IGFib3V0IDQwMCBLQiksIHNpbmNlIHNvbWUgcHJvZ3JhbXMgKGUuZy4gdGhlIFggd2luZG93XFxuIDEyMDpcXHRcXHQgIHN5c3RlbSkgdXNlIFRDUC9JUCBldmVuIGlmIHlvdXIgbWFjaGluZSBpcyBub3QgY29ubmVjdGVkIHRvIGFueVxcbiAxMjE6XFx0XFx0ICBvdGhlciBjb21wdXRlci4gWW91IHdpbGwgZ2V0IHRoZSBzby1jYWxsZWQgbG9vcGJhY2sgZGV2aWNlIHdoaWNoXFxuIDEyMjpcXHRcXHQgIGFsbG93cyB5b3UgdG8gcGluZyB5b3Vyc2VsZiAoZ3JlYXQgZnVuLCB0aGF0ISkuXFxuIDEyMzpcXHRcXG4gMTI0OlxcdFxcdCAgRm9yIGFuIGV4Y2VsbGVudCBpbnRyb2R1Y3Rpb24gdG8gTGludXggbmV0d29ya2luZywgcGxlYXNlIHJlYWQgdGhlXFxuIDEyNTpcXHRcXHQgIExpbnV4IE5ldHdvcmtpbmcgSE9XVE8sIGF2YWlsYWJsZSBmcm9tXFxuIDEyNjpcXHRcXHQgIFxcdTAwM2NodHRwOi8vd3d3LnRsZHAub3JnL2RvY3MuaHRtbCNob3d0b1xcdTAwM2UuXFxuIDEyNzpcXHRcXG4gMTI4OlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUgYW5kIGFsc28gdG8gXFxcIi9wcm9jIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiIGFuZFxcbiAxMjk6XFx0XFx0ICBcXFwiU3lzY3RsIHN1cHBvcnRcXFwiIGJlbG93LCB5b3UgY2FuIGNoYW5nZSB2YXJpb3VzIGFzcGVjdHMgb2YgdGhlXFxuIDEzMDpcXHRcXHQgIGJlaGF2aW9yIG9mIHRoZSBUQ1AvSVAgY29kZSBieSB3cml0aW5nIHRvIHRoZSAodmlydHVhbCkgZmlsZXMgaW5cXG4gMTMxOlxcdFxcdCAgL3Byb2Mvc3lzL25ldC9pcHY0Lyo7IHRoZSBvcHRpb25zIGFyZSBleHBsYWluZWQgaW4gdGhlIGZpbGVcXG4gMTMyOlxcdFxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC5yc3RcXHUwMDNlLlxcbiAxMzM6XFx0XFxuIDEzNDpcXHRcXHQgIFNob3J0IGFuc3dlcjogc2F5IFkuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjE0OjE0LjQ5NTg1MDAxMloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNjc3NzU0MDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBDT05GSUdfSU5FVCBhbmQgVENQIEludmFsaWQgUmF0ZSBMaW1pdCoqXG5cbkFscmlnaHQsIHNvIGBDT05GSUdfSU5FVGAgbG9va3MgY2xlYW4g4oCTIG5vIGV4cGxpY2l0IGRlcGVuZGVuY2llcyBiZXNpZGVzIGBORVRgLCB3aGljaCBpcyBiYXNpY2FsbHkgYSBnaXZlbi4gSSdtIGFsd2F5cyB0aG9yb3VnaCB0aG91Z2gsIHNvIGJlZm9yZSBJIG1vdmUgb24sIEkgd2FudCB0byBjb25maXJtIHRoZXJlIGFyZW4ndCBhbnkgaGlkZGVuIGltcGxpY2F0aW9ucyBvciBvdGhlciBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuXG5cbk5vdywgdGhhdCBwYWNrZXRkcmlsbCB0ZXN0Li4uIGBzeXNjdGwgLXEgbmV0LmlwdjQudGNwX2ludmFsaWRfcmF0ZWxpbWl0PTBgLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgdGhpcyBzcGVjaWZpYyBzeXNjdGwgaXMgYmVpbmcgc2V0LiBJdCdzIHRoZSBgdGNwX2ludmFsaWRfcmF0ZWxpbWl0YCB0aGF0J3MgdGhlIGtleS4gQmVzdCB0byBkbyBhIHF1aWNrIGdyZXAuIExldCdzIHNlZSB3aGVyZSB0aGF0IHZhcmlhYmxlIGlzIHVzZWQgYW5kIHdoYXQncyBnb2luZyBvbi4gR290dGEgc3RheSBvbiB0b3Agb2YgYWxsIHRoZSBtb3ZpbmcgcGFydHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODAzLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDoxNDoxNy4xNzM2MDY1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDQ2OTQ1NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX2ludmFsaWRfcmF0ZWxpbWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmM9NjI3PXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjRfbmV0X3RhYmxlW10gPSB7XFxuLS1cXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYy0xNDI2LVxcdHtcXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYzoxNDI3OlxcdFxcdC5wcm9jbmFtZVxcdD0gXFxcInRjcF9pbnZhbGlkX3JhdGVsaW1pdFxcXCIsXFxubmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmM6MTQyODpcXHRcXHQuZGF0YVxcdFxcdD0gXFx1MDAyNmluaXRfbmV0LmlwdjQuc3lzY3RsX3RjcF9pbnZhbGlkX3JhdGVsaW1pdCxcXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYy0xNDI5LVxcdFxcdC5tYXhsZW5cXHRcXHQ9IHNpemVvZihpbnQpLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9Mzk4OT1zdGF0aWMgYm9vbCBfX3RjcF9vb3dfcmF0ZV9saW1pdGVkKHN0cnVjdCBuZXQgKm5ldCwgaW50IG1pYl9pZHgsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0zOTk4LVxcdFxcdGlmICgwIFxcdTAwM2M9IGVsYXBzZWQgXFx1MDAyNlxcdTAwMjZcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzozOTk5OlxcdFxcdCAgICBlbGFwc2VkIFxcdTAwM2MgUkVBRF9PTkNFKG5ldC1cXHUwMDNlaXB2NC5zeXNjdGxfdGNwX2ludmFsaWRfcmF0ZWxpbWl0KSkge1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTQwMDAtXFx0XFx0XFx0TkVUX0lOQ19TVEFUUyhuZXQsIG1pYl9pZHgpO1xcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYz0zNDMzPXN0YXRpYyBpbnQgX19uZXRfaW5pdCB0Y3Bfc2tfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTM0OTQtXFx0bmV0LVxcdTAwM2VpcHY0LnN5c2N0bF90Y3BfYXV0b2NvcmtpbmcgPSAxO1xcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzQ5NTpcXHRuZXQtXFx1MDAzZWlwdjQuc3lzY3RsX3RjcF9pbnZhbGlkX3JhdGVsaW1pdCA9IEhaLzI7XFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zNDk2LVxcdG5ldC1cXHUwMDNlaXB2NC5zeXNjdGxfdGNwX3BhY2luZ19zc19yYXRpbyA9IDIwMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6MTQ6MTcuNDE4MzA3MjhaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mjc5NjA4NTExOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYHN5c2N0bF90Y3BfaW52YWxpZF9yYXRlbGltaXRgIGluIHRoZSBUQ1AvSU5FVCBDb250ZXh0KipcblxuT2theSwgc28gYHN5c2N0bF90Y3BfaW52YWxpZF9yYXRlbGltaXRgIGlzIGNsZWFybHkgcGFydCBvZiB0aGUgY29yZSBUQ1AvSU5FVCBzdGFjay4gTGV0J3MgbWFrZSBzdXJlIHdlJ3JlIGZvY3VzZWQgb24gdGhlIGNvcnJlY3Qgc3ltYm9scyBoZXJlLiBJJ2xsIGRvdWJsZS1jaGVjayB0byBzZWUgaWYgYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIGlzIHRoZSBrZXkgYXJlYS4gQXJlIHRoZXJlICpvdGhlciogc3ltYm9scyB0aGF0IG1pZ2h0IGJlIGltcG9ydGFudD9cblxuQWxyaWdodCwgbGV0J3MgZXhhbWluZSB0aGUgY2FsbGVycyBvciByZWxhdGVkIGhlbHBlciBmdW5jdGlvbnMgZm9yIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBhcyB0aGF0J3MgdGhlIG9uZSB0aGF0IHdhcyBtb2RpZmllZC4gQWhhISBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAgKmNhbGxzKiBgdGNwX3ZhbGlkYXRlX2luY29taW5nYCBvbiB0aGUgc2xvdyBwYXRoLCB0aGF0IG1ha2VzIHNlbnNlLiBIbW0sIHdhaXQgYSBtaW51dGUsIGB0Y3BfdmFsaWRhdGVfaW5jb21pbmdgIGlzICpzdGF0aWMqLiBUaGF0IG1lYW5zIGl0J3Mgbm90IGV4cG9ydGVkLiBMZXQgbWUganVzdCBjb25maXJtIGl0cyBzaWduYXR1cmU6IGBzdGF0aWMgYm9vbCB0Y3BfdmFsaWRhdGVfaW5jb21pbmcoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdGNwaGRyICp0aCwgaW50IHN5bl9pbmVycilgLlxuXG5JJ2xsIGNoZWNrIGhvdyBtYW55IHRpbWVzIGl0J3MgY2FsbGVkIHdpdGhpbiBgdGNwX2lucHV0LmNgIGp1c3QgdG8gYmUgY2VydGFpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgcmF0ZWxpbWl0LCBhbmQgaWYgdGhlIGZhY3QgdGhhdCBpdCdzIHN0YXRpYyBpcyBhIGNvbnN0cmFpbnQgb24gb3VyIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDU3MSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDoxNDoyMC4yMTQzOTQ1MDlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MDMzODcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF92YWxpZGF0ZV9pbmNvbWluZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwX2lucHV0LmM9NjMxMD1zdGF0aWMgYm9vbCB0Y3BfcmVzZXRfY2hlY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjMyMS0gKi9cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo2MzIyOnN0YXRpYyBib29sIHRjcF92YWxpZGF0ZV9pbmNvbWluZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjMyMy1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoLCBpbnQgc3luX2luZXJyKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9NjUwMT12b2lkIHRjcF9yY3ZfZXN0YWJsaXNoZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNjY3Mi12YWxpZGF0ZTpcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo2NjczOlxcdGlmICghdGNwX3ZhbGlkYXRlX2luY29taW5nKHNrLCBza2IsIHRoLCAxKSlcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy02Njc0LVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTcxNTM9dGNwX3Jjdl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTcyMjctXFx0fVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjcyMjg6XFx0aWYgKCF0Y3BfdmFsaWRhdGVfaW5jb21pbmcoc2ssIHNrYiwgdGgsIDApKVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTcyMjktXFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjE0OjIwLjI3MDQzMjc2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc0NTI2NTA1NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgUmVhc29uaW5nIG9uIEluY2x1ZGluZyBGdW5jdGlvbnMgaW4gdGhlIFJldmlldyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB3aGljaCBmdW5jdGlvbnMgdG8gaW5jbHVkZSBpbiB0aGlzIHJldmlldy4gYHRjcF92YWxpZGF0ZV9pbmNvbWluZ2AgZ2V0cyBjYWxsZWQgZnJvbSBib3RoIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBhbmQgYHRjcF9yY3Zfc3RhdGVfcHJvY2Vzc2AuIEl0J3MgYSBkZWNlbnQtc2l6ZWQgZnVuY3Rpb24gYW5kIGNhbGxlZCBmcm9tIG11bHRpcGxlIHBsYWNlcywgc28gdGhlIGNvbXBpbGVyICptaWdodCogbm90IGlubGluZSBpdCwgb3IgYXQgbGVhc3Qga2VlcCBhIHN5bWJvbCBhcm91bmQgZm9yIGl0LiBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAsIG9uIHRoZSBvdGhlciBoYW5kLCBpcyBkZWZpbml0ZWx5IG5vbi1zdGF0aWMgYW5kICpoYXMqIGEgc3ltYm9sLiBUaGUgcXVlc3Rpb24gaXMsIHNob3VsZCBJIGxpc3QgYm90aCwgb3IganVzdCBgdGNwX3Jjdl9lc3RhYmxpc2hlZGA/XG5cbldhaXQgYSBtaW51dGUsIHRoZSBpbnN0cnVjdGlvbnMuIFRoZSBpbnN0cnVjdGlvbnMgY2xlYXJseSBzdGF0ZSB0aGF0IEkgbmVlZCB0byBsaXN0IGZ1bmN0aW9ucyB0aGF0IGVpdGhlciBpbXBsZW1lbnQgdGhlIGFsdGVyZWQgbG9naWMgZGlyZWN0bHksIG9yIGFyZSBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzLiBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAgaXMgKmV4YWN0bHkqIHRoZSBmdW5jdGlvbiB0aGF0J3MgYmVlbiBhbHRlcmVkLiBJbmNsdWRpbmcgYm90aCBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAgYW5kIGB0Y3BfdmFsaWRhdGVfaW5jb21pbmdgIHNlZW1zIHZlcnkgZm9jdXNlZCBhbmQgdGFyZ2V0ZWQuIEkgc2hvdWxkIGRlZmluaXRlbHkgaW5jbHVkZSBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAuXG5cbkJ1dCBsZXQgbWUgcXVpY2tseSBjaGVjayBpZiBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAgaXMgbGlrZSwgKnViaXF1aXRvdXMqLiBJcyBpdCBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5dGhpbmcgdGhhdCBydW5zIHVuZGVyIHN5emthbGxlcj8gTm8uIFN5emthbGxlciBydW5zIHN5c2NhbGxzIGFjcm9zcyBhbGwgc3Vic3lzdGVtczogdmZzLCBtbSwgYnBmLCB1c2IsIG5ldCwgZXRjLiBUQ1AgcGFja2V0IHJlY2VpdmUgb25seSBleGVjdXRlcyB3aGVuIFRDUCBuZXR3b3JrIHBhY2tldHMgYXJlIHByb2Nlc3NlZCBieSBhIFRDUCBzb2NrZXQgaW4gRVNUQUJMSVNIRUQgc3RhdGUuIFRoYXQncyBub3QgbGlrZSBtZW1vcnkgYWxsb2NhdG9ycywgbXV0ZXhlcywgcGFnZSBmYXVsdHMsIG9yIG90aGVyIHN1Y2ggZnVuZGFtZW50YWwsIHdpZGVseS11c2VkIHRoaW5ncy4gU28sIGl0J3MgcHJldHR5IHRhcmdldGVkLlxuXG5MZXQncyBjaGVjayBgV29ydGhGdXp6aW5nYCBuZXh0LCBpdCBpcywgaW4gZmFjdCwgYFdvcnRoRnV6emluZzogdHJ1ZWAuIFRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGBbXCJJTkVUXCJdYCB3aGljaCBpcyB3aGF0IGlzIGV4cGVjdGVkLiBUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIGBbXCJ0Y3BfcmN2X2VzdGFibGlzaGVkXCIsIFwidGNwX3ZhbGlkYXRlX2luY29taW5nXCJdYCBzbyB0aGF0J3MgZ29vZC5cblxuT2theSwgbGV0J3MgbmFpbCBkb3duIGEgcmVhbGx5IGNsZWFyIHN1bW1hcnkgc3RhdGVtZW50IGZvciB0aGlzLiBIZXJlJ3Mgd2hhdCBJJ3ZlIGdvdDpcblxuXCJUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgVENQIGZhc3QtcGF0aCBoZWFkZXIgcHJlZGljdGlvbiBjaGVjayBpbiBgdGNwX3Jjdl9lc3RhYmxpc2hlZCgpYCB0byBlbnN1cmUgaW5jb21pbmcgQUNLIHNlcXVlbmNlIG51bWJlcnMgYXJlIHdpdGhpbiBgW1NORC5VTkEsIFNORC5OWFRdYC4gUGFja2V0cyBjYXJyeWluZyBvbGQgQUNLcyBub3cgZmFsbCBiYWNrIHRvIHRoZSBzbG93IHBhdGggKGB0Y3BfdmFsaWRhdGVfaW5jb21pbmcoKWApLCBtaXRpZ2F0aW5nIGJsaW5kIGRhdGEgaW5qZWN0aW9uIGF0dGFja3MgcGVyIFJGQyA1OTYxLiBUaGlzIG1vZGlmaWVzIGNvcmUgVENQIGluY29taW5nIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgbmV0d29yayBmdXp6aW5nIHdpdGggVENQIHNvY2tldHMuXCJcblxuVGhhdCBzaG91bGQgYmUgZ29vZC4gVGltZSB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQ1MSwiT3V0cHV0VG9rZW5zIjoxMzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6MTQ6MjcuNzIzMDg2OTU4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzIyNTM5MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3BfcmN2X2VzdGFibGlzaGVkXCIsXG4gICAgXCJ0Y3BfdmFsaWRhdGVfaW5jb21pbmdcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhbHRlcnMgdGhlIGZhc3QtcGF0aCBoZWFkZXIgcHJlZGljdGlvbiBjb25kaXRpb24gaW4gdGNwX3Jjdl9lc3RhYmxpc2hlZCgpIHRvIHJlcXVpcmUgdGhlIEFDSyBzZXF1ZW5jZSBudW1iZXIgdG8gZmFsbCBiZXR3ZWVuIFNORC5VTkEgYW5kIFNORC5OWFQuIFNlZ21lbnRzIHdpdGggb2xkIEFDS3MgYXJlIG5vdyByZWRpcmVjdGVkIHRvIHRoZSBzbG93IHBhdGggKHRjcF92YWxpZGF0ZV9pbmNvbWluZygpKSB0byBwcmV2ZW50IFJGQyA1OTYxIGJsaW5kIGRhdGEgaW5qZWN0aW9uLiBUaGlzIGFsdGVycyBjb3JlIFRDUCByZWNlaXZlIGxvZ2ljIGFuZCBpcyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIFRDUCBzb2NrZXQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX3Jjdl9lc3RhYmxpc2hlZFwiLFxuICAgIFwidGNwX3ZhbGlkYXRlX2luY29taW5nXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWx0ZXJzIHRoZSBmYXN0LXBhdGggaGVhZGVyIHByZWRpY3Rpb24gY29uZGl0aW9uIGluIHRjcF9yY3ZfZXN0YWJsaXNoZWQoKSB0byByZXF1aXJlIHRoZSBBQ0sgc2VxdWVuY2UgbnVtYmVyIHRvIGZhbGwgYmV0d2VlbiBTTkQuVU5BIGFuZCBTTkQuTlhULiBTZWdtZW50cyB3aXRoIG9sZCBBQ0tzIGFyZSBub3cgcmVkaXJlY3RlZCB0byB0aGUgc2xvdyBwYXRoICh0Y3BfdmFsaWRhdGVfaW5jb21pbmcoKSkgdG8gcHJldmVudCBSRkMgNTk2MSBibGluZCBkYXRhIGluamVjdGlvbi4gVGhpcyBhbHRlcnMgY29yZSBUQ1AgcmVjZWl2ZSBsb2dpYyBhbmQgaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBUQ1Agc29ja2V0IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjE0OjI3Ljc5NTM0Nzc0NloiLCJTZXEiOjM1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzIzMTk0NDg5MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDoxNDoyNy43OTU3NTc4MTZaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMjMxOTAzNDE0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGNwX3Jjdl9lc3RhYmxpc2hlZCgpIHRvIHJlcXVpcmUgdGhlIGluY29taW5nIEFDSyBzZXF1ZW5jZSBudW1iZXIgdG8gYmUgd2l0aGluIFtTTkQuVU5BLCBTTkQuTlhUXSB2aWEgYmV0d2VlbihUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZWFja19zZXEsIHRwLVxcdTAwM2VzbmRfdW5hLCB0cC1cXHUwMDNlc25kX254dCkgYmVmb3JlIHRha2luZyB0aGUgVENQIGZhc3QgcGF0aCwgZGl2ZXJ0aW5nIHBhY2tldHMgd2l0aCBvbGQgQUNLcyB0byB0aGUgc2xvdyBwYXRoIGZvciBwcm9wZXIgUkZDIDU5NjEgdmFsaWRhdGlvbi5cXG5cXG5BbGwgdmFyaWFibGVzIGludm9sdmVkIChUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZWFja19zZXEsIHRwLVxcdTAwM2VzbmRfdW5hLCB0cC1cXHUwMDNlc25kX254dCkgYXJlIGluaXRpYWxpemVkIHUzMiB2YWx1ZXMuIFRoZSBwYXRjaCBkb2VzIG5vdCBhbGxvY2F0ZSBtZW1vcnksIGFsdGVyIGJ1ZmZlciBzaXplcywgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYjMxOTgzM2EwZjA1MzNkYjdmOGQ2OGEyMjYwMjBkZTI5MDdjNWU2YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDE0IDEwOjEyOjQ4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lucHV0LmMgYi9uZXQvaXB2NC90Y3BfaW5wdXQuY1xuaW5kZXggZGFmZjkzZDUxMzQyOC4uMDNkMzE3YTU4MTMyNCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9pbnB1dC5jXG4rKysgYi9uZXQvaXB2NC90Y3BfaW5wdXQuY1xuQEAgLTY0OTAsNiArNjQ5MCw3IEBAIHN0YXRpYyBib29sIHRjcF92YWxpZGF0ZV9pbmNvbWluZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gICpcdCAgb3IgcHVyZSByZWNlaXZlcnMgKHRoaXMgbWVhbnMgZWl0aGVyIHRoZSBzZXF1ZW5jZSBudW1iZXIgb3IgdGhlIGFja1xuICAqXHQgIHZhbHVlIG11c3Qgc3RheSBjb25zdGFudClcbiAgKlx0LSBVbmV4cGVjdGVkIFRDUCBvcHRpb24uXG4rICpcdC0gQUNLIHNlcXVlbmNlIG51bWJlciBpcyBvdXRzaWRlIFtTTkQuVU5BLCBTTkQuTlhUXS5cbiAgKlxuICAqXHRXaGVuIHRoZXNlIGNvbmRpdGlvbnMgYXJlIG5vdCBzYXRpc2ZpZWQgaXQgZHJvcHMgaW50byBhIHN0YW5kYXJkXG4gICpcdHJlY2VpdmUgcHJvY2VkdXJlIHBhdHRlcm5lZCBhZnRlciBSRkM3OTMgdG8gaGFuZGxlIGFsbCBjYXNlcy5cbkBAIC02NTM5LDcgKzY1NDAsNyBAQCB2b2lkIHRjcF9yY3ZfZXN0YWJsaXNoZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0aWYgKCh0Y3BfZmxhZ193b3JkKHRoKSBcdTAwMjYgVENQX0hQX0JJVFMpID09IHRwLVx1MDAzZXByZWRfZmxhZ3MgXHUwMDI2XHUwMDI2XG4gXHQgICAgVENQX1NLQl9DQihza2IpLVx1MDAzZXNlcSA9PSB0cC1cdTAwM2VyY3Zfbnh0IFx1MDAyNlx1MDAyNlxuLVx0ICAgICFhZnRlcihUQ1BfU0tCX0NCKHNrYiktXHUwMDNlYWNrX3NlcSwgdHAtXHUwMDNlc25kX254dCkpIHtcbitcdCAgICBiZXR3ZWVuKFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VhY2tfc2VxLCB0cC1cdTAwM2VzbmRfdW5hLCB0cC1cdTAwM2VzbmRfbnh0KSkge1xuIFx0XHRpbnQgdGNwX2hlYWRlcl9sZW4gPSB0cC1cdTAwM2V0Y3BfaGVhZGVyX2xlbjtcbiBcdFx0czMyIGRlbHRhID0gMDtcbiBcdFx0aW50IGZsYWcgPSAwO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9wYWNrZXRkcmlsbC90Y3BfcmZjNTk2MV9yZWplY3Qtb2xkLWFjay5wa3QgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcGFja2V0ZHJpbGwvdGNwX3JmYzU5NjFfcmVqZWN0LW9sZC1hY2sucGt0XG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMzJkZDlkZTFkMzY2MlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3BhY2tldGRyaWxsL3RjcF9yZmM1OTYxX3JlamVjdC1vbGQtYWNrLnBrdFxuQEAgLTAsMCArMSwyOSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rYC4vZGVmYXVsdHMuc2hcbitzeXNjdGwgLXEgbmV0LmlwdjQudGNwX2ludmFsaWRfcmF0ZWxpbWl0PTBcbitgXG4rXG4rLy8gVGVzdCByZWplY3Rpb24gb2YgZGF0YSBzZWdtZW50cyBjYXJyeWluZyBleGNlc3NpdmVseSBvbGQgQUNLc1xuK1xuKzAgc29ja2V0KC4uLiwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQKSA9IDNcbisrMCBzZXRzb2Nrb3B0KDMsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgWzFdLCA0KSA9IDBcbisrMCBiaW5kKDMsIC4uLiwgLi4uKSA9IDBcbisrMCBsaXN0ZW4oMywgMTAyNCkgPSAwXG4rXG4rLy8gLS0tLS0tLS0tLS0tLS0tLSBIYW5kc2hha2UgLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuKyswIFx1MDAzYyBTIDA6MCgwKSB3aW4gNjU1MzVcbisrMCBcdTAwM2UgUy4gMDowKDApIGFjayAxIFx1MDAzYy4uLlx1MDAzZVxuKyswIFx1MDAzYyAuIDE6MSgwKSBhY2sgMSB3aW4gNjU1MzVcbisrMCBhY2NlcHQoMywgLi4uLCAuLi4pID0gNFxuK1xuKy8vIFBvcHVsYXRlIHJlY2VpdmUgbWVtb3J5IHNvIHRoZSBmb2xsb3dpbmcgc2VnbWVudCBjYW4gdXNlXG4rLy8gaGVhZGVyIHByZWRpY3Rpb24uXG4rKzAgXHUwMDNjIFAuIDE6NTAxKDUwMCkgYWNrIDEgd2luIDY1NTM1XG4rKzAgXHUwMDNlIC4gMToxKDApIGFjayA1MDFcbitcbisvLyBTZW5kIGFuIGluLXNlcXVlbmNlIGRhdGEgc2VnbWVudCBjYXJyeWluZyBhbiBleGNlc3NpdmVseSBvbGQgQUNLLlxuKyswIFx1MDAzYyBQLiA1MDE6MTUwMSgxMDAwKSBhY2sgMjc5NDk2NzM5NyB3aW4gNjU1MzVcbitcbisvLyBDaGFsbGVuZ2UgQUNLOyBSQ1YuTlhUIG11c3QgcmVtYWluIDUwMS5cbisrMCBcdTAwM2UgLiAxOjEoMCkgYWNrIDUwMVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6MTQ6MjcuNzk1NzU4NzE2WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU3MjY3NjA5MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVENQIElucHV0IFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhdGNoIHRvIGBuZXQvaXB2NC90Y3BfaW5wdXQuY2AuIEl0J3MgYSBmYWlybHkgZm9jdXNlZCBjaGFuZ2UsIHdoaWNoIGlzIHVzdWFsbHkgYSBnb29kIHNpZ24uIExvb2tzIGxpa2UgdGhleSBhcmUgYWRkaW5nIGEgbmV3IGNvbmRpdGlvbiB0byB0aGUgYHRjcF92YWxpZGF0ZV9pbmNvbWluZ2AgZnVuY3Rpb24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZXkgYXJlIGJlaW5nIG1vcmUgc3RyaW5nZW50IGFib3V0IHZhbGlkYXRpbmcgaW5jb21pbmcgQUNLcy5cblxuVGhlIHBhdGNoIGl0c2VsZiBtb2RpZmllcyB0aGUgdmFsaWRhdGlvbiBsb2dpYywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0aGF0IHByZXZpb3VzbHksIGFuIEFDSyB3YXMgYWNjZXB0ZWQgaWYgaXQgd2Fzbid0ICphZnRlciogYHNuZF9ueHRgLiBOb3csIHRoZSBjb25kaXRpb24gaXMgYGJldHdlZW4oVENQX1NLQl9DQihza2IpLVx1MDAzZWFja19zZXEsIHRwLVx1MDAzZXNuZF91bmEsIHRwLVx1MDAzZXNuZF9ueHQpYC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQncyBlbmZvcmNpbmcgdGhhdCB0aGUgQUNLIHNlcXVlbmNlIG51bWJlciBtdXN0IGZhbGwgd2l0aGluIHRoZSBleHBlY3RlZCB3aW5kb3cgLSBgc25kX3VuYWAgdG8gYHNuZF9ueHRgLiAgVGhpcyBpcyBhIGdvb2QgaW1wcm92ZW1lbnQ7IGl0IHByZXZlbnRzIGEgdnVsbmVyYWJpbGl0eSB3aGVyZSBhbiBvbGQgQUNLIHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgd2luZG93LCBidXQgbm90IFwiYWZ0ZXJcIiBgc25kX254dGAgbWlnaHQgYmUgYWNjZXB0ZWQsIHdoaWNoIGNvdWxkIGJlIGV4cGxvaXRlZC5cblxuVGhlIG5ldyBjb25kaXRpb24gbG9va3MgbGlrZSBpdCBpcyBhZGRyZXNzaW5nIGEgY2FzZSB3aGVyZSBhbiBBQ0sgc2VxdWVuY2UgbnVtYmVyIG1pZ2h0IGZhbGwgb3V0c2lkZSBvZiB0aGUgdmFsaWQgd2luZG93LiBUaGlzIGlzIGdvb2QgYmVjYXVzZSBpdCBleHBsaWNpdGx5IHByZXZlbnRzIHRoYXQuXG5cblRoZSBwcmVzZW5jZSBvZiB0aGUgcGFja2V0ZHJpbGwgdGVzdCwgYHRjcF9yZmM1OTYxX3JlamVjdC1vbGQtYWNrLnBrdGAsIGlzIGFsc28gdGVsbGluZy4gVGhpcyBpcyBsaWtlbHkgYW4gaW50ZWdyYXRpb24gdGVzdCBkZXNpZ25lZCB0byBjb25maXJtIHRoYXQgdGhpcyBuZXcgdmFsaWRhdGlvbiBsb2dpYyAqY29ycmVjdGx5KiByZWplY3RzIG9sZCBvciBvdXQtb2Ytd2luZG93IEFDS3MuIFRoYXQncyBwcmVjaXNlbHkgd2hhdCBJJ2QgZXhwZWN0OyBpdCdzIGNydWNpYWwgdG8gaGF2ZSBhIHRlc3QgY2FzZSBmb3IgdGhpcyB0eXBlIG9mIGNoYW5nZS4gVGhpcyBwYXRjaCBpcyBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSBSRkMgNTk2MS4gVGhpcyBpcyBhIGdvb2QgaW1wcm92ZW1lbnQgdG8gbWFrZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgxMCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjE0OjMzLjUyMjUyMTk3MVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDMzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdGNwX2lucHV0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjUzMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjUzMDpcXHRcXHR0cC1cXHUwMDNlcnhfb3B0LmFjY2VjbiA9IDA7XFxuNjUzMTpcXHRcXG42NTMyOlxcdFxcdC8qXFx0cHJlZF9mbGFncyBpcyAweFM/MTAgXFx1MDAzY1xcdTAwM2MgMTYgKyBzbmRfd25kXFxuNjUzMzpcXHRcXHQgKlxcdGlmIGhlYWRlcl9wcmVkaWN0aW9uIGlzIHRvIGJlIG1hZGVcXG42NTM0OlxcdFxcdCAqXFx0J1MnIHdpbGwgYWx3YXlzIGJlIHRwLVxcdTAwM2V0Y3BfaGVhZGVyX2xlbiBcXHUwMDNlXFx1MDAzZSAyXFxuNjUzNTpcXHRcXHQgKlxcdCc/JyB3aWxsIGJlIDAgZm9yIHRoZSBmYXN0IHBhdGgsIG90aGVyd2lzZSBwcmVkX2ZsYWdzIGlzIDAgdG9cXG42NTM2OlxcdFxcdCAqICB0dXJuIGl0IG9mZlxcdCh3aGVuIHRoZXJlIGFyZSBob2xlcyBpbiB0aGUgcmVjZWl2ZVxcbjY1Mzc6XFx0XFx0ICpcXHQgc3BhY2UgZm9yIGluc3RhbmNlKVxcbjY1Mzg6XFx0XFx0ICpcXHRQU0ggZmxhZyBpcyBpZ25vcmVkLlxcbjY1Mzk6XFx0XFx0ICovXFxuNjU0MDpcXHRcXG42NTQxOlxcdFxcdGlmICgodGNwX2ZsYWdfd29yZCh0aCkgXFx1MDAyNiBUQ1BfSFBfQklUUykgPT0gdHAtXFx1MDAzZXByZWRfZmxhZ3MgXFx1MDAyNlxcdTAwMjZcXG42NTQyOlxcdFxcdCAgICBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZXNlcSA9PSB0cC1cXHUwMDNlcmN2X254dCBcXHUwMDI2XFx1MDAyNlxcbjY1NDM6XFx0XFx0ICAgIGJldHdlZW4oVENQX1NLQl9DQihza2IpLVxcdTAwM2VhY2tfc2VxLCB0cC1cXHUwMDNlc25kX3VuYSwgdHAtXFx1MDAzZXNuZF9ueHQpKSB7XFxuNjU0NDpcXHRcXHRcXHRpbnQgdGNwX2hlYWRlcl9sZW4gPSB0cC1cXHUwMDNldGNwX2hlYWRlcl9sZW47XFxuNjU0NTpcXHRcXHRcXHRzMzIgZGVsdGEgPSAwO1xcbjY1NDY6XFx0XFx0XFx0aW50IGZsYWcgPSAwO1xcbjY1NDc6XFx0XFxuNjU0ODpcXHRcXHRcXHQvKiBUaW1lc3RhbXAgaGVhZGVyIHByZWRpY3Rpb246IHRjcF9oZWFkZXJfbGVuXFxuNjU0OTpcXHRcXHRcXHQgKiBpcyBhdXRvbWF0aWNhbGx5IGVxdWFsIHRvIHRoLVxcdTAwM2Vkb2ZmKjQgZHVlIHRvIHByZWRfZmxhZ3NcXG42NTUwOlxcdFxcdFxcdCAqIG1hdGNoLlxcbjY1NTE6XFx0XFx0XFx0ICovXFxuNjU1MjpcXHRcXG42NTUzOlxcdFxcdFxcdC8qIENoZWNrIHRpbWVzdGFtcCAqL1xcbjY1NTQ6XFx0XFx0XFx0aWYgKHRjcF9oZWFkZXJfbGVuID09IHNpemVvZihzdHJ1Y3QgdGNwaGRyKSArIFRDUE9MRU5fVFNUQU1QX0FMSUdORUQpIHtcXG42NTU1OlxcdFxcdFxcdFxcdC8qIE5vPyBTbG93IHBhdGghICovXFxuNjU1NjpcXHRcXHRcXHRcXHRpZiAoIXRjcF9wYXJzZV9hbGlnbmVkX3RpbWVzdGFtcCh0cCwgdGgpKVxcbjY1NTc6XFx0XFx0XFx0XFx0XFx0Z290byBzbG93X3BhdGg7XFxuNjU1ODpcXHRcXG42NTU5OlxcdFxcdFxcdFxcdGRlbHRhID0gdHAtXFx1MDAzZXJ4X29wdC5yY3ZfdHN2YWwgLVxcbjY1NjA6XFx0XFx0XFx0XFx0XFx0dHAtXFx1MDAzZXJ4X29wdC50c19yZWNlbnQ7XFxuNjU2MTpcXHRcXHRcXHRcXHQvKiBJZiBQQVdTIGZhaWxlZCwgY2hlY2sgaXQgbW9yZSBjYXJlZnVsbHkgaW4gc2xvdyBwYXRoICovXFxuNjU2MjpcXHRcXHRcXHRcXHRpZiAoZGVsdGEgXFx1MDAzYyAwKVxcbjY1NjM6XFx0XFx0XFx0XFx0XFx0Z290byBzbG93X3BhdGg7XFxuNjU2NDpcXHRcXG42NTY1OlxcdFxcdFxcdFxcdC8qIERPIE5PVCB1cGRhdGUgdHNfcmVjZW50IGhlcmUsIGlmIGNoZWNrc3VtIGZhaWxzXFxuNjU2NjpcXHRcXHRcXHRcXHQgKiBhbmQgdGltZXN0YW1wIHdhcyBjb3JydXB0ZWQgcGFydCwgaXQgd2lsbCByZXN1bHRcXG42NTY3OlxcdFxcdFxcdFxcdCAqIGluIGEgaHVuZyBjb25uZWN0aW9uIHNpbmNlIHdlIHdpbGwgZHJvcCBhbGxcXG42NTY4OlxcdFxcdFxcdFxcdCAqIGZ1dHVyZSBwYWNrZXRzIGR1ZSB0byB0aGUgUEFXUyB0ZXN0LlxcbjY1Njk6XFx0XFx0XFx0XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjE0OjMzLjUyMjk2NzIwMVoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0NTk3NjU2OTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqRGl2aW5nIERlZXAgaW50byB0aGUgJ1Nsb3cgUGF0aCcqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBhc3N1bXB0aW9uIOKAkyB0aGUgXCJmYXN0IHBhdGhcIiDigJMgZGlkbid0IHBhbiBvdXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBhbHRlcm5hdGl2ZSByb3V0ZS4gSWYgdGhlIHN5c3RlbSBpcyBub3QgdGFraW5nIHRoZSBvcHRpbWl6ZWQgZXhlY3V0aW9uLCBJIG5lZWQgdG8ga25vdyB3aHkuIFRoYXQgbGVhZHMgbWUgdG8gYHNsb3dfcGF0aGAuIE5vdywgSSB3YW50IHRvIHplcm8gaW4gb24gd2hhdCdzIGFjdHVhbGx5IGhhcHBlbmluZyB3aGVuIHRoaW5ncyBhcmVuJ3QgcnVubmluZyBhcyBleHBlY3RlZC4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgbGluZXMgNjU3MCB0aHJvdWdoIDY2NDAuIFRoYXQgYmxvY2sgaXMgd2hlcmUgdGhlIGNvZGUgZGV2aWF0ZXMgZnJvbSB0aGUgZmFzdCByb3V0ZSwgYW5kIHRoYXQncyB3aGVyZSB0aGUgY3JpdGljYWwgcHJvYmxlbSBtaWdodCBiZSBoaWRpbmcuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBzdGFydCBpbnZlc3RpZ2F0aW5nIHRoYXQgcGFydGljdWxhciBzZWN0aW9uIG9mIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MTUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjE0OjM4LjEyMDYyNzA4WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxOTg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3BfaW5wdXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NTcwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2NTcwOlxcdFxcdFxcdH1cXG42NTcxOlxcdFxcbjY1NzI6XFx0XFx0XFx0aWYgKGxlbiBcXHUwMDNjPSB0Y3BfaGVhZGVyX2xlbikge1xcbjY1NzM6XFx0XFx0XFx0XFx0LyogQnVsayBkYXRhIHRyYW5zZmVyOiBzZW5kZXIgKi9cXG42NTc0OlxcdFxcdFxcdFxcdGlmIChsZW4gPT0gdGNwX2hlYWRlcl9sZW4pIHtcXG42NTc1OlxcdFxcdFxcdFxcdFxcdC8qIFByZWRpY3RlZCBwYWNrZXQgaXMgaW4gd2luZG93IGJ5IGRlZmluaXRpb24uXFxuNjU3NjpcXHRcXHRcXHRcXHRcXHQgKiBzZXEgPT0gcmN2X254dCBhbmQgcmN2X3d1cCBcXHUwMDNjPSByY3Zfbnh0LlxcbjY1Nzc6XFx0XFx0XFx0XFx0XFx0ICogSGVuY2UsIGNoZWNrIHNlcVxcdTAwM2M9cmN2X3d1cCByZWR1Y2VzIHRvOlxcbjY1Nzg6XFx0XFx0XFx0XFx0XFx0ICovXFxuNjU3OTpcXHRcXHRcXHRcXHRcXHRpZiAodGNwX2hlYWRlcl9sZW4gPT1cXG42NTgwOlxcdFxcdFxcdFxcdFxcdCAgICAoc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpICsgVENQT0xFTl9UU1RBTVBfQUxJR05FRCkgXFx1MDAyNlxcdTAwMjZcXG42NTgxOlxcdFxcdFxcdFxcdFxcdCAgICB0cC1cXHUwMDNlcmN2X254dCA9PSB0cC1cXHUwMDNlcmN2X3d1cClcXG42NTgyOlxcdFxcdFxcdFxcdFxcdFxcdGZsYWcgfD0gX190Y3BfcmVwbGFjZV90c19yZWNlbnQodHAsXFxuNjU4MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRkZWx0YSk7XFxuNjU4NDpcXHRcXG42NTg1OlxcdFxcdFxcdFxcdFxcdHRjcF9lY25fcmVjZWl2ZWRfY291bnRlcnMoc2ssIHNrYiwgMCk7XFxuNjU4NjpcXHRcXG42NTg3OlxcdFxcdFxcdFxcdFxcdC8qIFdlIGtub3cgdGhhdCBzdWNoIHBhY2tldHMgYXJlIGNoZWNrc3VtbWVkXFxuNjU4ODpcXHRcXHRcXHRcXHRcXHQgKiBvbiBlbnRyeS5cXG42NTg5OlxcdFxcdFxcdFxcdFxcdCAqL1xcbjY1OTA6XFx0XFx0XFx0XFx0XFx0dGNwX2Fjayhzaywgc2tiLCBmbGFnKTtcXG42NTkxOlxcdFxcdFxcdFxcdFxcdF9fa2ZyZWVfc2tiKHNrYik7XFxuNjU5MjpcXHRcXHRcXHRcXHRcXHR0Y3BfZGF0YV9zbmRfY2hlY2soc2spO1xcbjY1OTM6XFx0XFx0XFx0XFx0XFx0LyogV2hlbiByZWNlaXZpbmcgcHVyZSBhY2sgaW4gZmFzdCBwYXRoLCB1cGRhdGVcXG42NTk0OlxcdFxcdFxcdFxcdFxcdCAqIGxhc3QgdHMgZWNyIGRpcmVjdGx5IGluc3RlYWQgb2YgY2FsbGluZ1xcbjY1OTU6XFx0XFx0XFx0XFx0XFx0ICogdGNwX3Jjdl9ydHRfbWVhc3VyZV90cygpXFxuNjU5NjpcXHRcXHRcXHRcXHRcXHQgKi9cXG42NTk3OlxcdFxcdFxcdFxcdFxcdHRwLVxcdTAwM2VyY3ZfcnR0X2xhc3RfdHNlY3IgPSB0cC1cXHUwMDNlcnhfb3B0LnJjdl90c2VjcjtcXG42NTk4OlxcdFxcdFxcdFxcdFxcdHJldHVybjtcXG42NTk5OlxcdFxcdFxcdFxcdH0gZWxzZSB7IC8qIEhlYWRlciB0b28gc21hbGwgKi9cXG42NjAwOlxcdFxcdFxcdFxcdFxcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9QS1RfVE9PX1NNQUxMO1xcbjY2MDE6XFx0XFx0XFx0XFx0XFx0VENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIFRDUF9NSUJfSU5FUlJTKTtcXG42NjAyOlxcdFxcdFxcdFxcdFxcdGdvdG8gZGlzY2FyZDtcXG42NjAzOlxcdFxcdFxcdFxcdH1cXG42NjA0OlxcdFxcdFxcdH0gZWxzZSB7XFxuNjYwNTpcXHRcXHRcXHRcXHRpbnQgZWF0ZW4gPSAwO1xcbjY2MDY6XFx0XFx0XFx0XFx0Ym9vbCBmcmFnc3RvbGVuID0gZmFsc2U7XFxuNjYwNzpcXHRcXG42NjA4OlxcdFxcdFxcdFxcdGlmICh0Y3BfY2hlY2tzdW1fY29tcGxldGUoc2tiKSlcXG42NjA5OlxcdFxcdFxcdFxcdFxcdGdvdG8gY3N1bV9lcnJvcjtcXG42NjEwOlxcdFxcbjY2MTE6XFx0XFx0XFx0XFx0aWYgKGFmdGVyKFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNlZW5kX3NlcSxcXG42NjEyOlxcdFxcdFxcdFxcdFxcdCAgdHAtXFx1MDAzZXJjdl9ueHQgKyB0Y3BfcmVjZWl2ZV93aW5kb3codHApKSlcXG42NjEzOlxcdFxcdFxcdFxcdFxcdGdvdG8gdmFsaWRhdGU7XFxuNjYxNDpcXHRcXG42NjE1OlxcdFxcdFxcdFxcdGlmICgoaW50KXNrYi1cXHUwMDNldHJ1ZXNpemUgXFx1MDAzZSBzay1cXHUwMDNlc2tfZm9yd2FyZF9hbGxvYylcXG42NjE2OlxcdFxcdFxcdFxcdFxcdGdvdG8gc3RlcDU7XFxuNjYxNzpcXHRcXG42NjE4OlxcdFxcdFxcdFxcdC8qIFByZWRpY3RlZCBwYWNrZXQgaXMgaW4gd2luZG93IGJ5IGRlZmluaXRpb24uXFxuNjYxOTpcXHRcXHRcXHRcXHQgKiBzZXEgPT0gcmN2X254dCBhbmQgcmN2X3d1cCBcXHUwMDNjPSByY3Zfbnh0LlxcbjY2MjA6XFx0XFx0XFx0XFx0ICogSGVuY2UsIGNoZWNrIHNlcVxcdTAwM2M9cmN2X3d1cCByZWR1Y2VzIHRvOlxcbjY2MjE6XFx0XFx0XFx0XFx0ICovXFxuNjYyMjpcXHRcXHRcXHRcXHRpZiAodGNwX2hlYWRlcl9sZW4gPT1cXG42NjIzOlxcdFxcdFxcdFxcdCAgICAoc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpICsgVENQT0xFTl9UU1RBTVBfQUxJR05FRCkgXFx1MDAyNlxcdTAwMjZcXG42NjI0OlxcdFxcdFxcdFxcdCAgICB0cC1cXHUwMDNlcmN2X254dCA9PSB0cC1cXHUwMDNlcmN2X3d1cClcXG42NjI1OlxcdFxcdFxcdFxcdFxcdGZsYWcgfD0gX190Y3BfcmVwbGFjZV90c19yZWNlbnQodHAsXFxuNjYyNjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRkZWx0YSk7XFxuNjYyNzpcXHRcXG42NjI4OlxcdFxcdFxcdFxcdHRjcF9yY3ZfcnR0X21lYXN1cmVfdHMoc2ssIHNrYik7XFxuNjYyOTpcXHRcXG42NjMwOlxcdFxcdFxcdFxcdE5FVF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfVENQSFBISVRTKTtcXG42NjMxOlxcdFxcbjY2MzI6XFx0XFx0XFx0XFx0LyogQnVsayBkYXRhIHRyYW5zZmVyOiByZWNlaXZlciAqL1xcbjY2MzM6XFx0XFx0XFx0XFx0dGNwX2NsZWFudXBfc2tiKHNrYik7XFxuNjYzNDpcXHRcXHRcXHRcXHRfX3NrYl9wdWxsKHNrYiwgdGNwX2hlYWRlcl9sZW4pO1xcbjY2MzU6XFx0XFx0XFx0XFx0dGNwX2Vjbl9yZWNlaXZlZF9jb3VudGVycyhzaywgc2tiLFxcbjY2MzY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBsZW4gLSB0Y3BfaGVhZGVyX2xlbik7XFxuNjYzNzpcXHRcXHRcXHRcXHRlYXRlbiA9IHRjcF9xdWV1ZV9yY3Yoc2ssIHNrYiwgXFx1MDAyNmZyYWdzdG9sZW4pO1xcbjY2Mzg6XFx0XFxuNjYzOTpcXHRcXHRcXHRcXHR0Y3BfZXZlbnRfZGF0YV9yZWN2KHNrLCBza2IpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDoxNDozOC4xMjEwNDkxNloiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1MDM3NDgwNTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVENQIEFDSyBTZXF1ZW5jZSBWYWxpZGF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiB0aGlzIGBiZXR3ZWVuKFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VhY2tfc2VxLCB0cC1cdTAwM2VzbmRfdW5hLCB0cC1cdTAwM2VzbmRfbnh0KWAgY2hlY2suIEJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgY29kZSB1c2VkIGAhYWZ0ZXIoVENQX1NLQl9DQihza2IpLVx1MDAzZWFja19zZXEsIHRwLVx1MDAzZXNuZF9ueHQpYCwgd2hpY2ggZWZmZWN0aXZlbHkgbWVhbnMgYGFja19zZXFgIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGB0cC1cdTAwM2VzbmRfbnh0YC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBIb3dldmVyLCBJIG5lZWQgdG8gY29uc2lkZXIgYSBwb3RlbnRpYWwgaXNzdWU6IHdoYXQgaGFwcGVucyBpZiBgYWNrX3NlcWAgaXMgYWN0dWFsbHkgKmxlc3MgdGhhbiogYHRwLVx1MDAzZXNuZF91bmFgPyBXZSdyZSB0YWxraW5nIGFib3V0IGFuIFwib2xkXCIgQUNLLCBvbmUgdGhhdCBhY2tub3dsZWRnZXMgZGF0YSAqYmVmb3JlKiBvdXIgU2VuZCBVbmFja25vd2xlZGdlZCBzZXF1ZW5jZS4gUkZDIDU5NjEgYW5kIG90aGVyIFRDUCBzdGFuZGFyZHMgcHJvYmFibHkgaGF2ZSBzcGVjaWZpYyByZXF1aXJlbWVudHMgZm9yIGhhbmRsaW5nIHRoZXNlLCBwb3RlbnRpYWxseSByZWplY3RpbmcgdGhlbSBvdXRyaWdodCwgZXNwZWNpYWxseSBjaGFsbGVuZ2UgQUNLcyB0aGF0IGFyZSByaWRpY3Vsb3VzbHkgb3V0IG9mIHNlcXVlbmNlLlxuXG5UaGUgcHJvYmxlbSwgYXMgSSBzZWUgaXQsIGlzIHRoYXQgdGhlIG9yaWdpbmFsIGZhc3QgcGF0aCBsb2dpYywgYmFzZWQgb24gYCFhZnRlcihhY2tfc2VxLCBzbmRfbnh0KWAsIHdvdWxkIGluY29ycmVjdGx5IGFsbG93IHRoZXNlIG9sZCBBQ0tzIHRocm91Z2ggaWYgdGhleSB3ZXJlIGluIHRoZSByYW5nZSBvZiBgc25kX3VuYWAgdG8gYHNuZF9ueHRgLiBTaW5jZSBhbiBvbGQgQUNLIHdpbGwgaGF2ZSBgYWNrX3NlcSBcdTAwM2M9IHNuZF9ueHRgLCB0aGUgZmFzdCBwYXRoIHdvdWxkIGhhdmUgYmVlbiBtaXN0YWtlbmx5IHRyaWdnZXJlZC4gVGhpcyBpcyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5LCBzaW5jZSBkYXRhIHNlZ21lbnRzIHdpdGggdGhlc2Ugb2xkIEFDS3Mgd291bGQgYmUgcHJvY2Vzc2VkLlxuXG5Ob3csIHdpdGggdGhpcyBwYXRjaCwgdXNpbmcgYGJldHdlZW4oVENQX1NLQl9DQihza2IpLVx1MDAzZWFja19zZXEsIHRwLVx1MDAzZXNuZF91bmEsIHRwLVx1MDAzZXNuZF9ueHQpYCwgaXQncyBjbGVhciB0aGUgaW50ZW50aW9uIGlzIHRvIGNvcnJlY3QgdGhpcy4gQW4gYGFja19zZXFgIGxlc3MgdGhhbiBgdHAtXHUwMDNlc25kX3VuYWAgd2lsbCAqbm90KiBmYWxsIHdpdGhpbiB0aGlzIHJhbmdlLCB0aHVzIGF2b2lkaW5nIHRoZSBmYXN0IHBhdGguIEluc3RlYWQsIGl0IHdpbGwgZHJvcCBpbnRvIHRoZSBzbG93IHBhdGgsIHdoZXJlIGB0Y3BfdmFsaWRhdGVfaW5jb21pbmdgIGhhbmRsZXMgbW9yZSB0aG9yb3VnaCBjaGVja3MgZm9yIFJGQyA1OTYxIGNvbXBsaWFuY2UuIFRoaXMgc2VlbXMgbGlrZSBhIHNvbGlkIHNvbHV0aW9uLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gY29uZmlybSB0aGlzLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIGB0Y3BfdmFsaWRhdGVfaW5jb21pbmdgIG9yIHRoZSBzbG93IHBhdGggY29kZSB0byB2ZXJpZnkgZXhhY3RseSBob3cgUkZDIDU5NjEncyBzdGlwdWxhdGlvbnMgZm9yIG9sZCBBQ0tzIGFyZSBpbXBsZW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc4OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjE0OjQzLjE1ODUzMjkzNloiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjE5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdGNwX2lucHV0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjY1NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjY1NTpcXHRcXHRcXHRcXHR0Y3BfZGF0YV9yZWFkeShzayk7XFxuNjY1NjpcXHRcXHRcXHRcXHRyZXR1cm47XFxuNjY1NzpcXHRcXHRcXHR9XFxuNjY1ODpcXHRcXHR9XFxuNjY1OTpcXHRcXG42NjYwOlxcdHNsb3dfcGF0aDpcXG42NjYxOlxcdFxcdGlmIChsZW4gXFx1MDAzYyAodGgtXFx1MDAzZWRvZmYgXFx1MDAzY1xcdTAwM2MgMikgfHwgdGNwX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpXFxuNjY2MjpcXHRcXHRcXHRnb3RvIGNzdW1fZXJyb3I7XFxuNjY2MzpcXHRcXG42NjY0OlxcdFxcdGlmICghdGgtXFx1MDAzZWFjayBcXHUwMDI2XFx1MDAyNiAhdGgtXFx1MDAzZXJzdCBcXHUwMDI2XFx1MDAyNiAhdGgtXFx1MDAzZXN5bikge1xcbjY2NjU6XFx0XFx0XFx0cmVhc29uID0gU0tCX0RST1BfUkVBU09OX1RDUF9GTEFHUztcXG42NjY2OlxcdFxcdFxcdGdvdG8gZGlzY2FyZDtcXG42NjY3OlxcdFxcdH1cXG42NjY4OlxcdFxcbjY2Njk6XFx0XFx0LypcXG42NjcwOlxcdFxcdCAqXFx0U3RhbmRhcmQgc2xvdyBwYXRoLlxcbjY2NzE6XFx0XFx0ICovXFxuNjY3MjpcXHR2YWxpZGF0ZTpcXG42NjczOlxcdFxcdGlmICghdGNwX3ZhbGlkYXRlX2luY29taW5nKHNrLCBza2IsIHRoLCAxKSlcXG42Njc0OlxcdFxcdFxcdHJldHVybjtcXG42Njc1OlxcdFxcbjY2NzY6XFx0c3RlcDU6XFxuNjY3NzpcXHRcXHR0Y3BfZWNuX3JlY2VpdmVkX2NvdW50ZXJzX3BheWxvYWQoc2ssIHNrYik7XFxuNjY3ODpcXHRcXG42Njc5OlxcdFxcdHJlYXNvbiA9IHRjcF9hY2soc2ssIHNrYiwgRkxBR19TTE9XUEFUSCB8IEZMQUdfVVBEQVRFX1RTX1JFQ0VOVCk7XFxuNjY4MDpcXHRcXHRpZiAoKGludClyZWFzb24gXFx1MDAzYyAwKSB7XFxuNjY4MTpcXHRcXHRcXHRyZWFzb24gPSAtcmVhc29uO1xcbjY2ODI6XFx0XFx0XFx0Z290byBkaXNjYXJkO1xcbjY2ODM6XFx0XFx0fVxcbjY2ODQ6XFx0XFx0dGNwX3Jjdl9ydHRfbWVhc3VyZV90cyhzaywgc2tiKTtcXG42Njg1OlxcdFxcbjY2ODY6XFx0XFx0LyogUHJvY2VzcyB1cmdlbnQgZGF0YS4gKi9cXG42Njg3OlxcdFxcdHRjcF91cmcoc2ssIHNrYiwgdGgpO1xcbjY2ODg6XFx0XFxuNjY4OTpcXHRcXHQvKiBzdGVwIDc6IHByb2Nlc3MgdGhlIHNlZ21lbnQgdGV4dCAqL1xcbjY2OTA6XFx0XFx0dGNwX2RhdGFfcXVldWUoc2ssIHNrYik7XFxuNjY5MTpcXHRcXG42NjkyOlxcdFxcdHRjcF9kYXRhX3NuZF9jaGVjayhzayk7XFxuNjY5MzpcXHRcXHR0Y3BfYWNrX3NuZF9jaGVjayhzayk7XFxuNjY5NDpcXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjE0OjQzLjE1ODk1NzAyNloiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5MzQ5NjA3NjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRoaW5raW5nLCBleHByZXNzZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gTmV0d29yayBWYWxpZGF0aW9uKipcblxuT2theSwgc28gd2UndmUgYmVlbiBleGFtaW5pbmcgdGhlIGluY29taW5nIG5ldHdvcmsgdHJhZmZpYyB2YWxpZGF0aW9uIHJvdXRpbmVzLiBJdCdzIGNydWNpYWwsIGFuZCBJJ3ZlIGdvdCBhIHNwZWNpZmljIGFyZWEgSSB3YW50IHRvIGZvY3VzIG9uIG5vdy4gTGV0J3Mgc2hpZnQgb3VyIGF0dGVudGlvbiB0byB0aGUgYHRjcF92YWxpZGF0ZV9pbmNvbWluZ2AgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA2NDkwIGluIHRoZSByZWxldmFudCBjb2RlLiBUaGF0J3Mgd2hlcmUgSSBiZWxpZXZlIHdlIG1pZ2h0IGZpbmQgc29tZSBpbnRlcmVzdGluZyBudWFuY2VzIHRoYXQgd2FycmFudCBhIGRlZXBlciBsb29rLiBJJ20gdGhpbmtpbmcgdGhlcmUgY291bGQgYmUgc29tZSBzdWJ0bGUgdnVsbmVyYWJpbGl0aWVzIG9yIGluZWZmaWNpZW5jaWVzIGx1cmtpbmcgdGhlcmUgdGhhdCB3ZSBuZWVkIHRvIGV4cG9zZS4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTYyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQxMDoxNDo1Mi41MDg1NjcxNDdaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDAzMjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcF9pbnB1dC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY0ODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjY0ODA6XFx0ICpcXHRJdCBpcyBzcGxpdCBpbnRvIGEgZmFzdCBwYXRoIGFuZCBhIHNsb3cgcGF0aC4gVGhlIGZhc3QgcGF0aCBpc1xcbjY0ODE6XFx0ICogXFx0ZGlzYWJsZWQgd2hlbjpcXG42NDgyOlxcdCAqXFx0LSBBIHplcm8gd2luZG93IHdhcyBhbm5vdW5jZWQgZnJvbSB1cyAtIHplcm8gd2luZG93IHByb2JpbmdcXG42NDgzOlxcdCAqICAgICAgICBpcyBvbmx5IGhhbmRsZWQgcHJvcGVybHkgaW4gdGhlIHNsb3cgcGF0aC5cXG42NDg0OlxcdCAqXFx0LSBPdXQgb2Ygb3JkZXIgc2VnbWVudHMgYXJyaXZlZC5cXG42NDg1OlxcdCAqXFx0LSBVcmdlbnQgZGF0YSBpcyBleHBlY3RlZC5cXG42NDg2OlxcdCAqXFx0LSBUaGVyZSBpcyBubyBidWZmZXIgc3BhY2UgbGVmdFxcbjY0ODc6XFx0ICpcXHQtIFVuZXhwZWN0ZWQgVENQIGZsYWdzL3dpbmRvdyB2YWx1ZXMvaGVhZGVyIGxlbmd0aHMgYXJlIHJlY2VpdmVkXFxuNjQ4ODpcXHQgKlxcdCAgKGRldGVjdGVkIGJ5IGNoZWNraW5nIHRoZSBUQ1AgaGVhZGVyIGFnYWluc3QgcHJlZF9mbGFncylcXG42NDg5OlxcdCAqXFx0LSBEYXRhIGlzIHNlbnQgaW4gYm90aCBkaXJlY3Rpb25zLiBGYXN0IHBhdGggb25seSBzdXBwb3J0cyBwdXJlIHNlbmRlcnNcXG42NDkwOlxcdCAqXFx0ICBvciBwdXJlIHJlY2VpdmVycyAodGhpcyBtZWFucyBlaXRoZXIgdGhlIHNlcXVlbmNlIG51bWJlciBvciB0aGUgYWNrXFxuNjQ5MTpcXHQgKlxcdCAgdmFsdWUgbXVzdCBzdGF5IGNvbnN0YW50KVxcbjY0OTI6XFx0ICpcXHQtIFVuZXhwZWN0ZWQgVENQIG9wdGlvbi5cXG42NDkzOlxcdCAqXFx0LSBBQ0sgc2VxdWVuY2UgbnVtYmVyIGlzIG91dHNpZGUgW1NORC5VTkEsIFNORC5OWFRdLlxcbjY0OTQ6XFx0ICpcXG42NDk1OlxcdCAqXFx0V2hlbiB0aGVzZSBjb25kaXRpb25zIGFyZSBub3Qgc2F0aXNmaWVkIGl0IGRyb3BzIGludG8gYSBzdGFuZGFyZFxcbjY0OTY6XFx0ICpcXHRyZWNlaXZlIHByb2NlZHVyZSBwYXR0ZXJuZWQgYWZ0ZXIgUkZDNzkzIHRvIGhhbmRsZSBhbGwgY2FzZXMuXFxuNjQ5NzpcXHQgKlxcdFRoZSBmaXJzdCB0aHJlZSBjYXNlcyBhcmUgZ3VhcmFudGVlZCBieSBwcm9wZXIgcHJlZF9mbGFncyBzZXR0aW5nLFxcbjY0OTg6XFx0ICpcXHR0aGUgcmVzdCBpcyBjaGVja2VkIGlubGluZS4gRmFzdCBwcm9jZXNzaW5nIGlzIHR1cm5lZCBvbiBpblxcbjY0OTk6XFx0ICpcXHR0Y3BfZGF0YV9xdWV1ZSB3aGVuIGV2ZXJ5dGhpbmcgaXMgT0suXFxuNjUwMDpcXHQgKi9cXG42NTAxOlxcdHZvaWQgdGNwX3Jjdl9lc3RhYmxpc2hlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuNjUwMjpcXHR7XFxuNjUwMzpcXHRcXHRlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fTk9UX1NQRUNJRklFRDtcXG42NTA0OlxcdFxcdGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoID0gKGNvbnN0IHN0cnVjdCB0Y3BoZHIgKilza2ItXFx1MDAzZWRhdGE7XFxuNjUwNTpcXHRcXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcXG42NTA2OlxcdFxcdHVuc2lnbmVkIGludCBsZW4gPSBza2ItXFx1MDAzZWxlbjtcXG42NTA3OlxcdFxcbjY1MDg6XFx0XFx0LyogVENQIGNvbmdlc3Rpb24gd2luZG93IHRyYWNraW5nICovXFxuNjUwOTpcXHRcXHR0cmFjZV90Y3BfcHJvYmUoc2ssIHNrYik7XFxuNjUxMDpcXHRcXG42NTExOlxcdFxcdHRjcF9tc3RhbXBfcmVmcmVzaF9pbmxpbmUodHApO1xcbjY1MTI6XFx0XFx0aWYgKHVubGlrZWx5KCFyY3VfYWNjZXNzX3BvaW50ZXIoc2stXFx1MDAzZXNrX3J4X2RzdCkpKVxcbjY1MTM6XFx0XFx0XFx0aW5ldF9jc2soc2spLVxcdTAwM2VpY3NrX2FmX29wcy1cXHUwMDNlc2tfcnhfZHN0X3NldChzaywgc2tiKTtcXG42NTE0OlxcdFxcdC8qXFxuNjUxNTpcXHRcXHQgKlxcdEhlYWRlciBwcmVkaWN0aW9uLlxcbjY1MTY6XFx0XFx0ICpcXHRUaGUgY29kZSBsb29zZWx5IGZvbGxvd3MgdGhlIG9uZSBpbiB0aGUgZmFtb3VzXFxuNjUxNzpcXHRcXHQgKlxcdFxcXCIzMCBpbnN0cnVjdGlvbiBUQ1AgcmVjZWl2ZVxcXCIgVmFuIEphY29ic29uIG1haWwuXFxuNjUxODpcXHRcXHQgKlxcbjY1MTk6XFx0XFx0ICpcXHRWYW4ncyB0cmljayBpcyB0byBkZXBvc2l0IGJ1ZmZlcnMgaW50byBzb2NrZXQgcXVldWVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTRUMTA6MTQ6NTIuNTA4OTc1NDY3WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc2MDU3OTY5NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTWVtb3J5IFNhZmV0eSBBbmFseXNpcyBvZiBUQ1AgRmFzdCBQYXRoIENoYW5nZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAgY2hhbmdlIGZyb20gYSBtZW1vcnkgc2FmZXR5IHBlcnNwZWN0aXZlLiBUaGUgY29yZSBvZiBpdCByZXBsYWNlcyB0aGUgcHJldmlvdXMgY2hlY2sgZm9yIGBhY2tfc2VxYCBiZWluZyAqYWZ0ZXIqIGBzbmRfbnh0YCB3aXRoIGEgbW9yZSBwcmVjaXNlIGBiZXR3ZWVuYCBjaGVjayB0aGF0IGNvbmZpcm1zIGBhY2tfc2VxYCBmYWxscyB3aXRoaW4gdGhlIHJhbmdlIGBbc25kX3VuYSwgc25kX254dF1gLiBUaGUgYGJldHdlZW5gIG1hY3JvLCBkZWZpbmVkIGluIGBuZXQvdGNwLmhgLCBjbGV2ZXJseSB1c2VzIHVuc2lnbmVkIGludGVnZXIgYXJpdGhtZXRpYyB0byBlZmZpY2llbnRseSBkZXRlcm1pbmUgaWYgYGFja19zZXFgIGlzIHdpdGhpbiB0aGlzIHJhbmdlLlxuXG5UaGUgY3JpdGljYWwgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgbWVtb3J5IHNhZmV0eSB2dWxuZXJhYmlsaXRpZXMuIEFyZSB3ZSBsb29raW5nIGF0IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcz8gSXQncyBwcmV0dHkgY2xlYXIgdGhhdCB0aGUgYW5zd2VyIGlzIG5vLiBgYWNrX3NlcWAsIGBzbmRfdW5hYCwgYW5kIGBzbmRfbnh0YCBhcmUgYWxsIGVzdGFibGlzaGVkLCBpbml0aWFsaXplZCBzZXF1ZW5jZSBudW1iZXJzLCBzbyB3ZSBhcmVuJ3QgaW50cm9kdWNpbmcgYW55IG5ldyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhpcyBjaGVjayBhbHNvIGRvZXNuJ3QgaW52b2x2ZSBhbnkgY29weWluZyB0byB1c2Vyc3BhY2Ugb3IgYWx0ZXJhdGlvbiBvZiBidWZmZXIgbGVuZ3RocyB0aGF0IG1pZ2h0IGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEuIENyaXRpY2FsbHksIHBhY2tldHMgd2l0aCBcIm9sZFwiIEFDS3MgYXJlIHNpbXBseSBkaXZlcnRlZCB0byB0aGUgZXhpc3Rpbmcgc2xvdyBwYXRoIGZvciBzdGFuZGFyZCBwcm9jZXNzaW5nLCB3aGljaCBpcyBhbHJlYWR5IGRlc2lnbmVkIHRvIGhhbmRsZSB0aGVzZSBjYXNlcyBzYWZlbHkuIE5vIG5ldyBhbGxvY2F0aW9ucywgZGF0YSBzdHJ1Y3R1cmVzLCBvciBzdHJ1Y3QgcGFkZGluZyBhcmUgaW50cm9kdWNlZC5cblxuTm93LCBsZXQncyBjb25zaWRlciB0aGUgS01TQU4gdnMuIEtBU0FOIGltcGxpY2F0aW9ucy4gUmVtZW1iZXIsIEtNU0FOIGlzIGZvciBjYXRjaGluZyAqdW5pbml0aWFsaXplZCogbWVtb3J5IHJlYWRzLCB3aGlsZSBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQgZGVidWdnZXJzIGhhbmRsZSBpc3N1ZXMgbGlrZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgYW5kIGxvY2stcmVsYXRlZCBidWdzLiBLTVNBTiBpcyByZXNvdXJjZS1pbnRlbnNpdmUsIHNvIHdlIG9ubHkgdXNlIGl0IHdoZW4gKnVuaW5pdGlhbGl6ZWQgbWVtb3J5KiByaXNrcyBhcmUgc3BlY2lmaWNhbGx5IGludHJvZHVjZWQgb3IgZXhwb3NlZC5cblxuTG9va2luZyBhdCB0aGUgS01TQU4gY3JpdGVyaWEsIHRoaXMgcGF0Y2ggZG9lc24ndCB0cmlnZ2VyIGFueSBvZiB0aGVtOiBJdCdzIG5vdCBpbnZvbHZpbmcga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIGNvbmRpdGlvbmFsIGxvZ2ljIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZGF0YSwgYWxsb2NhdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciBhbHRlcmluZyBib3VuZHMgY2hlY2tzIGluIGEgd2F5IHRoYXQgYWxsb3dzIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIGFyZSBmdWxseSBpbml0aWFsaXplZC5cblxuVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgY2hhbmdlIHByaW1hcmlseSB0aWdodGVucyB0aGUgZmFzdCBwYXRoIGNvbmRpdGlvbiB0byBlbnN1cmUgdGhhdCB0aGUgQUNLcyBiZWluZyBwcm9jZXNzZWQgYXJlIHdpdGhpbiBhIHZhbGlkIHNlcXVlbmNlIG51bWJlciByYW5nZSAoYXMgcGVyIFJGQyA1OTYxKSwgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGl2ZWx5IGBmYWxzZWAuIFRoZSBwYXRjaCBzaW1wbHkgcmVyb3V0ZXMgb2xkZXIgQUNLcyB0byBhbiBleGlzdGluZyBzYWZlIHNsb3cgcGF0aC5cblxuU28sIEknbSBjYWxsaW5nIGBzZXQtcmVzdWx0c2Agd2l0aCBgTmVlZHNLTVNBTjogZmFsc2VgIGFuZCBwcm92aWRpbmcgYSBjbGVhciBleHBsYW5hdGlvbiBvZiB0aGlzIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDk2LCJPdXRwdXRUb2tlbnMiOjE5NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDEwOjE1OjAwLjExNDc3NDU4WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0Y3BfcmN2X2VzdGFibGlzaGVkKCkgdG8gcmVxdWlyZSB0aGUgaW5jb21pbmcgQUNLIHNlcXVlbmNlIG51bWJlciB0byBiZSB3aXRoaW4gW1NORC5VTkEsIFNORC5OWFRdIHZpYSBiZXR3ZWVuKFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNlYWNrX3NlcSwgdHAtXFx1MDAzZXNuZF91bmEsIHRwLVxcdTAwM2VzbmRfbnh0KSBiZWZvcmUgdGFraW5nIHRoZSBUQ1AgZmFzdCBwYXRoLCBkaXZlcnRpbmcgcGFja2V0cyB3aXRoIG9sZCBBQ0tzIHRvIHRoZSBzbG93IHBhdGggZm9yIHByb3BlciBSRkMgNTk2MSB2YWxpZGF0aW9uLlxcblxcbkFsbCB2YXJpYWJsZXMgaW52b2x2ZWQgKFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNlYWNrX3NlcSwgdHAtXFx1MDAzZXNuZF91bmEsIHRwLVxcdTAwM2VzbmRfbnh0KSBhcmUgaW5pdGlhbGl6ZWQgdTMyIHZhbHVlcy4gVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG1lbW9yeSwgYWx0ZXIgYnVmZmVyIHNpemVzLCBjb3B5IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0Y3BfcmN2X2VzdGFibGlzaGVkKCkgdG8gcmVxdWlyZSB0aGUgaW5jb21pbmcgQUNLIHNlcXVlbmNlIG51bWJlciB0byBiZSB3aXRoaW4gW1NORC5VTkEsIFNORC5OWFRdIHZpYSBiZXR3ZWVuKFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNlYWNrX3NlcSwgdHAtXFx1MDAzZXNuZF91bmEsIHRwLVxcdTAwM2VzbmRfbnh0KSBiZWZvcmUgdGFraW5nIHRoZSBUQ1AgZmFzdCBwYXRoLCBkaXZlcnRpbmcgcGFja2V0cyB3aXRoIG9sZCBBQ0tzIHRvIHRoZSBzbG93IHBhdGggZm9yIHByb3BlciBSRkMgNTk2MSB2YWxpZGF0aW9uLlxcblxcbkFsbCB2YXJpYWJsZXMgaW52b2x2ZWQgKFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNlYWNrX3NlcSwgdHAtXFx1MDAzZXNuZF91bmEsIHRwLVxcdTAwM2VzbmRfbnh0KSBhcmUgaW5pdGlhbGl6ZWQgdTMyIHZhbHVlcy4gVGhlIHBhdGNoIGRvZXMgbm90IGFsbG9jYXRlIG1lbW9yeSwgYWx0ZXIgYnVmZmVyIHNpemVzLCBjb3B5IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowcw5c5[1] Phase: Succeeded StartedAt: 2026-09-14 10:15:11 +0000 UTC FinishedAt: 2026-09-14 10:15:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw5c5[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-14 10:15:11 +0000 UTC FinishedAt: 2026-09-14 10:15:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw5c5[2] Phase: Succeeded StartedAt: 2026-09-14 10:15:11 +0000 UTC FinishedAt: 2026-09-14 14:08:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw5c5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_established","tcp_validate_incoming"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"5cefdd6c-24b4-452c-bf6c-f55c19f1942f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-14 10:15:11 +0000 UTC FinishedAt: 2026-09-14 14:08:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_established","tcp_validate_incoming"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"5cefdd6c-24b4-452c-bf6c-f55c19f1942f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowcw5c5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_established","tcp_validate_incoming"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"5cefdd6c-24b4-452c-bf6c-f55c19f1942f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-14 10:15:11 +0000 UTC FinishedAt: 2026-09-14 10:15:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw5c5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_established","tcp_validate_incoming"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"5cefdd6c-24b4-452c-bf6c-f55c19f1942f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-14 10:15:11 +0000 UTC FinishedAt: 2026-09-14 10:15:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowcw5c5/series-workflowcw5c5-convert-artifact-2624685954/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcw5c5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_established","tcp_validate_incoming"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"5cefdd6c-24b4-452c-bf6c-f55c19f1942f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-14 10:15:21 +0000 UTC FinishedAt: 2026-09-14 10:31:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw5c5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_established","tcp_validate_incoming"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"5cefdd6c-24b4-452c-bf6c-f55c19f1942f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-14 10:15:21 +0000 UTC FinishedAt: 2026-09-14 10:31:06 +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:*b5bfac04-09da-469d-8dcf-d8a49534596a,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-workflowcw5c5/series-workflowcw5c5-convert-artifact-2624685954/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": "962b5abe-f7f6-46bd-a5e7-785b5f0fd0fe", "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-workflowcw5c5/series-workflowcw5c5-build-action-5314112/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcw5c5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_established","tcp_validate_incoming"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"5cefdd6c-24b4-452c-bf6c-f55c19f1942f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-14 10:15:21 +0000 UTC FinishedAt: 2026-09-14 10:30:56 +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:*b5bfac04-09da-469d-8dcf-d8a49534596a,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-workflowcw5c5/series-workflowcw5c5-convert-artifact-2624685954/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": "962b5abe-f7f6-46bd-a5e7-785b5f0fd0fe", "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-workflowcw5c5/series-workflowcw5c5-build-action-5314112/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcw5c5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_established","tcp_validate_incoming"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"5cefdd6c-24b4-452c-bf6c-f55c19f1942f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-14 10:31:06 +0000 UTC FinishedAt: 2026-09-14 10:31:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw5c5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_established","tcp_validate_incoming"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"5cefdd6c-24b4-452c-bf6c-f55c19f1942f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-14 10:31:06 +0000 UTC FinishedAt: 2026-09-14 10:31:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw5c5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_established","tcp_validate_incoming"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"5cefdd6c-24b4-452c-bf6c-f55c19f1942f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-14 10:31:06 +0000 UTC FinishedAt: 2026-09-14 10:31:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw5c5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_established","tcp_validate_incoming"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"5cefdd6c-24b4-452c-bf6c-f55c19f1942f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-14 10:31:06 +0000 UTC FinishedAt: 2026-09-14 10:31:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"5cefdd6c-24b4-452c-bf6c-f55c19f1942f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowcw5c5/series-workflowcw5c5-convert-artifact-762780381/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcw5c5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_established","tcp_validate_incoming"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"5cefdd6c-24b4-452c-bf6c-f55c19f1942f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-14 10:31:18 +0000 UTC FinishedAt: 2026-09-14 10:33:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw5c5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_established","tcp_validate_incoming"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"5cefdd6c-24b4-452c-bf6c-f55c19f1942f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-14 10:31:18 +0000 UTC FinishedAt: 2026-09-14 10:33:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*962b5abe-f7f6-46bd-a5e7-785b5f0fd0fe,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-workflowcw5c5/series-workflowcw5c5-build-action-5314112/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-workflowcw5c5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_established","tcp_validate_incoming"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"5cefdd6c-24b4-452c-bf6c-f55c19f1942f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-14 10:33:25 +0000 UTC FinishedAt: 2026-09-14 10:33:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw5c5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_established","tcp_validate_incoming"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"5cefdd6c-24b4-452c-bf6c-f55c19f1942f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-14 10:33:25 +0000 UTC FinishedAt: 2026-09-14 10:33:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw5c5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_established","tcp_validate_incoming"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"5cefdd6c-24b4-452c-bf6c-f55c19f1942f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-14 10:33:25 +0000 UTC FinishedAt: 2026-09-14 10:49:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw5c5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_established","tcp_validate_incoming"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"5cefdd6c-24b4-452c-bf6c-f55c19f1942f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-14 10:33:25 +0000 UTC FinishedAt: 2026-09-14 10:49:52 +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:*b5bfac04-09da-469d-8dcf-d8a49534596a,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-workflowcw5c5/series-workflowcw5c5-convert-artifact-762780381/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": "4279302e-7343-40af-986b-d7eb0fe3750b", "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-workflowcw5c5/series-workflowcw5c5-build-action-1489787833/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcw5c5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_established","tcp_validate_incoming"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"5cefdd6c-24b4-452c-bf6c-f55c19f1942f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-14 10:33:25 +0000 UTC FinishedAt: 2026-09-14 10:49:42 +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:*b5bfac04-09da-469d-8dcf-d8a49534596a,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-workflowcw5c5/series-workflowcw5c5-convert-artifact-762780381/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": "4279302e-7343-40af-986b-d7eb0fe3750b", "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-workflowcw5c5/series-workflowcw5c5-build-action-1489787833/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcw5c5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_established","tcp_validate_incoming"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"5cefdd6c-24b4-452c-bf6c-f55c19f1942f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-14 10:49:52 +0000 UTC FinishedAt: 2026-09-14 10:49:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw5c5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_established","tcp_validate_incoming"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"5cefdd6c-24b4-452c-bf6c-f55c19f1942f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-14 10:49:52 +0000 UTC FinishedAt: 2026-09-14 10:49:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw5c5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_established","tcp_validate_incoming"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"5cefdd6c-24b4-452c-bf6c-f55c19f1942f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-14 10:49:52 +0000 UTC FinishedAt: 2026-09-14 10:51:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw5c5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_established","tcp_validate_incoming"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"5cefdd6c-24b4-452c-bf6c-f55c19f1942f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-14 10:49:52 +0000 UTC FinishedAt: 2026-09-14 10:51:47 +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:*4279302e-7343-40af-986b-d7eb0fe3750b,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-workflowcw5c5/series-workflowcw5c5-build-action-1489787833/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-workflowcw5c5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_established","tcp_validate_incoming"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"5cefdd6c-24b4-452c-bf6c-f55c19f1942f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-14 10:51:57 +0000 UTC FinishedAt: 2026-09-14 14:08:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw5c5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_established","tcp_validate_incoming"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"5cefdd6c-24b4-452c-bf6c-f55c19f1942f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-14 10:51:57 +0000 UTC FinishedAt: 2026-09-14 14:08:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_established","tcp_validate_incoming"],"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:*962b5abe-f7f6-46bd-a5e7-785b5f0fd0fe,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4279302e-7343-40af-986b-d7eb0fe3750b,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-workflowcw5c5/series-workflowcw5c5-build-action-5314112/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-workflowcw5c5/series-workflowcw5c5-build-action-1489787833/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowcw5c5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_established","tcp_validate_incoming"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"5cefdd6c-24b4-452c-bf6c-f55c19f1942f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-14 10:51:57 +0000 UTC FinishedAt: 2026-09-14 10:52:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw5c5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_established","tcp_validate_incoming"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"5cefdd6c-24b4-452c-bf6c-f55c19f1942f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-14 10:51:57 +0000 UTC FinishedAt: 2026-09-14 10:52:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_established","tcp_validate_incoming"],"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-workflowcw5c5/series-workflowcw5c5-convert-artifact-4187536994/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcw5c5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_established","tcp_validate_incoming"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"5cefdd6c-24b4-452c-bf6c-f55c19f1942f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-14 10:51:57 +0000 UTC FinishedAt: 2026-09-14 10:51:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw5c5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_established","tcp_validate_incoming"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"5cefdd6c-24b4-452c-bf6c-f55c19f1942f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-14 10:51:57 +0000 UTC FinishedAt: 2026-09-14 10:51:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw5c5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_established","tcp_validate_incoming"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"5cefdd6c-24b4-452c-bf6c-f55c19f1942f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-14 10:51:57 +0000 UTC FinishedAt: 2026-09-14 10:51:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw5c5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_established","tcp_validate_incoming"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"5cefdd6c-24b4-452c-bf6c-f55c19f1942f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-14 10:52:08 +0000 UTC FinishedAt: 2026-09-14 14:08:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcw5c5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_rcv_established","tcp_validate_incoming"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fd9beb8870736e1c6a0b2351d88a161aaeb2b326","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"5cefdd6c-24b4-452c-bf6c-f55c19f1942f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-14 10:52:08 +0000 UTC FinishedAt: 2026-09-14 14:07:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*962b5abe-f7f6-46bd-a5e7-785b5f0fd0fe,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4279302e-7343-40af-986b-d7eb0fe3750b,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-workflowcw5c5/series-workflowcw5c5-build-action-5314112/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-workflowcw5c5/series-workflowcw5c5-build-action-1489787833/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-workflowcw5c5/series-workflowcw5c5-convert-artifact-4187536994/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,}