Name: series-workflowd2hpl Phase: Succeeded StartedAt: 2026-09-10 23:57:22 +0000 UTC FinishedAt: 2026-09-11 04:33:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd2hpl[0] Phase: Succeeded StartedAt: 2026-09-10 23:57:22 +0000 UTC FinishedAt: 2026-09-11 00:45:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd2hpl[0].run-triage Phase: Succeeded StartedAt: 2026-09-10 23:57:22 +0000 UTC FinishedAt: 2026-09-11 00:45:02 +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": "2ac09b5353fe6858411fdc8c6efa60d832e20f13", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET_PSP", "TLS", "TLS_DEVICE", "NETDEVSIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2ac09b5353fe6858411fdc8c6efa60d832e20f13", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET_PSP", "TLS", "TLS_DEVICE", "NETDEVSIM" ], "series_id": "6881b4dd-0336-48dd-9f85-10be87dfd169" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "sk_has_decrypt_user", "tcp_set_ulp", "__tcp_set_ulp", "psp_sock_assoc_set_rx", "psp_nl_rx_assoc_doit" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVRfUFNQJiMzNDssCiAgICAmIzM0O1RMUyYjMzQ7LAogICAgJiMzNDtUTFNfREVWSUNFJiMzNDssCiAgICAmIzM0O05FVERFVlNJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrX2hhc19kZWNyeXB0X3VzZXImIzM0OywKICAgICYjMzQ7dGNwX3NldF91bHAmIzM0OywKICAgICYjMzQ7X190Y3Bfc2V0X3VscCYjMzQ7LAogICAgJiMzNDtwc3Bfc29ja19hc3NvY19zZXRfcngmIzM0OywKICAgICYjMzQ7cHNwX25sX3J4X2Fzc29jX2RvaXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG11dHVhbCBleGNsdXNpdml0eSBjaGVja3MgKHNrX2hhc19kZWNyeXB0X3VzZXIgYW5kIHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYikgdG8gcHJldmVudCBpbmNvbXBhdGlibGUgc29ja2V0IHN0YXRlcyB3aGVuIGNvbmZpZ3VyaW5nIFRDUCBVTFAgKGUuZy4ga1RMUykgYW5kIFBTUCAoUFNQIHNlY3VyaXR5IHByb3RvY29sKSBvbiB0aGUgc2FtZSBzb2NrZXQuIFxuXG5JdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBjb3BpZXMgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWNjZXNzIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIHNhbml0aXplcnMgbGlrZSBLQVNBTiBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgbWVtb3J5IHNhZmV0eSBvciBzdGF0ZSBtYW5hZ2VtZW50IGlzc3Vlcy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHNvY2tldCBzdGF0ZSBleGNsdXNpdml0eSBjaGVja3MgYmV0d2VlbiBQU1AgKFBTUCBTZWN1cml0eSBQcm90b2NvbCkgc29ja2V0IGFzc29jaWF0aW9ucywgVENQIFVMUCAoZS5nLiwga1RMUyksIGFuZCBzb2NrZXRzIHdpdGggdHJhbnNtaXQgdmFsaWRhdGlvbiBoYW5kbGVycyAoc2tfdmFsaWRhdGVfeG1pdF9za2IpLiBJdCBhZGRzIHNrX2hhc19kZWNyeXB0X3VzZXIoKSBhbmQgc2tfaGFzX3ZhbGlkYXRlX3htaXRfc2tiKCkgdmFsaWRhdGlvbnMgaW4gX190Y3Bfc2V0X3VscCgpIGFuZCBwc3Bfc29ja19hc3NvY19zZXRfcngoKSB0byBwcmV2ZW50IGNvbmZsaWN0aW5nIHNvY2tldCBvZmZsb2FkIHN0YXRlcy4gVGhlc2UgY29kZSBwYXRocyBhcmUgcmVhY2hhYmxlIHZpYSBUQ1Agc2V0c29ja29wdChUQ1BfVUxQKSBhbmQgUFNQIE5ldGxpbmsgY29tbWFuZHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDA6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzYjRmMjJlMWQyZTJmYjgyM2Q4MmJiNjRhMWUxOTQzNDg0NzUxMmMwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDA6NDI6NTYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc29jay5oIGIvaW5jbHVkZS9uZXQvc29jay5oXG5pbmRleCA1MTE4NTIyMmFhYzI5Li5iYTVlNTA5MmYxOTJjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvc29jay5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9zb2NrLmhcbkBAIC0yMzEyLDYgJiM0MzsyMzEyLDE3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBza19nc29fZGlzYWJsZShzdHJ1Y3Qgc29jayAqc2spXG4gXHRzay1cdTAwM2Vza19yb3V0ZV9jYXBzIFx1MDAyNj0gfk5FVElGX0ZfR1NPX01BU0s7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgc2tfaGFzX3ZhbGlkYXRlX3htaXRfc2tiKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbiYjNDM7e1xuJiM0MzsjaWZkZWYgQ09ORklHX1NPQ0tfVkFMSURBVEVfWE1JVFxuJiM0MztcdHJldHVybiAhIXNrLVx1MDAzZXNrX3ZhbGlkYXRlX3htaXRfc2tiO1xuJiM0MzsjZWxzZVxuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7I2VuZGlmXG4mIzQzO31cbiYjNDM7XG4mIzQzO2Jvb2wgc2tfaGFzX2RlY3J5cHRfdXNlcihjb25zdCBzdHJ1Y3Qgc29jayAqc2spO1xuJiM0MztcbiBzdGF0aWMgaW5saW5lIGludCBza2JfZG9fY29weV9kYXRhX25vY2FjaGUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sIGNoYXIgKnRvLFxuIFx0XHRcdFx0XHQgICBpbnQgY29weSwgaW50IG9mZnNldClcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9zb2NrLmMgYi9uZXQvY29yZS9zb2NrLmNcbmluZGV4IGZhNjBiNzQ5NGM1ODYuLjk0ODlkOWM0Nzk0OTMgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9zb2NrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NvY2suY1xuQEAgLTE0Miw2ICYjNDM7MTQyLDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvc29jay5oXHUwMDNlXG4gXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9wc3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9idXN5X3BvbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9waG9uZXQvcGhvbmV0LmhcdTAwM2VcbkBAIC0yNjcwLDYgJiM0MzsyNjcxLDEyIEBAIHZvaWQgc2tfc2V0dXBfY2FwcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoc2tfc2V0dXBfY2Fwcyk7XG4gXG4mIzQzO2Jvb2wgc2tfaGFzX2RlY3J5cHRfdXNlcihjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcHNwX3NrX2Fzc29jKHNrKSB8fFxuJiM0MztcdCAgICAgICAoc2tfaXNfaW5ldChzaykgXHUwMDI2XHUwMDI2IGluZXRfY3NrX2hhc191bHAoc2spKTsgLyogZm9yIHRscyAqL1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICpcdFNpbXBsZSByZXNvdXJjZSBtYW5hZ2VycyBmb3Igc29ja2V0cy5cbiAgKi9cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfdWxwLmMgYi9uZXQvaXB2NC90Y3BfdWxwLmNcbmluZGV4IDJhYTQ0MjEyODYzMGUuLmYzZTBjOWQzNzliYjYgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfdWxwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF91bHAuY1xuQEAgLTEzNiw2ICYjNDM7MTM2LDEwIEBAIHN0YXRpYyBpbnQgX190Y3Bfc2V0X3VscChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCB0Y3BfdWxwX29wcyAqdWxwX29wcylcbiBcdGlmIChpY3NrLVx1MDAzZWljc2tfdWxwX29wcylcbiBcdFx0Z290byBvdXRfZXJyO1xuIFxuJiM0MztcdGVyciA9IC1FSU5WQUw7XG4mIzQzO1x0aWYgKHNrX2hhc19kZWNyeXB0X3VzZXIoc2spIHx8IHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYihzaykpXG4mIzQzO1x0XHRnb3RvIG91dF9lcnI7XG4mIzQzO1xuIFx0aWYgKHNrLVx1MDAzZXNrX3NvY2tldClcbiBcdFx0Y2xlYXJfYml0KFNPQ0tfU1VQUE9SVF9aQywgXHUwMDI2c2stXHUwMDNlc2tfc29ja2V0LVx1MDAzZWZsYWdzKTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvcHNwL3BzcF9zb2NrLmMgYi9uZXQvcHNwL3BzcF9zb2NrLmNcbmluZGV4IDFhMmE2Yjc1MTZiMGYuLjUwOTAzNTYxNzg5NGEgMTAwNjQ0XG4tLS0gYS9uZXQvcHNwL3BzcF9zb2NrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9wc3AvcHNwX3NvY2suY1xuQEAgLTE0Myw2ICYjNDM7MTQzLDEwIEBAIGludCBwc3Bfc29ja19hc3NvY19zZXRfcngoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsXG4gXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7U29ja2V0IGFscmVhZHkgaGFzIFBTUCBzdGF0ZVwmIzM0Oyk7XG4gXHRcdGVyciA9IC1FQlVTWTtcbiBcdFx0Z290byBleGl0X3VubG9jaztcbiYjNDM7XHR9IGVsc2UgaWYgKHNrX2hhc19kZWNyeXB0X3VzZXIoc2spIHx8IHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYihzaykpIHtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7U29ja2V0IGhhcyBpbmNvbXBhdGlibGUgc3RhdGVcJiMzNDspO1xuJiM0MztcdFx0ZXJyID0gLUVJTlZBTDtcbiYjNDM7XHRcdGdvdG8gZXhpdF91bmxvY2s7XG4gXHR9XG4gXG4gXHRyZWZjb3VudF9pbmMoXHUwMDI2cGFzLVx1MDAzZXJlZmNudCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnXG5pbmRleCBiNjk4OWM3ZDNkOWQxLi40ODM4YWRmMjdmYTFiIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWdcbkBAIC0yMSw1ICYjNDM7MjEsNiBAQCBDT05GSUdfTkVUX1NDSF9JTkdSRVNTPXlcbiBDT05GSUdfTkVUX1NDSF9QUklPPW1cbiBDT05GSUdfUFBQPXlcbiBDT05GSUdfUFBQT0U9eVxuJiM0MztDT05GSUdfVExTPXlcbiBDT05GSUdfVkxBTl84MDIxUT1tXG4gQ09ORklHX1hEUF9TT0NLRVRTPXlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHlcbmluZGV4IDMxNTY0OGE3NzBkMDAuLjEyYjI3ZjJhM2ZhMWIgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHlcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weVxuQEAgLTIzLDYgJiM0MzsyMyw4IEBAIGZyb20gbGliLnB5IGltcG9ydCBOZXROU0VudGVyXG4gZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgcmFuZF9wb3J0LCB3YWl0X3BvcnRfbGlzdGVuXG4gZnJvbSBsaWIucHkgaW1wb3J0IGlwXG4gXG4mIzQzO1RDUF9VTFAgPSAzMVxuJiM0MztcbiBcbiBkZWYgX2dldF9vdXRxKHMpOlxuICAgICBvbmUgPSBiJiMzOTtcXDAmIzM5OyAqIDRcbkBAIC0zMzMsNiAmIzQzOzMzNSw1MCBAQCBkZWYgYXNzb2NfdmVyc2lvbl9taXNtYXRjaChjZmcpOlxuICAgICAgICAgICAgIGtzZnRfZXEodGhlX2V4Y2VwdGlvbi5ubF9tc2cuZXJyb3IsIC1lcnJuby5FSU5WQUwpXG4gXG4gXG4mIzQzO2RlZiBfcmVxdWlyZV90bHNfdWxwKCk6XG4mIzQzOyAgICB3aXRoIHNvY2tldC5jcmVhdGVfc2VydmVyKChcJiMzNDtsb2NhbGhvc3RcJiMzNDssIDApKSBhcyBzcnY6XG4mIzQzOyAgICAgICAgd2l0aCBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oc3J2LmdldHNvY2tuYW1lKCkpIGFzIHM6XG4mIzQzOyAgICAgICAgICAgIHRyeTpcbiYjNDM7ICAgICAgICAgICAgICAgIHMuc2V0c29ja29wdChzb2NrZXQuU09MX1RDUCwgVENQX1VMUCwgYlwmIzM0O3Rsc1wmIzM0OylcbiYjNDM7ICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOlxuJiM0MzsgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcJiMzNDtrVExTIG5vdCBhdmFpbGFibGVcJiMzNDspIGZyb20gZXhjXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIGFzc29jX3BzcF91bHBfZXhjbHVzaXZlKGNmZyk6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDsgVGVzdCB0aGF0IGEgVENQIFVMUCBjYW5ub3QgYmUgYXR0YWNoZWQgdG8gYSBQU1Agc29ja2V0IFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgX2luaXRfcHNwX2RldihjZmcpXG4mIzQzOyAgICBfcmVxdWlyZV90bHNfdWxwKClcbiYjNDM7XG4mIzQzOyAgICB3aXRoIF9tYWtlX2Nscl9jb25uKGNmZykgYXMgczpcbiYjNDM7ICAgICAgICB0cnk6XG4mIzQzOyAgICAgICAgICAgIGNmZy5wc3BubC5yeF9hc3NvYyh7XCYjMzQ7dmVyc2lvblwmIzM0OzogMCxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcJiMzNDtkZXYtaWRcJiMzNDs6IGNmZy5wc3BfZGV2X2lkLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwmIzM0O3NvY2stZmRcJiMzNDs6IHMuZmlsZW5vKCl9KVxuJiM0MzsgICAgICAgICAgICB3aXRoIGtzZnRfcmFpc2VzKE9TRXJyb3IpIGFzIGNtOlxuJiM0MzsgICAgICAgICAgICAgICAgcy5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfVENQLCBUQ1BfVUxQLCBiXCYjMzQ7dGxzXCYjMzQ7KVxuJiM0MzsgICAgICAgICAgICBrc2Z0X2VxKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRUlOVkFMKVxuJiM0MzsgICAgICAgIGZpbmFsbHk6XG4mIzQzOyAgICAgICAgICAgIF9jbG9zZV9jb25uKGNmZywgcylcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgYXNzb2NfdWxwX3BzcF9leGNsdXNpdmUoY2ZnKTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0OyBUZXN0IHRoYXQgYSBQU1AgYXNzb2MgY2Fubm90IGJlIGFkZGVkIHRvIGEgc29ja2V0IHdpdGggYSBUQ1AgVUxQIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgX2luaXRfcHNwX2RldihjZmcpXG4mIzQzOyAgICBfcmVxdWlyZV90bHNfdWxwKClcbiYjNDM7XG4mIzQzOyAgICB3aXRoIF9tYWtlX2Nscl9jb25uKGNmZykgYXMgczpcbiYjNDM7ICAgICAgICB0cnk6XG4mIzQzOyAgICAgICAgICAgIHMuc2V0c29ja29wdChzb2NrZXQuU09MX1RDUCwgVENQX1VMUCwgYlwmIzM0O3Rsc1wmIzM0OylcbiYjNDM7ICAgICAgICAgICAgd2l0aCBrc2Z0X3JhaXNlcyhObEVycm9yKSBhcyBjbTpcbiYjNDM7ICAgICAgICAgICAgICAgIGNmZy5wc3BubC5yeF9hc3NvYyh7XCYjMzQ7dmVyc2lvblwmIzM0OzogMCxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCYjMzQ7ZGV2LWlkXCYjMzQ7OiBjZmcucHNwX2Rldl9pZCxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCYjMzQ7c29jay1mZFwmIzM0Ozogcy5maWxlbm8oKX0pXG4mIzQzOyAgICAgICAgICAgIGtzZnRfZXEoY20uZXhjZXB0aW9uLm5sX21zZy5lcnJvciwgLWVycm5vLkVJTlZBTClcbiYjNDM7ICAgICAgICAgICAga3NmdF9lcShjbS5leGNlcHRpb24ubmxfbXNnLmV4dGFja1smIzM5O2JhZC1hdHRyJiMzOTtdLCBcJiMzNDsuc29jay1mZFwmIzM0OylcbiYjNDM7ICAgICAgICBmaW5hbGx5OlxuJiM0MzsgICAgICAgICAgICBfY2xvc2VfY29ubihjZmcsIHMpXG4mIzQzO1xuJiM0MztcbiBkZWYgYXNzb2NfdHdpY2UoY2ZnKTpcbiAgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7IFRlc3QgcmV1c2luZyBUeCBhc3NvYyBmb3IgdHdvIHNvY2tldHMgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4gICAgIF9pbml0X3BzcF9kZXYoY2ZnKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjQzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVRfUFNQJiMzNDssCiAgICAmIzM0O1RMUyYjMzQ7LAogICAgJiMzNDtUTFNfREVWSUNFJiMzNDssCiAgICAmIzM0O05FVERFVlNJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrX2hhc19kZWNyeXB0X3VzZXImIzM0OywKICAgICYjMzQ7dGNwX3NldF91bHAmIzM0OywKICAgICYjMzQ7X190Y3Bfc2V0X3VscCYjMzQ7LAogICAgJiMzNDtwc3Bfc29ja19hc3NvY19zZXRfcngmIzM0OywKICAgICYjMzQ7cHNwX25sX3J4X2Fzc29jX2RvaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzb2NrZXQgc3RhdGUgZXhjbHVzaXZpdHkgY2hlY2tzIGJldHdlZW4gUFNQIChQU1AgU2VjdXJpdHkgUHJvdG9jb2wpIHNvY2tldCBhc3NvY2lhdGlvbnMsIFRDUCBVTFAgKGUuZy4sIGtUTFMpLCBhbmQgc29ja2V0cyB3aXRoIHRyYW5zbWl0IHZhbGlkYXRpb24gaGFuZGxlcnMgKHNrX3ZhbGlkYXRlX3htaXRfc2tiKS4gSXQgYWRkcyBza19oYXNfZGVjcnlwdF91c2VyKCkgYW5kIHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYigpIHZhbGlkYXRpb25zIGluIF9fdGNwX3NldF91bHAoKSBhbmQgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4KCkgdG8gcHJldmVudCBjb25mbGljdGluZyBzb2NrZXQgb2ZmbG9hZCBzdGF0ZXMuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIHJlYWNoYWJsZSB2aWEgVENQIHNldHNvY2tvcHQoVENQX1VMUCkgYW5kIFBTUCBOZXRsaW5rIGNvbW1hbmRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgM2I0ZjIyZTFkMmUyZmI4MjNkODJiYjY0YTFlMTk0MzQ4NDc1MTJjMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDAwOjQyOjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc29jay5oIGIvaW5jbHVkZS9uZXQvc29jay5oCmluZGV4IDUxMTg1MjIyYWFjMjkuLmJhNWU1MDkyZjE5MmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NvY2suaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9zb2NrLmgKQEAgLTIzMTIsNiAmIzQzOzIzMTIsMTcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNrX2dzb19kaXNhYmxlKHN0cnVjdCBzb2NrICpzaykKIAlzay0mZ3Q7c2tfcm91dGVfY2FwcyAmYW1wOz0gfk5FVElGX0ZfR1NPX01BU0s7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgc2tfaGFzX3ZhbGlkYXRlX3htaXRfc2tiKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7I2lmZGVmIENPTkZJR19TT0NLX1ZBTElEQVRFX1hNSVQKJiM0MzsJcmV0dXJuICEhc2stJmd0O3NrX3ZhbGlkYXRlX3htaXRfc2tiOwomIzQzOyNlbHNlCiYjNDM7CXJldHVybiBmYWxzZTsKJiM0MzsjZW5kaWYKJiM0Mzt9CiYjNDM7CiYjNDM7Ym9vbCBza19oYXNfZGVjcnlwdF91c2VyKGNvbnN0IHN0cnVjdCBzb2NrICpzayk7CiYjNDM7CiBzdGF0aWMgaW5saW5lIGludCBza2JfZG9fY29weV9kYXRhX25vY2FjaGUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQkgICBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sIGNoYXIgKnRvLAogCQkJCQkgICBpbnQgY29weSwgaW50IG9mZnNldCkKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2suYyBiL25ldC9jb3JlL3NvY2suYwppbmRleCBmYTYwYjc0OTRjNTg2Li45NDg5ZDljNDc5NDkzIDEwMDY0NAotLS0gYS9uZXQvY29yZS9zb2NrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc29jay5jCkBAIC0xNDIsNiAmIzQzOzE0Miw3IEBACiAKICNpbmNsdWRlICZsdDt0cmFjZS9ldmVudHMvc29jay5oJmd0OwogCiYjNDM7I2luY2x1ZGUgJmx0O25ldC9wc3AuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvdGNwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2J1c3lfcG9sbC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9waG9uZXQvcGhvbmV0LmgmZ3Q7CkBAIC0yNjcwLDYgJiM0MzsyNjcxLDEyIEBAIHZvaWQgc2tfc2V0dXBfY2FwcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNrX3NldHVwX2NhcHMpOwogCiYjNDM7Ym9vbCBza19oYXNfZGVjcnlwdF91c2VyKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7CXJldHVybiBwc3Bfc2tfYXNzb2Moc2spIHx8CiYjNDM7CSAgICAgICAoc2tfaXNfaW5ldChzaykgJmFtcDsmYW1wOyBpbmV0X2Nza19oYXNfdWxwKHNrKSk7IC8qIGZvciB0bHMgKi8KJiM0Mzt9CiYjNDM7CiAvKgogICoJU2ltcGxlIHJlc291cmNlIG1hbmFnZXJzIGZvciBzb2NrZXRzLgogICovCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfdWxwLmMgYi9uZXQvaXB2NC90Y3BfdWxwLmMKaW5kZXggMmFhNDQyMTI4NjMwZS4uZjNlMGM5ZDM3OWJiNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX3VscC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF91bHAuYwpAQCAtMTM2LDYgJiM0MzsxMzYsMTAgQEAgc3RhdGljIGludCBfX3RjcF9zZXRfdWxwKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHRjcF91bHBfb3BzICp1bHBfb3BzKQogCWlmIChpY3NrLSZndDtpY3NrX3VscF9vcHMpCiAJCWdvdG8gb3V0X2VycjsKIAomIzQzOwllcnIgPSAtRUlOVkFMOwomIzQzOwlpZiAoc2tfaGFzX2RlY3J5cHRfdXNlcihzaykgfHwgc2tfaGFzX3ZhbGlkYXRlX3htaXRfc2tiKHNrKSkKJiM0MzsJCWdvdG8gb3V0X2VycjsKJiM0MzsKIAlpZiAoc2stJmd0O3NrX3NvY2tldCkKIAkJY2xlYXJfYml0KFNPQ0tfU1VQUE9SVF9aQywgJmFtcDtzay0mZ3Q7c2tfc29ja2V0LSZndDtmbGFncyk7CiAKZGlmZiAtLWdpdCBhL25ldC9wc3AvcHNwX3NvY2suYyBiL25ldC9wc3AvcHNwX3NvY2suYwppbmRleCAxYTJhNmI3NTE2YjBmLi41MDkwMzU2MTc4OTRhIDEwMDY0NAotLS0gYS9uZXQvcHNwL3BzcF9zb2NrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3BzcC9wc3Bfc29jay5jCkBAIC0xNDMsNiAmIzQzOzE0MywxMCBAQCBpbnQgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9hc3NvYyAqcGFzLAogCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7U29ja2V0IGFscmVhZHkgaGFzIFBTUCBzdGF0ZSYjMzQ7KTsKIAkJZXJyID0gLUVCVVNZOwogCQlnb3RvIGV4aXRfdW5sb2NrOwomIzQzOwl9IGVsc2UgaWYgKHNrX2hhc19kZWNyeXB0X3VzZXIoc2spIHx8IHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYihzaykpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDtTb2NrZXQgaGFzIGluY29tcGF0aWJsZSBzdGF0ZSYjMzQ7KTsKJiM0MzsJCWVyciA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIGV4aXRfdW5sb2NrOwogCX0KIAogCXJlZmNvdW50X2luYygmYW1wO3Bhcy0mZ3Q7cmVmY250KTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZwppbmRleCBiNjk4OWM3ZDNkOWQxLi40ODM4YWRmMjdmYTFiIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnCkBAIC0yMSw1ICYjNDM7MjEsNiBAQCBDT05GSUdfTkVUX1NDSF9JTkdSRVNTPXkKIENPTkZJR19ORVRfU0NIX1BSSU89bQogQ09ORklHX1BQUD15CiBDT05GSUdfUFBQT0U9eQomIzQzO0NPTkZJR19UTFM9eQogQ09ORklHX1ZMQU5fODAyMVE9bQogQ09ORklHX1hEUF9TT0NLRVRTPXkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weQppbmRleCAzMTU2NDhhNzcwZDAwLi4xMmIyN2YyYTNmYTFiIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHkKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5CkBAIC0yMyw2ICYjNDM7MjMsOCBAQCBmcm9tIGxpYi5weSBpbXBvcnQgTmV0TlNFbnRlcgogZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgcmFuZF9wb3J0LCB3YWl0X3BvcnRfbGlzdGVuCiBmcm9tIGxpYi5weSBpbXBvcnQgaXAKIAomIzQzO1RDUF9VTFAgPSAzMQomIzQzOwogCiBkZWYgX2dldF9vdXRxKHMpOgogICAgIG9uZSA9IGImIzM5O1wwJiMzOTsgKiA0CkBAIC0zMzMsNiAmIzQzOzMzNSw1MCBAQCBkZWYgYXNzb2NfdmVyc2lvbl9taXNtYXRjaChjZmcpOgogICAgICAgICAgICAga3NmdF9lcSh0aGVfZXhjZXB0aW9uLm5sX21zZy5lcnJvciwgLWVycm5vLkVJTlZBTCkKIAogCiYjNDM7ZGVmIF9yZXF1aXJlX3Rsc191bHAoKToKJiM0MzsgICAgd2l0aCBzb2NrZXQuY3JlYXRlX3NlcnZlcigoJiMzNDtsb2NhbGhvc3QmIzM0OywgMCkpIGFzIHNydjoKJiM0MzsgICAgICAgIHdpdGggc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKHNydi5nZXRzb2NrbmFtZSgpKSBhcyBzOgomIzQzOyAgICAgICAgICAgIHRyeToKJiM0MzsgICAgICAgICAgICAgICAgcy5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfVENQLCBUQ1BfVUxQLCBiJiMzNDt0bHMmIzM0OykKJiM0MzsgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CiYjNDM7ICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoJiMzNDtrVExTIG5vdCBhdmFpbGFibGUmIzM0OykgZnJvbSBleGMKJiM0MzsKJiM0MzsKJiM0MztkZWYgYXNzb2NfcHNwX3VscF9leGNsdXNpdmUoY2ZnKToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7IFRlc3QgdGhhdCBhIFRDUCBVTFAgY2Fubm90IGJlIGF0dGFjaGVkIHRvIGEgUFNQIHNvY2tldCAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgX2luaXRfcHNwX2RldihjZmcpCiYjNDM7ICAgIF9yZXF1aXJlX3Rsc191bHAoKQomIzQzOwomIzQzOyAgICB3aXRoIF9tYWtlX2Nscl9jb25uKGNmZykgYXMgczoKJiM0MzsgICAgICAgIHRyeToKJiM0MzsgICAgICAgICAgICBjZmcucHNwbmwucnhfYXNzb2MoeyYjMzQ7dmVyc2lvbiYjMzQ7OiAwLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiMzNDtkZXYtaWQmIzM0OzogY2ZnLnBzcF9kZXZfaWQsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIzM0O3NvY2stZmQmIzM0Ozogcy5maWxlbm8oKX0pCiYjNDM7ICAgICAgICAgICAgd2l0aCBrc2Z0X3JhaXNlcyhPU0Vycm9yKSBhcyBjbToKJiM0MzsgICAgICAgICAgICAgICAgcy5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfVENQLCBUQ1BfVUxQLCBiJiMzNDt0bHMmIzM0OykKJiM0MzsgICAgICAgICAgICBrc2Z0X2VxKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRUlOVkFMKQomIzQzOyAgICAgICAgZmluYWxseToKJiM0MzsgICAgICAgICAgICBfY2xvc2VfY29ubihjZmcsIHMpCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIGFzc29jX3VscF9wc3BfZXhjbHVzaXZlKGNmZyk6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OyBUZXN0IHRoYXQgYSBQU1AgYXNzb2MgY2Fubm90IGJlIGFkZGVkIHRvIGEgc29ja2V0IHdpdGggYSBUQ1AgVUxQICYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBfaW5pdF9wc3BfZGV2KGNmZykKJiM0MzsgICAgX3JlcXVpcmVfdGxzX3VscCgpCiYjNDM7CiYjNDM7ICAgIHdpdGggX21ha2VfY2xyX2Nvbm4oY2ZnKSBhcyBzOgomIzQzOyAgICAgICAgdHJ5OgomIzQzOyAgICAgICAgICAgIHMuc2V0c29ja29wdChzb2NrZXQuU09MX1RDUCwgVENQX1VMUCwgYiYjMzQ7dGxzJiMzNDspCiYjNDM7ICAgICAgICAgICAgd2l0aCBrc2Z0X3JhaXNlcyhObEVycm9yKSBhcyBjbToKJiM0MzsgICAgICAgICAgICAgICAgY2ZnLnBzcG5sLnJ4X2Fzc29jKHsmIzM0O3ZlcnNpb24mIzM0OzogMCwKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIzM0O2Rldi1pZCYjMzQ7OiBjZmcucHNwX2Rldl9pZCwKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIzM0O3NvY2stZmQmIzM0Ozogcy5maWxlbm8oKX0pCiYjNDM7ICAgICAgICAgICAga3NmdF9lcShjbS5leGNlcHRpb24ubmxfbXNnLmVycm9yLCAtZXJybm8uRUlOVkFMKQomIzQzOyAgICAgICAgICAgIGtzZnRfZXEoY20uZXhjZXB0aW9uLm5sX21zZy5leHRhY2tbJiMzOTtiYWQtYXR0ciYjMzk7XSwgJiMzNDsuc29jay1mZCYjMzQ7KQomIzQzOyAgICAgICAgZmluYWxseToKJiM0MzsgICAgICAgICAgICBfY2xvc2VfY29ubihjZmcsIHMpCiYjNDM7CiYjNDM7CiBkZWYgYXNzb2NfdHdpY2UoY2ZnKToKICAgICAmIzM0OyYjMzQ7JiMzNDsgVGVzdCByZXVzaW5nIFR4IGFzc29jIGZvciB0d28gc29ja2V0cyAmIzM0OyYjMzQ7JiMzNDsKICAgICBfaW5pdF9wc3BfZGV2KGNmZykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc0MwoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDIwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NpbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIFRoaXMgUGF0Y2ggU2VyaWVzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZ2l2ZW4gYSBwYXRjaCBzZXJpZXMgYW5kIGFza2VkIHRvIGRldGVybWluZSBpZiBpdCYjMzk7cyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0JiMzOTtzIGRpdmUgaW4uIFRoZSBmaXJzdCBzdGVwIGlzIHRvIHF1aWNrbHkgYW5hbHl6ZSB0aGUgY2hhbmdlcy4gTG9va3MgbGlrZSB3ZSYjMzk7dmUgZ290IG1vZGlmaWNhdGlvbnMgdG8gYGluY2x1ZGUvbmV0L3NvY2suaGAsIGBuZXQvY29yZS9zb2NrLmNgLCBgbmV0L2lwdjQvdGNwX3VscC5jYCwgYG5ldC9wc3AvcHNwX3NvY2suY2AsIGFuZCBzb21lIHNlbGZ0ZXN0cy4gVGhlIGFkZGl0aW9uIG9mIGBza19oYXNfdmFsaWRhdGVfeG1pdF9za2JgIGFuZCBgc2tfaGFzX2RlY3J5cHRfdXNlcmAgaW4gYHNvY2suaGAgYW5kIHRoZWlyIHN1YnNlcXVlbnQgZGVmaW5pdGlvbiBhbmQgdXNlLCBhbG9uZyB3aXRoIHRoZSBjaGVja3MgaW4gYF9fdGNwX3NldF91bHBgIGFuZCBgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4YCwgYXJlIHRoZSBicmVhZGNydW1icy4gSXQgc2VlbXMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgcmVsYXRlZCB0byBzb2NrZXQgaGFuZGxpbmcsIHBvdGVudGlhbGx5IGVuY3J5cHRpb24gb3Igc29tZSBraW5kIG9mIHBhY2tldCBwcm9jZXNzaW5nIHdpdGggUFNQLCBhbmQgaXQgbWFrZXMgbWUgdGhpbmsgYWJvdXQgcG90ZW50aWFsIGZvciBpbnRlcmVzdGluZyBiZWhhdmlvcnMsIGFuZCBwb3NzaWJsZSB2dWxuZXJhYmlsaXRpZXMuCgpUbyBwcm9wZXJseSBnYXVnZSB0aGUgZnV6emluZyBwb3RlbnRpYWwsIEkgbmVlZCBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgUFNQIHBhcnQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgUFNQIGFjdHVhbGx5ICppcyouIFdoYXQgY29uZmlndXJhdGlvbiBmbGFncyBhcmUgaW52b2x2ZWQ/IFdoYXQgb3RoZXIgY29kZSBjYWxscyB0aGVzZSBmdW5jdGlvbnMgb3IgdXNlcyB0aGVzZSBzdHJ1Y3R1cmVzPyBXZSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSB0aGUgZm9jdXMgc3ltYm9scyBhbmQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBmb3IgYSBmdWxsIGV2YWx1YXRpb24uIFRpbWUgdG8gZHVzdCBvZmYgdGhlIGBnaXQgZ3JlcGAgc2tpbGxzIGFuZCBzdGFydCBodW50aW5nIGRvd24gcmVsZXZhbnQgY29kZSB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcmVmZXJlbmNlcyB0byBQU1AsIGFueSByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIGFueXRoaW5nIHRoYXQgbWlnaHQgZ2l2ZSBpbnNpZ2h0IGludG8gaG93IHRoZXNlIG5ldyBmdW5jdGlvbnMgYXJlIHVzZWQuIFdlIG5lZWQgdG8gaWRlbnRpZnkgYWxsIHJlbGV2YW50IGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4gVGhpcyBzaG91bGQgZ2V0IHVzIGEgZ29vZCBwaWN0dXJlIG9mIHRoZSBhdHRhY2sgc3VyZmFjZSBoZXJlIGFuZCBpZiB0aGlzIGRlc2VydmVzIG1vcmUgYXR0ZW50aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX1BTUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM0OAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OgoKKipEaWdnaW5nIGludG8gdGhlIGBuZXQvcHNwL2AgRGlyZWN0b3J5KioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIG5ldHdvcmsgZnVuY3Rpb25hbGl0eSBpcyBjb25maWd1cmVkIGFuZCBidWlsdC4gTXkgZmlyc3QgbW92ZSBpcyB0byBoZWFkIHN0cmFpZ2h0IGludG8gdGhlIGBuZXQvcHNwL2AgZGlyZWN0b3J5LiBUaGlzIHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBmb3IgdGhlIGNvcmUgb2YgdGhlIGltcGxlbWVudGF0aW9uLiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gdW5kZXJzdGFuZCBpdHMgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbnkgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUsIGFuZCBob3cgaXQgZ2V0cyBpbnRlZ3JhdGVkIGludG8gdGhlIG92ZXJhbGwgYnVpbGQgcHJvY2Vzcy4gVG8gZG8gdGhhdCwgSSYjMzk7bSBnb2luZyB0byB6ZXJvIGluIG9uIGVpdGhlciBhIEtjb25maWcgZmlsZSwgb3IgcG90ZW50aWFsbHkgYSBNYWtlZmlsZSwgd2l0aGluIHRoaXMgZGlyZWN0b3J5LiBUaG9zZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzLiBEZXBlbmRpbmcgb24gd2hhdCBJIGZpbmQsIEkmIzM5O2xsIHRoZW4gbW92ZSBvbnRvIGFuYWx5c2luZyBvdGhlciBmaWxlcyBhbmQgZGlyZWN0b3JpZXMsIGJ1dCB0aGVzZSBhcmUgbXkgc3RhcnRpbmcgcG9pbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Y29kZXNlYXJjaC1kaXItaW5kZXg8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0RpciYjMzQ7OiAmIzM0O25ldC9wc3AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZXMmIzM0OzogWwogICAgJiMzNDtwc3AtbmwtZ2VuLmMmIzM0OywKICAgICYjMzQ7cHNwLW5sLWdlbi5oJiMzNDssCiAgICAmIzM0O3BzcC5oJiMzNDssCiAgICAmIzM0O3BzcF9tYWluLmMmIzM0OywKICAgICYjMzQ7cHNwX25sLmMmIzM0OywKICAgICYjMzQ7cHNwX3NvY2suYyYjMzQ7CiAgXSwKICAmIzM0O1N1YmRpcnMmIzM0OzogbnVsbAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYxMgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBCdWlsZCBQcm9jZXNzIGZvciBgbmV0L3BzcGAqKgoKQWxyaWdodCwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZSBgbmV0L3BzcGAgZGlyZWN0b3J5LCBhbmQgcHJlc3VtYWJseSBpdHMgY29kZSwgZ2V0cyBidWlsdCBpbnRvIHRoZSBrZXJuZWwuIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyB3b3VsZCBiZSB3aXRoaW4gdGhlIG5ldHdvcmsgc3Vic3lzdGVtJiMzOTtzIGNvbmZpZ3VyYXRpb24gYW5kIGJ1aWxkIGZpbGVzLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayBgbmV0L0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgZW5hYmxlcyBgbmV0L3BzcGAuIFRoZW4sIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBgbmV0L01ha2VmaWxlYCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBydWxlcyBhbmQgZGVwZW5kZW5jaWVzLiBLbm93aW5nIHdoaWNoIEtjb25maWcgb3B0aW9uIGVuYWJsZXMgaXQgd2lsbCBoZWxwIG1lIGZpbmQgdGhlIGFzc29jaWF0ZWQgYG9iai1gIGxpbmVzIGluIHRoZSBNYWtlZmlsZSBhbmQgc2VlIGhvdyB0aGUgc291cmNlIGZpbGVzIHdpdGhpbiBgbmV0L3BzcGAgYXJlIGNvbXBpbGVkLCBsaW5rZWQsIGFuZCBpbmNvcnBvcmF0ZWQgaW50byB0aGUga2VybmVsIGltYWdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYmlnIHBpY3R1cmU7IGlzIHRoaXMgYSBtb2R1bGUsIGJ1aWx0LWluLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVWx0aW1hdGVseSwgdW5kZXJzdGFuZGluZyB0aGUgYnVpbGQgcHJvY2VzcyBpcyBrZXkgdG8gbW9kaWZ5aW5nLCBkZWJ1Z2dpbmcsIG9yIGVuYWJsaW5nIHRoaXMgZnVuY3Rpb25hbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwc3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L01ha2VmaWxlPTIwPW9iai0kKENPTkZJR19VTklYKVx0XHQmIzQzOz0gdW5peC9cbm5ldC9NYWtlZmlsZToyMTpvYmotJChDT05GSUdfSU5FVF9QU1ApXHRcdCYjNDM7PSBwc3AvXG5uZXQvTWFrZWZpbGUtMjItb2JqLXlcdFx0XHRcdCYjNDM7PSBpcHY2L1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5NTEKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDb25maWd1cmF0aW9uIGZvciBQU1AgU3VwcG9ydCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBQU1AgaXMgZW5hYmxlZC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgYENPTkZJR19JTkVUX1BTUGAuIEkga25vdyB0aGUgbmV0d29ya2luZyBjb25maWd1cmF0aW9uIGlzIHNwcmVhZCBhY3Jvc3MgYSBmZXcgZGlmZmVyZW50IGBLY29uZmlnYCBmaWxlcyDigJMgaXQmIzM5O3MgbGlrZWx5IGluIGBuZXQvS2NvbmZpZ2AsIGBuZXQvaXB2NC9LY29uZmlnYCwgb3Igc29tZXRoaW5nIHNpbWlsYXIuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayB0aHJvdWdoIHRob3NlIHRvIHBpbnBvaW50IHdoZXJlIGBDT05GSUdfSU5FVF9QU1BgIGlzIGRlZmluZWQgYW5kIHdoYXQgaXRzIGRlcGVuZGVuY2llcyBtaWdodCBiZS4gVGltZSB0byBnZXQgbXkgZ3JlcCBvbiBhbmQgbmF2aWdhdGUgdGhvc2UgY29uZmlnIHN0cnVjdHVyZXMhIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SU5FVF9QU1AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc9MjEwPWNvbmZpZyBNTFg1X0VOX1BTUFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWctMjExLVx0Ym9vbCBcJiMzNDtNZWxsYW5veCBUZWNobm9sb2dpZXMgc3VwcG9ydCBmb3IgUFNQIGNyeXB0b2dyYXBoeS1vZmZsb2FkIGFjY2VsZXJhdGlvblwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc6MjEyOlx0ZGVwZW5kcyBvbiBJTkVUX1BTUFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWctMjEzLVx0ZGVwZW5kcyBvbiBNTFg1X0NPUkVfRU5cbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vTWFrZWZpbGU9MTk9ZW5kaWZcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZS0yMC1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZToyMTppZm5lcSAoJChDT05GSUdfSU5FVF9QU1ApLClcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZS0yMi1uZXRkZXZzaW0tb2JqcyAmIzQzOz0gcHNwLm9cbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg9NDQ1PXN0YXRpYyBpbmxpbmUgdm9pZCBuc2ltX21hY3NlY190ZWFyZG93bihzdHJ1Y3QgbmV0ZGV2c2ltICpucylcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtNDQ5LVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQ1MDojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtNDUxLWludCBuc2ltX3BzcF9pbml0KHN0cnVjdCBuZXRkZXZzaW0gKm5zKTtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTIxNTg9c3RydWN0IG5ldF9kZXZpY2Uge1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjM4OC0jZW5kaWZcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MjM4OTojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTIzOTAtXHRzdHJ1Y3QgcHNwX2RldiBfX3JjdVx0KnBzcF9kZXY7XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD01MDQzPWVudW0gc2tiX2V4dF9pZCB7XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MDU4LSNlbmRpZlxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MDU5OiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUX1BTUClcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA2MC1cdFNLQl9FWFRfUFNQLFxuLS1cbmluY2x1ZGUvbmV0L2luZXRfdGltZXdhaXRfc29jay5oPTMzPXN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sge1xuLS1cbmluY2x1ZGUvbmV0L2luZXRfdGltZXdhaXRfc29jay5oLTg0LVx0c3RydWN0IGluZXRfYmluZDJfYnVja2V0XHQqdHdfdGIyO1xuaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmg6ODU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKVxuaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmgtODYtXHRzdHJ1Y3QgcHNwX2Fzc29jIF9fcmN1XHQgICpwc3BfYXNzb2M7XG4tLVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTI3PXN0YXRpYyBpbmxpbmUgdm9pZCAqcHNwX2Fzc29jX2Rydl9kYXRhKHN0cnVjdCBwc3BfYXNzb2MgKnBhcylcbi0tXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMzEtXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MzI6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTMzLXVuc2lnbmVkIGludCBwc3Bfa2V5X3NpemUodTMyIHZlcnNpb24pO1xuLS1cbmluY2x1ZGUvbmV0L3NvY2suaD0zNjU9c3RydWN0IHNvY2sge1xuLS1cbmluY2x1ZGUvbmV0L3NvY2suaC00NjYtI2VuZGlmXG5pbmNsdWRlL25ldC9zb2NrLmg6NDY3OiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUX1BTUClcbmluY2x1ZGUvbmV0L3NvY2suaC00NjgtXHRzdHJ1Y3QgcHNwX2Fzc29jIF9fcmN1XHQqcHNwX2Fzc29jO1xuLS1cbm5ldC9NYWtlZmlsZT0yMD1vYmotJChDT05GSUdfVU5JWClcdFx0JiM0Mzs9IHVuaXgvXG5uZXQvTWFrZWZpbGU6MjE6b2JqLSQoQ09ORklHX0lORVRfUFNQKVx0XHQmIzQzOz0gcHNwL1xubmV0L01ha2VmaWxlLTIyLW9iai15XHRcdFx0XHQmIzQzOz0gaXB2Ni9cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz01MTUwPXN0YXRpYyBjb25zdCB1OCBza2JfZXh0X3R5cGVfbGVuW10gPSB7XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNTE2NS0jZW5kaWZcbm5ldC9jb3JlL3NrYnVmZi5jOjUxNjY6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKVxubmV0L2NvcmUvc2tidWZmLmMtNTE2Ny1cdFtTS0JfRVhUX1BTUF0gPSBTS0JfRVhUX0NIVU5LU0laRU9GKHN0cnVjdCBwc3Bfc2tiX2V4dCksXG4tLVxubmV0L2NvcmUvc29jay5jPTI0ODA9c3RydWN0IHNvY2sgKnNrX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgY29uc3QgZ2ZwX3QgcHJpb3JpdHksXG4tLVxubmV0L2NvcmUvc29jay5jLTI0OTctI2VuZGlmXG5uZXQvY29yZS9zb2NrLmM6MjQ5ODojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXG5uZXQvY29yZS9zb2NrLmMtMjQ5OS1cdFJDVV9JTklUX1BPSU5URVIobmV3c2stXHUwMDNlcHNwX2Fzc29jLCBOVUxMKTtcbi0tXG5uZXQvcHNwL0tjb25maWctNC0jXG5uZXQvcHNwL0tjb25maWc6NTpjb25maWcgSU5FVF9QU1Bcbm5ldC9wc3AvS2NvbmZpZy02LVx0Ym9vbCBcJiMzNDtQU1AgU2VjdXJpdHkgUHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9wc3AvTWFrZWZpbGUtMi1cbm5ldC9wc3AvTWFrZWZpbGU6MzpvYmotJChDT05GSUdfSU5FVF9QU1ApICYjNDM7PSBwc3Aub1xubmV0L3BzcC9NYWtlZmlsZS00LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZz0zPUNPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTPW5cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZzo0OkNPTkZJR19JTkVUX1BTUD15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWctNS1DT05GSUdfSVBWNj15XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0NjIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIFBTUCBLY29uZmlnKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHN0YXJ0ZWQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gYG5ldC9wc3AvS2NvbmZpZ2AuIEl0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luLCBnaXZlbiB3aGF0IHdlJiMzOTtyZSB3b3JraW5nIG9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIFBTUCBuZXR3b3JrIHN0YWNrIGZpcnN0LiBLbm93aW5nIHRoZSBhdmFpbGFibGUgcGFyYW1ldGVycyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzIHdpbGwgYmUgY3J1Y2lhbCBmb3IgdGhlIHdvcmsgYWhlYWQuIFRoaXMgS2NvbmZpZyBmaWxlIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgZGVzaWduIGNob2ljZXMgYW5kIHBvdGVudGlhbGx5IHJldmVhbCBhbnkgZXhpc3RpbmcgbGltaXRhdGlvbnMgb3IgZmVhdHVyZXMgdGhhdCBtaWdodCBpbmZsdWVuY2UgbXkgYXBwcm9hY2guIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gbGVhcm4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3BzcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgUFNQIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0Y29uZmlnIElORVRfUFNQXG4gICA2Olx0XHRib29sIFwmIzM0O1BTUCBTZWN1cml0eSBQcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4gICA3Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDg6XHRcdHNlbGVjdCBTS0JfREVDUllQVEVEXG4gICA5Olx0XHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcbiAgMTA6XHRcdHNlbGVjdCBTT0NLX1ZBTElEQVRFX1hNSVRcbiAgMTE6XHRcdGhlbHBcbiAgMTI6XHRcdEVuYWJsZSBrZXJuZWwgc3VwcG9ydCBmb3IgdGhlIFBTUCBTZWN1cml0eSBQcm90b2NvbCAoUFNQKS5cbiAgMTM6XHRcdEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZTpcbiAgMTQ6XHRcdCAgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2dvb2dsZS9wc3AvbWFpbi9kb2MvUFNQX0FyY2hfU3BlYy5wZGZcbiAgMTU6XHRcbiAgMTY6XHRcdElmIHVuc3VyZSwgc2F5IE4uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4NDgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIGl0OgoKKipDaGVja2luZyBTb2NrZXQgVHJhbnNtaXNzaW9uIFZhbGlkYXRpb24qKgoKT2theSwgc28gd2UmIzM5O3JlIGRpdmluZyBpbnRvIHRoaXMgbmV0d29yayBjb2RlLCBhbmQgYmVmb3JlIHdlIHByb2NlZWQgdG9vIGZhciwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7dmUgbG9va2VkIGF0IHRoZSBpbXBsaWNhdGlvbnMgb2YgYENPTkZJR19TT0NLX1ZBTElEQVRFX1hNSVRgLiBJdCYjMzk7cyBjcnVjaWFsIHdlIGRvbiYjMzk7dCBvdmVybG9vayB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb247IGl0cyBpbXBhY3Qgb24gdGhlIGRhdGEgdHJhbnNtaXNzaW9uIGZsb3cgY291bGQgYmUgc2lnbmlmaWNhbnQuIEl0JiMzOTtzIG9mdGVuIGVhc3kgdG8gbWlzcyBkZXRhaWxzLCBzbyBhIHF1aWNrIGNoZWNrIG5vdyBjb3VsZCBzYXZlIGEgYmlnIGhlYWRhY2hlIGxhdGVyIG9uLiBMZXQmIzM5O3MgdHJhY2UgaG93IHRoYXQmIzM5O3MgaGFuZGxlZC4gR29vZCBwcmFjdGljZSBpcyB0byBhbHdheXMgYWNjb3VudCBmb3IgdGhpcyBraW5kIG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGVhcmx5IGluIHRoZSBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtTT0NLX1ZBTElEQVRFX1hNSVQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmg9MzM9c3RydWN0IGluZXRfdGltZXdhaXRfc29jayB7XG4tLVxuaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmgtODctI2VuZGlmXG5pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaDo4ODojaWZkZWYgQ09ORklHX1NPQ0tfVkFMSURBVEVfWE1JVFxuaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmgtODktXHRzdHJ1Y3Qgc2tfYnVmZipcdFx0KCp0d192YWxpZGF0ZV94bWl0X3NrYikoc3RydWN0IHNvY2sgKnNrLFxuLS1cbmluY2x1ZGUvbmV0L3NvY2suaD0zNjU9c3RydWN0IHNvY2sge1xuLS1cbmluY2x1ZGUvbmV0L3NvY2suaC01MTUtXHRuZXRkZXZfZmVhdHVyZXNfdFx0c2tfcm91dGVfY2FwcztcbmluY2x1ZGUvbmV0L3NvY2suaDo1MTY6I2lmZGVmIENPTkZJR19TT0NLX1ZBTElEQVRFX1hNSVRcbmluY2x1ZGUvbmV0L3NvY2suaC01MTctXHRzdHJ1Y3Qgc2tfYnVmZipcdFx0KCpza192YWxpZGF0ZV94bWl0X3NrYikoc3RydWN0IHNvY2sgKnNrLFxuLS1cbmluY2x1ZGUvbmV0L3NvY2suaD0yMzE1PXN0YXRpYyBpbmxpbmUgYm9vbCBza19oYXNfdmFsaWRhdGVfeG1pdF9za2IoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuaW5jbHVkZS9uZXQvc29jay5oLTIzMTYte1xuaW5jbHVkZS9uZXQvc29jay5oOjIzMTc6I2lmZGVmIENPTkZJR19TT0NLX1ZBTElEQVRFX1hNSVRcbmluY2x1ZGUvbmV0L3NvY2suaC0yMzE4LVx0cmV0dXJuICEhc2stXHUwMDNlc2tfdmFsaWRhdGVfeG1pdF9za2I7XG4tLVxubmV0L0tjb25maWc9NDY1PWNvbmZpZyBHUk9fQ0VMTFNcbi0tXG5uZXQvS2NvbmZpZy00NjgtXG5uZXQvS2NvbmZpZzo0Njk6Y29uZmlnIFNPQ0tfVkFMSURBVEVfWE1JVFxubmV0L0tjb25maWctNDcwLVx0Ym9vbFxuLS1cbm5ldC9jb3JlL2Rldi5jPTQwMTE9c3RhdGljIHN0cnVjdCBza19idWZmICpza192YWxpZGF0ZV94bWl0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL2Rldi5jLTQwMTMte1xubmV0L2NvcmUvZGV2LmM6NDAxNDojaWZkZWYgQ09ORklHX1NPQ0tfVkFMSURBVEVfWE1JVFxubmV0L2NvcmUvZGV2LmMtNDAxNS1cdHN0cnVjdCBza19idWZmICooKnNrX3ZhbGlkYXRlKShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjQvaW5ldF90aW1ld2FpdF9zb2NrLmM9MTY4PXN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKmluZXRfdHdza19hbGxvYyhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvaW5ldF90aW1ld2FpdF9zb2NrLmMtMjA0LVx0XHR0aW1lcl9zZXR1cChcdTAwMjZ0dy1cdTAwM2V0d190aW1lciwgdHdfdGltZXJfaGFuZGxlciwgMCk7XG5uZXQvaXB2NC9pbmV0X3RpbWV3YWl0X3NvY2suYzoyMDU6I2lmZGVmIENPTkZJR19TT0NLX1ZBTElEQVRFX1hNSVRcbm5ldC9pcHY0L2luZXRfdGltZXdhaXRfc29jay5jLTIwNi1cdFx0dHctXHUwMDNldHdfdmFsaWRhdGVfeG1pdF9za2IgPSBOVUxMO1xuLS1cbm5ldC9wc3AvS2NvbmZpZz01PWNvbmZpZyBJTkVUX1BTUFxuLS1cbm5ldC9wc3AvS2NvbmZpZy05LVx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXG5uZXQvcHNwL0tjb25maWc6MTA6XHRzZWxlY3QgU09DS19WQUxJREFURV9YTUlUXG5uZXQvcHNwL0tjb25maWctMTEtXHRoZWxwXG4tLVxubmV0L3Rscy9LY29uZmlnPTE5PWNvbmZpZyBUTFNfREVWSUNFXG4tLVxubmV0L3Rscy9LY29uZmlnLTIyLVx0c2VsZWN0IFNLQl9ERUNSWVBURURcbm5ldC90bHMvS2NvbmZpZzoyMzpcdHNlbGVjdCBTT0NLX1ZBTElEQVRFX1hNSVRcbm5ldC90bHMvS2NvbmZpZy0yNC1cdHNlbGVjdCBTT0NLX1JYX1FVRVVFX01BUFBJTkdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg0MgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUGF0Y2ggQ2hhbmdlcyBmb3IgTmV0d29yayBTb2NrZXQgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZXNlIHBhdGNoIGNoYW5nZXMuIEkgc2VlIHdlJiMzOTtyZSBtb2RpZnlpbmcgdGhlIHNvY2tldC1yZWxhdGVkIGNvZGUsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBkYXRhIHZhbGlkYXRpb24gYW5kIHBvdGVudGlhbCBkZWNyeXB0aW9uIGZ1bmN0aW9uYWxpdGllcy4gVGhlIGZpcnN0IGNoYW5nZSwgaW4gYGluY2x1ZGUvbmV0L3NvY2suaGAsIGludHJvZHVjZXMgYSBoZWxwZXIgZnVuY3Rpb24sIGBza19oYXNfdmFsaWRhdGVfeG1pdF9za2JgLiBUaGlzIHNlZW1zIHRvIGNoZWNrIGZvciBhIHNwZWNpZmljIGBza192YWxpZGF0ZV94bWl0X3NrYmAgZmxhZywgbGlrZWx5IGNvbnRyb2xsZWQgYnkgYSBgQ09ORklHX1NPQ0tfVkFMSURBVEVfWE1JVGAgcHJlcHJvY2Vzc29yIGRlZmluZS4gTWFrZXMgc2Vuc2U7IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGZvciBwZXJmb3JtYW5jZSBhbmQgZmVhdHVyZSBlbmFibGVtZW50LiBJZiB0aGUgZmxhZyBpcyBzZXQsIGl0JiMzOTtzIGNoZWNraW5nIGlmIHRoZSBzb2NrZXQgaXMgY29uZmlndXJlZCB0byB2YWxpZGF0ZSBTS0JzIGR1cmluZyB0cmFuc21pc3Npb24uCgpOZXh0LCBpbiBgbmV0L2NvcmUvc29jay5jYCwgdGhlIGBza19oYXNfZGVjcnlwdF91c2VyYCBmdW5jdGlvbiYjMzk7cyBkZWZpbml0aW9uIHJldmVhbHMgaXRzIGxvZ2ljLiBJdCYjMzk7cyBjaGVja2luZyBpZiBhIHNvY2tldCBpcyBhc3NvY2lhdGVkIHdpdGggYSBQU1AgKHByZXN1bWFibHkgc29tZSBraW5kIG9mIHByb3RlY3Rpb24gc2NoZW1lKSAqb3IqIGlmIGl0JiMzOTtzIGFuIGludGVybmV0IHNvY2tldCB3aXRoIGEgY29uZmlndXJlZCBVTFAgKFVzZXItTGV2ZWwgUHJvdG9jb2wpLCBsaWtlbHkgZm9yIFRMUyBzdXBwb3J0LiBJbnRlcmVzdGluZyBpbnRlcnBsYXkgYmV0d2VlbiBkaWZmZXJlbnQgc2VjdXJpdHkgbGF5ZXJzIGFuZCBwcm90b2NvbCBoYW5kbGVycy4KCkZpbmFsbHksIHRoZSBtb3N0IGludGVyZXN0aW5nIGNoYW5nZSBpcyBpbiBgbmV0L2lwdjQvdGNwX3VscC5jYCwgd2l0aGluIHRoZSBgX190Y3Bfc2V0X3VscGAgZnVuY3Rpb24uIEl0IHNlZW1zIHRvIGJlIHByZXZlbnRpbmcgdGhlIHNldHRpbmcgb2YgYSBVTFAgaWYgZWl0aGVyIGBza19oYXNfZGVjcnlwdF91c2VyYCAqb3IqIGBza19oYXNfdmFsaWRhdGVfeG1pdF9za2JgIHJldHVybnMgdHJ1ZS4gVGhlIGNvZGUgaW5jbHVkZXMgYSBjaGVjayB0aGF0IHRocm93cyBhbiBgRUlOVkFMYCBlcnJvciBhbmQganVtcHMgb3V0IGlmIHRoZSBhZm9yZW1lbnRpb25lZCBmdW5jdGlvbnMgZXZhbHVhdGUgdG8gdHJ1ZS4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGlzIGVzdGFibGlzaGluZyBhIGNvbnN0cmFpbnQgb24gd2hlbiBVTFAgKHNwZWNpZmljYWxseSBUTFMpIGNhbiBiZSBhcHBsaWVkIHRvIFRDUCBzb2NrZXRzLiBJdCBzZWVtcyB3ZSYjMzk7cmUgZ3VhcmRpbmcgYWdhaW5zdCBzaXR1YXRpb25zIHdoZXJlIHRoZSBzb2NrZXQmIzM5O3MgZGF0YSBuZWVkcyB0byBiZSB2YWxpZGF0ZWQgb3IgZGVjcnlwdGVkLiBUaGlzIHByb2JhYmx5IG1lYW5zIGEgc3BlY2lmaWMgZGF0YSB2YWxpZGF0aW9uIG9yIHNlY3VyaXR5IHNjaGVtZSBpcyBhbHJlYWR5IGVuYWJsZWQgb24gdGhhdCBzb2NrZXQgYW5kIHRoZSBVTFAgc2V0dXAgd291bGQgYmUgcmVkdW5kYW50IG9yIHdvdWxkIGNhdXNlIGlzc3VlcyAocG9zc2libHkgZHVlIHRvIGluY29tcGF0aWJsZSBzZWN1cml0eSBtb2RlbHMgb3IgYW4gb3JkZXIgb2Ygb3BlcmF0aW9ucyBjb25mbGljdCkuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGJyb2FkZXIgY29udGV4dCBvZiBgX190Y3Bfc2V0X3VscGAgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMgYW5kIHRoZSBleGFjdCByZWFzb25pbmcgYmVoaW5kIHRoaXMgY29uc3RyYWludC4gSXQgc2VlbXMgd2UgYXJlIHRyeWluZyB0byBwcmV2ZW50IGEgcG90ZW50aWFsIGNvbmZsaWN0IG9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX3VscC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMjA6XHRcdGlmICghaWNzay1cdTAwM2VpY3NrX3VscF9vcHMpXG4gMTIxOlx0XHRcdHJldHVybjtcbiAxMjI6XHRcbiAxMjM6XHRcdGlmIChpY3NrLVx1MDAzZWljc2tfdWxwX29wcy1cdTAwM2VyZWxlYXNlKVxuIDEyNDpcdFx0XHRpY3NrLVx1MDAzZWljc2tfdWxwX29wcy1cdTAwM2VyZWxlYXNlKHNrKTtcbiAxMjU6XHRcdG1vZHVsZV9wdXQoaWNzay1cdTAwM2VpY3NrX3VscF9vcHMtXHUwMDNlb3duZXIpO1xuIDEyNjpcdFxuIDEyNzpcdFx0aWNzay1cdTAwM2VpY3NrX3VscF9vcHMgPSBOVUxMO1xuIDEyODpcdH1cbiAxMjk6XHRcbiAxMzA6XHRzdGF0aWMgaW50IF9fdGNwX3NldF91bHAoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgdGNwX3VscF9vcHMgKnVscF9vcHMpXG4gMTMxOlx0e1xuIDEzMjpcdFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xuIDEzMzpcdFx0aW50IGVycjtcbiAxMzQ6XHRcbiAxMzU6XHRcdGVyciA9IC1FRVhJU1Q7XG4gMTM2Olx0XHRpZiAoaWNzay1cdTAwM2VpY3NrX3VscF9vcHMpXG4gMTM3Olx0XHRcdGdvdG8gb3V0X2VycjtcbiAxMzg6XHRcbiAxMzk6XHRcdGVyciA9IC1FSU5WQUw7XG4gMTQwOlx0XHRpZiAoc2tfaGFzX2RlY3J5cHRfdXNlcihzaykgfHwgc2tfaGFzX3ZhbGlkYXRlX3htaXRfc2tiKHNrKSlcbiAxNDE6XHRcdFx0Z290byBvdXRfZXJyO1xuIDE0MjpcdFxuIDE0MzpcdFx0aWYgKHNrLVx1MDAzZXNrX3NvY2tldClcbiAxNDQ6XHRcdFx0Y2xlYXJfYml0KFNPQ0tfU1VQUE9SVF9aQywgXHUwMDI2c2stXHUwMDNlc2tfc29ja2V0LVx1MDAzZWZsYWdzKTtcbiAxNDU6XHRcbiAxNDY6XHRcdGVyciA9IC1FTk9UQ09OTjtcbiAxNDc6XHRcdGlmICghdWxwX29wcy1cdTAwM2VjbG9uZSBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0xJU1RFTilcbiAxNDg6XHRcdFx0Z290byBvdXRfZXJyO1xuIDE0OTpcdFxuIDE1MDpcdFx0ZXJyID0gdWxwX29wcy1cdTAwM2Vpbml0KHNrKTtcbiAxNTE6XHRcdGlmIChlcnIpXG4gMTUyOlx0XHRcdGdvdG8gb3V0X2VycjtcbiAxNTM6XHRcbiAxNTQ6XHRcdGljc2stXHUwMDNlaWNza191bHBfb3BzID0gdWxwX29wcztcbiAxNTU6XHRcdHJldHVybiAwO1xuIDE1NjpcdG91dF9lcnI6XG4gMTU3Olx0XHRtb2R1bGVfcHV0KHVscF9vcHMtXHUwMDNlb3duZXIpO1xuIDE1ODpcdFx0cmV0dXJuIGVycjtcbiAxNTk6XHR9XG4gMTYwOlx0XG4gMTYxOlx0aW50IHRjcF9zZXRfdWxwKHN0cnVjdCBzb2NrICpzaywgY29uc3QgY2hhciAqbmFtZSlcbiAxNjI6XHR7XG4gMTYzOlx0XHRjb25zdCBzdHJ1Y3QgdGNwX3VscF9vcHMgKnVscF9vcHM7XG4gMTY0Olx0XG4gMTY1Olx0XHRzb2NrX293bmVkX2J5X21lKHNrKTtcbiAxNjY6XHRcbiAxNjc6XHRcdHVscF9vcHMgPSBfX3RjcF91bHBfZmluZF9hdXRvbG9hZChuYW1lKTtcbiAxNjg6XHRcdGlmICghdWxwX29wcylcbiAxNjk6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzcxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIFNvY2tldCBBc3NvY2lhdGlvbioqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgZGl2aW5nIGJhY2sgaW50byB0aGUgYG5ldC9wc3BgIGRpcmVjdG9yeS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIHdlIG5lZWQgdG8gY2hlY2sgb3V0IGBwc3Bfc29jay5jYCBhbmQgemVybyBpbiBvbiB0aGUgYHBzcF9zb2NrX2Fzc29jX3NldF9yeGAgZnVuY3Rpb24uIE15IGluc3RpbmN0IGlzIHRoYXQgdGhpcyBhcmVhIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzeXN0ZW0gc2V0cyB1cCBhbmQgbWFuYWdlcyB0aGUgYXNzb2NpYXRpb24gYmV0d2VlbiBzb2NrZXRzIGFuZCByZWNlaXZlIHBhdGhzLiBXZSBuZWVkIHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBhc3NvY2lhdGlvbiwgYW5kIGhvdyBpdCBpcyBtYW5hZ2VkIHdpdGhpbiB0aGUgcmVjZWl2ZSBwcm9jZXNzaW5nIHBhdGguIExldCYjMzk7cyBzZWUgaWYgdGhpcyBmdW5jdGlvbiByZXZlYWxzIHNvbWV0aGluZyB3ZSYjMzk7cmUgbWlzc2luZy4gSSBzdXNwZWN0IGEgZGV0YWlsZWQgcmV2aWV3IG9mIHRoaXMgc2VjdGlvbiBtaWdodCBwcm92aWRlIGluc2lnaHRzIGludG8gdGhlIHJvb3QgY2F1c2Ugd2UgYXJlIGNoYXNpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3BzcC9wc3Bfc29jay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzA6XHR9XG4gMTMxOlx0XG4gMTMyOlx0aW50IHBzcF9zb2NrX2Fzc29jX3NldF9yeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwc3BfYXNzb2MgKnBhcyxcbiAxMzM6XHRcdFx0XHQgIHN0cnVjdCBwc3Bfa2V5X3BhcnNlZCAqa2V5LFxuIDEzNDpcdFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIDEzNTpcdHtcbiAxMzY6XHRcdGludCBlcnI7XG4gMTM3Olx0XG4gMTM4Olx0XHRtZW1jcHkoXHUwMDI2cGFzLVx1MDAzZXJ4LCBrZXksIHNpemVvZigqa2V5KSk7XG4gMTM5Olx0XG4gMTQwOlx0XHRsb2NrX3NvY2soc2spO1xuIDE0MTpcdFxuIDE0MjpcdFx0aWYgKHBzcF9za19hc3NvYyhzaykpIHtcbiAxNDM6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtTb2NrZXQgYWxyZWFkeSBoYXMgUFNQIHN0YXRlXCYjMzQ7KTtcbiAxNDQ6XHRcdFx0ZXJyID0gLUVCVVNZO1xuIDE0NTpcdFx0XHRnb3RvIGV4aXRfdW5sb2NrO1xuIDE0NjpcdFx0fSBlbHNlIGlmIChza19oYXNfZGVjcnlwdF91c2VyKHNrKSB8fCBza19oYXNfdmFsaWRhdGVfeG1pdF9za2Ioc2spKSB7XG4gMTQ3Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7U29ja2V0IGhhcyBpbmNvbXBhdGlibGUgc3RhdGVcJiMzNDspO1xuIDE0ODpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuIDE0OTpcdFx0XHRnb3RvIGV4aXRfdW5sb2NrO1xuIDE1MDpcdFx0fVxuIDE1MTpcdFxuIDE1MjpcdFx0cmVmY291bnRfaW5jKFx1MDAyNnBhcy1cdTAwM2VyZWZjbnQpO1xuIDE1MzpcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHNrLVx1MDAzZXBzcF9hc3NvYywgcGFzKTtcbiAxNTQ6XHRcdGVyciA9IDA7XG4gMTU1Olx0XG4gMTU2Olx0ZXhpdF91bmxvY2s6XG4gMTU3Olx0XHRyZWxlYXNlX3NvY2soc2spO1xuIDE1ODpcdFxuIDE1OTpcdFx0cmV0dXJuIGVycjtcbiAxNjA6XHR9XG4gMTYxOlx0XG4gMTYyOlx0c3RhdGljIGludCBwc3Bfc29ja19yZWN2X3F1ZXVlX2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9hc3NvYyAqcGFzKVxuIDE2MzpcdHtcbiAxNjQ6XHRcdHN0cnVjdCBwc3Bfc2tiX2V4dCAqcHNlO1xuIDE2NTpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiAxNjY6XHRcbiAxNjc6XHRcdHNrYl9yYnRyZWVfd2Fsayhza2IsIFx1MDAyNnRjcF9zayhzayktXHUwMDNlb3V0X29mX29yZGVyX3F1ZXVlKSB7XG4gMTY4Olx0XHRcdHBzZSA9IHNrYl9leHRfZmluZChza2IsIFNLQl9FWFRfUFNQKTtcbiAxNjk6XHRcdFx0aWYgKCFwc3BfcHNlX21hdGNoZXNfcGFzKHBzZSwgcGFzKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyMTAKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIHRoZSBQU1AgU29ja2V0IEFzc29jaWF0aW9uIExvZ2ljKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcyBgbmV0L3BzcC9gIGRpcmVjdG9yeS4gRmlyc3QgdGhpbmdzIGZpcnN0LCBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgZXhhY3RseSBQU1AgaXMgaW4gdGhpcyBjb250ZXh0LiBJcyBpdCBhIGN1c3RvbSBwcm90b2NvbCwgYSBwYXJ0aWN1bGFyIGhhcmR3YXJlIGFic3RyYWN0aW9uLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVW5kZXJzdGFuZGluZyB0aGUgKnB1cnBvc2UqIG9mIFBTUCBpcyBjcml0aWNhbCBiZWZvcmUgSSBjYW4gbWFrZSBzZW5zZSBvZiBpdHMgdXNhZ2UuIEdvdHRhIGdldCB0aGUgaGlnaC1sZXZlbCBjb250ZXh0LiBIb3cgaXMgaXQgKmRlc2lnbmVkKiB0byBiZSB1c2VkPwoKTmV4dCwgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhlIGZ1bmN0aW9uIGBwc3Bfc29ja19hc3NvY19zZXRfcnhgLiBUaGlzIGxpa2VseSBwbGF5cyBhIGtleSByb2xlIGluIGFzc29jaWF0aW5nIGluY29taW5nIHRyYWZmaWMgd2l0aCBhIHNwZWNpZmljIHNvY2tldCwgYW5kIHRoZSAmIzM0O3J4JiMzNDsgcGFydCB0ZWxscyBtZSBpdCYjMzk7cyBoYW5kbGluZyB0aGUgcmVjZWl2aW5nIHNpZGUgb2YgdGhpbmdzLiBTbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmhvdyogdGhlIHN5c3RlbSBpZGVudGlmaWVzIGFuZCByb3V0ZXMgaW5jb21pbmcgcGFja2V0cyBvciBkYXRhIHN0cmVhbXMgYmFzZWQgb24gUFNQLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgZ3JlcGAgKG9yIG15IHByZWZlcnJlZCBzZWFyY2ggdG9vbCkgdG8gZmluZCB0aGUgY2FsbGluZyBsb2NhdGlvbnMgb2YgYHBzcF9zb2NrX2Fzc29jX3NldF9yeGAuIFRoaXMgd2lsbCBwYWludCB0aGUgYmlnZ2VyIHBpY3R1cmU6IHdoYXQgb3RoZXIgY29tcG9uZW50cyBhcmUgaW52b2x2ZWQsIHdoYXQgdHJpZ2dlcnMgdGhpcyBhc3NvY2lhdGlvbiBwcm9jZXNzLCBhbmQgd2hlcmUgaXQgZml0cyBpbiB0aGUgZGF0YSBmbG93LiBGaW5kaW5nIHRob3NlIGNhbGxlcnMgd2lsbCBnaXZlIG1lIHZhbHVhYmxlIGNsdWVzIHRvIGl0cyBmdW5jdGlvbiBhbmQgc3RydWN0dXJlIHdpdGhpbiB0aGUgd2hvbGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwc3Bfc29ja19hc3NvY19zZXRfcngmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3BzcC9wc3AuaD0yNT12b2lkIHBzcF9kZXZfdHhfa2V5X2RlbChzdHJ1Y3QgcHNwX2RldiAqcHNkLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMpO1xubmV0L3BzcC9wc3AuaDoyNjppbnQgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9hc3NvYyAqcGFzLFxubmV0L3BzcC9wc3AuaC0yNy1cdFx0XHQgIHN0cnVjdCBwc3Bfa2V5X3BhcnNlZCAqa2V5LFxuLS1cbm5ldC9wc3AvcHNwX25sLmM9NzcwPWludCBwc3BfbmxfcnhfYXNzb2NfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9wc3AvcHNwX25sLmMtODA5LVxubmV0L3BzcC9wc3BfbmwuYzo4MTA6XHRlcnIgPSBwc3Bfc29ja19hc3NvY19zZXRfcngoc29ja2V0LVx1MDAzZXNrLCBwYXMsIFx1MDAyNmtleSwgaW5mby1cdTAwM2VleHRhY2spO1xubmV0L3BzcC9wc3BfbmwuYy04MTEtXHRpZiAoZXJyKSB7XG4tLVxubmV0L3BzcC9wc3Bfc29jay5jPTEyND12b2lkIHBzcF9za19hc3NvY19mcmVlKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTMxLVxubmV0L3BzcC9wc3Bfc29jay5jOjEzMjppbnQgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9hc3NvYyAqcGFzLFxubmV0L3BzcC9wc3Bfc29jay5jLTEzMy1cdFx0XHQgIHN0cnVjdCBwc3Bfa2V5X3BhcnNlZCAqa2V5LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTkwNgoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDEyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIE5ldGxpbmsgYW5kIFBTUCBJbnRlcmFjdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIG5ldGxpbmsgUFNQIGJ1c2luZXNzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBpdCBhbGwgaGFuZ3MgdG9nZXRoZXIuIEkgc2hvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhlIG5ldGxpbmsgaW1wbGVtZW50YXRpb24gb2YgUFNQLCBhbmQgd2hpbGUgSSYjMzk7bSBhdCBpdCwgSSYjMzk7bGwgcmVmcmVzaCBteSBtZW1vcnkgb2YgYHNrX2hhc19kZWNyeXB0X3VzZXJgLCBhbmQgdGhlIGlubmVyIHdvcmtpbmdzIG9mIGBfX3RjcF9zZXRfdWxwYCwgYW5kIHNpbWlsYXIgcmVsYXRlZCBmdW5jdGlvbnMuIEFoLCByaWdodCEgYHRjcF9zZXRfdWxwYCBpcyBpbnZva2VkIHRocm91Z2ggYHNldHNvY2tvcHRgIHdpdGggdGhlIGBTT0xfVENQYCBhbmQgYFRDUF9VTFBgIG9wdGlvbnMuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKTm93LCB3aGVyZSBkb2VzIHRoZSBQU1AgbmV0bGluayBwcm9jZXNzaW5nIGFjdHVhbGx5IGhhcHBlbj8gQWgsIHllcywgYHBzcF9ubF9yeF9hc3NvY19kb2l0YCBpcyB3aGF0JiMzOTtzIGNhbGxlZCB3aGVuIHJlY2VpdmluZyB0cmFmZmljIGZyb20gdGhlIFBTUCBuZXRsaW5rIGZhbWlseS4gVGhpcyBnaXZlcyBtZSBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgZGF0YSBwYXRoLgoKSSB3b25kZXLigKYgY2FuIHdlIGxldmVyYWdlIG5ldGRldnNpbSBmb3IgdGVzdGluZyBQU1A/IEl0IHdvdWxkIGJlIGdyZWF0IHRvIGlzb2xhdGUgYW5kIHRlc3QgdGhpcyB3aXRob3V0IGhhdmluZyB0byBkZWFsIHdpdGggcmVhbCBoYXJkd2FyZS4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IG1lbnRpb24gb2YgYG5zaW1fcHNwYCwgb3IgaG93IFBTUC1yZWxhdGVkIGRldmljZXMgYXJlIHJlZ2lzdGVyZWQgd2l0aGluIG5ldGRldnNpbS4gVGltZSB0byBicmVhayBvdXQgZ3JlcCBhbmQgc2VlIHdoYXQgdGhlIGtlcm5lbCBzb3VyY2UgaGFzIHRvIG9mZmVyIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuc2ltX3BzcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM9MTAzPXN0YXRpYyBpbnQgbnNpbV9mb3J3YXJkX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqdHhfZGV2LFxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xMTctXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6MTE4Olx0bnNpbV9wc3BfaGFuZGxlX2V4dChza2IsIHBzcF9leHQpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTExOS1cbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM9MTA0MD1zdGF0aWMgaW50IG5zaW1faW5pdF9uZXRkZXZzaW0oc3RydWN0IG5ldGRldnNpbSAqbnMpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTEwNzYtXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6MTA3NzpcdGVyciA9IG5zaW1fcHNwX2luaXQobnMpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTEwNzgtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYz0xMTc1PXZvaWQgbnNpbV9kZXN0cm95KHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xMTkwLVx0aWYgKG5zaW1fZGV2X3BvcnRfaXNfcGYobnMtXHUwMDNlbnNpbV9kZXZfcG9ydCkpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6MTE5MTpcdFx0bnNpbV9wc3BfdW5pbml0KG5zKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xMTkyLVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD00NDU9c3RhdGljIGlubGluZSB2b2lkIG5zaW1fbWFjc2VjX3RlYXJkb3duKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00NTAtI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQ1MTppbnQgbnNpbV9wc3BfaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucyk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6NDUyOnZvaWQgbnNpbV9wc3BfdW5pbml0KHN0cnVjdCBuZXRkZXZzaW0gKm5zKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDo0NTM6dm9pZCBuc2ltX3BzcF9oYW5kbGVfZXh0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBza2JfZXh0ICpwc3BfZXh0KTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00NTQtZW51bSBza2JfZHJvcF9yZWFzb25cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD00NTU9bnNpbV9kb19wc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGRldnNpbSAqbnMsXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQ1Ny0jZWxzZVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQ1ODpzdGF0aWMgaW5saW5lIGludCBuc2ltX3BzcF9pbml0KHN0cnVjdCBuZXRkZXZzaW0gKm5zKSB7IHJldHVybiAwOyB9XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6NDU5OnN0YXRpYyBpbmxpbmUgdm9pZCBuc2ltX3BzcF91bmluaXQoc3RydWN0IG5ldGRldnNpbSAqbnMpIHt9XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtNDYwLXN0YXRpYyBpbmxpbmUgZW51bSBza2JfZHJvcF9yZWFzb25cbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg9NDY3PXN0YXRpYyBpbmxpbmUgdm9pZFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQ2ODpuc2ltX3BzcF9oYW5kbGVfZXh0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBza2JfZXh0ICpwc3BfZXh0KSB7fVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQ2OS0jZW5kaWZcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMTAtXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM6MTE6dm9pZCBuc2ltX3BzcF9oYW5kbGVfZXh0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBza2JfZXh0ICpwc3BfZXh0KVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTEyLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM9MTIzPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzoxMjQ6bnNpbV9wc3Bfc2V0X2NvbmZpZyhzdHJ1Y3QgcHNwX2RldiAqcHNkLCBzdHJ1Y3QgcHNwX2Rldl9jb25maWcgKmNvbmYsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMTI1LVx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYz0xODk9c3RhdGljIHZvaWQgbnNpbV9nZXRfc3RhdHMoc3RydWN0IHBzcF9kZXYgKnBzZCwgc3RydWN0IHBzcF9kZXZfc3RhdHMgKnN0YXRzKVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yMDMtXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM6MjA0OnN0YXRpYyBzdHJ1Y3QgcHNwX2Rldl9vcHMgbnNpbV9wc3Bfb3BzID0ge1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjIwNTpcdC5zZXRfY29uZmlnXHQ9IG5zaW1fcHNwX3NldF9jb25maWcsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMjA2LVx0LnJ4X3NwaV9hbGxvY1x0PSBuc2ltX3J4X3NwaV9hbGxvYyxcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMjEyLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjIxMzpzdGF0aWMgc3RydWN0IHBzcF9kZXZfY2FwcyBuc2ltX3BzcF9jYXBzID0ge1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTIxNC1cdC52ZXJzaW9ucyA9IDEgXHUwMDNjXHUwMDNjIFBTUF9WRVJTSU9OX0hEUjBfQUVTX0dDTV8xMjggfFxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yMjAtXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM6MjIxOnN0YXRpYyB2b2lkIF9fbnNpbV9wc3BfdW5pbml0KHN0cnVjdCBuZXRkZXZzaW0gKm5zLCBib29sIHRlYXJkb3duKVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTIyMi17XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTIzNS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzoyMzY6dm9pZCBuc2ltX3BzcF91bmluaXQoc3RydWN0IG5ldGRldnNpbSAqbnMpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMjM3LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMjM5LVx0bXV0ZXhfZGVzdHJveShcdTAwMjZucy1cdTAwM2Vwc3AucmVyZWdfbG9jayk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM6MjQwOlx0X19uc2ltX3BzcF91bmluaXQobnMsIHRydWUpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTI0MS19XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jPTI0Mz1zdGF0aWMgc3NpemVfdFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjI0NDpuc2ltX3BzcF9yZXJlZ193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmRhdGEsIHNpemVfdCBjb3VudCxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yNDUtXHRcdCAgICAgbG9mZl90ICpwcG9zKVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yNTEtXHRtdXRleF9sb2NrKFx1MDAyNm5zLVx1MDAzZXBzcC5yZXJlZ19sb2NrKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzoyNTI6XHRfX25zaW1fcHNwX3VuaW5pdChucywgZmFsc2UpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTI1My1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzoyNTQ6XHRwc2QgPSBwc3BfZGV2X2NyZWF0ZShucy1cdTAwM2VuZXRkZXYsIFx1MDAyNm5zaW1fcHNwX29wcywgXHUwMDI2bnNpbV9wc3BfY2FwcywgbnMpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTI1NS1cdGlmIChJU19FUlIocHNkKSkge1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yNjYtXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM6MjY3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5zaW1fcHNwX3JlcmVnX2ZvcHMgPSB7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMjY4LVx0Lm9wZW4gPSBzaW1wbGVfb3BlbixcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzoyNjk6XHQud3JpdGUgPSBuc2ltX3BzcF9yZXJlZ193cml0ZSxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yNzAtXHQubGxzZWVrID0gZ2VuZXJpY19maWxlX2xsc2Vlayxcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMjczLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjI3NDppbnQgbnNpbV9wc3BfaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucylcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yNzUte1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yNzgtXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM6Mjc5Olx0cHNkID0gcHNwX2Rldl9jcmVhdGUobnMtXHUwMDNlbmV0ZGV2LCBcdTAwMjZuc2ltX3BzcF9vcHMsIFx1MDAyNm5zaW1fcHNwX2NhcHMsIG5zKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yODAtXHRpZiAoSVNfRVJSKHBzZCkpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTI4Ni1cdG5zLVx1MDAzZXBzcC5yZXJlZyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7cHNwX3JlcmVnXCYjMzQ7LCAwMjAwLCBkZGlyLCBucyxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzoyODc6XHRcdFx0XHRcdCAgICBcdTAwMjZuc2ltX3BzcF9yZXJlZ19mb3BzKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yODgtXHRyZXR1cm4gMDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk9NTM4PWRlZiBkYXRhX3N0YWxlX2tleShjZmcpOlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS01NzEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk6NTcyOmRlZiBfX25zaW1fcHNwX3JlcmVnKGNmZyk6XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHktNTczLSAgICAjIFRoZSBQU1AgZGV2IElEIHdpbGwgY2hhbmdlLCByZW1lbWJlciB3aGF0IHdhcyB0aGVyZSBiZWZvcmVcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk9NTg1PWRlZiByZW1vdmFsX2RldmljZV9yeChjZmcpOlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS01OTktXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk6NjAwOiAgICAgICAgX19uc2ltX3BzcF9yZXJlZyhjZmcpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHktNjAxLSAgICBmaW5hbGx5OlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weT02MDU9ZGVmIHJlbW92YWxfZGV2aWNlX2JpKGNmZyk6XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTYyMS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCYjMzQ7c29jay1mZFwmIzM0Ozogcy5maWxlbm8oKX0pXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk6NjIyOiAgICAgICAgX19uc2ltX3BzcF9yZXJlZyhjZmcpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHktNjIzLSAgICBmaW5hbGx5OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDgzMwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDQwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQU1AvVENQIFVMUCBJbnRlcmFjdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIFBTUCBpcyBoYW5kbGVkIHRocm91Z2ggYG5ldGRldnNpbWAsIHdoaWNoIGlzIGVzc2VudGlhbGx5IGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgd2l0aGluIFFFTVUgYW5kIHN5emthbGxlci4gVENQIFVMUCwgYW5kIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpbmdzIGxpa2Uga1RMUywgQlBGLCBhbmQgTVBUQ1AsIGFyZSBhY2Nlc3NlZCB1c2luZyBzdGFuZGFyZCBzb2NrZXQgc3lzY2FsbHMsIHNwZWNpZmljYWxseSBgc2V0c29ja29wdCguLi4sIFNPTF9UQ1AsIFRDUF9VTFAsIC4uLilgLiBSaWdodCwgSSByZWNhbGwgdGhvc2UgZnVuY3Rpb25zOiBgc2tfaGFzX2RlY3J5cHRfdXNlcmAgaXMgaW4gYHNvY2suY2AsIGBfX3RjcF9zZXRfdWxwYCBpbiBgdGNwX3VscC5jYCwgYW5kIGBwc3Bfc29ja19hc3NvY19zZXRfcnhgIGluIGBwc3Bfc29jay5jYC4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogZG9lcyB0aGUgbW9kaWZpZWQgY29kZSBpbnRlcmFjdCB3aXRoIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgYW5kIHRoZSBQU1Agc2lkZSBvZiB0aGluZ3M/IFllcCwgaXQgaGl0cyBjb3JlIG5ldHdvcmtpbmcsIFRDUCBVTFAsIGFuZCBQU1Agc29ja2V0cy4gVGhlIGNvZGUmIzM5O3MgaW50cm9kdWNpbmcgY2hlY2tzIHRvIGF2b2lkIGNvbmZsaWN0cyDigJMgc3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBwcmV2ZW50aW5nIHRoZSBjb21iaW5hdGlvbiBvZiBQU1Agd2l0aCBUQ1AgVUxQIG9yIHNvY2tldHMgZW1wbG95aW5nIGBza192YWxpZGF0ZV94bWl0X3NrYmAsIHdoaWNoIEkgdGhpbmsgb2Ygd2l0aCBrVExTIGRldmljZSBvZmZsb2FkIG9yIFBTUC4gSXQmIzM5O3MgZXNzZW50aWFsbHkgZW5zdXJpbmcgdGhhdCBvZmZsb2FkIGFuZCBkZWNyeXB0aW9uIHN0YXRlcyBkb24mIzM5O3QgY2xhc2ggb24gdGhlIHNhbWUgc29ja2V0LiBUaGF0IG1ha2VzIHNlbnNlLgoKTmV4dCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgJiMzNDtXb3J0aEZ1enppbmcmIzM0Oy4gRmlyc3QsIGlzIGl0IHJlYWNoYWJsZSBpbiBhIHR5cGljYWwgUUVNVS92aXJ0dWFsaXplZCBzZXR1cD8gWWVzLCBUQ1AgVUxQIGlzIHBhcnQgb2Ygc3RhbmRhcmQgbmV0d29ya2luZyAod2UmIzM5O3ZlIGdvdCBgQ09ORklHX0lORVRgLCBgQ09ORklHX1RDUF9VTFBgKSwga1RMUyBpcyB0aGVyZSAoYENPTkZJR19UTFNgKSwgYW5kIFBTUCBpcyBjb25maWd1cmVkIChgQ09ORklHX0lORVRfUFNQYCwgYENPTkZJR19ORVRERVZTSU1gKS4gTm93LCBpcyBpdCAqd29ydGgqIGZ1enppbmc/IEFic29sdXRlbHkuIFRoZXNlIHJlZmFjdG9yaW5ncyBhbmQgY2hlY2tzIGluIGNydWNpYWwgc3Vic3lzdGVtcyAoVENQIFVMUCwgc29ja2V0IG1hbmFnZW1lbnQsIFBTUCkgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZSBhbmQgYXJlIGFsdGVyaW5nIHNvY2tldCBzdGF0ZSBjaGVja3MuIEl0JiMzOTtzIHByaW1lIHRlcnJpdG9yeSBmb3IgZmluZGluZyBlZGdlIGNhc2VzLgoKRmluYWxseSwgd2hhdCBhcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBzZXQgdXA/IEkmIzM5O20gdGhpbmtpbmc6CgoqICAgYElORVRfUFNQYAoqICAgYFRMU2AgKG9yIGF0IGxlYXN0IGBJTkVUX1VMUGAgb3IgYFRDUF9VTFBgIOKAkyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBLY29uZmlnYCBmb3IgdGhlIGRlcGVuZGVuY2llcyBvZiBgVENQX1VMUGAsIGBUTFNgLCBldGMuKQoqICAgYE5FVERFVlNJTWAKCkxldCBtZSBqdXN0IHF1aWNrbHkgY29uc3VsdCB0aGUgYEtjb25maWdgIGZpbGVzIGZvciBgVENQX1VMUGAgYW5kIGBUTFNgIHRvIGNvbmZpcm0gZGVwZW5kZW5jaWVzIGFuZCB0aGVpciByZWxhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1RDUF9VTFAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3Rscy5yc3Q9MjA9VExTIFVMUC5cbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGxzLnJzdC0yNS0gIGNvbm5lY3Qoc29jaywgYWRkciwgYWRkcmxlbik7XG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGxzLnJzdDoyNjogIHNldHNvY2tvcHQoc29jaywgU09MX1RDUCwgVENQX1VMUCwgXCYjMzQ7dGxzXCYjMzQ7LCBzaXplb2YoXCYjMzQ7dGxzXCYjMzQ7KSk7XG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGxzLnJzdC0yNy1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuYz05NT1zdGF0aWMgYm9vbCBzcmNfcHJvdG8oZW51bSBwcm90b2NvbF90eXBlIHR5cGUpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuYy05Ni17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuYzo5NzpcdHJldHVybiB0eXBlID09IFBST1RPQ09MSURfVENQX1VMUCB8fFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmMtOTgtXHQgICAgICAgdHlwZSA9PSBQUk9UT0NPTElEX0ZDT0UgfHxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuYz0xMDI9c3RhdGljIGJvb2wgdG1fY2lkX3Byb3RvKGVudW0gcHJvdG9jb2xfdHlwZSB0eXBlKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmMtMTAzLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2N4dC5jOjEwNDpcdHJldHVybiB0eXBlID09IFBST1RPQ09MSURfVENQX1VMUCB8fFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmMtMTA1LVx0ICAgICAgIHR5cGUgPT0gUFJPVE9DT0xJRF9GQ09FIHx8XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmM9MjAxNj1pbnQgcWVkX2N4dF9zZXRfcGZfcGFyYW1zKHN0cnVjdCBxZWRfaHdmbiAqcF9od2ZuLCB1MzIgcmRtYV90YXNrcylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuYy0yMDc4LVx0XHRcdHFlZF9jeHRfc2V0X3Byb3RvX2NpZF9jb3VudChwX2h3Zm4sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuYzoyMDc5Olx0XHRcdFx0XHRcdCAgICBQUk9UT0NPTElEX1RDUF9VTFAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuYy0yMDgwLVx0XHRcdFx0XHRcdCAgICBwX3BhcmFtcy1cdTAwM2VudW1fY29ucyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuYy0yMDgyLVx0XHRcdHFlZF9jeHRfc2V0X3Byb3RvX3RpZF9jb3VudChwX2h3Zm4sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuYzoyMDgzOlx0XHRcdFx0XHRcdCAgICBQUk9UT0NPTElEX1RDUF9VTFAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuYzoyMDg0Olx0XHRcdFx0XHRcdCAgICBRRURfQ1hUX1RDUF9VTFBfVElEX1NFRyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2N4dC5jLTIwODUtXHRcdFx0XHRcdFx0ICAgIDAsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmMtMjEwMS1cdFx0XHRxZWRfY3h0X3NldF9wcm90b19jaWRfY291bnQocF9od2ZuLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmM6MjEwMjpcdFx0XHRcdFx0XHQgICAgUFJPVE9DT0xJRF9UQ1BfVUxQLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmMtMjEwMy1cdFx0XHRcdFx0XHQgICAgcF9wYXJhbXMtXHUwMDNlbnVtX2NvbnMsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmMtMjEwNS1cdFx0XHRxZWRfY3h0X3NldF9wcm90b190aWRfY291bnQocF9od2ZuLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmM6MjEwNjpcdFx0XHRcdFx0XHQgICAgUFJPVE9DT0xJRF9UQ1BfVUxQLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmM6MjEwNzpcdFx0XHRcdFx0XHQgICAgUUVEX0NYVF9UQ1BfVUxQX1RJRF9TRUcsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuYy0yMTA4LVx0XHRcdFx0XHRcdCAgICAwLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2N4dC5jPTIxMjQ9aW50IHFlZF9jeHRfZ2V0X3RpZF9tZW1faW5mbyhzdHJ1Y3QgcWVkX2h3Zm4gKnBfaHdmbixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuYy0yMTQwLVx0Y2FzZSBRRURfUENJX05WTUVUQ1A6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuYzoyMTQxOlx0XHRwcm90byA9IFBST1RPQ09MSURfVENQX1VMUDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2N4dC5jOjIxNDI6XHRcdHNlZyA9IFFFRF9DWFRfVENQX1VMUF9USURfU0VHO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmMtMjE0My1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmM9MjQ0OD1pbnQgcWVkX2N4dF9nZXRfdGFza19jdHgoc3RydWN0IHFlZF9od2ZuICpwX2h3Zm4sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmMtMjQ2Ny1cdGNhc2UgUUVEX1BDSV9OVk1FVENQOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmM6MjQ2ODpcdFx0cHJvdG8gPSBQUk9UT0NPTElEX1RDUF9VTFA7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuYzoyNDY5Olx0XHRzZWcgPSBRRURfQ1hUX1RDUF9VTFBfVElEX1NFRztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2N4dC5jLTI0NzAtXHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2N4dC5oPTQ5PWludCBxZWRfY3h0X2dldF90aWRfbWVtX2luZm8oc3RydWN0IHFlZF9od2ZuICpwX2h3Zm4sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmgtNTEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuaDo1MjojZGVmaW5lIFFFRF9DWFRfVENQX1VMUF9USURfU0VHXHRQUk9UT0NPTElEX1RDUF9VTFBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2N4dC5oLTUzLSNkZWZpbmUgUUVEX0NYVF9ST0NFX1RJRF9TRUdcdFBST1RPQ09MSURfUk9DRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2Rldi5jPTIxMzk9aW50IHFlZF9yZXNjX2FsbG9jKHN0cnVjdCBxZWRfZGV2ICpjZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2Rldi5jLTIyNTktXHRcdFx0ICAgIHFlZF9jeHRfZ2V0X3Byb3RvX2NpZF9jb3VudChwX2h3Zm4sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9kZXYuYzoyMjYwOlx0XHRcdFx0XHRcdFx0UFJPVE9DT0xJRF9UQ1BfVUxQLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfZGV2LmMtMjI2MS1cdFx0XHRcdFx0XHRcdE5VTEwpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2hzaS5oPTExODQ9ZW51bSBwZXJzb25hbGl0eV90eXBlIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2hzaS5oLTExODUtXHRCQURfUEVSU09OQUxJVFlfVFlQLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaHNpLmg6MTE4NjpcdFBFUlNPTkFMSVRZX1RDUF9VTFAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9oc2kuaC0xMTg3LVx0UEVSU09OQUxJVFlfRkNPRSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pc2NzaS5jPTEzNz1xZWRfc3BfaXNjc2lfZnVuY19zdGFydChzdHJ1Y3QgcWVkX2h3Zm4gKnBfaHdmbixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pc2NzaS5jLTE2MS1cdFx0XHRcdCBJU0NTSV9SQU1ST0RfQ01EX0lEX0lOSVRfRlVOQyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmM6MTYyOlx0XHRcdFx0IFBST1RPQ09MSURfVENQX1VMUCwgXHUwMDI2aW5pdF9kYXRhKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtMTYzLVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtMjUzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXNjc2kuYzoyNTQ6XHRxZWRfc3BxX3JlZ2lzdGVyX2FzeW5jX2NiKHBfaHdmbiwgUFJPVE9DT0xJRF9UQ1BfVUxQLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXNjc2kuYy0yNTUtXHRcdFx0XHQgIHFlZF9pc2NzaV9hc3luY19ldmVudCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXNjc2kuYz0yNjA9c3RhdGljIGludCBxZWRfc3BfaXNjc2lfY29ubl9vZmZsb2FkKHN0cnVjdCBxZWRfaHdmbiAqcF9od2ZuLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtMjg5LVx0XHRcdFx0IElTQ1NJX1JBTVJPRF9DTURfSURfT0ZGTE9BRF9DT05OLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXNjc2kuYzoyOTA6XHRcdFx0XHQgUFJPVE9DT0xJRF9UQ1BfVUxQLCBcdTAwMjZpbml0X2RhdGEpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXNjc2kuYy0yOTEtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXNjc2kuYz00NDk9c3RhdGljIGludCBxZWRfc3BfaXNjc2lfY29ubl91cGRhdGUoc3RydWN0IHFlZF9od2ZuICpwX2h3Zm4sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXNjc2kuYy00NjgtXHRcdFx0XHQgSVNDU0lfUkFNUk9EX0NNRF9JRF9VUERBVEVfQ09OTixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmM6NDY5Olx0XHRcdFx0IFBST1RPQ09MSURfVENQX1VMUCwgXHUwMDI2aW5pdF9kYXRhKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtNDcwLVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmM9NDkwPXFlZF9zcF9pc2NzaV9tYWNfdXBkYXRlKHN0cnVjdCBxZWRfaHdmbiAqcF9od2ZuLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtNTA5LVx0XHRcdFx0IElTQ1NJX1JBTVJPRF9DTURfSURfTUFDX1VQREFURSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmM6NTEwOlx0XHRcdFx0IFBST1RPQ09MSURfVENQX1VMUCwgXHUwMDI2aW5pdF9kYXRhKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtNTExLVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmM9NTMzPXN0YXRpYyBpbnQgcWVkX3NwX2lzY3NpX2Nvbm5fdGVybWluYXRlKHN0cnVjdCBxZWRfaHdmbiAqcF9od2ZuLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtNTUxLVx0XHRcdFx0IElTQ1NJX1JBTVJPRF9DTURfSURfVEVSTUlOQVRJT05fQ09OTixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmM6NTUyOlx0XHRcdFx0IFBST1RPQ09MSURfVENQX1VMUCwgXHUwMDI2aW5pdF9kYXRhKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtNTUzLVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmM9NTY4PXN0YXRpYyBpbnQgcWVkX3NwX2lzY3NpX2Nvbm5fY2xlYXJfc3Eoc3RydWN0IHFlZF9od2ZuICpwX2h3Zm4sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXNjc2kuYy01ODUtXHRcdFx0XHQgSVNDU0lfUkFNUk9EX0NNRF9JRF9DTEVBUl9TUSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmM6NTg2Olx0XHRcdFx0IFBST1RPQ09MSURfVENQX1VMUCwgXHUwMDI2aW5pdF9kYXRhKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtNTg3LVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmM9NTkzPXN0YXRpYyBpbnQgcWVkX3NwX2lzY3NpX2Z1bmNfc3RvcChzdHJ1Y3QgcWVkX2h3Zm4gKnBfaHdmbixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pc2NzaS5jLTYwOS1cdFx0XHRcdCBJU0NTSV9SQU1ST0RfQ01EX0lEX0RFU1RST1lfRlVOQyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmM6NjEwOlx0XHRcdFx0IFBST1RPQ09MSURfVENQX1VMUCwgXHUwMDI2aW5pdF9kYXRhKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtNjExLVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtNjE1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXNjc2kuYzo2MTY6XHRxZWRfc3BxX3VucmVnaXN0ZXJfYXN5bmNfY2IocF9od2ZuLCBQUk9UT0NPTElEX1RDUF9VTFApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXNjc2kuYy02MTctXHRyZXR1cm4gcmM7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXNjc2kuYz03Nzk9c3RhdGljIGludCBxZWRfaXNjc2lfYWNxdWlyZV9jb25uZWN0aW9uKHN0cnVjdCBxZWRfaHdmbiAqcF9od2ZuLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtNzg3LVx0c3Bpbl9sb2NrX2JoKFx1MDAyNnBfaHdmbi1cdTAwM2VwX2lzY3NpX2luZm8tXHUwMDNlbG9jayk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pc2NzaS5jOjc4ODpcdHJjID0gcWVkX2N4dF9hY3F1aXJlX2NpZChwX2h3Zm4sIFBST1RPQ09MSURfVENQX1VMUCwgXHUwMDI2aWNpZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pc2NzaS5jLTc4OS1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnBfaHdmbi1cdTAwM2VwX2lzY3NpX2luZm8tXHUwMDNlbG9jayk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbGwyLmM9MTAyMz1zdGF0aWMgaW50IHFlZF9zcF9sbDJfdHhfcXVldWVfc3RhcnQoc3RydWN0IHFlZF9od2ZuICpwX2h3Zm4sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbGwyLmMtMTA4NC1cdFx0YnJlYWs7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9sbDIuYzoxMDg1Olx0Y2FzZSBRRURfTEwyX1RZUEVfVENQX1VMUDpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2xsMi5jOjEwODY6XHRcdHBfcmFtcm9kLVx1MDAzZWNvbm5fdHlwZSA9IFBST1RPQ09MSURfVENQX1VMUDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2xsMi5jLTEwODctXHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2xsMi5jLTEwOTYtXHRcdCAgICBwX2h3Zm4tXHUwMDNlaHdfaW5mby5wZXJzb25hbGl0eSA9PSBRRURfUENJX05WTUVUQ1ApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9sbDIuYzoxMDk3Olx0XHRcdHBfcmFtcm9kLVx1MDAzZWNvbm5fdHlwZSA9IFBST1RPQ09MSURfVENQX1VMUDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2xsMi5jLTEwOTgtXHRcdGVsc2Vcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9sbDIuYz0yNTAwPXN0YXRpYyBpbnQgX19xZWRfbGwyX3N0YXJ0KHN0cnVjdCBxZWRfaHdmbiAqcF9od2ZuLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2xsMi5jLTI1MTQtXHRjYXNlIFFFRF9QQ0lfTlZNRVRDUDpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2xsMi5jOjI1MTU6XHRcdGNvbm5fdHlwZSA9IFFFRF9MTDJfVFlQRV9UQ1BfVUxQO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbGwyLmMtMjUxNi1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jPTQ4PXN0YXRpYyBpbnQgcWVkX3NwX252bWV0Y3BfZnVuY19zdGFydChzdHJ1Y3QgcWVkX2h3Zm4gKnBfaHdmbixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmMtNzAtXHRcdFx0XHQgTlZNRVRDUF9SQU1ST0RfQ01EX0lEX0lOSVRfRlVOQyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX252bWV0Y3AuYzo3MTpcdFx0XHRcdCBQUk9UT0NPTElEX1RDUF9VTFAsIFx1MDAyNmluaXRfZGF0YSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmMtNzItXHRpZiAocmMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jLTExMi1cdHBfaHdmbi1cdTAwM2VwX252bWV0Y3BfaW5mby1cdTAwM2VldmVudF9jYiA9IGFzeW5jX2V2ZW50X2NiO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jOjExMzpcdHFlZF9zcHFfcmVnaXN0ZXJfYXN5bmNfY2IocF9od2ZuLCBQUk9UT0NPTElEX1RDUF9VTFAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmMtMTE0LVx0XHRcdFx0ICBxZWRfbnZtZXRjcF9hc3luY19ldmVudCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jPTExOT1zdGF0aWMgaW50IHFlZF9zcF9udm1ldGNwX2Z1bmNfc3RvcChzdHJ1Y3QgcWVkX2h3Zm4gKnBfaHdmbixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmMtMTM0LVx0XHRcdFx0IE5WTUVUQ1BfUkFNUk9EX0NNRF9JRF9ERVNUUk9ZX0ZVTkMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmM6MTM1Olx0XHRcdFx0IFBST1RPQ09MSURfVENQX1VMUCwgXHUwMDI2aW5pdF9kYXRhKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX252bWV0Y3AuYy0xMzYtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jLTEzOS1cdHJjID0gcWVkX3NwcV9wb3N0KHBfaHdmbiwgcF9lbnQsIE5VTEwpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jOjE0MDpcdHFlZF9zcHFfdW5yZWdpc3Rlcl9hc3luY19jYihwX2h3Zm4sIFBST1RPQ09MSURfVENQX1VMUCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmMtMTQxLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX252bWV0Y3AuYz0yNjY9c3RhdGljIGludCBxZWRfc3BfbnZtZXRjcF9jb25uX29mZmxvYWQoc3RydWN0IHFlZF9od2ZuICpwX2h3Zm4sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jLTI4OC1cdFx0XHRcdCBOVk1FVENQX1JBTVJPRF9DTURfSURfT0ZGTE9BRF9DT05OLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jOjI4OTpcdFx0XHRcdCBQUk9UT0NPTElEX1RDUF9VTFAsIFx1MDAyNmluaXRfZGF0YSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmMtMjkwLVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX252bWV0Y3AuYz0zNTY9c3RhdGljIGludCBxZWRfc3BfbnZtZXRjcF9jb25uX3VwZGF0ZShzdHJ1Y3QgcWVkX2h3Zm4gKnBfaHdmbixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmMtMzc1LVx0XHRcdFx0IE5WTUVUQ1BfUkFNUk9EX0NNRF9JRF9VUERBVEVfQ09OTixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX252bWV0Y3AuYzozNzY6XHRcdFx0XHQgUFJPVE9DT0xJRF9UQ1BfVUxQLCBcdTAwMjZpbml0X2RhdGEpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jLTM3Ny1cdGlmIChyYylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmM9MzkzPXN0YXRpYyBpbnQgcWVkX3NwX252bWV0Y3BfY29ubl90ZXJtaW5hdGUoc3RydWN0IHFlZF9od2ZuICpwX2h3Zm4sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jLTQxMC1cdFx0XHRcdCBOVk1FVENQX1JBTVJPRF9DTURfSURfVEVSTUlOQVRJT05fQ09OTixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX252bWV0Y3AuYzo0MTE6XHRcdFx0XHQgUFJPVE9DT0xJRF9UQ1BfVUxQLCBcdTAwMjZpbml0X2RhdGEpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jLTQxMi1cdGlmIChyYylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmM9NDIyPXN0YXRpYyBpbnQgcWVkX3NwX252bWV0Y3BfY29ubl9jbGVhcl9zcShzdHJ1Y3QgcWVkX2h3Zm4gKnBfaHdmbixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmMtNDM4LVx0XHRcdFx0IE5WTUVUQ1BfUkFNUk9EX0NNRF9JRF9DTEVBUl9TUSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX252bWV0Y3AuYzo0Mzk6XHRcdFx0XHQgUFJPVE9DT0xJRF9UQ1BfVUxQLCBcdTAwMjZpbml0X2RhdGEpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jLTQ0MC1cdGlmIChyYylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmM9NTE4PXN0YXRpYyBpbnQgcWVkX252bWV0Y3BfYWNxdWlyZV9jb25uZWN0aW9uKHN0cnVjdCBxZWRfaHdmbiAqcF9od2ZuLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX252bWV0Y3AuYy01MjUtXHRzcGluX2xvY2tfYmgoXHUwMDI2cF9od2ZuLVx1MDAzZXBfbnZtZXRjcF9pbmZvLVx1MDAzZWxvY2spO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jOjUyNjpcdHJjID0gcWVkX2N4dF9hY3F1aXJlX2NpZChwX2h3Zm4sIFBST1RPQ09MSURfVENQX1VMUCwgXHUwMDI2aWNpZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmMtNTI3LVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cF9od2ZuLVx1MDAzZXBfbnZtZXRjcF9pbmZvLVx1MDAzZWxvY2spO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX29vby5jPTc2PWludCBxZWRfb29vX2FsbG9jKHN0cnVjdCBxZWRfaHdmbiAqcF9od2ZuKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX29vby5jLTg2LVx0Y2FzZSBRRURfUENJX05WTUVUQ1A6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9vb28uYzo4NzpcdFx0cHJvdG8gPSBQUk9UT0NPTElEX1RDUF9VTFA7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9vb28uYy04OC1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfc3BfY29tbWFuZHMuYz0zMDA9aW50IHFlZF9zcF9wZl9zdGFydChzdHJ1Y3QgcWVkX2h3Zm4gKnBfaHdmbixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9zcF9jb21tYW5kcy5jLTM5NC1cdGNhc2UgUUVEX1BDSV9OVk1FVENQOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfc3BfY29tbWFuZHMuYzozOTU6XHRcdHBfcmFtcm9kLVx1MDAzZXBlcnNvbmFsaXR5ID0gUEVSU09OQUxJVFlfVENQX1VMUDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX3NwX2NvbW1hbmRzLmMtMzk2LVx0XHRicmVhaztcbi0tXG5pbmNsdWRlL2xpbnV4L3FlZC9jb21tb25faHNpLmg9NjgxPXN0cnVjdCB0Y3BfdWxwX2Nvbm5lY3RfZG9uZV9wYXJhbXMge1xuLS1cbmluY2x1ZGUvbGludXgvcWVkL2NvbW1vbl9oc2kuaC02ODQtXHR1OCBmbGFncztcbmluY2x1ZGUvbGludXgvcWVkL2NvbW1vbl9oc2kuaDo2ODU6I2RlZmluZSBUQ1BfVUxQX0NPTk5FQ1RfRE9ORV9QQVJBTVNfVFNfRU5fTUFTS1x0XHQweDFcbmluY2x1ZGUvbGludXgvcWVkL2NvbW1vbl9oc2kuaDo2ODY6I2RlZmluZSBUQ1BfVUxQX0NPTk5FQ1RfRE9ORV9QQVJBTVNfVFNfRU5fU0hJRlRcdFx0MFxuaW5jbHVkZS9saW51eC9xZWQvY29tbW9uX2hzaS5oOjY4NzojZGVmaW5lIFRDUF9VTFBfQ09OTkVDVF9ET05FX1BBUkFNU19SRVNFUlZFRF9NQVNLXHQweDdGXG5pbmNsdWRlL2xpbnV4L3FlZC9jb21tb25faHNpLmg6Njg4OiNkZWZpbmUgVENQX1VMUF9DT05ORUNUX0RPTkVfUEFSQU1TX1JFU0VSVkVEX1NISUZUXHQxXG5pbmNsdWRlL2xpbnV4L3FlZC9jb21tb25faHNpLmgtNjg5LX07XG4tLVxuaW5jbHVkZS9saW51eC9xZWQvY29tbW9uX2hzaS5oPTcyNz1lbnVtIHByb3RvY29sX3R5cGUge1xuaW5jbHVkZS9saW51eC9xZWQvY29tbW9uX2hzaS5oOjcyODpcdFBST1RPQ09MSURfVENQX1VMUCxcbmluY2x1ZGUvbGludXgvcWVkL2NvbW1vbl9oc2kuaC03MjktXHRQUk9UT0NPTElEX0ZDT0UsXG4tLVxuaW5jbHVkZS9saW51eC9xZWQvcWVkX2xsMl9pZi5oPTE5PWVudW0gcWVkX2xsMl9jb25uX3R5cGUge1xuaW5jbHVkZS9saW51eC9xZWQvcWVkX2xsMl9pZi5oLTIwLVx0UUVEX0xMMl9UWVBFX0ZDT0UsXG5pbmNsdWRlL2xpbnV4L3FlZC9xZWRfbGwyX2lmLmg6MjE6XHRRRURfTEwyX1RZUEVfVENQX1VMUCxcbmluY2x1ZGUvbGludXgvcWVkL3FlZF9sbDJfaWYuaC0yMi1cdFFFRF9MTDJfVFlQRV9URVNULFxuLS1cbmluY2x1ZGUvbmV0L3RjcC5oPTI3OTg9ZW51bSBocnRpbWVyX3Jlc3RhcnQgdGNwX3BhY2Vfa2ljayhzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpO1xuLS1cbmluY2x1ZGUvbmV0L3RjcC5oLTI4MDMtXG5pbmNsdWRlL25ldC90Y3AuaDoyODA0OiNkZWZpbmUgVENQX1VMUF9OQU1FX01BWFx0MTZcbmluY2x1ZGUvbmV0L3RjcC5oOjI4MDU6I2RlZmluZSBUQ1BfVUxQX01BWFx0XHQxMjhcbmluY2x1ZGUvbmV0L3RjcC5oOjI4MDY6I2RlZmluZSBUQ1BfVUxQX0JVRl9NQVhcdFx0KFRDUF9VTFBfTkFNRV9NQVgqVENQX1VMUF9NQVgpXG5pbmNsdWRlL25ldC90Y3AuaC0yODA3LVxuaW5jbHVkZS9uZXQvdGNwLmg9MjgwOD1zdHJ1Y3QgdGNwX3VscF9vcHMge1xuLS1cbmluY2x1ZGUvbmV0L3RjcC5oLTI4MjQtXG5pbmNsdWRlL25ldC90Y3AuaDoyODI1Olx0Y2hhclx0XHRuYW1lW1RDUF9VTFBfTkFNRV9NQVhdO1xuaW5jbHVkZS9uZXQvdGNwLmgtMjgyNi1cdHN0cnVjdCBtb2R1bGVcdCpvd25lcjtcbi0tXG5pbmNsdWRlL25ldC90Y3AuaD0yODMzPXZvaWQgdGNwX3VwZGF0ZV91bHAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcHJvdG8gKnAsXG4tLVxuaW5jbHVkZS9uZXQvdGNwLmgtMjgzNS1cbmluY2x1ZGUvbmV0L3RjcC5oOjI4MzY6I2RlZmluZSBNT0RVTEVfQUxJQVNfVENQX1VMUChuYW1lKVx0XHRcdFx0XFxcbmluY2x1ZGUvbmV0L3RjcC5oLTI4MzctXHRNT0RVTEVfSU5GTyhhbGlhcywgbmFtZSk7XHRcdFxcXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oPTc0PWVudW0ge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC90Y3AuaC0xMjMtI2RlZmluZSBUQ1BfRkFTVE9QRU5fQ09OTkVDVFx0MzBcdC8qIEF0dGVtcHQgRmFzdE9wZW4gd2l0aCBjb25uZWN0ICovXG5pbmNsdWRlL3VhcGkvbGludXgvdGNwLmg6MTI0OiNkZWZpbmUgVENQX1VMUFx0XHRcdDMxXHQvKiBBdHRhY2ggYSBVTFAgdG8gYSBUQ1AgY29ubmVjdGlvbiAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oLTEyNS0jZGVmaW5lIFRDUF9NRDVTSUdfRVhUXHRcdDMyXHQvKiBUQ1AgTUQ1IFNpZ25hdHVyZSB3aXRoIGV4dGVuc2lvbnMgKi9cbi0tXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYz0zNzc9c3RhdGljIGludCBwcm9jX3RjcF9hdmFpbGFibGVfdWxwKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCxcbi0tXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYy0zODAte1xubmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmM6MzgxOlx0c3RydWN0IGN0bF90YWJsZSB0YmwgPSB7IC5tYXhsZW4gPSBUQ1BfVUxQX0JVRl9NQVgsIH07XG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYy0zODItXHRpbnQgcmV0O1xuLS1cbm5ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jLTM4Ni1cdFx0cmV0dXJuIC1FTk9NRU07XG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYzozODc6XHR0Y3BfZ2V0X2F2YWlsYWJsZV91bHAodGJsLmRhdGEsIFRDUF9VTFBfQlVGX01BWCk7XG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYy0zODgtXHRyZXQgPSBwcm9jX2Rvc3RyaW5nKFx1MDAyNnRibCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7XG4tLVxubmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmM9NTMwPXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjRfdGFibGVbXSA9IHtcbi0tXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYy02MDQtXHRcdC5wcm9jbmFtZVx0PSBcJiMzNDt0Y3BfYXZhaWxhYmxlX3VscFwmIzM0Oyxcbm5ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jOjYwNTpcdFx0Lm1heGxlblx0XHQ9IFRDUF9VTFBfQlVGX01BWCxcbm5ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jLTYwNi1cdFx0Lm1vZGVcdFx0PSAwNDQ0LFxuLS1cbm5ldC9pcHY0L3RjcC5jPTM4MzY9aW50IGRvX3RjcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvaXB2NC90Y3AuYy0zODY1LVx0fVxubmV0L2lwdjQvdGNwLmM6Mzg2NjpcdGNhc2UgVENQX1VMUDoge1xubmV0L2lwdjQvdGNwLmM6Mzg2NzpcdFx0Y2hhciBuYW1lW1RDUF9VTFBfTkFNRV9NQVhdO1xubmV0L2lwdjQvdGNwLmMtMzg2OC1cbi0tXG5uZXQvaXB2NC90Y3AuYy0zODcyLVx0XHR2YWwgPSBzdHJuY3B5X2Zyb21fc29ja3B0cihuYW1lLCBvcHR2YWwsXG5uZXQvaXB2NC90Y3AuYzozODczOlx0XHRcdFx0XHRtaW5fdChsb25nLCBUQ1BfVUxQX05BTUVfTUFYIC0gMSxcbm5ldC9pcHY0L3RjcC5jLTM4NzQtXHRcdFx0XHRcdCAgICAgIG9wdGxlbikpO1xuLS1cbm5ldC9pcHY0L3RjcC5jPTQ0ODA9aW50IGRvX3RjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTQ1OTctXHR9XG5uZXQvaXB2NC90Y3AuYzo0NTk4Olx0Y2FzZSBUQ1BfVUxQOlxubmV0L2lwdjQvdGNwLmMtNDU5OS1cdFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNmxlbiwgb3B0bGVuLCBzaXplb2YoaW50KSkpXG5uZXQvaXB2NC90Y3AuYy00NjAwLVx0XHRcdHJldHVybiAtRUZBVUxUO1xubmV0L2lwdjQvdGNwLmM6NDYwMTpcdFx0bGVuID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIFRDUF9VTFBfTkFNRV9NQVgpO1xubmV0L2lwdjQvdGNwLmMtNDYwMi1cdFx0aWYgKCFpY3NrLVx1MDAzZWljc2tfdWxwX29wcykge1xuLS1cbm5ldC9pcHY0L3RjcF9kaWFnLmM9MTQ2PXN0YXRpYyBzaXplX3QgdGNwX2RpYWdfZ2V0X2F1eF9zaXplKHN0cnVjdCBzb2NrICpzaywgYm9vbCBuZXRfYWRtaW4pXG4tLVxubmV0L2lwdjQvdGNwX2RpYWcuYy0xNzQtXHRcdFx0c2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoMCkgJiM0Mztcbm5ldC9pcHY0L3RjcF9kaWFnLmM6MTc1Olx0XHRcdFx0bmxhX3RvdGFsX3NpemUoVENQX1VMUF9OQU1FX01BWCk7XG5uZXQvaXB2NC90Y3BfZGlhZy5jLTE3Ni1cdFx0XHRpZiAodWxwX29wcy1cdTAwM2VnZXRfaW5mb19zaXplKVxuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmM9ODMzPXN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF9zb2xfdGNwKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmMtODM5LVx0c3dpdGNoIChvcHRuYW1lKSB7XG5uZXQvbXB0Y3Avc29ja29wdC5jOjg0MDpcdGNhc2UgVENQX1VMUDpcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtODQxLVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L21wdGNwL3NvY2tvcHQuYz0xNDExPXN0YXRpYyBpbnQgbXB0Y3BfZ2V0c29ja29wdF9zb2xfdGNwKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMTQxNi1cdHN3aXRjaCAob3B0bmFtZSkge1xubmV0L21wdGNwL3NvY2tvcHQuYzoxNDE3Olx0Y2FzZSBUQ1BfVUxQOlxubmV0L21wdGNwL3NvY2tvcHQuYy0xNDE4LVx0Y2FzZSBUQ1BfQ09OR0VTVElPTjpcbi0tXG5uZXQvc21jL2FmX3NtYy5jPTMwODQ9aW50IHNtY19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0zMDkwLVxubmV0L3NtYy9hZl9zbWMuYzozMDkxOlx0aWYgKGxldmVsID09IFNPTF9UQ1AgXHUwMDI2XHUwMDI2IG9wdG5hbWUgPT0gVENQX1VMUClcbm5ldC9zbWMvYWZfc21jLmMtMzA5Mi1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC90bHMvdGxzX21haW4uYz01MD1NT0RVTEVfTElDRU5TRShcJiMzNDtEdWFsIEJTRC9HUExcJiMzNDspO1xubmV0L3Rscy90bHNfbWFpbi5jOjUxOk1PRFVMRV9BTElBU19UQ1BfVUxQKFwmIzM0O3Rsc1wmIzM0Oyk7XG5uZXQvdGxzL3Rsc19tYWluLmMtNTItXG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oPTcyPWVudW0geyBcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvdGNwLmgtMTIwLSNkZWZpbmUgVENQX0ZBU1RPUEVOX0NPTk5FQ1RcdDMwXHQvKiBBdHRlbXB0IEZhc3RPcGVuIHdpdGggY29ubmVjdCAqL1xudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oOjEyMTojZGVmaW5lIFRDUF9VTFBcdFx0XHQzMVx0LyogQXR0YWNoIGEgVUxQIHRvIGEgVENQIGNvbm5lY3Rpb24gKi9cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC90Y3AuaC0xMjItI2RlZmluZSBUQ1BfTUQ1U0lHX0VYVFx0XHQzMlx0LyogVENQIE1ENSBTaWduYXR1cmUgd2l0aCBleHRlbnNpb25zICovXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2V0Z2V0X3NvY2tvcHQuYz04Nz1zdGF0aWMgdm9pZCB0ZXN0X2t0bHMoaW50IGZhbWlseSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZXRnZXRfc29ja29wdC5jLTExMS1cdC8qIFNldHVwIEtUTFMgKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NldGdldF9zb2Nrb3B0LmM6MTEyOlx0cmV0ID0gc2V0c29ja29wdChmZCwgSVBQUk9UT19UQ1AsIFRDUF9VTFAsIFwmIzM0O3Rsc1wmIzM0Oywgc2l6ZW9mKFwmIzM0O3Rsc1wmIzM0OykpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2V0Z2V0X3NvY2tvcHQuYy0xMTMtXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwmIzM0O3NldHNvY2tvcHRcJiMzNDspKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2V0Z2V0X3NvY2tvcHQuYy0xMTQtXHRcdGdvdG8gZXJyX291dDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NldGdldF9zb2Nrb3B0LmM6MTE1Olx0cmV0ID0gc2V0c29ja29wdChjZmQsIElQUFJPVE9fVENQLCBUQ1BfVUxQLCBcJiMzNDt0bHNcJiMzNDssIHNpemVvZihcJiMzNDt0bHNcJiMzNDspKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NldGdldF9zb2Nrb3B0LmMtMTE2LVx0aWYgKCFBU1NFUlRfT0socmV0LCBcJiMzNDtzZXRzb2Nrb3B0XCYjMzQ7KSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2t0bHMuYy0xMy0jZGVmaW5lIE1BWF9URVNUX05BTUUgODBcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfa3Rscy5jOjE0OiNkZWZpbmUgVENQX1VMUCAzMVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9rdGxzLmMtMTUtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2t0bHMuYz0xNj1zdGF0aWMgaW50IGluaXRfa3Rsc19wYWlycyhpbnQgYywgaW50IHApXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9rdGxzLmMtMjEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2t0bHMuYzoyMjpcdGVyciA9IHNldHNvY2tvcHQoYywgSVBQUk9UT19UQ1AsIFRDUF9VTFAsIFwmIzM0O3Rsc1wmIzM0Oywgc3RybGVuKFwmIzM0O3Rsc1wmIzM0OykpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9rdGxzLmM6MjM6XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3NldHNvY2tvcHQoVENQX1VMUClcJiMzNDspKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9rdGxzLmMtMjQtXHRcdGdvdG8gb3V0O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9rdGxzLmMtMjUtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2t0bHMuYzoyNjpcdGVyciA9IHNldHNvY2tvcHQocCwgSVBQUk9UT19UQ1AsIFRDUF9VTFAsIFwmIzM0O3Rsc1wmIzM0Oywgc3RybGVuKFwmIzM0O3Rsc1wmIzM0OykpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9rdGxzLmM6Mjc6XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3NldHNvY2tvcHQoVENQX1VMUClcJiMzNDspKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9rdGxzLmMtMjgtXHRcdGdvdG8gb3V0O1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfa3Rscy5jPTYzPXN0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF9rdGxzX3VwZGF0ZV9mYWlsc193aGVuX3NvY2tfaGFzX3VscChpbnQgZmFtaWx5LCBpbnQgbWFwKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfa3Rscy5jLTEwMS1cdC8qIHNhdmUgc2stXHUwMDNlc2tfcHJvdCBhbmQgc2V0IGl0IHRvIHRsc19wcm90cyAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9rdGxzLmM6MTAyOlx0ZXJyID0gc2V0c29ja29wdChzLCBJUFBST1RPX1RDUCwgVENQX1VMUCwgXCYjMzQ7dGxzXCYjMzQ7LCBzdHJsZW4oXCYjMzQ7dGxzXCYjMzQ7KSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2t0bHMuYzoxMDM6XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3NldHNvY2tvcHQoVENQX1VMUClcJiMzNDspKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9rdGxzLmMtMTA0LVx0XHRnb3RvIGNsb3NlO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfa3Rscy5jPTExOT1zdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXBfa3Rsc19lbmFibGVfZmFpbHNfd2hlbl9pbl9zb2NrbWFwKGludCBmYW1pbHksIGludCBtYXApXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9rdGxzLmMtMTY4LVx0LyogSW5zdGFsbGluZyB0aGUgVExTIFVMUCBpcyBhbGxvd2VkLCBpdCBkb2VzIG5vdCB0b3VjaCB0aGUgZGF0YXBhdGguICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2t0bHMuYzoxNjk6XHRlcnIgPSBzZXRzb2Nrb3B0KHMsIElQUFJPVE9fVENQLCBUQ1BfVUxQLCBcJiMzNDt0bHNcJiMzNDssIHN0cmxlbihcJiMzNDt0bHNcJiMzNDspKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfa3Rscy5jOjE3MDpcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7c2V0c29ja29wdChUQ1BfVUxQKVwmIzM0OykpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2t0bHMuYy0xNzEtXHRcdGdvdG8gY2xvc2U7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5PTI0PWZyb20gbGliLnB5IGltcG9ydCBpcFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTI1LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5OjI2OlRDUF9VTFAgPSAzMVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTI3LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weT0zMzg9ZGVmIF9yZXF1aXJlX3Rsc191bHAoKTpcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHktMzQxLSAgICAgICAgICAgIHRyeTpcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weTozNDI6ICAgICAgICAgICAgICAgIHMuc2V0c29ja29wdChzb2NrZXQuU09MX1RDUCwgVENQX1VMUCwgYlwmIzM0O3Rsc1wmIzM0OylcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS0zNDMtICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weT0zNDc9ZGVmIGFzc29jX3BzcF91bHBfZXhjbHVzaXZlKGNmZyk6XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTM1Ny0gICAgICAgICAgICB3aXRoIGtzZnRfcmFpc2VzKE9TRXJyb3IpIGFzIGNtOlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5OjM1ODogICAgICAgICAgICAgICAgcy5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfVENQLCBUQ1BfVUxQLCBiXCYjMzQ7dGxzXCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTM1OS0gICAgICAgICAgICBrc2Z0X2VxKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRUlOVkFMKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weT0zNjQ9ZGVmIGFzc29jX3VscF9wc3BfZXhjbHVzaXZlKGNmZyk6XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTM3MC0gICAgICAgIHRyeTpcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weTozNzE6ICAgICAgICAgICAgcy5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfVENQLCBUQ1BfVUxQLCBiXCYjMzQ7dGxzXCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTM3Mi0gICAgICAgICAgICB3aXRoIGtzZnRfcmFpc2VzKE5sRXJyb3IpIGFzIGNtOlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9nZXRzb2Nrb3B0X2l0ZXIuYy01NC0jZW5kaWZcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9nZXRzb2Nrb3B0X2l0ZXIuYzo1NTojaWZuZGVmIFRDUF9VTFBcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9nZXRzb2Nrb3B0X2l0ZXIuYzo1NjojZGVmaW5lIFRDUF9VTFAgMzFcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9nZXRzb2Nrb3B0X2l0ZXIuYy01Ny0jZW5kaWZcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZ2V0c29ja29wdF9pdGVyLmM9NTAzPUZJWFRVUkVfU0VUVVAodGxzKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9nZXRzb2Nrb3B0X2l0ZXIuYy01MzMtXHRjbG9zZShsZmQpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2dldHNvY2tvcHRfaXRlci5jOjUzNDpcdGlmIChzZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIElQUFJPVE9fVENQLCBUQ1BfVUxQLCBcJiMzNDt0bHNcJiMzNDssIHNpemVvZihcJiMzNDt0bHNcJiMzNDspKSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9nZXRzb2Nrb3B0X2l0ZXIuYzo1MzU6XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtUQ1BfVUxQPXRsczogJXMgKGJ1aWx0IHdpdGhvdXQgVExTPylcJiMzNDssXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZ2V0c29ja29wdF9pdGVyLmMtNTM2LVx0XHQgICAgIHN0cmVycm9yKGVycm5vKSk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3QuYz0zOD1leHRlcm4gaW50IG9wdGluZDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5jLTQyLSNlbmRpZlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3QuYzo0MzojaWZuZGVmIFRDUF9VTFBcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9jb25uZWN0LmM6NDQ6I2RlZmluZSBUQ1BfVUxQIDMxXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5jLTQ1LSNlbmRpZlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9jb25uZWN0LmM9MjcwPXN0YXRpYyBpbnQgZG9fdWxwX3NvKGludCBzb2NrLCBjb25zdCBjaGFyICpuYW1lKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3QuYy0yNzEte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3QuYzoyNzI6XHRyZXR1cm4gc2V0c29ja29wdChzb2NrLCBJUFBST1RPX1RDUCwgVENQX1VMUCwgbmFtZSwgc3RybGVuKG5hbWUpKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9jb25uZWN0LmMtMjczLX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5jPTI3Nj1zdGF0aWMgdm9pZCBzb2NrX3Rlc3RfdGNwdWxwKGludCBzb2NrLCBpbnQgcHJvdG8sIHVuc2lnbmVkIGludCBsaW5lKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9jb25uZWN0LmMtMjc5LVx0Y2hhciBidWZbOF0gPSBcJiMzNDtcJiMzNDs7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5jOjI4MDpcdGludCByZXQgPSBnZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9fVENQLCBUQ1BfVUxQLCBidWYsIFx1MDAyNmJ1Zmxlbik7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5jLTI4MS1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmM9MTEyPXN0YXRpYyB2b2lkIHVscF9zb2NrX3BhaXIoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYy0xNDQtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmM6MTQ1Olx0cmV0ID0gc2V0c29ja29wdCgqZmQsIElQUFJPVE9fVENQLCBUQ1BfVUxQLCBcJiMzNDt0bHNcJiMzNDssIHNpemVvZihcJiMzNDt0bHNcJiMzNDspKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYy0xNDYtXHRpZiAocmV0ICE9IDApIHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmMtMTQ4LVx0XHQqbm90bHMgPSB0cnVlO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jOjE0OTpcdFx0cHJpbnRmKFwmIzM0O0ZhaWx1cmUgc2V0dGluZyBUQ1BfVUxQLCB0ZXN0aW5nIHdpdGhvdXQgdGxzXFxuXCYjMzQ7KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYy0xNTAtXHRcdHJldHVybjtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmMtMTUyLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jOjE1MzpcdHJldCA9IHNldHNvY2tvcHQoKmNmZCwgSVBQUk9UT19UQ1AsIFRDUF9VTFAsIFwmIzM0O3Rsc1wmIzM0Oywgc2l6ZW9mKFwmIzM0O3Rsc1wmIzM0OykpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jLTE1NC1cdEFTU0VSVF9FUShyZXQsIDApO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYz0zMTk4PVRFU1Qobm9uX2VzdGFibGlzaGVkKSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jLTMyMjEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmM6MzIyMjpcdHJldCA9IHNldHNvY2tvcHQoZmQsIElQUFJPVE9fVENQLCBUQ1BfVUxQLCBcJiMzNDt0bHNcJiMzNDssIHNpemVvZihcJiMzNDt0bHNcJiMzNDspKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYy0zMjIzLVx0RVhQRUNUX0VRKHJldCwgLTEpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYy0zMjI4LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jOjMyMjk6XHRyZXQgPSBzZXRzb2Nrb3B0KHNmZCwgSVBQUk9UT19UQ1AsIFRDUF9VTFAsIFwmIzM0O3Rsc1wmIzM0Oywgc2l6ZW9mKFwmIzM0O3Rsc1wmIzM0OykpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jLTMyMzAtXHRFWFBFQ1RfRVEocmV0LCAtMSk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jLTMyMzgtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmM6MzIzOTpcdHJldCA9IHNldHNvY2tvcHQoZmQsIElQUFJPVE9fVENQLCBUQ1BfVUxQLCBcJiMzNDt0bHNcJiMzNDssIHNpemVvZihcJiMzNDt0bHNcJiMzNDspKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYy0zMjQwLVx0QVNTRVJUX0VRKHJldCwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmMtMzI0MS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYzozMjQyOlx0cmV0ID0gc2V0c29ja29wdChmZCwgSVBQUk9UT19UQ1AsIFRDUF9VTFAsIFwmIzM0O3Rsc1wmIzM0Oywgc2l6ZW9mKFwmIzM0O3Rsc1wmIzM0OykpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jLTMyNDMtXHRFWFBFQ1RfRVEocmV0LCAtMSk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jPTMzMjY9VEVTVCh0bHNfdjZvcHMpIHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmMtMzM1Ni1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYzozMzU3Olx0cmV0ID0gc2V0c29ja29wdChmZCwgSVBQUk9UT19UQ1AsIFRDUF9VTFAsIFwmIzM0O3Rsc1wmIzM0Oywgc2l6ZW9mKFwmIzM0O3Rsc1wmIzM0OykpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jLTMzNTgtXHRpZiAocmV0KSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jPTMzODE9VEVTVChwcmVxdWV1ZSkge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYy0zNDA2LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jOjM0MDc6XHRyZXQgPSBzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX1RDUCwgVENQX1VMUCwgXCYjMzQ7dGxzXCYjMzQ7LCBzaXplb2YoXCYjMzQ7dGxzXCYjMzQ7KSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmMtMzQwOC1cdGlmIChyZXQpIHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmMtMzQxNS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYzozNDE2Olx0QVNTRVJUX0VRKHNldHNvY2tvcHQoY2ZkLCBJUFBST1RPX1RDUCwgVENQX1VMUCwgXCYjMzQ7dGxzXCYjMzQ7LCBzaXplb2YoXCYjMzQ7dGxzXCYjMzQ7KSksIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jLTM0MTctXHRBU1NFUlRfRVEoc2V0c29ja29wdChjZmQsIFNPTF9UTFMsIFRMU19SWCwgXHUwMDI2dGxzMTIsIHRsczEyLmxlbiksIDApO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYz0zNDI2PVRFU1QoZGF0YV9zdGVhbCkge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYy0zNDUyLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jOjM0NTM6XHRyZXQgPSBzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX1RDUCwgVENQX1VMUCwgXCYjMzQ7dGxzXCYjMzQ7LCBzaXplb2YoXCYjMzQ7dGxzXCYjMzQ7KSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmMtMzQ1NC1cdGlmIChyZXQpIHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmMtMzQ1Ny1cdH1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYzozNDU4Olx0QVNTRVJUX0VRKHNldHNvY2tvcHQoY2ZkLCBJUFBST1RPX1RDUCwgVENQX1VMUCwgXCYjMzQ7dGxzXCYjMzQ7LCBzaXplb2YoXCYjMzQ7dGxzXCYjMzQ7KSksIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jLTM0NTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NjY5CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIFRMUyBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSBob3cgVExTIGlzIGN1cnJlbnRseSBoYW5kbGVkIGluIHRoZSBjb25maWd1cmF0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIGNoZWNrIG9mIGBDT05GSUdfVExTYCB3aXRoaW4gdGhlIEtjb25maWcgZmlsZXMuIFRoaXMgaXMgbXkgZ28tdG8gc3RhcnRpbmcgcG9pbnQgd2hlbiBpbnZlc3RpZ2F0aW5nIFRMUyBmdW5jdGlvbmFsaXR5LiBJdCB3aWxsIGdpdmUgbWUgYSBiYXNlIHRvIHNlZSBpZiBpdCYjMzk7cyBldmVuIGVuYWJsZWQgdG8gYmVnaW4gd2l0aC4gRnJvbSB0aGVyZSwgSSBjYW4gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gVExTIHRoYXQgYXJlIHByZXNlbnQsIGFuZCBxdWlja2x5IG1vdmUgdG8gdW5kZXJzdGFuZGluZyB3aGF0IGRlcGVuZGVuY2llcywgaWYgYW55LCBhcmUgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUTFNcXGImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Rscy9LY29uZmlnLTQtI1xubmV0L3Rscy9LY29uZmlnOjU6Y29uZmlnIFRMU1xubmV0L3Rscy9LY29uZmlnLTYtXHR0cmlzdGF0ZSBcJiMzNDtUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzg4NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipFeGFtaW5pbmcgdGhlIFRMUyBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7TGV0JiMzOTtzIGNoZWNrIGBuZXQvdGxzL0tjb25maWdgLiYjMzQ7IEdpdmVuIG15IGV4cGVydGlzZSwgSSBrbm93IHRoaXMgaXMgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCB3aGVuIGV4YW1pbmluZyBhbnkgVExTLXJlbGF0ZWQgY29uZmlndXJhdGlvbiB3aXRoaW4gdGhpcyBwcm9qZWN0LiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZSwgd2hhdCBkZWZhdWx0cyBhcmUgc2V0LCBhbmQgaG93IGRpZmZlcmVudCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZC4gVGhpcyBgS2NvbmZpZ2AgZmlsZSBpcyB0aGUgY2VudHJhbCBzb3VyY2Ugb2YgdHJ1dGggZm9yIHRoZSBUTFMgYnVpbGQgY29uZmlndXJhdGlvbiwgYW5kIGl0JiMzOTtsbCBnaXZlIG1lIHRoZSBsYXkgb2YgdGhlIGxhbmQgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgZGV0YWlscyBvbiB0aGluZ3MgbGlrZSBzdXBwb3J0ZWQgY2lwaGVyc3VpdGVzLCBrZXkgZXhjaGFuZ2UgYWxnb3JpdGhtcywgYW5kIGFueSBoYXJkd2FyZSBhY2NlbGVyYXRpb24gb3B0aW9ucy4gSG9wZWZ1bGx5LCB0aGUgZmlsZSBpcyB3ZWxsLWRvY3VtZW50ZWQsIGFsbG93aW5nIGZvciBhIHN3aWZ0IHJldmlldy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdGxzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBUTFMgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRjb25maWcgVExTXG4gICA2Olx0XHR0cmlzdGF0ZSBcJiMzNDtUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgc3VwcG9ydFwmIzM0O1xuICAgNzpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA4Olx0XHRzZWxlY3QgQ1JZUFRPXG4gICA5Olx0XHRzZWxlY3QgQ1JZUFRPX0FFU1xuICAxMDpcdFx0c2VsZWN0IENSWVBUT19HQ01cbiAgMTE6XHRcdHNlbGVjdCBORVRfU09DS19NU0dcbiAgMTI6XHRcdGRlZmF1bHQgblxuICAxMzpcdFx0aGVscFxuICAxNDpcdFx0RW5hYmxlIGtlcm5lbCBzdXBwb3J0IGZvciBUTFMgcHJvdG9jb2wuIFRoaXMgYWxsb3dzIHN5bW1ldHJpY1xuICAxNTpcdFx0ZW5jcnlwdGlvbiBoYW5kbGluZyBvZiB0aGUgVExTIHByb3RvY29sIHRvIGJlIGRvbmUgaW4ta2VybmVsLlxuICAxNjpcdFxuICAxNzpcdFx0SWYgdW5zdXJlLCBzYXkgTi5cbiAgMTg6XHRcbiAgMTk6XHRjb25maWcgVExTX0RFVklDRVxuICAyMDpcdFx0Ym9vbCBcJiMzNDtUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgSFcgb2ZmbG9hZFwmIzM0O1xuICAyMTpcdFx0ZGVwZW5kcyBvbiBUTFNcbiAgMjI6XHRcdHNlbGVjdCBTS0JfREVDUllQVEVEXG4gIDIzOlx0XHRzZWxlY3QgU09DS19WQUxJREFURV9YTUlUXG4gIDI0Olx0XHRzZWxlY3QgU09DS19SWF9RVUVVRV9NQVBQSU5HXG4gIDI1Olx0XHRkZWZhdWx0IG5cbiAgMjY6XHRcdGhlbHBcbiAgMjc6XHRcdEVuYWJsZSBrZXJuZWwgc3VwcG9ydCBmb3IgSFcgb2ZmbG9hZCBvZiB0aGUgVExTIHByb3RvY29sLlxuICAyODpcdFxuICAyOTpcdFx0SWYgdW5zdXJlLCBzYXkgTi5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg0MzIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipDaGVja2luZyBgQ09ORklHX05FVERFVlNJTWAgaW4gS2NvbmZpZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSByaWdodCBpbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYENPTkZJR19ORVRERVZTSU1gIHdpdGhpbiB0aGUgS2NvbmZpZyBjb25maWd1cmF0aW9uIGZpbGVzLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIGl0cyBjdXJyZW50IHN0YXRlIGFuZCBhc3NvY2lhdGVkIGRlcGVuZGVuY2llcy4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHRoaXMgbWFjcm8gaXMgbGlrZWx5IGEgY3JpdGljYWwgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCBlbmFibGVzIG9yIGRpc2FibGVzIHNvbWUgbmV0d29yayBkZXZpY2Ugc2ltdWxhdGlvbiBmdW5jdGlvbmFsaXR5LiBEZXBlbmRpbmcgb24gaXRzIHN0YXR1cywgaXQgY291bGQgaW5mbHVlbmNlIGEgd2lkZSByYW5nZSBvZiBvdGhlciBmZWF0dXJlcyBhbmQgbW9kdWxlcyB3aXRoaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGltcGFjdC4gV2hlcmUgaXMgaXQgZGVmaW5lZCwgd2hhdCBvdGhlciBzZXR0aW5ncyBkZXBlbmQgb24gaXQsIGFuZCB3aGF0IGRvZXMgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGl0IGFjdHVhbGx5IGRvIGluIHByYWN0aWNhbCB0ZXJtcz8gVGltZSB0byBkcmlsbCBkb3duIGludG8gdGhlIEtjb25maWcgc3RydWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUREVWU0lNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9NjAyPXNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9oeXBlcnYvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZy02MDMtXG5kcml2ZXJzL25ldC9LY29uZmlnOjYwNDpjb25maWcgTkVUREVWU0lNXG5kcml2ZXJzL25ldC9LY29uZmlnLTYwNS1cdHRyaXN0YXRlIFwmIzM0O1NpbXVsYXRlZCBuZXR3b3JraW5nIGRldmljZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODcxMwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBTb2NrZXQgQXNzb2NpYXRpb24qKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzIHNvY2tldCBhc3NvY2lhdGlvbiBpc3N1ZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBzdGF0dXMgdXNpbmcgYGluZXRfY3NrX2hhc191bHAoc2spYCBhbmQgYHBzcF9za19hc3NvYyhzaylgLiBUaG9zZSBzZWVtIGxpa2UgdGhlIGtleSBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGUgVXNlci1MZXZlbCBQcm90b2NvbCBhbmQgdGhlIFBlcmZvcm1hbmNlLVNlbnNpdGl2ZSBQcm90b2NvbCBhc3NvY2lhdGlvbiwgcmVzcGVjdGl2ZWx5LiBNeSBndXQgdGVsbHMgbWUgdGhlc2UgYXJlIGNlbnRyYWwgdG8gdGhlIGlzc3VlLiBCZWZvcmUgSSBnbyB0b28gZGVlcCwgSSBuZWVkIHRvIGtub3cgd2hlcmUgdGhlc2UgYXJlIGRlZmluZWQuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGUgZGVmaW5pdGlvbnMgYW5kIHdoYXQgdGhlIGFzc29jaWF0ZWQgaGVhZGVycyBhcmUuIFNvLCBhIHF1aWNrIGBncmVwYCBpcyBpbiBvcmRlci4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBpbmNsdWRlcyBhcmUsIGFuZCB3aGljaCBmaWxlcyBjb250YWluIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb25zLiBUaGlzIHdpbGwgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGNvbnRleHQuIEZyb20gdGhlcmUsIEkgY2FuIGJlZ2luIHRvIHJlYXNvbiBhYm91dCBob3cgdGhlc2UgZnVuY3Rpb25zIHJlbGF0ZSB0byB0aGUgY3VycmVudCBwcm9ibGVtLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBzdG9wLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbmV0X2Nza19oYXNfdWxwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmg9MzM4PXN0YXRpYyBpbmxpbmUgdm9pZCBpbmV0X2Nza19pbmNfcGluZ3BvbmdfY250KHN0cnVjdCBzb2NrICpzaylcbi0tXG5pbmNsdWRlL25ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oLTM0NS1cbmluY2x1ZGUvbmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmg6MzQ2OnN0YXRpYyBpbmxpbmUgYm9vbCBpbmV0X2Nza19oYXNfdWxwKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbmluY2x1ZGUvbmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmgtMzQ3LXtcbi0tXG5uZXQvY29yZS9za21zZy5jPTc1MD1zdHJ1Y3Qgc2tfcHNvY2sgKnNrX3Bzb2NrX2luaXQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbm9kZSlcbi0tXG5uZXQvY29yZS9za21zZy5jLTc1Ni1cbm5ldC9jb3JlL3NrbXNnLmM6NzU3Olx0aWYgKHNrX2lzX2luZXQoc2spIFx1MDAyNlx1MDAyNiBpbmV0X2Nza19oYXNfdWxwKHNrKSkge1xubmV0L2NvcmUvc2ttc2cuYy03NTgtXHRcdHBzb2NrID0gRVJSX1BUUigtRUlOVkFMKTtcbi0tXG5uZXQvY29yZS9zb2NrLmM9MjY3ND1ib29sIHNrX2hhc19kZWNyeXB0X3VzZXIoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9jb3JlL3NvY2suYy0yNjc2LVx0cmV0dXJuIHBzcF9za19hc3NvYyhzaykgfHxcbm5ldC9jb3JlL3NvY2suYzoyNjc3Olx0ICAgICAgIChza19pc19pbmV0KHNrKSBcdTAwMjZcdTAwMjYgaW5ldF9jc2tfaGFzX3VscChzaykpOyAvKiBmb3IgdGxzICovXG5uZXQvY29yZS9zb2NrLmMtMjY3OC19XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTcyNT1pbnQgdGNwX2JwZl91cGRhdGVfcHJvdG8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBib29sIHJlc3RvcmUpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTczNC1cdGlmIChyZXN0b3JlKSB7XG5uZXQvaXB2NC90Y3BfYnBmLmM6NzM1Olx0XHRpZiAoaW5ldF9jc2tfaGFzX3VscChzaykpIHtcbm5ldC9pcHY0L3RjcF9icGYuYy03MzYtXHRcdFx0LyogVExTIGRvZXMgbm90IGhhdmUgYW4gdW5oYXNoIHByb3RvIGluIFNXIGNhc2VzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTQ1NQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNoZWNraW5nIHRoZSBgcHNwX3NrX2Fzc29jYCBEYXRhKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIGZpcnN0IHRoaW5nIHRoYXQgY29tZXMgdG8gbWluZCBpcyB0byB0YWtlIGEgbG9vayBhdCBgcHNwX3NrX2Fzc29jYC4gSSBuZWVkIHRvIGFzc2VzcyB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoIHRoYXQgcGFydGljdWxhciBkYXRhIHN0cnVjdHVyZS4gVGhpcyBjb3VsZCBiZSBhbnl0aGluZyBmcm9tIGNoZWNraW5nIGl0cyBjdXJyZW50IHN0YXRlIGZvciB1bmV4cGVjdGVkIHZhbHVlcywgY29uZmlybWluZyBpdHMgZXhwZWN0ZWQgYmVoYXZpb3IgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLCBvciBtYXliZSBldmVuIGp1c3QgcmVmcmVzaGluZyBteSBtZW1vcnkgb24gaXRzIGV4YWN0IGRlZmluaXRpb24gYW5kIHJvbGUgd2l0aGluIHRoZSB3aWRlciBzeXN0ZW0uIFVuZGVyc3RhbmRpbmcgaXRzIHN0YXR1cyBpcyBlc3NlbnRpYWwgYmVmb3JlIHByb2NlZWRpbmcgYW55IGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BzcF9za19hc3NvYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9MzM9dW5zaWduZWQgaW50IHBzcF9rZXlfc2l6ZSh1MzIgdmVyc2lvbik7XG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MzQ6dm9pZCBwc3Bfc2tfYXNzb2NfZnJlZShzdHJ1Y3Qgc29jayAqc2spO1xuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTM1LXZvaWQgcHNwX3R3c2tfaW5pdChzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dywgY29uc3Qgc3RydWN0IHNvY2sgKnNrKTtcbi0tXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9Mzc9dm9pZCBwc3BfcmVwbHlfc2V0X2RlY3J5cHRlZChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTM4LVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjM5OnN0YXRpYyBpbmxpbmUgc3RydWN0IHBzcF9hc3NvYyAqcHNwX3NrX2Fzc29jKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC00MC17XG4tLVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTQ1PXBzcF9lbnF1ZXVlX3NldF9kZWNyeXB0ZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC00OC1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDo0OTpcdHBhcyA9IHBzcF9za19hc3NvYyhzayk7XG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtNTAtXHRpZiAocGFzIFx1MDAyNlx1MDAyNiBwYXMtXHUwMDNldHguc3BpKVxuLS1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD0xMTY9cHNwX3NrX3J4X3BvbGljeV9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTE3LXtcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDoxMTg6XHRyZXR1cm4gX19wc3Bfc2tfcnhfcG9saWN5X2NoZWNrKHNrYiwgcHNwX3NrX2Fzc29jKHNrKSk7XG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTE5LX1cbi0tXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9MTUwPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHBzcF9za19vdmVyaGVhZChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTE1Ny0jZWxzZVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjE1ODpzdGF0aWMgaW5saW5lIHZvaWQgcHNwX3NrX2Fzc29jX2ZyZWUoc3RydWN0IHNvY2sgKnNrKSB7IH1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xNTktc3RhdGljIGlubGluZSB2b2lkXG4tLVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTE2Mz1wc3BfcmVwbHlfc2V0X2RlY3J5cHRlZChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpIHsgfVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTE2NC1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDoxNjU6c3RhdGljIGlubGluZSBzdHJ1Y3QgcHNwX2Fzc29jICpwc3Bfc2tfYXNzb2MoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTE2Ni17XG4tLVxubmV0L2NvcmUvc29jay5jPTI2NzQ9Ym9vbCBza19oYXNfZGVjcnlwdF91c2VyKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbm5ldC9jb3JlL3NvY2suYy0yNjc1LXtcbm5ldC9jb3JlL3NvY2suYzoyNjc2Olx0cmV0dXJuIHBzcF9za19hc3NvYyhzaykgfHxcbm5ldC9jb3JlL3NvY2suYy0yNjc3LVx0ICAgICAgIChza19pc19pbmV0KHNrKSBcdTAwMjZcdTAwMjYgaW5ldF9jc2tfaGFzX3VscChzaykpOyAvKiBmb3IgdGxzICovXG4tLVxubmV0L2lwdjQvYWZfaW5ldC5jPTE0MD12b2lkIGluZXRfc29ja19kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvYWZfaW5ldC5jLTE2Ni1cdGRzdF9yZWxlYXNlKHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoc2stXHUwMDNlc2tfcnhfZHN0LCAxKSk7XG5uZXQvaXB2NC9hZl9pbmV0LmM6MTY3Olx0cHNwX3NrX2Fzc29jX2ZyZWUoc2spO1xubmV0L2lwdjQvYWZfaW5ldC5jLTE2OC19XG4tLVxubmV0L3BzcC9wc3Bfc29jay5jPTExOD12b2lkIHBzcF9hc3NvY19wdXQoc3RydWN0IHBzcF9hc3NvYyAqcGFzKVxuLS1cbm5ldC9wc3AvcHNwX3NvY2suYy0xMjMtXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTI0OnZvaWQgcHNwX3NrX2Fzc29jX2ZyZWUoc3RydWN0IHNvY2sgKnNrKVxubmV0L3BzcC9wc3Bfc29jay5jLTEyNS17XG4tLVxubmV0L3BzcC9wc3Bfc29jay5jPTEzMj1pbnQgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9hc3NvYyAqcGFzLFxuLS1cbm5ldC9wc3AvcHNwX3NvY2suYy0xNDEtXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTQyOlx0aWYgKHBzcF9za19hc3NvYyhzaykpIHtcbm5ldC9wc3AvcHNwX3NvY2suYy0xNDMtXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7U29ja2V0IGFscmVhZHkgaGFzIFBTUCBzdGF0ZVwmIzM0Oyk7XG4tLVxubmV0L3BzcC9wc3Bfc29jay5jPTE4MT1pbnQgcHNwX3NvY2tfYXNzb2Nfc2V0X3R4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9kZXYgKnBzZCxcbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTkwLVxubmV0L3BzcC9wc3Bfc29jay5jOjE5MTpcdHBhcyA9IHBzcF9za19hc3NvYyhzayk7XG5uZXQvcHNwL3BzcF9zb2NrLmMtMTkyLVx0aWYgKCFwYXMpIHtcbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmM9MjcwPXZvaWQgcHNwX3R3c2tfaW5pdChzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dywgY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxubmV0L3BzcC9wc3Bfc29jay5jLTI3MS17XG5uZXQvcHNwL3BzcF9zb2NrLmM6MjcyOlx0c3RydWN0IHBzcF9hc3NvYyAqcGFzID0gcHNwX3NrX2Fzc29jKHNrKTtcbm5ldC9wc3AvcHNwX3NvY2suYy0yNzMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwOTA2CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTeW1ib2wgTW9kaWZpY2F0aW9ucyBhbmQgQ2FsbGVyIFJlbGF0aW9uc2hpcHMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgaW5pdGlhbCB0YXNrIGlzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbXBhY3Qgb2YgdGhlc2Ugc3ltYm9scy4gRmlyc3QsIEkgbmVlZCB0byBpZGVudGlmeSB3aGljaCBzeW1ib2xzIGFyZSBiZWluZyBtb2RpZmllZCBvciBuZXdseSBpbnRyb2R1Y2VkLiBJJiMzOTt2ZSBub3RlZCBhIGZldyBrZXkgaXRlbXMgcmlnaHQgb2ZmIHRoZSBiYXQ6CgoxLiAgYHNrX2hhc19kZWNyeXB0X3VzZXJgIGluIGBuZXQvY29yZS9zb2NrLmNgLCB3aGljaCBpcyBhIG5vbi1zdGF0aWMgZnVuY3Rpb24uIFRoYXQmIzM5O3MgYSBwb2ludCB0byByZW1lbWJlciBmb3IgcG90ZW50aWFsIGV4dGVybmFsIGludGVyYWN0aW9ucy4KMi4gIGBfX3RjcF9zZXRfdWxwYCBpbiBgbmV0L2lwdjQvdGNwX3VscC5jYCB3aGljaCBpcyBzdGF0aWMgYW5kIGNhbGxlZCBieSBgdGNwX3NldF91bHBgLiBUaGUgZm9jdXMgaGVyZSBzaG91bGQgYmUgb24gYHRjcF9zZXRfdWxwYCBvciBgX190Y3Bfc2V0X3VscGAgcG90ZW50aWFsbHkgYm90aC4KMy4gIGBwc3Bfc29ja19hc3NvY19zZXRfcnhgIGluIGBuZXQvcHNwL3BzcF9zb2NrLmNgLCBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gY2FsbGVkIGJ5IGBwc3BfbmxfcnhfYXNzb2NfZG9pdGAuCjQuICBgc2tfaGFzX3ZhbGlkYXRlX3htaXRfc2tiYCBpbiBgaW5jbHVkZS9uZXQvc29jay5oYCwgYSBzdGF0aWMgaW5saW5lIGhlbHBlci4gSXRzIGNhbGxlcnMgYXJlIGBfX3RjcF9zZXRfdWxwYCBhbmQgYHBzcF9zb2NrX2Fzc29jX3NldF9yeGAuIFRoaXMgaXMgaW1wb3J0YW50LCBhcyBzdGF0aWMgaW5saW5lcyBjYW4gaW50cm9kdWNlIGNvbXBsZXhpdGllcyBpbiB0cmFjaW5nLgoKTm93IEkgbmVlZCB0byBjbGFyaWZ5IHRoZSB2aXNpYmlsaXR5IG9mIGB0Y3Bfc2V0X3VscGAuIEkgc2VlIHRoYXQgYHRjcF9zZXRfdWxwYCBpdHNlbGYgaXMgbm9uLXN0YXRpYyBpbiBgbmV0L2lwdjQvdGNwX3VscC5jYC4gVGhpcyBtZWFucyBpdCAqY291bGQqIGJlIGV4dGVybmFsbHkgdmlzaWJsZSwgc28gSSBuZWVkIHRvIGNoZWNrIGZvciBleHRlcm5hbCBjYWxscy4KClRvIGVuc3VyZSBJIGhhdmUgYSBjb21wbGV0ZSBwaWN0dXJlLCBJIHdpbGwgcmV2aWV3IGFsbCBmdW5jdGlvbnMgaW4gYG5ldC9pcHY0L3RjcF91bHAuY2AsIGBuZXQvcHNwL3BzcF9zb2NrLmNgLCBhbmQgYG5ldC9jb3JlL3NvY2suY2A6CgoqICAgYHNrX2hhc19kZWNyeXB0X3VzZXJgCiogICBgdGNwX3NldF91bHBgCiogICBgX190Y3Bfc2V0X3VscGAKKiAgIGBwc3Bfc29ja19hc3NvY19zZXRfcnhgCiogICBgcHNwX25sX3J4X2Fzc29jX2RvaXRgCgpGaW5hbGx5LCBJIG5lZWQgdG8gdGhvcm91Z2hseSBleGFtaW5lIHRoZSBjYWxsZXJzIG9mIGB0Y3Bfc2V0X3VscGAuIFRoaXMgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBkYXRhIGZsb3cgYW5kIHBvdGVudGlhbCBpbXBhY3Qgb2YgYW55IGNoYW5nZXMgdG8gdGhpcyBmdW5jdGlvbi4gVGhpcyBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIG15IGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3Bfc2V0X3VscCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC90Y3AuaD0yODI5PXZvaWQgdGNwX3VucmVnaXN0ZXJfdWxwKHN0cnVjdCB0Y3BfdWxwX29wcyAqdHlwZSk7XG5pbmNsdWRlL25ldC90Y3AuaDoyODMwOmludCB0Y3Bfc2V0X3VscChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IGNoYXIgKm5hbWUpO1xuaW5jbHVkZS9uZXQvdGNwLmgtMjgzMS12b2lkIHRjcF9nZXRfYXZhaWxhYmxlX3VscChjaGFyICpidWYsIHNpemVfdCBsZW4pO1xuLS1cbm5ldC9pcHY0L3RjcC5jPTM4MzY9aW50IGRvX3RjcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvaXB2NC90Y3AuYy0zODc5LVx0XHRzb2Nrb3B0X2xvY2tfc29jayhzayk7XG5uZXQvaXB2NC90Y3AuYzozODgwOlx0XHRlcnIgPSB0Y3Bfc2V0X3VscChzaywgbmFtZSk7XG5uZXQvaXB2NC90Y3AuYy0zODgxLVx0XHRzb2Nrb3B0X3JlbGVhc2Vfc29jayhzayk7XG4tLVxubmV0L2lwdjQvdGNwX3VscC5jPTExMj12b2lkIHRjcF9jbGVhbnVwX3VscChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvdGNwX3VscC5jLTEyOS1cbm5ldC9pcHY0L3RjcF91bHAuYzoxMzA6c3RhdGljIGludCBfX3RjcF9zZXRfdWxwKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHRjcF91bHBfb3BzICp1bHBfb3BzKVxubmV0L2lwdjQvdGNwX3VscC5jLTEzMS17XG4tLVxubmV0L2lwdjQvdGNwX3VscC5jLTE2MC1cbm5ldC9pcHY0L3RjcF91bHAuYzoxNjE6aW50IHRjcF9zZXRfdWxwKHN0cnVjdCBzb2NrICpzaywgY29uc3QgY2hhciAqbmFtZSlcbm5ldC9pcHY0L3RjcF91bHAuYy0xNjIte1xuLS1cbm5ldC9pcHY0L3RjcF91bHAuYy0xNzAtXG5uZXQvaXB2NC90Y3BfdWxwLmM6MTcxOlx0cmV0dXJuIF9fdGNwX3NldF91bHAoc2ssIHVscF9vcHMpO1xubmV0L2lwdjQvdGNwX3VscC5jLTE3Mi19XG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0xNzgxPWludCBtcHRjcF9zdWJmbG93X2NyZWF0ZV9zb2NrZXQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHksXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0xODEyLVx0c2tfbmV0X3JlZmNudF91cGdyYWRlKHNmLVx1MDAzZXNrKTtcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTgxMzpcdGVyciA9IHRjcF9zZXRfdWxwKHNmLVx1MDAzZXNrLCBcJiMzNDttcHRjcFwmIzM0Oyk7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE4MTQtXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjM3NwoJCQkJCQkJb3V0cHV0OiAyMjMKCQkJCQkJCXRob3VnaHRzOiA3MzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIGFuZCBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlc2UgY29uZmlndXJhdGlvbnMuIEkgc2VlIHRoYXQgYElORVRfUFNQYCByZWxpZXMgb24gYElORVRgIGFuZCBzZWxlY3RzIGBTS0JfREVDUllQVEVEYCwgYFNLQl9FWFRFTlNJT05TYCwgYW5kIGBTT0NLX1ZBTElEQVRFX1hNSVRgLiBgVExTYCBhbHNvIGRlcGVuZHMgb24gYElORVRgLCBhbmQgYFRMU19ERVZJQ0VgIGRlcGVuZHMgb24gYFRMU2AsIHNoYXJpbmcgc29tZSBvZiB0aGUgc2FtZSBzZWxlY3RlZCBzeW1ib2xzIGFzIGBJTkVUX1BTUGAuIEkgYWxzbyBzZWUgdGhhdCBgTkVUREVWU0lNYCBpcyB0aGVyZSB0byBjcmVhdGUgc2ltdWxhdGVkIG5ldGRldnMgd2l0aCBQU1Agc3VwcG9ydC4KClNvLCB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBmb2N1cyBvbiBhcmUgYElORVRfUFNQYCwgYFRMU2AsIGBUTFNfREVWSUNFYCwgYW5kIGBORVRERVZTSU1gLiBOb3csIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYENPTkZJR19JTkVUX1BTUGAgYWN0dWFsbHkgZW5hYmxlcyB0aGUgbmVjZXNzYXJ5IGNvZGUg4oCTIEkmIzM5O2xsIGNoZWNrIHRoYXQgYG5ldC9wc3AvcHNwX3NvY2suY2AgYW5kIGBwc3Bfc29ja19hc3NvY19zZXRfcnhgIGFyZSBpbmRlZWQgaW5jbHVkZWQuIExvb2tpbmcgYXQgdGhlIE1ha2VmaWxlcyBjb25maXJtcyB0aGlzIGRlcGVuZGVuY3kuCgpOZXh0LCB0aGUgY3JpdGljYWwgc3ltYm9scy4gSSBoYXZlIHRvIGxvb2sgYXQgYHNrX2hhc19kZWNyeXB0X3VzZXJgLCBgdGNwX3NldF91bHBgLCBgX190Y3Bfc2V0X3VscGAsIGBwc3Bfc29ja19hc3NvY19zZXRfcnhgLCBhbmQgYHBzcF9ubF9yeF9hc3NvY19kb2l0YC4gQXJlIGFueSBvZiB0aGVzZSB3aWRlbHkgdXNlZD8gTm8sIHRoYW5rZnVsbHkuIGBza19oYXNfZGVjcnlwdF91c2VyYCBpcyBhIHJlY2VudCBhZGRpdGlvbiBhbmQgb25seSBjYWxsZWQgYnkgYSBmZXcgb3RoZXIgZnVuY3Rpb25zLCBhbmQgdGhlIG90aGVycyBhcmUgc3BlY2lmaWMgdG8gVENQIFVMUCBzZXR1cCBhbmQgUFNQIG5ldGxpbmsgaW50ZXJhY3Rpb25zLiBUaGF0JiMzOTtzIGdvb2Q7IGl0IG5hcnJvd3MgdGhlIHNjb3BlLgoKR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlcywgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIG11dHVhbCBleGNsdXNpdml0eSBjaGVja3MgYmV0d2VlbiBQU1Agc29ja2V0IGFzc29jaWF0aW9ucywgVENQIFVMUCAobGlrZSBrVExTKSwgYW5kIHNvY2tldHMgd2l0aCBwYWNrZXQgdHJhbnNtaXNzaW9uIHZhbGlkYXRpb24uIEl0IGFkZHMgY2hlY2tzIGZvciBgc2tfaGFzX2RlY3J5cHRfdXNlcigpYCBhbmQgYHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYigpYCBpbiBrZXkgZnVuY3Rpb25zIHRvIHByZXZlbnQgY29uZmxpY3RzLiBUaGVzZSBtb2RpZmljYXRpb25zIHRvdWNoIGNydWNpYWwgc29ja2V0IGNvbmZpZ3VyYXRpb24gcGF0aHMsIGFjY2Vzc2libGUgdmlhIFRDUCBvcHRpb25zIGFuZCBuZXRsaW5rIGNvbW1hbmRzLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBzY2VuYXJpbyBmb3IgZnV6emluZy4KCkFscmlnaHQsIGRvdWJsZS1jaGVja2luZyBteSBub3RlczoKCiogICAqKldvcnRoRnV6emluZzoqKiBUcnVlCiogICAqKkZvY3VzU3ltYm9sczoqKiBcWyYjMzQ7c2tcX2hhc1xfZGVjcnlwdFxfdXNlciYjMzQ7LCAmIzM0O3RjcFxfc2V0XF91bHAmIzM0OywgJiMzNDtcX1xfdGNwXF9zZXRcX3VscCYjMzQ7LCAmIzM0O3BzcFxfc29ja1xfYXNzb2NcX3NldFxfcngmIzM0OywgJiMzNDtwc3BcX25sXF9yeFxfYXNzb2NcX2RvaXQmIzM0O10KKiAgICoqRW5hYmxlQ29uZmlnczoqKiBcWyYjMzQ7SU5FVFxfUFNQJiMzNDssICYjMzQ7VExTJiMzNDssICYjMzQ7VExTXF9ERVZJQ0UmIzM0OywgJiMzNDtORVRERVZTSU0mIzM0O10KKiAgICoqUmVhc29uaW5nOioqIENvbmNpc2UgYW5kIGFjY3VyYXRlLgoKRXZlcnl0aGluZyBjaGVja3Mgb3V0LiBJJiMzOTttIHJlYWR5IHRvIHByb2NlZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUX1BTUCYjMzQ7LAogICAgJiMzNDtUTFMmIzM0OywKICAgICYjMzQ7VExTX0RFVklDRSYjMzQ7LAogICAgJiMzNDtORVRERVZTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtza19oYXNfZGVjcnlwdF91c2VyJiMzNDssCiAgICAmIzM0O3RjcF9zZXRfdWxwJiMzNDssCiAgICAmIzM0O19fdGNwX3NldF91bHAmIzM0OywKICAgICYjMzQ7cHNwX3NvY2tfYXNzb2Nfc2V0X3J4JiMzNDssCiAgICAmIzM0O3BzcF9ubF9yeF9hc3NvY19kb2l0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc29ja2V0IHN0YXRlIGV4Y2x1c2l2aXR5IGNoZWNrcyBiZXR3ZWVuIFBTUCAoUFNQIFNlY3VyaXR5IFByb3RvY29sKSBzb2NrZXQgYXNzb2NpYXRpb25zLCBUQ1AgVUxQIChlLmcuLCBrVExTKSwgYW5kIHNvY2tldHMgd2l0aCB0cmFuc21pdCB2YWxpZGF0aW9uIGhhbmRsZXJzIChza192YWxpZGF0ZV94bWl0X3NrYikuIEl0IGFkZHMgc2tfaGFzX2RlY3J5cHRfdXNlcigpIGFuZCBza19oYXNfdmFsaWRhdGVfeG1pdF9za2IoKSB2YWxpZGF0aW9ucyBpbiBfX3RjcF9zZXRfdWxwKCkgYW5kIHBzcF9zb2NrX2Fzc29jX3NldF9yeCgpIHRvIHByZXZlbnQgY29uZmxpY3Rpbmcgc29ja2V0IG9mZmxvYWQgc3RhdGVzLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIFRDUCBzZXRzb2Nrb3B0KFRDUF9VTFApIGFuZCBQU1AgTmV0bGluayBjb21tYW5kcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVF9QU1AmIzM0OywKICAgICYjMzQ7VExTJiMzNDssCiAgICAmIzM0O1RMU19ERVZJQ0UmIzM0OywKICAgICYjMzQ7TkVUREVWU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2tfaGFzX2RlY3J5cHRfdXNlciYjMzQ7LAogICAgJiMzNDt0Y3Bfc2V0X3VscCYjMzQ7LAogICAgJiMzNDtfX3RjcF9zZXRfdWxwJiMzNDssCiAgICAmIzM0O3BzcF9zb2NrX2Fzc29jX3NldF9yeCYjMzQ7LAogICAgJiMzNDtwc3BfbmxfcnhfYXNzb2NfZG9pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHNvY2tldCBzdGF0ZSBleGNsdXNpdml0eSBjaGVja3MgYmV0d2VlbiBQU1AgKFBTUCBTZWN1cml0eSBQcm90b2NvbCkgc29ja2V0IGFzc29jaWF0aW9ucywgVENQIFVMUCAoZS5nLiwga1RMUyksIGFuZCBzb2NrZXRzIHdpdGggdHJhbnNtaXQgdmFsaWRhdGlvbiBoYW5kbGVycyAoc2tfdmFsaWRhdGVfeG1pdF9za2IpLiBJdCBhZGRzIHNrX2hhc19kZWNyeXB0X3VzZXIoKSBhbmQgc2tfaGFzX3ZhbGlkYXRlX3htaXRfc2tiKCkgdmFsaWRhdGlvbnMgaW4gX190Y3Bfc2V0X3VscCgpIGFuZCBwc3Bfc29ja19hc3NvY19zZXRfcngoKSB0byBwcmV2ZW50IGNvbmZsaWN0aW5nIHNvY2tldCBvZmZsb2FkIHN0YXRlcy4gVGhlc2UgY29kZSBwYXRocyBhcmUgcmVhY2hhYmxlIHZpYSBUQ1Agc2V0c29ja29wdChUQ1BfVUxQKSBhbmQgUFNQIE5ldGxpbmsgY29tbWFuZHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjQ0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDA6NDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG11dHVhbCBleGNsdXNpdml0eSBjaGVja3MgKHNrX2hhc19kZWNyeXB0X3VzZXIgYW5kIHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYikgdG8gcHJldmVudCBpbmNvbXBhdGlibGUgc29ja2V0IHN0YXRlcyB3aGVuIGNvbmZpZ3VyaW5nIFRDUCBVTFAgKGUuZy4ga1RMUykgYW5kIFBTUCAoUFNQIHNlY3VyaXR5IHByb3RvY29sKSBvbiB0aGUgc2FtZSBzb2NrZXQuIFxuXG5JdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBjb3BpZXMgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWNjZXNzIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIHNhbml0aXplcnMgbGlrZSBLQVNBTiBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgbWVtb3J5IHNhZmV0eSBvciBzdGF0ZSBtYW5hZ2VtZW50IGlzc3Vlcy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgM2I0ZjIyZTFkMmUyZmI4MjNkODJiYjY0YTFlMTk0MzQ4NDc1MTJjMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDAwOjQyOjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc29jay5oIGIvaW5jbHVkZS9uZXQvc29jay5oCmluZGV4IDUxMTg1MjIyYWFjMjkuLmJhNWU1MDkyZjE5MmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NvY2suaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9zb2NrLmgKQEAgLTIzMTIsNiAmIzQzOzIzMTIsMTcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNrX2dzb19kaXNhYmxlKHN0cnVjdCBzb2NrICpzaykKIAlzay0mZ3Q7c2tfcm91dGVfY2FwcyAmYW1wOz0gfk5FVElGX0ZfR1NPX01BU0s7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgc2tfaGFzX3ZhbGlkYXRlX3htaXRfc2tiKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7I2lmZGVmIENPTkZJR19TT0NLX1ZBTElEQVRFX1hNSVQKJiM0MzsJcmV0dXJuICEhc2stJmd0O3NrX3ZhbGlkYXRlX3htaXRfc2tiOwomIzQzOyNlbHNlCiYjNDM7CXJldHVybiBmYWxzZTsKJiM0MzsjZW5kaWYKJiM0Mzt9CiYjNDM7CiYjNDM7Ym9vbCBza19oYXNfZGVjcnlwdF91c2VyKGNvbnN0IHN0cnVjdCBzb2NrICpzayk7CiYjNDM7CiBzdGF0aWMgaW5saW5lIGludCBza2JfZG9fY29weV9kYXRhX25vY2FjaGUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQkgICBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sIGNoYXIgKnRvLAogCQkJCQkgICBpbnQgY29weSwgaW50IG9mZnNldCkKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2suYyBiL25ldC9jb3JlL3NvY2suYwppbmRleCBmYTYwYjc0OTRjNTg2Li45NDg5ZDljNDc5NDkzIDEwMDY0NAotLS0gYS9uZXQvY29yZS9zb2NrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc29jay5jCkBAIC0xNDIsNiAmIzQzOzE0Miw3IEBACiAKICNpbmNsdWRlICZsdDt0cmFjZS9ldmVudHMvc29jay5oJmd0OwogCiYjNDM7I2luY2x1ZGUgJmx0O25ldC9wc3AuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvdGNwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2J1c3lfcG9sbC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9waG9uZXQvcGhvbmV0LmgmZ3Q7CkBAIC0yNjcwLDYgJiM0MzsyNjcxLDEyIEBAIHZvaWQgc2tfc2V0dXBfY2FwcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNrX3NldHVwX2NhcHMpOwogCiYjNDM7Ym9vbCBza19oYXNfZGVjcnlwdF91c2VyKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7CXJldHVybiBwc3Bfc2tfYXNzb2Moc2spIHx8CiYjNDM7CSAgICAgICAoc2tfaXNfaW5ldChzaykgJmFtcDsmYW1wOyBpbmV0X2Nza19oYXNfdWxwKHNrKSk7IC8qIGZvciB0bHMgKi8KJiM0Mzt9CiYjNDM7CiAvKgogICoJU2ltcGxlIHJlc291cmNlIG1hbmFnZXJzIGZvciBzb2NrZXRzLgogICovCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfdWxwLmMgYi9uZXQvaXB2NC90Y3BfdWxwLmMKaW5kZXggMmFhNDQyMTI4NjMwZS4uZjNlMGM5ZDM3OWJiNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX3VscC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF91bHAuYwpAQCAtMTM2LDYgJiM0MzsxMzYsMTAgQEAgc3RhdGljIGludCBfX3RjcF9zZXRfdWxwKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHRjcF91bHBfb3BzICp1bHBfb3BzKQogCWlmIChpY3NrLSZndDtpY3NrX3VscF9vcHMpCiAJCWdvdG8gb3V0X2VycjsKIAomIzQzOwllcnIgPSAtRUlOVkFMOwomIzQzOwlpZiAoc2tfaGFzX2RlY3J5cHRfdXNlcihzaykgfHwgc2tfaGFzX3ZhbGlkYXRlX3htaXRfc2tiKHNrKSkKJiM0MzsJCWdvdG8gb3V0X2VycjsKJiM0MzsKIAlpZiAoc2stJmd0O3NrX3NvY2tldCkKIAkJY2xlYXJfYml0KFNPQ0tfU1VQUE9SVF9aQywgJmFtcDtzay0mZ3Q7c2tfc29ja2V0LSZndDtmbGFncyk7CiAKZGlmZiAtLWdpdCBhL25ldC9wc3AvcHNwX3NvY2suYyBiL25ldC9wc3AvcHNwX3NvY2suYwppbmRleCAxYTJhNmI3NTE2YjBmLi41MDkwMzU2MTc4OTRhIDEwMDY0NAotLS0gYS9uZXQvcHNwL3BzcF9zb2NrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3BzcC9wc3Bfc29jay5jCkBAIC0xNDMsNiAmIzQzOzE0MywxMCBAQCBpbnQgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9hc3NvYyAqcGFzLAogCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7U29ja2V0IGFscmVhZHkgaGFzIFBTUCBzdGF0ZSYjMzQ7KTsKIAkJZXJyID0gLUVCVVNZOwogCQlnb3RvIGV4aXRfdW5sb2NrOwomIzQzOwl9IGVsc2UgaWYgKHNrX2hhc19kZWNyeXB0X3VzZXIoc2spIHx8IHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYihzaykpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDtTb2NrZXQgaGFzIGluY29tcGF0aWJsZSBzdGF0ZSYjMzQ7KTsKJiM0MzsJCWVyciA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIGV4aXRfdW5sb2NrOwogCX0KIAogCXJlZmNvdW50X2luYygmYW1wO3Bhcy0mZ3Q7cmVmY250KTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZwppbmRleCBiNjk4OWM3ZDNkOWQxLi40ODM4YWRmMjdmYTFiIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnCkBAIC0yMSw1ICYjNDM7MjEsNiBAQCBDT05GSUdfTkVUX1NDSF9JTkdSRVNTPXkKIENPTkZJR19ORVRfU0NIX1BSSU89bQogQ09ORklHX1BQUD15CiBDT05GSUdfUFBQT0U9eQomIzQzO0NPTkZJR19UTFM9eQogQ09ORklHX1ZMQU5fODAyMVE9bQogQ09ORklHX1hEUF9TT0NLRVRTPXkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weQppbmRleCAzMTU2NDhhNzcwZDAwLi4xMmIyN2YyYTNmYTFiIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHkKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5CkBAIC0yMyw2ICYjNDM7MjMsOCBAQCBmcm9tIGxpYi5weSBpbXBvcnQgTmV0TlNFbnRlcgogZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgcmFuZF9wb3J0LCB3YWl0X3BvcnRfbGlzdGVuCiBmcm9tIGxpYi5weSBpbXBvcnQgaXAKIAomIzQzO1RDUF9VTFAgPSAzMQomIzQzOwogCiBkZWYgX2dldF9vdXRxKHMpOgogICAgIG9uZSA9IGImIzM5O1wwJiMzOTsgKiA0CkBAIC0zMzMsNiAmIzQzOzMzNSw1MCBAQCBkZWYgYXNzb2NfdmVyc2lvbl9taXNtYXRjaChjZmcpOgogICAgICAgICAgICAga3NmdF9lcSh0aGVfZXhjZXB0aW9uLm5sX21zZy5lcnJvciwgLWVycm5vLkVJTlZBTCkKIAogCiYjNDM7ZGVmIF9yZXF1aXJlX3Rsc191bHAoKToKJiM0MzsgICAgd2l0aCBzb2NrZXQuY3JlYXRlX3NlcnZlcigoJiMzNDtsb2NhbGhvc3QmIzM0OywgMCkpIGFzIHNydjoKJiM0MzsgICAgICAgIHdpdGggc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKHNydi5nZXRzb2NrbmFtZSgpKSBhcyBzOgomIzQzOyAgICAgICAgICAgIHRyeToKJiM0MzsgICAgICAgICAgICAgICAgcy5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfVENQLCBUQ1BfVUxQLCBiJiMzNDt0bHMmIzM0OykKJiM0MzsgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CiYjNDM7ICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoJiMzNDtrVExTIG5vdCBhdmFpbGFibGUmIzM0OykgZnJvbSBleGMKJiM0MzsKJiM0MzsKJiM0MztkZWYgYXNzb2NfcHNwX3VscF9leGNsdXNpdmUoY2ZnKToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7IFRlc3QgdGhhdCBhIFRDUCBVTFAgY2Fubm90IGJlIGF0dGFjaGVkIHRvIGEgUFNQIHNvY2tldCAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgX2luaXRfcHNwX2RldihjZmcpCiYjNDM7ICAgIF9yZXF1aXJlX3Rsc191bHAoKQomIzQzOwomIzQzOyAgICB3aXRoIF9tYWtlX2Nscl9jb25uKGNmZykgYXMgczoKJiM0MzsgICAgICAgIHRyeToKJiM0MzsgICAgICAgICAgICBjZmcucHNwbmwucnhfYXNzb2MoeyYjMzQ7dmVyc2lvbiYjMzQ7OiAwLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiMzNDtkZXYtaWQmIzM0OzogY2ZnLnBzcF9kZXZfaWQsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIzM0O3NvY2stZmQmIzM0Ozogcy5maWxlbm8oKX0pCiYjNDM7ICAgICAgICAgICAgd2l0aCBrc2Z0X3JhaXNlcyhPU0Vycm9yKSBhcyBjbToKJiM0MzsgICAgICAgICAgICAgICAgcy5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfVENQLCBUQ1BfVUxQLCBiJiMzNDt0bHMmIzM0OykKJiM0MzsgICAgICAgICAgICBrc2Z0X2VxKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRUlOVkFMKQomIzQzOyAgICAgICAgZmluYWxseToKJiM0MzsgICAgICAgICAgICBfY2xvc2VfY29ubihjZmcsIHMpCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIGFzc29jX3VscF9wc3BfZXhjbHVzaXZlKGNmZyk6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OyBUZXN0IHRoYXQgYSBQU1AgYXNzb2MgY2Fubm90IGJlIGFkZGVkIHRvIGEgc29ja2V0IHdpdGggYSBUQ1AgVUxQICYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBfaW5pdF9wc3BfZGV2KGNmZykKJiM0MzsgICAgX3JlcXVpcmVfdGxzX3VscCgpCiYjNDM7CiYjNDM7ICAgIHdpdGggX21ha2VfY2xyX2Nvbm4oY2ZnKSBhcyBzOgomIzQzOyAgICAgICAgdHJ5OgomIzQzOyAgICAgICAgICAgIHMuc2V0c29ja29wdChzb2NrZXQuU09MX1RDUCwgVENQX1VMUCwgYiYjMzQ7dGxzJiMzNDspCiYjNDM7ICAgICAgICAgICAgd2l0aCBrc2Z0X3JhaXNlcyhObEVycm9yKSBhcyBjbToKJiM0MzsgICAgICAgICAgICAgICAgY2ZnLnBzcG5sLnJ4X2Fzc29jKHsmIzM0O3ZlcnNpb24mIzM0OzogMCwKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIzM0O2Rldi1pZCYjMzQ7OiBjZmcucHNwX2Rldl9pZCwKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIzM0O3NvY2stZmQmIzM0Ozogcy5maWxlbm8oKX0pCiYjNDM7ICAgICAgICAgICAga3NmdF9lcShjbS5leGNlcHRpb24ubmxfbXNnLmVycm9yLCAtZXJybm8uRUlOVkFMKQomIzQzOyAgICAgICAgICAgIGtzZnRfZXEoY20uZXhjZXB0aW9uLm5sX21zZy5leHRhY2tbJiMzOTtiYWQtYXR0ciYjMzk7XSwgJiMzNDsuc29jay1mZCYjMzQ7KQomIzQzOyAgICAgICAgZmluYWxseToKJiM0MzsgICAgICAgICAgICBfY2xvc2VfY29ubihjZmcsIHMpCiYjNDM7CiYjNDM7CiBkZWYgYXNzb2NfdHdpY2UoY2ZnKToKICAgICAmIzM0OyYjMzQ7JiMzNDsgVGVzdCByZXVzaW5nIFR4IGFzc29jIGZvciB0d28gc29ja2V0cyAmIzM0OyYjMzQ7JiMzNDsKICAgICBfaW5pdF9wc3BfZGV2KGNmZykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NTUKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA1NTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE11dHVhbCBFeGNsdXNpb24gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgZW5mb3JjaW5nIG11dHVhbCBleGNsdXNpdml0eSBiZXR3ZWVuIFBTUCAodGhlIFBTUCBzZWN1cml0eSBwcm90b2NvbC9zb2NrZXQpIGFuZCBUQ1AgVUxQcyAobGlrZSBrVExTKSBvbiBhIHNpbmdsZSBzb2NrZXQuIEl0JiMzOTtzIGFsc28gYWRkaW5nIGNoZWNrcyBmb3IgYHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYihzaylgLCB3aGljaCBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgaW4gbWluZC4KCkxldCYjMzk7cyBicmVhayBkb3duIHRoZSBjaGFuZ2VzOgoKKiAgICoqSGVhZGVyIGFuZCBEZWNsYXJhdGlvbnM6KiogV2UmIzM5O3ZlIGdvdCBgaW5jbHVkZS9uZXQvc29jay5oYCBhZGRpbmcgYW4gaW5saW5lIGBza19oYXNfdmFsaWRhdGVfeG1pdF9za2IoY29uc3Qgc3RydWN0IHNvY2sgKnNrKWAgYW5kIGRlY2xhcmluZyBgYm9vbCBza19oYXNfZGVjcnlwdF91c2VyKGNvbnN0IHN0cnVjdCBzb2NrICpzayk7YCBUaGlzIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIG5ldyBgc2tfaGFzX3ZhbGlkYXRlX3htaXRfc2tiYCBsaWtlbHkgc2ltcGxpZmllcyBjaGVja2luZyBmb3Igc29tZXRoaW5nLCBhbmQgYHNrX2hhc19kZWNyeXB0X3VzZXJgIHdpbGwgYmUga2V5LgoKKiAgICoqRGVmaW5pdGlvbiBvZiBgc2tfaGFzX2RlY3J5cHRfdXNlcmA6KiogSW4gYG5ldC9jb3JlL3NvY2suY2AsIHRoZSBkZWZpbml0aW9uIG9mIGBza19oYXNfZGVjcnlwdF91c2VyKGNvbnN0IHN0cnVjdCBzb2NrICpzaylgIGlzIHRoZSBjb3JlIGxvZ2ljOiBgcmV0dXJuIHBzcF9za19hc3NvYyhzaykgfHwgKHNrX2lzX2luZXQoc2spICZhbXA7JmFtcDsgaW5ldF9jc2tfaGFzX3VscChzaykpO2AuIEVzc2VudGlhbGx5LCBpZiBlaXRoZXIgUFNQIGlzIGFzc29jaWF0ZWQgT1IgaWYgaXQmIzM5O3MgYW4gaW5ldCBzb2NrZXQgKmFuZCogYSBVTFAgaXMgcHJlc2VudCAobGlrZSBUTFMpLCB0aGVuIHdlIHNheSBkZWNyeXB0aW9uIGlzIGhhbmRsZWQuIE1ha2VzIHNlbnNlLgoKKiAgICoqRW5mb3JjZW1lbnQgaW4gVUxQIGFuZCBQU1A6KiogVGhlIGBuZXQvaXB2NC90Y3BfdWxwLmNgIGluIGBfX3RjcF9zZXRfdWxwYCBjaGVja3MgZm9yIGBza19oYXNfZGVjcnlwdF91c2VyKHNrKSB8fCBza19oYXNfdmFsaWRhdGVfeG1pdF9za2Ioc2spYC4gSWYgKmVpdGhlciogb2YgdGhvc2UgY29uZGl0aW9ucyBpcyB0cnVlLCBpdCBlcnJvcnMgb3V0LiBUaGlzIGlzIHdoZXJlIHRoZSBtdXR1YWwgZXhjbHVzaW9uIGNvbWVzIGludG8gcGxheTogeW91IGNhbiYjMzk7dCBzZXQgYSBVTFAgaWYgUFNQIGlzIGFscmVhZHkgYWN0aXZlIG9yIGB2YWxpZGF0ZV94bWl0X3NrYmAgaXMgc2V0LiBTaW1pbGFybHksIGluIGBuZXQvcHNwL3BzcF9zb2NrLmNgLCBgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4YCBjaGVja3MgZm9yIHRoZSBzYW1lIGNvbmRpdGlvbnMgYmVmb3JlIGFsbG93aW5nIGEgUFNQIGFzc29jaWF0aW9uLgoKKiAgICoqU2VsZnRlc3RzOioqIEZpbmFsbHksIHRoZXJlIGFyZSB1cGRhdGVzIHRvIHRoZSBzZWxmdGVzdHMgd2hpY2ggSSYjMzk7bGwgY2VydGFpbmx5IG5lZWQgdG8gcmV2aWV3LgoKU28sIGluIGVzc2VuY2UsIHRoZSBwYXRjaCByaWdvcm91c2x5IHByZXZlbnRzIGF0dGFjaGluZyBhIFVMUCBpZiBQU1AgaXMgYWN0aXZlLCBvciBgdmFsaWRhdGVfeG1pdF9za2JgIGlzIHByZXNlbnQuIEFuZCBjb252ZXJzZWx5LCBpdCBwcmV2ZW50cyBhdHRhY2hpbmcgUFNQIGlmIGEgVUxQIG9yIGB2YWxpZGF0ZV94bWl0X3NrYmAgaXMgYWxyZWFkeSB0aGVyZS4gSXQmIzM5O3MgYSBjbGVhbiBleGNsdXNpdml0eSBpbXBsZW1lbnRhdGlvbi4KCioqTWVtb3J5IFNhZmV0eSBDb25zaWRlcmF0aW9uczoqKgoKTm93LCBsZXQmIzM5O3MgdGhpbmsgYWJvdXQgcG90ZW50aWFsIHJpc2tzLiBDcnVjaWFsbHk6CgoqICAgTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgc28gbm8gb2J2aW91cyBhbGxvY2F0aW9uLXJlbGF0ZWQgYnVncy4KKiAgIE5vIGBjb3B5X3RvX3VzZXJgIGNhbGxzIHRoYXQgY291bGQgbGVhayBpbmZvcm1hdGlvbi4KKiAgIE5vIG5ldyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMgYXJlIGludHJvZHVjZWQuCiogICBObyBicmFuY2hpbmcgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLCBzbyBubyBjb250cm9sLWZsb3cgaXNzdWVzLgoqICAgVGhpcyBpcyBzdHJpY3RseSBhIG11dHVhbCBleGNsdXNpb24gZW5mb3JjZW1lbnQsIHNvIGl0IHNob3VsZG4mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIG9yIG1lbW9yeSByaXNrcywgYXNzdW1pbmcgdGhlIGZ1bmN0aW9ucyBpdCB1c2VzIChgcHNwX3NrX2Fzc29jYCwgYGluZXRfY3NrX2hhc191bHBgLCBhbmQgYHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYmApIGFyZSB0aGVtc2VsdmVzIHNhZmUuCgoqKlJlbWFpbmluZyBDb25jZXJuczoqKgoKSSYjMzk7bSBjb25maWRlbnQgdGhlIG1lbW9yeSBhc3BlY3RzIGFyZSBoYW5kbGVkLiBIb3dldmVyLCBJIG5lZWQgdG8gZG8gYSB0aG9yb3VnaCByZXZpZXcgb2YgdGhlIGltcGxlbWVudGF0aW9ucyBvZiBgcHNwX3NrX2Fzc29jYCwgYGluZXRfY3NrX2hhc191bHBgIGFuZCB3aGF0IGBza19oYXNfdmFsaWRhdGVfeG1pdF9za2JgIG1lYW5zLiBJJiMzOTtsbCBjaGVjayB0aGF0IHRob3NlIGZ1bmN0aW9ucyB0aGVtc2VsdmVzIGFyZSByb2J1c3QgYW5kIGNvcnJlY3RseSBoYW5kbGUgdGhlaXIgcmVzcGVjdGl2ZSBzdGF0ZXMuIFRoYXTigJlzIHByb2JhYmx5IHRoZSBtb3N0IGNyaXRpY2FsIGFyZWEgdG8gdmVyaWZ5LiBBbHNvLCB0aGUgc2VsZnRlc3RzIHNob3VsZCBiZSBjb21wcmVoZW5zaXZlIGVub3VnaCB0byBjb3ZlciBhbGwgdGhlIHBvc3NpYmxlIHNjZW5hcmlvcy4gSSYjMzk7bGwgbmVlZCB0byBnbyB0aHJvdWdoIHRob3NlIHdpdGggYSBmaW5lLXRvb3RoIGNvbWIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BzcF9za19hc3NvYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9MzM9dW5zaWduZWQgaW50IHBzcF9rZXlfc2l6ZSh1MzIgdmVyc2lvbik7XG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MzQ6dm9pZCBwc3Bfc2tfYXNzb2NfZnJlZShzdHJ1Y3Qgc29jayAqc2spO1xuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTM1LXZvaWQgcHNwX3R3c2tfaW5pdChzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dywgY29uc3Qgc3RydWN0IHNvY2sgKnNrKTtcbi0tXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9Mzc9dm9pZCBwc3BfcmVwbHlfc2V0X2RlY3J5cHRlZChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTM4LVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjM5OnN0YXRpYyBpbmxpbmUgc3RydWN0IHBzcF9hc3NvYyAqcHNwX3NrX2Fzc29jKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC00MC17XG4tLVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTQ1PXBzcF9lbnF1ZXVlX3NldF9kZWNyeXB0ZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC00OC1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDo0OTpcdHBhcyA9IHBzcF9za19hc3NvYyhzayk7XG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtNTAtXHRpZiAocGFzIFx1MDAyNlx1MDAyNiBwYXMtXHUwMDNldHguc3BpKVxuLS1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD0xMTY9cHNwX3NrX3J4X3BvbGljeV9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTE3LXtcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDoxMTg6XHRyZXR1cm4gX19wc3Bfc2tfcnhfcG9saWN5X2NoZWNrKHNrYiwgcHNwX3NrX2Fzc29jKHNrKSk7XG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTE5LX1cbi0tXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9MTUwPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHBzcF9za19vdmVyaGVhZChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTE1Ny0jZWxzZVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjE1ODpzdGF0aWMgaW5saW5lIHZvaWQgcHNwX3NrX2Fzc29jX2ZyZWUoc3RydWN0IHNvY2sgKnNrKSB7IH1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xNTktc3RhdGljIGlubGluZSB2b2lkXG4tLVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTE2Mz1wc3BfcmVwbHlfc2V0X2RlY3J5cHRlZChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpIHsgfVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTE2NC1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDoxNjU6c3RhdGljIGlubGluZSBzdHJ1Y3QgcHNwX2Fzc29jICpwc3Bfc2tfYXNzb2MoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTE2Ni17XG4tLVxubmV0L2NvcmUvc29jay5jPTI2NzQ9Ym9vbCBza19oYXNfZGVjcnlwdF91c2VyKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbm5ldC9jb3JlL3NvY2suYy0yNjc1LXtcbm5ldC9jb3JlL3NvY2suYzoyNjc2Olx0cmV0dXJuIHBzcF9za19hc3NvYyhzaykgfHxcbm5ldC9jb3JlL3NvY2suYy0yNjc3LVx0ICAgICAgIChza19pc19pbmV0KHNrKSBcdTAwMjZcdTAwMjYgaW5ldF9jc2tfaGFzX3VscChzaykpOyAvKiBmb3IgdGxzICovXG4tLVxubmV0L2lwdjQvYWZfaW5ldC5jPTE0MD12b2lkIGluZXRfc29ja19kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvYWZfaW5ldC5jLTE2Ni1cdGRzdF9yZWxlYXNlKHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoc2stXHUwMDNlc2tfcnhfZHN0LCAxKSk7XG5uZXQvaXB2NC9hZl9pbmV0LmM6MTY3Olx0cHNwX3NrX2Fzc29jX2ZyZWUoc2spO1xubmV0L2lwdjQvYWZfaW5ldC5jLTE2OC19XG4tLVxubmV0L3BzcC9wc3Bfc29jay5jPTExOD12b2lkIHBzcF9hc3NvY19wdXQoc3RydWN0IHBzcF9hc3NvYyAqcGFzKVxuLS1cbm5ldC9wc3AvcHNwX3NvY2suYy0xMjMtXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTI0OnZvaWQgcHNwX3NrX2Fzc29jX2ZyZWUoc3RydWN0IHNvY2sgKnNrKVxubmV0L3BzcC9wc3Bfc29jay5jLTEyNS17XG4tLVxubmV0L3BzcC9wc3Bfc29jay5jPTEzMj1pbnQgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9hc3NvYyAqcGFzLFxuLS1cbm5ldC9wc3AvcHNwX3NvY2suYy0xNDEtXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTQyOlx0aWYgKHBzcF9za19hc3NvYyhzaykpIHtcbm5ldC9wc3AvcHNwX3NvY2suYy0xNDMtXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7U29ja2V0IGFscmVhZHkgaGFzIFBTUCBzdGF0ZVwmIzM0Oyk7XG4tLVxubmV0L3BzcC9wc3Bfc29jay5jPTE4MT1pbnQgcHNwX3NvY2tfYXNzb2Nfc2V0X3R4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9kZXYgKnBzZCxcbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTkwLVxubmV0L3BzcC9wc3Bfc29jay5jOjE5MTpcdHBhcyA9IHBzcF9za19hc3NvYyhzayk7XG5uZXQvcHNwL3BzcF9zb2NrLmMtMTkyLVx0aWYgKCFwYXMpIHtcbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmM9MjcwPXZvaWQgcHNwX3R3c2tfaW5pdChzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dywgY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxubmV0L3BzcC9wc3Bfc29jay5jLTI3MS17XG5uZXQvcHNwL3BzcF9zb2NrLmM6MjcyOlx0c3RydWN0IHBzcF9hc3NvYyAqcGFzID0gcHNwX3NrX2Fzc29jKHNrKTtcbm5ldC9wc3AvcHNwX3NvY2suYy0yNzMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2NDgKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gbmV0d29yayBwcm9ncmFtbWluZy9rZXJuZWwgaW50ZXJuYWxzOgoKKipDaGVja2luZyBhIFJlbGF0ZWQgRnVuY3Rpb24qKgoKUmlnaHQsIEkmIzM5O20gYWxyZWFkeSBpbiB0aGlzIHNlY3Rpb24sIHJldmlld2luZyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGluZ3MuIEJlZm9yZSBJIG1vdmUgb24gb3IgZmluYWxpemUgdGhpcyBwYXJ0aWN1bGFyIGNoZWNrLCBJIHNob3VsZCBwcm9iYWJseSBhbHNvIHZlcmlmeSBgaW5ldF9jc2tfaGFzX3VscGAuIEl04oCZcyBhIHJlbGF0ZWQgZnVuY3Rpb24sIGxpa2VseSBvcGVyYXRpbmcgaW4gYSBzaW1pbGFyIGNvbnRleHQgb3Igb24gc2ltaWxhciBkYXRhIHN0cnVjdHVyZXMuIEkgbmVlZCB0byBlbnN1cmUgbXkgdW5kZXJzdGFuZGluZyBhbmQgYXNzdW1wdGlvbnMgYXJlIGNvbnNpc3RlbnQgYWNyb3NzIHRoaXMgcmVsYXRlZCBjb2RlLiBJdCYjMzk7cyB0b28gZWFzeSB0byBtaXNzIHNvbWV0aGluZyB3aGVuIGZvY3VzaW5nIG9uIGp1c3Qgb25lIGZ1bmN0aW9uLiBNYWtpbmcgc3VyZSBJIGFjY291bnQgZm9yIHRoaXMgcmVsYXRlZCBmdW5jdGlvbiB3aWxsIGhlbHAgbWUgYmUgdGhvcm91Z2ggaW4gbXkgcmV2aWV3LiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkgZGlkbiYjMzk7dCBvdmVybG9vayBzb21ldGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luZXRfY3NrX2hhc191bHAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaD0zMzg9c3RhdGljIGlubGluZSB2b2lkIGluZXRfY3NrX2luY19waW5ncG9uZ19jbnQoc3RydWN0IHNvY2sgKnNrKVxuLS1cbmluY2x1ZGUvbmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmgtMzQ1LVxuaW5jbHVkZS9uZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaDozNDY6c3RhdGljIGlubGluZSBib29sIGluZXRfY3NrX2hhc191bHAoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuaW5jbHVkZS9uZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaC0zNDcte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmM9NzUwPXN0cnVjdCBza19wc29jayAqc2tfcHNvY2tfaW5pdChzdHJ1Y3Qgc29jayAqc2ssIGludCBub2RlKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtNzU2LVxubmV0L2NvcmUvc2ttc2cuYzo3NTc6XHRpZiAoc2tfaXNfaW5ldChzaykgXHUwMDI2XHUwMDI2IGluZXRfY3NrX2hhc191bHAoc2spKSB7XG5uZXQvY29yZS9za21zZy5jLTc1OC1cdFx0cHNvY2sgPSBFUlJfUFRSKC1FSU5WQUwpO1xuLS1cbm5ldC9jb3JlL3NvY2suYz0yNjc0PWJvb2wgc2tfaGFzX2RlY3J5cHRfdXNlcihjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2NvcmUvc29jay5jLTI2NzYtXHRyZXR1cm4gcHNwX3NrX2Fzc29jKHNrKSB8fFxubmV0L2NvcmUvc29jay5jOjI2Nzc6XHQgICAgICAgKHNrX2lzX2luZXQoc2spIFx1MDAyNlx1MDAyNiBpbmV0X2Nza19oYXNfdWxwKHNrKSk7IC8qIGZvciB0bHMgKi9cbm5ldC9jb3JlL3NvY2suYy0yNjc4LX1cbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmM9NzI1PWludCB0Y3BfYnBmX3VwZGF0ZV9wcm90byhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIGJvb2wgcmVzdG9yZSlcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzM0LVx0aWYgKHJlc3RvcmUpIHtcbm5ldC9pcHY0L3RjcF9icGYuYzo3MzU6XHRcdGlmIChpbmV0X2Nza19oYXNfdWxwKHNrKSkge1xubmV0L2lwdjQvdGNwX2JwZi5jLTczNi1cdFx0XHQvKiBUTFMgZG9lcyBub3QgaGF2ZSBhbiB1bmhhc2ggcHJvdG8gaW4gU1cgY2FzZXMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczMzMKCQkJCQkJCW91dHB1dDogMTQ0CgkJCQkJCQl0aG91Z2h0czogODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBjaGFuZ2VzOgoKKipBbmFseXppbmcgdGhlIE11dHVhbCBFeGNsdXNpb24gYW5kIFZhbGlkYXRpb24gQ2hlY2tzKioKClJpZ2h0LCBzbyBJJiMzOTt2ZSBsb29rZWQgb3ZlciB0aGVzZSByZWNlbnQgbW9kaWZpY2F0aW9ucywgYW5kIGl0IHNlZW1zIHRoZSBmb2N1cyBpcyBzdHJpY3RseSBvbiBtdXR1YWwgZXhjbHVzaW9uIGFuZCB2YWxpZGF0aW9uIGNoZWNrcy4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgZnVuY3Rpb25zIGxpa2UgYHNrX2hhc19kZWNyeXB0X3VzZXJgIGFuZCBgc2tfaGFzX3ZhbGlkYXRlX3htaXRfc2tiYC4gVGhlc2UgYXJlIGVzc2VudGlhbGx5IGdhdGVrZWVwZXJzLCBlbnN1cmluZyB0aGF0IHRoZSBhdHRhY2htZW50IG9mIFBTUCBhbmQgVUxQL3htaXQgdmFsaWRhdGlvbiB0byBhIHNvY2tldCBkb24mIzM5O3QgaGFwcGVuIHNpbXVsdGFuZW91c2x5LiBUaGF0JiMzOTtzIGdvb2QsIG1pbmltaXplcyBjb25jdXJyZW5jeSBpc3N1ZXMuCgpDcnVjaWFsbHksIGZyb20gd2hhdCBJIGNhbiBzZWUsIHRoZXNlIGNoYW5nZXMgZG9uJiMzOTt0IGludHJvZHVjZSBhbnl0aGluZyB0cnVseSBjb25jZXJuaW5nIGZyb20gYSBtZW1vcnkgcGVyc3BlY3RpdmUuIEkmIzM5O20gbm90IHNlZWluZyBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9uLCB3ZSYjMzk7cmUgbm90IGNvcHlpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgYXJvdW5kLCBhbmQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgbmV3IGJyYW5jaGluZyBwYXRocyB0aGF0IHdvdWxkIGRlcGVuZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGRhdGEuIFRoYXQmIzM5O3MgYSBodWdlIHJlbGllZi4KClRoZXJlZm9yZSwgYmVjYXVzZSBvZiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2VzLCBJIGNhbiBjb25maWRlbnRseSBzYXkgdGhhdCB3ZSBkb24mIzM5O3QgbmVlZCB0byBpbnZvbHZlIEtNU0FOIGluIHRoaXMgcGFydGljdWxhciBhcmVhLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBzYWZlLgoKTm93LCBsZXQmIzM5O3MgcHJlcGFyZSB0aGUgY2FsbCB0byBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG11dHVhbCBleGNsdXNpdml0eSBjaGVja3MgKHNrX2hhc19kZWNyeXB0X3VzZXIgYW5kIHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYikgdG8gcHJldmVudCBpbmNvbXBhdGlibGUgc29ja2V0IHN0YXRlcyB3aGVuIGNvbmZpZ3VyaW5nIFRDUCBVTFAgKGUuZy4ga1RMUykgYW5kIFBTUCAoUFNQIHNlY3VyaXR5IHByb3RvY29sKSBvbiB0aGUgc2FtZSBzb2NrZXQuIFxuXG5JdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBjb3BpZXMgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWNjZXNzIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIHNhbml0aXplcnMgbGlrZSBLQVNBTiBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgbWVtb3J5IHNhZmV0eSBvciBzdGF0ZSBtYW5hZ2VtZW50IGlzc3Vlcy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBtdXR1YWwgZXhjbHVzaXZpdHkgY2hlY2tzIChza19oYXNfZGVjcnlwdF91c2VyIGFuZCBza19oYXNfdmFsaWRhdGVfeG1pdF9za2IpIHRvIHByZXZlbnQgaW5jb21wYXRpYmxlIHNvY2tldCBzdGF0ZXMgd2hlbiBjb25maWd1cmluZyBUQ1AgVUxQIChlLmcuIGtUTFMpIGFuZCBQU1AgKFBTUCBzZWN1cml0eSBwcm90b2NvbCkgb24gdGhlIHNhbWUgc29ja2V0LiBcblxuSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgY29waWVzIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFjY2VzcyBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBzYW5pdGl6ZXJzIGxpa2UgS0FTQU4gYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG1lbW9yeSBzYWZldHkgb3Igc3RhdGUgbWFuYWdlbWVudCBpc3N1ZXMuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6NDI6NTguMzc5MjgxNDQ5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyNDgwNDA0NTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRfUFNQXCIsXG4gICAgXCJUTFNcIixcbiAgICBcIlRMU19ERVZJQ0VcIixcbiAgICBcIk5FVERFVlNJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNrX2hhc19kZWNyeXB0X3VzZXJcIixcbiAgICBcInRjcF9zZXRfdWxwXCIsXG4gICAgXCJfX3RjcF9zZXRfdWxwXCIsXG4gICAgXCJwc3Bfc29ja19hc3NvY19zZXRfcnhcIixcbiAgICBcInBzcF9ubF9yeF9hc3NvY19kb2l0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG11dHVhbCBleGNsdXNpdml0eSBjaGVja3MgKHNrX2hhc19kZWNyeXB0X3VzZXIgYW5kIHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYikgdG8gcHJldmVudCBpbmNvbXBhdGlibGUgc29ja2V0IHN0YXRlcyB3aGVuIGNvbmZpZ3VyaW5nIFRDUCBVTFAgKGUuZy4ga1RMUykgYW5kIFBTUCAoUFNQIHNlY3VyaXR5IHByb3RvY29sKSBvbiB0aGUgc2FtZSBzb2NrZXQuIFxcblxcbkl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIGNvcGllcyB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhY2Nlc3Mgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgdGVzdGluZyBhbmQgc2FuaXRpemVycyBsaWtlIEtBU0FOIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBtZW1vcnkgc2FmZXR5IG9yIHN0YXRlIG1hbmFnZW1lbnQgaXNzdWVzLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzb2NrZXQgc3RhdGUgZXhjbHVzaXZpdHkgY2hlY2tzIGJldHdlZW4gUFNQIChQU1AgU2VjdXJpdHkgUHJvdG9jb2wpIHNvY2tldCBhc3NvY2lhdGlvbnMsIFRDUCBVTFAgKGUuZy4sIGtUTFMpLCBhbmQgc29ja2V0cyB3aXRoIHRyYW5zbWl0IHZhbGlkYXRpb24gaGFuZGxlcnMgKHNrX3ZhbGlkYXRlX3htaXRfc2tiKS4gSXQgYWRkcyBza19oYXNfZGVjcnlwdF91c2VyKCkgYW5kIHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYigpIHZhbGlkYXRpb25zIGluIF9fdGNwX3NldF91bHAoKSBhbmQgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4KCkgdG8gcHJldmVudCBjb25mbGljdGluZyBzb2NrZXQgb2ZmbG9hZCBzdGF0ZXMuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIHJlYWNoYWJsZSB2aWEgVENQIHNldHNvY2tvcHQoVENQX1VMUCkgYW5kIFBTUCBOZXRsaW5rIGNvbW1hbmRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMDo0Mjo1OC4zNzkyODc1MThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODYyODAxODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzYjRmMjJlMWQyZTJmYjgyM2Q4MmJiNjRhMWUxOTQzNDg0NzUxMmMwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDExIDAwOjQyOjU2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NvY2suaCBiL2luY2x1ZGUvbmV0L3NvY2suaFxcbmluZGV4IDUxMTg1MjIyYWFjMjkuLmJhNWU1MDkyZjE5MmMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvc29jay5oXFxuKysrIGIvaW5jbHVkZS9uZXQvc29jay5oXFxuQEAgLTIzMTIsNiArMjMxMiwxNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2tfZ3NvX2Rpc2FibGUoc3RydWN0IHNvY2sgKnNrKVxcbiBcXHRzay1cXHUwMDNlc2tfcm91dGVfY2FwcyBcXHUwMDI2PSB+TkVUSUZfRl9HU09fTUFTSztcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBib29sIHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYihjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuK3tcXG4rI2lmZGVmIENPTkZJR19TT0NLX1ZBTElEQVRFX1hNSVRcXG4rXFx0cmV0dXJuICEhc2stXFx1MDAzZXNrX3ZhbGlkYXRlX3htaXRfc2tiO1xcbisjZWxzZVxcbitcXHRyZXR1cm4gZmFsc2U7XFxuKyNlbmRpZlxcbit9XFxuK1xcbitib29sIHNrX2hhc19kZWNyeXB0X3VzZXIoY29uc3Qgc3RydWN0IHNvY2sgKnNrKTtcXG4rXFxuIHN0YXRpYyBpbmxpbmUgaW50IHNrYl9kb19jb3B5X2RhdGFfbm9jYWNoZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSwgY2hhciAqdG8sXFxuIFxcdFxcdFxcdFxcdFxcdCAgIGludCBjb3B5LCBpbnQgb2Zmc2V0KVxcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9zb2NrLmMgYi9uZXQvY29yZS9zb2NrLmNcXG5pbmRleCBmYTYwYjc0OTRjNTg2Li45NDg5ZDljNDc5NDkzIDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL3NvY2suY1xcbisrKyBiL25ldC9jb3JlL3NvY2suY1xcbkBAIC0xNDIsNiArMTQyLDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2N0cmFjZS9ldmVudHMvc29jay5oXFx1MDAzZVxcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9wc3AuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC90Y3AuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9idXN5X3BvbGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9waG9uZXQvcGhvbmV0LmhcXHUwMDNlXFxuQEAgLTI2NzAsNiArMjY3MSwxMiBAQCB2b2lkIHNrX3NldHVwX2NhcHMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoc2tfc2V0dXBfY2Fwcyk7XFxuIFxcbitib29sIHNrX2hhc19kZWNyeXB0X3VzZXIoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbit7XFxuK1xcdHJldHVybiBwc3Bfc2tfYXNzb2Moc2spIHx8XFxuK1xcdCAgICAgICAoc2tfaXNfaW5ldChzaykgXFx1MDAyNlxcdTAwMjYgaW5ldF9jc2tfaGFzX3VscChzaykpOyAvKiBmb3IgdGxzICovXFxuK31cXG4rXFxuIC8qXFxuICAqXFx0U2ltcGxlIHJlc291cmNlIG1hbmFnZXJzIGZvciBzb2NrZXRzLlxcbiAgKi9cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX3VscC5jIGIvbmV0L2lwdjQvdGNwX3VscC5jXFxuaW5kZXggMmFhNDQyMTI4NjMwZS4uZjNlMGM5ZDM3OWJiNiAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC90Y3BfdWxwLmNcXG4rKysgYi9uZXQvaXB2NC90Y3BfdWxwLmNcXG5AQCAtMTM2LDYgKzEzNiwxMCBAQCBzdGF0aWMgaW50IF9fdGNwX3NldF91bHAoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgdGNwX3VscF9vcHMgKnVscF9vcHMpXFxuIFxcdGlmIChpY3NrLVxcdTAwM2VpY3NrX3VscF9vcHMpXFxuIFxcdFxcdGdvdG8gb3V0X2VycjtcXG4gXFxuK1xcdGVyciA9IC1FSU5WQUw7XFxuK1xcdGlmIChza19oYXNfZGVjcnlwdF91c2VyKHNrKSB8fCBza19oYXNfdmFsaWRhdGVfeG1pdF9za2Ioc2spKVxcbitcXHRcXHRnb3RvIG91dF9lcnI7XFxuK1xcbiBcXHRpZiAoc2stXFx1MDAzZXNrX3NvY2tldClcXG4gXFx0XFx0Y2xlYXJfYml0KFNPQ0tfU1VQUE9SVF9aQywgXFx1MDAyNnNrLVxcdTAwM2Vza19zb2NrZXQtXFx1MDAzZWZsYWdzKTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9wc3AvcHNwX3NvY2suYyBiL25ldC9wc3AvcHNwX3NvY2suY1xcbmluZGV4IDFhMmE2Yjc1MTZiMGYuLjUwOTAzNTYxNzg5NGEgMTAwNjQ0XFxuLS0tIGEvbmV0L3BzcC9wc3Bfc29jay5jXFxuKysrIGIvbmV0L3BzcC9wc3Bfc29jay5jXFxuQEAgLTE0Myw2ICsxNDMsMTAgQEAgaW50IHBzcF9zb2NrX2Fzc29jX3NldF9yeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwc3BfYXNzb2MgKnBhcyxcXG4gXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiU29ja2V0IGFscmVhZHkgaGFzIFBTUCBzdGF0ZVxcXCIpO1xcbiBcXHRcXHRlcnIgPSAtRUJVU1k7XFxuIFxcdFxcdGdvdG8gZXhpdF91bmxvY2s7XFxuK1xcdH0gZWxzZSBpZiAoc2tfaGFzX2RlY3J5cHRfdXNlcihzaykgfHwgc2tfaGFzX3ZhbGlkYXRlX3htaXRfc2tiKHNrKSkge1xcbitcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJTb2NrZXQgaGFzIGluY29tcGF0aWJsZSBzdGF0ZVxcXCIpO1xcbitcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIGV4aXRfdW5sb2NrO1xcbiBcXHR9XFxuIFxcbiBcXHRyZWZjb3VudF9pbmMoXFx1MDAyNnBhcy1cXHUwMDNlcmVmY250KTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnXFxuaW5kZXggYjY5ODljN2QzZDlkMS4uNDgzOGFkZjI3ZmExYiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWdcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWdcXG5AQCAtMjEsNSArMjEsNiBAQCBDT05GSUdfTkVUX1NDSF9JTkdSRVNTPXlcXG4gQ09ORklHX05FVF9TQ0hfUFJJTz1tXFxuIENPTkZJR19QUFA9eVxcbiBDT05GSUdfUFBQT0U9eVxcbitDT05GSUdfVExTPXlcXG4gQ09ORklHX1ZMQU5fODAyMVE9bVxcbiBDT05GSUdfWERQX1NPQ0tFVFM9eVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHlcXG5pbmRleCAzMTU2NDhhNzcwZDAwLi4xMmIyN2YyYTNmYTFiIDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weVxcbkBAIC0yMyw2ICsyMyw4IEBAIGZyb20gbGliLnB5IGltcG9ydCBOZXROU0VudGVyXFxuIGZyb20gbGliLnB5IGltcG9ydCBia2csIHJhbmRfcG9ydCwgd2FpdF9wb3J0X2xpc3RlblxcbiBmcm9tIGxpYi5weSBpbXBvcnQgaXBcXG4gXFxuK1RDUF9VTFAgPSAzMVxcbitcXG4gXFxuIGRlZiBfZ2V0X291dHEocyk6XFxuICAgICBvbmUgPSBiJ1xcXFwwJyAqIDRcXG5AQCAtMzMzLDYgKzMzNSw1MCBAQCBkZWYgYXNzb2NfdmVyc2lvbl9taXNtYXRjaChjZmcpOlxcbiAgICAgICAgICAgICBrc2Z0X2VxKHRoZV9leGNlcHRpb24ubmxfbXNnLmVycm9yLCAtZXJybm8uRUlOVkFMKVxcbiBcXG4gXFxuK2RlZiBfcmVxdWlyZV90bHNfdWxwKCk6XFxuKyAgICB3aXRoIHNvY2tldC5jcmVhdGVfc2VydmVyKChcXFwibG9jYWxob3N0XFxcIiwgMCkpIGFzIHNydjpcXG4rICAgICAgICB3aXRoIHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbihzcnYuZ2V0c29ja25hbWUoKSkgYXMgczpcXG4rICAgICAgICAgICAgdHJ5OlxcbisgICAgICAgICAgICAgICAgcy5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfVENQLCBUQ1BfVUxQLCBiXFxcInRsc1xcXCIpXFxuKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzpcXG4rICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXFxcImtUTFMgbm90IGF2YWlsYWJsZVxcXCIpIGZyb20gZXhjXFxuK1xcbitcXG4rZGVmIGFzc29jX3BzcF91bHBfZXhjbHVzaXZlKGNmZyk6XFxuKyAgICBcXFwiXFxcIlxcXCIgVGVzdCB0aGF0IGEgVENQIFVMUCBjYW5ub3QgYmUgYXR0YWNoZWQgdG8gYSBQU1Agc29ja2V0IFxcXCJcXFwiXFxcIlxcbisgICAgX2luaXRfcHNwX2RldihjZmcpXFxuKyAgICBfcmVxdWlyZV90bHNfdWxwKClcXG4rXFxuKyAgICB3aXRoIF9tYWtlX2Nscl9jb25uKGNmZykgYXMgczpcXG4rICAgICAgICB0cnk6XFxuKyAgICAgICAgICAgIGNmZy5wc3BubC5yeF9hc3NvYyh7XFxcInZlcnNpb25cXFwiOiAwLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJkZXYtaWRcXFwiOiBjZmcucHNwX2Rldl9pZCxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwic29jay1mZFxcXCI6IHMuZmlsZW5vKCl9KVxcbisgICAgICAgICAgICB3aXRoIGtzZnRfcmFpc2VzKE9TRXJyb3IpIGFzIGNtOlxcbisgICAgICAgICAgICAgICAgcy5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfVENQLCBUQ1BfVUxQLCBiXFxcInRsc1xcXCIpXFxuKyAgICAgICAgICAgIGtzZnRfZXEoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FSU5WQUwpXFxuKyAgICAgICAgZmluYWxseTpcXG4rICAgICAgICAgICAgX2Nsb3NlX2Nvbm4oY2ZnLCBzKVxcbitcXG4rXFxuK2RlZiBhc3NvY191bHBfcHNwX2V4Y2x1c2l2ZShjZmcpOlxcbisgICAgXFxcIlxcXCJcXFwiIFRlc3QgdGhhdCBhIFBTUCBhc3NvYyBjYW5ub3QgYmUgYWRkZWQgdG8gYSBzb2NrZXQgd2l0aCBhIFRDUCBVTFAgXFxcIlxcXCJcXFwiXFxuKyAgICBfaW5pdF9wc3BfZGV2KGNmZylcXG4rICAgIF9yZXF1aXJlX3Rsc191bHAoKVxcbitcXG4rICAgIHdpdGggX21ha2VfY2xyX2Nvbm4oY2ZnKSBhcyBzOlxcbisgICAgICAgIHRyeTpcXG4rICAgICAgICAgICAgcy5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfVENQLCBUQ1BfVUxQLCBiXFxcInRsc1xcXCIpXFxuKyAgICAgICAgICAgIHdpdGgga3NmdF9yYWlzZXMoTmxFcnJvcikgYXMgY206XFxuKyAgICAgICAgICAgICAgICBjZmcucHNwbmwucnhfYXNzb2Moe1xcXCJ2ZXJzaW9uXFxcIjogMCxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcImRldi1pZFxcXCI6IGNmZy5wc3BfZGV2X2lkLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwic29jay1mZFxcXCI6IHMuZmlsZW5vKCl9KVxcbisgICAgICAgICAgICBrc2Z0X2VxKGNtLmV4Y2VwdGlvbi5ubF9tc2cuZXJyb3IsIC1lcnJuby5FSU5WQUwpXFxuKyAgICAgICAgICAgIGtzZnRfZXEoY20uZXhjZXB0aW9uLm5sX21zZy5leHRhY2tbJ2JhZC1hdHRyJ10sIFxcXCIuc29jay1mZFxcXCIpXFxuKyAgICAgICAgZmluYWxseTpcXG4rICAgICAgICAgICAgX2Nsb3NlX2Nvbm4oY2ZnLCBzKVxcbitcXG4rXFxuIGRlZiBhc3NvY190d2ljZShjZmcpOlxcbiAgICAgXFxcIlxcXCJcXFwiIFRlc3QgcmV1c2luZyBUeCBhc3NvYyBmb3IgdHdvIHNvY2tldHMgXFxcIlxcXCJcXFwiXFxuICAgICBfaW5pdF9wc3BfZGV2KGNmZylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6NDM6MDAuMjY2NTYyODc0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo5NDg3NzUwNjg5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUX1BTUFwiLFxuICAgIFwiVExTXCIsXG4gICAgXCJUTFNfREVWSUNFXCIsXG4gICAgXCJORVRERVZTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza19oYXNfZGVjcnlwdF91c2VyXCIsXG4gICAgXCJ0Y3Bfc2V0X3VscFwiLFxuICAgIFwiX190Y3Bfc2V0X3VscFwiLFxuICAgIFwicHNwX3NvY2tfYXNzb2Nfc2V0X3J4XCIsXG4gICAgXCJwc3BfbmxfcnhfYXNzb2NfZG9pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc29ja2V0IHN0YXRlIGV4Y2x1c2l2aXR5IGNoZWNrcyBiZXR3ZWVuIFBTUCAoUFNQIFNlY3VyaXR5IFByb3RvY29sKSBzb2NrZXQgYXNzb2NpYXRpb25zLCBUQ1AgVUxQIChlLmcuLCBrVExTKSwgYW5kIHNvY2tldHMgd2l0aCB0cmFuc21pdCB2YWxpZGF0aW9uIGhhbmRsZXJzIChza192YWxpZGF0ZV94bWl0X3NrYikuIEl0IGFkZHMgc2tfaGFzX2RlY3J5cHRfdXNlcigpIGFuZCBza19oYXNfdmFsaWRhdGVfeG1pdF9za2IoKSB2YWxpZGF0aW9ucyBpbiBfX3RjcF9zZXRfdWxwKCkgYW5kIHBzcF9zb2NrX2Fzc29jX3NldF9yeCgpIHRvIHByZXZlbnQgY29uZmxpY3Rpbmcgc29ja2V0IG9mZmxvYWQgc3RhdGVzLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIFRDUCBzZXRzb2Nrb3B0KFRDUF9VTFApIGFuZCBQU1AgTmV0bGluayBjb21tYW5kcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzYjRmMjJlMWQyZTJmYjgyM2Q4MmJiNjRhMWUxOTQzNDg0NzUxMmMwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDA6NDI6NTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zb2NrLmggYi9pbmNsdWRlL25ldC9zb2NrLmhcbmluZGV4IDUxMTg1MjIyYWFjMjkuLmJhNWU1MDkyZjE5MmMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9zb2NrLmhcbisrKyBiL2luY2x1ZGUvbmV0L3NvY2suaFxuQEAgLTIzMTIsNiArMjMxMiwxNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2tfZ3NvX2Rpc2FibGUoc3RydWN0IHNvY2sgKnNrKVxuIFx0c2stXHUwMDNlc2tfcm91dGVfY2FwcyBcdTAwMjY9IH5ORVRJRl9GX0dTT19NQVNLO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGJvb2wgc2tfaGFzX3ZhbGlkYXRlX3htaXRfc2tiKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbit7XG4rI2lmZGVmIENPTkZJR19TT0NLX1ZBTElEQVRFX1hNSVRcbitcdHJldHVybiAhIXNrLVx1MDAzZXNrX3ZhbGlkYXRlX3htaXRfc2tiO1xuKyNlbHNlXG4rXHRyZXR1cm4gZmFsc2U7XG4rI2VuZGlmXG4rfVxuK1xuK2Jvb2wgc2tfaGFzX2RlY3J5cHRfdXNlcihjb25zdCBzdHJ1Y3Qgc29jayAqc2spO1xuK1xuIHN0YXRpYyBpbmxpbmUgaW50IHNrYl9kb19jb3B5X2RhdGFfbm9jYWNoZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSwgY2hhciAqdG8sXG4gXHRcdFx0XHRcdCAgIGludCBjb3B5LCBpbnQgb2Zmc2V0KVxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2suYyBiL25ldC9jb3JlL3NvY2suY1xuaW5kZXggZmE2MGI3NDk0YzU4Ni4uOTQ4OWQ5YzQ3OTQ5MyAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NvY2suY1xuKysrIGIvbmV0L2NvcmUvc29jay5jXG5AQCAtMTQyLDYgKzE0Miw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjdHJhY2UvZXZlbnRzL3NvY2suaFx1MDAzZVxuIFxuKyNpbmNsdWRlIFx1MDAzY25ldC9wc3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9idXN5X3BvbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9waG9uZXQvcGhvbmV0LmhcdTAwM2VcbkBAIC0yNjcwLDYgKzI2NzEsMTIgQEAgdm9pZCBza19zZXR1cF9jYXBzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChza19zZXR1cF9jYXBzKTtcbiBcbitib29sIHNrX2hhc19kZWNyeXB0X3VzZXIoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuK3tcbitcdHJldHVybiBwc3Bfc2tfYXNzb2Moc2spIHx8XG4rXHQgICAgICAgKHNrX2lzX2luZXQoc2spIFx1MDAyNlx1MDAyNiBpbmV0X2Nza19oYXNfdWxwKHNrKSk7IC8qIGZvciB0bHMgKi9cbit9XG4rXG4gLypcbiAgKlx0U2ltcGxlIHJlc291cmNlIG1hbmFnZXJzIGZvciBzb2NrZXRzLlxuICAqL1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF91bHAuYyBiL25ldC9pcHY0L3RjcF91bHAuY1xuaW5kZXggMmFhNDQyMTI4NjMwZS4uZjNlMGM5ZDM3OWJiNiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF91bHAuY1xuKysrIGIvbmV0L2lwdjQvdGNwX3VscC5jXG5AQCAtMTM2LDYgKzEzNiwxMCBAQCBzdGF0aWMgaW50IF9fdGNwX3NldF91bHAoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgdGNwX3VscF9vcHMgKnVscF9vcHMpXG4gXHRpZiAoaWNzay1cdTAwM2VpY3NrX3VscF9vcHMpXG4gXHRcdGdvdG8gb3V0X2VycjtcbiBcbitcdGVyciA9IC1FSU5WQUw7XG4rXHRpZiAoc2tfaGFzX2RlY3J5cHRfdXNlcihzaykgfHwgc2tfaGFzX3ZhbGlkYXRlX3htaXRfc2tiKHNrKSlcbitcdFx0Z290byBvdXRfZXJyO1xuK1xuIFx0aWYgKHNrLVx1MDAzZXNrX3NvY2tldClcbiBcdFx0Y2xlYXJfYml0KFNPQ0tfU1VQUE9SVF9aQywgXHUwMDI2c2stXHUwMDNlc2tfc29ja2V0LVx1MDAzZWZsYWdzKTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvcHNwL3BzcF9zb2NrLmMgYi9uZXQvcHNwL3BzcF9zb2NrLmNcbmluZGV4IDFhMmE2Yjc1MTZiMGYuLjUwOTAzNTYxNzg5NGEgMTAwNjQ0XG4tLS0gYS9uZXQvcHNwL3BzcF9zb2NrLmNcbisrKyBiL25ldC9wc3AvcHNwX3NvY2suY1xuQEAgLTE0Myw2ICsxNDMsMTAgQEAgaW50IHBzcF9zb2NrX2Fzc29jX3NldF9yeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwc3BfYXNzb2MgKnBhcyxcbiBcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcIlNvY2tldCBhbHJlYWR5IGhhcyBQU1Agc3RhdGVcIik7XG4gXHRcdGVyciA9IC1FQlVTWTtcbiBcdFx0Z290byBleGl0X3VubG9jaztcbitcdH0gZWxzZSBpZiAoc2tfaGFzX2RlY3J5cHRfdXNlcihzaykgfHwgc2tfaGFzX3ZhbGlkYXRlX3htaXRfc2tiKHNrKSkge1xuK1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwiU29ja2V0IGhhcyBpbmNvbXBhdGlibGUgc3RhdGVcIik7XG4rXHRcdGVyciA9IC1FSU5WQUw7XG4rXHRcdGdvdG8gZXhpdF91bmxvY2s7XG4gXHR9XG4gXG4gXHRyZWZjb3VudF9pbmMoXHUwMDI2cGFzLVx1MDAzZXJlZmNudCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnXG5pbmRleCBiNjk4OWM3ZDNkOWQxLi40ODM4YWRmMjdmYTFiIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWdcbkBAIC0yMSw1ICsyMSw2IEBAIENPTkZJR19ORVRfU0NIX0lOR1JFU1M9eVxuIENPTkZJR19ORVRfU0NIX1BSSU89bVxuIENPTkZJR19QUFA9eVxuIENPTkZJR19QUFBPRT15XG4rQ09ORklHX1RMUz15XG4gQ09ORklHX1ZMQU5fODAyMVE9bVxuIENPTkZJR19YRFBfU09DS0VUUz15XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5XG5pbmRleCAzMTU2NDhhNzcwZDAwLi4xMmIyN2YyYTNmYTFiIDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHlcbkBAIC0yMyw2ICsyMyw4IEBAIGZyb20gbGliLnB5IGltcG9ydCBOZXROU0VudGVyXG4gZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgcmFuZF9wb3J0LCB3YWl0X3BvcnRfbGlzdGVuXG4gZnJvbSBsaWIucHkgaW1wb3J0IGlwXG4gXG4rVENQX1VMUCA9IDMxXG4rXG4gXG4gZGVmIF9nZXRfb3V0cShzKTpcbiAgICAgb25lID0gYidcXDAnICogNFxuQEAgLTMzMyw2ICszMzUsNTAgQEAgZGVmIGFzc29jX3ZlcnNpb25fbWlzbWF0Y2goY2ZnKTpcbiAgICAgICAgICAgICBrc2Z0X2VxKHRoZV9leGNlcHRpb24ubmxfbXNnLmVycm9yLCAtZXJybm8uRUlOVkFMKVxuIFxuIFxuK2RlZiBfcmVxdWlyZV90bHNfdWxwKCk6XG4rICAgIHdpdGggc29ja2V0LmNyZWF0ZV9zZXJ2ZXIoKFwibG9jYWxob3N0XCIsIDApKSBhcyBzcnY6XG4rICAgICAgICB3aXRoIHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbihzcnYuZ2V0c29ja25hbWUoKSkgYXMgczpcbisgICAgICAgICAgICB0cnk6XG4rICAgICAgICAgICAgICAgIHMuc2V0c29ja29wdChzb2NrZXQuU09MX1RDUCwgVENQX1VMUCwgYlwidGxzXCIpXG4rICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOlxuKyAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFwia1RMUyBub3QgYXZhaWxhYmxlXCIpIGZyb20gZXhjXG4rXG4rXG4rZGVmIGFzc29jX3BzcF91bHBfZXhjbHVzaXZlKGNmZyk6XG4rICAgIFwiXCJcIiBUZXN0IHRoYXQgYSBUQ1AgVUxQIGNhbm5vdCBiZSBhdHRhY2hlZCB0byBhIFBTUCBzb2NrZXQgXCJcIlwiXG4rICAgIF9pbml0X3BzcF9kZXYoY2ZnKVxuKyAgICBfcmVxdWlyZV90bHNfdWxwKClcbitcbisgICAgd2l0aCBfbWFrZV9jbHJfY29ubihjZmcpIGFzIHM6XG4rICAgICAgICB0cnk6XG4rICAgICAgICAgICAgY2ZnLnBzcG5sLnJ4X2Fzc29jKHtcInZlcnNpb25cIjogMCxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGV2LWlkXCI6IGNmZy5wc3BfZGV2X2lkLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzb2NrLWZkXCI6IHMuZmlsZW5vKCl9KVxuKyAgICAgICAgICAgIHdpdGgga3NmdF9yYWlzZXMoT1NFcnJvcikgYXMgY206XG4rICAgICAgICAgICAgICAgIHMuc2V0c29ja29wdChzb2NrZXQuU09MX1RDUCwgVENQX1VMUCwgYlwidGxzXCIpXG4rICAgICAgICAgICAga3NmdF9lcShjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVJTlZBTClcbisgICAgICAgIGZpbmFsbHk6XG4rICAgICAgICAgICAgX2Nsb3NlX2Nvbm4oY2ZnLCBzKVxuK1xuK1xuK2RlZiBhc3NvY191bHBfcHNwX2V4Y2x1c2l2ZShjZmcpOlxuKyAgICBcIlwiXCIgVGVzdCB0aGF0IGEgUFNQIGFzc29jIGNhbm5vdCBiZSBhZGRlZCB0byBhIHNvY2tldCB3aXRoIGEgVENQIFVMUCBcIlwiXCJcbisgICAgX2luaXRfcHNwX2RldihjZmcpXG4rICAgIF9yZXF1aXJlX3Rsc191bHAoKVxuK1xuKyAgICB3aXRoIF9tYWtlX2Nscl9jb25uKGNmZykgYXMgczpcbisgICAgICAgIHRyeTpcbisgICAgICAgICAgICBzLnNldHNvY2tvcHQoc29ja2V0LlNPTF9UQ1AsIFRDUF9VTFAsIGJcInRsc1wiKVxuKyAgICAgICAgICAgIHdpdGgga3NmdF9yYWlzZXMoTmxFcnJvcikgYXMgY206XG4rICAgICAgICAgICAgICAgIGNmZy5wc3BubC5yeF9hc3NvYyh7XCJ2ZXJzaW9uXCI6IDAsXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkZXYtaWRcIjogY2ZnLnBzcF9kZXZfaWQsXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzb2NrLWZkXCI6IHMuZmlsZW5vKCl9KVxuKyAgICAgICAgICAgIGtzZnRfZXEoY20uZXhjZXB0aW9uLm5sX21zZy5lcnJvciwgLWVycm5vLkVJTlZBTClcbisgICAgICAgICAgICBrc2Z0X2VxKGNtLmV4Y2VwdGlvbi5ubF9tc2cuZXh0YWNrWydiYWQtYXR0ciddLCBcIi5zb2NrLWZkXCIpXG4rICAgICAgICBmaW5hbGx5OlxuKyAgICAgICAgICAgIF9jbG9zZV9jb25uKGNmZywgcylcbitcbitcbiBkZWYgYXNzb2NfdHdpY2UoY2ZnKTpcbiAgICAgXCJcIlwiIFRlc3QgcmV1c2luZyBUeCBhc3NvYyBmb3IgdHdvIHNvY2tldHMgXCJcIlwiXG4gICAgIF9pbml0X3BzcF9kZXYoY2ZnKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6NDM6MDAuMjY2NTY1MTQ0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTI2MzA2NjE1NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQXNzZXNzaW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiBUaGlzIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBnaXZlbiBhIHBhdGNoIHNlcmllcyBhbmQgYXNrZWQgdG8gZGV0ZXJtaW5lIGlmIGl0J3MgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZyB3aXRoIHN5emthbGxlci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCdzIGRpdmUgaW4uIFRoZSBmaXJzdCBzdGVwIGlzIHRvIHF1aWNrbHkgYW5hbHl6ZSB0aGUgY2hhbmdlcy4gTG9va3MgbGlrZSB3ZSd2ZSBnb3QgbW9kaWZpY2F0aW9ucyB0byBgaW5jbHVkZS9uZXQvc29jay5oYCwgYG5ldC9jb3JlL3NvY2suY2AsIGBuZXQvaXB2NC90Y3BfdWxwLmNgLCBgbmV0L3BzcC9wc3Bfc29jay5jYCwgYW5kIHNvbWUgc2VsZnRlc3RzLiBUaGUgYWRkaXRpb24gb2YgYHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYmAgYW5kIGBza19oYXNfZGVjcnlwdF91c2VyYCBpbiBgc29jay5oYCBhbmQgdGhlaXIgc3Vic2VxdWVudCBkZWZpbml0aW9uIGFuZCB1c2UsIGFsb25nIHdpdGggdGhlIGNoZWNrcyBpbiBgX190Y3Bfc2V0X3VscGAgYW5kIGBwc3Bfc29ja19hc3NvY19zZXRfcnhgLCBhcmUgdGhlIGJyZWFkY3J1bWJzLiBJdCBzZWVtcyB3ZSdyZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHJlbGF0ZWQgdG8gc29ja2V0IGhhbmRsaW5nLCBwb3RlbnRpYWxseSBlbmNyeXB0aW9uIG9yIHNvbWUga2luZCBvZiBwYWNrZXQgcHJvY2Vzc2luZyB3aXRoIFBTUCwgYW5kIGl0IG1ha2VzIG1lIHRoaW5rIGFib3V0IHBvdGVudGlhbCBmb3IgaW50ZXJlc3RpbmcgYmVoYXZpb3JzLCBhbmQgcG9zc2libGUgdnVsbmVyYWJpbGl0aWVzLlxuXG5UbyBwcm9wZXJseSBnYXVnZSB0aGUgZnV6emluZyBwb3RlbnRpYWwsIEkgbmVlZCBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgUFNQIHBhcnQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgUFNQIGFjdHVhbGx5ICppcyouIFdoYXQgY29uZmlndXJhdGlvbiBmbGFncyBhcmUgaW52b2x2ZWQ/IFdoYXQgb3RoZXIgY29kZSBjYWxscyB0aGVzZSBmdW5jdGlvbnMgb3IgdXNlcyB0aGVzZSBzdHJ1Y3R1cmVzPyBXZSdsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSBmb2N1cyBzeW1ib2xzIGFuZCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGZvciBhIGZ1bGwgZXZhbHVhdGlvbi4gVGltZSB0byBkdXN0IG9mZiB0aGUgYGdpdCBncmVwYCBza2lsbHMgYW5kIHN0YXJ0IGh1bnRpbmcgZG93biByZWxldmFudCBjb2RlIHdpdGhpbiB0aGUga2VybmVsLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHJlZmVyZW5jZXMgdG8gUFNQLCBhbnkgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCBhbnl0aGluZyB0aGF0IG1pZ2h0IGdpdmUgaW5zaWdodCBpbnRvIGhvdyB0aGVzZSBuZXcgZnVuY3Rpb25zIGFyZSB1c2VkLiBXZSBuZWVkIHRvIGlkZW50aWZ5IGFsbCByZWxldmFudCBlbnRyeSBwb2ludHMgZm9yIGZ1enppbmcuIFRoaXMgc2hvdWxkIGdldCB1cyBhIGdvb2QgcGljdHVyZSBvZiB0aGUgYXR0YWNrIHN1cmZhY2UgaGVyZSBhbmQgaWYgdGhpcyBkZXNlcnZlcyBtb3JlIGF0dGVudGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc0MywiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjQzOjEyLjg5NzIzMTAxNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzgwMDMyNjA5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfUFNQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMDo0MzoxNS4yNzcyNzE3MTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDE1NzUwNTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBgbmV0L3BzcC9gIERpcmVjdG9yeSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIG5ldHdvcmsgZnVuY3Rpb25hbGl0eSBpcyBjb25maWd1cmVkIGFuZCBidWlsdC4gTXkgZmlyc3QgbW92ZSBpcyB0byBoZWFkIHN0cmFpZ2h0IGludG8gdGhlIGBuZXQvcHNwL2AgZGlyZWN0b3J5LiBUaGlzIHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBmb3IgdGhlIGNvcmUgb2YgdGhlIGltcGxlbWVudGF0aW9uLiBJJ20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIGl0cyBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFueSBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZSwgYW5kIGhvdyBpdCBnZXRzIGludGVncmF0ZWQgaW50byB0aGUgb3ZlcmFsbCBidWlsZCBwcm9jZXNzLiBUbyBkbyB0aGF0LCBJJ20gZ29pbmcgdG8gemVybyBpbiBvbiBlaXRoZXIgYSBLY29uZmlnIGZpbGUsIG9yIHBvdGVudGlhbGx5IGEgTWFrZWZpbGUsIHdpdGhpbiB0aGlzIGRpcmVjdG9yeS4gVGhvc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cy4gRGVwZW5kaW5nIG9uIHdoYXQgSSBmaW5kLCBJJ2xsIHRoZW4gbW92ZSBvbnRvIGFuYWx5c2luZyBvdGhlciBmaWxlcyBhbmQgZGlyZWN0b3JpZXMsIGJ1dCB0aGVzZSBhcmUgbXkgc3RhcnRpbmcgcG9pbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzQ4LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6NDM6MTcuMjkzMDI1NDYxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJEaXJcIjogXCJuZXQvcHNwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkZpbGVzXCI6IFtcbiAgICBcInBzcC1ubC1nZW4uY1wiLFxuICAgIFwicHNwLW5sLWdlbi5oXCIsXG4gICAgXCJwc3AuaFwiLFxuICAgIFwicHNwX21haW4uY1wiLFxuICAgIFwicHNwX25sLmNcIixcbiAgICBcInBzcF9zb2NrLmNcIlxuICBdLFxuICBcIlN1YmRpcnNcIjogbnVsbFxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6NDM6MTcuMjkzMTM1NTdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MTI1Nzc5NjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBCdWlsZCBQcm9jZXNzIGZvciBgbmV0L3BzcGAqKlxuXG5BbHJpZ2h0LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlIGBuZXQvcHNwYCBkaXJlY3RvcnksIGFuZCBwcmVzdW1hYmx5IGl0cyBjb2RlLCBnZXRzIGJ1aWx0IGludG8gdGhlIGtlcm5lbC4gVGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIHdvdWxkIGJlIHdpdGhpbiB0aGUgbmV0d29yayBzdWJzeXN0ZW0ncyBjb25maWd1cmF0aW9uIGFuZCBidWlsZCBmaWxlcy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgYG5ldC9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUncyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgZW5hYmxlcyBgbmV0L3BzcGAuIFRoZW4sIEknbGwgbmVlZCB0byBsb29rIGF0IGBuZXQvTWFrZWZpbGVgIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIHJ1bGVzIGFuZCBkZXBlbmRlbmNpZXMuIEtub3dpbmcgd2hpY2ggS2NvbmZpZyBvcHRpb24gZW5hYmxlcyBpdCB3aWxsIGhlbHAgbWUgZmluZCB0aGUgYXNzb2NpYXRlZCBgb2JqLWAgbGluZXMgaW4gdGhlIE1ha2VmaWxlIGFuZCBzZWUgaG93IHRoZSBzb3VyY2UgZmlsZXMgd2l0aGluIGBuZXQvcHNwYCBhcmUgY29tcGlsZWQsIGxpbmtlZCwgYW5kIGluY29ycG9yYXRlZCBpbnRvIHRoZSBrZXJuZWwgaW1hZ2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBiaWcgcGljdHVyZTsgaXMgdGhpcyBhIG1vZHVsZSwgYnVpbHQtaW4sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBVbHRpbWF0ZWx5LCB1bmRlcnN0YW5kaW5nIHRoZSBidWlsZCBwcm9jZXNzIGlzIGtleSB0byBtb2RpZnlpbmcsIGRlYnVnZ2luZywgb3IgZW5hYmxpbmcgdGhpcyBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjEyLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjQzOjI0LjQxODkxNzA1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTYzMjcwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwc3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9NYWtlZmlsZT0yMD1vYmotJChDT05GSUdfVU5JWClcXHRcXHQrPSB1bml4L1xcbm5ldC9NYWtlZmlsZToyMTpvYmotJChDT05GSUdfSU5FVF9QU1ApXFx0XFx0Kz0gcHNwL1xcbm5ldC9NYWtlZmlsZS0yMi1vYmoteVxcdFxcdFxcdFxcdCs9IGlwdjYvXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjQzOjI0LjUyODU1NDExM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NTIxNzc4MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gZm9yIFBTUCBTdXBwb3J0KipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgUFNQIGlzIGVuYWJsZWQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgYENPTkZJR19JTkVUX1BTUGAuIEkga25vdyB0aGUgbmV0d29ya2luZyBjb25maWd1cmF0aW9uIGlzIHNwcmVhZCBhY3Jvc3MgYSBmZXcgZGlmZmVyZW50IGBLY29uZmlnYCBmaWxlcyDigJMgaXQncyBsaWtlbHkgaW4gYG5ldC9LY29uZmlnYCwgYG5ldC9pcHY0L0tjb25maWdgLCBvciBzb21ldGhpbmcgc2ltaWxhci4gSSdsbCBuZWVkIHRvIGxvb2sgdGhyb3VnaCB0aG9zZSB0byBwaW5wb2ludCB3aGVyZSBgQ09ORklHX0lORVRfUFNQYCBpcyBkZWZpbmVkIGFuZCB3aGF0IGl0cyBkZXBlbmRlbmNpZXMgbWlnaHQgYmUuIFRpbWUgdG8gZ2V0IG15IGdyZXAgb24gYW5kIG5hdmlnYXRlIHRob3NlIGNvbmZpZyBzdHJ1Y3R1cmVzISBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk1MSwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjQzOjI2LjQ4MDczNDk1OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQzNzUyMDk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJJTkVUX1BTUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZz0yMTA9Y29uZmlnIE1MWDVfRU5fUFNQXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWctMjExLVxcdGJvb2wgXFxcIk1lbGxhbm94IFRlY2hub2xvZ2llcyBzdXBwb3J0IGZvciBQU1AgY3J5cHRvZ3JhcGh5LW9mZmxvYWQgYWNjZWxlcmF0aW9uXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnOjIxMjpcXHRkZXBlbmRzIG9uIElORVRfUFNQXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWctMjEzLVxcdGRlcGVuZHMgb24gTUxYNV9DT1JFX0VOXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vTWFrZWZpbGU9MTk9ZW5kaWZcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vTWFrZWZpbGUtMjAtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL01ha2VmaWxlOjIxOmlmbmVxICgkKENPTkZJR19JTkVUX1BTUCksKVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZS0yMi1uZXRkZXZzaW0tb2JqcyArPSBwc3Aub1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oPTQ0NT1zdGF0aWMgaW5saW5lIHZvaWQgbnNpbV9tYWNzZWNfdGVhcmRvd24oc3RydWN0IG5ldGRldnNpbSAqbnMpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtNDQ5LVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDo0NTA6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00NTEtaW50IG5zaW1fcHNwX2luaXQoc3RydWN0IG5ldGRldnNpbSAqbnMpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0yMTU4PXN0cnVjdCBuZXRfZGV2aWNlIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjM4OC0jZW5kaWZcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjIzODk6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjM5MC1cXHRzdHJ1Y3QgcHNwX2RldiBfX3JjdVxcdCpwc3BfZGV2O1xcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD01MDQzPWVudW0gc2tiX2V4dF9pZCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUwNTgtI2VuZGlmXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MDU5OiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUX1BTUClcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUwNjAtXFx0U0tCX0VYVF9QU1AsXFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaD0zMz1zdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrIHtcXG4tLVxcbmluY2x1ZGUvbmV0L2luZXRfdGltZXdhaXRfc29jay5oLTg0LVxcdHN0cnVjdCBpbmV0X2JpbmQyX2J1Y2tldFxcdCp0d190YjI7XFxuaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmg6ODU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKVxcbmluY2x1ZGUvbmV0L2luZXRfdGltZXdhaXRfc29jay5oLTg2LVxcdHN0cnVjdCBwc3BfYXNzb2MgX19yY3VcXHQgICpwc3BfYXNzb2M7XFxuLS1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9Mjc9c3RhdGljIGlubGluZSB2b2lkICpwc3BfYXNzb2NfZHJ2X2RhdGEoc3RydWN0IHBzcF9hc3NvYyAqcGFzKVxcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTMxLVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDozMjojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTMzLXVuc2lnbmVkIGludCBwc3Bfa2V5X3NpemUodTMyIHZlcnNpb24pO1xcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oPTM2NT1zdHJ1Y3Qgc29jayB7XFxuLS1cXG5pbmNsdWRlL25ldC9zb2NrLmgtNDY2LSNlbmRpZlxcbmluY2x1ZGUvbmV0L3NvY2suaDo0Njc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKVxcbmluY2x1ZGUvbmV0L3NvY2suaC00NjgtXFx0c3RydWN0IHBzcF9hc3NvYyBfX3JjdVxcdCpwc3BfYXNzb2M7XFxuLS1cXG5uZXQvTWFrZWZpbGU9MjA9b2JqLSQoQ09ORklHX1VOSVgpXFx0XFx0Kz0gdW5peC9cXG5uZXQvTWFrZWZpbGU6MjE6b2JqLSQoQ09ORklHX0lORVRfUFNQKVxcdFxcdCs9IHBzcC9cXG5uZXQvTWFrZWZpbGUtMjItb2JqLXlcXHRcXHRcXHRcXHQrPSBpcHY2L1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NTE1MD1zdGF0aWMgY29uc3QgdTggc2tiX2V4dF90eXBlX2xlbltdID0ge1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNTE2NS0jZW5kaWZcXG5uZXQvY29yZS9za2J1ZmYuYzo1MTY2OiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUX1BTUClcXG5uZXQvY29yZS9za2J1ZmYuYy01MTY3LVxcdFtTS0JfRVhUX1BTUF0gPSBTS0JfRVhUX0NIVU5LU0laRU9GKHN0cnVjdCBwc3Bfc2tiX2V4dCksXFxuLS1cXG5uZXQvY29yZS9zb2NrLmM9MjQ4MD1zdHJ1Y3Qgc29jayAqc2tfY2xvbmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBnZnBfdCBwcmlvcml0eSxcXG4tLVxcbm5ldC9jb3JlL3NvY2suYy0yNDk3LSNlbmRpZlxcbm5ldC9jb3JlL3NvY2suYzoyNDk4OiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUX1BTUClcXG5uZXQvY29yZS9zb2NrLmMtMjQ5OS1cXHRSQ1VfSU5JVF9QT0lOVEVSKG5ld3NrLVxcdTAwM2Vwc3BfYXNzb2MsIE5VTEwpO1xcbi0tXFxubmV0L3BzcC9LY29uZmlnLTQtI1xcbm5ldC9wc3AvS2NvbmZpZzo1OmNvbmZpZyBJTkVUX1BTUFxcbm5ldC9wc3AvS2NvbmZpZy02LVxcdGJvb2wgXFxcIlBTUCBTZWN1cml0eSBQcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L3BzcC9NYWtlZmlsZS0yLVxcbm5ldC9wc3AvTWFrZWZpbGU6MzpvYmotJChDT05GSUdfSU5FVF9QU1ApICs9IHBzcC5vXFxubmV0L3BzcC9NYWtlZmlsZS00LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnPTM9Q09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVM9blxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZzo0OkNPTkZJR19JTkVUX1BTUD15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnLTUtQ09ORklHX0lQVjY9eVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMDo0MzoyOC45MTgyNjQ4NDlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg4NDAzOTQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBQU1AgS2NvbmZpZyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHN0YXJ0ZWQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gYG5ldC9wc3AvS2NvbmZpZ2AuIEl0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4sIGdpdmVuIHdoYXQgd2UncmUgd29ya2luZyBvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBQU1AgbmV0d29yayBzdGFjayBmaXJzdC4gS25vd2luZyB0aGUgYXZhaWxhYmxlIHBhcmFtZXRlcnMgYW5kIHRoZWlyIGRlcGVuZGVuY2llcyB3aWxsIGJlIGNydWNpYWwgZm9yIHRoZSB3b3JrIGFoZWFkLiBUaGlzIEtjb25maWcgZmlsZSBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIGRlc2lnbiBjaG9pY2VzIGFuZCBwb3RlbnRpYWxseSByZXZlYWwgYW55IGV4aXN0aW5nIGxpbWl0YXRpb25zIG9yIGZlYXR1cmVzIHRoYXQgbWlnaHQgaW5mbHVlbmNlIG15IGFwcHJvYWNoLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gbGVhcm4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0NjIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMDo0MzozMS44MDIzMDgzNTlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3BzcC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFBTUCBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRjb25maWcgSU5FVF9QU1BcXG4gICA2OlxcdFxcdGJvb2wgXFxcIlBTUCBTZWN1cml0eSBQcm90b2NvbCBzdXBwb3J0XFxcIlxcbiAgIDc6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgODpcXHRcXHRzZWxlY3QgU0tCX0RFQ1JZUFRFRFxcbiAgIDk6XFx0XFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXFxuICAxMDpcXHRcXHRzZWxlY3QgU09DS19WQUxJREFURV9YTUlUXFxuICAxMTpcXHRcXHRoZWxwXFxuICAxMjpcXHRcXHRFbmFibGUga2VybmVsIHN1cHBvcnQgZm9yIHRoZSBQU1AgU2VjdXJpdHkgUHJvdG9jb2wgKFBTUCkuXFxuICAxMzpcXHRcXHRGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWU6XFxuICAxNDpcXHRcXHQgIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9nb29nbGUvcHNwL21haW4vZG9jL1BTUF9BcmNoX1NwZWMucGRmXFxuICAxNTpcXHRcXG4gIDE2OlxcdFxcdElmIHVuc3VyZSwgc2F5IE4uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjQzOjMxLjgwMjM5NDIzOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzY3MzA4NzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIGl0OlxuXG4qKkNoZWNraW5nIFNvY2tldCBUcmFuc21pc3Npb24gVmFsaWRhdGlvbioqXG5cbk9rYXksIHNvIHdlJ3JlIGRpdmluZyBpbnRvIHRoaXMgbmV0d29yayBjb2RlLCBhbmQgYmVmb3JlIHdlIHByb2NlZWQgdG9vIGZhciwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSd2ZSBsb29rZWQgYXQgdGhlIGltcGxpY2F0aW9ucyBvZiBgQ09ORklHX1NPQ0tfVkFMSURBVEVfWE1JVGAuIEl0J3MgY3J1Y2lhbCB3ZSBkb24ndCBvdmVybG9vayB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb247IGl0cyBpbXBhY3Qgb24gdGhlIGRhdGEgdHJhbnNtaXNzaW9uIGZsb3cgY291bGQgYmUgc2lnbmlmaWNhbnQuIEl0J3Mgb2Z0ZW4gZWFzeSB0byBtaXNzIGRldGFpbHMsIHNvIGEgcXVpY2sgY2hlY2sgbm93IGNvdWxkIHNhdmUgYSBiaWcgaGVhZGFjaGUgbGF0ZXIgb24uIExldCdzIHRyYWNlIGhvdyB0aGF0J3MgaGFuZGxlZC4gR29vZCBwcmFjdGljZSBpcyB0byBhbHdheXMgYWNjb3VudCBmb3IgdGhpcyBraW5kIG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGVhcmx5IGluIHRoZSBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODQ4LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMDo0MzozNC4xNjk3MDU1OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE0OTAyMzAzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJTT0NLX1ZBTElEQVRFX1hNSVRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmg9MzM9c3RydWN0IGluZXRfdGltZXdhaXRfc29jayB7XFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaC04Ny0jZW5kaWZcXG5pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaDo4ODojaWZkZWYgQ09ORklHX1NPQ0tfVkFMSURBVEVfWE1JVFxcbmluY2x1ZGUvbmV0L2luZXRfdGltZXdhaXRfc29jay5oLTg5LVxcdHN0cnVjdCBza19idWZmKlxcdFxcdCgqdHdfdmFsaWRhdGVfeG1pdF9za2IpKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbmluY2x1ZGUvbmV0L3NvY2suaD0zNjU9c3RydWN0IHNvY2sge1xcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oLTUxNS1cXHRuZXRkZXZfZmVhdHVyZXNfdFxcdHNrX3JvdXRlX2NhcHM7XFxuaW5jbHVkZS9uZXQvc29jay5oOjUxNjojaWZkZWYgQ09ORklHX1NPQ0tfVkFMSURBVEVfWE1JVFxcbmluY2x1ZGUvbmV0L3NvY2suaC01MTctXFx0c3RydWN0IHNrX2J1ZmYqXFx0XFx0KCpza192YWxpZGF0ZV94bWl0X3NrYikoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oPTIzMTU9c3RhdGljIGlubGluZSBib29sIHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYihjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuaW5jbHVkZS9uZXQvc29jay5oLTIzMTYte1xcbmluY2x1ZGUvbmV0L3NvY2suaDoyMzE3OiNpZmRlZiBDT05GSUdfU09DS19WQUxJREFURV9YTUlUXFxuaW5jbHVkZS9uZXQvc29jay5oLTIzMTgtXFx0cmV0dXJuICEhc2stXFx1MDAzZXNrX3ZhbGlkYXRlX3htaXRfc2tiO1xcbi0tXFxubmV0L0tjb25maWc9NDY1PWNvbmZpZyBHUk9fQ0VMTFNcXG4tLVxcbm5ldC9LY29uZmlnLTQ2OC1cXG5uZXQvS2NvbmZpZzo0Njk6Y29uZmlnIFNPQ0tfVkFMSURBVEVfWE1JVFxcbm5ldC9LY29uZmlnLTQ3MC1cXHRib29sXFxuLS1cXG5uZXQvY29yZS9kZXYuYz00MDExPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqc2tfdmFsaWRhdGVfeG1pdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTQwMTMte1xcbm5ldC9jb3JlL2Rldi5jOjQwMTQ6I2lmZGVmIENPTkZJR19TT0NLX1ZBTElEQVRFX1hNSVRcXG5uZXQvY29yZS9kZXYuYy00MDE1LVxcdHN0cnVjdCBza19idWZmICooKnNrX3ZhbGlkYXRlKShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC9pbmV0X3RpbWV3YWl0X3NvY2suYz0xNjg9c3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqaW5ldF90d3NrX2FsbG9jKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L2luZXRfdGltZXdhaXRfc29jay5jLTIwNC1cXHRcXHR0aW1lcl9zZXR1cChcXHUwMDI2dHctXFx1MDAzZXR3X3RpbWVyLCB0d190aW1lcl9oYW5kbGVyLCAwKTtcXG5uZXQvaXB2NC9pbmV0X3RpbWV3YWl0X3NvY2suYzoyMDU6I2lmZGVmIENPTkZJR19TT0NLX1ZBTElEQVRFX1hNSVRcXG5uZXQvaXB2NC9pbmV0X3RpbWV3YWl0X3NvY2suYy0yMDYtXFx0XFx0dHctXFx1MDAzZXR3X3ZhbGlkYXRlX3htaXRfc2tiID0gTlVMTDtcXG4tLVxcbm5ldC9wc3AvS2NvbmZpZz01PWNvbmZpZyBJTkVUX1BTUFxcbi0tXFxubmV0L3BzcC9LY29uZmlnLTktXFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXFxubmV0L3BzcC9LY29uZmlnOjEwOlxcdHNlbGVjdCBTT0NLX1ZBTElEQVRFX1hNSVRcXG5uZXQvcHNwL0tjb25maWctMTEtXFx0aGVscFxcbi0tXFxubmV0L3Rscy9LY29uZmlnPTE5PWNvbmZpZyBUTFNfREVWSUNFXFxuLS1cXG5uZXQvdGxzL0tjb25maWctMjItXFx0c2VsZWN0IFNLQl9ERUNSWVBURURcXG5uZXQvdGxzL0tjb25maWc6MjM6XFx0c2VsZWN0IFNPQ0tfVkFMSURBVEVfWE1JVFxcbm5ldC90bHMvS2NvbmZpZy0yNC1cXHRzZWxlY3QgU09DS19SWF9RVUVVRV9NQVBQSU5HXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjQzOjM2LjMxODczNDY0NVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjM5MzQ1MTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQYXRjaCBDaGFuZ2VzIGZvciBOZXR3b3JrIFNvY2tldCBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZXNlIHBhdGNoIGNoYW5nZXMuIEkgc2VlIHdlJ3JlIG1vZGlmeWluZyB0aGUgc29ja2V0LXJlbGF0ZWQgY29kZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGRhdGEgdmFsaWRhdGlvbiBhbmQgcG90ZW50aWFsIGRlY3J5cHRpb24gZnVuY3Rpb25hbGl0aWVzLiBUaGUgZmlyc3QgY2hhbmdlLCBpbiBgaW5jbHVkZS9uZXQvc29jay5oYCwgaW50cm9kdWNlcyBhIGhlbHBlciBmdW5jdGlvbiwgYHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYmAuIFRoaXMgc2VlbXMgdG8gY2hlY2sgZm9yIGEgc3BlY2lmaWMgYHNrX3ZhbGlkYXRlX3htaXRfc2tiYCBmbGFnLCBsaWtlbHkgY29udHJvbGxlZCBieSBhIGBDT05GSUdfU09DS19WQUxJREFURV9YTUlUYCBwcmVwcm9jZXNzb3IgZGVmaW5lLiBNYWtlcyBzZW5zZTsgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZm9yIHBlcmZvcm1hbmNlIGFuZCBmZWF0dXJlIGVuYWJsZW1lbnQuIElmIHRoZSBmbGFnIGlzIHNldCwgaXQncyBjaGVja2luZyBpZiB0aGUgc29ja2V0IGlzIGNvbmZpZ3VyZWQgdG8gdmFsaWRhdGUgU0tCcyBkdXJpbmcgdHJhbnNtaXNzaW9uLlxuXG5OZXh0LCBpbiBgbmV0L2NvcmUvc29jay5jYCwgdGhlIGBza19oYXNfZGVjcnlwdF91c2VyYCBmdW5jdGlvbidzIGRlZmluaXRpb24gcmV2ZWFscyBpdHMgbG9naWMuIEl0J3MgY2hlY2tpbmcgaWYgYSBzb2NrZXQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgUFNQIChwcmVzdW1hYmx5IHNvbWUga2luZCBvZiBwcm90ZWN0aW9uIHNjaGVtZSkgKm9yKiBpZiBpdCdzIGFuIGludGVybmV0IHNvY2tldCB3aXRoIGEgY29uZmlndXJlZCBVTFAgKFVzZXItTGV2ZWwgUHJvdG9jb2wpLCBsaWtlbHkgZm9yIFRMUyBzdXBwb3J0LiBJbnRlcmVzdGluZyBpbnRlcnBsYXkgYmV0d2VlbiBkaWZmZXJlbnQgc2VjdXJpdHkgbGF5ZXJzIGFuZCBwcm90b2NvbCBoYW5kbGVycy5cblxuRmluYWxseSwgdGhlIG1vc3QgaW50ZXJlc3RpbmcgY2hhbmdlIGlzIGluIGBuZXQvaXB2NC90Y3BfdWxwLmNgLCB3aXRoaW4gdGhlIGBfX3RjcF9zZXRfdWxwYCBmdW5jdGlvbi4gSXQgc2VlbXMgdG8gYmUgcHJldmVudGluZyB0aGUgc2V0dGluZyBvZiBhIFVMUCBpZiBlaXRoZXIgYHNrX2hhc19kZWNyeXB0X3VzZXJgICpvciogYHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYmAgcmV0dXJucyB0cnVlLiBUaGUgY29kZSBpbmNsdWRlcyBhIGNoZWNrIHRoYXQgdGhyb3dzIGFuIGBFSU5WQUxgIGVycm9yIGFuZCBqdW1wcyBvdXQgaWYgdGhlIGFmb3JlbWVudGlvbmVkIGZ1bmN0aW9ucyBldmFsdWF0ZSB0byB0cnVlLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaXMgZXN0YWJsaXNoaW5nIGEgY29uc3RyYWludCBvbiB3aGVuIFVMUCAoc3BlY2lmaWNhbGx5IFRMUykgY2FuIGJlIGFwcGxpZWQgdG8gVENQIHNvY2tldHMuIEl0IHNlZW1zIHdlJ3JlIGd1YXJkaW5nIGFnYWluc3Qgc2l0dWF0aW9ucyB3aGVyZSB0aGUgc29ja2V0J3MgZGF0YSBuZWVkcyB0byBiZSB2YWxpZGF0ZWQgb3IgZGVjcnlwdGVkLiBUaGlzIHByb2JhYmx5IG1lYW5zIGEgc3BlY2lmaWMgZGF0YSB2YWxpZGF0aW9uIG9yIHNlY3VyaXR5IHNjaGVtZSBpcyBhbHJlYWR5IGVuYWJsZWQgb24gdGhhdCBzb2NrZXQgYW5kIHRoZSBVTFAgc2V0dXAgd291bGQgYmUgcmVkdW5kYW50IG9yIHdvdWxkIGNhdXNlIGlzc3VlcyAocG9zc2libHkgZHVlIHRvIGluY29tcGF0aWJsZSBzZWN1cml0eSBtb2RlbHMgb3IgYW4gb3JkZXIgb2Ygb3BlcmF0aW9ucyBjb25mbGljdCkuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGJyb2FkZXIgY29udGV4dCBvZiBgX190Y3Bfc2V0X3VscGAgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMgYW5kIHRoZSBleGFjdCByZWFzb25pbmcgYmVoaW5kIHRoaXMgY29uc3RyYWludC4gSXQgc2VlbXMgd2UgYXJlIHRyeWluZyB0byBwcmV2ZW50IGEgcG90ZW50aWFsIGNvbmZsaWN0IG9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4NDIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6NDM6MzkuOTU4MDgyOTE4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3BfdWxwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTIwOlxcdFxcdGlmICghaWNzay1cXHUwMDNlaWNza191bHBfb3BzKVxcbiAxMjE6XFx0XFx0XFx0cmV0dXJuO1xcbiAxMjI6XFx0XFxuIDEyMzpcXHRcXHRpZiAoaWNzay1cXHUwMDNlaWNza191bHBfb3BzLVxcdTAwM2VyZWxlYXNlKVxcbiAxMjQ6XFx0XFx0XFx0aWNzay1cXHUwMDNlaWNza191bHBfb3BzLVxcdTAwM2VyZWxlYXNlKHNrKTtcXG4gMTI1OlxcdFxcdG1vZHVsZV9wdXQoaWNzay1cXHUwMDNlaWNza191bHBfb3BzLVxcdTAwM2Vvd25lcik7XFxuIDEyNjpcXHRcXG4gMTI3OlxcdFxcdGljc2stXFx1MDAzZWljc2tfdWxwX29wcyA9IE5VTEw7XFxuIDEyODpcXHR9XFxuIDEyOTpcXHRcXG4gMTMwOlxcdHN0YXRpYyBpbnQgX190Y3Bfc2V0X3VscChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCB0Y3BfdWxwX29wcyAqdWxwX29wcylcXG4gMTMxOlxcdHtcXG4gMTMyOlxcdFxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG4gMTMzOlxcdFxcdGludCBlcnI7XFxuIDEzNDpcXHRcXG4gMTM1OlxcdFxcdGVyciA9IC1FRVhJU1Q7XFxuIDEzNjpcXHRcXHRpZiAoaWNzay1cXHUwMDNlaWNza191bHBfb3BzKVxcbiAxMzc6XFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbiAxMzg6XFx0XFxuIDEzOTpcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiAxNDA6XFx0XFx0aWYgKHNrX2hhc19kZWNyeXB0X3VzZXIoc2spIHx8IHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYihzaykpXFxuIDE0MTpcXHRcXHRcXHRnb3RvIG91dF9lcnI7XFxuIDE0MjpcXHRcXG4gMTQzOlxcdFxcdGlmIChzay1cXHUwMDNlc2tfc29ja2V0KVxcbiAxNDQ6XFx0XFx0XFx0Y2xlYXJfYml0KFNPQ0tfU1VQUE9SVF9aQywgXFx1MDAyNnNrLVxcdTAwM2Vza19zb2NrZXQtXFx1MDAzZWZsYWdzKTtcXG4gMTQ1OlxcdFxcbiAxNDY6XFx0XFx0ZXJyID0gLUVOT1RDT05OO1xcbiAxNDc6XFx0XFx0aWYgKCF1bHBfb3BzLVxcdTAwM2VjbG9uZSBcXHUwMDI2XFx1MDAyNiBzay1cXHUwMDNlc2tfc3RhdGUgPT0gVENQX0xJU1RFTilcXG4gMTQ4OlxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4gMTQ5OlxcdFxcbiAxNTA6XFx0XFx0ZXJyID0gdWxwX29wcy1cXHUwMDNlaW5pdChzayk7XFxuIDE1MTpcXHRcXHRpZiAoZXJyKVxcbiAxNTI6XFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbiAxNTM6XFx0XFxuIDE1NDpcXHRcXHRpY3NrLVxcdTAwM2VpY3NrX3VscF9vcHMgPSB1bHBfb3BzO1xcbiAxNTU6XFx0XFx0cmV0dXJuIDA7XFxuIDE1NjpcXHRvdXRfZXJyOlxcbiAxNTc6XFx0XFx0bW9kdWxlX3B1dCh1bHBfb3BzLVxcdTAwM2Vvd25lcik7XFxuIDE1ODpcXHRcXHRyZXR1cm4gZXJyO1xcbiAxNTk6XFx0fVxcbiAxNjA6XFx0XFxuIDE2MTpcXHRpbnQgdGNwX3NldF91bHAoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBjaGFyICpuYW1lKVxcbiAxNjI6XFx0e1xcbiAxNjM6XFx0XFx0Y29uc3Qgc3RydWN0IHRjcF91bHBfb3BzICp1bHBfb3BzO1xcbiAxNjQ6XFx0XFxuIDE2NTpcXHRcXHRzb2NrX293bmVkX2J5X21lKHNrKTtcXG4gMTY2OlxcdFxcbiAxNjc6XFx0XFx0dWxwX29wcyA9IF9fdGNwX3VscF9maW5kX2F1dG9sb2FkKG5hbWUpO1xcbiAxNjg6XFx0XFx0aWYgKCF1bHBfb3BzKVxcbiAxNjk6XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjQzOjM5Ljk1ODIxMjcyOFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzQwMjQzODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgU29ja2V0IEFzc29jaWF0aW9uKipcblxuT2theSwgc28gd2UncmUgZGl2aW5nIGJhY2sgaW50byB0aGUgYG5ldC9wc3BgIGRpcmVjdG9yeS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgd2UgbmVlZCB0byBjaGVjayBvdXQgYHBzcF9zb2NrLmNgIGFuZCB6ZXJvIGluIG9uIHRoZSBgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4YCBmdW5jdGlvbi4gTXkgaW5zdGluY3QgaXMgdGhhdCB0aGlzIGFyZWEgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIHN5c3RlbSBzZXRzIHVwIGFuZCBtYW5hZ2VzIHRoZSBhc3NvY2lhdGlvbiBiZXR3ZWVuIHNvY2tldHMgYW5kIHJlY2VpdmUgcGF0aHMuIFdlIG5lZWQgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IGFzc29jaWF0aW9uLCBhbmQgaG93IGl0IGlzIG1hbmFnZWQgd2l0aGluIHRoZSByZWNlaXZlIHByb2Nlc3NpbmcgcGF0aC4gTGV0J3Mgc2VlIGlmIHRoaXMgZnVuY3Rpb24gcmV2ZWFscyBzb21ldGhpbmcgd2UncmUgbWlzc2luZy4gSSBzdXNwZWN0IGEgZGV0YWlsZWQgcmV2aWV3IG9mIHRoaXMgc2VjdGlvbiBtaWdodCBwcm92aWRlIGluc2lnaHRzIGludG8gdGhlIHJvb3QgY2F1c2Ugd2UgYXJlIGNoYXNpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzcxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMDo0Mzo0MS42OTg0NTk1OTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9wc3AvcHNwX3NvY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzA6XFx0fVxcbiAxMzE6XFx0XFxuIDEzMjpcXHRpbnQgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9hc3NvYyAqcGFzLFxcbiAxMzM6XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgcHNwX2tleV9wYXJzZWQgKmtleSxcXG4gMTM0OlxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiAxMzU6XFx0e1xcbiAxMzY6XFx0XFx0aW50IGVycjtcXG4gMTM3OlxcdFxcbiAxMzg6XFx0XFx0bWVtY3B5KFxcdTAwMjZwYXMtXFx1MDAzZXJ4LCBrZXksIHNpemVvZigqa2V5KSk7XFxuIDEzOTpcXHRcXG4gMTQwOlxcdFxcdGxvY2tfc29jayhzayk7XFxuIDE0MTpcXHRcXG4gMTQyOlxcdFxcdGlmIChwc3Bfc2tfYXNzb2Moc2spKSB7XFxuIDE0MzpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJTb2NrZXQgYWxyZWFkeSBoYXMgUFNQIHN0YXRlXFxcIik7XFxuIDE0NDpcXHRcXHRcXHRlcnIgPSAtRUJVU1k7XFxuIDE0NTpcXHRcXHRcXHRnb3RvIGV4aXRfdW5sb2NrO1xcbiAxNDY6XFx0XFx0fSBlbHNlIGlmIChza19oYXNfZGVjcnlwdF91c2VyKHNrKSB8fCBza19oYXNfdmFsaWRhdGVfeG1pdF9za2Ioc2spKSB7XFxuIDE0NzpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJTb2NrZXQgaGFzIGluY29tcGF0aWJsZSBzdGF0ZVxcXCIpO1xcbiAxNDg6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4gMTQ5OlxcdFxcdFxcdGdvdG8gZXhpdF91bmxvY2s7XFxuIDE1MDpcXHRcXHR9XFxuIDE1MTpcXHRcXG4gMTUyOlxcdFxcdHJlZmNvdW50X2luYyhcXHUwMDI2cGFzLVxcdTAwM2VyZWZjbnQpO1xcbiAxNTM6XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHNrLVxcdTAwM2Vwc3BfYXNzb2MsIHBhcyk7XFxuIDE1NDpcXHRcXHRlcnIgPSAwO1xcbiAxNTU6XFx0XFxuIDE1NjpcXHRleGl0X3VubG9jazpcXG4gMTU3OlxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuIDE1ODpcXHRcXG4gMTU5OlxcdFxcdHJldHVybiBlcnI7XFxuIDE2MDpcXHR9XFxuIDE2MTpcXHRcXG4gMTYyOlxcdHN0YXRpYyBpbnQgcHNwX3NvY2tfcmVjdl9xdWV1ZV9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwc3BfYXNzb2MgKnBhcylcXG4gMTYzOlxcdHtcXG4gMTY0OlxcdFxcdHN0cnVjdCBwc3Bfc2tiX2V4dCAqcHNlO1xcbiAxNjU6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gMTY2OlxcdFxcbiAxNjc6XFx0XFx0c2tiX3JidHJlZV93YWxrKHNrYiwgXFx1MDAyNnRjcF9zayhzayktXFx1MDAzZW91dF9vZl9vcmRlcl9xdWV1ZSkge1xcbiAxNjg6XFx0XFx0XFx0cHNlID0gc2tiX2V4dF9maW5kKHNrYiwgU0tCX0VYVF9QU1ApO1xcbiAxNjk6XFx0XFx0XFx0aWYgKCFwc3BfcHNlX21hdGNoZXNfcGFzKHBzZSwgcGFzKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6NDM6NDEuNjk4NTc3MzI3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzNjM3ODA4NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gdGhlIFBTUCBTb2NrZXQgQXNzb2NpYXRpb24gTG9naWMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgYG5ldC9wc3AvYCBkaXJlY3RvcnkuIEZpcnN0IHRoaW5ncyBmaXJzdCwgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IGV4YWN0bHkgUFNQIGlzIGluIHRoaXMgY29udGV4dC4gSXMgaXQgYSBjdXN0b20gcHJvdG9jb2wsIGEgcGFydGljdWxhciBoYXJkd2FyZSBhYnN0cmFjdGlvbiwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFVuZGVyc3RhbmRpbmcgdGhlICpwdXJwb3NlKiBvZiBQU1AgaXMgY3JpdGljYWwgYmVmb3JlIEkgY2FuIG1ha2Ugc2Vuc2Ugb2YgaXRzIHVzYWdlLiBHb3R0YSBnZXQgdGhlIGhpZ2gtbGV2ZWwgY29udGV4dC4gSG93IGlzIGl0ICpkZXNpZ25lZCogdG8gYmUgdXNlZD9cblxuTmV4dCwgbGV0J3MgemVybyBpbiBvbiB0aGUgZnVuY3Rpb24gYHBzcF9zb2NrX2Fzc29jX3NldF9yeGAuIFRoaXMgbGlrZWx5IHBsYXlzIGEga2V5IHJvbGUgaW4gYXNzb2NpYXRpbmcgaW5jb21pbmcgdHJhZmZpYyB3aXRoIGEgc3BlY2lmaWMgc29ja2V0LCBhbmQgdGhlIFwicnhcIiBwYXJ0IHRlbGxzIG1lIGl0J3MgaGFuZGxpbmcgdGhlIHJlY2VpdmluZyBzaWRlIG9mIHRoaW5ncy4gU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIHRoZSBzeXN0ZW0gaWRlbnRpZmllcyBhbmQgcm91dGVzIGluY29taW5nIHBhY2tldHMgb3IgZGF0YSBzdHJlYW1zIGJhc2VkIG9uIFBTUC4gSSdsbCBuZWVkIHRvIHVzZSBgZ3JlcGAgKG9yIG15IHByZWZlcnJlZCBzZWFyY2ggdG9vbCkgdG8gZmluZCB0aGUgY2FsbGluZyBsb2NhdGlvbnMgb2YgYHBzcF9zb2NrX2Fzc29jX3NldF9yeGAuIFRoaXMgd2lsbCBwYWludCB0aGUgYmlnZ2VyIHBpY3R1cmU6IHdoYXQgb3RoZXIgY29tcG9uZW50cyBhcmUgaW52b2x2ZWQsIHdoYXQgdHJpZ2dlcnMgdGhpcyBhc3NvY2lhdGlvbiBwcm9jZXNzLCBhbmQgd2hlcmUgaXQgZml0cyBpbiB0aGUgZGF0YSBmbG93LiBGaW5kaW5nIHRob3NlIGNhbGxlcnMgd2lsbCBnaXZlIG1lIHZhbHVhYmxlIGNsdWVzIHRvIGl0cyBmdW5jdGlvbiBhbmQgc3RydWN0dXJlIHdpdGhpbiB0aGUgd2hvbGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTIxMCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6NDM6NDUuMDYyMzYxMzAyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzIxODY3NzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBzcF9zb2NrX2Fzc29jX3NldF9yeFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcHNwL3BzcC5oPTI1PXZvaWQgcHNwX2Rldl90eF9rZXlfZGVsKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfYXNzb2MgKnBhcyk7XFxubmV0L3BzcC9wc3AuaDoyNjppbnQgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9hc3NvYyAqcGFzLFxcbm5ldC9wc3AvcHNwLmgtMjctXFx0XFx0XFx0ICBzdHJ1Y3QgcHNwX2tleV9wYXJzZWQgKmtleSxcXG4tLVxcbm5ldC9wc3AvcHNwX25sLmM9NzcwPWludCBwc3BfbmxfcnhfYXNzb2NfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3BzcC9wc3BfbmwuYy04MDktXFxubmV0L3BzcC9wc3BfbmwuYzo4MTA6XFx0ZXJyID0gcHNwX3NvY2tfYXNzb2Nfc2V0X3J4KHNvY2tldC1cXHUwMDNlc2ssIHBhcywgXFx1MDAyNmtleSwgaW5mby1cXHUwMDNlZXh0YWNrKTtcXG5uZXQvcHNwL3BzcF9ubC5jLTgxMS1cXHRpZiAoZXJyKSB7XFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmM9MTI0PXZvaWQgcHNwX3NrX2Fzc29jX2ZyZWUoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L3BzcC9wc3Bfc29jay5jLTEzMS1cXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTMyOmludCBwc3Bfc29ja19hc3NvY19zZXRfcngoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsXFxubmV0L3BzcC9wc3Bfc29jay5jLTEzMy1cXHRcXHRcXHQgIHN0cnVjdCBwc3Bfa2V5X3BhcnNlZCAqa2V5LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMDo0Mzo0Ny4zODQyMzUzMloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzQ3MTMzNzcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgTmV0bGluayBhbmQgUFNQIEludGVyYWN0aW9ucyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIG5ldGxpbmsgUFNQIGJ1c2luZXNzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBpdCBhbGwgaGFuZ3MgdG9nZXRoZXIuIEkgc2hvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhlIG5ldGxpbmsgaW1wbGVtZW50YXRpb24gb2YgUFNQLCBhbmQgd2hpbGUgSSdtIGF0IGl0LCBJJ2xsIHJlZnJlc2ggbXkgbWVtb3J5IG9mIGBza19oYXNfZGVjcnlwdF91c2VyYCwgYW5kIHRoZSBpbm5lciB3b3JraW5ncyBvZiBgX190Y3Bfc2V0X3VscGAsIGFuZCBzaW1pbGFyIHJlbGF0ZWQgZnVuY3Rpb25zLiBBaCwgcmlnaHQhIGB0Y3Bfc2V0X3VscGAgaXMgaW52b2tlZCB0aHJvdWdoIGBzZXRzb2Nrb3B0YCB3aXRoIHRoZSBgU09MX1RDUGAgYW5kIGBUQ1BfVUxQYCBvcHRpb25zLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LlxuXG5Ob3csIHdoZXJlIGRvZXMgdGhlIFBTUCBuZXRsaW5rIHByb2Nlc3NpbmcgYWN0dWFsbHkgaGFwcGVuPyBBaCwgeWVzLCBgcHNwX25sX3J4X2Fzc29jX2RvaXRgIGlzIHdoYXQncyBjYWxsZWQgd2hlbiByZWNlaXZpbmcgdHJhZmZpYyBmcm9tIHRoZSBQU1AgbmV0bGluayBmYW1pbHkuIFRoaXMgZ2l2ZXMgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGRhdGEgcGF0aC5cblxuSSB3b25kZXLigKYgY2FuIHdlIGxldmVyYWdlIG5ldGRldnNpbSBmb3IgdGVzdGluZyBQU1A/IEl0IHdvdWxkIGJlIGdyZWF0IHRvIGlzb2xhdGUgYW5kIHRlc3QgdGhpcyB3aXRob3V0IGhhdmluZyB0byBkZWFsIHdpdGggcmVhbCBoYXJkd2FyZS4gSSdsbCBuZWVkIHRvIHNlZSBpZiB0aGVyZSdzIGFueSBtZW50aW9uIG9mIGBuc2ltX3BzcGAsIG9yIGhvdyBQU1AtcmVsYXRlZCBkZXZpY2VzIGFyZSByZWdpc3RlcmVkIHdpdGhpbiBuZXRkZXZzaW0uIFRpbWUgdG8gYnJlYWsgb3V0IGdyZXAgYW5kIHNlZSB3aGF0IHRoZSBrZXJuZWwgc291cmNlIGhhcyB0byBvZmZlciFcblxuXG4iLCJJbnB1dFRva2VucyI6MTE5MDYsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6NDM6NTAuMTMxMzcxMzEyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjM0ODg1MTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5zaW1fcHNwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYz0xMDM9c3RhdGljIGludCBuc2ltX2ZvcndhcmRfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICp0eF9kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTE3LVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYzoxMTg6XFx0bnNpbV9wc3BfaGFuZGxlX2V4dChza2IsIHBzcF9leHQpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xMTktXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM9MTA0MD1zdGF0aWMgaW50IG5zaW1faW5pdF9uZXRkZXZzaW0oc3RydWN0IG5ldGRldnNpbSAqbnMpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTA3Ni1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6MTA3NzpcXHRlcnIgPSBuc2ltX3BzcF9pbml0KG5zKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTA3OC1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jPTExNzU9dm9pZCBuc2ltX2Rlc3Ryb3koc3RydWN0IG5ldGRldnNpbSAqbnMpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTE5MC1cXHRpZiAobnNpbV9kZXZfcG9ydF9pc19wZihucy1cXHUwMDNlbnNpbV9kZXZfcG9ydCkpXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jOjExOTE6XFx0XFx0bnNpbV9wc3BfdW5pbml0KG5zKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTE5Mi1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD00NDU9c3RhdGljIGlubGluZSB2b2lkIG5zaW1fbWFjc2VjX3RlYXJkb3duKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQ1MC0jaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQ1MTppbnQgbnNpbV9wc3BfaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucyk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQ1Mjp2b2lkIG5zaW1fcHNwX3VuaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucyk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQ1Mzp2b2lkIG5zaW1fcHNwX2hhbmRsZV9leHQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNrYl9leHQgKnBzcF9leHQpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00NTQtZW51bSBza2JfZHJvcF9yZWFzb25cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg9NDU1PW5zaW1fZG9fcHNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRkZXZzaW0gKm5zLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQ1Ny0jZWxzZVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDo0NTg6c3RhdGljIGlubGluZSBpbnQgbnNpbV9wc3BfaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucykgeyByZXR1cm4gMDsgfVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDo0NTk6c3RhdGljIGlubGluZSB2b2lkIG5zaW1fcHNwX3VuaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucykge31cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtNDYwLXN0YXRpYyBpbmxpbmUgZW51bSBza2JfZHJvcF9yZWFzb25cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD00Njc9c3RhdGljIGlubGluZSB2b2lkXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQ2ODpuc2ltX3BzcF9oYW5kbGVfZXh0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBza2JfZXh0ICpwc3BfZXh0KSB7fVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00NjktI2VuZGlmXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMTAtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjExOnZvaWQgbnNpbV9wc3BfaGFuZGxlX2V4dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2tiX2V4dCAqcHNwX2V4dClcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMTIte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jPTEyMz1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjEyNDpuc2ltX3BzcF9zZXRfY29uZmlnKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfZGV2X2NvbmZpZyAqY29uZixcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMTI1LVxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM9MTg5PXN0YXRpYyB2b2lkIG5zaW1fZ2V0X3N0YXRzKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfZGV2X3N0YXRzICpzdGF0cylcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yMDMtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjIwNDpzdGF0aWMgc3RydWN0IHBzcF9kZXZfb3BzIG5zaW1fcHNwX29wcyA9IHtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM6MjA1OlxcdC5zZXRfY29uZmlnXFx0PSBuc2ltX3BzcF9zZXRfY29uZmlnLFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yMDYtXFx0LnJ4X3NwaV9hbGxvY1xcdD0gbnNpbV9yeF9zcGlfYWxsb2MsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMjEyLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzoyMTM6c3RhdGljIHN0cnVjdCBwc3BfZGV2X2NhcHMgbnNpbV9wc3BfY2FwcyA9IHtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMjE0LVxcdC52ZXJzaW9ucyA9IDEgXFx1MDAzY1xcdTAwM2MgUFNQX1ZFUlNJT05fSERSMF9BRVNfR0NNXzEyOCB8XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMjIwLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzoyMjE6c3RhdGljIHZvaWQgX19uc2ltX3BzcF91bmluaXQoc3RydWN0IG5ldGRldnNpbSAqbnMsIGJvb2wgdGVhcmRvd24pXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTIyMi17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMjM1LVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzoyMzY6dm9pZCBuc2ltX3BzcF91bmluaXQoc3RydWN0IG5ldGRldnNpbSAqbnMpXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTIzNy17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMjM5LVxcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNm5zLVxcdTAwM2Vwc3AucmVyZWdfbG9jayk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjI0MDpcXHRfX25zaW1fcHNwX3VuaW5pdChucywgdHJ1ZSk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTI0MS19XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM9MjQzPXN0YXRpYyBzc2l6ZV90XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjI0NDpuc2ltX3BzcF9yZXJlZ193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmRhdGEsIHNpemVfdCBjb3VudCxcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMjQ1LVxcdFxcdCAgICAgbG9mZl90ICpwcG9zKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTI1MS1cXHRtdXRleF9sb2NrKFxcdTAwMjZucy1cXHUwMDNlcHNwLnJlcmVnX2xvY2spO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzoyNTI6XFx0X19uc2ltX3BzcF91bmluaXQobnMsIGZhbHNlKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMjUzLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzoyNTQ6XFx0cHNkID0gcHNwX2Rldl9jcmVhdGUobnMtXFx1MDAzZW5ldGRldiwgXFx1MDAyNm5zaW1fcHNwX29wcywgXFx1MDAyNm5zaW1fcHNwX2NhcHMsIG5zKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMjU1LVxcdGlmIChJU19FUlIocHNkKSkge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTI2Ni1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM6MjY3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5zaW1fcHNwX3JlcmVnX2ZvcHMgPSB7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTI2OC1cXHQub3BlbiA9IHNpbXBsZV9vcGVuLFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzoyNjk6XFx0LndyaXRlID0gbnNpbV9wc3BfcmVyZWdfd3JpdGUsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTI3MC1cXHQubGxzZWVrID0gZ2VuZXJpY19maWxlX2xsc2VlayxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yNzMtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjI3NDppbnQgbnNpbV9wc3BfaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucylcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMjc1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yNzgtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjI3OTpcXHRwc2QgPSBwc3BfZGV2X2NyZWF0ZShucy1cXHUwMDNlbmV0ZGV2LCBcXHUwMDI2bnNpbV9wc3Bfb3BzLCBcXHUwMDI2bnNpbV9wc3BfY2FwcywgbnMpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yODAtXFx0aWYgKElTX0VSUihwc2QpKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTI4Ni1cXHRucy1cXHUwMDNlcHNwLnJlcmVnID0gZGVidWdmc19jcmVhdGVfZmlsZShcXFwicHNwX3JlcmVnXFxcIiwgMDIwMCwgZGRpciwgbnMsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjI4NzpcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNm5zaW1fcHNwX3JlcmVnX2ZvcHMpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yODgtXFx0cmV0dXJuIDA7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk9NTM4PWRlZiBkYXRhX3N0YWxlX2tleShjZmcpOlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTU3MS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk6NTcyOmRlZiBfX25zaW1fcHNwX3JlcmVnKGNmZyk6XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTU3My0gICAgIyBUaGUgUFNQIGRldiBJRCB3aWxsIGNoYW5nZSwgcmVtZW1iZXIgd2hhdCB3YXMgdGhlcmUgYmVmb3JlXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk9NTg1PWRlZiByZW1vdmFsX2RldmljZV9yeChjZmcpOlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTU5OS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk6NjAwOiAgICAgICAgX19uc2ltX3BzcF9yZXJlZyhjZmcpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTYwMS0gICAgZmluYWxseTpcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weT02MDU9ZGVmIHJlbW92YWxfZGV2aWNlX2JpKGNmZyk6XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHktNjIxLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwic29jay1mZFxcXCI6IHMuZmlsZW5vKCl9KVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weTo2MjI6ICAgICAgICBfX25zaW1fcHNwX3JlcmVnKGNmZylcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHktNjIzLSAgICBmaW5hbGx5OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMDo0Mzo1Mi4zNjYyNjE4ODRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDk3NDUzNDAyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQU1AvVENQIFVMUCBJbnRlcmFjdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIFBTUCBpcyBoYW5kbGVkIHRocm91Z2ggYG5ldGRldnNpbWAsIHdoaWNoIGlzIGVzc2VudGlhbGx5IGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgd2l0aGluIFFFTVUgYW5kIHN5emthbGxlci4gVENQIFVMUCwgYW5kIEknbSB0aGlua2luZyBhYm91dCB0aGluZ3MgbGlrZSBrVExTLCBCUEYsIGFuZCBNUFRDUCwgYXJlIGFjY2Vzc2VkIHVzaW5nIHN0YW5kYXJkIHNvY2tldCBzeXNjYWxscywgc3BlY2lmaWNhbGx5IGBzZXRzb2Nrb3B0KC4uLiwgU09MX1RDUCwgVENQX1VMUCwgLi4uKWAuIFJpZ2h0LCBJIHJlY2FsbCB0aG9zZSBmdW5jdGlvbnM6IGBza19oYXNfZGVjcnlwdF91c2VyYCBpcyBpbiBgc29jay5jYCwgYF9fdGNwX3NldF91bHBgIGluIGB0Y3BfdWxwLmNgLCBhbmQgYHBzcF9zb2NrX2Fzc29jX3NldF9yeGAgaW4gYHBzcF9zb2NrLmNgLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IGRvZXMgdGhlIG1vZGlmaWVkIGNvZGUgaW50ZXJhY3Qgd2l0aCB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIGFuZCB0aGUgUFNQIHNpZGUgb2YgdGhpbmdzPyBZZXAsIGl0IGhpdHMgY29yZSBuZXR3b3JraW5nLCBUQ1AgVUxQLCBhbmQgUFNQIHNvY2tldHMuIFRoZSBjb2RlJ3MgaW50cm9kdWNpbmcgY2hlY2tzIHRvIGF2b2lkIGNvbmZsaWN0cyDigJMgc3BlY2lmaWNhbGx5LCBpdCdzIHByZXZlbnRpbmcgdGhlIGNvbWJpbmF0aW9uIG9mIFBTUCB3aXRoIFRDUCBVTFAgb3Igc29ja2V0cyBlbXBsb3lpbmcgYHNrX3ZhbGlkYXRlX3htaXRfc2tiYCwgd2hpY2ggSSB0aGluayBvZiB3aXRoIGtUTFMgZGV2aWNlIG9mZmxvYWQgb3IgUFNQLiBJdCdzIGVzc2VudGlhbGx5IGVuc3VyaW5nIHRoYXQgb2ZmbG9hZCBhbmQgZGVjcnlwdGlvbiBzdGF0ZXMgZG9uJ3QgY2xhc2ggb24gdGhlIHNhbWUgc29ja2V0LiBUaGF0IG1ha2VzIHNlbnNlLlxuXG5OZXh0LCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCdzIFwiV29ydGhGdXp6aW5nXCIuIEZpcnN0LCBpcyBpdCByZWFjaGFibGUgaW4gYSB0eXBpY2FsIFFFTVUvdmlydHVhbGl6ZWQgc2V0dXA/IFllcywgVENQIFVMUCBpcyBwYXJ0IG9mIHN0YW5kYXJkIG5ldHdvcmtpbmcgKHdlJ3ZlIGdvdCBgQ09ORklHX0lORVRgLCBgQ09ORklHX1RDUF9VTFBgKSwga1RMUyBpcyB0aGVyZSAoYENPTkZJR19UTFNgKSwgYW5kIFBTUCBpcyBjb25maWd1cmVkIChgQ09ORklHX0lORVRfUFNQYCwgYENPTkZJR19ORVRERVZTSU1gKS4gTm93LCBpcyBpdCAqd29ydGgqIGZ1enppbmc/IEFic29sdXRlbHkuIFRoZXNlIHJlZmFjdG9yaW5ncyBhbmQgY2hlY2tzIGluIGNydWNpYWwgc3Vic3lzdGVtcyAoVENQIFVMUCwgc29ja2V0IG1hbmFnZW1lbnQsIFBTUCkgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZSBhbmQgYXJlIGFsdGVyaW5nIHNvY2tldCBzdGF0ZSBjaGVja3MuIEl0J3MgcHJpbWUgdGVycml0b3J5IGZvciBmaW5kaW5nIGVkZ2UgY2FzZXMuXG5cbkZpbmFsbHksIHdoYXQgYXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gc2V0IHVwPyBJJ20gdGhpbmtpbmc6XG5cbiogICBgSU5FVF9QU1BgXG4qICAgYFRMU2AgKG9yIGF0IGxlYXN0IGBJTkVUX1VMUGAgb3IgYFRDUF9VTFBgIOKAkyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBLY29uZmlnYCBmb3IgdGhlIGRlcGVuZGVuY2llcyBvZiBgVENQX1VMUGAsIGBUTFNgLCBldGMuKVxuKiAgIGBORVRERVZTSU1gXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgY29uc3VsdCB0aGUgYEtjb25maWdgIGZpbGVzIGZvciBgVENQX1VMUGAgYW5kIGBUTFNgIHRvIGNvbmZpcm0gZGVwZW5kZW5jaWVzIGFuZCB0aGVpciByZWxhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODMzLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjQzOjU3LjM0MDc5ODA4OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY4NDgwMzYxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJUQ1BfVUxQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbmV0d29ya2luZy90bHMucnN0PTIwPVRMUyBVTFAuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGxzLnJzdC0yNS0gIGNvbm5lY3Qoc29jaywgYWRkciwgYWRkcmxlbik7XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3Rscy5yc3Q6MjY6ICBzZXRzb2Nrb3B0KHNvY2ssIFNPTF9UQ1AsIFRDUF9VTFAsIFxcXCJ0bHNcXFwiLCBzaXplb2YoXFxcInRsc1xcXCIpKTtcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGxzLnJzdC0yNy1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2N4dC5jPTk1PXN0YXRpYyBib29sIHNyY19wcm90byhlbnVtIHByb3RvY29sX3R5cGUgdHlwZSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuYy05Ni17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmM6OTc6XFx0cmV0dXJuIHR5cGUgPT0gUFJPVE9DT0xJRF9UQ1BfVUxQIHx8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmMtOTgtXFx0ICAgICAgIHR5cGUgPT0gUFJPVE9DT0xJRF9GQ09FIHx8XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuYz0xMDI9c3RhdGljIGJvb2wgdG1fY2lkX3Byb3RvKGVudW0gcHJvdG9jb2xfdHlwZSB0eXBlKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2N4dC5jLTEwMy17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmM6MTA0OlxcdHJldHVybiB0eXBlID09IFBST1RPQ09MSURfVENQX1VMUCB8fFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2N4dC5jLTEwNS1cXHQgICAgICAgdHlwZSA9PSBQUk9UT0NPTElEX0ZDT0UgfHxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2N4dC5jPTIwMTY9aW50IHFlZF9jeHRfc2V0X3BmX3BhcmFtcyhzdHJ1Y3QgcWVkX2h3Zm4gKnBfaHdmbiwgdTMyIHJkbWFfdGFza3MpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuYy0yMDc4LVxcdFxcdFxcdHFlZF9jeHRfc2V0X3Byb3RvX2NpZF9jb3VudChwX2h3Zm4sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmM6MjA3OTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgUFJPVE9DT0xJRF9UQ1BfVUxQLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2N4dC5jLTIwODAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHBfcGFyYW1zLVxcdTAwM2VudW1fY29ucyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2N4dC5jLTIwODItXFx0XFx0XFx0cWVkX2N4dF9zZXRfcHJvdG9fdGlkX2NvdW50KHBfaHdmbixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuYzoyMDgzOlxcdFxcdFxcdFxcdFxcdFxcdCAgICBQUk9UT0NPTElEX1RDUF9VTFAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmM6MjA4NDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgUUVEX0NYVF9UQ1BfVUxQX1RJRF9TRUcsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmMtMjA4NS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgMCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2N4dC5jLTIxMDEtXFx0XFx0XFx0cWVkX2N4dF9zZXRfcHJvdG9fY2lkX2NvdW50KHBfaHdmbixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuYzoyMTAyOlxcdFxcdFxcdFxcdFxcdFxcdCAgICBQUk9UT0NPTElEX1RDUF9VTFAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmMtMjEwMy1cXHRcXHRcXHRcXHRcXHRcXHQgICAgcF9wYXJhbXMtXFx1MDAzZW51bV9jb25zLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmMtMjEwNS1cXHRcXHRcXHRxZWRfY3h0X3NldF9wcm90b190aWRfY291bnQocF9od2ZuLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2N4dC5jOjIxMDY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFBST1RPQ09MSURfVENQX1VMUCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuYzoyMTA3OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBRRURfQ1hUX1RDUF9VTFBfVElEX1NFRyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuYy0yMTA4LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAwLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmM9MjEyND1pbnQgcWVkX2N4dF9nZXRfdGlkX21lbV9pbmZvKHN0cnVjdCBxZWRfaHdmbiAqcF9od2ZuLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmMtMjE0MC1cXHRjYXNlIFFFRF9QQ0lfTlZNRVRDUDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuYzoyMTQxOlxcdFxcdHByb3RvID0gUFJPVE9DT0xJRF9UQ1BfVUxQO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2N4dC5jOjIxNDI6XFx0XFx0c2VnID0gUUVEX0NYVF9UQ1BfVUxQX1RJRF9TRUc7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmMtMjE0My1cXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2N4dC5jPTI0NDg9aW50IHFlZF9jeHRfZ2V0X3Rhc2tfY3R4KHN0cnVjdCBxZWRfaHdmbiAqcF9od2ZuLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmMtMjQ2Ny1cXHRjYXNlIFFFRF9QQ0lfTlZNRVRDUDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuYzoyNDY4OlxcdFxcdHByb3RvID0gUFJPVE9DT0xJRF9UQ1BfVUxQO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2N4dC5jOjI0Njk6XFx0XFx0c2VnID0gUUVEX0NYVF9UQ1BfVUxQX1RJRF9TRUc7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmMtMjQ3MC1cXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2N4dC5oPTQ5PWludCBxZWRfY3h0X2dldF90aWRfbWVtX2luZm8oc3RydWN0IHFlZF9od2ZuICpwX2h3Zm4sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuaC01MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuaDo1MjojZGVmaW5lIFFFRF9DWFRfVENQX1VMUF9USURfU0VHXFx0UFJPVE9DT0xJRF9UQ1BfVUxQXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmgtNTMtI2RlZmluZSBRRURfQ1hUX1JPQ0VfVElEX1NFR1xcdFBST1RPQ09MSURfUk9DRVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfZGV2LmM9MjEzOT1pbnQgcWVkX3Jlc2NfYWxsb2Moc3RydWN0IHFlZF9kZXYgKmNkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9kZXYuYy0yMjU5LVxcdFxcdFxcdCAgICBxZWRfY3h0X2dldF9wcm90b19jaWRfY291bnQocF9od2ZuLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2Rldi5jOjIyNjA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0UFJPVE9DT0xJRF9UQ1BfVUxQLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2Rldi5jLTIyNjEtXFx0XFx0XFx0XFx0XFx0XFx0XFx0TlVMTCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9oc2kuaD0xMTg0PWVudW0gcGVyc29uYWxpdHlfdHlwZSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaHNpLmgtMTE4NS1cXHRCQURfUEVSU09OQUxJVFlfVFlQLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2hzaS5oOjExODY6XFx0UEVSU09OQUxJVFlfVENQX1VMUCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9oc2kuaC0xMTg3LVxcdFBFUlNPTkFMSVRZX0ZDT0UsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pc2NzaS5jPTEzNz1xZWRfc3BfaXNjc2lfZnVuY19zdGFydChzdHJ1Y3QgcWVkX2h3Zm4gKnBfaHdmbixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtMTYxLVxcdFxcdFxcdFxcdCBJU0NTSV9SQU1ST0RfQ01EX0lEX0lOSVRfRlVOQyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pc2NzaS5jOjE2MjpcXHRcXHRcXHRcXHQgUFJPVE9DT0xJRF9UQ1BfVUxQLCBcXHUwMDI2aW5pdF9kYXRhKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pc2NzaS5jLTE2My1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pc2NzaS5jLTI1My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pc2NzaS5jOjI1NDpcXHRxZWRfc3BxX3JlZ2lzdGVyX2FzeW5jX2NiKHBfaHdmbiwgUFJPVE9DT0xJRF9UQ1BfVUxQLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtMjU1LVxcdFxcdFxcdFxcdCAgcWVkX2lzY3NpX2FzeW5jX2V2ZW50KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmM9MjYwPXN0YXRpYyBpbnQgcWVkX3NwX2lzY3NpX2Nvbm5fb2ZmbG9hZChzdHJ1Y3QgcWVkX2h3Zm4gKnBfaHdmbixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtMjg5LVxcdFxcdFxcdFxcdCBJU0NTSV9SQU1ST0RfQ01EX0lEX09GRkxPQURfQ09OTixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pc2NzaS5jOjI5MDpcXHRcXHRcXHRcXHQgUFJPVE9DT0xJRF9UQ1BfVUxQLCBcXHUwMDI2aW5pdF9kYXRhKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pc2NzaS5jLTI5MS1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pc2NzaS5jPTQ0OT1zdGF0aWMgaW50IHFlZF9zcF9pc2NzaV9jb25uX3VwZGF0ZShzdHJ1Y3QgcWVkX2h3Zm4gKnBfaHdmbixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtNDY4LVxcdFxcdFxcdFxcdCBJU0NTSV9SQU1ST0RfQ01EX0lEX1VQREFURV9DT05OLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmM6NDY5OlxcdFxcdFxcdFxcdCBQUk9UT0NPTElEX1RDUF9VTFAsIFxcdTAwMjZpbml0X2RhdGEpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtNDcwLVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmM9NDkwPXFlZF9zcF9pc2NzaV9tYWNfdXBkYXRlKHN0cnVjdCBxZWRfaHdmbiAqcF9od2ZuLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXNjc2kuYy01MDktXFx0XFx0XFx0XFx0IElTQ1NJX1JBTVJPRF9DTURfSURfTUFDX1VQREFURSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pc2NzaS5jOjUxMDpcXHRcXHRcXHRcXHQgUFJPVE9DT0xJRF9UQ1BfVUxQLCBcXHUwMDI2aW5pdF9kYXRhKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pc2NzaS5jLTUxMS1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pc2NzaS5jPTUzMz1zdGF0aWMgaW50IHFlZF9zcF9pc2NzaV9jb25uX3Rlcm1pbmF0ZShzdHJ1Y3QgcWVkX2h3Zm4gKnBfaHdmbixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtNTUxLVxcdFxcdFxcdFxcdCBJU0NTSV9SQU1ST0RfQ01EX0lEX1RFUk1JTkFUSU9OX0NPTk4sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXNjc2kuYzo1NTI6XFx0XFx0XFx0XFx0IFBST1RPQ09MSURfVENQX1VMUCwgXFx1MDAyNmluaXRfZGF0YSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXNjc2kuYy01NTMtXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXNjc2kuYz01Njg9c3RhdGljIGludCBxZWRfc3BfaXNjc2lfY29ubl9jbGVhcl9zcShzdHJ1Y3QgcWVkX2h3Zm4gKnBfaHdmbixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtNTg1LVxcdFxcdFxcdFxcdCBJU0NTSV9SQU1ST0RfQ01EX0lEX0NMRUFSX1NRLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmM6NTg2OlxcdFxcdFxcdFxcdCBQUk9UT0NPTElEX1RDUF9VTFAsIFxcdTAwMjZpbml0X2RhdGEpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtNTg3LVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmM9NTkzPXN0YXRpYyBpbnQgcWVkX3NwX2lzY3NpX2Z1bmNfc3RvcChzdHJ1Y3QgcWVkX2h3Zm4gKnBfaHdmbixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtNjA5LVxcdFxcdFxcdFxcdCBJU0NTSV9SQU1ST0RfQ01EX0lEX0RFU1RST1lfRlVOQyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pc2NzaS5jOjYxMDpcXHRcXHRcXHRcXHQgUFJPVE9DT0xJRF9UQ1BfVUxQLCBcXHUwMDI2aW5pdF9kYXRhKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pc2NzaS5jLTYxMS1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pc2NzaS5jLTYxNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pc2NzaS5jOjYxNjpcXHRxZWRfc3BxX3VucmVnaXN0ZXJfYXN5bmNfY2IocF9od2ZuLCBQUk9UT0NPTElEX1RDUF9VTFApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtNjE3LVxcdHJldHVybiByYztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmM9Nzc5PXN0YXRpYyBpbnQgcWVkX2lzY3NpX2FjcXVpcmVfY29ubmVjdGlvbihzdHJ1Y3QgcWVkX2h3Zm4gKnBfaHdmbixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtNzg3LVxcdHNwaW5fbG9ja19iaChcXHUwMDI2cF9od2ZuLVxcdTAwM2VwX2lzY3NpX2luZm8tXFx1MDAzZWxvY2spO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmM6Nzg4OlxcdHJjID0gcWVkX2N4dF9hY3F1aXJlX2NpZChwX2h3Zm4sIFBST1RPQ09MSURfVENQX1VMUCwgXFx1MDAyNmljaWQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtNzg5LVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZwX2h3Zm4tXFx1MDAzZXBfaXNjc2lfaW5mby1cXHUwMDNlbG9jayk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9sbDIuYz0xMDIzPXN0YXRpYyBpbnQgcWVkX3NwX2xsMl90eF9xdWV1ZV9zdGFydChzdHJ1Y3QgcWVkX2h3Zm4gKnBfaHdmbixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2xsMi5jLTEwODQtXFx0XFx0YnJlYWs7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbGwyLmM6MTA4NTpcXHRjYXNlIFFFRF9MTDJfVFlQRV9UQ1BfVUxQOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2xsMi5jOjEwODY6XFx0XFx0cF9yYW1yb2QtXFx1MDAzZWNvbm5fdHlwZSA9IFBST1RPQ09MSURfVENQX1VMUDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9sbDIuYy0xMDg3LVxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbGwyLmMtMTA5Ni1cXHRcXHQgICAgcF9od2ZuLVxcdTAwM2Vod19pbmZvLnBlcnNvbmFsaXR5ID09IFFFRF9QQ0lfTlZNRVRDUClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9sbDIuYzoxMDk3OlxcdFxcdFxcdHBfcmFtcm9kLVxcdTAwM2Vjb25uX3R5cGUgPSBQUk9UT0NPTElEX1RDUF9VTFA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbGwyLmMtMTA5OC1cXHRcXHRlbHNlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9sbDIuYz0yNTAwPXN0YXRpYyBpbnQgX19xZWRfbGwyX3N0YXJ0KHN0cnVjdCBxZWRfaHdmbiAqcF9od2ZuLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbGwyLmMtMjUxNC1cXHRjYXNlIFFFRF9QQ0lfTlZNRVRDUDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9sbDIuYzoyNTE1OlxcdFxcdGNvbm5fdHlwZSA9IFFFRF9MTDJfVFlQRV9UQ1BfVUxQO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2xsMi5jLTI1MTYtXFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmM9NDg9c3RhdGljIGludCBxZWRfc3BfbnZtZXRjcF9mdW5jX3N0YXJ0KHN0cnVjdCBxZWRfaHdmbiAqcF9od2ZuLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jLTcwLVxcdFxcdFxcdFxcdCBOVk1FVENQX1JBTVJPRF9DTURfSURfSU5JVF9GVU5DLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX252bWV0Y3AuYzo3MTpcXHRcXHRcXHRcXHQgUFJPVE9DT0xJRF9UQ1BfVUxQLCBcXHUwMDI2aW5pdF9kYXRhKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmMtNzItXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jLTExMi1cXHRwX2h3Zm4tXFx1MDAzZXBfbnZtZXRjcF9pbmZvLVxcdTAwM2VldmVudF9jYiA9IGFzeW5jX2V2ZW50X2NiO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX252bWV0Y3AuYzoxMTM6XFx0cWVkX3NwcV9yZWdpc3Rlcl9hc3luY19jYihwX2h3Zm4sIFBST1RPQ09MSURfVENQX1VMUCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmMtMTE0LVxcdFxcdFxcdFxcdCAgcWVkX252bWV0Y3BfYXN5bmNfZXZlbnQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jPTExOT1zdGF0aWMgaW50IHFlZF9zcF9udm1ldGNwX2Z1bmNfc3RvcChzdHJ1Y3QgcWVkX2h3Zm4gKnBfaHdmbixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX252bWV0Y3AuYy0xMzQtXFx0XFx0XFx0XFx0IE5WTUVUQ1BfUkFNUk9EX0NNRF9JRF9ERVNUUk9ZX0ZVTkMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jOjEzNTpcXHRcXHRcXHRcXHQgUFJPVE9DT0xJRF9UQ1BfVUxQLCBcXHUwMDI2aW5pdF9kYXRhKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmMtMTM2LVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX252bWV0Y3AuYy0xMzktXFx0cmMgPSBxZWRfc3BxX3Bvc3QocF9od2ZuLCBwX2VudCwgTlVMTCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jOjE0MDpcXHRxZWRfc3BxX3VucmVnaXN0ZXJfYXN5bmNfY2IocF9od2ZuLCBQUk9UT0NPTElEX1RDUF9VTFApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX252bWV0Y3AuYy0xNDEtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmM9MjY2PXN0YXRpYyBpbnQgcWVkX3NwX252bWV0Y3BfY29ubl9vZmZsb2FkKHN0cnVjdCBxZWRfaHdmbiAqcF9od2ZuLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jLTI4OC1cXHRcXHRcXHRcXHQgTlZNRVRDUF9SQU1ST0RfQ01EX0lEX09GRkxPQURfQ09OTixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmM6Mjg5OlxcdFxcdFxcdFxcdCBQUk9UT0NPTElEX1RDUF9VTFAsIFxcdTAwMjZpbml0X2RhdGEpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX252bWV0Y3AuYy0yOTAtXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jPTM1Nj1zdGF0aWMgaW50IHFlZF9zcF9udm1ldGNwX2Nvbm5fdXBkYXRlKHN0cnVjdCBxZWRfaHdmbiAqcF9od2ZuLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jLTM3NS1cXHRcXHRcXHRcXHQgTlZNRVRDUF9SQU1ST0RfQ01EX0lEX1VQREFURV9DT05OLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX252bWV0Y3AuYzozNzY6XFx0XFx0XFx0XFx0IFBST1RPQ09MSURfVENQX1VMUCwgXFx1MDAyNmluaXRfZGF0YSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jLTM3Ny1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmM9MzkzPXN0YXRpYyBpbnQgcWVkX3NwX252bWV0Y3BfY29ubl90ZXJtaW5hdGUoc3RydWN0IHFlZF9od2ZuICpwX2h3Zm4sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmMtNDEwLVxcdFxcdFxcdFxcdCBOVk1FVENQX1JBTVJPRF9DTURfSURfVEVSTUlOQVRJT05fQ09OTixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmM6NDExOlxcdFxcdFxcdFxcdCBQUk9UT0NPTElEX1RDUF9VTFAsIFxcdTAwMjZpbml0X2RhdGEpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX252bWV0Y3AuYy00MTItXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jPTQyMj1zdGF0aWMgaW50IHFlZF9zcF9udm1ldGNwX2Nvbm5fY2xlYXJfc3Eoc3RydWN0IHFlZF9od2ZuICpwX2h3Zm4sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmMtNDM4LVxcdFxcdFxcdFxcdCBOVk1FVENQX1JBTVJPRF9DTURfSURfQ0xFQVJfU1EsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jOjQzOTpcXHRcXHRcXHRcXHQgUFJPVE9DT0xJRF9UQ1BfVUxQLCBcXHUwMDI2aW5pdF9kYXRhKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmMtNDQwLVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX252bWV0Y3AuYz01MTg9c3RhdGljIGludCBxZWRfbnZtZXRjcF9hY3F1aXJlX2Nvbm5lY3Rpb24oc3RydWN0IHFlZF9od2ZuICpwX2h3Zm4sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmMtNTI1LVxcdHNwaW5fbG9ja19iaChcXHUwMDI2cF9od2ZuLVxcdTAwM2VwX252bWV0Y3BfaW5mby1cXHUwMDNlbG9jayk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jOjUyNjpcXHRyYyA9IHFlZF9jeHRfYWNxdWlyZV9jaWQocF9od2ZuLCBQUk9UT0NPTElEX1RDUF9VTFAsIFxcdTAwMjZpY2lkKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmMtNTI3LVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZwX2h3Zm4tXFx1MDAzZXBfbnZtZXRjcF9pbmZvLVxcdTAwM2Vsb2NrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX29vby5jPTc2PWludCBxZWRfb29vX2FsbG9jKHN0cnVjdCBxZWRfaHdmbiAqcF9od2ZuKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfb29vLmMtODYtXFx0Y2FzZSBRRURfUENJX05WTUVUQ1A6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfb29vLmM6ODc6XFx0XFx0cHJvdG8gPSBQUk9UT0NPTElEX1RDUF9VTFA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfb29vLmMtODgtXFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9zcF9jb21tYW5kcy5jPTMwMD1pbnQgcWVkX3NwX3BmX3N0YXJ0KHN0cnVjdCBxZWRfaHdmbiAqcF9od2ZuLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfc3BfY29tbWFuZHMuYy0zOTQtXFx0Y2FzZSBRRURfUENJX05WTUVUQ1A6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfc3BfY29tbWFuZHMuYzozOTU6XFx0XFx0cF9yYW1yb2QtXFx1MDAzZXBlcnNvbmFsaXR5ID0gUEVSU09OQUxJVFlfVENQX1VMUDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9zcF9jb21tYW5kcy5jLTM5Ni1cXHRcXHRicmVhaztcXG4tLVxcbmluY2x1ZGUvbGludXgvcWVkL2NvbW1vbl9oc2kuaD02ODE9c3RydWN0IHRjcF91bHBfY29ubmVjdF9kb25lX3BhcmFtcyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3FlZC9jb21tb25faHNpLmgtNjg0LVxcdHU4IGZsYWdzO1xcbmluY2x1ZGUvbGludXgvcWVkL2NvbW1vbl9oc2kuaDo2ODU6I2RlZmluZSBUQ1BfVUxQX0NPTk5FQ1RfRE9ORV9QQVJBTVNfVFNfRU5fTUFTS1xcdFxcdDB4MVxcbmluY2x1ZGUvbGludXgvcWVkL2NvbW1vbl9oc2kuaDo2ODY6I2RlZmluZSBUQ1BfVUxQX0NPTk5FQ1RfRE9ORV9QQVJBTVNfVFNfRU5fU0hJRlRcXHRcXHQwXFxuaW5jbHVkZS9saW51eC9xZWQvY29tbW9uX2hzaS5oOjY4NzojZGVmaW5lIFRDUF9VTFBfQ09OTkVDVF9ET05FX1BBUkFNU19SRVNFUlZFRF9NQVNLXFx0MHg3RlxcbmluY2x1ZGUvbGludXgvcWVkL2NvbW1vbl9oc2kuaDo2ODg6I2RlZmluZSBUQ1BfVUxQX0NPTk5FQ1RfRE9ORV9QQVJBTVNfUkVTRVJWRURfU0hJRlRcXHQxXFxuaW5jbHVkZS9saW51eC9xZWQvY29tbW9uX2hzaS5oLTY4OS19O1xcbi0tXFxuaW5jbHVkZS9saW51eC9xZWQvY29tbW9uX2hzaS5oPTcyNz1lbnVtIHByb3RvY29sX3R5cGUge1xcbmluY2x1ZGUvbGludXgvcWVkL2NvbW1vbl9oc2kuaDo3Mjg6XFx0UFJPVE9DT0xJRF9UQ1BfVUxQLFxcbmluY2x1ZGUvbGludXgvcWVkL2NvbW1vbl9oc2kuaC03MjktXFx0UFJPVE9DT0xJRF9GQ09FLFxcbi0tXFxuaW5jbHVkZS9saW51eC9xZWQvcWVkX2xsMl9pZi5oPTE5PWVudW0gcWVkX2xsMl9jb25uX3R5cGUge1xcbmluY2x1ZGUvbGludXgvcWVkL3FlZF9sbDJfaWYuaC0yMC1cXHRRRURfTEwyX1RZUEVfRkNPRSxcXG5pbmNsdWRlL2xpbnV4L3FlZC9xZWRfbGwyX2lmLmg6MjE6XFx0UUVEX0xMMl9UWVBFX1RDUF9VTFAsXFxuaW5jbHVkZS9saW51eC9xZWQvcWVkX2xsMl9pZi5oLTIyLVxcdFFFRF9MTDJfVFlQRV9URVNULFxcbi0tXFxuaW5jbHVkZS9uZXQvdGNwLmg9Mjc5OD1lbnVtIGhydGltZXJfcmVzdGFydCB0Y3BfcGFjZV9raWNrKHN0cnVjdCBocnRpbWVyICp0aW1lcik7XFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaC0yODAzLVxcbmluY2x1ZGUvbmV0L3RjcC5oOjI4MDQ6I2RlZmluZSBUQ1BfVUxQX05BTUVfTUFYXFx0MTZcXG5pbmNsdWRlL25ldC90Y3AuaDoyODA1OiNkZWZpbmUgVENQX1VMUF9NQVhcXHRcXHQxMjhcXG5pbmNsdWRlL25ldC90Y3AuaDoyODA2OiNkZWZpbmUgVENQX1VMUF9CVUZfTUFYXFx0XFx0KFRDUF9VTFBfTkFNRV9NQVgqVENQX1VMUF9NQVgpXFxuaW5jbHVkZS9uZXQvdGNwLmgtMjgwNy1cXG5pbmNsdWRlL25ldC90Y3AuaD0yODA4PXN0cnVjdCB0Y3BfdWxwX29wcyB7XFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaC0yODI0LVxcbmluY2x1ZGUvbmV0L3RjcC5oOjI4MjU6XFx0Y2hhclxcdFxcdG5hbWVbVENQX1VMUF9OQU1FX01BWF07XFxuaW5jbHVkZS9uZXQvdGNwLmgtMjgyNi1cXHRzdHJ1Y3QgbW9kdWxlXFx0Km93bmVyO1xcbi0tXFxuaW5jbHVkZS9uZXQvdGNwLmg9MjgzMz12b2lkIHRjcF91cGRhdGVfdWxwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHByb3RvICpwLFxcbi0tXFxuaW5jbHVkZS9uZXQvdGNwLmgtMjgzNS1cXG5pbmNsdWRlL25ldC90Y3AuaDoyODM2OiNkZWZpbmUgTU9EVUxFX0FMSUFTX1RDUF9VTFAobmFtZSlcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9uZXQvdGNwLmgtMjgzNy1cXHRNT0RVTEVfSU5GTyhhbGlhcywgbmFtZSk7XFx0XFx0XFxcXFxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oPTc0PWVudW0ge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oLTEyMy0jZGVmaW5lIFRDUF9GQVNUT1BFTl9DT05ORUNUXFx0MzBcXHQvKiBBdHRlbXB0IEZhc3RPcGVuIHdpdGggY29ubmVjdCAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC90Y3AuaDoxMjQ6I2RlZmluZSBUQ1BfVUxQXFx0XFx0XFx0MzFcXHQvKiBBdHRhY2ggYSBVTFAgdG8gYSBUQ1AgY29ubmVjdGlvbiAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC90Y3AuaC0xMjUtI2RlZmluZSBUQ1BfTUQ1U0lHX0VYVFxcdFxcdDMyXFx0LyogVENQIE1ENSBTaWduYXR1cmUgd2l0aCBleHRlbnNpb25zICovXFxuLS1cXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYz0zNzc9c3RhdGljIGludCBwcm9jX3RjcF9hdmFpbGFibGVfdWxwKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCxcXG4tLVxcbm5ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jLTM4MC17XFxubmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmM6MzgxOlxcdHN0cnVjdCBjdGxfdGFibGUgdGJsID0geyAubWF4bGVuID0gVENQX1VMUF9CVUZfTUFYLCB9O1xcbm5ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jLTM4Mi1cXHRpbnQgcmV0O1xcbi0tXFxubmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMtMzg2LVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm5ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jOjM4NzpcXHR0Y3BfZ2V0X2F2YWlsYWJsZV91bHAodGJsLmRhdGEsIFRDUF9VTFBfQlVGX01BWCk7XFxubmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMtMzg4LVxcdHJldCA9IHByb2NfZG9zdHJpbmcoXFx1MDAyNnRibCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7XFxuLS1cXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYz01MzA9c3RhdGljIHN0cnVjdCBjdGxfdGFibGUgaXB2NF90YWJsZVtdID0ge1xcbi0tXFxubmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMtNjA0LVxcdFxcdC5wcm9jbmFtZVxcdD0gXFxcInRjcF9hdmFpbGFibGVfdWxwXFxcIixcXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYzo2MDU6XFx0XFx0Lm1heGxlblxcdFxcdD0gVENQX1VMUF9CVUZfTUFYLFxcbm5ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jLTYwNi1cXHRcXHQubW9kZVxcdFxcdD0gMDQ0NCxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTM4MzY9aW50IGRvX3RjcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTM4NjUtXFx0fVxcbm5ldC9pcHY0L3RjcC5jOjM4NjY6XFx0Y2FzZSBUQ1BfVUxQOiB7XFxubmV0L2lwdjQvdGNwLmM6Mzg2NzpcXHRcXHRjaGFyIG5hbWVbVENQX1VMUF9OQU1FX01BWF07XFxubmV0L2lwdjQvdGNwLmMtMzg2OC1cXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTM4NzItXFx0XFx0dmFsID0gc3RybmNweV9mcm9tX3NvY2twdHIobmFtZSwgb3B0dmFsLFxcbm5ldC9pcHY0L3RjcC5jOjM4NzM6XFx0XFx0XFx0XFx0XFx0bWluX3QobG9uZywgVENQX1VMUF9OQU1FX01BWCAtIDEsXFxubmV0L2lwdjQvdGNwLmMtMzg3NC1cXHRcXHRcXHRcXHRcXHQgICAgICBvcHRsZW4pKTtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTQ0ODA9aW50IGRvX3RjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtNDU5Ny1cXHR9XFxubmV0L2lwdjQvdGNwLmM6NDU5ODpcXHRjYXNlIFRDUF9VTFA6XFxubmV0L2lwdjQvdGNwLmMtNDU5OS1cXHRcXHRpZiAoY29weV9mcm9tX3NvY2twdHIoXFx1MDAyNmxlbiwgb3B0bGVuLCBzaXplb2YoaW50KSkpXFxubmV0L2lwdjQvdGNwLmMtNDYwMC1cXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG5uZXQvaXB2NC90Y3AuYzo0NjAxOlxcdFxcdGxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuLCBUQ1BfVUxQX05BTUVfTUFYKTtcXG5uZXQvaXB2NC90Y3AuYy00NjAyLVxcdFxcdGlmICghaWNzay1cXHUwMDNlaWNza191bHBfb3BzKSB7XFxuLS1cXG5uZXQvaXB2NC90Y3BfZGlhZy5jPTE0Nj1zdGF0aWMgc2l6ZV90IHRjcF9kaWFnX2dldF9hdXhfc2l6ZShzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgbmV0X2FkbWluKVxcbi0tXFxubmV0L2lwdjQvdGNwX2RpYWcuYy0xNzQtXFx0XFx0XFx0c2l6ZSArPSBubGFfdG90YWxfc2l6ZSgwKSArXFxubmV0L2lwdjQvdGNwX2RpYWcuYzoxNzU6XFx0XFx0XFx0XFx0bmxhX3RvdGFsX3NpemUoVENQX1VMUF9OQU1FX01BWCk7XFxubmV0L2lwdjQvdGNwX2RpYWcuYy0xNzYtXFx0XFx0XFx0aWYgKHVscF9vcHMtXFx1MDAzZWdldF9pbmZvX3NpemUpXFxuLS1cXG5uZXQvbXB0Y3Avc29ja29wdC5jPTgzMz1zdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfc29sX3RjcChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtODM5LVxcdHN3aXRjaCAob3B0bmFtZSkge1xcbm5ldC9tcHRjcC9zb2Nrb3B0LmM6ODQwOlxcdGNhc2UgVENQX1VMUDpcXG5uZXQvbXB0Y3Avc29ja29wdC5jLTg0MS1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbXB0Y3Avc29ja29wdC5jPTE0MTE9c3RhdGljIGludCBtcHRjcF9nZXRzb2Nrb3B0X3NvbF90Y3Aoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvbXB0Y3Avc29ja29wdC5jLTE0MTYtXFx0c3dpdGNoIChvcHRuYW1lKSB7XFxubmV0L21wdGNwL3NvY2tvcHQuYzoxNDE3OlxcdGNhc2UgVENQX1VMUDpcXG5uZXQvbXB0Y3Avc29ja29wdC5jLTE0MTgtXFx0Y2FzZSBUQ1BfQ09OR0VTVElPTjpcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9MzA4ND1pbnQgc21jX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMzA5MC1cXG5uZXQvc21jL2FmX3NtYy5jOjMwOTE6XFx0aWYgKGxldmVsID09IFNPTF9UQ1AgXFx1MDAyNlxcdTAwMjYgb3B0bmFtZSA9PSBUQ1BfVUxQKVxcbm5ldC9zbWMvYWZfc21jLmMtMzA5Mi1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmM9NTA9TU9EVUxFX0xJQ0VOU0UoXFxcIkR1YWwgQlNEL0dQTFxcXCIpO1xcbm5ldC90bHMvdGxzX21haW4uYzo1MTpNT0RVTEVfQUxJQVNfVENQX1VMUChcXFwidGxzXFxcIik7XFxubmV0L3Rscy90bHNfbWFpbi5jLTUyLVxcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oPTcyPWVudW0geyBcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC90Y3AuaC0xMjAtI2RlZmluZSBUQ1BfRkFTVE9QRU5fQ09OTkVDVFxcdDMwXFx0LyogQXR0ZW1wdCBGYXN0T3BlbiB3aXRoIGNvbm5lY3QgKi9cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvdGNwLmg6MTIxOiNkZWZpbmUgVENQX1VMUFxcdFxcdFxcdDMxXFx0LyogQXR0YWNoIGEgVUxQIHRvIGEgVENQIGNvbm5lY3Rpb24gKi9cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvdGNwLmgtMTIyLSNkZWZpbmUgVENQX01ENVNJR19FWFRcXHRcXHQzMlxcdC8qIFRDUCBNRDUgU2lnbmF0dXJlIHdpdGggZXh0ZW5zaW9ucyAqL1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2V0Z2V0X3NvY2tvcHQuYz04Nz1zdGF0aWMgdm9pZCB0ZXN0X2t0bHMoaW50IGZhbWlseSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NldGdldF9zb2Nrb3B0LmMtMTExLVxcdC8qIFNldHVwIEtUTFMgKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZXRnZXRfc29ja29wdC5jOjExMjpcXHRyZXQgPSBzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX1RDUCwgVENQX1VMUCwgXFxcInRsc1xcXCIsIHNpemVvZihcXFwidGxzXFxcIikpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NldGdldF9zb2Nrb3B0LmMtMTEzLVxcdGlmICghQVNTRVJUX09LKHJldCwgXFxcInNldHNvY2tvcHRcXFwiKSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZXRnZXRfc29ja29wdC5jLTExNC1cXHRcXHRnb3RvIGVycl9vdXQ7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2V0Z2V0X3NvY2tvcHQuYzoxMTU6XFx0cmV0ID0gc2V0c29ja29wdChjZmQsIElQUFJPVE9fVENQLCBUQ1BfVUxQLCBcXFwidGxzXFxcIiwgc2l6ZW9mKFxcXCJ0bHNcXFwiKSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2V0Z2V0X3NvY2tvcHQuYy0xMTYtXFx0aWYgKCFBU1NFUlRfT0socmV0LCBcXFwic2V0c29ja29wdFxcXCIpKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9rdGxzLmMtMTMtI2RlZmluZSBNQVhfVEVTVF9OQU1FIDgwXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9rdGxzLmM6MTQ6I2RlZmluZSBUQ1BfVUxQIDMxXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9rdGxzLmMtMTUtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9rdGxzLmM9MTY9c3RhdGljIGludCBpbml0X2t0bHNfcGFpcnMoaW50IGMsIGludCBwKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9rdGxzLmMtMjEtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9rdGxzLmM6MjI6XFx0ZXJyID0gc2V0c29ja29wdChjLCBJUFBST1RPX1RDUCwgVENQX1VMUCwgXFxcInRsc1xcXCIsIHN0cmxlbihcXFwidGxzXFxcIikpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfa3Rscy5jOjIzOlxcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInNldHNvY2tvcHQoVENQX1VMUClcXFwiKSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2t0bHMuYy0yNC1cXHRcXHRnb3RvIG91dDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2t0bHMuYy0yNS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2t0bHMuYzoyNjpcXHRlcnIgPSBzZXRzb2Nrb3B0KHAsIElQUFJPVE9fVENQLCBUQ1BfVUxQLCBcXFwidGxzXFxcIiwgc3RybGVuKFxcXCJ0bHNcXFwiKSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9rdGxzLmM6Mjc6XFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwic2V0c29ja29wdChUQ1BfVUxQKVxcXCIpKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfa3Rscy5jLTI4LVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9rdGxzLmM9NjM9c3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX2t0bHNfdXBkYXRlX2ZhaWxzX3doZW5fc29ja19oYXNfdWxwKGludCBmYW1pbHksIGludCBtYXApXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2t0bHMuYy0xMDEtXFx0Lyogc2F2ZSBzay1cXHUwMDNlc2tfcHJvdCBhbmQgc2V0IGl0IHRvIHRsc19wcm90cyAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfa3Rscy5jOjEwMjpcXHRlcnIgPSBzZXRzb2Nrb3B0KHMsIElQUFJPVE9fVENQLCBUQ1BfVUxQLCBcXFwidGxzXFxcIiwgc3RybGVuKFxcXCJ0bHNcXFwiKSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9rdGxzLmM6MTAzOlxcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInNldHNvY2tvcHQoVENQX1VMUClcXFwiKSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2t0bHMuYy0xMDQtXFx0XFx0Z290byBjbG9zZTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfa3Rscy5jPTExOT1zdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXBfa3Rsc19lbmFibGVfZmFpbHNfd2hlbl9pbl9zb2NrbWFwKGludCBmYW1pbHksIGludCBtYXApXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2t0bHMuYy0xNjgtXFx0LyogSW5zdGFsbGluZyB0aGUgVExTIFVMUCBpcyBhbGxvd2VkLCBpdCBkb2VzIG5vdCB0b3VjaCB0aGUgZGF0YXBhdGguICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9rdGxzLmM6MTY5OlxcdGVyciA9IHNldHNvY2tvcHQocywgSVBQUk9UT19UQ1AsIFRDUF9VTFAsIFxcXCJ0bHNcXFwiLCBzdHJsZW4oXFxcInRsc1xcXCIpKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2t0bHMuYzoxNzA6XFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwic2V0c29ja29wdChUQ1BfVUxQKVxcXCIpKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfa3Rscy5jLTE3MS1cXHRcXHRnb3RvIGNsb3NlO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5PTI0PWZyb20gbGliLnB5IGltcG9ydCBpcFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS0yNS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk6MjY6VENQX1VMUCA9IDMxXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTI3LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5PTMzOD1kZWYgX3JlcXVpcmVfdGxzX3VscCgpOlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTM0MS0gICAgICAgICAgICB0cnk6XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5OjM0MjogICAgICAgICAgICAgICAgcy5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfVENQLCBUQ1BfVUxQLCBiXFxcInRsc1xcXCIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTM0My0gICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk9MzQ3PWRlZiBhc3NvY19wc3BfdWxwX2V4Y2x1c2l2ZShjZmcpOlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTM1Ny0gICAgICAgICAgICB3aXRoIGtzZnRfcmFpc2VzKE9TRXJyb3IpIGFzIGNtOlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weTozNTg6ICAgICAgICAgICAgICAgIHMuc2V0c29ja29wdChzb2NrZXQuU09MX1RDUCwgVENQX1VMUCwgYlxcXCJ0bHNcXFwiKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS0zNTktICAgICAgICAgICAga3NmdF9lcShjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVJTlZBTClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weT0zNjQ9ZGVmIGFzc29jX3VscF9wc3BfZXhjbHVzaXZlKGNmZyk6XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHktMzcwLSAgICAgICAgdHJ5OlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weTozNzE6ICAgICAgICAgICAgcy5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfVENQLCBUQ1BfVUxQLCBiXFxcInRsc1xcXCIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTM3Mi0gICAgICAgICAgICB3aXRoIGtzZnRfcmFpc2VzKE5sRXJyb3IpIGFzIGNtOlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2dldHNvY2tvcHRfaXRlci5jLTU0LSNlbmRpZlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9nZXRzb2Nrb3B0X2l0ZXIuYzo1NTojaWZuZGVmIFRDUF9VTFBcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZ2V0c29ja29wdF9pdGVyLmM6NTY6I2RlZmluZSBUQ1BfVUxQIDMxXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2dldHNvY2tvcHRfaXRlci5jLTU3LSNlbmRpZlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2dldHNvY2tvcHRfaXRlci5jPTUwMz1GSVhUVVJFX1NFVFVQKHRscylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9nZXRzb2Nrb3B0X2l0ZXIuYy01MzMtXFx0Y2xvc2UobGZkKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZ2V0c29ja29wdF9pdGVyLmM6NTM0OlxcdGlmIChzZXRzb2Nrb3B0KHNlbGYtXFx1MDAzZWZkLCBJUFBST1RPX1RDUCwgVENQX1VMUCwgXFxcInRsc1xcXCIsIHNpemVvZihcXFwidGxzXFxcIikpKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9nZXRzb2Nrb3B0X2l0ZXIuYzo1MzU6XFx0XFx0U0tJUChyZXR1cm4sIFxcXCJUQ1BfVUxQPXRsczogJXMgKGJ1aWx0IHdpdGhvdXQgVExTPylcXFwiLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9nZXRzb2Nrb3B0X2l0ZXIuYy01MzYtXFx0XFx0ICAgICBzdHJlcnJvcihlcnJubykpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3QuYz0zOD1leHRlcm4gaW50IG9wdGluZDtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9jb25uZWN0LmMtNDItI2VuZGlmXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3QuYzo0MzojaWZuZGVmIFRDUF9VTFBcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5jOjQ0OiNkZWZpbmUgVENQX1VMUCAzMVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9jb25uZWN0LmMtNDUtI2VuZGlmXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5jPTI3MD1zdGF0aWMgaW50IGRvX3VscF9zbyhpbnQgc29jaywgY29uc3QgY2hhciAqbmFtZSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5jLTI3MS17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3QuYzoyNzI6XFx0cmV0dXJuIHNldHNvY2tvcHQoc29jaywgSVBQUk9UT19UQ1AsIFRDUF9VTFAsIG5hbWUsIHN0cmxlbihuYW1lKSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3QuYy0yNzMtfVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3QuYz0yNzY9c3RhdGljIHZvaWQgc29ja190ZXN0X3RjcHVscChpbnQgc29jaywgaW50IHByb3RvLCB1bnNpZ25lZCBpbnQgbGluZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9jb25uZWN0LmMtMjc5LVxcdGNoYXIgYnVmWzhdID0gXFxcIlxcXCI7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3QuYzoyODA6XFx0aW50IHJldCA9IGdldHNvY2tvcHQoc29jaywgSVBQUk9UT19UQ1AsIFRDUF9VTFAsIGJ1ZiwgXFx1MDAyNmJ1Zmxlbik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3QuYy0yODEtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmM9MTEyPXN0YXRpYyB2b2lkIHVscF9zb2NrX3BhaXIoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jLTE0NC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmM6MTQ1OlxcdHJldCA9IHNldHNvY2tvcHQoKmZkLCBJUFBST1RPX1RDUCwgVENQX1VMUCwgXFxcInRsc1xcXCIsIHNpemVvZihcXFwidGxzXFxcIikpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYy0xNDYtXFx0aWYgKHJldCAhPSAwKSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmMtMTQ4LVxcdFxcdCpub3RscyA9IHRydWU7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jOjE0OTpcXHRcXHRwcmludGYoXFxcIkZhaWx1cmUgc2V0dGluZyBUQ1BfVUxQLCB0ZXN0aW5nIHdpdGhvdXQgdGxzXFxcXG5cXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmMtMTUwLVxcdFxcdHJldHVybjtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYy0xNTItXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jOjE1MzpcXHRyZXQgPSBzZXRzb2Nrb3B0KCpjZmQsIElQUFJPVE9fVENQLCBUQ1BfVUxQLCBcXFwidGxzXFxcIiwgc2l6ZW9mKFxcXCJ0bHNcXFwiKSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jLTE1NC1cXHRBU1NFUlRfRVEocmV0LCAwKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYz0zMTk4PVRFU1Qobm9uX2VzdGFibGlzaGVkKSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmMtMzIyMS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmM6MzIyMjpcXHRyZXQgPSBzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX1RDUCwgVENQX1VMUCwgXFxcInRsc1xcXCIsIHNpemVvZihcXFwidGxzXFxcIikpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYy0zMjIzLVxcdEVYUEVDVF9FUShyZXQsIC0xKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYy0zMjI4LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYzozMjI5OlxcdHJldCA9IHNldHNvY2tvcHQoc2ZkLCBJUFBST1RPX1RDUCwgVENQX1VMUCwgXFxcInRsc1xcXCIsIHNpemVvZihcXFwidGxzXFxcIikpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYy0zMjMwLVxcdEVYUEVDVF9FUShyZXQsIC0xKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYy0zMjM4LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYzozMjM5OlxcdHJldCA9IHNldHNvY2tvcHQoZmQsIElQUFJPVE9fVENQLCBUQ1BfVUxQLCBcXFwidGxzXFxcIiwgc2l6ZW9mKFxcXCJ0bHNcXFwiKSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jLTMyNDAtXFx0QVNTRVJUX0VRKHJldCwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jLTMyNDEtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jOjMyNDI6XFx0cmV0ID0gc2V0c29ja29wdChmZCwgSVBQUk9UT19UQ1AsIFRDUF9VTFAsIFxcXCJ0bHNcXFwiLCBzaXplb2YoXFxcInRsc1xcXCIpKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmMtMzI0My1cXHRFWFBFQ1RfRVEocmV0LCAtMSk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmM9MzMyNj1URVNUKHRsc192Nm9wcykge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jLTMzNTYtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jOjMzNTc6XFx0cmV0ID0gc2V0c29ja29wdChmZCwgSVBQUk9UT19UQ1AsIFRDUF9VTFAsIFxcXCJ0bHNcXFwiLCBzaXplb2YoXFxcInRsc1xcXCIpKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmMtMzM1OC1cXHRpZiAocmV0KSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmM9MzM4MT1URVNUKHByZXF1ZXVlKSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmMtMzQwNi1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmM6MzQwNzpcXHRyZXQgPSBzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX1RDUCwgVENQX1VMUCwgXFxcInRsc1xcXCIsIHNpemVvZihcXFwidGxzXFxcIikpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYy0zNDA4LVxcdGlmIChyZXQpIHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYy0zNDE1LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYzozNDE2OlxcdEFTU0VSVF9FUShzZXRzb2Nrb3B0KGNmZCwgSVBQUk9UT19UQ1AsIFRDUF9VTFAsIFxcXCJ0bHNcXFwiLCBzaXplb2YoXFxcInRsc1xcXCIpKSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jLTM0MTctXFx0QVNTRVJUX0VRKHNldHNvY2tvcHQoY2ZkLCBTT0xfVExTLCBUTFNfUlgsIFxcdTAwMjZ0bHMxMiwgdGxzMTIubGVuKSwgMCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmM9MzQyNj1URVNUKGRhdGFfc3RlYWwpIHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYy0zNDUyLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYzozNDUzOlxcdHJldCA9IHNldHNvY2tvcHQoZmQsIElQUFJPVE9fVENQLCBUQ1BfVUxQLCBcXFwidGxzXFxcIiwgc2l6ZW9mKFxcXCJ0bHNcXFwiKSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jLTM0NTQtXFx0aWYgKHJldCkge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jLTM0NTctXFx0fVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYzozNDU4OlxcdEFTU0VSVF9FUShzZXRzb2Nrb3B0KGNmZCwgSVBQUk9UT19UQ1AsIFRDUF9VTFAsIFxcXCJ0bHNcXFwiLCBzaXplb2YoXFxcInRsc1xcXCIpKSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jLTM0NTktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjQ0OjAwLjAyNTYxNjFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA3NDc2MDcxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIFRMUyBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhpcy4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBUTFMgaXMgY3VycmVudGx5IGhhbmRsZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIExldCdzIHN0YXJ0IHdpdGggYSBjaGVjayBvZiBgQ09ORklHX1RMU2Agd2l0aGluIHRoZSBLY29uZmlnIGZpbGVzLiBUaGlzIGlzIG15IGdvLXRvIHN0YXJ0aW5nIHBvaW50IHdoZW4gaW52ZXN0aWdhdGluZyBUTFMgZnVuY3Rpb25hbGl0eS4gSXQgd2lsbCBnaXZlIG1lIGEgYmFzZSB0byBzZWUgaWYgaXQncyBldmVuIGVuYWJsZWQgdG8gYmVnaW4gd2l0aC4gRnJvbSB0aGVyZSwgSSBjYW4gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gVExTIHRoYXQgYXJlIHByZXNlbnQsIGFuZCBxdWlja2x5IG1vdmUgdG8gdW5kZXJzdGFuZGluZyB3aGF0IGRlcGVuZGVuY2llcywgaWYgYW55LCBhcmUgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NjY5LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6NDQ6MDIuMTAwMzgwMDI3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTg5NjMzOTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUTFNcXFxcYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGxzL0tjb25maWctNC0jXFxubmV0L3Rscy9LY29uZmlnOjU6Y29uZmlnIFRMU1xcbm5ldC90bHMvS2NvbmZpZy02LVxcdHRyaXN0YXRlIFxcXCJUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6NDQ6MDQuMjkwMDE5NzQ1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMjkxNTAyNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipFeGFtaW5pbmcgdGhlIFRMUyBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJMZXQncyBjaGVjayBgbmV0L3Rscy9LY29uZmlnYC5cIiBHaXZlbiBteSBleHBlcnRpc2UsIEkga25vdyB0aGlzIGlzIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgd2hlbiBleGFtaW5pbmcgYW55IFRMUy1yZWxhdGVkIGNvbmZpZ3VyYXRpb24gd2l0aGluIHRoaXMgcHJvamVjdC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUsIHdoYXQgZGVmYXVsdHMgYXJlIHNldCwgYW5kIGhvdyBkaWZmZXJlbnQgZmVhdHVyZXMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuIFRoaXMgYEtjb25maWdgIGZpbGUgaXMgdGhlIGNlbnRyYWwgc291cmNlIG9mIHRydXRoIGZvciB0aGUgVExTIGJ1aWxkIGNvbmZpZ3VyYXRpb24sIGFuZCBpdCdsbCBnaXZlIG1lIHRoZSBsYXkgb2YgdGhlIGxhbmQgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIuIEknbSBleHBlY3RpbmcgdG8gZmluZCBkZXRhaWxzIG9uIHRoaW5ncyBsaWtlIHN1cHBvcnRlZCBjaXBoZXJzdWl0ZXMsIGtleSBleGNoYW5nZSBhbGdvcml0aG1zLCBhbmQgYW55IGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBvcHRpb25zLiBIb3BlZnVsbHksIHRoZSBmaWxlIGlzIHdlbGwtZG9jdW1lbnRlZCwgYWxsb3dpbmcgZm9yIGEgc3dpZnQgcmV2aWV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzg4NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjQ0OjA2LjQxOTE3MzE3NFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdGxzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgVExTIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdGNvbmZpZyBUTFNcXG4gICA2OlxcdFxcdHRyaXN0YXRlIFxcXCJUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgc3VwcG9ydFxcXCJcXG4gICA3OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgIDg6XFx0XFx0c2VsZWN0IENSWVBUT1xcbiAgIDk6XFx0XFx0c2VsZWN0IENSWVBUT19BRVNcXG4gIDEwOlxcdFxcdHNlbGVjdCBDUllQVE9fR0NNXFxuICAxMTpcXHRcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxuICAxMjpcXHRcXHRkZWZhdWx0IG5cXG4gIDEzOlxcdFxcdGhlbHBcXG4gIDE0OlxcdFxcdEVuYWJsZSBrZXJuZWwgc3VwcG9ydCBmb3IgVExTIHByb3RvY29sLiBUaGlzIGFsbG93cyBzeW1tZXRyaWNcXG4gIDE1OlxcdFxcdGVuY3J5cHRpb24gaGFuZGxpbmcgb2YgdGhlIFRMUyBwcm90b2NvbCB0byBiZSBkb25lIGluLWtlcm5lbC5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0XFx0SWYgdW5zdXJlLCBzYXkgTi5cXG4gIDE4OlxcdFxcbiAgMTk6XFx0Y29uZmlnIFRMU19ERVZJQ0VcXG4gIDIwOlxcdFxcdGJvb2wgXFxcIlRyYW5zcG9ydCBMYXllciBTZWN1cml0eSBIVyBvZmZsb2FkXFxcIlxcbiAgMjE6XFx0XFx0ZGVwZW5kcyBvbiBUTFNcXG4gIDIyOlxcdFxcdHNlbGVjdCBTS0JfREVDUllQVEVEXFxuICAyMzpcXHRcXHRzZWxlY3QgU09DS19WQUxJREFURV9YTUlUXFxuICAyNDpcXHRcXHRzZWxlY3QgU09DS19SWF9RVUVVRV9NQVBQSU5HXFxuICAyNTpcXHRcXHRkZWZhdWx0IG5cXG4gIDI2OlxcdFxcdGhlbHBcXG4gIDI3OlxcdFxcdEVuYWJsZSBrZXJuZWwgc3VwcG9ydCBmb3IgSFcgb2ZmbG9hZCBvZiB0aGUgVExTIHByb3RvY29sLlxcbiAgMjg6XFx0XFxuICAyOTpcXHRcXHRJZiB1bnN1cmUsIHNheSBOLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMDo0NDowNi40MTkyMzA5ODRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDU2MDUzMTA1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQ2hlY2tpbmcgYENPTkZJR19ORVRERVZTSU1gIGluIEtjb25maWcqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIHJpZ2h0IGluLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgQ09ORklHX05FVERFVlNJTWAgd2l0aGluIHRoZSBLY29uZmlnIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEknbSBpbW1lZGlhdGVseSB0aGlua2luZyB3ZSBuZWVkIHRvIGRldGVybWluZSBpdHMgY3VycmVudCBzdGF0ZSBhbmQgYXNzb2NpYXRlZCBkZXBlbmRlbmNpZXMuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCB0aGlzIG1hY3JvIGlzIGxpa2VseSBhIGNyaXRpY2FsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgZW5hYmxlcyBvciBkaXNhYmxlcyBzb21lIG5ldHdvcmsgZGV2aWNlIHNpbXVsYXRpb24gZnVuY3Rpb25hbGl0eS4gRGVwZW5kaW5nIG9uIGl0cyBzdGF0dXMsIGl0IGNvdWxkIGluZmx1ZW5jZSBhIHdpZGUgcmFuZ2Ugb2Ygb3RoZXIgZmVhdHVyZXMgYW5kIG1vZHVsZXMgd2l0aGluIHRoZSBrZXJuZWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3QuIFdoZXJlIGlzIGl0IGRlZmluZWQsIHdoYXQgb3RoZXIgc2V0dGluZ3MgZGVwZW5kIG9uIGl0LCBhbmQgd2hhdCBkb2VzIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdCBhY3R1YWxseSBkbyBpbiBwcmFjdGljYWwgdGVybXM/IFRpbWUgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBLY29uZmlnIHN0cnVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg0MzIsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjQ0OjEwLjk3OTc2NDk5M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0Njg5MjMzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUREVWU0lNXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9NjAyPXNvdXJjZSBcXFwiZHJpdmVycy9uZXQvaHlwZXJ2L0tjb25maWdcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZy02MDMtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo2MDQ6Y29uZmlnIE5FVERFVlNJTVxcbmRyaXZlcnMvbmV0L0tjb25maWctNjA1LVxcdHRyaXN0YXRlIFxcXCJTaW11bGF0ZWQgbmV0d29ya2luZyBkZXZpY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjQ0OjEyLjQyNjY2Mjg1N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTY4NDQwODM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgU29ja2V0IEFzc29jaWF0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzIHNvY2tldCBhc3NvY2lhdGlvbiBpc3N1ZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBzdGF0dXMgdXNpbmcgYGluZXRfY3NrX2hhc191bHAoc2spYCBhbmQgYHBzcF9za19hc3NvYyhzaylgLiBUaG9zZSBzZWVtIGxpa2UgdGhlIGtleSBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGUgVXNlci1MZXZlbCBQcm90b2NvbCBhbmQgdGhlIFBlcmZvcm1hbmNlLVNlbnNpdGl2ZSBQcm90b2NvbCBhc3NvY2lhdGlvbiwgcmVzcGVjdGl2ZWx5LiBNeSBndXQgdGVsbHMgbWUgdGhlc2UgYXJlIGNlbnRyYWwgdG8gdGhlIGlzc3VlLiBCZWZvcmUgSSBnbyB0b28gZGVlcCwgSSBuZWVkIHRvIGtub3cgd2hlcmUgdGhlc2UgYXJlIGRlZmluZWQuIEknbGwgbmVlZCB0byBjb25maXJtIHRoZSBkZWZpbml0aW9ucyBhbmQgd2hhdCB0aGUgYXNzb2NpYXRlZCBoZWFkZXJzIGFyZS4gU28sIGEgcXVpY2sgYGdyZXBgIGlzIGluIG9yZGVyLiBMZXQncyBzZWUgd2hhdCB0aGUgaW5jbHVkZXMgYXJlLCBhbmQgd2hpY2ggZmlsZXMgY29udGFpbiB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9ucy4gVGhpcyB3aWxsIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBjb250ZXh0LiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byByZWFzb24gYWJvdXQgaG93IHRoZXNlIGZ1bmN0aW9ucyByZWxhdGUgdG8gdGhlIGN1cnJlbnQgcHJvYmxlbS4gVGhhdCdzIHRoZSBmaXJzdCBzdG9wLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODcxMywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjQ0OjE1Ljk5NTExODQzMVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4NDE5MjgwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbmV0X2Nza19oYXNfdWxwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmg9MzM4PXN0YXRpYyBpbmxpbmUgdm9pZCBpbmV0X2Nza19pbmNfcGluZ3BvbmdfY250KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbmluY2x1ZGUvbmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmgtMzQ1LVxcbmluY2x1ZGUvbmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmg6MzQ2OnN0YXRpYyBpbmxpbmUgYm9vbCBpbmV0X2Nza19oYXNfdWxwKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG5pbmNsdWRlL25ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oLTM0Ny17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTc1MD1zdHJ1Y3Qgc2tfcHNvY2sgKnNrX3Bzb2NrX2luaXQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbm9kZSlcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtNzU2LVxcbm5ldC9jb3JlL3NrbXNnLmM6NzU3OlxcdGlmIChza19pc19pbmV0KHNrKSBcXHUwMDI2XFx1MDAyNiBpbmV0X2Nza19oYXNfdWxwKHNrKSkge1xcbm5ldC9jb3JlL3NrbXNnLmMtNzU4LVxcdFxcdHBzb2NrID0gRVJSX1BUUigtRUlOVkFMKTtcXG4tLVxcbm5ldC9jb3JlL3NvY2suYz0yNjc0PWJvb2wgc2tfaGFzX2RlY3J5cHRfdXNlcihjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvY29yZS9zb2NrLmMtMjY3Ni1cXHRyZXR1cm4gcHNwX3NrX2Fzc29jKHNrKSB8fFxcbm5ldC9jb3JlL3NvY2suYzoyNjc3OlxcdCAgICAgICAoc2tfaXNfaW5ldChzaykgXFx1MDAyNlxcdTAwMjYgaW5ldF9jc2tfaGFzX3VscChzaykpOyAvKiBmb3IgdGxzICovXFxubmV0L2NvcmUvc29jay5jLTI2NzgtfVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTcyNT1pbnQgdGNwX2JwZl91cGRhdGVfcHJvdG8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBib29sIHJlc3RvcmUpXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzM0LVxcdGlmIChyZXN0b3JlKSB7XFxubmV0L2lwdjQvdGNwX2JwZi5jOjczNTpcXHRcXHRpZiAoaW5ldF9jc2tfaGFzX3VscChzaykpIHtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzM2LVxcdFxcdFxcdC8qIFRMUyBkb2VzIG5vdCBoYXZlIGFuIHVuaGFzaCBwcm90byBpbiBTVyBjYXNlcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6NDQ6MTcuNDc5MzE1OVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTczMjQyOTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDaGVja2luZyB0aGUgYHBzcF9za19hc3NvY2AgRGF0YSoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBjb21lcyB0byBtaW5kIGlzIHRvIHRha2UgYSBsb29rIGF0IGBwc3Bfc2tfYXNzb2NgLiBJIG5lZWQgdG8gYXNzZXNzIHdoYXQncyBoYXBwZW5pbmcgd2l0aCB0aGF0IHBhcnRpY3VsYXIgZGF0YSBzdHJ1Y3R1cmUuIFRoaXMgY291bGQgYmUgYW55dGhpbmcgZnJvbSBjaGVja2luZyBpdHMgY3VycmVudCBzdGF0ZSBmb3IgdW5leHBlY3RlZCB2YWx1ZXMsIGNvbmZpcm1pbmcgaXRzIGV4cGVjdGVkIGJlaGF2aW9yIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucywgb3IgbWF5YmUgZXZlbiBqdXN0IHJlZnJlc2hpbmcgbXkgbWVtb3J5IG9uIGl0cyBleGFjdCBkZWZpbml0aW9uIGFuZCByb2xlIHdpdGhpbiB0aGUgd2lkZXIgc3lzdGVtLiBVbmRlcnN0YW5kaW5nIGl0cyBzdGF0dXMgaXMgZXNzZW50aWFsIGJlZm9yZSBwcm9jZWVkaW5nIGFueSBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTQ1NSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjQ0OjIwLjA1MjU2MTEwOVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyOTcyNjA0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwc3Bfc2tfYXNzb2NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTMzPXVuc2lnbmVkIGludCBwc3Bfa2V5X3NpemUodTMyIHZlcnNpb24pO1xcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDozNDp2b2lkIHBzcF9za19hc3NvY19mcmVlKHN0cnVjdCBzb2NrICpzayk7XFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTM1LXZvaWQgcHNwX3R3c2tfaW5pdChzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dywgY29uc3Qgc3RydWN0IHNvY2sgKnNrKTtcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD0zNz12b2lkIHBzcF9yZXBseV9zZXRfZGVjcnlwdGVkKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTM4LVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDozOTpzdGF0aWMgaW5saW5lIHN0cnVjdCBwc3BfYXNzb2MgKnBzcF9za19hc3NvYyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTQwLXtcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD00NT1wc3BfZW5xdWV1ZV9zZXRfZGVjcnlwdGVkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC00OC1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6NDk6XFx0cGFzID0gcHNwX3NrX2Fzc29jKHNrKTtcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtNTAtXFx0aWYgKHBhcyBcXHUwMDI2XFx1MDAyNiBwYXMtXFx1MDAzZXR4LnNwaSlcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD0xMTY9cHNwX3NrX3J4X3BvbGljeV9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTExNy17XFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjExODpcXHRyZXR1cm4gX19wc3Bfc2tfcnhfcG9saWN5X2NoZWNrKHNrYiwgcHNwX3NrX2Fzc29jKHNrKSk7XFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTExOS19XFxuLS1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9MTUwPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHBzcF9za19vdmVyaGVhZChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTU3LSNlbHNlXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjE1ODpzdGF0aWMgaW5saW5lIHZvaWQgcHNwX3NrX2Fzc29jX2ZyZWUoc3RydWN0IHNvY2sgKnNrKSB7IH1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTU5LXN0YXRpYyBpbmxpbmUgdm9pZFxcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTE2Mz1wc3BfcmVwbHlfc2V0X2RlY3J5cHRlZChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpIHsgfVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xNjQtXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjE2NTpzdGF0aWMgaW5saW5lIHN0cnVjdCBwc3BfYXNzb2MgKnBzcF9za19hc3NvYyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTE2Ni17XFxuLS1cXG5uZXQvY29yZS9zb2NrLmM9MjY3ND1ib29sIHNrX2hhc19kZWNyeXB0X3VzZXIoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9jb3JlL3NvY2suYy0yNjc1LXtcXG5uZXQvY29yZS9zb2NrLmM6MjY3NjpcXHRyZXR1cm4gcHNwX3NrX2Fzc29jKHNrKSB8fFxcbm5ldC9jb3JlL3NvY2suYy0yNjc3LVxcdCAgICAgICAoc2tfaXNfaW5ldChzaykgXFx1MDAyNlxcdTAwMjYgaW5ldF9jc2tfaGFzX3VscChzaykpOyAvKiBmb3IgdGxzICovXFxuLS1cXG5uZXQvaXB2NC9hZl9pbmV0LmM9MTQwPXZvaWQgaW5ldF9zb2NrX2Rlc3RydWN0KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L2FmX2luZXQuYy0xNjYtXFx0ZHN0X3JlbGVhc2UocmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChzay1cXHUwMDNlc2tfcnhfZHN0LCAxKSk7XFxubmV0L2lwdjQvYWZfaW5ldC5jOjE2NzpcXHRwc3Bfc2tfYXNzb2NfZnJlZShzayk7XFxubmV0L2lwdjQvYWZfaW5ldC5jLTE2OC19XFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmM9MTE4PXZvaWQgcHNwX2Fzc29jX3B1dChzdHJ1Y3QgcHNwX2Fzc29jICpwYXMpXFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTIzLVxcbm5ldC9wc3AvcHNwX3NvY2suYzoxMjQ6dm9pZCBwc3Bfc2tfYXNzb2NfZnJlZShzdHJ1Y3Qgc29jayAqc2spXFxubmV0L3BzcC9wc3Bfc29jay5jLTEyNS17XFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmM9MTMyPWludCBwc3Bfc29ja19hc3NvY19zZXRfcngoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsXFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTQxLVxcbm5ldC9wc3AvcHNwX3NvY2suYzoxNDI6XFx0aWYgKHBzcF9za19hc3NvYyhzaykpIHtcXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTQzLVxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIlNvY2tldCBhbHJlYWR5IGhhcyBQU1Agc3RhdGVcXFwiKTtcXG4tLVxcbm5ldC9wc3AvcHNwX3NvY2suYz0xODE9aW50IHBzcF9zb2NrX2Fzc29jX3NldF90eChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwc3BfZGV2ICpwc2QsXFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTkwLVxcbm5ldC9wc3AvcHNwX3NvY2suYzoxOTE6XFx0cGFzID0gcHNwX3NrX2Fzc29jKHNrKTtcXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTkyLVxcdGlmICghcGFzKSB7XFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmM9MjcwPXZvaWQgcHNwX3R3c2tfaW5pdChzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dywgY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9wc3AvcHNwX3NvY2suYy0yNzEte1xcbm5ldC9wc3AvcHNwX3NvY2suYzoyNzI6XFx0c3RydWN0IHBzcF9hc3NvYyAqcGFzID0gcHNwX3NrX2Fzc29jKHNrKTtcXG5uZXQvcHNwL3BzcF9zb2NrLmMtMjczLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMDo0NDoyMS40ODIyOTcxNDZaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDIyOTQ3MDk0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU3ltYm9sIE1vZGlmaWNhdGlvbnMgYW5kIENhbGxlciBSZWxhdGlvbnNoaXBzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIHRhc2sgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGltcGFjdCBvZiB0aGVzZSBzeW1ib2xzLiBGaXJzdCwgSSBuZWVkIHRvIGlkZW50aWZ5IHdoaWNoIHN5bWJvbHMgYXJlIGJlaW5nIG1vZGlmaWVkIG9yIG5ld2x5IGludHJvZHVjZWQuIEkndmUgbm90ZWQgYSBmZXcga2V5IGl0ZW1zIHJpZ2h0IG9mZiB0aGUgYmF0OlxuXG4xLiAgYHNrX2hhc19kZWNyeXB0X3VzZXJgIGluIGBuZXQvY29yZS9zb2NrLmNgLCB3aGljaCBpcyBhIG5vbi1zdGF0aWMgZnVuY3Rpb24uIFRoYXQncyBhIHBvaW50IHRvIHJlbWVtYmVyIGZvciBwb3RlbnRpYWwgZXh0ZXJuYWwgaW50ZXJhY3Rpb25zLlxuMi4gIGBfX3RjcF9zZXRfdWxwYCBpbiBgbmV0L2lwdjQvdGNwX3VscC5jYCB3aGljaCBpcyBzdGF0aWMgYW5kIGNhbGxlZCBieSBgdGNwX3NldF91bHBgLiBUaGUgZm9jdXMgaGVyZSBzaG91bGQgYmUgb24gYHRjcF9zZXRfdWxwYCBvciBgX190Y3Bfc2V0X3VscGAgcG90ZW50aWFsbHkgYm90aC5cbjMuICBgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4YCBpbiBgbmV0L3BzcC9wc3Bfc29jay5jYCwgYSBub24tc3RhdGljIGZ1bmN0aW9uIGNhbGxlZCBieSBgcHNwX25sX3J4X2Fzc29jX2RvaXRgLlxuNC4gIGBza19oYXNfdmFsaWRhdGVfeG1pdF9za2JgIGluIGBpbmNsdWRlL25ldC9zb2NrLmhgLCBhIHN0YXRpYyBpbmxpbmUgaGVscGVyLiBJdHMgY2FsbGVycyBhcmUgYF9fdGNwX3NldF91bHBgIGFuZCBgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4YC4gVGhpcyBpcyBpbXBvcnRhbnQsIGFzIHN0YXRpYyBpbmxpbmVzIGNhbiBpbnRyb2R1Y2UgY29tcGxleGl0aWVzIGluIHRyYWNpbmcuXG5cbk5vdyBJIG5lZWQgdG8gY2xhcmlmeSB0aGUgdmlzaWJpbGl0eSBvZiBgdGNwX3NldF91bHBgLiBJIHNlZSB0aGF0IGB0Y3Bfc2V0X3VscGAgaXRzZWxmIGlzIG5vbi1zdGF0aWMgaW4gYG5ldC9pcHY0L3RjcF91bHAuY2AuIFRoaXMgbWVhbnMgaXQgKmNvdWxkKiBiZSBleHRlcm5hbGx5IHZpc2libGUsIHNvIEkgbmVlZCB0byBjaGVjayBmb3IgZXh0ZXJuYWwgY2FsbHMuXG5cblRvIGVuc3VyZSBJIGhhdmUgYSBjb21wbGV0ZSBwaWN0dXJlLCBJIHdpbGwgcmV2aWV3IGFsbCBmdW5jdGlvbnMgaW4gYG5ldC9pcHY0L3RjcF91bHAuY2AsIGBuZXQvcHNwL3BzcF9zb2NrLmNgLCBhbmQgYG5ldC9jb3JlL3NvY2suY2A6XG5cbiogICBgc2tfaGFzX2RlY3J5cHRfdXNlcmBcbiogICBgdGNwX3NldF91bHBgXG4qICAgYF9fdGNwX3NldF91bHBgXG4qICAgYHBzcF9zb2NrX2Fzc29jX3NldF9yeGBcbiogICBgcHNwX25sX3J4X2Fzc29jX2RvaXRgXG5cbkZpbmFsbHksIEkgbmVlZCB0byB0aG9yb3VnaGx5IGV4YW1pbmUgdGhlIGNhbGxlcnMgb2YgYHRjcF9zZXRfdWxwYC4gVGhpcyBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgZmxvdyBhbmQgcG90ZW50aWFsIGltcGFjdCBvZiBhbnkgY2hhbmdlcyB0byB0aGlzIGZ1bmN0aW9uLiBUaGlzIGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgbXkgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwOTA2LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjQ0OjI1LjcxMTc3MDA3N1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxMTIxMzkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3Bfc2V0X3VscFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC90Y3AuaD0yODI5PXZvaWQgdGNwX3VucmVnaXN0ZXJfdWxwKHN0cnVjdCB0Y3BfdWxwX29wcyAqdHlwZSk7XFxuaW5jbHVkZS9uZXQvdGNwLmg6MjgzMDppbnQgdGNwX3NldF91bHAoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBjaGFyICpuYW1lKTtcXG5pbmNsdWRlL25ldC90Y3AuaC0yODMxLXZvaWQgdGNwX2dldF9hdmFpbGFibGVfdWxwKGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7XFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0zODM2PWludCBkb190Y3Bfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0zODc5LVxcdFxcdHNvY2tvcHRfbG9ja19zb2NrKHNrKTtcXG5uZXQvaXB2NC90Y3AuYzozODgwOlxcdFxcdGVyciA9IHRjcF9zZXRfdWxwKHNrLCBuYW1lKTtcXG5uZXQvaXB2NC90Y3AuYy0zODgxLVxcdFxcdHNvY2tvcHRfcmVsZWFzZV9zb2NrKHNrKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF91bHAuYz0xMTI9dm9pZCB0Y3BfY2xlYW51cF91bHAoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdGNwX3VscC5jLTEyOS1cXG5uZXQvaXB2NC90Y3BfdWxwLmM6MTMwOnN0YXRpYyBpbnQgX190Y3Bfc2V0X3VscChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCB0Y3BfdWxwX29wcyAqdWxwX29wcylcXG5uZXQvaXB2NC90Y3BfdWxwLmMtMTMxLXtcXG4tLVxcbm5ldC9pcHY0L3RjcF91bHAuYy0xNjAtXFxubmV0L2lwdjQvdGNwX3VscC5jOjE2MTppbnQgdGNwX3NldF91bHAoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBjaGFyICpuYW1lKVxcbm5ldC9pcHY0L3RjcF91bHAuYy0xNjIte1xcbi0tXFxubmV0L2lwdjQvdGNwX3VscC5jLTE3MC1cXG5uZXQvaXB2NC90Y3BfdWxwLmM6MTcxOlxcdHJldHVybiBfX3RjcF9zZXRfdWxwKHNrLCB1bHBfb3BzKTtcXG5uZXQvaXB2NC90Y3BfdWxwLmMtMTcyLX1cXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MTc4MT1pbnQgbXB0Y3Bfc3ViZmxvd19jcmVhdGVfc29ja2V0KHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgZmFtaWx5LFxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xODEyLVxcdHNrX25ldF9yZWZjbnRfdXBncmFkZShzZi1cXHUwMDNlc2spO1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTgxMzpcXHRlcnIgPSB0Y3Bfc2V0X3VscChzZi1cXHUwMDNlc2ssIFxcXCJtcHRjcFxcXCIpO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTgxNC1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMDo0NDoyNy4xMjI5ODkwMzdaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Nzk1MDgyOTAzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgYW5kIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlc2UgY29uZmlndXJhdGlvbnMuIEkgc2VlIHRoYXQgYElORVRfUFNQYCByZWxpZXMgb24gYElORVRgIGFuZCBzZWxlY3RzIGBTS0JfREVDUllQVEVEYCwgYFNLQl9FWFRFTlNJT05TYCwgYW5kIGBTT0NLX1ZBTElEQVRFX1hNSVRgLiBgVExTYCBhbHNvIGRlcGVuZHMgb24gYElORVRgLCBhbmQgYFRMU19ERVZJQ0VgIGRlcGVuZHMgb24gYFRMU2AsIHNoYXJpbmcgc29tZSBvZiB0aGUgc2FtZSBzZWxlY3RlZCBzeW1ib2xzIGFzIGBJTkVUX1BTUGAuIEkgYWxzbyBzZWUgdGhhdCBgTkVUREVWU0lNYCBpcyB0aGVyZSB0byBjcmVhdGUgc2ltdWxhdGVkIG5ldGRldnMgd2l0aCBQU1Agc3VwcG9ydC5cblxuU28sIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBgSU5FVF9QU1BgLCBgVExTYCwgYFRMU19ERVZJQ0VgLCBhbmQgYE5FVERFVlNJTWAuIE5vdywgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX0lORVRfUFNQYCBhY3R1YWxseSBlbmFibGVzIHRoZSBuZWNlc3NhcnkgY29kZSDigJMgSSdsbCBjaGVjayB0aGF0IGBuZXQvcHNwL3BzcF9zb2NrLmNgIGFuZCBgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4YCBhcmUgaW5kZWVkIGluY2x1ZGVkLiBMb29raW5nIGF0IHRoZSBNYWtlZmlsZXMgY29uZmlybXMgdGhpcyBkZXBlbmRlbmN5LlxuXG5OZXh0LCB0aGUgY3JpdGljYWwgc3ltYm9scy4gSSBoYXZlIHRvIGxvb2sgYXQgYHNrX2hhc19kZWNyeXB0X3VzZXJgLCBgdGNwX3NldF91bHBgLCBgX190Y3Bfc2V0X3VscGAsIGBwc3Bfc29ja19hc3NvY19zZXRfcnhgLCBhbmQgYHBzcF9ubF9yeF9hc3NvY19kb2l0YC4gQXJlIGFueSBvZiB0aGVzZSB3aWRlbHkgdXNlZD8gTm8sIHRoYW5rZnVsbHkuIGBza19oYXNfZGVjcnlwdF91c2VyYCBpcyBhIHJlY2VudCBhZGRpdGlvbiBhbmQgb25seSBjYWxsZWQgYnkgYSBmZXcgb3RoZXIgZnVuY3Rpb25zLCBhbmQgdGhlIG90aGVycyBhcmUgc3BlY2lmaWMgdG8gVENQIFVMUCBzZXR1cCBhbmQgUFNQIG5ldGxpbmsgaW50ZXJhY3Rpb25zLiBUaGF0J3MgZ29vZDsgaXQgbmFycm93cyB0aGUgc2NvcGUuXG5cbkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZXMsIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBtdXR1YWwgZXhjbHVzaXZpdHkgY2hlY2tzIGJldHdlZW4gUFNQIHNvY2tldCBhc3NvY2lhdGlvbnMsIFRDUCBVTFAgKGxpa2Uga1RMUyksIGFuZCBzb2NrZXRzIHdpdGggcGFja2V0IHRyYW5zbWlzc2lvbiB2YWxpZGF0aW9uLiBJdCBhZGRzIGNoZWNrcyBmb3IgYHNrX2hhc19kZWNyeXB0X3VzZXIoKWAgYW5kIGBza19oYXNfdmFsaWRhdGVfeG1pdF9za2IoKWAgaW4ga2V5IGZ1bmN0aW9ucyB0byBwcmV2ZW50IGNvbmZsaWN0cy4gVGhlc2UgbW9kaWZpY2F0aW9ucyB0b3VjaCBjcnVjaWFsIHNvY2tldCBjb25maWd1cmF0aW9uIHBhdGhzLCBhY2Nlc3NpYmxlIHZpYSBUQ1Agb3B0aW9ucyBhbmQgbmV0bGluayBjb21tYW5kcy4gVGhhdCdzIGEgY2xhc3NpYyBzY2VuYXJpbyBmb3IgZnV6emluZy5cblxuQWxyaWdodCwgZG91YmxlLWNoZWNraW5nIG15IG5vdGVzOlxuXG4qICAgKipXb3J0aEZ1enppbmc6KiogVHJ1ZVxuKiAgICoqRm9jdXNTeW1ib2xzOioqIFxcW1wic2tcXF9oYXNcXF9kZWNyeXB0XFxfdXNlclwiLCBcInRjcFxcX3NldFxcX3VscFwiLCBcIlxcX1xcX3RjcFxcX3NldFxcX3VscFwiLCBcInBzcFxcX3NvY2tcXF9hc3NvY1xcX3NldFxcX3J4XCIsIFwicHNwXFxfbmxcXF9yeFxcX2Fzc29jXFxfZG9pdFwiXVxuKiAgICoqRW5hYmxlQ29uZmlnczoqKiBcXFtcIklORVRcXF9QU1BcIiwgXCJUTFNcIiwgXCJUTFNcXF9ERVZJQ0VcIiwgXCJORVRERVZTSU1cIl1cbiogICAqKlJlYXNvbmluZzoqKiBDb25jaXNlIGFuZCBhY2N1cmF0ZS5cblxuRXZlcnl0aGluZyBjaGVja3Mgb3V0LiBJJ20gcmVhZHkgdG8gcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIzNzcsIk91dHB1dFRva2VucyI6MjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjQ0OjM1LjA3MzgyMDEwN1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMjQ2OTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUX1BTUFwiLFxuICAgIFwiVExTXCIsXG4gICAgXCJUTFNfREVWSUNFXCIsXG4gICAgXCJORVRERVZTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza19oYXNfZGVjcnlwdF91c2VyXCIsXG4gICAgXCJ0Y3Bfc2V0X3VscFwiLFxuICAgIFwiX190Y3Bfc2V0X3VscFwiLFxuICAgIFwicHNwX3NvY2tfYXNzb2Nfc2V0X3J4XCIsXG4gICAgXCJwc3BfbmxfcnhfYXNzb2NfZG9pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc29ja2V0IHN0YXRlIGV4Y2x1c2l2aXR5IGNoZWNrcyBiZXR3ZWVuIFBTUCAoUFNQIFNlY3VyaXR5IFByb3RvY29sKSBzb2NrZXQgYXNzb2NpYXRpb25zLCBUQ1AgVUxQIChlLmcuLCBrVExTKSwgYW5kIHNvY2tldHMgd2l0aCB0cmFuc21pdCB2YWxpZGF0aW9uIGhhbmRsZXJzIChza192YWxpZGF0ZV94bWl0X3NrYikuIEl0IGFkZHMgc2tfaGFzX2RlY3J5cHRfdXNlcigpIGFuZCBza19oYXNfdmFsaWRhdGVfeG1pdF9za2IoKSB2YWxpZGF0aW9ucyBpbiBfX3RjcF9zZXRfdWxwKCkgYW5kIHBzcF9zb2NrX2Fzc29jX3NldF9yeCgpIHRvIHByZXZlbnQgY29uZmxpY3Rpbmcgc29ja2V0IG9mZmxvYWQgc3RhdGVzLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIFRDUCBzZXRzb2Nrb3B0KFRDUF9VTFApIGFuZCBQU1AgTmV0bGluayBjb21tYW5kcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUX1BTUFwiLFxuICAgIFwiVExTXCIsXG4gICAgXCJUTFNfREVWSUNFXCIsXG4gICAgXCJORVRERVZTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza19oYXNfZGVjcnlwdF91c2VyXCIsXG4gICAgXCJ0Y3Bfc2V0X3VscFwiLFxuICAgIFwiX190Y3Bfc2V0X3VscFwiLFxuICAgIFwicHNwX3NvY2tfYXNzb2Nfc2V0X3J4XCIsXG4gICAgXCJwc3BfbmxfcnhfYXNzb2NfZG9pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc29ja2V0IHN0YXRlIGV4Y2x1c2l2aXR5IGNoZWNrcyBiZXR3ZWVuIFBTUCAoUFNQIFNlY3VyaXR5IFByb3RvY29sKSBzb2NrZXQgYXNzb2NpYXRpb25zLCBUQ1AgVUxQIChlLmcuLCBrVExTKSwgYW5kIHNvY2tldHMgd2l0aCB0cmFuc21pdCB2YWxpZGF0aW9uIGhhbmRsZXJzIChza192YWxpZGF0ZV94bWl0X3NrYikuIEl0IGFkZHMgc2tfaGFzX2RlY3J5cHRfdXNlcigpIGFuZCBza19oYXNfdmFsaWRhdGVfeG1pdF9za2IoKSB2YWxpZGF0aW9ucyBpbiBfX3RjcF9zZXRfdWxwKCkgYW5kIHBzcF9zb2NrX2Fzc29jX3NldF9yeCgpIHRvIHByZXZlbnQgY29uZmxpY3Rpbmcgc29ja2V0IG9mZmxvYWQgc3RhdGVzLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIFRDUCBzZXRzb2Nrb3B0KFRDUF9VTFApIGFuZCBQU1AgTmV0bGluayBjb21tYW5kcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6NDQ6MzUuMTQ0MDczNzE2WiIsIlNlcSI6MzksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTcxNTU5NjIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjQ0OjM1LjE0NDUyNzQ5NloiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE1NzE1MTM3MTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG11dHVhbCBleGNsdXNpdml0eSBjaGVja3MgKHNrX2hhc19kZWNyeXB0X3VzZXIgYW5kIHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYikgdG8gcHJldmVudCBpbmNvbXBhdGlibGUgc29ja2V0IHN0YXRlcyB3aGVuIGNvbmZpZ3VyaW5nIFRDUCBVTFAgKGUuZy4ga1RMUykgYW5kIFBTUCAoUFNQIHNlY3VyaXR5IHByb3RvY29sKSBvbiB0aGUgc2FtZSBzb2NrZXQuIFxcblxcbkl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIGNvcGllcyB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhY2Nlc3Mgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgdGVzdGluZyBhbmQgc2FuaXRpemVycyBsaWtlIEtBU0FOIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBtZW1vcnkgc2FmZXR5IG9yIHN0YXRlIG1hbmFnZW1lbnQgaXNzdWVzLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2I0ZjIyZTFkMmUyZmI4MjNkODJiYjY0YTFlMTk0MzQ4NDc1MTJjMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDAwOjQyOjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc29jay5oIGIvaW5jbHVkZS9uZXQvc29jay5oXG5pbmRleCA1MTE4NTIyMmFhYzI5Li5iYTVlNTA5MmYxOTJjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvc29jay5oXG4rKysgYi9pbmNsdWRlL25ldC9zb2NrLmhcbkBAIC0yMzEyLDYgKzIzMTIsMTcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNrX2dzb19kaXNhYmxlKHN0cnVjdCBzb2NrICpzaylcbiBcdHNrLVx1MDAzZXNrX3JvdXRlX2NhcHMgXHUwMDI2PSB+TkVUSUZfRl9HU09fTUFTSztcbiB9XG4gXG4rc3RhdGljIGlubGluZSBib29sIHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYihjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4re1xuKyNpZmRlZiBDT05GSUdfU09DS19WQUxJREFURV9YTUlUXG4rXHRyZXR1cm4gISFzay1cdTAwM2Vza192YWxpZGF0ZV94bWl0X3NrYjtcbisjZWxzZVxuK1x0cmV0dXJuIGZhbHNlO1xuKyNlbmRpZlxuK31cbitcbitib29sIHNrX2hhc19kZWNyeXB0X3VzZXIoY29uc3Qgc3RydWN0IHNvY2sgKnNrKTtcbitcbiBzdGF0aWMgaW5saW5lIGludCBza2JfZG9fY29weV9kYXRhX25vY2FjaGUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sIGNoYXIgKnRvLFxuIFx0XHRcdFx0XHQgICBpbnQgY29weSwgaW50IG9mZnNldClcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9zb2NrLmMgYi9uZXQvY29yZS9zb2NrLmNcbmluZGV4IGZhNjBiNzQ5NGM1ODYuLjk0ODlkOWM0Nzk0OTMgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9zb2NrLmNcbisrKyBiL25ldC9jb3JlL3NvY2suY1xuQEAgLTE0Miw2ICsxNDIsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9zb2NrLmhcdTAwM2VcbiBcbisjaW5jbHVkZSBcdTAwM2NuZXQvcHNwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvdGNwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvYnVzeV9wb2xsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcGhvbmV0L3Bob25ldC5oXHUwMDNlXG5AQCAtMjY3MCw2ICsyNjcxLDEyIEBAIHZvaWQgc2tfc2V0dXBfY2FwcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoc2tfc2V0dXBfY2Fwcyk7XG4gXG4rYm9vbCBza19oYXNfZGVjcnlwdF91c2VyKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHRyZXR1cm4gcHNwX3NrX2Fzc29jKHNrKSB8fFxuK1x0ICAgICAgIChza19pc19pbmV0KHNrKSBcdTAwMjZcdTAwMjYgaW5ldF9jc2tfaGFzX3VscChzaykpOyAvKiBmb3IgdGxzICovXG4rfVxuK1xuIC8qXG4gICpcdFNpbXBsZSByZXNvdXJjZSBtYW5hZ2VycyBmb3Igc29ja2V0cy5cbiAgKi9cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfdWxwLmMgYi9uZXQvaXB2NC90Y3BfdWxwLmNcbmluZGV4IDJhYTQ0MjEyODYzMGUuLmYzZTBjOWQzNzliYjYgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfdWxwLmNcbisrKyBiL25ldC9pcHY0L3RjcF91bHAuY1xuQEAgLTEzNiw2ICsxMzYsMTAgQEAgc3RhdGljIGludCBfX3RjcF9zZXRfdWxwKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHRjcF91bHBfb3BzICp1bHBfb3BzKVxuIFx0aWYgKGljc2stXHUwMDNlaWNza191bHBfb3BzKVxuIFx0XHRnb3RvIG91dF9lcnI7XG4gXG4rXHRlcnIgPSAtRUlOVkFMO1xuK1x0aWYgKHNrX2hhc19kZWNyeXB0X3VzZXIoc2spIHx8IHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYihzaykpXG4rXHRcdGdvdG8gb3V0X2VycjtcbitcbiBcdGlmIChzay1cdTAwM2Vza19zb2NrZXQpXG4gXHRcdGNsZWFyX2JpdChTT0NLX1NVUFBPUlRfWkMsIFx1MDAyNnNrLVx1MDAzZXNrX3NvY2tldC1cdTAwM2VmbGFncyk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3BzcC9wc3Bfc29jay5jIGIvbmV0L3BzcC9wc3Bfc29jay5jXG5pbmRleCAxYTJhNmI3NTE2YjBmLi41MDkwMzU2MTc4OTRhIDEwMDY0NFxuLS0tIGEvbmV0L3BzcC9wc3Bfc29jay5jXG4rKysgYi9uZXQvcHNwL3BzcF9zb2NrLmNcbkBAIC0xNDMsNiArMTQzLDEwIEBAIGludCBwc3Bfc29ja19hc3NvY19zZXRfcngoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsXG4gXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJTb2NrZXQgYWxyZWFkeSBoYXMgUFNQIHN0YXRlXCIpO1xuIFx0XHRlcnIgPSAtRUJVU1k7XG4gXHRcdGdvdG8gZXhpdF91bmxvY2s7XG4rXHR9IGVsc2UgaWYgKHNrX2hhc19kZWNyeXB0X3VzZXIoc2spIHx8IHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYihzaykpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcIlNvY2tldCBoYXMgaW5jb21wYXRpYmxlIHN0YXRlXCIpO1xuK1x0XHRlcnIgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIGV4aXRfdW5sb2NrO1xuIFx0fVxuIFxuIFx0cmVmY291bnRfaW5jKFx1MDAyNnBhcy1cdTAwM2VyZWZjbnQpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZ1xuaW5kZXggYjY5ODljN2QzZDlkMS4uNDgzOGFkZjI3ZmExYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZ1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnXG5AQCAtMjEsNSArMjEsNiBAQCBDT05GSUdfTkVUX1NDSF9JTkdSRVNTPXlcbiBDT05GSUdfTkVUX1NDSF9QUklPPW1cbiBDT05GSUdfUFBQPXlcbiBDT05GSUdfUFBQT0U9eVxuK0NPTkZJR19UTFM9eVxuIENPTkZJR19WTEFOXzgwMjFRPW1cbiBDT05GSUdfWERQX1NPQ0tFVFM9eVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weVxuaW5kZXggMzE1NjQ4YTc3MGQwMC4uMTJiMjdmMmEzZmExYiAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5XG5AQCAtMjMsNiArMjMsOCBAQCBmcm9tIGxpYi5weSBpbXBvcnQgTmV0TlNFbnRlclxuIGZyb20gbGliLnB5IGltcG9ydCBia2csIHJhbmRfcG9ydCwgd2FpdF9wb3J0X2xpc3RlblxuIGZyb20gbGliLnB5IGltcG9ydCBpcFxuIFxuK1RDUF9VTFAgPSAzMVxuK1xuIFxuIGRlZiBfZ2V0X291dHEocyk6XG4gICAgIG9uZSA9IGInXFwwJyAqIDRcbkBAIC0zMzMsNiArMzM1LDUwIEBAIGRlZiBhc3NvY192ZXJzaW9uX21pc21hdGNoKGNmZyk6XG4gICAgICAgICAgICAga3NmdF9lcSh0aGVfZXhjZXB0aW9uLm5sX21zZy5lcnJvciwgLWVycm5vLkVJTlZBTClcbiBcbiBcbitkZWYgX3JlcXVpcmVfdGxzX3VscCgpOlxuKyAgICB3aXRoIHNvY2tldC5jcmVhdGVfc2VydmVyKChcImxvY2FsaG9zdFwiLCAwKSkgYXMgc3J2OlxuKyAgICAgICAgd2l0aCBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oc3J2LmdldHNvY2tuYW1lKCkpIGFzIHM6XG4rICAgICAgICAgICAgdHJ5OlxuKyAgICAgICAgICAgICAgICBzLnNldHNvY2tvcHQoc29ja2V0LlNPTF9UQ1AsIFRDUF9VTFAsIGJcInRsc1wiKVxuKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzpcbisgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcImtUTFMgbm90IGF2YWlsYWJsZVwiKSBmcm9tIGV4Y1xuK1xuK1xuK2RlZiBhc3NvY19wc3BfdWxwX2V4Y2x1c2l2ZShjZmcpOlxuKyAgICBcIlwiXCIgVGVzdCB0aGF0IGEgVENQIFVMUCBjYW5ub3QgYmUgYXR0YWNoZWQgdG8gYSBQU1Agc29ja2V0IFwiXCJcIlxuKyAgICBfaW5pdF9wc3BfZGV2KGNmZylcbisgICAgX3JlcXVpcmVfdGxzX3VscCgpXG4rXG4rICAgIHdpdGggX21ha2VfY2xyX2Nvbm4oY2ZnKSBhcyBzOlxuKyAgICAgICAgdHJ5OlxuKyAgICAgICAgICAgIGNmZy5wc3BubC5yeF9hc3NvYyh7XCJ2ZXJzaW9uXCI6IDAsXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRldi1pZFwiOiBjZmcucHNwX2Rldl9pZCxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic29jay1mZFwiOiBzLmZpbGVubygpfSlcbisgICAgICAgICAgICB3aXRoIGtzZnRfcmFpc2VzKE9TRXJyb3IpIGFzIGNtOlxuKyAgICAgICAgICAgICAgICBzLnNldHNvY2tvcHQoc29ja2V0LlNPTF9UQ1AsIFRDUF9VTFAsIGJcInRsc1wiKVxuKyAgICAgICAgICAgIGtzZnRfZXEoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FSU5WQUwpXG4rICAgICAgICBmaW5hbGx5OlxuKyAgICAgICAgICAgIF9jbG9zZV9jb25uKGNmZywgcylcbitcbitcbitkZWYgYXNzb2NfdWxwX3BzcF9leGNsdXNpdmUoY2ZnKTpcbisgICAgXCJcIlwiIFRlc3QgdGhhdCBhIFBTUCBhc3NvYyBjYW5ub3QgYmUgYWRkZWQgdG8gYSBzb2NrZXQgd2l0aCBhIFRDUCBVTFAgXCJcIlwiXG4rICAgIF9pbml0X3BzcF9kZXYoY2ZnKVxuKyAgICBfcmVxdWlyZV90bHNfdWxwKClcbitcbisgICAgd2l0aCBfbWFrZV9jbHJfY29ubihjZmcpIGFzIHM6XG4rICAgICAgICB0cnk6XG4rICAgICAgICAgICAgcy5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfVENQLCBUQ1BfVUxQLCBiXCJ0bHNcIilcbisgICAgICAgICAgICB3aXRoIGtzZnRfcmFpc2VzKE5sRXJyb3IpIGFzIGNtOlxuKyAgICAgICAgICAgICAgICBjZmcucHNwbmwucnhfYXNzb2Moe1widmVyc2lvblwiOiAwLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGV2LWlkXCI6IGNmZy5wc3BfZGV2X2lkLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic29jay1mZFwiOiBzLmZpbGVubygpfSlcbisgICAgICAgICAgICBrc2Z0X2VxKGNtLmV4Y2VwdGlvbi5ubF9tc2cuZXJyb3IsIC1lcnJuby5FSU5WQUwpXG4rICAgICAgICAgICAga3NmdF9lcShjbS5leGNlcHRpb24ubmxfbXNnLmV4dGFja1snYmFkLWF0dHInXSwgXCIuc29jay1mZFwiKVxuKyAgICAgICAgZmluYWxseTpcbisgICAgICAgICAgICBfY2xvc2VfY29ubihjZmcsIHMpXG4rXG4rXG4gZGVmIGFzc29jX3R3aWNlKGNmZyk6XG4gICAgIFwiXCJcIiBUZXN0IHJldXNpbmcgVHggYXNzb2MgZm9yIHR3byBzb2NrZXRzIFwiXCJcIlxuICAgICBfaW5pdF9wc3BfZGV2KGNmZylcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjQ0OjM1LjE0NDUyODM3NloiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NTY0MTkwNjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBNdXR1YWwgRXhjbHVzaW9uIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgZW5mb3JjaW5nIG11dHVhbCBleGNsdXNpdml0eSBiZXR3ZWVuIFBTUCAodGhlIFBTUCBzZWN1cml0eSBwcm90b2NvbC9zb2NrZXQpIGFuZCBUQ1AgVUxQcyAobGlrZSBrVExTKSBvbiBhIHNpbmdsZSBzb2NrZXQuIEl0J3MgYWxzbyBhZGRpbmcgY2hlY2tzIGZvciBgc2tfaGFzX3ZhbGlkYXRlX3htaXRfc2tiKHNrKWAsIHdoaWNoIEknbGwgbmVlZCB0byBrZWVwIGluIG1pbmQuXG5cbkxldCdzIGJyZWFrIGRvd24gdGhlIGNoYW5nZXM6XG5cbiogICAqKkhlYWRlciBhbmQgRGVjbGFyYXRpb25zOioqIFdlJ3ZlIGdvdCBgaW5jbHVkZS9uZXQvc29jay5oYCBhZGRpbmcgYW4gaW5saW5lIGBza19oYXNfdmFsaWRhdGVfeG1pdF9za2IoY29uc3Qgc3RydWN0IHNvY2sgKnNrKWAgYW5kIGRlY2xhcmluZyBgYm9vbCBza19oYXNfZGVjcnlwdF91c2VyKGNvbnN0IHN0cnVjdCBzb2NrICpzayk7YCBUaGlzIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIG5ldyBgc2tfaGFzX3ZhbGlkYXRlX3htaXRfc2tiYCBsaWtlbHkgc2ltcGxpZmllcyBjaGVja2luZyBmb3Igc29tZXRoaW5nLCBhbmQgYHNrX2hhc19kZWNyeXB0X3VzZXJgIHdpbGwgYmUga2V5LlxuXG4qICAgKipEZWZpbml0aW9uIG9mIGBza19oYXNfZGVjcnlwdF91c2VyYDoqKiBJbiBgbmV0L2NvcmUvc29jay5jYCwgdGhlIGRlZmluaXRpb24gb2YgYHNrX2hhc19kZWNyeXB0X3VzZXIoY29uc3Qgc3RydWN0IHNvY2sgKnNrKWAgaXMgdGhlIGNvcmUgbG9naWM6IGByZXR1cm4gcHNwX3NrX2Fzc29jKHNrKSB8fCAoc2tfaXNfaW5ldChzaykgXHUwMDI2XHUwMDI2IGluZXRfY3NrX2hhc191bHAoc2spKTtgLiBFc3NlbnRpYWxseSwgaWYgZWl0aGVyIFBTUCBpcyBhc3NvY2lhdGVkIE9SIGlmIGl0J3MgYW4gaW5ldCBzb2NrZXQgKmFuZCogYSBVTFAgaXMgcHJlc2VudCAobGlrZSBUTFMpLCB0aGVuIHdlIHNheSBkZWNyeXB0aW9uIGlzIGhhbmRsZWQuIE1ha2VzIHNlbnNlLlxuXG4qICAgKipFbmZvcmNlbWVudCBpbiBVTFAgYW5kIFBTUDoqKiBUaGUgYG5ldC9pcHY0L3RjcF91bHAuY2AgaW4gYF9fdGNwX3NldF91bHBgIGNoZWNrcyBmb3IgYHNrX2hhc19kZWNyeXB0X3VzZXIoc2spIHx8IHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYihzaylgLiBJZiAqZWl0aGVyKiBvZiB0aG9zZSBjb25kaXRpb25zIGlzIHRydWUsIGl0IGVycm9ycyBvdXQuIFRoaXMgaXMgd2hlcmUgdGhlIG11dHVhbCBleGNsdXNpb24gY29tZXMgaW50byBwbGF5OiB5b3UgY2FuJ3Qgc2V0IGEgVUxQIGlmIFBTUCBpcyBhbHJlYWR5IGFjdGl2ZSBvciBgdmFsaWRhdGVfeG1pdF9za2JgIGlzIHNldC4gU2ltaWxhcmx5LCBpbiBgbmV0L3BzcC9wc3Bfc29jay5jYCwgYHBzcF9zb2NrX2Fzc29jX3NldF9yeGAgY2hlY2tzIGZvciB0aGUgc2FtZSBjb25kaXRpb25zIGJlZm9yZSBhbGxvd2luZyBhIFBTUCBhc3NvY2lhdGlvbi5cblxuKiAgICoqU2VsZnRlc3RzOioqIEZpbmFsbHksIHRoZXJlIGFyZSB1cGRhdGVzIHRvIHRoZSBzZWxmdGVzdHMgd2hpY2ggSSdsbCBjZXJ0YWlubHkgbmVlZCB0byByZXZpZXcuXG5cblNvLCBpbiBlc3NlbmNlLCB0aGUgcGF0Y2ggcmlnb3JvdXNseSBwcmV2ZW50cyBhdHRhY2hpbmcgYSBVTFAgaWYgUFNQIGlzIGFjdGl2ZSwgb3IgYHZhbGlkYXRlX3htaXRfc2tiYCBpcyBwcmVzZW50LiBBbmQgY29udmVyc2VseSwgaXQgcHJldmVudHMgYXR0YWNoaW5nIFBTUCBpZiBhIFVMUCBvciBgdmFsaWRhdGVfeG1pdF9za2JgIGlzIGFscmVhZHkgdGhlcmUuIEl0J3MgYSBjbGVhbiBleGNsdXNpdml0eSBpbXBsZW1lbnRhdGlvbi5cblxuKipNZW1vcnkgU2FmZXR5IENvbnNpZGVyYXRpb25zOioqXG5cbk5vdywgbGV0J3MgdGhpbmsgYWJvdXQgcG90ZW50aWFsIHJpc2tzLiBDcnVjaWFsbHk6XG5cbiogICBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBzbyBubyBvYnZpb3VzIGFsbG9jYXRpb24tcmVsYXRlZCBidWdzLlxuKiAgIE5vIGBjb3B5X3RvX3VzZXJgIGNhbGxzIHRoYXQgY291bGQgbGVhayBpbmZvcm1hdGlvbi5cbiogICBObyBuZXcgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzIGFyZSBpbnRyb2R1Y2VkLlxuKiAgIE5vIGJyYW5jaGluZyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEsIHNvIG5vIGNvbnRyb2wtZmxvdyBpc3N1ZXMuXG4qICAgVGhpcyBpcyBzdHJpY3RseSBhIG11dHVhbCBleGNsdXNpb24gZW5mb3JjZW1lbnQsIHNvIGl0IHNob3VsZG4ndCBpbnRyb2R1Y2UgYW55IG5ldyBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgb3IgbWVtb3J5IHJpc2tzLCBhc3N1bWluZyB0aGUgZnVuY3Rpb25zIGl0IHVzZXMgKGBwc3Bfc2tfYXNzb2NgLCBgaW5ldF9jc2tfaGFzX3VscGAsIGFuZCBgc2tfaGFzX3ZhbGlkYXRlX3htaXRfc2tiYCkgYXJlIHRoZW1zZWx2ZXMgc2FmZS5cblxuKipSZW1haW5pbmcgQ29uY2VybnM6KipcblxuSSdtIGNvbmZpZGVudCB0aGUgbWVtb3J5IGFzcGVjdHMgYXJlIGhhbmRsZWQuIEhvd2V2ZXIsIEkgbmVlZCB0byBkbyBhIHRob3JvdWdoIHJldmlldyBvZiB0aGUgaW1wbGVtZW50YXRpb25zIG9mIGBwc3Bfc2tfYXNzb2NgLCBgaW5ldF9jc2tfaGFzX3VscGAgYW5kIHdoYXQgYHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYmAgbWVhbnMuIEknbGwgY2hlY2sgdGhhdCB0aG9zZSBmdW5jdGlvbnMgdGhlbXNlbHZlcyBhcmUgcm9idXN0IGFuZCBjb3JyZWN0bHkgaGFuZGxlIHRoZWlyIHJlc3BlY3RpdmUgc3RhdGVzLiBUaGF04oCZcyBwcm9iYWJseSB0aGUgbW9zdCBjcml0aWNhbCBhcmVhIHRvIHZlcmlmeS4gQWxzbywgdGhlIHNlbGZ0ZXN0cyBzaG91bGQgYmUgY29tcHJlaGVuc2l2ZSBlbm91Z2ggdG8gY292ZXIgYWxsIHRoZSBwb3NzaWJsZSBzY2VuYXJpb3MuIEknbGwgbmVlZCB0byBnbyB0aHJvdWdoIHRob3NlIHdpdGggYSBmaW5lLXRvb3RoIGNvbWIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NTUsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMDo0NDo0MS43MDg3MjE4NjNaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjA4ODI4MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHNwX3NrX2Fzc29jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD0zMz11bnNpZ25lZCBpbnQgcHNwX2tleV9zaXplKHUzMiB2ZXJzaW9uKTtcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MzQ6dm9pZCBwc3Bfc2tfYXNzb2NfZnJlZShzdHJ1Y3Qgc29jayAqc2spO1xcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0zNS12b2lkIHBzcF90d3NrX2luaXQoc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHcsIGNvbnN0IHN0cnVjdCBzb2NrICpzayk7XFxuLS1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9Mzc9dm9pZCBwc3BfcmVwbHlfc2V0X2RlY3J5cHRlZChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0zOC1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6Mzk6c3RhdGljIGlubGluZSBzdHJ1Y3QgcHNwX2Fzc29jICpwc3Bfc2tfYXNzb2MoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC00MC17XFxuLS1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9NDU9cHNwX2VucXVldWVfc2V0X2RlY3J5cHRlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtNDgtXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjQ5OlxcdHBhcyA9IHBzcF9za19hc3NvYyhzayk7XFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTUwLVxcdGlmIChwYXMgXFx1MDAyNlxcdTAwMjYgcGFzLVxcdTAwM2V0eC5zcGkpXFxuLS1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9MTE2PXBzcF9za19yeF9wb2xpY3lfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xMTcte1xcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDoxMTg6XFx0cmV0dXJuIF9fcHNwX3NrX3J4X3BvbGljeV9jaGVjayhza2IsIHBzcF9za19hc3NvYyhzaykpO1xcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xMTktfVxcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTE1MD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBwc3Bfc2tfb3ZlcmhlYWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTE1Ny0jZWxzZVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDoxNTg6c3RhdGljIGlubGluZSB2b2lkIHBzcF9za19hc3NvY19mcmVlKHN0cnVjdCBzb2NrICpzaykgeyB9XFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTE1OS1zdGF0aWMgaW5saW5lIHZvaWRcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD0xNjM9cHNwX3JlcGx5X3NldF9kZWNyeXB0ZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSB7IH1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTY0LVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDoxNjU6c3RhdGljIGlubGluZSBzdHJ1Y3QgcHNwX2Fzc29jICpwc3Bfc2tfYXNzb2MoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xNjYte1xcbi0tXFxubmV0L2NvcmUvc29jay5jPTI2NzQ9Ym9vbCBza19oYXNfZGVjcnlwdF91c2VyKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG5uZXQvY29yZS9zb2NrLmMtMjY3NS17XFxubmV0L2NvcmUvc29jay5jOjI2NzY6XFx0cmV0dXJuIHBzcF9za19hc3NvYyhzaykgfHxcXG5uZXQvY29yZS9zb2NrLmMtMjY3Ny1cXHQgICAgICAgKHNrX2lzX2luZXQoc2spIFxcdTAwMjZcXHUwMDI2IGluZXRfY3NrX2hhc191bHAoc2spKTsgLyogZm9yIHRscyAqL1xcbi0tXFxubmV0L2lwdjQvYWZfaW5ldC5jPTE0MD12b2lkIGluZXRfc29ja19kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTY2LVxcdGRzdF9yZWxlYXNlKHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoc2stXFx1MDAzZXNrX3J4X2RzdCwgMSkpO1xcbm5ldC9pcHY0L2FmX2luZXQuYzoxNjc6XFx0cHNwX3NrX2Fzc29jX2ZyZWUoc2spO1xcbm5ldC9pcHY0L2FmX2luZXQuYy0xNjgtfVxcbi0tXFxubmV0L3BzcC9wc3Bfc29jay5jPTExOD12b2lkIHBzcF9hc3NvY19wdXQoc3RydWN0IHBzcF9hc3NvYyAqcGFzKVxcbi0tXFxubmV0L3BzcC9wc3Bfc29jay5jLTEyMy1cXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTI0OnZvaWQgcHNwX3NrX2Fzc29jX2ZyZWUoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9wc3AvcHNwX3NvY2suYy0xMjUte1xcbi0tXFxubmV0L3BzcC9wc3Bfc29jay5jPTEzMj1pbnQgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9hc3NvYyAqcGFzLFxcbi0tXFxubmV0L3BzcC9wc3Bfc29jay5jLTE0MS1cXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTQyOlxcdGlmIChwc3Bfc2tfYXNzb2Moc2spKSB7XFxubmV0L3BzcC9wc3Bfc29jay5jLTE0My1cXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJTb2NrZXQgYWxyZWFkeSBoYXMgUFNQIHN0YXRlXFxcIik7XFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmM9MTgxPWludCBwc3Bfc29ja19hc3NvY19zZXRfdHgoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcHNwX2RldiAqcHNkLFxcbi0tXFxubmV0L3BzcC9wc3Bfc29jay5jLTE5MC1cXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTkxOlxcdHBhcyA9IHBzcF9za19hc3NvYyhzayk7XFxubmV0L3BzcC9wc3Bfc29jay5jLTE5Mi1cXHRpZiAoIXBhcykge1xcbi0tXFxubmV0L3BzcC9wc3Bfc29jay5jPTI3MD12b2lkIHBzcF90d3NrX2luaXQoc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHcsIGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG5uZXQvcHNwL3BzcF9zb2NrLmMtMjcxLXtcXG5uZXQvcHNwL3BzcF9zb2NrLmM6MjcyOlxcdHN0cnVjdCBwc3BfYXNzb2MgKnBhcyA9IHBzcF9za19hc3NvYyhzayk7XFxubmV0L3BzcC9wc3Bfc29jay5jLTI3My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6NDQ6NDMuMTI5NjE2OTgyWiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4MjQ4MDg4ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiBuZXR3b3JrIHByb2dyYW1taW5nL2tlcm5lbCBpbnRlcm5hbHM6XG5cbioqQ2hlY2tpbmcgYSBSZWxhdGVkIEZ1bmN0aW9uKipcblxuUmlnaHQsIEknbSBhbHJlYWR5IGluIHRoaXMgc2VjdGlvbiwgcmV2aWV3aW5nIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoaW5ncy4gQmVmb3JlIEkgbW92ZSBvbiBvciBmaW5hbGl6ZSB0aGlzIHBhcnRpY3VsYXIgY2hlY2ssIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gdmVyaWZ5IGBpbmV0X2Nza19oYXNfdWxwYC4gSXTigJlzIGEgcmVsYXRlZCBmdW5jdGlvbiwgbGlrZWx5IG9wZXJhdGluZyBpbiBhIHNpbWlsYXIgY29udGV4dCBvciBvbiBzaW1pbGFyIGRhdGEgc3RydWN0dXJlcy4gSSBuZWVkIHRvIGVuc3VyZSBteSB1bmRlcnN0YW5kaW5nIGFuZCBhc3N1bXB0aW9ucyBhcmUgY29uc2lzdGVudCBhY3Jvc3MgdGhpcyByZWxhdGVkIGNvZGUuIEl0J3MgdG9vIGVhc3kgdG8gbWlzcyBzb21ldGhpbmcgd2hlbiBmb2N1c2luZyBvbiBqdXN0IG9uZSBmdW5jdGlvbi4gTWFraW5nIHN1cmUgSSBhY2NvdW50IGZvciB0aGlzIHJlbGF0ZWQgZnVuY3Rpb24gd2lsbCBoZWxwIG1lIGJlIHRob3JvdWdoIGluIG15IHJldmlldy4gTGV0J3MgbWFrZSBzdXJlIEkgZGlkbid0IG92ZXJsb29rIHNvbWV0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY0OCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjQ0OjQ1Ljk1NDQzMzczMVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyNzMxNDIzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbmV0X2Nza19oYXNfdWxwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmg9MzM4PXN0YXRpYyBpbmxpbmUgdm9pZCBpbmV0X2Nza19pbmNfcGluZ3BvbmdfY250KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbmluY2x1ZGUvbmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmgtMzQ1LVxcbmluY2x1ZGUvbmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmg6MzQ2OnN0YXRpYyBpbmxpbmUgYm9vbCBpbmV0X2Nza19oYXNfdWxwKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG5pbmNsdWRlL25ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oLTM0Ny17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTc1MD1zdHJ1Y3Qgc2tfcHNvY2sgKnNrX3Bzb2NrX2luaXQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbm9kZSlcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtNzU2LVxcbm5ldC9jb3JlL3NrbXNnLmM6NzU3OlxcdGlmIChza19pc19pbmV0KHNrKSBcXHUwMDI2XFx1MDAyNiBpbmV0X2Nza19oYXNfdWxwKHNrKSkge1xcbm5ldC9jb3JlL3NrbXNnLmMtNzU4LVxcdFxcdHBzb2NrID0gRVJSX1BUUigtRUlOVkFMKTtcXG4tLVxcbm5ldC9jb3JlL3NvY2suYz0yNjc0PWJvb2wgc2tfaGFzX2RlY3J5cHRfdXNlcihjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvY29yZS9zb2NrLmMtMjY3Ni1cXHRyZXR1cm4gcHNwX3NrX2Fzc29jKHNrKSB8fFxcbm5ldC9jb3JlL3NvY2suYzoyNjc3OlxcdCAgICAgICAoc2tfaXNfaW5ldChzaykgXFx1MDAyNlxcdTAwMjYgaW5ldF9jc2tfaGFzX3VscChzaykpOyAvKiBmb3IgdGxzICovXFxubmV0L2NvcmUvc29jay5jLTI2NzgtfVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTcyNT1pbnQgdGNwX2JwZl91cGRhdGVfcHJvdG8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBib29sIHJlc3RvcmUpXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzM0LVxcdGlmIChyZXN0b3JlKSB7XFxubmV0L2lwdjQvdGNwX2JwZi5jOjczNTpcXHRcXHRpZiAoaW5ldF9jc2tfaGFzX3VscChzaykpIHtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzM2LVxcdFxcdFxcdC8qIFRMUyBkb2VzIG5vdCBoYXZlIGFuIHVuaGFzaCBwcm90byBpbiBTVyBjYXNlcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6NDQ6NDcuNDgxNzUyNjY0WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzNzc4OTE2OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGNoYW5nZXM6XG5cbioqQW5hbHl6aW5nIHRoZSBNdXR1YWwgRXhjbHVzaW9uIGFuZCBWYWxpZGF0aW9uIENoZWNrcyoqXG5cblJpZ2h0LCBzbyBJJ3ZlIGxvb2tlZCBvdmVyIHRoZXNlIHJlY2VudCBtb2RpZmljYXRpb25zLCBhbmQgaXQgc2VlbXMgdGhlIGZvY3VzIGlzIHN0cmljdGx5IG9uIG11dHVhbCBleGNsdXNpb24gYW5kIHZhbGlkYXRpb24gY2hlY2tzLiBXZSdyZSB0YWxraW5nIGFib3V0IGZ1bmN0aW9ucyBsaWtlIGBza19oYXNfZGVjcnlwdF91c2VyYCBhbmQgYHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYmAuIFRoZXNlIGFyZSBlc3NlbnRpYWxseSBnYXRla2VlcGVycywgZW5zdXJpbmcgdGhhdCB0aGUgYXR0YWNobWVudCBvZiBQU1AgYW5kIFVMUC94bWl0IHZhbGlkYXRpb24gdG8gYSBzb2NrZXQgZG9uJ3QgaGFwcGVuIHNpbXVsdGFuZW91c2x5LiBUaGF0J3MgZ29vZCwgbWluaW1pemVzIGNvbmN1cnJlbmN5IGlzc3Vlcy5cblxuQ3J1Y2lhbGx5LCBmcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGVzZSBjaGFuZ2VzIGRvbid0IGludHJvZHVjZSBhbnl0aGluZyB0cnVseSBjb25jZXJuaW5nIGZyb20gYSBtZW1vcnkgcGVyc3BlY3RpdmUuIEknbSBub3Qgc2VlaW5nIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb24sIHdlJ3JlIG5vdCBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFyb3VuZCwgYW5kIHRoZXJlIGFyZW4ndCBhbnkgbmV3IGJyYW5jaGluZyBwYXRocyB0aGF0IHdvdWxkIGRlcGVuZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGRhdGEuIFRoYXQncyBhIGh1Z2UgcmVsaWVmLlxuXG5UaGVyZWZvcmUsIGJlY2F1c2Ugb2YgdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlcywgSSBjYW4gY29uZmlkZW50bHkgc2F5IHRoYXQgd2UgZG9uJ3QgbmVlZCB0byBpbnZvbHZlIEtNU0FOIGluIHRoaXMgcGFydGljdWxhciBhcmVhLiBJdCBsb29rcyBsaWtlIHdlJ3JlIHNhZmUuXG5cbk5vdywgbGV0J3MgcHJlcGFyZSB0aGUgY2FsbCB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzMzLCJPdXRwdXRUb2tlbnMiOjE0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjQ0OjUwLjg1OTY0NjY2N1oiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBtdXR1YWwgZXhjbHVzaXZpdHkgY2hlY2tzIChza19oYXNfZGVjcnlwdF91c2VyIGFuZCBza19oYXNfdmFsaWRhdGVfeG1pdF9za2IpIHRvIHByZXZlbnQgaW5jb21wYXRpYmxlIHNvY2tldCBzdGF0ZXMgd2hlbiBjb25maWd1cmluZyBUQ1AgVUxQIChlLmcuIGtUTFMpIGFuZCBQU1AgKFBTUCBzZWN1cml0eSBwcm90b2NvbCkgb24gdGhlIHNhbWUgc29ja2V0LiBcXG5cXG5JdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBjb3BpZXMgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWNjZXNzIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIHNhbml0aXplcnMgbGlrZSBLQVNBTiBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgbWVtb3J5IHNhZmV0eSBvciBzdGF0ZSBtYW5hZ2VtZW50IGlzc3Vlcy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbXV0dWFsIGV4Y2x1c2l2aXR5IGNoZWNrcyAoc2tfaGFzX2RlY3J5cHRfdXNlciBhbmQgc2tfaGFzX3ZhbGlkYXRlX3htaXRfc2tiKSB0byBwcmV2ZW50IGluY29tcGF0aWJsZSBzb2NrZXQgc3RhdGVzIHdoZW4gY29uZmlndXJpbmcgVENQIFVMUCAoZS5nLiBrVExTKSBhbmQgUFNQIChQU1Agc2VjdXJpdHkgcHJvdG9jb2wpIG9uIHRoZSBzYW1lIHNvY2tldC4gXFxuXFxuSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgY29waWVzIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFjY2VzcyBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBzYW5pdGl6ZXJzIGxpa2UgS0FTQU4gYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG1lbW9yeSBzYWZldHkgb3Igc3RhdGUgbWFuYWdlbWVudCBpc3N1ZXMuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowd2hpl[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-10 23:57:22 +0000 UTC FinishedAt: 2026-09-11 00:44:52 +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": "2ac09b5353fe6858411fdc8c6efa60d832e20f13", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET_PSP", "TLS", "TLS_DEVICE", "NETDEVSIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2ac09b5353fe6858411fdc8c6efa60d832e20f13", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET_PSP", "TLS", "TLS_DEVICE", "NETDEVSIM" ], "series_id": "6881b4dd-0336-48dd-9f85-10be87dfd169" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "sk_has_decrypt_user", "tcp_set_ulp", "__tcp_set_ulp", "psp_sock_assoc_set_rx", "psp_nl_rx_assoc_doit" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVRfUFNQJiMzNDssCiAgICAmIzM0O1RMUyYjMzQ7LAogICAgJiMzNDtUTFNfREVWSUNFJiMzNDssCiAgICAmIzM0O05FVERFVlNJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrX2hhc19kZWNyeXB0X3VzZXImIzM0OywKICAgICYjMzQ7dGNwX3NldF91bHAmIzM0OywKICAgICYjMzQ7X190Y3Bfc2V0X3VscCYjMzQ7LAogICAgJiMzNDtwc3Bfc29ja19hc3NvY19zZXRfcngmIzM0OywKICAgICYjMzQ7cHNwX25sX3J4X2Fzc29jX2RvaXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG11dHVhbCBleGNsdXNpdml0eSBjaGVja3MgKHNrX2hhc19kZWNyeXB0X3VzZXIgYW5kIHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYikgdG8gcHJldmVudCBpbmNvbXBhdGlibGUgc29ja2V0IHN0YXRlcyB3aGVuIGNvbmZpZ3VyaW5nIFRDUCBVTFAgKGUuZy4ga1RMUykgYW5kIFBTUCAoUFNQIHNlY3VyaXR5IHByb3RvY29sKSBvbiB0aGUgc2FtZSBzb2NrZXQuIFxuXG5JdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBjb3BpZXMgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWNjZXNzIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIHNhbml0aXplcnMgbGlrZSBLQVNBTiBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgbWVtb3J5IHNhZmV0eSBvciBzdGF0ZSBtYW5hZ2VtZW50IGlzc3Vlcy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHNvY2tldCBzdGF0ZSBleGNsdXNpdml0eSBjaGVja3MgYmV0d2VlbiBQU1AgKFBTUCBTZWN1cml0eSBQcm90b2NvbCkgc29ja2V0IGFzc29jaWF0aW9ucywgVENQIFVMUCAoZS5nLiwga1RMUyksIGFuZCBzb2NrZXRzIHdpdGggdHJhbnNtaXQgdmFsaWRhdGlvbiBoYW5kbGVycyAoc2tfdmFsaWRhdGVfeG1pdF9za2IpLiBJdCBhZGRzIHNrX2hhc19kZWNyeXB0X3VzZXIoKSBhbmQgc2tfaGFzX3ZhbGlkYXRlX3htaXRfc2tiKCkgdmFsaWRhdGlvbnMgaW4gX190Y3Bfc2V0X3VscCgpIGFuZCBwc3Bfc29ja19hc3NvY19zZXRfcngoKSB0byBwcmV2ZW50IGNvbmZsaWN0aW5nIHNvY2tldCBvZmZsb2FkIHN0YXRlcy4gVGhlc2UgY29kZSBwYXRocyBhcmUgcmVhY2hhYmxlIHZpYSBUQ1Agc2V0c29ja29wdChUQ1BfVUxQKSBhbmQgUFNQIE5ldGxpbmsgY29tbWFuZHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDA6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzYjRmMjJlMWQyZTJmYjgyM2Q4MmJiNjRhMWUxOTQzNDg0NzUxMmMwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDA6NDI6NTYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc29jay5oIGIvaW5jbHVkZS9uZXQvc29jay5oXG5pbmRleCA1MTE4NTIyMmFhYzI5Li5iYTVlNTA5MmYxOTJjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvc29jay5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9zb2NrLmhcbkBAIC0yMzEyLDYgJiM0MzsyMzEyLDE3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBza19nc29fZGlzYWJsZShzdHJ1Y3Qgc29jayAqc2spXG4gXHRzay1cdTAwM2Vza19yb3V0ZV9jYXBzIFx1MDAyNj0gfk5FVElGX0ZfR1NPX01BU0s7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgc2tfaGFzX3ZhbGlkYXRlX3htaXRfc2tiKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbiYjNDM7e1xuJiM0MzsjaWZkZWYgQ09ORklHX1NPQ0tfVkFMSURBVEVfWE1JVFxuJiM0MztcdHJldHVybiAhIXNrLVx1MDAzZXNrX3ZhbGlkYXRlX3htaXRfc2tiO1xuJiM0MzsjZWxzZVxuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7I2VuZGlmXG4mIzQzO31cbiYjNDM7XG4mIzQzO2Jvb2wgc2tfaGFzX2RlY3J5cHRfdXNlcihjb25zdCBzdHJ1Y3Qgc29jayAqc2spO1xuJiM0MztcbiBzdGF0aWMgaW5saW5lIGludCBza2JfZG9fY29weV9kYXRhX25vY2FjaGUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sIGNoYXIgKnRvLFxuIFx0XHRcdFx0XHQgICBpbnQgY29weSwgaW50IG9mZnNldClcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9zb2NrLmMgYi9uZXQvY29yZS9zb2NrLmNcbmluZGV4IGZhNjBiNzQ5NGM1ODYuLjk0ODlkOWM0Nzk0OTMgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9zb2NrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NvY2suY1xuQEAgLTE0Miw2ICYjNDM7MTQyLDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvc29jay5oXHUwMDNlXG4gXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9wc3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9idXN5X3BvbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9waG9uZXQvcGhvbmV0LmhcdTAwM2VcbkBAIC0yNjcwLDYgJiM0MzsyNjcxLDEyIEBAIHZvaWQgc2tfc2V0dXBfY2FwcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoc2tfc2V0dXBfY2Fwcyk7XG4gXG4mIzQzO2Jvb2wgc2tfaGFzX2RlY3J5cHRfdXNlcihjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcHNwX3NrX2Fzc29jKHNrKSB8fFxuJiM0MztcdCAgICAgICAoc2tfaXNfaW5ldChzaykgXHUwMDI2XHUwMDI2IGluZXRfY3NrX2hhc191bHAoc2spKTsgLyogZm9yIHRscyAqL1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICpcdFNpbXBsZSByZXNvdXJjZSBtYW5hZ2VycyBmb3Igc29ja2V0cy5cbiAgKi9cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfdWxwLmMgYi9uZXQvaXB2NC90Y3BfdWxwLmNcbmluZGV4IDJhYTQ0MjEyODYzMGUuLmYzZTBjOWQzNzliYjYgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfdWxwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF91bHAuY1xuQEAgLTEzNiw2ICYjNDM7MTM2LDEwIEBAIHN0YXRpYyBpbnQgX190Y3Bfc2V0X3VscChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCB0Y3BfdWxwX29wcyAqdWxwX29wcylcbiBcdGlmIChpY3NrLVx1MDAzZWljc2tfdWxwX29wcylcbiBcdFx0Z290byBvdXRfZXJyO1xuIFxuJiM0MztcdGVyciA9IC1FSU5WQUw7XG4mIzQzO1x0aWYgKHNrX2hhc19kZWNyeXB0X3VzZXIoc2spIHx8IHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYihzaykpXG4mIzQzO1x0XHRnb3RvIG91dF9lcnI7XG4mIzQzO1xuIFx0aWYgKHNrLVx1MDAzZXNrX3NvY2tldClcbiBcdFx0Y2xlYXJfYml0KFNPQ0tfU1VQUE9SVF9aQywgXHUwMDI2c2stXHUwMDNlc2tfc29ja2V0LVx1MDAzZWZsYWdzKTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvcHNwL3BzcF9zb2NrLmMgYi9uZXQvcHNwL3BzcF9zb2NrLmNcbmluZGV4IDFhMmE2Yjc1MTZiMGYuLjUwOTAzNTYxNzg5NGEgMTAwNjQ0XG4tLS0gYS9uZXQvcHNwL3BzcF9zb2NrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9wc3AvcHNwX3NvY2suY1xuQEAgLTE0Myw2ICYjNDM7MTQzLDEwIEBAIGludCBwc3Bfc29ja19hc3NvY19zZXRfcngoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsXG4gXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7U29ja2V0IGFscmVhZHkgaGFzIFBTUCBzdGF0ZVwmIzM0Oyk7XG4gXHRcdGVyciA9IC1FQlVTWTtcbiBcdFx0Z290byBleGl0X3VubG9jaztcbiYjNDM7XHR9IGVsc2UgaWYgKHNrX2hhc19kZWNyeXB0X3VzZXIoc2spIHx8IHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYihzaykpIHtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7U29ja2V0IGhhcyBpbmNvbXBhdGlibGUgc3RhdGVcJiMzNDspO1xuJiM0MztcdFx0ZXJyID0gLUVJTlZBTDtcbiYjNDM7XHRcdGdvdG8gZXhpdF91bmxvY2s7XG4gXHR9XG4gXG4gXHRyZWZjb3VudF9pbmMoXHUwMDI2cGFzLVx1MDAzZXJlZmNudCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnXG5pbmRleCBiNjk4OWM3ZDNkOWQxLi40ODM4YWRmMjdmYTFiIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWdcbkBAIC0yMSw1ICYjNDM7MjEsNiBAQCBDT05GSUdfTkVUX1NDSF9JTkdSRVNTPXlcbiBDT05GSUdfTkVUX1NDSF9QUklPPW1cbiBDT05GSUdfUFBQPXlcbiBDT05GSUdfUFBQT0U9eVxuJiM0MztDT05GSUdfVExTPXlcbiBDT05GSUdfVkxBTl84MDIxUT1tXG4gQ09ORklHX1hEUF9TT0NLRVRTPXlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHlcbmluZGV4IDMxNTY0OGE3NzBkMDAuLjEyYjI3ZjJhM2ZhMWIgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHlcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weVxuQEAgLTIzLDYgJiM0MzsyMyw4IEBAIGZyb20gbGliLnB5IGltcG9ydCBOZXROU0VudGVyXG4gZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgcmFuZF9wb3J0LCB3YWl0X3BvcnRfbGlzdGVuXG4gZnJvbSBsaWIucHkgaW1wb3J0IGlwXG4gXG4mIzQzO1RDUF9VTFAgPSAzMVxuJiM0MztcbiBcbiBkZWYgX2dldF9vdXRxKHMpOlxuICAgICBvbmUgPSBiJiMzOTtcXDAmIzM5OyAqIDRcbkBAIC0zMzMsNiAmIzQzOzMzNSw1MCBAQCBkZWYgYXNzb2NfdmVyc2lvbl9taXNtYXRjaChjZmcpOlxuICAgICAgICAgICAgIGtzZnRfZXEodGhlX2V4Y2VwdGlvbi5ubF9tc2cuZXJyb3IsIC1lcnJuby5FSU5WQUwpXG4gXG4gXG4mIzQzO2RlZiBfcmVxdWlyZV90bHNfdWxwKCk6XG4mIzQzOyAgICB3aXRoIHNvY2tldC5jcmVhdGVfc2VydmVyKChcJiMzNDtsb2NhbGhvc3RcJiMzNDssIDApKSBhcyBzcnY6XG4mIzQzOyAgICAgICAgd2l0aCBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oc3J2LmdldHNvY2tuYW1lKCkpIGFzIHM6XG4mIzQzOyAgICAgICAgICAgIHRyeTpcbiYjNDM7ICAgICAgICAgICAgICAgIHMuc2V0c29ja29wdChzb2NrZXQuU09MX1RDUCwgVENQX1VMUCwgYlwmIzM0O3Rsc1wmIzM0OylcbiYjNDM7ICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOlxuJiM0MzsgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcJiMzNDtrVExTIG5vdCBhdmFpbGFibGVcJiMzNDspIGZyb20gZXhjXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIGFzc29jX3BzcF91bHBfZXhjbHVzaXZlKGNmZyk6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDsgVGVzdCB0aGF0IGEgVENQIFVMUCBjYW5ub3QgYmUgYXR0YWNoZWQgdG8gYSBQU1Agc29ja2V0IFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgX2luaXRfcHNwX2RldihjZmcpXG4mIzQzOyAgICBfcmVxdWlyZV90bHNfdWxwKClcbiYjNDM7XG4mIzQzOyAgICB3aXRoIF9tYWtlX2Nscl9jb25uKGNmZykgYXMgczpcbiYjNDM7ICAgICAgICB0cnk6XG4mIzQzOyAgICAgICAgICAgIGNmZy5wc3BubC5yeF9hc3NvYyh7XCYjMzQ7dmVyc2lvblwmIzM0OzogMCxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcJiMzNDtkZXYtaWRcJiMzNDs6IGNmZy5wc3BfZGV2X2lkLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwmIzM0O3NvY2stZmRcJiMzNDs6IHMuZmlsZW5vKCl9KVxuJiM0MzsgICAgICAgICAgICB3aXRoIGtzZnRfcmFpc2VzKE9TRXJyb3IpIGFzIGNtOlxuJiM0MzsgICAgICAgICAgICAgICAgcy5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfVENQLCBUQ1BfVUxQLCBiXCYjMzQ7dGxzXCYjMzQ7KVxuJiM0MzsgICAgICAgICAgICBrc2Z0X2VxKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRUlOVkFMKVxuJiM0MzsgICAgICAgIGZpbmFsbHk6XG4mIzQzOyAgICAgICAgICAgIF9jbG9zZV9jb25uKGNmZywgcylcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgYXNzb2NfdWxwX3BzcF9leGNsdXNpdmUoY2ZnKTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0OyBUZXN0IHRoYXQgYSBQU1AgYXNzb2MgY2Fubm90IGJlIGFkZGVkIHRvIGEgc29ja2V0IHdpdGggYSBUQ1AgVUxQIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgX2luaXRfcHNwX2RldihjZmcpXG4mIzQzOyAgICBfcmVxdWlyZV90bHNfdWxwKClcbiYjNDM7XG4mIzQzOyAgICB3aXRoIF9tYWtlX2Nscl9jb25uKGNmZykgYXMgczpcbiYjNDM7ICAgICAgICB0cnk6XG4mIzQzOyAgICAgICAgICAgIHMuc2V0c29ja29wdChzb2NrZXQuU09MX1RDUCwgVENQX1VMUCwgYlwmIzM0O3Rsc1wmIzM0OylcbiYjNDM7ICAgICAgICAgICAgd2l0aCBrc2Z0X3JhaXNlcyhObEVycm9yKSBhcyBjbTpcbiYjNDM7ICAgICAgICAgICAgICAgIGNmZy5wc3BubC5yeF9hc3NvYyh7XCYjMzQ7dmVyc2lvblwmIzM0OzogMCxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCYjMzQ7ZGV2LWlkXCYjMzQ7OiBjZmcucHNwX2Rldl9pZCxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCYjMzQ7c29jay1mZFwmIzM0Ozogcy5maWxlbm8oKX0pXG4mIzQzOyAgICAgICAgICAgIGtzZnRfZXEoY20uZXhjZXB0aW9uLm5sX21zZy5lcnJvciwgLWVycm5vLkVJTlZBTClcbiYjNDM7ICAgICAgICAgICAga3NmdF9lcShjbS5leGNlcHRpb24ubmxfbXNnLmV4dGFja1smIzM5O2JhZC1hdHRyJiMzOTtdLCBcJiMzNDsuc29jay1mZFwmIzM0OylcbiYjNDM7ICAgICAgICBmaW5hbGx5OlxuJiM0MzsgICAgICAgICAgICBfY2xvc2VfY29ubihjZmcsIHMpXG4mIzQzO1xuJiM0MztcbiBkZWYgYXNzb2NfdHdpY2UoY2ZnKTpcbiAgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7IFRlc3QgcmV1c2luZyBUeCBhc3NvYyBmb3IgdHdvIHNvY2tldHMgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4gICAgIF9pbml0X3BzcF9kZXYoY2ZnKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjQzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVRfUFNQJiMzNDssCiAgICAmIzM0O1RMUyYjMzQ7LAogICAgJiMzNDtUTFNfREVWSUNFJiMzNDssCiAgICAmIzM0O05FVERFVlNJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NrX2hhc19kZWNyeXB0X3VzZXImIzM0OywKICAgICYjMzQ7dGNwX3NldF91bHAmIzM0OywKICAgICYjMzQ7X190Y3Bfc2V0X3VscCYjMzQ7LAogICAgJiMzNDtwc3Bfc29ja19hc3NvY19zZXRfcngmIzM0OywKICAgICYjMzQ7cHNwX25sX3J4X2Fzc29jX2RvaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzb2NrZXQgc3RhdGUgZXhjbHVzaXZpdHkgY2hlY2tzIGJldHdlZW4gUFNQIChQU1AgU2VjdXJpdHkgUHJvdG9jb2wpIHNvY2tldCBhc3NvY2lhdGlvbnMsIFRDUCBVTFAgKGUuZy4sIGtUTFMpLCBhbmQgc29ja2V0cyB3aXRoIHRyYW5zbWl0IHZhbGlkYXRpb24gaGFuZGxlcnMgKHNrX3ZhbGlkYXRlX3htaXRfc2tiKS4gSXQgYWRkcyBza19oYXNfZGVjcnlwdF91c2VyKCkgYW5kIHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYigpIHZhbGlkYXRpb25zIGluIF9fdGNwX3NldF91bHAoKSBhbmQgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4KCkgdG8gcHJldmVudCBjb25mbGljdGluZyBzb2NrZXQgb2ZmbG9hZCBzdGF0ZXMuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIHJlYWNoYWJsZSB2aWEgVENQIHNldHNvY2tvcHQoVENQX1VMUCkgYW5kIFBTUCBOZXRsaW5rIGNvbW1hbmRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgM2I0ZjIyZTFkMmUyZmI4MjNkODJiYjY0YTFlMTk0MzQ4NDc1MTJjMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDAwOjQyOjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc29jay5oIGIvaW5jbHVkZS9uZXQvc29jay5oCmluZGV4IDUxMTg1MjIyYWFjMjkuLmJhNWU1MDkyZjE5MmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NvY2suaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9zb2NrLmgKQEAgLTIzMTIsNiAmIzQzOzIzMTIsMTcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNrX2dzb19kaXNhYmxlKHN0cnVjdCBzb2NrICpzaykKIAlzay0mZ3Q7c2tfcm91dGVfY2FwcyAmYW1wOz0gfk5FVElGX0ZfR1NPX01BU0s7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgc2tfaGFzX3ZhbGlkYXRlX3htaXRfc2tiKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7I2lmZGVmIENPTkZJR19TT0NLX1ZBTElEQVRFX1hNSVQKJiM0MzsJcmV0dXJuICEhc2stJmd0O3NrX3ZhbGlkYXRlX3htaXRfc2tiOwomIzQzOyNlbHNlCiYjNDM7CXJldHVybiBmYWxzZTsKJiM0MzsjZW5kaWYKJiM0Mzt9CiYjNDM7CiYjNDM7Ym9vbCBza19oYXNfZGVjcnlwdF91c2VyKGNvbnN0IHN0cnVjdCBzb2NrICpzayk7CiYjNDM7CiBzdGF0aWMgaW5saW5lIGludCBza2JfZG9fY29weV9kYXRhX25vY2FjaGUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQkgICBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sIGNoYXIgKnRvLAogCQkJCQkgICBpbnQgY29weSwgaW50IG9mZnNldCkKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2suYyBiL25ldC9jb3JlL3NvY2suYwppbmRleCBmYTYwYjc0OTRjNTg2Li45NDg5ZDljNDc5NDkzIDEwMDY0NAotLS0gYS9uZXQvY29yZS9zb2NrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc29jay5jCkBAIC0xNDIsNiAmIzQzOzE0Miw3IEBACiAKICNpbmNsdWRlICZsdDt0cmFjZS9ldmVudHMvc29jay5oJmd0OwogCiYjNDM7I2luY2x1ZGUgJmx0O25ldC9wc3AuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvdGNwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2J1c3lfcG9sbC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9waG9uZXQvcGhvbmV0LmgmZ3Q7CkBAIC0yNjcwLDYgJiM0MzsyNjcxLDEyIEBAIHZvaWQgc2tfc2V0dXBfY2FwcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNrX3NldHVwX2NhcHMpOwogCiYjNDM7Ym9vbCBza19oYXNfZGVjcnlwdF91c2VyKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7CXJldHVybiBwc3Bfc2tfYXNzb2Moc2spIHx8CiYjNDM7CSAgICAgICAoc2tfaXNfaW5ldChzaykgJmFtcDsmYW1wOyBpbmV0X2Nza19oYXNfdWxwKHNrKSk7IC8qIGZvciB0bHMgKi8KJiM0Mzt9CiYjNDM7CiAvKgogICoJU2ltcGxlIHJlc291cmNlIG1hbmFnZXJzIGZvciBzb2NrZXRzLgogICovCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfdWxwLmMgYi9uZXQvaXB2NC90Y3BfdWxwLmMKaW5kZXggMmFhNDQyMTI4NjMwZS4uZjNlMGM5ZDM3OWJiNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX3VscC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF91bHAuYwpAQCAtMTM2LDYgJiM0MzsxMzYsMTAgQEAgc3RhdGljIGludCBfX3RjcF9zZXRfdWxwKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHRjcF91bHBfb3BzICp1bHBfb3BzKQogCWlmIChpY3NrLSZndDtpY3NrX3VscF9vcHMpCiAJCWdvdG8gb3V0X2VycjsKIAomIzQzOwllcnIgPSAtRUlOVkFMOwomIzQzOwlpZiAoc2tfaGFzX2RlY3J5cHRfdXNlcihzaykgfHwgc2tfaGFzX3ZhbGlkYXRlX3htaXRfc2tiKHNrKSkKJiM0MzsJCWdvdG8gb3V0X2VycjsKJiM0MzsKIAlpZiAoc2stJmd0O3NrX3NvY2tldCkKIAkJY2xlYXJfYml0KFNPQ0tfU1VQUE9SVF9aQywgJmFtcDtzay0mZ3Q7c2tfc29ja2V0LSZndDtmbGFncyk7CiAKZGlmZiAtLWdpdCBhL25ldC9wc3AvcHNwX3NvY2suYyBiL25ldC9wc3AvcHNwX3NvY2suYwppbmRleCAxYTJhNmI3NTE2YjBmLi41MDkwMzU2MTc4OTRhIDEwMDY0NAotLS0gYS9uZXQvcHNwL3BzcF9zb2NrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3BzcC9wc3Bfc29jay5jCkBAIC0xNDMsNiAmIzQzOzE0MywxMCBAQCBpbnQgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9hc3NvYyAqcGFzLAogCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7U29ja2V0IGFscmVhZHkgaGFzIFBTUCBzdGF0ZSYjMzQ7KTsKIAkJZXJyID0gLUVCVVNZOwogCQlnb3RvIGV4aXRfdW5sb2NrOwomIzQzOwl9IGVsc2UgaWYgKHNrX2hhc19kZWNyeXB0X3VzZXIoc2spIHx8IHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYihzaykpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDtTb2NrZXQgaGFzIGluY29tcGF0aWJsZSBzdGF0ZSYjMzQ7KTsKJiM0MzsJCWVyciA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIGV4aXRfdW5sb2NrOwogCX0KIAogCXJlZmNvdW50X2luYygmYW1wO3Bhcy0mZ3Q7cmVmY250KTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZwppbmRleCBiNjk4OWM3ZDNkOWQxLi40ODM4YWRmMjdmYTFiIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnCkBAIC0yMSw1ICYjNDM7MjEsNiBAQCBDT05GSUdfTkVUX1NDSF9JTkdSRVNTPXkKIENPTkZJR19ORVRfU0NIX1BSSU89bQogQ09ORklHX1BQUD15CiBDT05GSUdfUFBQT0U9eQomIzQzO0NPTkZJR19UTFM9eQogQ09ORklHX1ZMQU5fODAyMVE9bQogQ09ORklHX1hEUF9TT0NLRVRTPXkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weQppbmRleCAzMTU2NDhhNzcwZDAwLi4xMmIyN2YyYTNmYTFiIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHkKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5CkBAIC0yMyw2ICYjNDM7MjMsOCBAQCBmcm9tIGxpYi5weSBpbXBvcnQgTmV0TlNFbnRlcgogZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgcmFuZF9wb3J0LCB3YWl0X3BvcnRfbGlzdGVuCiBmcm9tIGxpYi5weSBpbXBvcnQgaXAKIAomIzQzO1RDUF9VTFAgPSAzMQomIzQzOwogCiBkZWYgX2dldF9vdXRxKHMpOgogICAgIG9uZSA9IGImIzM5O1wwJiMzOTsgKiA0CkBAIC0zMzMsNiAmIzQzOzMzNSw1MCBAQCBkZWYgYXNzb2NfdmVyc2lvbl9taXNtYXRjaChjZmcpOgogICAgICAgICAgICAga3NmdF9lcSh0aGVfZXhjZXB0aW9uLm5sX21zZy5lcnJvciwgLWVycm5vLkVJTlZBTCkKIAogCiYjNDM7ZGVmIF9yZXF1aXJlX3Rsc191bHAoKToKJiM0MzsgICAgd2l0aCBzb2NrZXQuY3JlYXRlX3NlcnZlcigoJiMzNDtsb2NhbGhvc3QmIzM0OywgMCkpIGFzIHNydjoKJiM0MzsgICAgICAgIHdpdGggc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKHNydi5nZXRzb2NrbmFtZSgpKSBhcyBzOgomIzQzOyAgICAgICAgICAgIHRyeToKJiM0MzsgICAgICAgICAgICAgICAgcy5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfVENQLCBUQ1BfVUxQLCBiJiMzNDt0bHMmIzM0OykKJiM0MzsgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CiYjNDM7ICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoJiMzNDtrVExTIG5vdCBhdmFpbGFibGUmIzM0OykgZnJvbSBleGMKJiM0MzsKJiM0MzsKJiM0MztkZWYgYXNzb2NfcHNwX3VscF9leGNsdXNpdmUoY2ZnKToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7IFRlc3QgdGhhdCBhIFRDUCBVTFAgY2Fubm90IGJlIGF0dGFjaGVkIHRvIGEgUFNQIHNvY2tldCAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgX2luaXRfcHNwX2RldihjZmcpCiYjNDM7ICAgIF9yZXF1aXJlX3Rsc191bHAoKQomIzQzOwomIzQzOyAgICB3aXRoIF9tYWtlX2Nscl9jb25uKGNmZykgYXMgczoKJiM0MzsgICAgICAgIHRyeToKJiM0MzsgICAgICAgICAgICBjZmcucHNwbmwucnhfYXNzb2MoeyYjMzQ7dmVyc2lvbiYjMzQ7OiAwLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiMzNDtkZXYtaWQmIzM0OzogY2ZnLnBzcF9kZXZfaWQsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIzM0O3NvY2stZmQmIzM0Ozogcy5maWxlbm8oKX0pCiYjNDM7ICAgICAgICAgICAgd2l0aCBrc2Z0X3JhaXNlcyhPU0Vycm9yKSBhcyBjbToKJiM0MzsgICAgICAgICAgICAgICAgcy5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfVENQLCBUQ1BfVUxQLCBiJiMzNDt0bHMmIzM0OykKJiM0MzsgICAgICAgICAgICBrc2Z0X2VxKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRUlOVkFMKQomIzQzOyAgICAgICAgZmluYWxseToKJiM0MzsgICAgICAgICAgICBfY2xvc2VfY29ubihjZmcsIHMpCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIGFzc29jX3VscF9wc3BfZXhjbHVzaXZlKGNmZyk6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OyBUZXN0IHRoYXQgYSBQU1AgYXNzb2MgY2Fubm90IGJlIGFkZGVkIHRvIGEgc29ja2V0IHdpdGggYSBUQ1AgVUxQICYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBfaW5pdF9wc3BfZGV2KGNmZykKJiM0MzsgICAgX3JlcXVpcmVfdGxzX3VscCgpCiYjNDM7CiYjNDM7ICAgIHdpdGggX21ha2VfY2xyX2Nvbm4oY2ZnKSBhcyBzOgomIzQzOyAgICAgICAgdHJ5OgomIzQzOyAgICAgICAgICAgIHMuc2V0c29ja29wdChzb2NrZXQuU09MX1RDUCwgVENQX1VMUCwgYiYjMzQ7dGxzJiMzNDspCiYjNDM7ICAgICAgICAgICAgd2l0aCBrc2Z0X3JhaXNlcyhObEVycm9yKSBhcyBjbToKJiM0MzsgICAgICAgICAgICAgICAgY2ZnLnBzcG5sLnJ4X2Fzc29jKHsmIzM0O3ZlcnNpb24mIzM0OzogMCwKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIzM0O2Rldi1pZCYjMzQ7OiBjZmcucHNwX2Rldl9pZCwKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIzM0O3NvY2stZmQmIzM0Ozogcy5maWxlbm8oKX0pCiYjNDM7ICAgICAgICAgICAga3NmdF9lcShjbS5leGNlcHRpb24ubmxfbXNnLmVycm9yLCAtZXJybm8uRUlOVkFMKQomIzQzOyAgICAgICAgICAgIGtzZnRfZXEoY20uZXhjZXB0aW9uLm5sX21zZy5leHRhY2tbJiMzOTtiYWQtYXR0ciYjMzk7XSwgJiMzNDsuc29jay1mZCYjMzQ7KQomIzQzOyAgICAgICAgZmluYWxseToKJiM0MzsgICAgICAgICAgICBfY2xvc2VfY29ubihjZmcsIHMpCiYjNDM7CiYjNDM7CiBkZWYgYXNzb2NfdHdpY2UoY2ZnKToKICAgICAmIzM0OyYjMzQ7JiMzNDsgVGVzdCByZXVzaW5nIFR4IGFzc29jIGZvciB0d28gc29ja2V0cyAmIzM0OyYjMzQ7JiMzNDsKICAgICBfaW5pdF9wc3BfZGV2KGNmZykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc0MwoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDIwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NpbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIFRoaXMgUGF0Y2ggU2VyaWVzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZ2l2ZW4gYSBwYXRjaCBzZXJpZXMgYW5kIGFza2VkIHRvIGRldGVybWluZSBpZiBpdCYjMzk7cyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0JiMzOTtzIGRpdmUgaW4uIFRoZSBmaXJzdCBzdGVwIGlzIHRvIHF1aWNrbHkgYW5hbHl6ZSB0aGUgY2hhbmdlcy4gTG9va3MgbGlrZSB3ZSYjMzk7dmUgZ290IG1vZGlmaWNhdGlvbnMgdG8gYGluY2x1ZGUvbmV0L3NvY2suaGAsIGBuZXQvY29yZS9zb2NrLmNgLCBgbmV0L2lwdjQvdGNwX3VscC5jYCwgYG5ldC9wc3AvcHNwX3NvY2suY2AsIGFuZCBzb21lIHNlbGZ0ZXN0cy4gVGhlIGFkZGl0aW9uIG9mIGBza19oYXNfdmFsaWRhdGVfeG1pdF9za2JgIGFuZCBgc2tfaGFzX2RlY3J5cHRfdXNlcmAgaW4gYHNvY2suaGAgYW5kIHRoZWlyIHN1YnNlcXVlbnQgZGVmaW5pdGlvbiBhbmQgdXNlLCBhbG9uZyB3aXRoIHRoZSBjaGVja3MgaW4gYF9fdGNwX3NldF91bHBgIGFuZCBgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4YCwgYXJlIHRoZSBicmVhZGNydW1icy4gSXQgc2VlbXMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgcmVsYXRlZCB0byBzb2NrZXQgaGFuZGxpbmcsIHBvdGVudGlhbGx5IGVuY3J5cHRpb24gb3Igc29tZSBraW5kIG9mIHBhY2tldCBwcm9jZXNzaW5nIHdpdGggUFNQLCBhbmQgaXQgbWFrZXMgbWUgdGhpbmsgYWJvdXQgcG90ZW50aWFsIGZvciBpbnRlcmVzdGluZyBiZWhhdmlvcnMsIGFuZCBwb3NzaWJsZSB2dWxuZXJhYmlsaXRpZXMuCgpUbyBwcm9wZXJseSBnYXVnZSB0aGUgZnV6emluZyBwb3RlbnRpYWwsIEkgbmVlZCBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgUFNQIHBhcnQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgUFNQIGFjdHVhbGx5ICppcyouIFdoYXQgY29uZmlndXJhdGlvbiBmbGFncyBhcmUgaW52b2x2ZWQ/IFdoYXQgb3RoZXIgY29kZSBjYWxscyB0aGVzZSBmdW5jdGlvbnMgb3IgdXNlcyB0aGVzZSBzdHJ1Y3R1cmVzPyBXZSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSB0aGUgZm9jdXMgc3ltYm9scyBhbmQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBmb3IgYSBmdWxsIGV2YWx1YXRpb24uIFRpbWUgdG8gZHVzdCBvZmYgdGhlIGBnaXQgZ3JlcGAgc2tpbGxzIGFuZCBzdGFydCBodW50aW5nIGRvd24gcmVsZXZhbnQgY29kZSB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcmVmZXJlbmNlcyB0byBQU1AsIGFueSByZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIGFueXRoaW5nIHRoYXQgbWlnaHQgZ2l2ZSBpbnNpZ2h0IGludG8gaG93IHRoZXNlIG5ldyBmdW5jdGlvbnMgYXJlIHVzZWQuIFdlIG5lZWQgdG8gaWRlbnRpZnkgYWxsIHJlbGV2YW50IGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4gVGhpcyBzaG91bGQgZ2V0IHVzIGEgZ29vZCBwaWN0dXJlIG9mIHRoZSBhdHRhY2sgc3VyZmFjZSBoZXJlIGFuZCBpZiB0aGlzIGRlc2VydmVzIG1vcmUgYXR0ZW50aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX1BTUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM0OAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OgoKKipEaWdnaW5nIGludG8gdGhlIGBuZXQvcHNwL2AgRGlyZWN0b3J5KioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIG5ldHdvcmsgZnVuY3Rpb25hbGl0eSBpcyBjb25maWd1cmVkIGFuZCBidWlsdC4gTXkgZmlyc3QgbW92ZSBpcyB0byBoZWFkIHN0cmFpZ2h0IGludG8gdGhlIGBuZXQvcHNwL2AgZGlyZWN0b3J5LiBUaGlzIHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBmb3IgdGhlIGNvcmUgb2YgdGhlIGltcGxlbWVudGF0aW9uLiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gdW5kZXJzdGFuZCBpdHMgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbnkgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUsIGFuZCBob3cgaXQgZ2V0cyBpbnRlZ3JhdGVkIGludG8gdGhlIG92ZXJhbGwgYnVpbGQgcHJvY2Vzcy4gVG8gZG8gdGhhdCwgSSYjMzk7bSBnb2luZyB0byB6ZXJvIGluIG9uIGVpdGhlciBhIEtjb25maWcgZmlsZSwgb3IgcG90ZW50aWFsbHkgYSBNYWtlZmlsZSwgd2l0aGluIHRoaXMgZGlyZWN0b3J5LiBUaG9zZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzLiBEZXBlbmRpbmcgb24gd2hhdCBJIGZpbmQsIEkmIzM5O2xsIHRoZW4gbW92ZSBvbnRvIGFuYWx5c2luZyBvdGhlciBmaWxlcyBhbmQgZGlyZWN0b3JpZXMsIGJ1dCB0aGVzZSBhcmUgbXkgc3RhcnRpbmcgcG9pbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Y29kZXNlYXJjaC1kaXItaW5kZXg8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0RpciYjMzQ7OiAmIzM0O25ldC9wc3AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZXMmIzM0OzogWwogICAgJiMzNDtwc3AtbmwtZ2VuLmMmIzM0OywKICAgICYjMzQ7cHNwLW5sLWdlbi5oJiMzNDssCiAgICAmIzM0O3BzcC5oJiMzNDssCiAgICAmIzM0O3BzcF9tYWluLmMmIzM0OywKICAgICYjMzQ7cHNwX25sLmMmIzM0OywKICAgICYjMzQ7cHNwX3NvY2suYyYjMzQ7CiAgXSwKICAmIzM0O1N1YmRpcnMmIzM0OzogbnVsbAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYxMgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBCdWlsZCBQcm9jZXNzIGZvciBgbmV0L3BzcGAqKgoKQWxyaWdodCwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZSBgbmV0L3BzcGAgZGlyZWN0b3J5LCBhbmQgcHJlc3VtYWJseSBpdHMgY29kZSwgZ2V0cyBidWlsdCBpbnRvIHRoZSBrZXJuZWwuIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyB3b3VsZCBiZSB3aXRoaW4gdGhlIG5ldHdvcmsgc3Vic3lzdGVtJiMzOTtzIGNvbmZpZ3VyYXRpb24gYW5kIGJ1aWxkIGZpbGVzLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayBgbmV0L0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgZW5hYmxlcyBgbmV0L3BzcGAuIFRoZW4sIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCBgbmV0L01ha2VmaWxlYCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBydWxlcyBhbmQgZGVwZW5kZW5jaWVzLiBLbm93aW5nIHdoaWNoIEtjb25maWcgb3B0aW9uIGVuYWJsZXMgaXQgd2lsbCBoZWxwIG1lIGZpbmQgdGhlIGFzc29jaWF0ZWQgYG9iai1gIGxpbmVzIGluIHRoZSBNYWtlZmlsZSBhbmQgc2VlIGhvdyB0aGUgc291cmNlIGZpbGVzIHdpdGhpbiBgbmV0L3BzcGAgYXJlIGNvbXBpbGVkLCBsaW5rZWQsIGFuZCBpbmNvcnBvcmF0ZWQgaW50byB0aGUga2VybmVsIGltYWdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYmlnIHBpY3R1cmU7IGlzIHRoaXMgYSBtb2R1bGUsIGJ1aWx0LWluLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVWx0aW1hdGVseSwgdW5kZXJzdGFuZGluZyB0aGUgYnVpbGQgcHJvY2VzcyBpcyBrZXkgdG8gbW9kaWZ5aW5nLCBkZWJ1Z2dpbmcsIG9yIGVuYWJsaW5nIHRoaXMgZnVuY3Rpb25hbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwc3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L01ha2VmaWxlPTIwPW9iai0kKENPTkZJR19VTklYKVx0XHQmIzQzOz0gdW5peC9cbm5ldC9NYWtlZmlsZToyMTpvYmotJChDT05GSUdfSU5FVF9QU1ApXHRcdCYjNDM7PSBwc3AvXG5uZXQvTWFrZWZpbGUtMjItb2JqLXlcdFx0XHRcdCYjNDM7PSBpcHY2L1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5NTEKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDb25maWd1cmF0aW9uIGZvciBQU1AgU3VwcG9ydCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBQU1AgaXMgZW5hYmxlZC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgYENPTkZJR19JTkVUX1BTUGAuIEkga25vdyB0aGUgbmV0d29ya2luZyBjb25maWd1cmF0aW9uIGlzIHNwcmVhZCBhY3Jvc3MgYSBmZXcgZGlmZmVyZW50IGBLY29uZmlnYCBmaWxlcyDigJMgaXQmIzM5O3MgbGlrZWx5IGluIGBuZXQvS2NvbmZpZ2AsIGBuZXQvaXB2NC9LY29uZmlnYCwgb3Igc29tZXRoaW5nIHNpbWlsYXIuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayB0aHJvdWdoIHRob3NlIHRvIHBpbnBvaW50IHdoZXJlIGBDT05GSUdfSU5FVF9QU1BgIGlzIGRlZmluZWQgYW5kIHdoYXQgaXRzIGRlcGVuZGVuY2llcyBtaWdodCBiZS4gVGltZSB0byBnZXQgbXkgZ3JlcCBvbiBhbmQgbmF2aWdhdGUgdGhvc2UgY29uZmlnIHN0cnVjdHVyZXMhIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SU5FVF9QU1AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc9MjEwPWNvbmZpZyBNTFg1X0VOX1BTUFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWctMjExLVx0Ym9vbCBcJiMzNDtNZWxsYW5veCBUZWNobm9sb2dpZXMgc3VwcG9ydCBmb3IgUFNQIGNyeXB0b2dyYXBoeS1vZmZsb2FkIGFjY2VsZXJhdGlvblwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc6MjEyOlx0ZGVwZW5kcyBvbiBJTkVUX1BTUFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWctMjEzLVx0ZGVwZW5kcyBvbiBNTFg1X0NPUkVfRU5cbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vTWFrZWZpbGU9MTk9ZW5kaWZcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZS0yMC1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZToyMTppZm5lcSAoJChDT05GSUdfSU5FVF9QU1ApLClcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZS0yMi1uZXRkZXZzaW0tb2JqcyAmIzQzOz0gcHNwLm9cbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg9NDQ1PXN0YXRpYyBpbmxpbmUgdm9pZCBuc2ltX21hY3NlY190ZWFyZG93bihzdHJ1Y3QgbmV0ZGV2c2ltICpucylcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtNDQ5LVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQ1MDojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtNDUxLWludCBuc2ltX3BzcF9pbml0KHN0cnVjdCBuZXRkZXZzaW0gKm5zKTtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTIxNTg9c3RydWN0IG5ldF9kZXZpY2Uge1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjM4OC0jZW5kaWZcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MjM4OTojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTIzOTAtXHRzdHJ1Y3QgcHNwX2RldiBfX3JjdVx0KnBzcF9kZXY7XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD01MDQzPWVudW0gc2tiX2V4dF9pZCB7XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC01MDU4LSNlbmRpZlxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MDU5OiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUX1BTUClcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA2MC1cdFNLQl9FWFRfUFNQLFxuLS1cbmluY2x1ZGUvbmV0L2luZXRfdGltZXdhaXRfc29jay5oPTMzPXN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sge1xuLS1cbmluY2x1ZGUvbmV0L2luZXRfdGltZXdhaXRfc29jay5oLTg0LVx0c3RydWN0IGluZXRfYmluZDJfYnVja2V0XHQqdHdfdGIyO1xuaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmg6ODU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKVxuaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmgtODYtXHRzdHJ1Y3QgcHNwX2Fzc29jIF9fcmN1XHQgICpwc3BfYXNzb2M7XG4tLVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTI3PXN0YXRpYyBpbmxpbmUgdm9pZCAqcHNwX2Fzc29jX2Rydl9kYXRhKHN0cnVjdCBwc3BfYXNzb2MgKnBhcylcbi0tXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMzEtXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MzI6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTMzLXVuc2lnbmVkIGludCBwc3Bfa2V5X3NpemUodTMyIHZlcnNpb24pO1xuLS1cbmluY2x1ZGUvbmV0L3NvY2suaD0zNjU9c3RydWN0IHNvY2sge1xuLS1cbmluY2x1ZGUvbmV0L3NvY2suaC00NjYtI2VuZGlmXG5pbmNsdWRlL25ldC9zb2NrLmg6NDY3OiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUX1BTUClcbmluY2x1ZGUvbmV0L3NvY2suaC00NjgtXHRzdHJ1Y3QgcHNwX2Fzc29jIF9fcmN1XHQqcHNwX2Fzc29jO1xuLS1cbm5ldC9NYWtlZmlsZT0yMD1vYmotJChDT05GSUdfVU5JWClcdFx0JiM0Mzs9IHVuaXgvXG5uZXQvTWFrZWZpbGU6MjE6b2JqLSQoQ09ORklHX0lORVRfUFNQKVx0XHQmIzQzOz0gcHNwL1xubmV0L01ha2VmaWxlLTIyLW9iai15XHRcdFx0XHQmIzQzOz0gaXB2Ni9cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz01MTUwPXN0YXRpYyBjb25zdCB1OCBza2JfZXh0X3R5cGVfbGVuW10gPSB7XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNTE2NS0jZW5kaWZcbm5ldC9jb3JlL3NrYnVmZi5jOjUxNjY6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKVxubmV0L2NvcmUvc2tidWZmLmMtNTE2Ny1cdFtTS0JfRVhUX1BTUF0gPSBTS0JfRVhUX0NIVU5LU0laRU9GKHN0cnVjdCBwc3Bfc2tiX2V4dCksXG4tLVxubmV0L2NvcmUvc29jay5jPTI0ODA9c3RydWN0IHNvY2sgKnNrX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgY29uc3QgZ2ZwX3QgcHJpb3JpdHksXG4tLVxubmV0L2NvcmUvc29jay5jLTI0OTctI2VuZGlmXG5uZXQvY29yZS9zb2NrLmM6MjQ5ODojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXG5uZXQvY29yZS9zb2NrLmMtMjQ5OS1cdFJDVV9JTklUX1BPSU5URVIobmV3c2stXHUwMDNlcHNwX2Fzc29jLCBOVUxMKTtcbi0tXG5uZXQvcHNwL0tjb25maWctNC0jXG5uZXQvcHNwL0tjb25maWc6NTpjb25maWcgSU5FVF9QU1Bcbm5ldC9wc3AvS2NvbmZpZy02LVx0Ym9vbCBcJiMzNDtQU1AgU2VjdXJpdHkgUHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9wc3AvTWFrZWZpbGUtMi1cbm5ldC9wc3AvTWFrZWZpbGU6MzpvYmotJChDT05GSUdfSU5FVF9QU1ApICYjNDM7PSBwc3Aub1xubmV0L3BzcC9NYWtlZmlsZS00LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZz0zPUNPTkZJR19ERUJVR19JTkZPX0JURl9NT0RVTEVTPW5cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZzo0OkNPTkZJR19JTkVUX1BTUD15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWctNS1DT05GSUdfSVBWNj15XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0NjIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIFBTUCBLY29uZmlnKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHN0YXJ0ZWQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gYG5ldC9wc3AvS2NvbmZpZ2AuIEl0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luLCBnaXZlbiB3aGF0IHdlJiMzOTtyZSB3b3JraW5nIG9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIFBTUCBuZXR3b3JrIHN0YWNrIGZpcnN0LiBLbm93aW5nIHRoZSBhdmFpbGFibGUgcGFyYW1ldGVycyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzIHdpbGwgYmUgY3J1Y2lhbCBmb3IgdGhlIHdvcmsgYWhlYWQuIFRoaXMgS2NvbmZpZyBmaWxlIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgZGVzaWduIGNob2ljZXMgYW5kIHBvdGVudGlhbGx5IHJldmVhbCBhbnkgZXhpc3RpbmcgbGltaXRhdGlvbnMgb3IgZmVhdHVyZXMgdGhhdCBtaWdodCBpbmZsdWVuY2UgbXkgYXBwcm9hY2guIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gbGVhcm4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3BzcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgUFNQIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0Y29uZmlnIElORVRfUFNQXG4gICA2Olx0XHRib29sIFwmIzM0O1BTUCBTZWN1cml0eSBQcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4gICA3Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDg6XHRcdHNlbGVjdCBTS0JfREVDUllQVEVEXG4gICA5Olx0XHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcbiAgMTA6XHRcdHNlbGVjdCBTT0NLX1ZBTElEQVRFX1hNSVRcbiAgMTE6XHRcdGhlbHBcbiAgMTI6XHRcdEVuYWJsZSBrZXJuZWwgc3VwcG9ydCBmb3IgdGhlIFBTUCBTZWN1cml0eSBQcm90b2NvbCAoUFNQKS5cbiAgMTM6XHRcdEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZTpcbiAgMTQ6XHRcdCAgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2dvb2dsZS9wc3AvbWFpbi9kb2MvUFNQX0FyY2hfU3BlYy5wZGZcbiAgMTU6XHRcbiAgMTY6XHRcdElmIHVuc3VyZSwgc2F5IE4uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4NDgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIGl0OgoKKipDaGVja2luZyBTb2NrZXQgVHJhbnNtaXNzaW9uIFZhbGlkYXRpb24qKgoKT2theSwgc28gd2UmIzM5O3JlIGRpdmluZyBpbnRvIHRoaXMgbmV0d29yayBjb2RlLCBhbmQgYmVmb3JlIHdlIHByb2NlZWQgdG9vIGZhciwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7dmUgbG9va2VkIGF0IHRoZSBpbXBsaWNhdGlvbnMgb2YgYENPTkZJR19TT0NLX1ZBTElEQVRFX1hNSVRgLiBJdCYjMzk7cyBjcnVjaWFsIHdlIGRvbiYjMzk7dCBvdmVybG9vayB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb247IGl0cyBpbXBhY3Qgb24gdGhlIGRhdGEgdHJhbnNtaXNzaW9uIGZsb3cgY291bGQgYmUgc2lnbmlmaWNhbnQuIEl0JiMzOTtzIG9mdGVuIGVhc3kgdG8gbWlzcyBkZXRhaWxzLCBzbyBhIHF1aWNrIGNoZWNrIG5vdyBjb3VsZCBzYXZlIGEgYmlnIGhlYWRhY2hlIGxhdGVyIG9uLiBMZXQmIzM5O3MgdHJhY2UgaG93IHRoYXQmIzM5O3MgaGFuZGxlZC4gR29vZCBwcmFjdGljZSBpcyB0byBhbHdheXMgYWNjb3VudCBmb3IgdGhpcyBraW5kIG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGVhcmx5IGluIHRoZSBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtTT0NLX1ZBTElEQVRFX1hNSVQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmg9MzM9c3RydWN0IGluZXRfdGltZXdhaXRfc29jayB7XG4tLVxuaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmgtODctI2VuZGlmXG5pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaDo4ODojaWZkZWYgQ09ORklHX1NPQ0tfVkFMSURBVEVfWE1JVFxuaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmgtODktXHRzdHJ1Y3Qgc2tfYnVmZipcdFx0KCp0d192YWxpZGF0ZV94bWl0X3NrYikoc3RydWN0IHNvY2sgKnNrLFxuLS1cbmluY2x1ZGUvbmV0L3NvY2suaD0zNjU9c3RydWN0IHNvY2sge1xuLS1cbmluY2x1ZGUvbmV0L3NvY2suaC01MTUtXHRuZXRkZXZfZmVhdHVyZXNfdFx0c2tfcm91dGVfY2FwcztcbmluY2x1ZGUvbmV0L3NvY2suaDo1MTY6I2lmZGVmIENPTkZJR19TT0NLX1ZBTElEQVRFX1hNSVRcbmluY2x1ZGUvbmV0L3NvY2suaC01MTctXHRzdHJ1Y3Qgc2tfYnVmZipcdFx0KCpza192YWxpZGF0ZV94bWl0X3NrYikoc3RydWN0IHNvY2sgKnNrLFxuLS1cbmluY2x1ZGUvbmV0L3NvY2suaD0yMzE1PXN0YXRpYyBpbmxpbmUgYm9vbCBza19oYXNfdmFsaWRhdGVfeG1pdF9za2IoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuaW5jbHVkZS9uZXQvc29jay5oLTIzMTYte1xuaW5jbHVkZS9uZXQvc29jay5oOjIzMTc6I2lmZGVmIENPTkZJR19TT0NLX1ZBTElEQVRFX1hNSVRcbmluY2x1ZGUvbmV0L3NvY2suaC0yMzE4LVx0cmV0dXJuICEhc2stXHUwMDNlc2tfdmFsaWRhdGVfeG1pdF9za2I7XG4tLVxubmV0L0tjb25maWc9NDY1PWNvbmZpZyBHUk9fQ0VMTFNcbi0tXG5uZXQvS2NvbmZpZy00NjgtXG5uZXQvS2NvbmZpZzo0Njk6Y29uZmlnIFNPQ0tfVkFMSURBVEVfWE1JVFxubmV0L0tjb25maWctNDcwLVx0Ym9vbFxuLS1cbm5ldC9jb3JlL2Rldi5jPTQwMTE9c3RhdGljIHN0cnVjdCBza19idWZmICpza192YWxpZGF0ZV94bWl0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL2Rldi5jLTQwMTMte1xubmV0L2NvcmUvZGV2LmM6NDAxNDojaWZkZWYgQ09ORklHX1NPQ0tfVkFMSURBVEVfWE1JVFxubmV0L2NvcmUvZGV2LmMtNDAxNS1cdHN0cnVjdCBza19idWZmICooKnNrX3ZhbGlkYXRlKShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjQvaW5ldF90aW1ld2FpdF9zb2NrLmM9MTY4PXN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKmluZXRfdHdza19hbGxvYyhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvaW5ldF90aW1ld2FpdF9zb2NrLmMtMjA0LVx0XHR0aW1lcl9zZXR1cChcdTAwMjZ0dy1cdTAwM2V0d190aW1lciwgdHdfdGltZXJfaGFuZGxlciwgMCk7XG5uZXQvaXB2NC9pbmV0X3RpbWV3YWl0X3NvY2suYzoyMDU6I2lmZGVmIENPTkZJR19TT0NLX1ZBTElEQVRFX1hNSVRcbm5ldC9pcHY0L2luZXRfdGltZXdhaXRfc29jay5jLTIwNi1cdFx0dHctXHUwMDNldHdfdmFsaWRhdGVfeG1pdF9za2IgPSBOVUxMO1xuLS1cbm5ldC9wc3AvS2NvbmZpZz01PWNvbmZpZyBJTkVUX1BTUFxuLS1cbm5ldC9wc3AvS2NvbmZpZy05LVx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXG5uZXQvcHNwL0tjb25maWc6MTA6XHRzZWxlY3QgU09DS19WQUxJREFURV9YTUlUXG5uZXQvcHNwL0tjb25maWctMTEtXHRoZWxwXG4tLVxubmV0L3Rscy9LY29uZmlnPTE5PWNvbmZpZyBUTFNfREVWSUNFXG4tLVxubmV0L3Rscy9LY29uZmlnLTIyLVx0c2VsZWN0IFNLQl9ERUNSWVBURURcbm5ldC90bHMvS2NvbmZpZzoyMzpcdHNlbGVjdCBTT0NLX1ZBTElEQVRFX1hNSVRcbm5ldC90bHMvS2NvbmZpZy0yNC1cdHNlbGVjdCBTT0NLX1JYX1FVRVVFX01BUFBJTkdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg0MgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUGF0Y2ggQ2hhbmdlcyBmb3IgTmV0d29yayBTb2NrZXQgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZXNlIHBhdGNoIGNoYW5nZXMuIEkgc2VlIHdlJiMzOTtyZSBtb2RpZnlpbmcgdGhlIHNvY2tldC1yZWxhdGVkIGNvZGUsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBkYXRhIHZhbGlkYXRpb24gYW5kIHBvdGVudGlhbCBkZWNyeXB0aW9uIGZ1bmN0aW9uYWxpdGllcy4gVGhlIGZpcnN0IGNoYW5nZSwgaW4gYGluY2x1ZGUvbmV0L3NvY2suaGAsIGludHJvZHVjZXMgYSBoZWxwZXIgZnVuY3Rpb24sIGBza19oYXNfdmFsaWRhdGVfeG1pdF9za2JgLiBUaGlzIHNlZW1zIHRvIGNoZWNrIGZvciBhIHNwZWNpZmljIGBza192YWxpZGF0ZV94bWl0X3NrYmAgZmxhZywgbGlrZWx5IGNvbnRyb2xsZWQgYnkgYSBgQ09ORklHX1NPQ0tfVkFMSURBVEVfWE1JVGAgcHJlcHJvY2Vzc29yIGRlZmluZS4gTWFrZXMgc2Vuc2U7IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGZvciBwZXJmb3JtYW5jZSBhbmQgZmVhdHVyZSBlbmFibGVtZW50LiBJZiB0aGUgZmxhZyBpcyBzZXQsIGl0JiMzOTtzIGNoZWNraW5nIGlmIHRoZSBzb2NrZXQgaXMgY29uZmlndXJlZCB0byB2YWxpZGF0ZSBTS0JzIGR1cmluZyB0cmFuc21pc3Npb24uCgpOZXh0LCBpbiBgbmV0L2NvcmUvc29jay5jYCwgdGhlIGBza19oYXNfZGVjcnlwdF91c2VyYCBmdW5jdGlvbiYjMzk7cyBkZWZpbml0aW9uIHJldmVhbHMgaXRzIGxvZ2ljLiBJdCYjMzk7cyBjaGVja2luZyBpZiBhIHNvY2tldCBpcyBhc3NvY2lhdGVkIHdpdGggYSBQU1AgKHByZXN1bWFibHkgc29tZSBraW5kIG9mIHByb3RlY3Rpb24gc2NoZW1lKSAqb3IqIGlmIGl0JiMzOTtzIGFuIGludGVybmV0IHNvY2tldCB3aXRoIGEgY29uZmlndXJlZCBVTFAgKFVzZXItTGV2ZWwgUHJvdG9jb2wpLCBsaWtlbHkgZm9yIFRMUyBzdXBwb3J0LiBJbnRlcmVzdGluZyBpbnRlcnBsYXkgYmV0d2VlbiBkaWZmZXJlbnQgc2VjdXJpdHkgbGF5ZXJzIGFuZCBwcm90b2NvbCBoYW5kbGVycy4KCkZpbmFsbHksIHRoZSBtb3N0IGludGVyZXN0aW5nIGNoYW5nZSBpcyBpbiBgbmV0L2lwdjQvdGNwX3VscC5jYCwgd2l0aGluIHRoZSBgX190Y3Bfc2V0X3VscGAgZnVuY3Rpb24uIEl0IHNlZW1zIHRvIGJlIHByZXZlbnRpbmcgdGhlIHNldHRpbmcgb2YgYSBVTFAgaWYgZWl0aGVyIGBza19oYXNfZGVjcnlwdF91c2VyYCAqb3IqIGBza19oYXNfdmFsaWRhdGVfeG1pdF9za2JgIHJldHVybnMgdHJ1ZS4gVGhlIGNvZGUgaW5jbHVkZXMgYSBjaGVjayB0aGF0IHRocm93cyBhbiBgRUlOVkFMYCBlcnJvciBhbmQganVtcHMgb3V0IGlmIHRoZSBhZm9yZW1lbnRpb25lZCBmdW5jdGlvbnMgZXZhbHVhdGUgdG8gdHJ1ZS4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGlzIGVzdGFibGlzaGluZyBhIGNvbnN0cmFpbnQgb24gd2hlbiBVTFAgKHNwZWNpZmljYWxseSBUTFMpIGNhbiBiZSBhcHBsaWVkIHRvIFRDUCBzb2NrZXRzLiBJdCBzZWVtcyB3ZSYjMzk7cmUgZ3VhcmRpbmcgYWdhaW5zdCBzaXR1YXRpb25zIHdoZXJlIHRoZSBzb2NrZXQmIzM5O3MgZGF0YSBuZWVkcyB0byBiZSB2YWxpZGF0ZWQgb3IgZGVjcnlwdGVkLiBUaGlzIHByb2JhYmx5IG1lYW5zIGEgc3BlY2lmaWMgZGF0YSB2YWxpZGF0aW9uIG9yIHNlY3VyaXR5IHNjaGVtZSBpcyBhbHJlYWR5IGVuYWJsZWQgb24gdGhhdCBzb2NrZXQgYW5kIHRoZSBVTFAgc2V0dXAgd291bGQgYmUgcmVkdW5kYW50IG9yIHdvdWxkIGNhdXNlIGlzc3VlcyAocG9zc2libHkgZHVlIHRvIGluY29tcGF0aWJsZSBzZWN1cml0eSBtb2RlbHMgb3IgYW4gb3JkZXIgb2Ygb3BlcmF0aW9ucyBjb25mbGljdCkuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGJyb2FkZXIgY29udGV4dCBvZiBgX190Y3Bfc2V0X3VscGAgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMgYW5kIHRoZSBleGFjdCByZWFzb25pbmcgYmVoaW5kIHRoaXMgY29uc3RyYWludC4gSXQgc2VlbXMgd2UgYXJlIHRyeWluZyB0byBwcmV2ZW50IGEgcG90ZW50aWFsIGNvbmZsaWN0IG9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX3VscC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMjA6XHRcdGlmICghaWNzay1cdTAwM2VpY3NrX3VscF9vcHMpXG4gMTIxOlx0XHRcdHJldHVybjtcbiAxMjI6XHRcbiAxMjM6XHRcdGlmIChpY3NrLVx1MDAzZWljc2tfdWxwX29wcy1cdTAwM2VyZWxlYXNlKVxuIDEyNDpcdFx0XHRpY3NrLVx1MDAzZWljc2tfdWxwX29wcy1cdTAwM2VyZWxlYXNlKHNrKTtcbiAxMjU6XHRcdG1vZHVsZV9wdXQoaWNzay1cdTAwM2VpY3NrX3VscF9vcHMtXHUwMDNlb3duZXIpO1xuIDEyNjpcdFxuIDEyNzpcdFx0aWNzay1cdTAwM2VpY3NrX3VscF9vcHMgPSBOVUxMO1xuIDEyODpcdH1cbiAxMjk6XHRcbiAxMzA6XHRzdGF0aWMgaW50IF9fdGNwX3NldF91bHAoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgdGNwX3VscF9vcHMgKnVscF9vcHMpXG4gMTMxOlx0e1xuIDEzMjpcdFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xuIDEzMzpcdFx0aW50IGVycjtcbiAxMzQ6XHRcbiAxMzU6XHRcdGVyciA9IC1FRVhJU1Q7XG4gMTM2Olx0XHRpZiAoaWNzay1cdTAwM2VpY3NrX3VscF9vcHMpXG4gMTM3Olx0XHRcdGdvdG8gb3V0X2VycjtcbiAxMzg6XHRcbiAxMzk6XHRcdGVyciA9IC1FSU5WQUw7XG4gMTQwOlx0XHRpZiAoc2tfaGFzX2RlY3J5cHRfdXNlcihzaykgfHwgc2tfaGFzX3ZhbGlkYXRlX3htaXRfc2tiKHNrKSlcbiAxNDE6XHRcdFx0Z290byBvdXRfZXJyO1xuIDE0MjpcdFxuIDE0MzpcdFx0aWYgKHNrLVx1MDAzZXNrX3NvY2tldClcbiAxNDQ6XHRcdFx0Y2xlYXJfYml0KFNPQ0tfU1VQUE9SVF9aQywgXHUwMDI2c2stXHUwMDNlc2tfc29ja2V0LVx1MDAzZWZsYWdzKTtcbiAxNDU6XHRcbiAxNDY6XHRcdGVyciA9IC1FTk9UQ09OTjtcbiAxNDc6XHRcdGlmICghdWxwX29wcy1cdTAwM2VjbG9uZSBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0xJU1RFTilcbiAxNDg6XHRcdFx0Z290byBvdXRfZXJyO1xuIDE0OTpcdFxuIDE1MDpcdFx0ZXJyID0gdWxwX29wcy1cdTAwM2Vpbml0KHNrKTtcbiAxNTE6XHRcdGlmIChlcnIpXG4gMTUyOlx0XHRcdGdvdG8gb3V0X2VycjtcbiAxNTM6XHRcbiAxNTQ6XHRcdGljc2stXHUwMDNlaWNza191bHBfb3BzID0gdWxwX29wcztcbiAxNTU6XHRcdHJldHVybiAwO1xuIDE1NjpcdG91dF9lcnI6XG4gMTU3Olx0XHRtb2R1bGVfcHV0KHVscF9vcHMtXHUwMDNlb3duZXIpO1xuIDE1ODpcdFx0cmV0dXJuIGVycjtcbiAxNTk6XHR9XG4gMTYwOlx0XG4gMTYxOlx0aW50IHRjcF9zZXRfdWxwKHN0cnVjdCBzb2NrICpzaywgY29uc3QgY2hhciAqbmFtZSlcbiAxNjI6XHR7XG4gMTYzOlx0XHRjb25zdCBzdHJ1Y3QgdGNwX3VscF9vcHMgKnVscF9vcHM7XG4gMTY0Olx0XG4gMTY1Olx0XHRzb2NrX293bmVkX2J5X21lKHNrKTtcbiAxNjY6XHRcbiAxNjc6XHRcdHVscF9vcHMgPSBfX3RjcF91bHBfZmluZF9hdXRvbG9hZChuYW1lKTtcbiAxNjg6XHRcdGlmICghdWxwX29wcylcbiAxNjk6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzcxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIFNvY2tldCBBc3NvY2lhdGlvbioqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgZGl2aW5nIGJhY2sgaW50byB0aGUgYG5ldC9wc3BgIGRpcmVjdG9yeS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIHdlIG5lZWQgdG8gY2hlY2sgb3V0IGBwc3Bfc29jay5jYCBhbmQgemVybyBpbiBvbiB0aGUgYHBzcF9zb2NrX2Fzc29jX3NldF9yeGAgZnVuY3Rpb24uIE15IGluc3RpbmN0IGlzIHRoYXQgdGhpcyBhcmVhIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzeXN0ZW0gc2V0cyB1cCBhbmQgbWFuYWdlcyB0aGUgYXNzb2NpYXRpb24gYmV0d2VlbiBzb2NrZXRzIGFuZCByZWNlaXZlIHBhdGhzLiBXZSBuZWVkIHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBhc3NvY2lhdGlvbiwgYW5kIGhvdyBpdCBpcyBtYW5hZ2VkIHdpdGhpbiB0aGUgcmVjZWl2ZSBwcm9jZXNzaW5nIHBhdGguIExldCYjMzk7cyBzZWUgaWYgdGhpcyBmdW5jdGlvbiByZXZlYWxzIHNvbWV0aGluZyB3ZSYjMzk7cmUgbWlzc2luZy4gSSBzdXNwZWN0IGEgZGV0YWlsZWQgcmV2aWV3IG9mIHRoaXMgc2VjdGlvbiBtaWdodCBwcm92aWRlIGluc2lnaHRzIGludG8gdGhlIHJvb3QgY2F1c2Ugd2UgYXJlIGNoYXNpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3BzcC9wc3Bfc29jay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzA6XHR9XG4gMTMxOlx0XG4gMTMyOlx0aW50IHBzcF9zb2NrX2Fzc29jX3NldF9yeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwc3BfYXNzb2MgKnBhcyxcbiAxMzM6XHRcdFx0XHQgIHN0cnVjdCBwc3Bfa2V5X3BhcnNlZCAqa2V5LFxuIDEzNDpcdFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIDEzNTpcdHtcbiAxMzY6XHRcdGludCBlcnI7XG4gMTM3Olx0XG4gMTM4Olx0XHRtZW1jcHkoXHUwMDI2cGFzLVx1MDAzZXJ4LCBrZXksIHNpemVvZigqa2V5KSk7XG4gMTM5Olx0XG4gMTQwOlx0XHRsb2NrX3NvY2soc2spO1xuIDE0MTpcdFxuIDE0MjpcdFx0aWYgKHBzcF9za19hc3NvYyhzaykpIHtcbiAxNDM6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtTb2NrZXQgYWxyZWFkeSBoYXMgUFNQIHN0YXRlXCYjMzQ7KTtcbiAxNDQ6XHRcdFx0ZXJyID0gLUVCVVNZO1xuIDE0NTpcdFx0XHRnb3RvIGV4aXRfdW5sb2NrO1xuIDE0NjpcdFx0fSBlbHNlIGlmIChza19oYXNfZGVjcnlwdF91c2VyKHNrKSB8fCBza19oYXNfdmFsaWRhdGVfeG1pdF9za2Ioc2spKSB7XG4gMTQ3Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7U29ja2V0IGhhcyBpbmNvbXBhdGlibGUgc3RhdGVcJiMzNDspO1xuIDE0ODpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuIDE0OTpcdFx0XHRnb3RvIGV4aXRfdW5sb2NrO1xuIDE1MDpcdFx0fVxuIDE1MTpcdFxuIDE1MjpcdFx0cmVmY291bnRfaW5jKFx1MDAyNnBhcy1cdTAwM2VyZWZjbnQpO1xuIDE1MzpcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHNrLVx1MDAzZXBzcF9hc3NvYywgcGFzKTtcbiAxNTQ6XHRcdGVyciA9IDA7XG4gMTU1Olx0XG4gMTU2Olx0ZXhpdF91bmxvY2s6XG4gMTU3Olx0XHRyZWxlYXNlX3NvY2soc2spO1xuIDE1ODpcdFxuIDE1OTpcdFx0cmV0dXJuIGVycjtcbiAxNjA6XHR9XG4gMTYxOlx0XG4gMTYyOlx0c3RhdGljIGludCBwc3Bfc29ja19yZWN2X3F1ZXVlX2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9hc3NvYyAqcGFzKVxuIDE2MzpcdHtcbiAxNjQ6XHRcdHN0cnVjdCBwc3Bfc2tiX2V4dCAqcHNlO1xuIDE2NTpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiAxNjY6XHRcbiAxNjc6XHRcdHNrYl9yYnRyZWVfd2Fsayhza2IsIFx1MDAyNnRjcF9zayhzayktXHUwMDNlb3V0X29mX29yZGVyX3F1ZXVlKSB7XG4gMTY4Olx0XHRcdHBzZSA9IHNrYl9leHRfZmluZChza2IsIFNLQl9FWFRfUFNQKTtcbiAxNjk6XHRcdFx0aWYgKCFwc3BfcHNlX21hdGNoZXNfcGFzKHBzZSwgcGFzKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyMTAKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIHRoZSBQU1AgU29ja2V0IEFzc29jaWF0aW9uIExvZ2ljKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcyBgbmV0L3BzcC9gIGRpcmVjdG9yeS4gRmlyc3QgdGhpbmdzIGZpcnN0LCBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgZXhhY3RseSBQU1AgaXMgaW4gdGhpcyBjb250ZXh0LiBJcyBpdCBhIGN1c3RvbSBwcm90b2NvbCwgYSBwYXJ0aWN1bGFyIGhhcmR3YXJlIGFic3RyYWN0aW9uLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVW5kZXJzdGFuZGluZyB0aGUgKnB1cnBvc2UqIG9mIFBTUCBpcyBjcml0aWNhbCBiZWZvcmUgSSBjYW4gbWFrZSBzZW5zZSBvZiBpdHMgdXNhZ2UuIEdvdHRhIGdldCB0aGUgaGlnaC1sZXZlbCBjb250ZXh0LiBIb3cgaXMgaXQgKmRlc2lnbmVkKiB0byBiZSB1c2VkPwoKTmV4dCwgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhlIGZ1bmN0aW9uIGBwc3Bfc29ja19hc3NvY19zZXRfcnhgLiBUaGlzIGxpa2VseSBwbGF5cyBhIGtleSByb2xlIGluIGFzc29jaWF0aW5nIGluY29taW5nIHRyYWZmaWMgd2l0aCBhIHNwZWNpZmljIHNvY2tldCwgYW5kIHRoZSAmIzM0O3J4JiMzNDsgcGFydCB0ZWxscyBtZSBpdCYjMzk7cyBoYW5kbGluZyB0aGUgcmVjZWl2aW5nIHNpZGUgb2YgdGhpbmdzLiBTbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmhvdyogdGhlIHN5c3RlbSBpZGVudGlmaWVzIGFuZCByb3V0ZXMgaW5jb21pbmcgcGFja2V0cyBvciBkYXRhIHN0cmVhbXMgYmFzZWQgb24gUFNQLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBgZ3JlcGAgKG9yIG15IHByZWZlcnJlZCBzZWFyY2ggdG9vbCkgdG8gZmluZCB0aGUgY2FsbGluZyBsb2NhdGlvbnMgb2YgYHBzcF9zb2NrX2Fzc29jX3NldF9yeGAuIFRoaXMgd2lsbCBwYWludCB0aGUgYmlnZ2VyIHBpY3R1cmU6IHdoYXQgb3RoZXIgY29tcG9uZW50cyBhcmUgaW52b2x2ZWQsIHdoYXQgdHJpZ2dlcnMgdGhpcyBhc3NvY2lhdGlvbiBwcm9jZXNzLCBhbmQgd2hlcmUgaXQgZml0cyBpbiB0aGUgZGF0YSBmbG93LiBGaW5kaW5nIHRob3NlIGNhbGxlcnMgd2lsbCBnaXZlIG1lIHZhbHVhYmxlIGNsdWVzIHRvIGl0cyBmdW5jdGlvbiBhbmQgc3RydWN0dXJlIHdpdGhpbiB0aGUgd2hvbGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwc3Bfc29ja19hc3NvY19zZXRfcngmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3BzcC9wc3AuaD0yNT12b2lkIHBzcF9kZXZfdHhfa2V5X2RlbChzdHJ1Y3QgcHNwX2RldiAqcHNkLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMpO1xubmV0L3BzcC9wc3AuaDoyNjppbnQgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9hc3NvYyAqcGFzLFxubmV0L3BzcC9wc3AuaC0yNy1cdFx0XHQgIHN0cnVjdCBwc3Bfa2V5X3BhcnNlZCAqa2V5LFxuLS1cbm5ldC9wc3AvcHNwX25sLmM9NzcwPWludCBwc3BfbmxfcnhfYXNzb2NfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9wc3AvcHNwX25sLmMtODA5LVxubmV0L3BzcC9wc3BfbmwuYzo4MTA6XHRlcnIgPSBwc3Bfc29ja19hc3NvY19zZXRfcngoc29ja2V0LVx1MDAzZXNrLCBwYXMsIFx1MDAyNmtleSwgaW5mby1cdTAwM2VleHRhY2spO1xubmV0L3BzcC9wc3BfbmwuYy04MTEtXHRpZiAoZXJyKSB7XG4tLVxubmV0L3BzcC9wc3Bfc29jay5jPTEyND12b2lkIHBzcF9za19hc3NvY19mcmVlKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTMxLVxubmV0L3BzcC9wc3Bfc29jay5jOjEzMjppbnQgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9hc3NvYyAqcGFzLFxubmV0L3BzcC9wc3Bfc29jay5jLTEzMy1cdFx0XHQgIHN0cnVjdCBwc3Bfa2V5X3BhcnNlZCAqa2V5LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTkwNgoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDEyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIE5ldGxpbmsgYW5kIFBTUCBJbnRlcmFjdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIG5ldGxpbmsgUFNQIGJ1c2luZXNzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBpdCBhbGwgaGFuZ3MgdG9nZXRoZXIuIEkgc2hvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhlIG5ldGxpbmsgaW1wbGVtZW50YXRpb24gb2YgUFNQLCBhbmQgd2hpbGUgSSYjMzk7bSBhdCBpdCwgSSYjMzk7bGwgcmVmcmVzaCBteSBtZW1vcnkgb2YgYHNrX2hhc19kZWNyeXB0X3VzZXJgLCBhbmQgdGhlIGlubmVyIHdvcmtpbmdzIG9mIGBfX3RjcF9zZXRfdWxwYCwgYW5kIHNpbWlsYXIgcmVsYXRlZCBmdW5jdGlvbnMuIEFoLCByaWdodCEgYHRjcF9zZXRfdWxwYCBpcyBpbnZva2VkIHRocm91Z2ggYHNldHNvY2tvcHRgIHdpdGggdGhlIGBTT0xfVENQYCBhbmQgYFRDUF9VTFBgIG9wdGlvbnMuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKTm93LCB3aGVyZSBkb2VzIHRoZSBQU1AgbmV0bGluayBwcm9jZXNzaW5nIGFjdHVhbGx5IGhhcHBlbj8gQWgsIHllcywgYHBzcF9ubF9yeF9hc3NvY19kb2l0YCBpcyB3aGF0JiMzOTtzIGNhbGxlZCB3aGVuIHJlY2VpdmluZyB0cmFmZmljIGZyb20gdGhlIFBTUCBuZXRsaW5rIGZhbWlseS4gVGhpcyBnaXZlcyBtZSBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgZGF0YSBwYXRoLgoKSSB3b25kZXLigKYgY2FuIHdlIGxldmVyYWdlIG5ldGRldnNpbSBmb3IgdGVzdGluZyBQU1A/IEl0IHdvdWxkIGJlIGdyZWF0IHRvIGlzb2xhdGUgYW5kIHRlc3QgdGhpcyB3aXRob3V0IGhhdmluZyB0byBkZWFsIHdpdGggcmVhbCBoYXJkd2FyZS4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IG1lbnRpb24gb2YgYG5zaW1fcHNwYCwgb3IgaG93IFBTUC1yZWxhdGVkIGRldmljZXMgYXJlIHJlZ2lzdGVyZWQgd2l0aGluIG5ldGRldnNpbS4gVGltZSB0byBicmVhayBvdXQgZ3JlcCBhbmQgc2VlIHdoYXQgdGhlIGtlcm5lbCBzb3VyY2UgaGFzIHRvIG9mZmVyIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuc2ltX3BzcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM9MTAzPXN0YXRpYyBpbnQgbnNpbV9mb3J3YXJkX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqdHhfZGV2LFxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xMTctXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6MTE4Olx0bnNpbV9wc3BfaGFuZGxlX2V4dChza2IsIHBzcF9leHQpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTExOS1cbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM9MTA0MD1zdGF0aWMgaW50IG5zaW1faW5pdF9uZXRkZXZzaW0oc3RydWN0IG5ldGRldnNpbSAqbnMpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTEwNzYtXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6MTA3NzpcdGVyciA9IG5zaW1fcHNwX2luaXQobnMpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jLTEwNzgtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYz0xMTc1PXZvaWQgbnNpbV9kZXN0cm95KHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xMTkwLVx0aWYgKG5zaW1fZGV2X3BvcnRfaXNfcGYobnMtXHUwMDNlbnNpbV9kZXZfcG9ydCkpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6MTE5MTpcdFx0bnNpbV9wc3BfdW5pbml0KG5zKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xMTkyLVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD00NDU9c3RhdGljIGlubGluZSB2b2lkIG5zaW1fbWFjc2VjX3RlYXJkb3duKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00NTAtI2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQ1MTppbnQgbnNpbV9wc3BfaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucyk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6NDUyOnZvaWQgbnNpbV9wc3BfdW5pbml0KHN0cnVjdCBuZXRkZXZzaW0gKm5zKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDo0NTM6dm9pZCBuc2ltX3BzcF9oYW5kbGVfZXh0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBza2JfZXh0ICpwc3BfZXh0KTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00NTQtZW51bSBza2JfZHJvcF9yZWFzb25cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD00NTU9bnNpbV9kb19wc3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGRldnNpbSAqbnMsXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQ1Ny0jZWxzZVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQ1ODpzdGF0aWMgaW5saW5lIGludCBuc2ltX3BzcF9pbml0KHN0cnVjdCBuZXRkZXZzaW0gKm5zKSB7IHJldHVybiAwOyB9XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6NDU5OnN0YXRpYyBpbmxpbmUgdm9pZCBuc2ltX3BzcF91bmluaXQoc3RydWN0IG5ldGRldnNpbSAqbnMpIHt9XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtNDYwLXN0YXRpYyBpbmxpbmUgZW51bSBza2JfZHJvcF9yZWFzb25cbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg9NDY3PXN0YXRpYyBpbmxpbmUgdm9pZFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQ2ODpuc2ltX3BzcF9oYW5kbGVfZXh0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBza2JfZXh0ICpwc3BfZXh0KSB7fVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQ2OS0jZW5kaWZcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMTAtXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM6MTE6dm9pZCBuc2ltX3BzcF9oYW5kbGVfZXh0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBza2JfZXh0ICpwc3BfZXh0KVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTEyLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM9MTIzPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzoxMjQ6bnNpbV9wc3Bfc2V0X2NvbmZpZyhzdHJ1Y3QgcHNwX2RldiAqcHNkLCBzdHJ1Y3QgcHNwX2Rldl9jb25maWcgKmNvbmYsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMTI1LVx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYz0xODk9c3RhdGljIHZvaWQgbnNpbV9nZXRfc3RhdHMoc3RydWN0IHBzcF9kZXYgKnBzZCwgc3RydWN0IHBzcF9kZXZfc3RhdHMgKnN0YXRzKVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yMDMtXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM6MjA0OnN0YXRpYyBzdHJ1Y3QgcHNwX2Rldl9vcHMgbnNpbV9wc3Bfb3BzID0ge1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjIwNTpcdC5zZXRfY29uZmlnXHQ9IG5zaW1fcHNwX3NldF9jb25maWcsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMjA2LVx0LnJ4X3NwaV9hbGxvY1x0PSBuc2ltX3J4X3NwaV9hbGxvYyxcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMjEyLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjIxMzpzdGF0aWMgc3RydWN0IHBzcF9kZXZfY2FwcyBuc2ltX3BzcF9jYXBzID0ge1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTIxNC1cdC52ZXJzaW9ucyA9IDEgXHUwMDNjXHUwMDNjIFBTUF9WRVJTSU9OX0hEUjBfQUVTX0dDTV8xMjggfFxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yMjAtXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM6MjIxOnN0YXRpYyB2b2lkIF9fbnNpbV9wc3BfdW5pbml0KHN0cnVjdCBuZXRkZXZzaW0gKm5zLCBib29sIHRlYXJkb3duKVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTIyMi17XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTIzNS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzoyMzY6dm9pZCBuc2ltX3BzcF91bmluaXQoc3RydWN0IG5ldGRldnNpbSAqbnMpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMjM3LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMjM5LVx0bXV0ZXhfZGVzdHJveShcdTAwMjZucy1cdTAwM2Vwc3AucmVyZWdfbG9jayk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM6MjQwOlx0X19uc2ltX3BzcF91bmluaXQobnMsIHRydWUpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTI0MS19XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jPTI0Mz1zdGF0aWMgc3NpemVfdFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjI0NDpuc2ltX3BzcF9yZXJlZ193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmRhdGEsIHNpemVfdCBjb3VudCxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yNDUtXHRcdCAgICAgbG9mZl90ICpwcG9zKVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yNTEtXHRtdXRleF9sb2NrKFx1MDAyNm5zLVx1MDAzZXBzcC5yZXJlZ19sb2NrKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzoyNTI6XHRfX25zaW1fcHNwX3VuaW5pdChucywgZmFsc2UpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTI1My1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzoyNTQ6XHRwc2QgPSBwc3BfZGV2X2NyZWF0ZShucy1cdTAwM2VuZXRkZXYsIFx1MDAyNm5zaW1fcHNwX29wcywgXHUwMDI2bnNpbV9wc3BfY2FwcywgbnMpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTI1NS1cdGlmIChJU19FUlIocHNkKSkge1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yNjYtXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM6MjY3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5zaW1fcHNwX3JlcmVnX2ZvcHMgPSB7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMjY4LVx0Lm9wZW4gPSBzaW1wbGVfb3BlbixcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzoyNjk6XHQud3JpdGUgPSBuc2ltX3BzcF9yZXJlZ193cml0ZSxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yNzAtXHQubGxzZWVrID0gZ2VuZXJpY19maWxlX2xsc2Vlayxcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMjczLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjI3NDppbnQgbnNpbV9wc3BfaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucylcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yNzUte1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yNzgtXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM6Mjc5Olx0cHNkID0gcHNwX2Rldl9jcmVhdGUobnMtXHUwMDNlbmV0ZGV2LCBcdTAwMjZuc2ltX3BzcF9vcHMsIFx1MDAyNm5zaW1fcHNwX2NhcHMsIG5zKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yODAtXHRpZiAoSVNfRVJSKHBzZCkpXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTI4Ni1cdG5zLVx1MDAzZXBzcC5yZXJlZyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7cHNwX3JlcmVnXCYjMzQ7LCAwMjAwLCBkZGlyLCBucyxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzoyODc6XHRcdFx0XHRcdCAgICBcdTAwMjZuc2ltX3BzcF9yZXJlZ19mb3BzKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yODgtXHRyZXR1cm4gMDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk9NTM4PWRlZiBkYXRhX3N0YWxlX2tleShjZmcpOlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS01NzEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk6NTcyOmRlZiBfX25zaW1fcHNwX3JlcmVnKGNmZyk6XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHktNTczLSAgICAjIFRoZSBQU1AgZGV2IElEIHdpbGwgY2hhbmdlLCByZW1lbWJlciB3aGF0IHdhcyB0aGVyZSBiZWZvcmVcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk9NTg1PWRlZiByZW1vdmFsX2RldmljZV9yeChjZmcpOlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS01OTktXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk6NjAwOiAgICAgICAgX19uc2ltX3BzcF9yZXJlZyhjZmcpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHktNjAxLSAgICBmaW5hbGx5OlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weT02MDU9ZGVmIHJlbW92YWxfZGV2aWNlX2JpKGNmZyk6XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTYyMS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCYjMzQ7c29jay1mZFwmIzM0Ozogcy5maWxlbm8oKX0pXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk6NjIyOiAgICAgICAgX19uc2ltX3BzcF9yZXJlZyhjZmcpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHktNjIzLSAgICBmaW5hbGx5OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDgzMwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDQwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQU1AvVENQIFVMUCBJbnRlcmFjdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIFBTUCBpcyBoYW5kbGVkIHRocm91Z2ggYG5ldGRldnNpbWAsIHdoaWNoIGlzIGVzc2VudGlhbGx5IGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgd2l0aGluIFFFTVUgYW5kIHN5emthbGxlci4gVENQIFVMUCwgYW5kIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpbmdzIGxpa2Uga1RMUywgQlBGLCBhbmQgTVBUQ1AsIGFyZSBhY2Nlc3NlZCB1c2luZyBzdGFuZGFyZCBzb2NrZXQgc3lzY2FsbHMsIHNwZWNpZmljYWxseSBgc2V0c29ja29wdCguLi4sIFNPTF9UQ1AsIFRDUF9VTFAsIC4uLilgLiBSaWdodCwgSSByZWNhbGwgdGhvc2UgZnVuY3Rpb25zOiBgc2tfaGFzX2RlY3J5cHRfdXNlcmAgaXMgaW4gYHNvY2suY2AsIGBfX3RjcF9zZXRfdWxwYCBpbiBgdGNwX3VscC5jYCwgYW5kIGBwc3Bfc29ja19hc3NvY19zZXRfcnhgIGluIGBwc3Bfc29jay5jYC4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogZG9lcyB0aGUgbW9kaWZpZWQgY29kZSBpbnRlcmFjdCB3aXRoIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgYW5kIHRoZSBQU1Agc2lkZSBvZiB0aGluZ3M/IFllcCwgaXQgaGl0cyBjb3JlIG5ldHdvcmtpbmcsIFRDUCBVTFAsIGFuZCBQU1Agc29ja2V0cy4gVGhlIGNvZGUmIzM5O3MgaW50cm9kdWNpbmcgY2hlY2tzIHRvIGF2b2lkIGNvbmZsaWN0cyDigJMgc3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBwcmV2ZW50aW5nIHRoZSBjb21iaW5hdGlvbiBvZiBQU1Agd2l0aCBUQ1AgVUxQIG9yIHNvY2tldHMgZW1wbG95aW5nIGBza192YWxpZGF0ZV94bWl0X3NrYmAsIHdoaWNoIEkgdGhpbmsgb2Ygd2l0aCBrVExTIGRldmljZSBvZmZsb2FkIG9yIFBTUC4gSXQmIzM5O3MgZXNzZW50aWFsbHkgZW5zdXJpbmcgdGhhdCBvZmZsb2FkIGFuZCBkZWNyeXB0aW9uIHN0YXRlcyBkb24mIzM5O3QgY2xhc2ggb24gdGhlIHNhbWUgc29ja2V0LiBUaGF0IG1ha2VzIHNlbnNlLgoKTmV4dCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgJiMzNDtXb3J0aEZ1enppbmcmIzM0Oy4gRmlyc3QsIGlzIGl0IHJlYWNoYWJsZSBpbiBhIHR5cGljYWwgUUVNVS92aXJ0dWFsaXplZCBzZXR1cD8gWWVzLCBUQ1AgVUxQIGlzIHBhcnQgb2Ygc3RhbmRhcmQgbmV0d29ya2luZyAod2UmIzM5O3ZlIGdvdCBgQ09ORklHX0lORVRgLCBgQ09ORklHX1RDUF9VTFBgKSwga1RMUyBpcyB0aGVyZSAoYENPTkZJR19UTFNgKSwgYW5kIFBTUCBpcyBjb25maWd1cmVkIChgQ09ORklHX0lORVRfUFNQYCwgYENPTkZJR19ORVRERVZTSU1gKS4gTm93LCBpcyBpdCAqd29ydGgqIGZ1enppbmc/IEFic29sdXRlbHkuIFRoZXNlIHJlZmFjdG9yaW5ncyBhbmQgY2hlY2tzIGluIGNydWNpYWwgc3Vic3lzdGVtcyAoVENQIFVMUCwgc29ja2V0IG1hbmFnZW1lbnQsIFBTUCkgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZSBhbmQgYXJlIGFsdGVyaW5nIHNvY2tldCBzdGF0ZSBjaGVja3MuIEl0JiMzOTtzIHByaW1lIHRlcnJpdG9yeSBmb3IgZmluZGluZyBlZGdlIGNhc2VzLgoKRmluYWxseSwgd2hhdCBhcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBzZXQgdXA/IEkmIzM5O20gdGhpbmtpbmc6CgoqICAgYElORVRfUFNQYAoqICAgYFRMU2AgKG9yIGF0IGxlYXN0IGBJTkVUX1VMUGAgb3IgYFRDUF9VTFBgIOKAkyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBLY29uZmlnYCBmb3IgdGhlIGRlcGVuZGVuY2llcyBvZiBgVENQX1VMUGAsIGBUTFNgLCBldGMuKQoqICAgYE5FVERFVlNJTWAKCkxldCBtZSBqdXN0IHF1aWNrbHkgY29uc3VsdCB0aGUgYEtjb25maWdgIGZpbGVzIGZvciBgVENQX1VMUGAgYW5kIGBUTFNgIHRvIGNvbmZpcm0gZGVwZW5kZW5jaWVzIGFuZCB0aGVpciByZWxhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1RDUF9VTFAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3Rscy5yc3Q9MjA9VExTIFVMUC5cbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGxzLnJzdC0yNS0gIGNvbm5lY3Qoc29jaywgYWRkciwgYWRkcmxlbik7XG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGxzLnJzdDoyNjogIHNldHNvY2tvcHQoc29jaywgU09MX1RDUCwgVENQX1VMUCwgXCYjMzQ7dGxzXCYjMzQ7LCBzaXplb2YoXCYjMzQ7dGxzXCYjMzQ7KSk7XG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGxzLnJzdC0yNy1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuYz05NT1zdGF0aWMgYm9vbCBzcmNfcHJvdG8oZW51bSBwcm90b2NvbF90eXBlIHR5cGUpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuYy05Ni17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuYzo5NzpcdHJldHVybiB0eXBlID09IFBST1RPQ09MSURfVENQX1VMUCB8fFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmMtOTgtXHQgICAgICAgdHlwZSA9PSBQUk9UT0NPTElEX0ZDT0UgfHxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuYz0xMDI9c3RhdGljIGJvb2wgdG1fY2lkX3Byb3RvKGVudW0gcHJvdG9jb2xfdHlwZSB0eXBlKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmMtMTAzLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2N4dC5jOjEwNDpcdHJldHVybiB0eXBlID09IFBST1RPQ09MSURfVENQX1VMUCB8fFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmMtMTA1LVx0ICAgICAgIHR5cGUgPT0gUFJPVE9DT0xJRF9GQ09FIHx8XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmM9MjAxNj1pbnQgcWVkX2N4dF9zZXRfcGZfcGFyYW1zKHN0cnVjdCBxZWRfaHdmbiAqcF9od2ZuLCB1MzIgcmRtYV90YXNrcylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuYy0yMDc4LVx0XHRcdHFlZF9jeHRfc2V0X3Byb3RvX2NpZF9jb3VudChwX2h3Zm4sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuYzoyMDc5Olx0XHRcdFx0XHRcdCAgICBQUk9UT0NPTElEX1RDUF9VTFAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuYy0yMDgwLVx0XHRcdFx0XHRcdCAgICBwX3BhcmFtcy1cdTAwM2VudW1fY29ucyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuYy0yMDgyLVx0XHRcdHFlZF9jeHRfc2V0X3Byb3RvX3RpZF9jb3VudChwX2h3Zm4sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuYzoyMDgzOlx0XHRcdFx0XHRcdCAgICBQUk9UT0NPTElEX1RDUF9VTFAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuYzoyMDg0Olx0XHRcdFx0XHRcdCAgICBRRURfQ1hUX1RDUF9VTFBfVElEX1NFRyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2N4dC5jLTIwODUtXHRcdFx0XHRcdFx0ICAgIDAsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmMtMjEwMS1cdFx0XHRxZWRfY3h0X3NldF9wcm90b19jaWRfY291bnQocF9od2ZuLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmM6MjEwMjpcdFx0XHRcdFx0XHQgICAgUFJPVE9DT0xJRF9UQ1BfVUxQLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmMtMjEwMy1cdFx0XHRcdFx0XHQgICAgcF9wYXJhbXMtXHUwMDNlbnVtX2NvbnMsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmMtMjEwNS1cdFx0XHRxZWRfY3h0X3NldF9wcm90b190aWRfY291bnQocF9od2ZuLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmM6MjEwNjpcdFx0XHRcdFx0XHQgICAgUFJPVE9DT0xJRF9UQ1BfVUxQLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmM6MjEwNzpcdFx0XHRcdFx0XHQgICAgUUVEX0NYVF9UQ1BfVUxQX1RJRF9TRUcsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuYy0yMTA4LVx0XHRcdFx0XHRcdCAgICAwLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2N4dC5jPTIxMjQ9aW50IHFlZF9jeHRfZ2V0X3RpZF9tZW1faW5mbyhzdHJ1Y3QgcWVkX2h3Zm4gKnBfaHdmbixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuYy0yMTQwLVx0Y2FzZSBRRURfUENJX05WTUVUQ1A6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuYzoyMTQxOlx0XHRwcm90byA9IFBST1RPQ09MSURfVENQX1VMUDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2N4dC5jOjIxNDI6XHRcdHNlZyA9IFFFRF9DWFRfVENQX1VMUF9USURfU0VHO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmMtMjE0My1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmM9MjQ0OD1pbnQgcWVkX2N4dF9nZXRfdGFza19jdHgoc3RydWN0IHFlZF9od2ZuICpwX2h3Zm4sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmMtMjQ2Ny1cdGNhc2UgUUVEX1BDSV9OVk1FVENQOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmM6MjQ2ODpcdFx0cHJvdG8gPSBQUk9UT0NPTElEX1RDUF9VTFA7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuYzoyNDY5Olx0XHRzZWcgPSBRRURfQ1hUX1RDUF9VTFBfVElEX1NFRztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2N4dC5jLTI0NzAtXHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2N4dC5oPTQ5PWludCBxZWRfY3h0X2dldF90aWRfbWVtX2luZm8oc3RydWN0IHFlZF9od2ZuICpwX2h3Zm4sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmgtNTEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuaDo1MjojZGVmaW5lIFFFRF9DWFRfVENQX1VMUF9USURfU0VHXHRQUk9UT0NPTElEX1RDUF9VTFBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2N4dC5oLTUzLSNkZWZpbmUgUUVEX0NYVF9ST0NFX1RJRF9TRUdcdFBST1RPQ09MSURfUk9DRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2Rldi5jPTIxMzk9aW50IHFlZF9yZXNjX2FsbG9jKHN0cnVjdCBxZWRfZGV2ICpjZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2Rldi5jLTIyNTktXHRcdFx0ICAgIHFlZF9jeHRfZ2V0X3Byb3RvX2NpZF9jb3VudChwX2h3Zm4sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9kZXYuYzoyMjYwOlx0XHRcdFx0XHRcdFx0UFJPVE9DT0xJRF9UQ1BfVUxQLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfZGV2LmMtMjI2MS1cdFx0XHRcdFx0XHRcdE5VTEwpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2hzaS5oPTExODQ9ZW51bSBwZXJzb25hbGl0eV90eXBlIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2hzaS5oLTExODUtXHRCQURfUEVSU09OQUxJVFlfVFlQLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaHNpLmg6MTE4NjpcdFBFUlNPTkFMSVRZX1RDUF9VTFAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9oc2kuaC0xMTg3LVx0UEVSU09OQUxJVFlfRkNPRSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pc2NzaS5jPTEzNz1xZWRfc3BfaXNjc2lfZnVuY19zdGFydChzdHJ1Y3QgcWVkX2h3Zm4gKnBfaHdmbixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pc2NzaS5jLTE2MS1cdFx0XHRcdCBJU0NTSV9SQU1ST0RfQ01EX0lEX0lOSVRfRlVOQyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmM6MTYyOlx0XHRcdFx0IFBST1RPQ09MSURfVENQX1VMUCwgXHUwMDI2aW5pdF9kYXRhKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtMTYzLVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtMjUzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXNjc2kuYzoyNTQ6XHRxZWRfc3BxX3JlZ2lzdGVyX2FzeW5jX2NiKHBfaHdmbiwgUFJPVE9DT0xJRF9UQ1BfVUxQLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXNjc2kuYy0yNTUtXHRcdFx0XHQgIHFlZF9pc2NzaV9hc3luY19ldmVudCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXNjc2kuYz0yNjA9c3RhdGljIGludCBxZWRfc3BfaXNjc2lfY29ubl9vZmZsb2FkKHN0cnVjdCBxZWRfaHdmbiAqcF9od2ZuLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtMjg5LVx0XHRcdFx0IElTQ1NJX1JBTVJPRF9DTURfSURfT0ZGTE9BRF9DT05OLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXNjc2kuYzoyOTA6XHRcdFx0XHQgUFJPVE9DT0xJRF9UQ1BfVUxQLCBcdTAwMjZpbml0X2RhdGEpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXNjc2kuYy0yOTEtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXNjc2kuYz00NDk9c3RhdGljIGludCBxZWRfc3BfaXNjc2lfY29ubl91cGRhdGUoc3RydWN0IHFlZF9od2ZuICpwX2h3Zm4sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXNjc2kuYy00NjgtXHRcdFx0XHQgSVNDU0lfUkFNUk9EX0NNRF9JRF9VUERBVEVfQ09OTixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmM6NDY5Olx0XHRcdFx0IFBST1RPQ09MSURfVENQX1VMUCwgXHUwMDI2aW5pdF9kYXRhKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtNDcwLVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmM9NDkwPXFlZF9zcF9pc2NzaV9tYWNfdXBkYXRlKHN0cnVjdCBxZWRfaHdmbiAqcF9od2ZuLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtNTA5LVx0XHRcdFx0IElTQ1NJX1JBTVJPRF9DTURfSURfTUFDX1VQREFURSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmM6NTEwOlx0XHRcdFx0IFBST1RPQ09MSURfVENQX1VMUCwgXHUwMDI2aW5pdF9kYXRhKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtNTExLVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmM9NTMzPXN0YXRpYyBpbnQgcWVkX3NwX2lzY3NpX2Nvbm5fdGVybWluYXRlKHN0cnVjdCBxZWRfaHdmbiAqcF9od2ZuLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtNTUxLVx0XHRcdFx0IElTQ1NJX1JBTVJPRF9DTURfSURfVEVSTUlOQVRJT05fQ09OTixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmM6NTUyOlx0XHRcdFx0IFBST1RPQ09MSURfVENQX1VMUCwgXHUwMDI2aW5pdF9kYXRhKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtNTUzLVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmM9NTY4PXN0YXRpYyBpbnQgcWVkX3NwX2lzY3NpX2Nvbm5fY2xlYXJfc3Eoc3RydWN0IHFlZF9od2ZuICpwX2h3Zm4sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXNjc2kuYy01ODUtXHRcdFx0XHQgSVNDU0lfUkFNUk9EX0NNRF9JRF9DTEVBUl9TUSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmM6NTg2Olx0XHRcdFx0IFBST1RPQ09MSURfVENQX1VMUCwgXHUwMDI2aW5pdF9kYXRhKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtNTg3LVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmM9NTkzPXN0YXRpYyBpbnQgcWVkX3NwX2lzY3NpX2Z1bmNfc3RvcChzdHJ1Y3QgcWVkX2h3Zm4gKnBfaHdmbixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pc2NzaS5jLTYwOS1cdFx0XHRcdCBJU0NTSV9SQU1ST0RfQ01EX0lEX0RFU1RST1lfRlVOQyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmM6NjEwOlx0XHRcdFx0IFBST1RPQ09MSURfVENQX1VMUCwgXHUwMDI2aW5pdF9kYXRhKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtNjExLVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtNjE1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXNjc2kuYzo2MTY6XHRxZWRfc3BxX3VucmVnaXN0ZXJfYXN5bmNfY2IocF9od2ZuLCBQUk9UT0NPTElEX1RDUF9VTFApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXNjc2kuYy02MTctXHRyZXR1cm4gcmM7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXNjc2kuYz03Nzk9c3RhdGljIGludCBxZWRfaXNjc2lfYWNxdWlyZV9jb25uZWN0aW9uKHN0cnVjdCBxZWRfaHdmbiAqcF9od2ZuLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtNzg3LVx0c3Bpbl9sb2NrX2JoKFx1MDAyNnBfaHdmbi1cdTAwM2VwX2lzY3NpX2luZm8tXHUwMDNlbG9jayk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pc2NzaS5jOjc4ODpcdHJjID0gcWVkX2N4dF9hY3F1aXJlX2NpZChwX2h3Zm4sIFBST1RPQ09MSURfVENQX1VMUCwgXHUwMDI2aWNpZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pc2NzaS5jLTc4OS1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnBfaHdmbi1cdTAwM2VwX2lzY3NpX2luZm8tXHUwMDNlbG9jayk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbGwyLmM9MTAyMz1zdGF0aWMgaW50IHFlZF9zcF9sbDJfdHhfcXVldWVfc3RhcnQoc3RydWN0IHFlZF9od2ZuICpwX2h3Zm4sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbGwyLmMtMTA4NC1cdFx0YnJlYWs7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9sbDIuYzoxMDg1Olx0Y2FzZSBRRURfTEwyX1RZUEVfVENQX1VMUDpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2xsMi5jOjEwODY6XHRcdHBfcmFtcm9kLVx1MDAzZWNvbm5fdHlwZSA9IFBST1RPQ09MSURfVENQX1VMUDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2xsMi5jLTEwODctXHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2xsMi5jLTEwOTYtXHRcdCAgICBwX2h3Zm4tXHUwMDNlaHdfaW5mby5wZXJzb25hbGl0eSA9PSBRRURfUENJX05WTUVUQ1ApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9sbDIuYzoxMDk3Olx0XHRcdHBfcmFtcm9kLVx1MDAzZWNvbm5fdHlwZSA9IFBST1RPQ09MSURfVENQX1VMUDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2xsMi5jLTEwOTgtXHRcdGVsc2Vcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9sbDIuYz0yNTAwPXN0YXRpYyBpbnQgX19xZWRfbGwyX3N0YXJ0KHN0cnVjdCBxZWRfaHdmbiAqcF9od2ZuLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2xsMi5jLTI1MTQtXHRjYXNlIFFFRF9QQ0lfTlZNRVRDUDpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2xsMi5jOjI1MTU6XHRcdGNvbm5fdHlwZSA9IFFFRF9MTDJfVFlQRV9UQ1BfVUxQO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbGwyLmMtMjUxNi1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jPTQ4PXN0YXRpYyBpbnQgcWVkX3NwX252bWV0Y3BfZnVuY19zdGFydChzdHJ1Y3QgcWVkX2h3Zm4gKnBfaHdmbixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmMtNzAtXHRcdFx0XHQgTlZNRVRDUF9SQU1ST0RfQ01EX0lEX0lOSVRfRlVOQyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX252bWV0Y3AuYzo3MTpcdFx0XHRcdCBQUk9UT0NPTElEX1RDUF9VTFAsIFx1MDAyNmluaXRfZGF0YSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmMtNzItXHRpZiAocmMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jLTExMi1cdHBfaHdmbi1cdTAwM2VwX252bWV0Y3BfaW5mby1cdTAwM2VldmVudF9jYiA9IGFzeW5jX2V2ZW50X2NiO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jOjExMzpcdHFlZF9zcHFfcmVnaXN0ZXJfYXN5bmNfY2IocF9od2ZuLCBQUk9UT0NPTElEX1RDUF9VTFAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmMtMTE0LVx0XHRcdFx0ICBxZWRfbnZtZXRjcF9hc3luY19ldmVudCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jPTExOT1zdGF0aWMgaW50IHFlZF9zcF9udm1ldGNwX2Z1bmNfc3RvcChzdHJ1Y3QgcWVkX2h3Zm4gKnBfaHdmbixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmMtMTM0LVx0XHRcdFx0IE5WTUVUQ1BfUkFNUk9EX0NNRF9JRF9ERVNUUk9ZX0ZVTkMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmM6MTM1Olx0XHRcdFx0IFBST1RPQ09MSURfVENQX1VMUCwgXHUwMDI2aW5pdF9kYXRhKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX252bWV0Y3AuYy0xMzYtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jLTEzOS1cdHJjID0gcWVkX3NwcV9wb3N0KHBfaHdmbiwgcF9lbnQsIE5VTEwpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jOjE0MDpcdHFlZF9zcHFfdW5yZWdpc3Rlcl9hc3luY19jYihwX2h3Zm4sIFBST1RPQ09MSURfVENQX1VMUCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmMtMTQxLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX252bWV0Y3AuYz0yNjY9c3RhdGljIGludCBxZWRfc3BfbnZtZXRjcF9jb25uX29mZmxvYWQoc3RydWN0IHFlZF9od2ZuICpwX2h3Zm4sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jLTI4OC1cdFx0XHRcdCBOVk1FVENQX1JBTVJPRF9DTURfSURfT0ZGTE9BRF9DT05OLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jOjI4OTpcdFx0XHRcdCBQUk9UT0NPTElEX1RDUF9VTFAsIFx1MDAyNmluaXRfZGF0YSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmMtMjkwLVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX252bWV0Y3AuYz0zNTY9c3RhdGljIGludCBxZWRfc3BfbnZtZXRjcF9jb25uX3VwZGF0ZShzdHJ1Y3QgcWVkX2h3Zm4gKnBfaHdmbixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmMtMzc1LVx0XHRcdFx0IE5WTUVUQ1BfUkFNUk9EX0NNRF9JRF9VUERBVEVfQ09OTixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX252bWV0Y3AuYzozNzY6XHRcdFx0XHQgUFJPVE9DT0xJRF9UQ1BfVUxQLCBcdTAwMjZpbml0X2RhdGEpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jLTM3Ny1cdGlmIChyYylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmM9MzkzPXN0YXRpYyBpbnQgcWVkX3NwX252bWV0Y3BfY29ubl90ZXJtaW5hdGUoc3RydWN0IHFlZF9od2ZuICpwX2h3Zm4sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jLTQxMC1cdFx0XHRcdCBOVk1FVENQX1JBTVJPRF9DTURfSURfVEVSTUlOQVRJT05fQ09OTixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX252bWV0Y3AuYzo0MTE6XHRcdFx0XHQgUFJPVE9DT0xJRF9UQ1BfVUxQLCBcdTAwMjZpbml0X2RhdGEpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jLTQxMi1cdGlmIChyYylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmM9NDIyPXN0YXRpYyBpbnQgcWVkX3NwX252bWV0Y3BfY29ubl9jbGVhcl9zcShzdHJ1Y3QgcWVkX2h3Zm4gKnBfaHdmbixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmMtNDM4LVx0XHRcdFx0IE5WTUVUQ1BfUkFNUk9EX0NNRF9JRF9DTEVBUl9TUSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX252bWV0Y3AuYzo0Mzk6XHRcdFx0XHQgUFJPVE9DT0xJRF9UQ1BfVUxQLCBcdTAwMjZpbml0X2RhdGEpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jLTQ0MC1cdGlmIChyYylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmM9NTE4PXN0YXRpYyBpbnQgcWVkX252bWV0Y3BfYWNxdWlyZV9jb25uZWN0aW9uKHN0cnVjdCBxZWRfaHdmbiAqcF9od2ZuLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX252bWV0Y3AuYy01MjUtXHRzcGluX2xvY2tfYmgoXHUwMDI2cF9od2ZuLVx1MDAzZXBfbnZtZXRjcF9pbmZvLVx1MDAzZWxvY2spO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jOjUyNjpcdHJjID0gcWVkX2N4dF9hY3F1aXJlX2NpZChwX2h3Zm4sIFBST1RPQ09MSURfVENQX1VMUCwgXHUwMDI2aWNpZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmMtNTI3LVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cF9od2ZuLVx1MDAzZXBfbnZtZXRjcF9pbmZvLVx1MDAzZWxvY2spO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX29vby5jPTc2PWludCBxZWRfb29vX2FsbG9jKHN0cnVjdCBxZWRfaHdmbiAqcF9od2ZuKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX29vby5jLTg2LVx0Y2FzZSBRRURfUENJX05WTUVUQ1A6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9vb28uYzo4NzpcdFx0cHJvdG8gPSBQUk9UT0NPTElEX1RDUF9VTFA7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9vb28uYy04OC1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfc3BfY29tbWFuZHMuYz0zMDA9aW50IHFlZF9zcF9wZl9zdGFydChzdHJ1Y3QgcWVkX2h3Zm4gKnBfaHdmbixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9zcF9jb21tYW5kcy5jLTM5NC1cdGNhc2UgUUVEX1BDSV9OVk1FVENQOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfc3BfY29tbWFuZHMuYzozOTU6XHRcdHBfcmFtcm9kLVx1MDAzZXBlcnNvbmFsaXR5ID0gUEVSU09OQUxJVFlfVENQX1VMUDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX3NwX2NvbW1hbmRzLmMtMzk2LVx0XHRicmVhaztcbi0tXG5pbmNsdWRlL2xpbnV4L3FlZC9jb21tb25faHNpLmg9NjgxPXN0cnVjdCB0Y3BfdWxwX2Nvbm5lY3RfZG9uZV9wYXJhbXMge1xuLS1cbmluY2x1ZGUvbGludXgvcWVkL2NvbW1vbl9oc2kuaC02ODQtXHR1OCBmbGFncztcbmluY2x1ZGUvbGludXgvcWVkL2NvbW1vbl9oc2kuaDo2ODU6I2RlZmluZSBUQ1BfVUxQX0NPTk5FQ1RfRE9ORV9QQVJBTVNfVFNfRU5fTUFTS1x0XHQweDFcbmluY2x1ZGUvbGludXgvcWVkL2NvbW1vbl9oc2kuaDo2ODY6I2RlZmluZSBUQ1BfVUxQX0NPTk5FQ1RfRE9ORV9QQVJBTVNfVFNfRU5fU0hJRlRcdFx0MFxuaW5jbHVkZS9saW51eC9xZWQvY29tbW9uX2hzaS5oOjY4NzojZGVmaW5lIFRDUF9VTFBfQ09OTkVDVF9ET05FX1BBUkFNU19SRVNFUlZFRF9NQVNLXHQweDdGXG5pbmNsdWRlL2xpbnV4L3FlZC9jb21tb25faHNpLmg6Njg4OiNkZWZpbmUgVENQX1VMUF9DT05ORUNUX0RPTkVfUEFSQU1TX1JFU0VSVkVEX1NISUZUXHQxXG5pbmNsdWRlL2xpbnV4L3FlZC9jb21tb25faHNpLmgtNjg5LX07XG4tLVxuaW5jbHVkZS9saW51eC9xZWQvY29tbW9uX2hzaS5oPTcyNz1lbnVtIHByb3RvY29sX3R5cGUge1xuaW5jbHVkZS9saW51eC9xZWQvY29tbW9uX2hzaS5oOjcyODpcdFBST1RPQ09MSURfVENQX1VMUCxcbmluY2x1ZGUvbGludXgvcWVkL2NvbW1vbl9oc2kuaC03MjktXHRQUk9UT0NPTElEX0ZDT0UsXG4tLVxuaW5jbHVkZS9saW51eC9xZWQvcWVkX2xsMl9pZi5oPTE5PWVudW0gcWVkX2xsMl9jb25uX3R5cGUge1xuaW5jbHVkZS9saW51eC9xZWQvcWVkX2xsMl9pZi5oLTIwLVx0UUVEX0xMMl9UWVBFX0ZDT0UsXG5pbmNsdWRlL2xpbnV4L3FlZC9xZWRfbGwyX2lmLmg6MjE6XHRRRURfTEwyX1RZUEVfVENQX1VMUCxcbmluY2x1ZGUvbGludXgvcWVkL3FlZF9sbDJfaWYuaC0yMi1cdFFFRF9MTDJfVFlQRV9URVNULFxuLS1cbmluY2x1ZGUvbmV0L3RjcC5oPTI3OTg9ZW51bSBocnRpbWVyX3Jlc3RhcnQgdGNwX3BhY2Vfa2ljayhzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpO1xuLS1cbmluY2x1ZGUvbmV0L3RjcC5oLTI4MDMtXG5pbmNsdWRlL25ldC90Y3AuaDoyODA0OiNkZWZpbmUgVENQX1VMUF9OQU1FX01BWFx0MTZcbmluY2x1ZGUvbmV0L3RjcC5oOjI4MDU6I2RlZmluZSBUQ1BfVUxQX01BWFx0XHQxMjhcbmluY2x1ZGUvbmV0L3RjcC5oOjI4MDY6I2RlZmluZSBUQ1BfVUxQX0JVRl9NQVhcdFx0KFRDUF9VTFBfTkFNRV9NQVgqVENQX1VMUF9NQVgpXG5pbmNsdWRlL25ldC90Y3AuaC0yODA3LVxuaW5jbHVkZS9uZXQvdGNwLmg9MjgwOD1zdHJ1Y3QgdGNwX3VscF9vcHMge1xuLS1cbmluY2x1ZGUvbmV0L3RjcC5oLTI4MjQtXG5pbmNsdWRlL25ldC90Y3AuaDoyODI1Olx0Y2hhclx0XHRuYW1lW1RDUF9VTFBfTkFNRV9NQVhdO1xuaW5jbHVkZS9uZXQvdGNwLmgtMjgyNi1cdHN0cnVjdCBtb2R1bGVcdCpvd25lcjtcbi0tXG5pbmNsdWRlL25ldC90Y3AuaD0yODMzPXZvaWQgdGNwX3VwZGF0ZV91bHAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcHJvdG8gKnAsXG4tLVxuaW5jbHVkZS9uZXQvdGNwLmgtMjgzNS1cbmluY2x1ZGUvbmV0L3RjcC5oOjI4MzY6I2RlZmluZSBNT0RVTEVfQUxJQVNfVENQX1VMUChuYW1lKVx0XHRcdFx0XFxcbmluY2x1ZGUvbmV0L3RjcC5oLTI4MzctXHRNT0RVTEVfSU5GTyhhbGlhcywgbmFtZSk7XHRcdFxcXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oPTc0PWVudW0ge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC90Y3AuaC0xMjMtI2RlZmluZSBUQ1BfRkFTVE9QRU5fQ09OTkVDVFx0MzBcdC8qIEF0dGVtcHQgRmFzdE9wZW4gd2l0aCBjb25uZWN0ICovXG5pbmNsdWRlL3VhcGkvbGludXgvdGNwLmg6MTI0OiNkZWZpbmUgVENQX1VMUFx0XHRcdDMxXHQvKiBBdHRhY2ggYSBVTFAgdG8gYSBUQ1AgY29ubmVjdGlvbiAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oLTEyNS0jZGVmaW5lIFRDUF9NRDVTSUdfRVhUXHRcdDMyXHQvKiBUQ1AgTUQ1IFNpZ25hdHVyZSB3aXRoIGV4dGVuc2lvbnMgKi9cbi0tXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYz0zNzc9c3RhdGljIGludCBwcm9jX3RjcF9hdmFpbGFibGVfdWxwKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCxcbi0tXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYy0zODAte1xubmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmM6MzgxOlx0c3RydWN0IGN0bF90YWJsZSB0YmwgPSB7IC5tYXhsZW4gPSBUQ1BfVUxQX0JVRl9NQVgsIH07XG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYy0zODItXHRpbnQgcmV0O1xuLS1cbm5ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jLTM4Ni1cdFx0cmV0dXJuIC1FTk9NRU07XG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYzozODc6XHR0Y3BfZ2V0X2F2YWlsYWJsZV91bHAodGJsLmRhdGEsIFRDUF9VTFBfQlVGX01BWCk7XG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYy0zODgtXHRyZXQgPSBwcm9jX2Rvc3RyaW5nKFx1MDAyNnRibCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7XG4tLVxubmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmM9NTMwPXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGlwdjRfdGFibGVbXSA9IHtcbi0tXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYy02MDQtXHRcdC5wcm9jbmFtZVx0PSBcJiMzNDt0Y3BfYXZhaWxhYmxlX3VscFwmIzM0Oyxcbm5ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jOjYwNTpcdFx0Lm1heGxlblx0XHQ9IFRDUF9VTFBfQlVGX01BWCxcbm5ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jLTYwNi1cdFx0Lm1vZGVcdFx0PSAwNDQ0LFxuLS1cbm5ldC9pcHY0L3RjcC5jPTM4MzY9aW50IGRvX3RjcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvaXB2NC90Y3AuYy0zODY1LVx0fVxubmV0L2lwdjQvdGNwLmM6Mzg2NjpcdGNhc2UgVENQX1VMUDoge1xubmV0L2lwdjQvdGNwLmM6Mzg2NzpcdFx0Y2hhciBuYW1lW1RDUF9VTFBfTkFNRV9NQVhdO1xubmV0L2lwdjQvdGNwLmMtMzg2OC1cbi0tXG5uZXQvaXB2NC90Y3AuYy0zODcyLVx0XHR2YWwgPSBzdHJuY3B5X2Zyb21fc29ja3B0cihuYW1lLCBvcHR2YWwsXG5uZXQvaXB2NC90Y3AuYzozODczOlx0XHRcdFx0XHRtaW5fdChsb25nLCBUQ1BfVUxQX05BTUVfTUFYIC0gMSxcbm5ldC9pcHY0L3RjcC5jLTM4NzQtXHRcdFx0XHRcdCAgICAgIG9wdGxlbikpO1xuLS1cbm5ldC9pcHY0L3RjcC5jPTQ0ODA9aW50IGRvX3RjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTQ1OTctXHR9XG5uZXQvaXB2NC90Y3AuYzo0NTk4Olx0Y2FzZSBUQ1BfVUxQOlxubmV0L2lwdjQvdGNwLmMtNDU5OS1cdFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNmxlbiwgb3B0bGVuLCBzaXplb2YoaW50KSkpXG5uZXQvaXB2NC90Y3AuYy00NjAwLVx0XHRcdHJldHVybiAtRUZBVUxUO1xubmV0L2lwdjQvdGNwLmM6NDYwMTpcdFx0bGVuID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIFRDUF9VTFBfTkFNRV9NQVgpO1xubmV0L2lwdjQvdGNwLmMtNDYwMi1cdFx0aWYgKCFpY3NrLVx1MDAzZWljc2tfdWxwX29wcykge1xuLS1cbm5ldC9pcHY0L3RjcF9kaWFnLmM9MTQ2PXN0YXRpYyBzaXplX3QgdGNwX2RpYWdfZ2V0X2F1eF9zaXplKHN0cnVjdCBzb2NrICpzaywgYm9vbCBuZXRfYWRtaW4pXG4tLVxubmV0L2lwdjQvdGNwX2RpYWcuYy0xNzQtXHRcdFx0c2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoMCkgJiM0Mztcbm5ldC9pcHY0L3RjcF9kaWFnLmM6MTc1Olx0XHRcdFx0bmxhX3RvdGFsX3NpemUoVENQX1VMUF9OQU1FX01BWCk7XG5uZXQvaXB2NC90Y3BfZGlhZy5jLTE3Ni1cdFx0XHRpZiAodWxwX29wcy1cdTAwM2VnZXRfaW5mb19zaXplKVxuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmM9ODMzPXN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF9zb2xfdGNwKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmMtODM5LVx0c3dpdGNoIChvcHRuYW1lKSB7XG5uZXQvbXB0Y3Avc29ja29wdC5jOjg0MDpcdGNhc2UgVENQX1VMUDpcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtODQxLVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L21wdGNwL3NvY2tvcHQuYz0xNDExPXN0YXRpYyBpbnQgbXB0Y3BfZ2V0c29ja29wdF9zb2xfdGNwKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMTQxNi1cdHN3aXRjaCAob3B0bmFtZSkge1xubmV0L21wdGNwL3NvY2tvcHQuYzoxNDE3Olx0Y2FzZSBUQ1BfVUxQOlxubmV0L21wdGNwL3NvY2tvcHQuYy0xNDE4LVx0Y2FzZSBUQ1BfQ09OR0VTVElPTjpcbi0tXG5uZXQvc21jL2FmX3NtYy5jPTMwODQ9aW50IHNtY19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0zMDkwLVxubmV0L3NtYy9hZl9zbWMuYzozMDkxOlx0aWYgKGxldmVsID09IFNPTF9UQ1AgXHUwMDI2XHUwMDI2IG9wdG5hbWUgPT0gVENQX1VMUClcbm5ldC9zbWMvYWZfc21jLmMtMzA5Mi1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC90bHMvdGxzX21haW4uYz01MD1NT0RVTEVfTElDRU5TRShcJiMzNDtEdWFsIEJTRC9HUExcJiMzNDspO1xubmV0L3Rscy90bHNfbWFpbi5jOjUxOk1PRFVMRV9BTElBU19UQ1BfVUxQKFwmIzM0O3Rsc1wmIzM0Oyk7XG5uZXQvdGxzL3Rsc19tYWluLmMtNTItXG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oPTcyPWVudW0geyBcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvdGNwLmgtMTIwLSNkZWZpbmUgVENQX0ZBU1RPUEVOX0NPTk5FQ1RcdDMwXHQvKiBBdHRlbXB0IEZhc3RPcGVuIHdpdGggY29ubmVjdCAqL1xudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oOjEyMTojZGVmaW5lIFRDUF9VTFBcdFx0XHQzMVx0LyogQXR0YWNoIGEgVUxQIHRvIGEgVENQIGNvbm5lY3Rpb24gKi9cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC90Y3AuaC0xMjItI2RlZmluZSBUQ1BfTUQ1U0lHX0VYVFx0XHQzMlx0LyogVENQIE1ENSBTaWduYXR1cmUgd2l0aCBleHRlbnNpb25zICovXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2V0Z2V0X3NvY2tvcHQuYz04Nz1zdGF0aWMgdm9pZCB0ZXN0X2t0bHMoaW50IGZhbWlseSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZXRnZXRfc29ja29wdC5jLTExMS1cdC8qIFNldHVwIEtUTFMgKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NldGdldF9zb2Nrb3B0LmM6MTEyOlx0cmV0ID0gc2V0c29ja29wdChmZCwgSVBQUk9UT19UQ1AsIFRDUF9VTFAsIFwmIzM0O3Rsc1wmIzM0Oywgc2l6ZW9mKFwmIzM0O3Rsc1wmIzM0OykpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2V0Z2V0X3NvY2tvcHQuYy0xMTMtXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwmIzM0O3NldHNvY2tvcHRcJiMzNDspKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2V0Z2V0X3NvY2tvcHQuYy0xMTQtXHRcdGdvdG8gZXJyX291dDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NldGdldF9zb2Nrb3B0LmM6MTE1Olx0cmV0ID0gc2V0c29ja29wdChjZmQsIElQUFJPVE9fVENQLCBUQ1BfVUxQLCBcJiMzNDt0bHNcJiMzNDssIHNpemVvZihcJiMzNDt0bHNcJiMzNDspKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NldGdldF9zb2Nrb3B0LmMtMTE2LVx0aWYgKCFBU1NFUlRfT0socmV0LCBcJiMzNDtzZXRzb2Nrb3B0XCYjMzQ7KSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2t0bHMuYy0xMy0jZGVmaW5lIE1BWF9URVNUX05BTUUgODBcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfa3Rscy5jOjE0OiNkZWZpbmUgVENQX1VMUCAzMVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9rdGxzLmMtMTUtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2t0bHMuYz0xNj1zdGF0aWMgaW50IGluaXRfa3Rsc19wYWlycyhpbnQgYywgaW50IHApXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9rdGxzLmMtMjEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2t0bHMuYzoyMjpcdGVyciA9IHNldHNvY2tvcHQoYywgSVBQUk9UT19UQ1AsIFRDUF9VTFAsIFwmIzM0O3Rsc1wmIzM0Oywgc3RybGVuKFwmIzM0O3Rsc1wmIzM0OykpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9rdGxzLmM6MjM6XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3NldHNvY2tvcHQoVENQX1VMUClcJiMzNDspKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9rdGxzLmMtMjQtXHRcdGdvdG8gb3V0O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9rdGxzLmMtMjUtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2t0bHMuYzoyNjpcdGVyciA9IHNldHNvY2tvcHQocCwgSVBQUk9UT19UQ1AsIFRDUF9VTFAsIFwmIzM0O3Rsc1wmIzM0Oywgc3RybGVuKFwmIzM0O3Rsc1wmIzM0OykpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9rdGxzLmM6Mjc6XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3NldHNvY2tvcHQoVENQX1VMUClcJiMzNDspKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9rdGxzLmMtMjgtXHRcdGdvdG8gb3V0O1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfa3Rscy5jPTYzPXN0YXRpYyB2b2lkIHRlc3Rfc29ja21hcF9rdGxzX3VwZGF0ZV9mYWlsc193aGVuX3NvY2tfaGFzX3VscChpbnQgZmFtaWx5LCBpbnQgbWFwKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfa3Rscy5jLTEwMS1cdC8qIHNhdmUgc2stXHUwMDNlc2tfcHJvdCBhbmQgc2V0IGl0IHRvIHRsc19wcm90cyAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9rdGxzLmM6MTAyOlx0ZXJyID0gc2V0c29ja29wdChzLCBJUFBST1RPX1RDUCwgVENQX1VMUCwgXCYjMzQ7dGxzXCYjMzQ7LCBzdHJsZW4oXCYjMzQ7dGxzXCYjMzQ7KSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2t0bHMuYzoxMDM6XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3NldHNvY2tvcHQoVENQX1VMUClcJiMzNDspKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9rdGxzLmMtMTA0LVx0XHRnb3RvIGNsb3NlO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfa3Rscy5jPTExOT1zdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXBfa3Rsc19lbmFibGVfZmFpbHNfd2hlbl9pbl9zb2NrbWFwKGludCBmYW1pbHksIGludCBtYXApXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9rdGxzLmMtMTY4LVx0LyogSW5zdGFsbGluZyB0aGUgVExTIFVMUCBpcyBhbGxvd2VkLCBpdCBkb2VzIG5vdCB0b3VjaCB0aGUgZGF0YXBhdGguICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2t0bHMuYzoxNjk6XHRlcnIgPSBzZXRzb2Nrb3B0KHMsIElQUFJPVE9fVENQLCBUQ1BfVUxQLCBcJiMzNDt0bHNcJiMzNDssIHN0cmxlbihcJiMzNDt0bHNcJiMzNDspKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfa3Rscy5jOjE3MDpcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7c2V0c29ja29wdChUQ1BfVUxQKVwmIzM0OykpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2t0bHMuYy0xNzEtXHRcdGdvdG8gY2xvc2U7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5PTI0PWZyb20gbGliLnB5IGltcG9ydCBpcFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTI1LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5OjI2OlRDUF9VTFAgPSAzMVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTI3LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weT0zMzg9ZGVmIF9yZXF1aXJlX3Rsc191bHAoKTpcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHktMzQxLSAgICAgICAgICAgIHRyeTpcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weTozNDI6ICAgICAgICAgICAgICAgIHMuc2V0c29ja29wdChzb2NrZXQuU09MX1RDUCwgVENQX1VMUCwgYlwmIzM0O3Rsc1wmIzM0OylcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS0zNDMtICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weT0zNDc9ZGVmIGFzc29jX3BzcF91bHBfZXhjbHVzaXZlKGNmZyk6XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTM1Ny0gICAgICAgICAgICB3aXRoIGtzZnRfcmFpc2VzKE9TRXJyb3IpIGFzIGNtOlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5OjM1ODogICAgICAgICAgICAgICAgcy5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfVENQLCBUQ1BfVUxQLCBiXCYjMzQ7dGxzXCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTM1OS0gICAgICAgICAgICBrc2Z0X2VxKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRUlOVkFMKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weT0zNjQ9ZGVmIGFzc29jX3VscF9wc3BfZXhjbHVzaXZlKGNmZyk6XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTM3MC0gICAgICAgIHRyeTpcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weTozNzE6ICAgICAgICAgICAgcy5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfVENQLCBUQ1BfVUxQLCBiXCYjMzQ7dGxzXCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTM3Mi0gICAgICAgICAgICB3aXRoIGtzZnRfcmFpc2VzKE5sRXJyb3IpIGFzIGNtOlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9nZXRzb2Nrb3B0X2l0ZXIuYy01NC0jZW5kaWZcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9nZXRzb2Nrb3B0X2l0ZXIuYzo1NTojaWZuZGVmIFRDUF9VTFBcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9nZXRzb2Nrb3B0X2l0ZXIuYzo1NjojZGVmaW5lIFRDUF9VTFAgMzFcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9nZXRzb2Nrb3B0X2l0ZXIuYy01Ny0jZW5kaWZcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZ2V0c29ja29wdF9pdGVyLmM9NTAzPUZJWFRVUkVfU0VUVVAodGxzKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9nZXRzb2Nrb3B0X2l0ZXIuYy01MzMtXHRjbG9zZShsZmQpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2dldHNvY2tvcHRfaXRlci5jOjUzNDpcdGlmIChzZXRzb2Nrb3B0KHNlbGYtXHUwMDNlZmQsIElQUFJPVE9fVENQLCBUQ1BfVUxQLCBcJiMzNDt0bHNcJiMzNDssIHNpemVvZihcJiMzNDt0bHNcJiMzNDspKSlcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9nZXRzb2Nrb3B0X2l0ZXIuYzo1MzU6XHRcdFNLSVAocmV0dXJuLCBcJiMzNDtUQ1BfVUxQPXRsczogJXMgKGJ1aWx0IHdpdGhvdXQgVExTPylcJiMzNDssXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZ2V0c29ja29wdF9pdGVyLmMtNTM2LVx0XHQgICAgIHN0cmVycm9yKGVycm5vKSk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3QuYz0zOD1leHRlcm4gaW50IG9wdGluZDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5jLTQyLSNlbmRpZlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3QuYzo0MzojaWZuZGVmIFRDUF9VTFBcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9jb25uZWN0LmM6NDQ6I2RlZmluZSBUQ1BfVUxQIDMxXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5jLTQ1LSNlbmRpZlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9jb25uZWN0LmM9MjcwPXN0YXRpYyBpbnQgZG9fdWxwX3NvKGludCBzb2NrLCBjb25zdCBjaGFyICpuYW1lKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3QuYy0yNzEte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3QuYzoyNzI6XHRyZXR1cm4gc2V0c29ja29wdChzb2NrLCBJUFBST1RPX1RDUCwgVENQX1VMUCwgbmFtZSwgc3RybGVuKG5hbWUpKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9jb25uZWN0LmMtMjczLX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5jPTI3Nj1zdGF0aWMgdm9pZCBzb2NrX3Rlc3RfdGNwdWxwKGludCBzb2NrLCBpbnQgcHJvdG8sIHVuc2lnbmVkIGludCBsaW5lKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9jb25uZWN0LmMtMjc5LVx0Y2hhciBidWZbOF0gPSBcJiMzNDtcJiMzNDs7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5jOjI4MDpcdGludCByZXQgPSBnZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9fVENQLCBUQ1BfVUxQLCBidWYsIFx1MDAyNmJ1Zmxlbik7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5jLTI4MS1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmM9MTEyPXN0YXRpYyB2b2lkIHVscF9zb2NrX3BhaXIoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYy0xNDQtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmM6MTQ1Olx0cmV0ID0gc2V0c29ja29wdCgqZmQsIElQUFJPVE9fVENQLCBUQ1BfVUxQLCBcJiMzNDt0bHNcJiMzNDssIHNpemVvZihcJiMzNDt0bHNcJiMzNDspKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYy0xNDYtXHRpZiAocmV0ICE9IDApIHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmMtMTQ4LVx0XHQqbm90bHMgPSB0cnVlO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jOjE0OTpcdFx0cHJpbnRmKFwmIzM0O0ZhaWx1cmUgc2V0dGluZyBUQ1BfVUxQLCB0ZXN0aW5nIHdpdGhvdXQgdGxzXFxuXCYjMzQ7KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYy0xNTAtXHRcdHJldHVybjtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmMtMTUyLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jOjE1MzpcdHJldCA9IHNldHNvY2tvcHQoKmNmZCwgSVBQUk9UT19UQ1AsIFRDUF9VTFAsIFwmIzM0O3Rsc1wmIzM0Oywgc2l6ZW9mKFwmIzM0O3Rsc1wmIzM0OykpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jLTE1NC1cdEFTU0VSVF9FUShyZXQsIDApO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYz0zMTk4PVRFU1Qobm9uX2VzdGFibGlzaGVkKSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jLTMyMjEtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmM6MzIyMjpcdHJldCA9IHNldHNvY2tvcHQoZmQsIElQUFJPVE9fVENQLCBUQ1BfVUxQLCBcJiMzNDt0bHNcJiMzNDssIHNpemVvZihcJiMzNDt0bHNcJiMzNDspKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYy0zMjIzLVx0RVhQRUNUX0VRKHJldCwgLTEpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYy0zMjI4LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jOjMyMjk6XHRyZXQgPSBzZXRzb2Nrb3B0KHNmZCwgSVBQUk9UT19UQ1AsIFRDUF9VTFAsIFwmIzM0O3Rsc1wmIzM0Oywgc2l6ZW9mKFwmIzM0O3Rsc1wmIzM0OykpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jLTMyMzAtXHRFWFBFQ1RfRVEocmV0LCAtMSk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jLTMyMzgtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmM6MzIzOTpcdHJldCA9IHNldHNvY2tvcHQoZmQsIElQUFJPVE9fVENQLCBUQ1BfVUxQLCBcJiMzNDt0bHNcJiMzNDssIHNpemVvZihcJiMzNDt0bHNcJiMzNDspKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYy0zMjQwLVx0QVNTRVJUX0VRKHJldCwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmMtMzI0MS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYzozMjQyOlx0cmV0ID0gc2V0c29ja29wdChmZCwgSVBQUk9UT19UQ1AsIFRDUF9VTFAsIFwmIzM0O3Rsc1wmIzM0Oywgc2l6ZW9mKFwmIzM0O3Rsc1wmIzM0OykpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jLTMyNDMtXHRFWFBFQ1RfRVEocmV0LCAtMSk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jPTMzMjY9VEVTVCh0bHNfdjZvcHMpIHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmMtMzM1Ni1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYzozMzU3Olx0cmV0ID0gc2V0c29ja29wdChmZCwgSVBQUk9UT19UQ1AsIFRDUF9VTFAsIFwmIzM0O3Rsc1wmIzM0Oywgc2l6ZW9mKFwmIzM0O3Rsc1wmIzM0OykpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jLTMzNTgtXHRpZiAocmV0KSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jPTMzODE9VEVTVChwcmVxdWV1ZSkge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYy0zNDA2LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jOjM0MDc6XHRyZXQgPSBzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX1RDUCwgVENQX1VMUCwgXCYjMzQ7dGxzXCYjMzQ7LCBzaXplb2YoXCYjMzQ7dGxzXCYjMzQ7KSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmMtMzQwOC1cdGlmIChyZXQpIHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmMtMzQxNS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYzozNDE2Olx0QVNTRVJUX0VRKHNldHNvY2tvcHQoY2ZkLCBJUFBST1RPX1RDUCwgVENQX1VMUCwgXCYjMzQ7dGxzXCYjMzQ7LCBzaXplb2YoXCYjMzQ7dGxzXCYjMzQ7KSksIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jLTM0MTctXHRBU1NFUlRfRVEoc2V0c29ja29wdChjZmQsIFNPTF9UTFMsIFRMU19SWCwgXHUwMDI2dGxzMTIsIHRsczEyLmxlbiksIDApO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYz0zNDI2PVRFU1QoZGF0YV9zdGVhbCkge1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYy0zNDUyLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jOjM0NTM6XHRyZXQgPSBzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX1RDUCwgVENQX1VMUCwgXCYjMzQ7dGxzXCYjMzQ7LCBzaXplb2YoXCYjMzQ7dGxzXCYjMzQ7KSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmMtMzQ1NC1cdGlmIChyZXQpIHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmMtMzQ1Ny1cdH1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYzozNDU4Olx0QVNTRVJUX0VRKHNldHNvY2tvcHQoY2ZkLCBJUFBST1RPX1RDUCwgVENQX1VMUCwgXCYjMzQ7dGxzXCYjMzQ7LCBzaXplb2YoXCYjMzQ7dGxzXCYjMzQ7KSksIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jLTM0NTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NjY5CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIFRMUyBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSBob3cgVExTIGlzIGN1cnJlbnRseSBoYW5kbGVkIGluIHRoZSBjb25maWd1cmF0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIGNoZWNrIG9mIGBDT05GSUdfVExTYCB3aXRoaW4gdGhlIEtjb25maWcgZmlsZXMuIFRoaXMgaXMgbXkgZ28tdG8gc3RhcnRpbmcgcG9pbnQgd2hlbiBpbnZlc3RpZ2F0aW5nIFRMUyBmdW5jdGlvbmFsaXR5LiBJdCB3aWxsIGdpdmUgbWUgYSBiYXNlIHRvIHNlZSBpZiBpdCYjMzk7cyBldmVuIGVuYWJsZWQgdG8gYmVnaW4gd2l0aC4gRnJvbSB0aGVyZSwgSSBjYW4gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gVExTIHRoYXQgYXJlIHByZXNlbnQsIGFuZCBxdWlja2x5IG1vdmUgdG8gdW5kZXJzdGFuZGluZyB3aGF0IGRlcGVuZGVuY2llcywgaWYgYW55LCBhcmUgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUTFNcXGImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Rscy9LY29uZmlnLTQtI1xubmV0L3Rscy9LY29uZmlnOjU6Y29uZmlnIFRMU1xubmV0L3Rscy9LY29uZmlnLTYtXHR0cmlzdGF0ZSBcJiMzNDtUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzg4NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipFeGFtaW5pbmcgdGhlIFRMUyBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7TGV0JiMzOTtzIGNoZWNrIGBuZXQvdGxzL0tjb25maWdgLiYjMzQ7IEdpdmVuIG15IGV4cGVydGlzZSwgSSBrbm93IHRoaXMgaXMgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCB3aGVuIGV4YW1pbmluZyBhbnkgVExTLXJlbGF0ZWQgY29uZmlndXJhdGlvbiB3aXRoaW4gdGhpcyBwcm9qZWN0LiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZSwgd2hhdCBkZWZhdWx0cyBhcmUgc2V0LCBhbmQgaG93IGRpZmZlcmVudCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZC4gVGhpcyBgS2NvbmZpZ2AgZmlsZSBpcyB0aGUgY2VudHJhbCBzb3VyY2Ugb2YgdHJ1dGggZm9yIHRoZSBUTFMgYnVpbGQgY29uZmlndXJhdGlvbiwgYW5kIGl0JiMzOTtsbCBnaXZlIG1lIHRoZSBsYXkgb2YgdGhlIGxhbmQgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgZGV0YWlscyBvbiB0aGluZ3MgbGlrZSBzdXBwb3J0ZWQgY2lwaGVyc3VpdGVzLCBrZXkgZXhjaGFuZ2UgYWxnb3JpdGhtcywgYW5kIGFueSBoYXJkd2FyZSBhY2NlbGVyYXRpb24gb3B0aW9ucy4gSG9wZWZ1bGx5LCB0aGUgZmlsZSBpcyB3ZWxsLWRvY3VtZW50ZWQsIGFsbG93aW5nIGZvciBhIHN3aWZ0IHJldmlldy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdGxzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBUTFMgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRjb25maWcgVExTXG4gICA2Olx0XHR0cmlzdGF0ZSBcJiMzNDtUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgc3VwcG9ydFwmIzM0O1xuICAgNzpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA4Olx0XHRzZWxlY3QgQ1JZUFRPXG4gICA5Olx0XHRzZWxlY3QgQ1JZUFRPX0FFU1xuICAxMDpcdFx0c2VsZWN0IENSWVBUT19HQ01cbiAgMTE6XHRcdHNlbGVjdCBORVRfU09DS19NU0dcbiAgMTI6XHRcdGRlZmF1bHQgblxuICAxMzpcdFx0aGVscFxuICAxNDpcdFx0RW5hYmxlIGtlcm5lbCBzdXBwb3J0IGZvciBUTFMgcHJvdG9jb2wuIFRoaXMgYWxsb3dzIHN5bW1ldHJpY1xuICAxNTpcdFx0ZW5jcnlwdGlvbiBoYW5kbGluZyBvZiB0aGUgVExTIHByb3RvY29sIHRvIGJlIGRvbmUgaW4ta2VybmVsLlxuICAxNjpcdFxuICAxNzpcdFx0SWYgdW5zdXJlLCBzYXkgTi5cbiAgMTg6XHRcbiAgMTk6XHRjb25maWcgVExTX0RFVklDRVxuICAyMDpcdFx0Ym9vbCBcJiMzNDtUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgSFcgb2ZmbG9hZFwmIzM0O1xuICAyMTpcdFx0ZGVwZW5kcyBvbiBUTFNcbiAgMjI6XHRcdHNlbGVjdCBTS0JfREVDUllQVEVEXG4gIDIzOlx0XHRzZWxlY3QgU09DS19WQUxJREFURV9YTUlUXG4gIDI0Olx0XHRzZWxlY3QgU09DS19SWF9RVUVVRV9NQVBQSU5HXG4gIDI1Olx0XHRkZWZhdWx0IG5cbiAgMjY6XHRcdGhlbHBcbiAgMjc6XHRcdEVuYWJsZSBrZXJuZWwgc3VwcG9ydCBmb3IgSFcgb2ZmbG9hZCBvZiB0aGUgVExTIHByb3RvY29sLlxuICAyODpcdFxuICAyOTpcdFx0SWYgdW5zdXJlLCBzYXkgTi5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg0MzIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipDaGVja2luZyBgQ09ORklHX05FVERFVlNJTWAgaW4gS2NvbmZpZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSByaWdodCBpbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYENPTkZJR19ORVRERVZTSU1gIHdpdGhpbiB0aGUgS2NvbmZpZyBjb25maWd1cmF0aW9uIGZpbGVzLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIGl0cyBjdXJyZW50IHN0YXRlIGFuZCBhc3NvY2lhdGVkIGRlcGVuZGVuY2llcy4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHRoaXMgbWFjcm8gaXMgbGlrZWx5IGEgY3JpdGljYWwgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCBlbmFibGVzIG9yIGRpc2FibGVzIHNvbWUgbmV0d29yayBkZXZpY2Ugc2ltdWxhdGlvbiBmdW5jdGlvbmFsaXR5LiBEZXBlbmRpbmcgb24gaXRzIHN0YXR1cywgaXQgY291bGQgaW5mbHVlbmNlIGEgd2lkZSByYW5nZSBvZiBvdGhlciBmZWF0dXJlcyBhbmQgbW9kdWxlcyB3aXRoaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGltcGFjdC4gV2hlcmUgaXMgaXQgZGVmaW5lZCwgd2hhdCBvdGhlciBzZXR0aW5ncyBkZXBlbmQgb24gaXQsIGFuZCB3aGF0IGRvZXMgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGl0IGFjdHVhbGx5IGRvIGluIHByYWN0aWNhbCB0ZXJtcz8gVGltZSB0byBkcmlsbCBkb3duIGludG8gdGhlIEtjb25maWcgc3RydWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUREVWU0lNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9NjAyPXNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9oeXBlcnYvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZy02MDMtXG5kcml2ZXJzL25ldC9LY29uZmlnOjYwNDpjb25maWcgTkVUREVWU0lNXG5kcml2ZXJzL25ldC9LY29uZmlnLTYwNS1cdHRyaXN0YXRlIFwmIzM0O1NpbXVsYXRlZCBuZXR3b3JraW5nIGRldmljZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODcxMwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBTb2NrZXQgQXNzb2NpYXRpb24qKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzIHNvY2tldCBhc3NvY2lhdGlvbiBpc3N1ZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBzdGF0dXMgdXNpbmcgYGluZXRfY3NrX2hhc191bHAoc2spYCBhbmQgYHBzcF9za19hc3NvYyhzaylgLiBUaG9zZSBzZWVtIGxpa2UgdGhlIGtleSBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGUgVXNlci1MZXZlbCBQcm90b2NvbCBhbmQgdGhlIFBlcmZvcm1hbmNlLVNlbnNpdGl2ZSBQcm90b2NvbCBhc3NvY2lhdGlvbiwgcmVzcGVjdGl2ZWx5LiBNeSBndXQgdGVsbHMgbWUgdGhlc2UgYXJlIGNlbnRyYWwgdG8gdGhlIGlzc3VlLiBCZWZvcmUgSSBnbyB0b28gZGVlcCwgSSBuZWVkIHRvIGtub3cgd2hlcmUgdGhlc2UgYXJlIGRlZmluZWQuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGUgZGVmaW5pdGlvbnMgYW5kIHdoYXQgdGhlIGFzc29jaWF0ZWQgaGVhZGVycyBhcmUuIFNvLCBhIHF1aWNrIGBncmVwYCBpcyBpbiBvcmRlci4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBpbmNsdWRlcyBhcmUsIGFuZCB3aGljaCBmaWxlcyBjb250YWluIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb25zLiBUaGlzIHdpbGwgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGNvbnRleHQuIEZyb20gdGhlcmUsIEkgY2FuIGJlZ2luIHRvIHJlYXNvbiBhYm91dCBob3cgdGhlc2UgZnVuY3Rpb25zIHJlbGF0ZSB0byB0aGUgY3VycmVudCBwcm9ibGVtLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBzdG9wLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbmV0X2Nza19oYXNfdWxwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmg9MzM4PXN0YXRpYyBpbmxpbmUgdm9pZCBpbmV0X2Nza19pbmNfcGluZ3BvbmdfY250KHN0cnVjdCBzb2NrICpzaylcbi0tXG5pbmNsdWRlL25ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oLTM0NS1cbmluY2x1ZGUvbmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmg6MzQ2OnN0YXRpYyBpbmxpbmUgYm9vbCBpbmV0X2Nza19oYXNfdWxwKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbmluY2x1ZGUvbmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmgtMzQ3LXtcbi0tXG5uZXQvY29yZS9za21zZy5jPTc1MD1zdHJ1Y3Qgc2tfcHNvY2sgKnNrX3Bzb2NrX2luaXQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbm9kZSlcbi0tXG5uZXQvY29yZS9za21zZy5jLTc1Ni1cbm5ldC9jb3JlL3NrbXNnLmM6NzU3Olx0aWYgKHNrX2lzX2luZXQoc2spIFx1MDAyNlx1MDAyNiBpbmV0X2Nza19oYXNfdWxwKHNrKSkge1xubmV0L2NvcmUvc2ttc2cuYy03NTgtXHRcdHBzb2NrID0gRVJSX1BUUigtRUlOVkFMKTtcbi0tXG5uZXQvY29yZS9zb2NrLmM9MjY3ND1ib29sIHNrX2hhc19kZWNyeXB0X3VzZXIoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9jb3JlL3NvY2suYy0yNjc2LVx0cmV0dXJuIHBzcF9za19hc3NvYyhzaykgfHxcbm5ldC9jb3JlL3NvY2suYzoyNjc3Olx0ICAgICAgIChza19pc19pbmV0KHNrKSBcdTAwMjZcdTAwMjYgaW5ldF9jc2tfaGFzX3VscChzaykpOyAvKiBmb3IgdGxzICovXG5uZXQvY29yZS9zb2NrLmMtMjY3OC19XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTcyNT1pbnQgdGNwX2JwZl91cGRhdGVfcHJvdG8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBib29sIHJlc3RvcmUpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTczNC1cdGlmIChyZXN0b3JlKSB7XG5uZXQvaXB2NC90Y3BfYnBmLmM6NzM1Olx0XHRpZiAoaW5ldF9jc2tfaGFzX3VscChzaykpIHtcbm5ldC9pcHY0L3RjcF9icGYuYy03MzYtXHRcdFx0LyogVExTIGRvZXMgbm90IGhhdmUgYW4gdW5oYXNoIHByb3RvIGluIFNXIGNhc2VzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTQ1NQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNoZWNraW5nIHRoZSBgcHNwX3NrX2Fzc29jYCBEYXRhKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIGZpcnN0IHRoaW5nIHRoYXQgY29tZXMgdG8gbWluZCBpcyB0byB0YWtlIGEgbG9vayBhdCBgcHNwX3NrX2Fzc29jYC4gSSBuZWVkIHRvIGFzc2VzcyB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoIHRoYXQgcGFydGljdWxhciBkYXRhIHN0cnVjdHVyZS4gVGhpcyBjb3VsZCBiZSBhbnl0aGluZyBmcm9tIGNoZWNraW5nIGl0cyBjdXJyZW50IHN0YXRlIGZvciB1bmV4cGVjdGVkIHZhbHVlcywgY29uZmlybWluZyBpdHMgZXhwZWN0ZWQgYmVoYXZpb3IgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLCBvciBtYXliZSBldmVuIGp1c3QgcmVmcmVzaGluZyBteSBtZW1vcnkgb24gaXRzIGV4YWN0IGRlZmluaXRpb24gYW5kIHJvbGUgd2l0aGluIHRoZSB3aWRlciBzeXN0ZW0uIFVuZGVyc3RhbmRpbmcgaXRzIHN0YXR1cyBpcyBlc3NlbnRpYWwgYmVmb3JlIHByb2NlZWRpbmcgYW55IGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BzcF9za19hc3NvYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9MzM9dW5zaWduZWQgaW50IHBzcF9rZXlfc2l6ZSh1MzIgdmVyc2lvbik7XG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MzQ6dm9pZCBwc3Bfc2tfYXNzb2NfZnJlZShzdHJ1Y3Qgc29jayAqc2spO1xuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTM1LXZvaWQgcHNwX3R3c2tfaW5pdChzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dywgY29uc3Qgc3RydWN0IHNvY2sgKnNrKTtcbi0tXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9Mzc9dm9pZCBwc3BfcmVwbHlfc2V0X2RlY3J5cHRlZChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTM4LVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjM5OnN0YXRpYyBpbmxpbmUgc3RydWN0IHBzcF9hc3NvYyAqcHNwX3NrX2Fzc29jKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC00MC17XG4tLVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTQ1PXBzcF9lbnF1ZXVlX3NldF9kZWNyeXB0ZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC00OC1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDo0OTpcdHBhcyA9IHBzcF9za19hc3NvYyhzayk7XG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtNTAtXHRpZiAocGFzIFx1MDAyNlx1MDAyNiBwYXMtXHUwMDNldHguc3BpKVxuLS1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD0xMTY9cHNwX3NrX3J4X3BvbGljeV9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTE3LXtcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDoxMTg6XHRyZXR1cm4gX19wc3Bfc2tfcnhfcG9saWN5X2NoZWNrKHNrYiwgcHNwX3NrX2Fzc29jKHNrKSk7XG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTE5LX1cbi0tXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9MTUwPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHBzcF9za19vdmVyaGVhZChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTE1Ny0jZWxzZVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjE1ODpzdGF0aWMgaW5saW5lIHZvaWQgcHNwX3NrX2Fzc29jX2ZyZWUoc3RydWN0IHNvY2sgKnNrKSB7IH1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xNTktc3RhdGljIGlubGluZSB2b2lkXG4tLVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTE2Mz1wc3BfcmVwbHlfc2V0X2RlY3J5cHRlZChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpIHsgfVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTE2NC1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDoxNjU6c3RhdGljIGlubGluZSBzdHJ1Y3QgcHNwX2Fzc29jICpwc3Bfc2tfYXNzb2MoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTE2Ni17XG4tLVxubmV0L2NvcmUvc29jay5jPTI2NzQ9Ym9vbCBza19oYXNfZGVjcnlwdF91c2VyKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbm5ldC9jb3JlL3NvY2suYy0yNjc1LXtcbm5ldC9jb3JlL3NvY2suYzoyNjc2Olx0cmV0dXJuIHBzcF9za19hc3NvYyhzaykgfHxcbm5ldC9jb3JlL3NvY2suYy0yNjc3LVx0ICAgICAgIChza19pc19pbmV0KHNrKSBcdTAwMjZcdTAwMjYgaW5ldF9jc2tfaGFzX3VscChzaykpOyAvKiBmb3IgdGxzICovXG4tLVxubmV0L2lwdjQvYWZfaW5ldC5jPTE0MD12b2lkIGluZXRfc29ja19kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvYWZfaW5ldC5jLTE2Ni1cdGRzdF9yZWxlYXNlKHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoc2stXHUwMDNlc2tfcnhfZHN0LCAxKSk7XG5uZXQvaXB2NC9hZl9pbmV0LmM6MTY3Olx0cHNwX3NrX2Fzc29jX2ZyZWUoc2spO1xubmV0L2lwdjQvYWZfaW5ldC5jLTE2OC19XG4tLVxubmV0L3BzcC9wc3Bfc29jay5jPTExOD12b2lkIHBzcF9hc3NvY19wdXQoc3RydWN0IHBzcF9hc3NvYyAqcGFzKVxuLS1cbm5ldC9wc3AvcHNwX3NvY2suYy0xMjMtXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTI0OnZvaWQgcHNwX3NrX2Fzc29jX2ZyZWUoc3RydWN0IHNvY2sgKnNrKVxubmV0L3BzcC9wc3Bfc29jay5jLTEyNS17XG4tLVxubmV0L3BzcC9wc3Bfc29jay5jPTEzMj1pbnQgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9hc3NvYyAqcGFzLFxuLS1cbm5ldC9wc3AvcHNwX3NvY2suYy0xNDEtXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTQyOlx0aWYgKHBzcF9za19hc3NvYyhzaykpIHtcbm5ldC9wc3AvcHNwX3NvY2suYy0xNDMtXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7U29ja2V0IGFscmVhZHkgaGFzIFBTUCBzdGF0ZVwmIzM0Oyk7XG4tLVxubmV0L3BzcC9wc3Bfc29jay5jPTE4MT1pbnQgcHNwX3NvY2tfYXNzb2Nfc2V0X3R4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9kZXYgKnBzZCxcbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTkwLVxubmV0L3BzcC9wc3Bfc29jay5jOjE5MTpcdHBhcyA9IHBzcF9za19hc3NvYyhzayk7XG5uZXQvcHNwL3BzcF9zb2NrLmMtMTkyLVx0aWYgKCFwYXMpIHtcbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmM9MjcwPXZvaWQgcHNwX3R3c2tfaW5pdChzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dywgY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxubmV0L3BzcC9wc3Bfc29jay5jLTI3MS17XG5uZXQvcHNwL3BzcF9zb2NrLmM6MjcyOlx0c3RydWN0IHBzcF9hc3NvYyAqcGFzID0gcHNwX3NrX2Fzc29jKHNrKTtcbm5ldC9wc3AvcHNwX3NvY2suYy0yNzMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwOTA2CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTeW1ib2wgTW9kaWZpY2F0aW9ucyBhbmQgQ2FsbGVyIFJlbGF0aW9uc2hpcHMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgaW5pdGlhbCB0YXNrIGlzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbXBhY3Qgb2YgdGhlc2Ugc3ltYm9scy4gRmlyc3QsIEkgbmVlZCB0byBpZGVudGlmeSB3aGljaCBzeW1ib2xzIGFyZSBiZWluZyBtb2RpZmllZCBvciBuZXdseSBpbnRyb2R1Y2VkLiBJJiMzOTt2ZSBub3RlZCBhIGZldyBrZXkgaXRlbXMgcmlnaHQgb2ZmIHRoZSBiYXQ6CgoxLiAgYHNrX2hhc19kZWNyeXB0X3VzZXJgIGluIGBuZXQvY29yZS9zb2NrLmNgLCB3aGljaCBpcyBhIG5vbi1zdGF0aWMgZnVuY3Rpb24uIFRoYXQmIzM5O3MgYSBwb2ludCB0byByZW1lbWJlciBmb3IgcG90ZW50aWFsIGV4dGVybmFsIGludGVyYWN0aW9ucy4KMi4gIGBfX3RjcF9zZXRfdWxwYCBpbiBgbmV0L2lwdjQvdGNwX3VscC5jYCB3aGljaCBpcyBzdGF0aWMgYW5kIGNhbGxlZCBieSBgdGNwX3NldF91bHBgLiBUaGUgZm9jdXMgaGVyZSBzaG91bGQgYmUgb24gYHRjcF9zZXRfdWxwYCBvciBgX190Y3Bfc2V0X3VscGAgcG90ZW50aWFsbHkgYm90aC4KMy4gIGBwc3Bfc29ja19hc3NvY19zZXRfcnhgIGluIGBuZXQvcHNwL3BzcF9zb2NrLmNgLCBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gY2FsbGVkIGJ5IGBwc3BfbmxfcnhfYXNzb2NfZG9pdGAuCjQuICBgc2tfaGFzX3ZhbGlkYXRlX3htaXRfc2tiYCBpbiBgaW5jbHVkZS9uZXQvc29jay5oYCwgYSBzdGF0aWMgaW5saW5lIGhlbHBlci4gSXRzIGNhbGxlcnMgYXJlIGBfX3RjcF9zZXRfdWxwYCBhbmQgYHBzcF9zb2NrX2Fzc29jX3NldF9yeGAuIFRoaXMgaXMgaW1wb3J0YW50LCBhcyBzdGF0aWMgaW5saW5lcyBjYW4gaW50cm9kdWNlIGNvbXBsZXhpdGllcyBpbiB0cmFjaW5nLgoKTm93IEkgbmVlZCB0byBjbGFyaWZ5IHRoZSB2aXNpYmlsaXR5IG9mIGB0Y3Bfc2V0X3VscGAuIEkgc2VlIHRoYXQgYHRjcF9zZXRfdWxwYCBpdHNlbGYgaXMgbm9uLXN0YXRpYyBpbiBgbmV0L2lwdjQvdGNwX3VscC5jYC4gVGhpcyBtZWFucyBpdCAqY291bGQqIGJlIGV4dGVybmFsbHkgdmlzaWJsZSwgc28gSSBuZWVkIHRvIGNoZWNrIGZvciBleHRlcm5hbCBjYWxscy4KClRvIGVuc3VyZSBJIGhhdmUgYSBjb21wbGV0ZSBwaWN0dXJlLCBJIHdpbGwgcmV2aWV3IGFsbCBmdW5jdGlvbnMgaW4gYG5ldC9pcHY0L3RjcF91bHAuY2AsIGBuZXQvcHNwL3BzcF9zb2NrLmNgLCBhbmQgYG5ldC9jb3JlL3NvY2suY2A6CgoqICAgYHNrX2hhc19kZWNyeXB0X3VzZXJgCiogICBgdGNwX3NldF91bHBgCiogICBgX190Y3Bfc2V0X3VscGAKKiAgIGBwc3Bfc29ja19hc3NvY19zZXRfcnhgCiogICBgcHNwX25sX3J4X2Fzc29jX2RvaXRgCgpGaW5hbGx5LCBJIG5lZWQgdG8gdGhvcm91Z2hseSBleGFtaW5lIHRoZSBjYWxsZXJzIG9mIGB0Y3Bfc2V0X3VscGAuIFRoaXMgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBkYXRhIGZsb3cgYW5kIHBvdGVudGlhbCBpbXBhY3Qgb2YgYW55IGNoYW5nZXMgdG8gdGhpcyBmdW5jdGlvbi4gVGhpcyBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIG15IGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3Bfc2V0X3VscCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC90Y3AuaD0yODI5PXZvaWQgdGNwX3VucmVnaXN0ZXJfdWxwKHN0cnVjdCB0Y3BfdWxwX29wcyAqdHlwZSk7XG5pbmNsdWRlL25ldC90Y3AuaDoyODMwOmludCB0Y3Bfc2V0X3VscChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IGNoYXIgKm5hbWUpO1xuaW5jbHVkZS9uZXQvdGNwLmgtMjgzMS12b2lkIHRjcF9nZXRfYXZhaWxhYmxlX3VscChjaGFyICpidWYsIHNpemVfdCBsZW4pO1xuLS1cbm5ldC9pcHY0L3RjcC5jPTM4MzY9aW50IGRvX3RjcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvaXB2NC90Y3AuYy0zODc5LVx0XHRzb2Nrb3B0X2xvY2tfc29jayhzayk7XG5uZXQvaXB2NC90Y3AuYzozODgwOlx0XHRlcnIgPSB0Y3Bfc2V0X3VscChzaywgbmFtZSk7XG5uZXQvaXB2NC90Y3AuYy0zODgxLVx0XHRzb2Nrb3B0X3JlbGVhc2Vfc29jayhzayk7XG4tLVxubmV0L2lwdjQvdGNwX3VscC5jPTExMj12b2lkIHRjcF9jbGVhbnVwX3VscChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvdGNwX3VscC5jLTEyOS1cbm5ldC9pcHY0L3RjcF91bHAuYzoxMzA6c3RhdGljIGludCBfX3RjcF9zZXRfdWxwKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHRjcF91bHBfb3BzICp1bHBfb3BzKVxubmV0L2lwdjQvdGNwX3VscC5jLTEzMS17XG4tLVxubmV0L2lwdjQvdGNwX3VscC5jLTE2MC1cbm5ldC9pcHY0L3RjcF91bHAuYzoxNjE6aW50IHRjcF9zZXRfdWxwKHN0cnVjdCBzb2NrICpzaywgY29uc3QgY2hhciAqbmFtZSlcbm5ldC9pcHY0L3RjcF91bHAuYy0xNjIte1xuLS1cbm5ldC9pcHY0L3RjcF91bHAuYy0xNzAtXG5uZXQvaXB2NC90Y3BfdWxwLmM6MTcxOlx0cmV0dXJuIF9fdGNwX3NldF91bHAoc2ssIHVscF9vcHMpO1xubmV0L2lwdjQvdGNwX3VscC5jLTE3Mi19XG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0xNzgxPWludCBtcHRjcF9zdWJmbG93X2NyZWF0ZV9zb2NrZXQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHksXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0xODEyLVx0c2tfbmV0X3JlZmNudF91cGdyYWRlKHNmLVx1MDAzZXNrKTtcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTgxMzpcdGVyciA9IHRjcF9zZXRfdWxwKHNmLVx1MDAzZXNrLCBcJiMzNDttcHRjcFwmIzM0Oyk7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE4MTQtXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjM3NwoJCQkJCQkJb3V0cHV0OiAyMjMKCQkJCQkJCXRob3VnaHRzOiA3MzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIGFuZCBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlc2UgY29uZmlndXJhdGlvbnMuIEkgc2VlIHRoYXQgYElORVRfUFNQYCByZWxpZXMgb24gYElORVRgIGFuZCBzZWxlY3RzIGBTS0JfREVDUllQVEVEYCwgYFNLQl9FWFRFTlNJT05TYCwgYW5kIGBTT0NLX1ZBTElEQVRFX1hNSVRgLiBgVExTYCBhbHNvIGRlcGVuZHMgb24gYElORVRgLCBhbmQgYFRMU19ERVZJQ0VgIGRlcGVuZHMgb24gYFRMU2AsIHNoYXJpbmcgc29tZSBvZiB0aGUgc2FtZSBzZWxlY3RlZCBzeW1ib2xzIGFzIGBJTkVUX1BTUGAuIEkgYWxzbyBzZWUgdGhhdCBgTkVUREVWU0lNYCBpcyB0aGVyZSB0byBjcmVhdGUgc2ltdWxhdGVkIG5ldGRldnMgd2l0aCBQU1Agc3VwcG9ydC4KClNvLCB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBmb2N1cyBvbiBhcmUgYElORVRfUFNQYCwgYFRMU2AsIGBUTFNfREVWSUNFYCwgYW5kIGBORVRERVZTSU1gLiBOb3csIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYENPTkZJR19JTkVUX1BTUGAgYWN0dWFsbHkgZW5hYmxlcyB0aGUgbmVjZXNzYXJ5IGNvZGUg4oCTIEkmIzM5O2xsIGNoZWNrIHRoYXQgYG5ldC9wc3AvcHNwX3NvY2suY2AgYW5kIGBwc3Bfc29ja19hc3NvY19zZXRfcnhgIGFyZSBpbmRlZWQgaW5jbHVkZWQuIExvb2tpbmcgYXQgdGhlIE1ha2VmaWxlcyBjb25maXJtcyB0aGlzIGRlcGVuZGVuY3kuCgpOZXh0LCB0aGUgY3JpdGljYWwgc3ltYm9scy4gSSBoYXZlIHRvIGxvb2sgYXQgYHNrX2hhc19kZWNyeXB0X3VzZXJgLCBgdGNwX3NldF91bHBgLCBgX190Y3Bfc2V0X3VscGAsIGBwc3Bfc29ja19hc3NvY19zZXRfcnhgLCBhbmQgYHBzcF9ubF9yeF9hc3NvY19kb2l0YC4gQXJlIGFueSBvZiB0aGVzZSB3aWRlbHkgdXNlZD8gTm8sIHRoYW5rZnVsbHkuIGBza19oYXNfZGVjcnlwdF91c2VyYCBpcyBhIHJlY2VudCBhZGRpdGlvbiBhbmQgb25seSBjYWxsZWQgYnkgYSBmZXcgb3RoZXIgZnVuY3Rpb25zLCBhbmQgdGhlIG90aGVycyBhcmUgc3BlY2lmaWMgdG8gVENQIFVMUCBzZXR1cCBhbmQgUFNQIG5ldGxpbmsgaW50ZXJhY3Rpb25zLiBUaGF0JiMzOTtzIGdvb2Q7IGl0IG5hcnJvd3MgdGhlIHNjb3BlLgoKR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlcywgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIG11dHVhbCBleGNsdXNpdml0eSBjaGVja3MgYmV0d2VlbiBQU1Agc29ja2V0IGFzc29jaWF0aW9ucywgVENQIFVMUCAobGlrZSBrVExTKSwgYW5kIHNvY2tldHMgd2l0aCBwYWNrZXQgdHJhbnNtaXNzaW9uIHZhbGlkYXRpb24uIEl0IGFkZHMgY2hlY2tzIGZvciBgc2tfaGFzX2RlY3J5cHRfdXNlcigpYCBhbmQgYHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYigpYCBpbiBrZXkgZnVuY3Rpb25zIHRvIHByZXZlbnQgY29uZmxpY3RzLiBUaGVzZSBtb2RpZmljYXRpb25zIHRvdWNoIGNydWNpYWwgc29ja2V0IGNvbmZpZ3VyYXRpb24gcGF0aHMsIGFjY2Vzc2libGUgdmlhIFRDUCBvcHRpb25zIGFuZCBuZXRsaW5rIGNvbW1hbmRzLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBzY2VuYXJpbyBmb3IgZnV6emluZy4KCkFscmlnaHQsIGRvdWJsZS1jaGVja2luZyBteSBub3RlczoKCiogICAqKldvcnRoRnV6emluZzoqKiBUcnVlCiogICAqKkZvY3VzU3ltYm9sczoqKiBcWyYjMzQ7c2tcX2hhc1xfZGVjcnlwdFxfdXNlciYjMzQ7LCAmIzM0O3RjcFxfc2V0XF91bHAmIzM0OywgJiMzNDtcX1xfdGNwXF9zZXRcX3VscCYjMzQ7LCAmIzM0O3BzcFxfc29ja1xfYXNzb2NcX3NldFxfcngmIzM0OywgJiMzNDtwc3BcX25sXF9yeFxfYXNzb2NcX2RvaXQmIzM0O10KKiAgICoqRW5hYmxlQ29uZmlnczoqKiBcWyYjMzQ7SU5FVFxfUFNQJiMzNDssICYjMzQ7VExTJiMzNDssICYjMzQ7VExTXF9ERVZJQ0UmIzM0OywgJiMzNDtORVRERVZTSU0mIzM0O10KKiAgICoqUmVhc29uaW5nOioqIENvbmNpc2UgYW5kIGFjY3VyYXRlLgoKRXZlcnl0aGluZyBjaGVja3Mgb3V0LiBJJiMzOTttIHJlYWR5IHRvIHByb2NlZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUX1BTUCYjMzQ7LAogICAgJiMzNDtUTFMmIzM0OywKICAgICYjMzQ7VExTX0RFVklDRSYjMzQ7LAogICAgJiMzNDtORVRERVZTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtza19oYXNfZGVjcnlwdF91c2VyJiMzNDssCiAgICAmIzM0O3RjcF9zZXRfdWxwJiMzNDssCiAgICAmIzM0O19fdGNwX3NldF91bHAmIzM0OywKICAgICYjMzQ7cHNwX3NvY2tfYXNzb2Nfc2V0X3J4JiMzNDssCiAgICAmIzM0O3BzcF9ubF9yeF9hc3NvY19kb2l0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc29ja2V0IHN0YXRlIGV4Y2x1c2l2aXR5IGNoZWNrcyBiZXR3ZWVuIFBTUCAoUFNQIFNlY3VyaXR5IFByb3RvY29sKSBzb2NrZXQgYXNzb2NpYXRpb25zLCBUQ1AgVUxQIChlLmcuLCBrVExTKSwgYW5kIHNvY2tldHMgd2l0aCB0cmFuc21pdCB2YWxpZGF0aW9uIGhhbmRsZXJzIChza192YWxpZGF0ZV94bWl0X3NrYikuIEl0IGFkZHMgc2tfaGFzX2RlY3J5cHRfdXNlcigpIGFuZCBza19oYXNfdmFsaWRhdGVfeG1pdF9za2IoKSB2YWxpZGF0aW9ucyBpbiBfX3RjcF9zZXRfdWxwKCkgYW5kIHBzcF9zb2NrX2Fzc29jX3NldF9yeCgpIHRvIHByZXZlbnQgY29uZmxpY3Rpbmcgc29ja2V0IG9mZmxvYWQgc3RhdGVzLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIFRDUCBzZXRzb2Nrb3B0KFRDUF9VTFApIGFuZCBQU1AgTmV0bGluayBjb21tYW5kcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVF9QU1AmIzM0OywKICAgICYjMzQ7VExTJiMzNDssCiAgICAmIzM0O1RMU19ERVZJQ0UmIzM0OywKICAgICYjMzQ7TkVUREVWU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2tfaGFzX2RlY3J5cHRfdXNlciYjMzQ7LAogICAgJiMzNDt0Y3Bfc2V0X3VscCYjMzQ7LAogICAgJiMzNDtfX3RjcF9zZXRfdWxwJiMzNDssCiAgICAmIzM0O3BzcF9zb2NrX2Fzc29jX3NldF9yeCYjMzQ7LAogICAgJiMzNDtwc3BfbmxfcnhfYXNzb2NfZG9pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHNvY2tldCBzdGF0ZSBleGNsdXNpdml0eSBjaGVja3MgYmV0d2VlbiBQU1AgKFBTUCBTZWN1cml0eSBQcm90b2NvbCkgc29ja2V0IGFzc29jaWF0aW9ucywgVENQIFVMUCAoZS5nLiwga1RMUyksIGFuZCBzb2NrZXRzIHdpdGggdHJhbnNtaXQgdmFsaWRhdGlvbiBoYW5kbGVycyAoc2tfdmFsaWRhdGVfeG1pdF9za2IpLiBJdCBhZGRzIHNrX2hhc19kZWNyeXB0X3VzZXIoKSBhbmQgc2tfaGFzX3ZhbGlkYXRlX3htaXRfc2tiKCkgdmFsaWRhdGlvbnMgaW4gX190Y3Bfc2V0X3VscCgpIGFuZCBwc3Bfc29ja19hc3NvY19zZXRfcngoKSB0byBwcmV2ZW50IGNvbmZsaWN0aW5nIHNvY2tldCBvZmZsb2FkIHN0YXRlcy4gVGhlc2UgY29kZSBwYXRocyBhcmUgcmVhY2hhYmxlIHZpYSBUQ1Agc2V0c29ja29wdChUQ1BfVUxQKSBhbmQgUFNQIE5ldGxpbmsgY29tbWFuZHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjQ0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDA6NDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG11dHVhbCBleGNsdXNpdml0eSBjaGVja3MgKHNrX2hhc19kZWNyeXB0X3VzZXIgYW5kIHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYikgdG8gcHJldmVudCBpbmNvbXBhdGlibGUgc29ja2V0IHN0YXRlcyB3aGVuIGNvbmZpZ3VyaW5nIFRDUCBVTFAgKGUuZy4ga1RMUykgYW5kIFBTUCAoUFNQIHNlY3VyaXR5IHByb3RvY29sKSBvbiB0aGUgc2FtZSBzb2NrZXQuIFxuXG5JdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBjb3BpZXMgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWNjZXNzIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIHNhbml0aXplcnMgbGlrZSBLQVNBTiBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgbWVtb3J5IHNhZmV0eSBvciBzdGF0ZSBtYW5hZ2VtZW50IGlzc3Vlcy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgM2I0ZjIyZTFkMmUyZmI4MjNkODJiYjY0YTFlMTk0MzQ4NDc1MTJjMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDAwOjQyOjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc29jay5oIGIvaW5jbHVkZS9uZXQvc29jay5oCmluZGV4IDUxMTg1MjIyYWFjMjkuLmJhNWU1MDkyZjE5MmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NvY2suaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9zb2NrLmgKQEAgLTIzMTIsNiAmIzQzOzIzMTIsMTcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNrX2dzb19kaXNhYmxlKHN0cnVjdCBzb2NrICpzaykKIAlzay0mZ3Q7c2tfcm91dGVfY2FwcyAmYW1wOz0gfk5FVElGX0ZfR1NPX01BU0s7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgc2tfaGFzX3ZhbGlkYXRlX3htaXRfc2tiKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7I2lmZGVmIENPTkZJR19TT0NLX1ZBTElEQVRFX1hNSVQKJiM0MzsJcmV0dXJuICEhc2stJmd0O3NrX3ZhbGlkYXRlX3htaXRfc2tiOwomIzQzOyNlbHNlCiYjNDM7CXJldHVybiBmYWxzZTsKJiM0MzsjZW5kaWYKJiM0Mzt9CiYjNDM7CiYjNDM7Ym9vbCBza19oYXNfZGVjcnlwdF91c2VyKGNvbnN0IHN0cnVjdCBzb2NrICpzayk7CiYjNDM7CiBzdGF0aWMgaW5saW5lIGludCBza2JfZG9fY29weV9kYXRhX25vY2FjaGUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQkgICBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sIGNoYXIgKnRvLAogCQkJCQkgICBpbnQgY29weSwgaW50IG9mZnNldCkKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2suYyBiL25ldC9jb3JlL3NvY2suYwppbmRleCBmYTYwYjc0OTRjNTg2Li45NDg5ZDljNDc5NDkzIDEwMDY0NAotLS0gYS9uZXQvY29yZS9zb2NrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc29jay5jCkBAIC0xNDIsNiAmIzQzOzE0Miw3IEBACiAKICNpbmNsdWRlICZsdDt0cmFjZS9ldmVudHMvc29jay5oJmd0OwogCiYjNDM7I2luY2x1ZGUgJmx0O25ldC9wc3AuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvdGNwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2J1c3lfcG9sbC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9waG9uZXQvcGhvbmV0LmgmZ3Q7CkBAIC0yNjcwLDYgJiM0MzsyNjcxLDEyIEBAIHZvaWQgc2tfc2V0dXBfY2FwcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNrX3NldHVwX2NhcHMpOwogCiYjNDM7Ym9vbCBza19oYXNfZGVjcnlwdF91c2VyKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7CXJldHVybiBwc3Bfc2tfYXNzb2Moc2spIHx8CiYjNDM7CSAgICAgICAoc2tfaXNfaW5ldChzaykgJmFtcDsmYW1wOyBpbmV0X2Nza19oYXNfdWxwKHNrKSk7IC8qIGZvciB0bHMgKi8KJiM0Mzt9CiYjNDM7CiAvKgogICoJU2ltcGxlIHJlc291cmNlIG1hbmFnZXJzIGZvciBzb2NrZXRzLgogICovCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfdWxwLmMgYi9uZXQvaXB2NC90Y3BfdWxwLmMKaW5kZXggMmFhNDQyMTI4NjMwZS4uZjNlMGM5ZDM3OWJiNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX3VscC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF91bHAuYwpAQCAtMTM2LDYgJiM0MzsxMzYsMTAgQEAgc3RhdGljIGludCBfX3RjcF9zZXRfdWxwKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHRjcF91bHBfb3BzICp1bHBfb3BzKQogCWlmIChpY3NrLSZndDtpY3NrX3VscF9vcHMpCiAJCWdvdG8gb3V0X2VycjsKIAomIzQzOwllcnIgPSAtRUlOVkFMOwomIzQzOwlpZiAoc2tfaGFzX2RlY3J5cHRfdXNlcihzaykgfHwgc2tfaGFzX3ZhbGlkYXRlX3htaXRfc2tiKHNrKSkKJiM0MzsJCWdvdG8gb3V0X2VycjsKJiM0MzsKIAlpZiAoc2stJmd0O3NrX3NvY2tldCkKIAkJY2xlYXJfYml0KFNPQ0tfU1VQUE9SVF9aQywgJmFtcDtzay0mZ3Q7c2tfc29ja2V0LSZndDtmbGFncyk7CiAKZGlmZiAtLWdpdCBhL25ldC9wc3AvcHNwX3NvY2suYyBiL25ldC9wc3AvcHNwX3NvY2suYwppbmRleCAxYTJhNmI3NTE2YjBmLi41MDkwMzU2MTc4OTRhIDEwMDY0NAotLS0gYS9uZXQvcHNwL3BzcF9zb2NrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3BzcC9wc3Bfc29jay5jCkBAIC0xNDMsNiAmIzQzOzE0MywxMCBAQCBpbnQgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9hc3NvYyAqcGFzLAogCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7U29ja2V0IGFscmVhZHkgaGFzIFBTUCBzdGF0ZSYjMzQ7KTsKIAkJZXJyID0gLUVCVVNZOwogCQlnb3RvIGV4aXRfdW5sb2NrOwomIzQzOwl9IGVsc2UgaWYgKHNrX2hhc19kZWNyeXB0X3VzZXIoc2spIHx8IHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYihzaykpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDtTb2NrZXQgaGFzIGluY29tcGF0aWJsZSBzdGF0ZSYjMzQ7KTsKJiM0MzsJCWVyciA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIGV4aXRfdW5sb2NrOwogCX0KIAogCXJlZmNvdW50X2luYygmYW1wO3Bhcy0mZ3Q7cmVmY250KTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZwppbmRleCBiNjk4OWM3ZDNkOWQxLi40ODM4YWRmMjdmYTFiIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnCkBAIC0yMSw1ICYjNDM7MjEsNiBAQCBDT05GSUdfTkVUX1NDSF9JTkdSRVNTPXkKIENPTkZJR19ORVRfU0NIX1BSSU89bQogQ09ORklHX1BQUD15CiBDT05GSUdfUFBQT0U9eQomIzQzO0NPTkZJR19UTFM9eQogQ09ORklHX1ZMQU5fODAyMVE9bQogQ09ORklHX1hEUF9TT0NLRVRTPXkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weQppbmRleCAzMTU2NDhhNzcwZDAwLi4xMmIyN2YyYTNmYTFiIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHkKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5CkBAIC0yMyw2ICYjNDM7MjMsOCBAQCBmcm9tIGxpYi5weSBpbXBvcnQgTmV0TlNFbnRlcgogZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgcmFuZF9wb3J0LCB3YWl0X3BvcnRfbGlzdGVuCiBmcm9tIGxpYi5weSBpbXBvcnQgaXAKIAomIzQzO1RDUF9VTFAgPSAzMQomIzQzOwogCiBkZWYgX2dldF9vdXRxKHMpOgogICAgIG9uZSA9IGImIzM5O1wwJiMzOTsgKiA0CkBAIC0zMzMsNiAmIzQzOzMzNSw1MCBAQCBkZWYgYXNzb2NfdmVyc2lvbl9taXNtYXRjaChjZmcpOgogICAgICAgICAgICAga3NmdF9lcSh0aGVfZXhjZXB0aW9uLm5sX21zZy5lcnJvciwgLWVycm5vLkVJTlZBTCkKIAogCiYjNDM7ZGVmIF9yZXF1aXJlX3Rsc191bHAoKToKJiM0MzsgICAgd2l0aCBzb2NrZXQuY3JlYXRlX3NlcnZlcigoJiMzNDtsb2NhbGhvc3QmIzM0OywgMCkpIGFzIHNydjoKJiM0MzsgICAgICAgIHdpdGggc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKHNydi5nZXRzb2NrbmFtZSgpKSBhcyBzOgomIzQzOyAgICAgICAgICAgIHRyeToKJiM0MzsgICAgICAgICAgICAgICAgcy5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfVENQLCBUQ1BfVUxQLCBiJiMzNDt0bHMmIzM0OykKJiM0MzsgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CiYjNDM7ICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoJiMzNDtrVExTIG5vdCBhdmFpbGFibGUmIzM0OykgZnJvbSBleGMKJiM0MzsKJiM0MzsKJiM0MztkZWYgYXNzb2NfcHNwX3VscF9leGNsdXNpdmUoY2ZnKToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7IFRlc3QgdGhhdCBhIFRDUCBVTFAgY2Fubm90IGJlIGF0dGFjaGVkIHRvIGEgUFNQIHNvY2tldCAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgX2luaXRfcHNwX2RldihjZmcpCiYjNDM7ICAgIF9yZXF1aXJlX3Rsc191bHAoKQomIzQzOwomIzQzOyAgICB3aXRoIF9tYWtlX2Nscl9jb25uKGNmZykgYXMgczoKJiM0MzsgICAgICAgIHRyeToKJiM0MzsgICAgICAgICAgICBjZmcucHNwbmwucnhfYXNzb2MoeyYjMzQ7dmVyc2lvbiYjMzQ7OiAwLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiMzNDtkZXYtaWQmIzM0OzogY2ZnLnBzcF9kZXZfaWQsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIzM0O3NvY2stZmQmIzM0Ozogcy5maWxlbm8oKX0pCiYjNDM7ICAgICAgICAgICAgd2l0aCBrc2Z0X3JhaXNlcyhPU0Vycm9yKSBhcyBjbToKJiM0MzsgICAgICAgICAgICAgICAgcy5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfVENQLCBUQ1BfVUxQLCBiJiMzNDt0bHMmIzM0OykKJiM0MzsgICAgICAgICAgICBrc2Z0X2VxKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRUlOVkFMKQomIzQzOyAgICAgICAgZmluYWxseToKJiM0MzsgICAgICAgICAgICBfY2xvc2VfY29ubihjZmcsIHMpCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIGFzc29jX3VscF9wc3BfZXhjbHVzaXZlKGNmZyk6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OyBUZXN0IHRoYXQgYSBQU1AgYXNzb2MgY2Fubm90IGJlIGFkZGVkIHRvIGEgc29ja2V0IHdpdGggYSBUQ1AgVUxQICYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBfaW5pdF9wc3BfZGV2KGNmZykKJiM0MzsgICAgX3JlcXVpcmVfdGxzX3VscCgpCiYjNDM7CiYjNDM7ICAgIHdpdGggX21ha2VfY2xyX2Nvbm4oY2ZnKSBhcyBzOgomIzQzOyAgICAgICAgdHJ5OgomIzQzOyAgICAgICAgICAgIHMuc2V0c29ja29wdChzb2NrZXQuU09MX1RDUCwgVENQX1VMUCwgYiYjMzQ7dGxzJiMzNDspCiYjNDM7ICAgICAgICAgICAgd2l0aCBrc2Z0X3JhaXNlcyhObEVycm9yKSBhcyBjbToKJiM0MzsgICAgICAgICAgICAgICAgY2ZnLnBzcG5sLnJ4X2Fzc29jKHsmIzM0O3ZlcnNpb24mIzM0OzogMCwKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIzM0O2Rldi1pZCYjMzQ7OiBjZmcucHNwX2Rldl9pZCwKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIzM0O3NvY2stZmQmIzM0Ozogcy5maWxlbm8oKX0pCiYjNDM7ICAgICAgICAgICAga3NmdF9lcShjbS5leGNlcHRpb24ubmxfbXNnLmVycm9yLCAtZXJybm8uRUlOVkFMKQomIzQzOyAgICAgICAgICAgIGtzZnRfZXEoY20uZXhjZXB0aW9uLm5sX21zZy5leHRhY2tbJiMzOTtiYWQtYXR0ciYjMzk7XSwgJiMzNDsuc29jay1mZCYjMzQ7KQomIzQzOyAgICAgICAgZmluYWxseToKJiM0MzsgICAgICAgICAgICBfY2xvc2VfY29ubihjZmcsIHMpCiYjNDM7CiYjNDM7CiBkZWYgYXNzb2NfdHdpY2UoY2ZnKToKICAgICAmIzM0OyYjMzQ7JiMzNDsgVGVzdCByZXVzaW5nIFR4IGFzc29jIGZvciB0d28gc29ja2V0cyAmIzM0OyYjMzQ7JiMzNDsKICAgICBfaW5pdF9wc3BfZGV2KGNmZykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NTUKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA1NTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE11dHVhbCBFeGNsdXNpb24gUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgZW5mb3JjaW5nIG11dHVhbCBleGNsdXNpdml0eSBiZXR3ZWVuIFBTUCAodGhlIFBTUCBzZWN1cml0eSBwcm90b2NvbC9zb2NrZXQpIGFuZCBUQ1AgVUxQcyAobGlrZSBrVExTKSBvbiBhIHNpbmdsZSBzb2NrZXQuIEl0JiMzOTtzIGFsc28gYWRkaW5nIGNoZWNrcyBmb3IgYHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYihzaylgLCB3aGljaCBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgaW4gbWluZC4KCkxldCYjMzk7cyBicmVhayBkb3duIHRoZSBjaGFuZ2VzOgoKKiAgICoqSGVhZGVyIGFuZCBEZWNsYXJhdGlvbnM6KiogV2UmIzM5O3ZlIGdvdCBgaW5jbHVkZS9uZXQvc29jay5oYCBhZGRpbmcgYW4gaW5saW5lIGBza19oYXNfdmFsaWRhdGVfeG1pdF9za2IoY29uc3Qgc3RydWN0IHNvY2sgKnNrKWAgYW5kIGRlY2xhcmluZyBgYm9vbCBza19oYXNfZGVjcnlwdF91c2VyKGNvbnN0IHN0cnVjdCBzb2NrICpzayk7YCBUaGlzIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIG5ldyBgc2tfaGFzX3ZhbGlkYXRlX3htaXRfc2tiYCBsaWtlbHkgc2ltcGxpZmllcyBjaGVja2luZyBmb3Igc29tZXRoaW5nLCBhbmQgYHNrX2hhc19kZWNyeXB0X3VzZXJgIHdpbGwgYmUga2V5LgoKKiAgICoqRGVmaW5pdGlvbiBvZiBgc2tfaGFzX2RlY3J5cHRfdXNlcmA6KiogSW4gYG5ldC9jb3JlL3NvY2suY2AsIHRoZSBkZWZpbml0aW9uIG9mIGBza19oYXNfZGVjcnlwdF91c2VyKGNvbnN0IHN0cnVjdCBzb2NrICpzaylgIGlzIHRoZSBjb3JlIGxvZ2ljOiBgcmV0dXJuIHBzcF9za19hc3NvYyhzaykgfHwgKHNrX2lzX2luZXQoc2spICZhbXA7JmFtcDsgaW5ldF9jc2tfaGFzX3VscChzaykpO2AuIEVzc2VudGlhbGx5LCBpZiBlaXRoZXIgUFNQIGlzIGFzc29jaWF0ZWQgT1IgaWYgaXQmIzM5O3MgYW4gaW5ldCBzb2NrZXQgKmFuZCogYSBVTFAgaXMgcHJlc2VudCAobGlrZSBUTFMpLCB0aGVuIHdlIHNheSBkZWNyeXB0aW9uIGlzIGhhbmRsZWQuIE1ha2VzIHNlbnNlLgoKKiAgICoqRW5mb3JjZW1lbnQgaW4gVUxQIGFuZCBQU1A6KiogVGhlIGBuZXQvaXB2NC90Y3BfdWxwLmNgIGluIGBfX3RjcF9zZXRfdWxwYCBjaGVja3MgZm9yIGBza19oYXNfZGVjcnlwdF91c2VyKHNrKSB8fCBza19oYXNfdmFsaWRhdGVfeG1pdF9za2Ioc2spYC4gSWYgKmVpdGhlciogb2YgdGhvc2UgY29uZGl0aW9ucyBpcyB0cnVlLCBpdCBlcnJvcnMgb3V0LiBUaGlzIGlzIHdoZXJlIHRoZSBtdXR1YWwgZXhjbHVzaW9uIGNvbWVzIGludG8gcGxheTogeW91IGNhbiYjMzk7dCBzZXQgYSBVTFAgaWYgUFNQIGlzIGFscmVhZHkgYWN0aXZlIG9yIGB2YWxpZGF0ZV94bWl0X3NrYmAgaXMgc2V0LiBTaW1pbGFybHksIGluIGBuZXQvcHNwL3BzcF9zb2NrLmNgLCBgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4YCBjaGVja3MgZm9yIHRoZSBzYW1lIGNvbmRpdGlvbnMgYmVmb3JlIGFsbG93aW5nIGEgUFNQIGFzc29jaWF0aW9uLgoKKiAgICoqU2VsZnRlc3RzOioqIEZpbmFsbHksIHRoZXJlIGFyZSB1cGRhdGVzIHRvIHRoZSBzZWxmdGVzdHMgd2hpY2ggSSYjMzk7bGwgY2VydGFpbmx5IG5lZWQgdG8gcmV2aWV3LgoKU28sIGluIGVzc2VuY2UsIHRoZSBwYXRjaCByaWdvcm91c2x5IHByZXZlbnRzIGF0dGFjaGluZyBhIFVMUCBpZiBQU1AgaXMgYWN0aXZlLCBvciBgdmFsaWRhdGVfeG1pdF9za2JgIGlzIHByZXNlbnQuIEFuZCBjb252ZXJzZWx5LCBpdCBwcmV2ZW50cyBhdHRhY2hpbmcgUFNQIGlmIGEgVUxQIG9yIGB2YWxpZGF0ZV94bWl0X3NrYmAgaXMgYWxyZWFkeSB0aGVyZS4gSXQmIzM5O3MgYSBjbGVhbiBleGNsdXNpdml0eSBpbXBsZW1lbnRhdGlvbi4KCioqTWVtb3J5IFNhZmV0eSBDb25zaWRlcmF0aW9uczoqKgoKTm93LCBsZXQmIzM5O3MgdGhpbmsgYWJvdXQgcG90ZW50aWFsIHJpc2tzLiBDcnVjaWFsbHk6CgoqICAgTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgc28gbm8gb2J2aW91cyBhbGxvY2F0aW9uLXJlbGF0ZWQgYnVncy4KKiAgIE5vIGBjb3B5X3RvX3VzZXJgIGNhbGxzIHRoYXQgY291bGQgbGVhayBpbmZvcm1hdGlvbi4KKiAgIE5vIG5ldyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMgYXJlIGludHJvZHVjZWQuCiogICBObyBicmFuY2hpbmcgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLCBzbyBubyBjb250cm9sLWZsb3cgaXNzdWVzLgoqICAgVGhpcyBpcyBzdHJpY3RseSBhIG11dHVhbCBleGNsdXNpb24gZW5mb3JjZW1lbnQsIHNvIGl0IHNob3VsZG4mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIG9yIG1lbW9yeSByaXNrcywgYXNzdW1pbmcgdGhlIGZ1bmN0aW9ucyBpdCB1c2VzIChgcHNwX3NrX2Fzc29jYCwgYGluZXRfY3NrX2hhc191bHBgLCBhbmQgYHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYmApIGFyZSB0aGVtc2VsdmVzIHNhZmUuCgoqKlJlbWFpbmluZyBDb25jZXJuczoqKgoKSSYjMzk7bSBjb25maWRlbnQgdGhlIG1lbW9yeSBhc3BlY3RzIGFyZSBoYW5kbGVkLiBIb3dldmVyLCBJIG5lZWQgdG8gZG8gYSB0aG9yb3VnaCByZXZpZXcgb2YgdGhlIGltcGxlbWVudGF0aW9ucyBvZiBgcHNwX3NrX2Fzc29jYCwgYGluZXRfY3NrX2hhc191bHBgIGFuZCB3aGF0IGBza19oYXNfdmFsaWRhdGVfeG1pdF9za2JgIG1lYW5zLiBJJiMzOTtsbCBjaGVjayB0aGF0IHRob3NlIGZ1bmN0aW9ucyB0aGVtc2VsdmVzIGFyZSByb2J1c3QgYW5kIGNvcnJlY3RseSBoYW5kbGUgdGhlaXIgcmVzcGVjdGl2ZSBzdGF0ZXMuIFRoYXTigJlzIHByb2JhYmx5IHRoZSBtb3N0IGNyaXRpY2FsIGFyZWEgdG8gdmVyaWZ5LiBBbHNvLCB0aGUgc2VsZnRlc3RzIHNob3VsZCBiZSBjb21wcmVoZW5zaXZlIGVub3VnaCB0byBjb3ZlciBhbGwgdGhlIHBvc3NpYmxlIHNjZW5hcmlvcy4gSSYjMzk7bGwgbmVlZCB0byBnbyB0aHJvdWdoIHRob3NlIHdpdGggYSBmaW5lLXRvb3RoIGNvbWIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BzcF9za19hc3NvYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9MzM9dW5zaWduZWQgaW50IHBzcF9rZXlfc2l6ZSh1MzIgdmVyc2lvbik7XG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MzQ6dm9pZCBwc3Bfc2tfYXNzb2NfZnJlZShzdHJ1Y3Qgc29jayAqc2spO1xuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTM1LXZvaWQgcHNwX3R3c2tfaW5pdChzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dywgY29uc3Qgc3RydWN0IHNvY2sgKnNrKTtcbi0tXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9Mzc9dm9pZCBwc3BfcmVwbHlfc2V0X2RlY3J5cHRlZChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTM4LVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjM5OnN0YXRpYyBpbmxpbmUgc3RydWN0IHBzcF9hc3NvYyAqcHNwX3NrX2Fzc29jKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC00MC17XG4tLVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTQ1PXBzcF9lbnF1ZXVlX3NldF9kZWNyeXB0ZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC00OC1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDo0OTpcdHBhcyA9IHBzcF9za19hc3NvYyhzayk7XG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtNTAtXHRpZiAocGFzIFx1MDAyNlx1MDAyNiBwYXMtXHUwMDNldHguc3BpKVxuLS1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD0xMTY9cHNwX3NrX3J4X3BvbGljeV9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTE3LXtcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDoxMTg6XHRyZXR1cm4gX19wc3Bfc2tfcnhfcG9saWN5X2NoZWNrKHNrYiwgcHNwX3NrX2Fzc29jKHNrKSk7XG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTE5LX1cbi0tXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9MTUwPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHBzcF9za19vdmVyaGVhZChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTE1Ny0jZWxzZVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjE1ODpzdGF0aWMgaW5saW5lIHZvaWQgcHNwX3NrX2Fzc29jX2ZyZWUoc3RydWN0IHNvY2sgKnNrKSB7IH1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xNTktc3RhdGljIGlubGluZSB2b2lkXG4tLVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTE2Mz1wc3BfcmVwbHlfc2V0X2RlY3J5cHRlZChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpIHsgfVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTE2NC1cbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDoxNjU6c3RhdGljIGlubGluZSBzdHJ1Y3QgcHNwX2Fzc29jICpwc3Bfc2tfYXNzb2MoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTE2Ni17XG4tLVxubmV0L2NvcmUvc29jay5jPTI2NzQ9Ym9vbCBza19oYXNfZGVjcnlwdF91c2VyKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbm5ldC9jb3JlL3NvY2suYy0yNjc1LXtcbm5ldC9jb3JlL3NvY2suYzoyNjc2Olx0cmV0dXJuIHBzcF9za19hc3NvYyhzaykgfHxcbm5ldC9jb3JlL3NvY2suYy0yNjc3LVx0ICAgICAgIChza19pc19pbmV0KHNrKSBcdTAwMjZcdTAwMjYgaW5ldF9jc2tfaGFzX3VscChzaykpOyAvKiBmb3IgdGxzICovXG4tLVxubmV0L2lwdjQvYWZfaW5ldC5jPTE0MD12b2lkIGluZXRfc29ja19kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjQvYWZfaW5ldC5jLTE2Ni1cdGRzdF9yZWxlYXNlKHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoc2stXHUwMDNlc2tfcnhfZHN0LCAxKSk7XG5uZXQvaXB2NC9hZl9pbmV0LmM6MTY3Olx0cHNwX3NrX2Fzc29jX2ZyZWUoc2spO1xubmV0L2lwdjQvYWZfaW5ldC5jLTE2OC19XG4tLVxubmV0L3BzcC9wc3Bfc29jay5jPTExOD12b2lkIHBzcF9hc3NvY19wdXQoc3RydWN0IHBzcF9hc3NvYyAqcGFzKVxuLS1cbm5ldC9wc3AvcHNwX3NvY2suYy0xMjMtXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTI0OnZvaWQgcHNwX3NrX2Fzc29jX2ZyZWUoc3RydWN0IHNvY2sgKnNrKVxubmV0L3BzcC9wc3Bfc29jay5jLTEyNS17XG4tLVxubmV0L3BzcC9wc3Bfc29jay5jPTEzMj1pbnQgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9hc3NvYyAqcGFzLFxuLS1cbm5ldC9wc3AvcHNwX3NvY2suYy0xNDEtXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTQyOlx0aWYgKHBzcF9za19hc3NvYyhzaykpIHtcbm5ldC9wc3AvcHNwX3NvY2suYy0xNDMtXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7U29ja2V0IGFscmVhZHkgaGFzIFBTUCBzdGF0ZVwmIzM0Oyk7XG4tLVxubmV0L3BzcC9wc3Bfc29jay5jPTE4MT1pbnQgcHNwX3NvY2tfYXNzb2Nfc2V0X3R4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9kZXYgKnBzZCxcbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTkwLVxubmV0L3BzcC9wc3Bfc29jay5jOjE5MTpcdHBhcyA9IHBzcF9za19hc3NvYyhzayk7XG5uZXQvcHNwL3BzcF9zb2NrLmMtMTkyLVx0aWYgKCFwYXMpIHtcbi0tXG5uZXQvcHNwL3BzcF9zb2NrLmM9MjcwPXZvaWQgcHNwX3R3c2tfaW5pdChzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dywgY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxubmV0L3BzcC9wc3Bfc29jay5jLTI3MS17XG5uZXQvcHNwL3BzcF9zb2NrLmM6MjcyOlx0c3RydWN0IHBzcF9hc3NvYyAqcGFzID0gcHNwX3NrX2Fzc29jKHNrKTtcbm5ldC9wc3AvcHNwX3NvY2suYy0yNzMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2NDgKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gbmV0d29yayBwcm9ncmFtbWluZy9rZXJuZWwgaW50ZXJuYWxzOgoKKipDaGVja2luZyBhIFJlbGF0ZWQgRnVuY3Rpb24qKgoKUmlnaHQsIEkmIzM5O20gYWxyZWFkeSBpbiB0aGlzIHNlY3Rpb24sIHJldmlld2luZyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGluZ3MuIEJlZm9yZSBJIG1vdmUgb24gb3IgZmluYWxpemUgdGhpcyBwYXJ0aWN1bGFyIGNoZWNrLCBJIHNob3VsZCBwcm9iYWJseSBhbHNvIHZlcmlmeSBgaW5ldF9jc2tfaGFzX3VscGAuIEl04oCZcyBhIHJlbGF0ZWQgZnVuY3Rpb24sIGxpa2VseSBvcGVyYXRpbmcgaW4gYSBzaW1pbGFyIGNvbnRleHQgb3Igb24gc2ltaWxhciBkYXRhIHN0cnVjdHVyZXMuIEkgbmVlZCB0byBlbnN1cmUgbXkgdW5kZXJzdGFuZGluZyBhbmQgYXNzdW1wdGlvbnMgYXJlIGNvbnNpc3RlbnQgYWNyb3NzIHRoaXMgcmVsYXRlZCBjb2RlLiBJdCYjMzk7cyB0b28gZWFzeSB0byBtaXNzIHNvbWV0aGluZyB3aGVuIGZvY3VzaW5nIG9uIGp1c3Qgb25lIGZ1bmN0aW9uLiBNYWtpbmcgc3VyZSBJIGFjY291bnQgZm9yIHRoaXMgcmVsYXRlZCBmdW5jdGlvbiB3aWxsIGhlbHAgbWUgYmUgdGhvcm91Z2ggaW4gbXkgcmV2aWV3LiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkgZGlkbiYjMzk7dCBvdmVybG9vayBzb21ldGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luZXRfY3NrX2hhc191bHAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaD0zMzg9c3RhdGljIGlubGluZSB2b2lkIGluZXRfY3NrX2luY19waW5ncG9uZ19jbnQoc3RydWN0IHNvY2sgKnNrKVxuLS1cbmluY2x1ZGUvbmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmgtMzQ1LVxuaW5jbHVkZS9uZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaDozNDY6c3RhdGljIGlubGluZSBib29sIGluZXRfY3NrX2hhc191bHAoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuaW5jbHVkZS9uZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaC0zNDcte1xuLS1cbm5ldC9jb3JlL3NrbXNnLmM9NzUwPXN0cnVjdCBza19wc29jayAqc2tfcHNvY2tfaW5pdChzdHJ1Y3Qgc29jayAqc2ssIGludCBub2RlKVxuLS1cbm5ldC9jb3JlL3NrbXNnLmMtNzU2LVxubmV0L2NvcmUvc2ttc2cuYzo3NTc6XHRpZiAoc2tfaXNfaW5ldChzaykgXHUwMDI2XHUwMDI2IGluZXRfY3NrX2hhc191bHAoc2spKSB7XG5uZXQvY29yZS9za21zZy5jLTc1OC1cdFx0cHNvY2sgPSBFUlJfUFRSKC1FSU5WQUwpO1xuLS1cbm5ldC9jb3JlL3NvY2suYz0yNjc0PWJvb2wgc2tfaGFzX2RlY3J5cHRfdXNlcihjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2NvcmUvc29jay5jLTI2NzYtXHRyZXR1cm4gcHNwX3NrX2Fzc29jKHNrKSB8fFxubmV0L2NvcmUvc29jay5jOjI2Nzc6XHQgICAgICAgKHNrX2lzX2luZXQoc2spIFx1MDAyNlx1MDAyNiBpbmV0X2Nza19oYXNfdWxwKHNrKSk7IC8qIGZvciB0bHMgKi9cbm5ldC9jb3JlL3NvY2suYy0yNjc4LX1cbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmM9NzI1PWludCB0Y3BfYnBmX3VwZGF0ZV9wcm90byhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIGJvb2wgcmVzdG9yZSlcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzM0LVx0aWYgKHJlc3RvcmUpIHtcbm5ldC9pcHY0L3RjcF9icGYuYzo3MzU6XHRcdGlmIChpbmV0X2Nza19oYXNfdWxwKHNrKSkge1xubmV0L2lwdjQvdGNwX2JwZi5jLTczNi1cdFx0XHQvKiBUTFMgZG9lcyBub3QgaGF2ZSBhbiB1bmhhc2ggcHJvdG8gaW4gU1cgY2FzZXMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczMzMKCQkJCQkJCW91dHB1dDogMTQ0CgkJCQkJCQl0aG91Z2h0czogODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBjaGFuZ2VzOgoKKipBbmFseXppbmcgdGhlIE11dHVhbCBFeGNsdXNpb24gYW5kIFZhbGlkYXRpb24gQ2hlY2tzKioKClJpZ2h0LCBzbyBJJiMzOTt2ZSBsb29rZWQgb3ZlciB0aGVzZSByZWNlbnQgbW9kaWZpY2F0aW9ucywgYW5kIGl0IHNlZW1zIHRoZSBmb2N1cyBpcyBzdHJpY3RseSBvbiBtdXR1YWwgZXhjbHVzaW9uIGFuZCB2YWxpZGF0aW9uIGNoZWNrcy4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgZnVuY3Rpb25zIGxpa2UgYHNrX2hhc19kZWNyeXB0X3VzZXJgIGFuZCBgc2tfaGFzX3ZhbGlkYXRlX3htaXRfc2tiYC4gVGhlc2UgYXJlIGVzc2VudGlhbGx5IGdhdGVrZWVwZXJzLCBlbnN1cmluZyB0aGF0IHRoZSBhdHRhY2htZW50IG9mIFBTUCBhbmQgVUxQL3htaXQgdmFsaWRhdGlvbiB0byBhIHNvY2tldCBkb24mIzM5O3QgaGFwcGVuIHNpbXVsdGFuZW91c2x5LiBUaGF0JiMzOTtzIGdvb2QsIG1pbmltaXplcyBjb25jdXJyZW5jeSBpc3N1ZXMuCgpDcnVjaWFsbHksIGZyb20gd2hhdCBJIGNhbiBzZWUsIHRoZXNlIGNoYW5nZXMgZG9uJiMzOTt0IGludHJvZHVjZSBhbnl0aGluZyB0cnVseSBjb25jZXJuaW5nIGZyb20gYSBtZW1vcnkgcGVyc3BlY3RpdmUuIEkmIzM5O20gbm90IHNlZWluZyBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9uLCB3ZSYjMzk7cmUgbm90IGNvcHlpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgYXJvdW5kLCBhbmQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgbmV3IGJyYW5jaGluZyBwYXRocyB0aGF0IHdvdWxkIGRlcGVuZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGRhdGEuIFRoYXQmIzM5O3MgYSBodWdlIHJlbGllZi4KClRoZXJlZm9yZSwgYmVjYXVzZSBvZiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2VzLCBJIGNhbiBjb25maWRlbnRseSBzYXkgdGhhdCB3ZSBkb24mIzM5O3QgbmVlZCB0byBpbnZvbHZlIEtNU0FOIGluIHRoaXMgcGFydGljdWxhciBhcmVhLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBzYWZlLgoKTm93LCBsZXQmIzM5O3MgcHJlcGFyZSB0aGUgY2FsbCB0byBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG11dHVhbCBleGNsdXNpdml0eSBjaGVja3MgKHNrX2hhc19kZWNyeXB0X3VzZXIgYW5kIHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYikgdG8gcHJldmVudCBpbmNvbXBhdGlibGUgc29ja2V0IHN0YXRlcyB3aGVuIGNvbmZpZ3VyaW5nIFRDUCBVTFAgKGUuZy4ga1RMUykgYW5kIFBTUCAoUFNQIHNlY3VyaXR5IHByb3RvY29sKSBvbiB0aGUgc2FtZSBzb2NrZXQuIFxuXG5JdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBjb3BpZXMgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWNjZXNzIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIHNhbml0aXplcnMgbGlrZSBLQVNBTiBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgbWVtb3J5IHNhZmV0eSBvciBzdGF0ZSBtYW5hZ2VtZW50IGlzc3Vlcy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBtdXR1YWwgZXhjbHVzaXZpdHkgY2hlY2tzIChza19oYXNfZGVjcnlwdF91c2VyIGFuZCBza19oYXNfdmFsaWRhdGVfeG1pdF9za2IpIHRvIHByZXZlbnQgaW5jb21wYXRpYmxlIHNvY2tldCBzdGF0ZXMgd2hlbiBjb25maWd1cmluZyBUQ1AgVUxQIChlLmcuIGtUTFMpIGFuZCBQU1AgKFBTUCBzZWN1cml0eSBwcm90b2NvbCkgb24gdGhlIHNhbWUgc29ja2V0LiBcblxuSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgY29waWVzIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFjY2VzcyBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBzYW5pdGl6ZXJzIGxpa2UgS0FTQU4gYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG1lbW9yeSBzYWZldHkgb3Igc3RhdGUgbWFuYWdlbWVudCBpc3N1ZXMuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6NDI6NTguMzc5MjgxNDQ5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyNDgwNDA0NTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRfUFNQXCIsXG4gICAgXCJUTFNcIixcbiAgICBcIlRMU19ERVZJQ0VcIixcbiAgICBcIk5FVERFVlNJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNrX2hhc19kZWNyeXB0X3VzZXJcIixcbiAgICBcInRjcF9zZXRfdWxwXCIsXG4gICAgXCJfX3RjcF9zZXRfdWxwXCIsXG4gICAgXCJwc3Bfc29ja19hc3NvY19zZXRfcnhcIixcbiAgICBcInBzcF9ubF9yeF9hc3NvY19kb2l0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG11dHVhbCBleGNsdXNpdml0eSBjaGVja3MgKHNrX2hhc19kZWNyeXB0X3VzZXIgYW5kIHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYikgdG8gcHJldmVudCBpbmNvbXBhdGlibGUgc29ja2V0IHN0YXRlcyB3aGVuIGNvbmZpZ3VyaW5nIFRDUCBVTFAgKGUuZy4ga1RMUykgYW5kIFBTUCAoUFNQIHNlY3VyaXR5IHByb3RvY29sKSBvbiB0aGUgc2FtZSBzb2NrZXQuIFxcblxcbkl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIGNvcGllcyB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhY2Nlc3Mgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgdGVzdGluZyBhbmQgc2FuaXRpemVycyBsaWtlIEtBU0FOIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBtZW1vcnkgc2FmZXR5IG9yIHN0YXRlIG1hbmFnZW1lbnQgaXNzdWVzLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzb2NrZXQgc3RhdGUgZXhjbHVzaXZpdHkgY2hlY2tzIGJldHdlZW4gUFNQIChQU1AgU2VjdXJpdHkgUHJvdG9jb2wpIHNvY2tldCBhc3NvY2lhdGlvbnMsIFRDUCBVTFAgKGUuZy4sIGtUTFMpLCBhbmQgc29ja2V0cyB3aXRoIHRyYW5zbWl0IHZhbGlkYXRpb24gaGFuZGxlcnMgKHNrX3ZhbGlkYXRlX3htaXRfc2tiKS4gSXQgYWRkcyBza19oYXNfZGVjcnlwdF91c2VyKCkgYW5kIHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYigpIHZhbGlkYXRpb25zIGluIF9fdGNwX3NldF91bHAoKSBhbmQgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4KCkgdG8gcHJldmVudCBjb25mbGljdGluZyBzb2NrZXQgb2ZmbG9hZCBzdGF0ZXMuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIHJlYWNoYWJsZSB2aWEgVENQIHNldHNvY2tvcHQoVENQX1VMUCkgYW5kIFBTUCBOZXRsaW5rIGNvbW1hbmRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMDo0Mjo1OC4zNzkyODc1MThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODYyODAxODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzYjRmMjJlMWQyZTJmYjgyM2Q4MmJiNjRhMWUxOTQzNDg0NzUxMmMwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDExIDAwOjQyOjU2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NvY2suaCBiL2luY2x1ZGUvbmV0L3NvY2suaFxcbmluZGV4IDUxMTg1MjIyYWFjMjkuLmJhNWU1MDkyZjE5MmMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvc29jay5oXFxuKysrIGIvaW5jbHVkZS9uZXQvc29jay5oXFxuQEAgLTIzMTIsNiArMjMxMiwxNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2tfZ3NvX2Rpc2FibGUoc3RydWN0IHNvY2sgKnNrKVxcbiBcXHRzay1cXHUwMDNlc2tfcm91dGVfY2FwcyBcXHUwMDI2PSB+TkVUSUZfRl9HU09fTUFTSztcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBib29sIHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYihjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuK3tcXG4rI2lmZGVmIENPTkZJR19TT0NLX1ZBTElEQVRFX1hNSVRcXG4rXFx0cmV0dXJuICEhc2stXFx1MDAzZXNrX3ZhbGlkYXRlX3htaXRfc2tiO1xcbisjZWxzZVxcbitcXHRyZXR1cm4gZmFsc2U7XFxuKyNlbmRpZlxcbit9XFxuK1xcbitib29sIHNrX2hhc19kZWNyeXB0X3VzZXIoY29uc3Qgc3RydWN0IHNvY2sgKnNrKTtcXG4rXFxuIHN0YXRpYyBpbmxpbmUgaW50IHNrYl9kb19jb3B5X2RhdGFfbm9jYWNoZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSwgY2hhciAqdG8sXFxuIFxcdFxcdFxcdFxcdFxcdCAgIGludCBjb3B5LCBpbnQgb2Zmc2V0KVxcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9zb2NrLmMgYi9uZXQvY29yZS9zb2NrLmNcXG5pbmRleCBmYTYwYjc0OTRjNTg2Li45NDg5ZDljNDc5NDkzIDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL3NvY2suY1xcbisrKyBiL25ldC9jb3JlL3NvY2suY1xcbkBAIC0xNDIsNiArMTQyLDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2N0cmFjZS9ldmVudHMvc29jay5oXFx1MDAzZVxcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9wc3AuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC90Y3AuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9idXN5X3BvbGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9waG9uZXQvcGhvbmV0LmhcXHUwMDNlXFxuQEAgLTI2NzAsNiArMjY3MSwxMiBAQCB2b2lkIHNrX3NldHVwX2NhcHMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoc2tfc2V0dXBfY2Fwcyk7XFxuIFxcbitib29sIHNrX2hhc19kZWNyeXB0X3VzZXIoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbit7XFxuK1xcdHJldHVybiBwc3Bfc2tfYXNzb2Moc2spIHx8XFxuK1xcdCAgICAgICAoc2tfaXNfaW5ldChzaykgXFx1MDAyNlxcdTAwMjYgaW5ldF9jc2tfaGFzX3VscChzaykpOyAvKiBmb3IgdGxzICovXFxuK31cXG4rXFxuIC8qXFxuICAqXFx0U2ltcGxlIHJlc291cmNlIG1hbmFnZXJzIGZvciBzb2NrZXRzLlxcbiAgKi9cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX3VscC5jIGIvbmV0L2lwdjQvdGNwX3VscC5jXFxuaW5kZXggMmFhNDQyMTI4NjMwZS4uZjNlMGM5ZDM3OWJiNiAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC90Y3BfdWxwLmNcXG4rKysgYi9uZXQvaXB2NC90Y3BfdWxwLmNcXG5AQCAtMTM2LDYgKzEzNiwxMCBAQCBzdGF0aWMgaW50IF9fdGNwX3NldF91bHAoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgdGNwX3VscF9vcHMgKnVscF9vcHMpXFxuIFxcdGlmIChpY3NrLVxcdTAwM2VpY3NrX3VscF9vcHMpXFxuIFxcdFxcdGdvdG8gb3V0X2VycjtcXG4gXFxuK1xcdGVyciA9IC1FSU5WQUw7XFxuK1xcdGlmIChza19oYXNfZGVjcnlwdF91c2VyKHNrKSB8fCBza19oYXNfdmFsaWRhdGVfeG1pdF9za2Ioc2spKVxcbitcXHRcXHRnb3RvIG91dF9lcnI7XFxuK1xcbiBcXHRpZiAoc2stXFx1MDAzZXNrX3NvY2tldClcXG4gXFx0XFx0Y2xlYXJfYml0KFNPQ0tfU1VQUE9SVF9aQywgXFx1MDAyNnNrLVxcdTAwM2Vza19zb2NrZXQtXFx1MDAzZWZsYWdzKTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9wc3AvcHNwX3NvY2suYyBiL25ldC9wc3AvcHNwX3NvY2suY1xcbmluZGV4IDFhMmE2Yjc1MTZiMGYuLjUwOTAzNTYxNzg5NGEgMTAwNjQ0XFxuLS0tIGEvbmV0L3BzcC9wc3Bfc29jay5jXFxuKysrIGIvbmV0L3BzcC9wc3Bfc29jay5jXFxuQEAgLTE0Myw2ICsxNDMsMTAgQEAgaW50IHBzcF9zb2NrX2Fzc29jX3NldF9yeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwc3BfYXNzb2MgKnBhcyxcXG4gXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiU29ja2V0IGFscmVhZHkgaGFzIFBTUCBzdGF0ZVxcXCIpO1xcbiBcXHRcXHRlcnIgPSAtRUJVU1k7XFxuIFxcdFxcdGdvdG8gZXhpdF91bmxvY2s7XFxuK1xcdH0gZWxzZSBpZiAoc2tfaGFzX2RlY3J5cHRfdXNlcihzaykgfHwgc2tfaGFzX3ZhbGlkYXRlX3htaXRfc2tiKHNrKSkge1xcbitcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJTb2NrZXQgaGFzIGluY29tcGF0aWJsZSBzdGF0ZVxcXCIpO1xcbitcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIGV4aXRfdW5sb2NrO1xcbiBcXHR9XFxuIFxcbiBcXHRyZWZjb3VudF9pbmMoXFx1MDAyNnBhcy1cXHUwMDNlcmVmY250KTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnXFxuaW5kZXggYjY5ODljN2QzZDlkMS4uNDgzOGFkZjI3ZmExYiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWdcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWdcXG5AQCAtMjEsNSArMjEsNiBAQCBDT05GSUdfTkVUX1NDSF9JTkdSRVNTPXlcXG4gQ09ORklHX05FVF9TQ0hfUFJJTz1tXFxuIENPTkZJR19QUFA9eVxcbiBDT05GSUdfUFBQT0U9eVxcbitDT05GSUdfVExTPXlcXG4gQ09ORklHX1ZMQU5fODAyMVE9bVxcbiBDT05GSUdfWERQX1NPQ0tFVFM9eVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHlcXG5pbmRleCAzMTU2NDhhNzcwZDAwLi4xMmIyN2YyYTNmYTFiIDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weVxcbkBAIC0yMyw2ICsyMyw4IEBAIGZyb20gbGliLnB5IGltcG9ydCBOZXROU0VudGVyXFxuIGZyb20gbGliLnB5IGltcG9ydCBia2csIHJhbmRfcG9ydCwgd2FpdF9wb3J0X2xpc3RlblxcbiBmcm9tIGxpYi5weSBpbXBvcnQgaXBcXG4gXFxuK1RDUF9VTFAgPSAzMVxcbitcXG4gXFxuIGRlZiBfZ2V0X291dHEocyk6XFxuICAgICBvbmUgPSBiJ1xcXFwwJyAqIDRcXG5AQCAtMzMzLDYgKzMzNSw1MCBAQCBkZWYgYXNzb2NfdmVyc2lvbl9taXNtYXRjaChjZmcpOlxcbiAgICAgICAgICAgICBrc2Z0X2VxKHRoZV9leGNlcHRpb24ubmxfbXNnLmVycm9yLCAtZXJybm8uRUlOVkFMKVxcbiBcXG4gXFxuK2RlZiBfcmVxdWlyZV90bHNfdWxwKCk6XFxuKyAgICB3aXRoIHNvY2tldC5jcmVhdGVfc2VydmVyKChcXFwibG9jYWxob3N0XFxcIiwgMCkpIGFzIHNydjpcXG4rICAgICAgICB3aXRoIHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbihzcnYuZ2V0c29ja25hbWUoKSkgYXMgczpcXG4rICAgICAgICAgICAgdHJ5OlxcbisgICAgICAgICAgICAgICAgcy5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfVENQLCBUQ1BfVUxQLCBiXFxcInRsc1xcXCIpXFxuKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzpcXG4rICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXFxcImtUTFMgbm90IGF2YWlsYWJsZVxcXCIpIGZyb20gZXhjXFxuK1xcbitcXG4rZGVmIGFzc29jX3BzcF91bHBfZXhjbHVzaXZlKGNmZyk6XFxuKyAgICBcXFwiXFxcIlxcXCIgVGVzdCB0aGF0IGEgVENQIFVMUCBjYW5ub3QgYmUgYXR0YWNoZWQgdG8gYSBQU1Agc29ja2V0IFxcXCJcXFwiXFxcIlxcbisgICAgX2luaXRfcHNwX2RldihjZmcpXFxuKyAgICBfcmVxdWlyZV90bHNfdWxwKClcXG4rXFxuKyAgICB3aXRoIF9tYWtlX2Nscl9jb25uKGNmZykgYXMgczpcXG4rICAgICAgICB0cnk6XFxuKyAgICAgICAgICAgIGNmZy5wc3BubC5yeF9hc3NvYyh7XFxcInZlcnNpb25cXFwiOiAwLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJkZXYtaWRcXFwiOiBjZmcucHNwX2Rldl9pZCxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwic29jay1mZFxcXCI6IHMuZmlsZW5vKCl9KVxcbisgICAgICAgICAgICB3aXRoIGtzZnRfcmFpc2VzKE9TRXJyb3IpIGFzIGNtOlxcbisgICAgICAgICAgICAgICAgcy5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfVENQLCBUQ1BfVUxQLCBiXFxcInRsc1xcXCIpXFxuKyAgICAgICAgICAgIGtzZnRfZXEoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FSU5WQUwpXFxuKyAgICAgICAgZmluYWxseTpcXG4rICAgICAgICAgICAgX2Nsb3NlX2Nvbm4oY2ZnLCBzKVxcbitcXG4rXFxuK2RlZiBhc3NvY191bHBfcHNwX2V4Y2x1c2l2ZShjZmcpOlxcbisgICAgXFxcIlxcXCJcXFwiIFRlc3QgdGhhdCBhIFBTUCBhc3NvYyBjYW5ub3QgYmUgYWRkZWQgdG8gYSBzb2NrZXQgd2l0aCBhIFRDUCBVTFAgXFxcIlxcXCJcXFwiXFxuKyAgICBfaW5pdF9wc3BfZGV2KGNmZylcXG4rICAgIF9yZXF1aXJlX3Rsc191bHAoKVxcbitcXG4rICAgIHdpdGggX21ha2VfY2xyX2Nvbm4oY2ZnKSBhcyBzOlxcbisgICAgICAgIHRyeTpcXG4rICAgICAgICAgICAgcy5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfVENQLCBUQ1BfVUxQLCBiXFxcInRsc1xcXCIpXFxuKyAgICAgICAgICAgIHdpdGgga3NmdF9yYWlzZXMoTmxFcnJvcikgYXMgY206XFxuKyAgICAgICAgICAgICAgICBjZmcucHNwbmwucnhfYXNzb2Moe1xcXCJ2ZXJzaW9uXFxcIjogMCxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcImRldi1pZFxcXCI6IGNmZy5wc3BfZGV2X2lkLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwic29jay1mZFxcXCI6IHMuZmlsZW5vKCl9KVxcbisgICAgICAgICAgICBrc2Z0X2VxKGNtLmV4Y2VwdGlvbi5ubF9tc2cuZXJyb3IsIC1lcnJuby5FSU5WQUwpXFxuKyAgICAgICAgICAgIGtzZnRfZXEoY20uZXhjZXB0aW9uLm5sX21zZy5leHRhY2tbJ2JhZC1hdHRyJ10sIFxcXCIuc29jay1mZFxcXCIpXFxuKyAgICAgICAgZmluYWxseTpcXG4rICAgICAgICAgICAgX2Nsb3NlX2Nvbm4oY2ZnLCBzKVxcbitcXG4rXFxuIGRlZiBhc3NvY190d2ljZShjZmcpOlxcbiAgICAgXFxcIlxcXCJcXFwiIFRlc3QgcmV1c2luZyBUeCBhc3NvYyBmb3IgdHdvIHNvY2tldHMgXFxcIlxcXCJcXFwiXFxuICAgICBfaW5pdF9wc3BfZGV2KGNmZylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6NDM6MDAuMjY2NTYyODc0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo5NDg3NzUwNjg5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUX1BTUFwiLFxuICAgIFwiVExTXCIsXG4gICAgXCJUTFNfREVWSUNFXCIsXG4gICAgXCJORVRERVZTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza19oYXNfZGVjcnlwdF91c2VyXCIsXG4gICAgXCJ0Y3Bfc2V0X3VscFwiLFxuICAgIFwiX190Y3Bfc2V0X3VscFwiLFxuICAgIFwicHNwX3NvY2tfYXNzb2Nfc2V0X3J4XCIsXG4gICAgXCJwc3BfbmxfcnhfYXNzb2NfZG9pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc29ja2V0IHN0YXRlIGV4Y2x1c2l2aXR5IGNoZWNrcyBiZXR3ZWVuIFBTUCAoUFNQIFNlY3VyaXR5IFByb3RvY29sKSBzb2NrZXQgYXNzb2NpYXRpb25zLCBUQ1AgVUxQIChlLmcuLCBrVExTKSwgYW5kIHNvY2tldHMgd2l0aCB0cmFuc21pdCB2YWxpZGF0aW9uIGhhbmRsZXJzIChza192YWxpZGF0ZV94bWl0X3NrYikuIEl0IGFkZHMgc2tfaGFzX2RlY3J5cHRfdXNlcigpIGFuZCBza19oYXNfdmFsaWRhdGVfeG1pdF9za2IoKSB2YWxpZGF0aW9ucyBpbiBfX3RjcF9zZXRfdWxwKCkgYW5kIHBzcF9zb2NrX2Fzc29jX3NldF9yeCgpIHRvIHByZXZlbnQgY29uZmxpY3Rpbmcgc29ja2V0IG9mZmxvYWQgc3RhdGVzLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIFRDUCBzZXRzb2Nrb3B0KFRDUF9VTFApIGFuZCBQU1AgTmV0bGluayBjb21tYW5kcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzYjRmMjJlMWQyZTJmYjgyM2Q4MmJiNjRhMWUxOTQzNDg0NzUxMmMwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDA6NDI6NTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zb2NrLmggYi9pbmNsdWRlL25ldC9zb2NrLmhcbmluZGV4IDUxMTg1MjIyYWFjMjkuLmJhNWU1MDkyZjE5MmMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9zb2NrLmhcbisrKyBiL2luY2x1ZGUvbmV0L3NvY2suaFxuQEAgLTIzMTIsNiArMjMxMiwxNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2tfZ3NvX2Rpc2FibGUoc3RydWN0IHNvY2sgKnNrKVxuIFx0c2stXHUwMDNlc2tfcm91dGVfY2FwcyBcdTAwMjY9IH5ORVRJRl9GX0dTT19NQVNLO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGJvb2wgc2tfaGFzX3ZhbGlkYXRlX3htaXRfc2tiKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbit7XG4rI2lmZGVmIENPTkZJR19TT0NLX1ZBTElEQVRFX1hNSVRcbitcdHJldHVybiAhIXNrLVx1MDAzZXNrX3ZhbGlkYXRlX3htaXRfc2tiO1xuKyNlbHNlXG4rXHRyZXR1cm4gZmFsc2U7XG4rI2VuZGlmXG4rfVxuK1xuK2Jvb2wgc2tfaGFzX2RlY3J5cHRfdXNlcihjb25zdCBzdHJ1Y3Qgc29jayAqc2spO1xuK1xuIHN0YXRpYyBpbmxpbmUgaW50IHNrYl9kb19jb3B5X2RhdGFfbm9jYWNoZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSwgY2hhciAqdG8sXG4gXHRcdFx0XHRcdCAgIGludCBjb3B5LCBpbnQgb2Zmc2V0KVxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2suYyBiL25ldC9jb3JlL3NvY2suY1xuaW5kZXggZmE2MGI3NDk0YzU4Ni4uOTQ4OWQ5YzQ3OTQ5MyAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NvY2suY1xuKysrIGIvbmV0L2NvcmUvc29jay5jXG5AQCAtMTQyLDYgKzE0Miw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjdHJhY2UvZXZlbnRzL3NvY2suaFx1MDAzZVxuIFxuKyNpbmNsdWRlIFx1MDAzY25ldC9wc3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9idXN5X3BvbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9waG9uZXQvcGhvbmV0LmhcdTAwM2VcbkBAIC0yNjcwLDYgKzI2NzEsMTIgQEAgdm9pZCBza19zZXR1cF9jYXBzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChza19zZXR1cF9jYXBzKTtcbiBcbitib29sIHNrX2hhc19kZWNyeXB0X3VzZXIoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuK3tcbitcdHJldHVybiBwc3Bfc2tfYXNzb2Moc2spIHx8XG4rXHQgICAgICAgKHNrX2lzX2luZXQoc2spIFx1MDAyNlx1MDAyNiBpbmV0X2Nza19oYXNfdWxwKHNrKSk7IC8qIGZvciB0bHMgKi9cbit9XG4rXG4gLypcbiAgKlx0U2ltcGxlIHJlc291cmNlIG1hbmFnZXJzIGZvciBzb2NrZXRzLlxuICAqL1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF91bHAuYyBiL25ldC9pcHY0L3RjcF91bHAuY1xuaW5kZXggMmFhNDQyMTI4NjMwZS4uZjNlMGM5ZDM3OWJiNiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF91bHAuY1xuKysrIGIvbmV0L2lwdjQvdGNwX3VscC5jXG5AQCAtMTM2LDYgKzEzNiwxMCBAQCBzdGF0aWMgaW50IF9fdGNwX3NldF91bHAoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgdGNwX3VscF9vcHMgKnVscF9vcHMpXG4gXHRpZiAoaWNzay1cdTAwM2VpY3NrX3VscF9vcHMpXG4gXHRcdGdvdG8gb3V0X2VycjtcbiBcbitcdGVyciA9IC1FSU5WQUw7XG4rXHRpZiAoc2tfaGFzX2RlY3J5cHRfdXNlcihzaykgfHwgc2tfaGFzX3ZhbGlkYXRlX3htaXRfc2tiKHNrKSlcbitcdFx0Z290byBvdXRfZXJyO1xuK1xuIFx0aWYgKHNrLVx1MDAzZXNrX3NvY2tldClcbiBcdFx0Y2xlYXJfYml0KFNPQ0tfU1VQUE9SVF9aQywgXHUwMDI2c2stXHUwMDNlc2tfc29ja2V0LVx1MDAzZWZsYWdzKTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvcHNwL3BzcF9zb2NrLmMgYi9uZXQvcHNwL3BzcF9zb2NrLmNcbmluZGV4IDFhMmE2Yjc1MTZiMGYuLjUwOTAzNTYxNzg5NGEgMTAwNjQ0XG4tLS0gYS9uZXQvcHNwL3BzcF9zb2NrLmNcbisrKyBiL25ldC9wc3AvcHNwX3NvY2suY1xuQEAgLTE0Myw2ICsxNDMsMTAgQEAgaW50IHBzcF9zb2NrX2Fzc29jX3NldF9yeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwc3BfYXNzb2MgKnBhcyxcbiBcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcIlNvY2tldCBhbHJlYWR5IGhhcyBQU1Agc3RhdGVcIik7XG4gXHRcdGVyciA9IC1FQlVTWTtcbiBcdFx0Z290byBleGl0X3VubG9jaztcbitcdH0gZWxzZSBpZiAoc2tfaGFzX2RlY3J5cHRfdXNlcihzaykgfHwgc2tfaGFzX3ZhbGlkYXRlX3htaXRfc2tiKHNrKSkge1xuK1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwiU29ja2V0IGhhcyBpbmNvbXBhdGlibGUgc3RhdGVcIik7XG4rXHRcdGVyciA9IC1FSU5WQUw7XG4rXHRcdGdvdG8gZXhpdF91bmxvY2s7XG4gXHR9XG4gXG4gXHRyZWZjb3VudF9pbmMoXHUwMDI2cGFzLVx1MDAzZXJlZmNudCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnXG5pbmRleCBiNjk4OWM3ZDNkOWQxLi40ODM4YWRmMjdmYTFiIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9jb25maWdcbkBAIC0yMSw1ICsyMSw2IEBAIENPTkZJR19ORVRfU0NIX0lOR1JFU1M9eVxuIENPTkZJR19ORVRfU0NIX1BSSU89bVxuIENPTkZJR19QUFA9eVxuIENPTkZJR19QUFBPRT15XG4rQ09ORklHX1RMUz15XG4gQ09ORklHX1ZMQU5fODAyMVE9bVxuIENPTkZJR19YRFBfU09DS0VUUz15XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5XG5pbmRleCAzMTU2NDhhNzcwZDAwLi4xMmIyN2YyYTNmYTFiIDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHlcbkBAIC0yMyw2ICsyMyw4IEBAIGZyb20gbGliLnB5IGltcG9ydCBOZXROU0VudGVyXG4gZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgcmFuZF9wb3J0LCB3YWl0X3BvcnRfbGlzdGVuXG4gZnJvbSBsaWIucHkgaW1wb3J0IGlwXG4gXG4rVENQX1VMUCA9IDMxXG4rXG4gXG4gZGVmIF9nZXRfb3V0cShzKTpcbiAgICAgb25lID0gYidcXDAnICogNFxuQEAgLTMzMyw2ICszMzUsNTAgQEAgZGVmIGFzc29jX3ZlcnNpb25fbWlzbWF0Y2goY2ZnKTpcbiAgICAgICAgICAgICBrc2Z0X2VxKHRoZV9leGNlcHRpb24ubmxfbXNnLmVycm9yLCAtZXJybm8uRUlOVkFMKVxuIFxuIFxuK2RlZiBfcmVxdWlyZV90bHNfdWxwKCk6XG4rICAgIHdpdGggc29ja2V0LmNyZWF0ZV9zZXJ2ZXIoKFwibG9jYWxob3N0XCIsIDApKSBhcyBzcnY6XG4rICAgICAgICB3aXRoIHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbihzcnYuZ2V0c29ja25hbWUoKSkgYXMgczpcbisgICAgICAgICAgICB0cnk6XG4rICAgICAgICAgICAgICAgIHMuc2V0c29ja29wdChzb2NrZXQuU09MX1RDUCwgVENQX1VMUCwgYlwidGxzXCIpXG4rICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOlxuKyAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFwia1RMUyBub3QgYXZhaWxhYmxlXCIpIGZyb20gZXhjXG4rXG4rXG4rZGVmIGFzc29jX3BzcF91bHBfZXhjbHVzaXZlKGNmZyk6XG4rICAgIFwiXCJcIiBUZXN0IHRoYXQgYSBUQ1AgVUxQIGNhbm5vdCBiZSBhdHRhY2hlZCB0byBhIFBTUCBzb2NrZXQgXCJcIlwiXG4rICAgIF9pbml0X3BzcF9kZXYoY2ZnKVxuKyAgICBfcmVxdWlyZV90bHNfdWxwKClcbitcbisgICAgd2l0aCBfbWFrZV9jbHJfY29ubihjZmcpIGFzIHM6XG4rICAgICAgICB0cnk6XG4rICAgICAgICAgICAgY2ZnLnBzcG5sLnJ4X2Fzc29jKHtcInZlcnNpb25cIjogMCxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGV2LWlkXCI6IGNmZy5wc3BfZGV2X2lkLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzb2NrLWZkXCI6IHMuZmlsZW5vKCl9KVxuKyAgICAgICAgICAgIHdpdGgga3NmdF9yYWlzZXMoT1NFcnJvcikgYXMgY206XG4rICAgICAgICAgICAgICAgIHMuc2V0c29ja29wdChzb2NrZXQuU09MX1RDUCwgVENQX1VMUCwgYlwidGxzXCIpXG4rICAgICAgICAgICAga3NmdF9lcShjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVJTlZBTClcbisgICAgICAgIGZpbmFsbHk6XG4rICAgICAgICAgICAgX2Nsb3NlX2Nvbm4oY2ZnLCBzKVxuK1xuK1xuK2RlZiBhc3NvY191bHBfcHNwX2V4Y2x1c2l2ZShjZmcpOlxuKyAgICBcIlwiXCIgVGVzdCB0aGF0IGEgUFNQIGFzc29jIGNhbm5vdCBiZSBhZGRlZCB0byBhIHNvY2tldCB3aXRoIGEgVENQIFVMUCBcIlwiXCJcbisgICAgX2luaXRfcHNwX2RldihjZmcpXG4rICAgIF9yZXF1aXJlX3Rsc191bHAoKVxuK1xuKyAgICB3aXRoIF9tYWtlX2Nscl9jb25uKGNmZykgYXMgczpcbisgICAgICAgIHRyeTpcbisgICAgICAgICAgICBzLnNldHNvY2tvcHQoc29ja2V0LlNPTF9UQ1AsIFRDUF9VTFAsIGJcInRsc1wiKVxuKyAgICAgICAgICAgIHdpdGgga3NmdF9yYWlzZXMoTmxFcnJvcikgYXMgY206XG4rICAgICAgICAgICAgICAgIGNmZy5wc3BubC5yeF9hc3NvYyh7XCJ2ZXJzaW9uXCI6IDAsXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkZXYtaWRcIjogY2ZnLnBzcF9kZXZfaWQsXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzb2NrLWZkXCI6IHMuZmlsZW5vKCl9KVxuKyAgICAgICAgICAgIGtzZnRfZXEoY20uZXhjZXB0aW9uLm5sX21zZy5lcnJvciwgLWVycm5vLkVJTlZBTClcbisgICAgICAgICAgICBrc2Z0X2VxKGNtLmV4Y2VwdGlvbi5ubF9tc2cuZXh0YWNrWydiYWQtYXR0ciddLCBcIi5zb2NrLWZkXCIpXG4rICAgICAgICBmaW5hbGx5OlxuKyAgICAgICAgICAgIF9jbG9zZV9jb25uKGNmZywgcylcbitcbitcbiBkZWYgYXNzb2NfdHdpY2UoY2ZnKTpcbiAgICAgXCJcIlwiIFRlc3QgcmV1c2luZyBUeCBhc3NvYyBmb3IgdHdvIHNvY2tldHMgXCJcIlwiXG4gICAgIF9pbml0X3BzcF9kZXYoY2ZnKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6NDM6MDAuMjY2NTY1MTQ0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTI2MzA2NjE1NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQXNzZXNzaW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiBUaGlzIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBnaXZlbiBhIHBhdGNoIHNlcmllcyBhbmQgYXNrZWQgdG8gZGV0ZXJtaW5lIGlmIGl0J3MgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZyB3aXRoIHN5emthbGxlci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCdzIGRpdmUgaW4uIFRoZSBmaXJzdCBzdGVwIGlzIHRvIHF1aWNrbHkgYW5hbHl6ZSB0aGUgY2hhbmdlcy4gTG9va3MgbGlrZSB3ZSd2ZSBnb3QgbW9kaWZpY2F0aW9ucyB0byBgaW5jbHVkZS9uZXQvc29jay5oYCwgYG5ldC9jb3JlL3NvY2suY2AsIGBuZXQvaXB2NC90Y3BfdWxwLmNgLCBgbmV0L3BzcC9wc3Bfc29jay5jYCwgYW5kIHNvbWUgc2VsZnRlc3RzLiBUaGUgYWRkaXRpb24gb2YgYHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYmAgYW5kIGBza19oYXNfZGVjcnlwdF91c2VyYCBpbiBgc29jay5oYCBhbmQgdGhlaXIgc3Vic2VxdWVudCBkZWZpbml0aW9uIGFuZCB1c2UsIGFsb25nIHdpdGggdGhlIGNoZWNrcyBpbiBgX190Y3Bfc2V0X3VscGAgYW5kIGBwc3Bfc29ja19hc3NvY19zZXRfcnhgLCBhcmUgdGhlIGJyZWFkY3J1bWJzLiBJdCBzZWVtcyB3ZSdyZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHJlbGF0ZWQgdG8gc29ja2V0IGhhbmRsaW5nLCBwb3RlbnRpYWxseSBlbmNyeXB0aW9uIG9yIHNvbWUga2luZCBvZiBwYWNrZXQgcHJvY2Vzc2luZyB3aXRoIFBTUCwgYW5kIGl0IG1ha2VzIG1lIHRoaW5rIGFib3V0IHBvdGVudGlhbCBmb3IgaW50ZXJlc3RpbmcgYmVoYXZpb3JzLCBhbmQgcG9zc2libGUgdnVsbmVyYWJpbGl0aWVzLlxuXG5UbyBwcm9wZXJseSBnYXVnZSB0aGUgZnV6emluZyBwb3RlbnRpYWwsIEkgbmVlZCBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgUFNQIHBhcnQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgUFNQIGFjdHVhbGx5ICppcyouIFdoYXQgY29uZmlndXJhdGlvbiBmbGFncyBhcmUgaW52b2x2ZWQ/IFdoYXQgb3RoZXIgY29kZSBjYWxscyB0aGVzZSBmdW5jdGlvbnMgb3IgdXNlcyB0aGVzZSBzdHJ1Y3R1cmVzPyBXZSdsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSBmb2N1cyBzeW1ib2xzIGFuZCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGZvciBhIGZ1bGwgZXZhbHVhdGlvbi4gVGltZSB0byBkdXN0IG9mZiB0aGUgYGdpdCBncmVwYCBza2lsbHMgYW5kIHN0YXJ0IGh1bnRpbmcgZG93biByZWxldmFudCBjb2RlIHdpdGhpbiB0aGUga2VybmVsLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHJlZmVyZW5jZXMgdG8gUFNQLCBhbnkgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCBhbnl0aGluZyB0aGF0IG1pZ2h0IGdpdmUgaW5zaWdodCBpbnRvIGhvdyB0aGVzZSBuZXcgZnVuY3Rpb25zIGFyZSB1c2VkLiBXZSBuZWVkIHRvIGlkZW50aWZ5IGFsbCByZWxldmFudCBlbnRyeSBwb2ludHMgZm9yIGZ1enppbmcuIFRoaXMgc2hvdWxkIGdldCB1cyBhIGdvb2QgcGljdHVyZSBvZiB0aGUgYXR0YWNrIHN1cmZhY2UgaGVyZSBhbmQgaWYgdGhpcyBkZXNlcnZlcyBtb3JlIGF0dGVudGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc0MywiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjQzOjEyLjg5NzIzMTAxNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzgwMDMyNjA5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfUFNQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMDo0MzoxNS4yNzcyNzE3MTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDE1NzUwNTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBgbmV0L3BzcC9gIERpcmVjdG9yeSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIG5ldHdvcmsgZnVuY3Rpb25hbGl0eSBpcyBjb25maWd1cmVkIGFuZCBidWlsdC4gTXkgZmlyc3QgbW92ZSBpcyB0byBoZWFkIHN0cmFpZ2h0IGludG8gdGhlIGBuZXQvcHNwL2AgZGlyZWN0b3J5LiBUaGlzIHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBmb3IgdGhlIGNvcmUgb2YgdGhlIGltcGxlbWVudGF0aW9uLiBJJ20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIGl0cyBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFueSBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZSwgYW5kIGhvdyBpdCBnZXRzIGludGVncmF0ZWQgaW50byB0aGUgb3ZlcmFsbCBidWlsZCBwcm9jZXNzLiBUbyBkbyB0aGF0LCBJJ20gZ29pbmcgdG8gemVybyBpbiBvbiBlaXRoZXIgYSBLY29uZmlnIGZpbGUsIG9yIHBvdGVudGlhbGx5IGEgTWFrZWZpbGUsIHdpdGhpbiB0aGlzIGRpcmVjdG9yeS4gVGhvc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cy4gRGVwZW5kaW5nIG9uIHdoYXQgSSBmaW5kLCBJJ2xsIHRoZW4gbW92ZSBvbnRvIGFuYWx5c2luZyBvdGhlciBmaWxlcyBhbmQgZGlyZWN0b3JpZXMsIGJ1dCB0aGVzZSBhcmUgbXkgc3RhcnRpbmcgcG9pbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzQ4LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6NDM6MTcuMjkzMDI1NDYxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJEaXJcIjogXCJuZXQvcHNwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkZpbGVzXCI6IFtcbiAgICBcInBzcC1ubC1nZW4uY1wiLFxuICAgIFwicHNwLW5sLWdlbi5oXCIsXG4gICAgXCJwc3AuaFwiLFxuICAgIFwicHNwX21haW4uY1wiLFxuICAgIFwicHNwX25sLmNcIixcbiAgICBcInBzcF9zb2NrLmNcIlxuICBdLFxuICBcIlN1YmRpcnNcIjogbnVsbFxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6NDM6MTcuMjkzMTM1NTdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MTI1Nzc5NjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBCdWlsZCBQcm9jZXNzIGZvciBgbmV0L3BzcGAqKlxuXG5BbHJpZ2h0LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlIGBuZXQvcHNwYCBkaXJlY3RvcnksIGFuZCBwcmVzdW1hYmx5IGl0cyBjb2RlLCBnZXRzIGJ1aWx0IGludG8gdGhlIGtlcm5lbC4gVGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIHdvdWxkIGJlIHdpdGhpbiB0aGUgbmV0d29yayBzdWJzeXN0ZW0ncyBjb25maWd1cmF0aW9uIGFuZCBidWlsZCBmaWxlcy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgYG5ldC9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUncyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgZW5hYmxlcyBgbmV0L3BzcGAuIFRoZW4sIEknbGwgbmVlZCB0byBsb29rIGF0IGBuZXQvTWFrZWZpbGVgIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIHJ1bGVzIGFuZCBkZXBlbmRlbmNpZXMuIEtub3dpbmcgd2hpY2ggS2NvbmZpZyBvcHRpb24gZW5hYmxlcyBpdCB3aWxsIGhlbHAgbWUgZmluZCB0aGUgYXNzb2NpYXRlZCBgb2JqLWAgbGluZXMgaW4gdGhlIE1ha2VmaWxlIGFuZCBzZWUgaG93IHRoZSBzb3VyY2UgZmlsZXMgd2l0aGluIGBuZXQvcHNwYCBhcmUgY29tcGlsZWQsIGxpbmtlZCwgYW5kIGluY29ycG9yYXRlZCBpbnRvIHRoZSBrZXJuZWwgaW1hZ2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBiaWcgcGljdHVyZTsgaXMgdGhpcyBhIG1vZHVsZSwgYnVpbHQtaW4sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBVbHRpbWF0ZWx5LCB1bmRlcnN0YW5kaW5nIHRoZSBidWlsZCBwcm9jZXNzIGlzIGtleSB0byBtb2RpZnlpbmcsIGRlYnVnZ2luZywgb3IgZW5hYmxpbmcgdGhpcyBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjEyLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjQzOjI0LjQxODkxNzA1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTYzMjcwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwc3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9NYWtlZmlsZT0yMD1vYmotJChDT05GSUdfVU5JWClcXHRcXHQrPSB1bml4L1xcbm5ldC9NYWtlZmlsZToyMTpvYmotJChDT05GSUdfSU5FVF9QU1ApXFx0XFx0Kz0gcHNwL1xcbm5ldC9NYWtlZmlsZS0yMi1vYmoteVxcdFxcdFxcdFxcdCs9IGlwdjYvXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjQzOjI0LjUyODU1NDExM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NTIxNzc4MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gZm9yIFBTUCBTdXBwb3J0KipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgUFNQIGlzIGVuYWJsZWQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgYENPTkZJR19JTkVUX1BTUGAuIEkga25vdyB0aGUgbmV0d29ya2luZyBjb25maWd1cmF0aW9uIGlzIHNwcmVhZCBhY3Jvc3MgYSBmZXcgZGlmZmVyZW50IGBLY29uZmlnYCBmaWxlcyDigJMgaXQncyBsaWtlbHkgaW4gYG5ldC9LY29uZmlnYCwgYG5ldC9pcHY0L0tjb25maWdgLCBvciBzb21ldGhpbmcgc2ltaWxhci4gSSdsbCBuZWVkIHRvIGxvb2sgdGhyb3VnaCB0aG9zZSB0byBwaW5wb2ludCB3aGVyZSBgQ09ORklHX0lORVRfUFNQYCBpcyBkZWZpbmVkIGFuZCB3aGF0IGl0cyBkZXBlbmRlbmNpZXMgbWlnaHQgYmUuIFRpbWUgdG8gZ2V0IG15IGdyZXAgb24gYW5kIG5hdmlnYXRlIHRob3NlIGNvbmZpZyBzdHJ1Y3R1cmVzISBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk1MSwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjQzOjI2LjQ4MDczNDk1OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQzNzUyMDk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJJTkVUX1BTUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZz0yMTA9Y29uZmlnIE1MWDVfRU5fUFNQXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWctMjExLVxcdGJvb2wgXFxcIk1lbGxhbm94IFRlY2hub2xvZ2llcyBzdXBwb3J0IGZvciBQU1AgY3J5cHRvZ3JhcGh5LW9mZmxvYWQgYWNjZWxlcmF0aW9uXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnOjIxMjpcXHRkZXBlbmRzIG9uIElORVRfUFNQXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWctMjEzLVxcdGRlcGVuZHMgb24gTUxYNV9DT1JFX0VOXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vTWFrZWZpbGU9MTk9ZW5kaWZcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vTWFrZWZpbGUtMjAtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL01ha2VmaWxlOjIxOmlmbmVxICgkKENPTkZJR19JTkVUX1BTUCksKVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9NYWtlZmlsZS0yMi1uZXRkZXZzaW0tb2JqcyArPSBwc3Aub1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oPTQ0NT1zdGF0aWMgaW5saW5lIHZvaWQgbnNpbV9tYWNzZWNfdGVhcmRvd24oc3RydWN0IG5ldGRldnNpbSAqbnMpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtNDQ5LVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDo0NTA6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00NTEtaW50IG5zaW1fcHNwX2luaXQoc3RydWN0IG5ldGRldnNpbSAqbnMpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0yMTU4PXN0cnVjdCBuZXRfZGV2aWNlIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjM4OC0jZW5kaWZcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjIzODk6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjM5MC1cXHRzdHJ1Y3QgcHNwX2RldiBfX3JjdVxcdCpwc3BfZGV2O1xcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD01MDQzPWVudW0gc2tiX2V4dF9pZCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUwNTgtI2VuZGlmXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MDU5OiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUX1BTUClcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTUwNjAtXFx0U0tCX0VYVF9QU1AsXFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaD0zMz1zdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrIHtcXG4tLVxcbmluY2x1ZGUvbmV0L2luZXRfdGltZXdhaXRfc29jay5oLTg0LVxcdHN0cnVjdCBpbmV0X2JpbmQyX2J1Y2tldFxcdCp0d190YjI7XFxuaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmg6ODU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKVxcbmluY2x1ZGUvbmV0L2luZXRfdGltZXdhaXRfc29jay5oLTg2LVxcdHN0cnVjdCBwc3BfYXNzb2MgX19yY3VcXHQgICpwc3BfYXNzb2M7XFxuLS1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9Mjc9c3RhdGljIGlubGluZSB2b2lkICpwc3BfYXNzb2NfZHJ2X2RhdGEoc3RydWN0IHBzcF9hc3NvYyAqcGFzKVxcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTMxLVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDozMjojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTMzLXVuc2lnbmVkIGludCBwc3Bfa2V5X3NpemUodTMyIHZlcnNpb24pO1xcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oPTM2NT1zdHJ1Y3Qgc29jayB7XFxuLS1cXG5pbmNsdWRlL25ldC9zb2NrLmgtNDY2LSNlbmRpZlxcbmluY2x1ZGUvbmV0L3NvY2suaDo0Njc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVRfUFNQKVxcbmluY2x1ZGUvbmV0L3NvY2suaC00NjgtXFx0c3RydWN0IHBzcF9hc3NvYyBfX3JjdVxcdCpwc3BfYXNzb2M7XFxuLS1cXG5uZXQvTWFrZWZpbGU9MjA9b2JqLSQoQ09ORklHX1VOSVgpXFx0XFx0Kz0gdW5peC9cXG5uZXQvTWFrZWZpbGU6MjE6b2JqLSQoQ09ORklHX0lORVRfUFNQKVxcdFxcdCs9IHBzcC9cXG5uZXQvTWFrZWZpbGUtMjItb2JqLXlcXHRcXHRcXHRcXHQrPSBpcHY2L1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NTE1MD1zdGF0aWMgY29uc3QgdTggc2tiX2V4dF90eXBlX2xlbltdID0ge1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNTE2NS0jZW5kaWZcXG5uZXQvY29yZS9za2J1ZmYuYzo1MTY2OiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUX1BTUClcXG5uZXQvY29yZS9za2J1ZmYuYy01MTY3LVxcdFtTS0JfRVhUX1BTUF0gPSBTS0JfRVhUX0NIVU5LU0laRU9GKHN0cnVjdCBwc3Bfc2tiX2V4dCksXFxuLS1cXG5uZXQvY29yZS9zb2NrLmM9MjQ4MD1zdHJ1Y3Qgc29jayAqc2tfY2xvbmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBnZnBfdCBwcmlvcml0eSxcXG4tLVxcbm5ldC9jb3JlL3NvY2suYy0yNDk3LSNlbmRpZlxcbm5ldC9jb3JlL3NvY2suYzoyNDk4OiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUX1BTUClcXG5uZXQvY29yZS9zb2NrLmMtMjQ5OS1cXHRSQ1VfSU5JVF9QT0lOVEVSKG5ld3NrLVxcdTAwM2Vwc3BfYXNzb2MsIE5VTEwpO1xcbi0tXFxubmV0L3BzcC9LY29uZmlnLTQtI1xcbm5ldC9wc3AvS2NvbmZpZzo1OmNvbmZpZyBJTkVUX1BTUFxcbm5ldC9wc3AvS2NvbmZpZy02LVxcdGJvb2wgXFxcIlBTUCBTZWN1cml0eSBQcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L3BzcC9NYWtlZmlsZS0yLVxcbm5ldC9wc3AvTWFrZWZpbGU6MzpvYmotJChDT05GSUdfSU5FVF9QU1ApICs9IHBzcC5vXFxubmV0L3BzcC9NYWtlZmlsZS00LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnPTM9Q09ORklHX0RFQlVHX0lORk9fQlRGX01PRFVMRVM9blxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZzo0OkNPTkZJR19JTkVUX1BTUD15XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnLTUtQ09ORklHX0lQVjY9eVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMDo0MzoyOC45MTgyNjQ4NDlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg4NDAzOTQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBQU1AgS2NvbmZpZyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHN0YXJ0ZWQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gYG5ldC9wc3AvS2NvbmZpZ2AuIEl0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4sIGdpdmVuIHdoYXQgd2UncmUgd29ya2luZyBvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBQU1AgbmV0d29yayBzdGFjayBmaXJzdC4gS25vd2luZyB0aGUgYXZhaWxhYmxlIHBhcmFtZXRlcnMgYW5kIHRoZWlyIGRlcGVuZGVuY2llcyB3aWxsIGJlIGNydWNpYWwgZm9yIHRoZSB3b3JrIGFoZWFkLiBUaGlzIEtjb25maWcgZmlsZSBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIGRlc2lnbiBjaG9pY2VzIGFuZCBwb3RlbnRpYWxseSByZXZlYWwgYW55IGV4aXN0aW5nIGxpbWl0YXRpb25zIG9yIGZlYXR1cmVzIHRoYXQgbWlnaHQgaW5mbHVlbmNlIG15IGFwcHJvYWNoLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gbGVhcm4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0NjIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMDo0MzozMS44MDIzMDgzNTlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3BzcC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFBTUCBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRjb25maWcgSU5FVF9QU1BcXG4gICA2OlxcdFxcdGJvb2wgXFxcIlBTUCBTZWN1cml0eSBQcm90b2NvbCBzdXBwb3J0XFxcIlxcbiAgIDc6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgODpcXHRcXHRzZWxlY3QgU0tCX0RFQ1JZUFRFRFxcbiAgIDk6XFx0XFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXFxuICAxMDpcXHRcXHRzZWxlY3QgU09DS19WQUxJREFURV9YTUlUXFxuICAxMTpcXHRcXHRoZWxwXFxuICAxMjpcXHRcXHRFbmFibGUga2VybmVsIHN1cHBvcnQgZm9yIHRoZSBQU1AgU2VjdXJpdHkgUHJvdG9jb2wgKFBTUCkuXFxuICAxMzpcXHRcXHRGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWU6XFxuICAxNDpcXHRcXHQgIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9nb29nbGUvcHNwL21haW4vZG9jL1BTUF9BcmNoX1NwZWMucGRmXFxuICAxNTpcXHRcXG4gIDE2OlxcdFxcdElmIHVuc3VyZSwgc2F5IE4uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjQzOjMxLjgwMjM5NDIzOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzY3MzA4NzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIGl0OlxuXG4qKkNoZWNraW5nIFNvY2tldCBUcmFuc21pc3Npb24gVmFsaWRhdGlvbioqXG5cbk9rYXksIHNvIHdlJ3JlIGRpdmluZyBpbnRvIHRoaXMgbmV0d29yayBjb2RlLCBhbmQgYmVmb3JlIHdlIHByb2NlZWQgdG9vIGZhciwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSd2ZSBsb29rZWQgYXQgdGhlIGltcGxpY2F0aW9ucyBvZiBgQ09ORklHX1NPQ0tfVkFMSURBVEVfWE1JVGAuIEl0J3MgY3J1Y2lhbCB3ZSBkb24ndCBvdmVybG9vayB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb247IGl0cyBpbXBhY3Qgb24gdGhlIGRhdGEgdHJhbnNtaXNzaW9uIGZsb3cgY291bGQgYmUgc2lnbmlmaWNhbnQuIEl0J3Mgb2Z0ZW4gZWFzeSB0byBtaXNzIGRldGFpbHMsIHNvIGEgcXVpY2sgY2hlY2sgbm93IGNvdWxkIHNhdmUgYSBiaWcgaGVhZGFjaGUgbGF0ZXIgb24uIExldCdzIHRyYWNlIGhvdyB0aGF0J3MgaGFuZGxlZC4gR29vZCBwcmFjdGljZSBpcyB0byBhbHdheXMgYWNjb3VudCBmb3IgdGhpcyBraW5kIG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGVhcmx5IGluIHRoZSBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODQ4LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMDo0MzozNC4xNjk3MDU1OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE0OTAyMzAzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJTT0NLX1ZBTElEQVRFX1hNSVRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmg9MzM9c3RydWN0IGluZXRfdGltZXdhaXRfc29jayB7XFxuLS1cXG5pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaC04Ny0jZW5kaWZcXG5pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaDo4ODojaWZkZWYgQ09ORklHX1NPQ0tfVkFMSURBVEVfWE1JVFxcbmluY2x1ZGUvbmV0L2luZXRfdGltZXdhaXRfc29jay5oLTg5LVxcdHN0cnVjdCBza19idWZmKlxcdFxcdCgqdHdfdmFsaWRhdGVfeG1pdF9za2IpKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbmluY2x1ZGUvbmV0L3NvY2suaD0zNjU9c3RydWN0IHNvY2sge1xcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oLTUxNS1cXHRuZXRkZXZfZmVhdHVyZXNfdFxcdHNrX3JvdXRlX2NhcHM7XFxuaW5jbHVkZS9uZXQvc29jay5oOjUxNjojaWZkZWYgQ09ORklHX1NPQ0tfVkFMSURBVEVfWE1JVFxcbmluY2x1ZGUvbmV0L3NvY2suaC01MTctXFx0c3RydWN0IHNrX2J1ZmYqXFx0XFx0KCpza192YWxpZGF0ZV94bWl0X3NrYikoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oPTIzMTU9c3RhdGljIGlubGluZSBib29sIHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYihjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuaW5jbHVkZS9uZXQvc29jay5oLTIzMTYte1xcbmluY2x1ZGUvbmV0L3NvY2suaDoyMzE3OiNpZmRlZiBDT05GSUdfU09DS19WQUxJREFURV9YTUlUXFxuaW5jbHVkZS9uZXQvc29jay5oLTIzMTgtXFx0cmV0dXJuICEhc2stXFx1MDAzZXNrX3ZhbGlkYXRlX3htaXRfc2tiO1xcbi0tXFxubmV0L0tjb25maWc9NDY1PWNvbmZpZyBHUk9fQ0VMTFNcXG4tLVxcbm5ldC9LY29uZmlnLTQ2OC1cXG5uZXQvS2NvbmZpZzo0Njk6Y29uZmlnIFNPQ0tfVkFMSURBVEVfWE1JVFxcbm5ldC9LY29uZmlnLTQ3MC1cXHRib29sXFxuLS1cXG5uZXQvY29yZS9kZXYuYz00MDExPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqc2tfdmFsaWRhdGVfeG1pdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTQwMTMte1xcbm5ldC9jb3JlL2Rldi5jOjQwMTQ6I2lmZGVmIENPTkZJR19TT0NLX1ZBTElEQVRFX1hNSVRcXG5uZXQvY29yZS9kZXYuYy00MDE1LVxcdHN0cnVjdCBza19idWZmICooKnNrX3ZhbGlkYXRlKShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC9pbmV0X3RpbWV3YWl0X3NvY2suYz0xNjg9c3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqaW5ldF90d3NrX2FsbG9jKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L2luZXRfdGltZXdhaXRfc29jay5jLTIwNC1cXHRcXHR0aW1lcl9zZXR1cChcXHUwMDI2dHctXFx1MDAzZXR3X3RpbWVyLCB0d190aW1lcl9oYW5kbGVyLCAwKTtcXG5uZXQvaXB2NC9pbmV0X3RpbWV3YWl0X3NvY2suYzoyMDU6I2lmZGVmIENPTkZJR19TT0NLX1ZBTElEQVRFX1hNSVRcXG5uZXQvaXB2NC9pbmV0X3RpbWV3YWl0X3NvY2suYy0yMDYtXFx0XFx0dHctXFx1MDAzZXR3X3ZhbGlkYXRlX3htaXRfc2tiID0gTlVMTDtcXG4tLVxcbm5ldC9wc3AvS2NvbmZpZz01PWNvbmZpZyBJTkVUX1BTUFxcbi0tXFxubmV0L3BzcC9LY29uZmlnLTktXFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXFxubmV0L3BzcC9LY29uZmlnOjEwOlxcdHNlbGVjdCBTT0NLX1ZBTElEQVRFX1hNSVRcXG5uZXQvcHNwL0tjb25maWctMTEtXFx0aGVscFxcbi0tXFxubmV0L3Rscy9LY29uZmlnPTE5PWNvbmZpZyBUTFNfREVWSUNFXFxuLS1cXG5uZXQvdGxzL0tjb25maWctMjItXFx0c2VsZWN0IFNLQl9ERUNSWVBURURcXG5uZXQvdGxzL0tjb25maWc6MjM6XFx0c2VsZWN0IFNPQ0tfVkFMSURBVEVfWE1JVFxcbm5ldC90bHMvS2NvbmZpZy0yNC1cXHRzZWxlY3QgU09DS19SWF9RVUVVRV9NQVBQSU5HXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjQzOjM2LjMxODczNDY0NVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjM5MzQ1MTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQYXRjaCBDaGFuZ2VzIGZvciBOZXR3b3JrIFNvY2tldCBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZXNlIHBhdGNoIGNoYW5nZXMuIEkgc2VlIHdlJ3JlIG1vZGlmeWluZyB0aGUgc29ja2V0LXJlbGF0ZWQgY29kZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGRhdGEgdmFsaWRhdGlvbiBhbmQgcG90ZW50aWFsIGRlY3J5cHRpb24gZnVuY3Rpb25hbGl0aWVzLiBUaGUgZmlyc3QgY2hhbmdlLCBpbiBgaW5jbHVkZS9uZXQvc29jay5oYCwgaW50cm9kdWNlcyBhIGhlbHBlciBmdW5jdGlvbiwgYHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYmAuIFRoaXMgc2VlbXMgdG8gY2hlY2sgZm9yIGEgc3BlY2lmaWMgYHNrX3ZhbGlkYXRlX3htaXRfc2tiYCBmbGFnLCBsaWtlbHkgY29udHJvbGxlZCBieSBhIGBDT05GSUdfU09DS19WQUxJREFURV9YTUlUYCBwcmVwcm9jZXNzb3IgZGVmaW5lLiBNYWtlcyBzZW5zZTsgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZm9yIHBlcmZvcm1hbmNlIGFuZCBmZWF0dXJlIGVuYWJsZW1lbnQuIElmIHRoZSBmbGFnIGlzIHNldCwgaXQncyBjaGVja2luZyBpZiB0aGUgc29ja2V0IGlzIGNvbmZpZ3VyZWQgdG8gdmFsaWRhdGUgU0tCcyBkdXJpbmcgdHJhbnNtaXNzaW9uLlxuXG5OZXh0LCBpbiBgbmV0L2NvcmUvc29jay5jYCwgdGhlIGBza19oYXNfZGVjcnlwdF91c2VyYCBmdW5jdGlvbidzIGRlZmluaXRpb24gcmV2ZWFscyBpdHMgbG9naWMuIEl0J3MgY2hlY2tpbmcgaWYgYSBzb2NrZXQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgUFNQIChwcmVzdW1hYmx5IHNvbWUga2luZCBvZiBwcm90ZWN0aW9uIHNjaGVtZSkgKm9yKiBpZiBpdCdzIGFuIGludGVybmV0IHNvY2tldCB3aXRoIGEgY29uZmlndXJlZCBVTFAgKFVzZXItTGV2ZWwgUHJvdG9jb2wpLCBsaWtlbHkgZm9yIFRMUyBzdXBwb3J0LiBJbnRlcmVzdGluZyBpbnRlcnBsYXkgYmV0d2VlbiBkaWZmZXJlbnQgc2VjdXJpdHkgbGF5ZXJzIGFuZCBwcm90b2NvbCBoYW5kbGVycy5cblxuRmluYWxseSwgdGhlIG1vc3QgaW50ZXJlc3RpbmcgY2hhbmdlIGlzIGluIGBuZXQvaXB2NC90Y3BfdWxwLmNgLCB3aXRoaW4gdGhlIGBfX3RjcF9zZXRfdWxwYCBmdW5jdGlvbi4gSXQgc2VlbXMgdG8gYmUgcHJldmVudGluZyB0aGUgc2V0dGluZyBvZiBhIFVMUCBpZiBlaXRoZXIgYHNrX2hhc19kZWNyeXB0X3VzZXJgICpvciogYHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYmAgcmV0dXJucyB0cnVlLiBUaGUgY29kZSBpbmNsdWRlcyBhIGNoZWNrIHRoYXQgdGhyb3dzIGFuIGBFSU5WQUxgIGVycm9yIGFuZCBqdW1wcyBvdXQgaWYgdGhlIGFmb3JlbWVudGlvbmVkIGZ1bmN0aW9ucyBldmFsdWF0ZSB0byB0cnVlLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaXMgZXN0YWJsaXNoaW5nIGEgY29uc3RyYWludCBvbiB3aGVuIFVMUCAoc3BlY2lmaWNhbGx5IFRMUykgY2FuIGJlIGFwcGxpZWQgdG8gVENQIHNvY2tldHMuIEl0IHNlZW1zIHdlJ3JlIGd1YXJkaW5nIGFnYWluc3Qgc2l0dWF0aW9ucyB3aGVyZSB0aGUgc29ja2V0J3MgZGF0YSBuZWVkcyB0byBiZSB2YWxpZGF0ZWQgb3IgZGVjcnlwdGVkLiBUaGlzIHByb2JhYmx5IG1lYW5zIGEgc3BlY2lmaWMgZGF0YSB2YWxpZGF0aW9uIG9yIHNlY3VyaXR5IHNjaGVtZSBpcyBhbHJlYWR5IGVuYWJsZWQgb24gdGhhdCBzb2NrZXQgYW5kIHRoZSBVTFAgc2V0dXAgd291bGQgYmUgcmVkdW5kYW50IG9yIHdvdWxkIGNhdXNlIGlzc3VlcyAocG9zc2libHkgZHVlIHRvIGluY29tcGF0aWJsZSBzZWN1cml0eSBtb2RlbHMgb3IgYW4gb3JkZXIgb2Ygb3BlcmF0aW9ucyBjb25mbGljdCkuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGJyb2FkZXIgY29udGV4dCBvZiBgX190Y3Bfc2V0X3VscGAgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMgYW5kIHRoZSBleGFjdCByZWFzb25pbmcgYmVoaW5kIHRoaXMgY29uc3RyYWludC4gSXQgc2VlbXMgd2UgYXJlIHRyeWluZyB0byBwcmV2ZW50IGEgcG90ZW50aWFsIGNvbmZsaWN0IG9yIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4NDIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6NDM6MzkuOTU4MDgyOTE4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3BfdWxwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTIwOlxcdFxcdGlmICghaWNzay1cXHUwMDNlaWNza191bHBfb3BzKVxcbiAxMjE6XFx0XFx0XFx0cmV0dXJuO1xcbiAxMjI6XFx0XFxuIDEyMzpcXHRcXHRpZiAoaWNzay1cXHUwMDNlaWNza191bHBfb3BzLVxcdTAwM2VyZWxlYXNlKVxcbiAxMjQ6XFx0XFx0XFx0aWNzay1cXHUwMDNlaWNza191bHBfb3BzLVxcdTAwM2VyZWxlYXNlKHNrKTtcXG4gMTI1OlxcdFxcdG1vZHVsZV9wdXQoaWNzay1cXHUwMDNlaWNza191bHBfb3BzLVxcdTAwM2Vvd25lcik7XFxuIDEyNjpcXHRcXG4gMTI3OlxcdFxcdGljc2stXFx1MDAzZWljc2tfdWxwX29wcyA9IE5VTEw7XFxuIDEyODpcXHR9XFxuIDEyOTpcXHRcXG4gMTMwOlxcdHN0YXRpYyBpbnQgX190Y3Bfc2V0X3VscChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCB0Y3BfdWxwX29wcyAqdWxwX29wcylcXG4gMTMxOlxcdHtcXG4gMTMyOlxcdFxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG4gMTMzOlxcdFxcdGludCBlcnI7XFxuIDEzNDpcXHRcXG4gMTM1OlxcdFxcdGVyciA9IC1FRVhJU1Q7XFxuIDEzNjpcXHRcXHRpZiAoaWNzay1cXHUwMDNlaWNza191bHBfb3BzKVxcbiAxMzc6XFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbiAxMzg6XFx0XFxuIDEzOTpcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiAxNDA6XFx0XFx0aWYgKHNrX2hhc19kZWNyeXB0X3VzZXIoc2spIHx8IHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYihzaykpXFxuIDE0MTpcXHRcXHRcXHRnb3RvIG91dF9lcnI7XFxuIDE0MjpcXHRcXG4gMTQzOlxcdFxcdGlmIChzay1cXHUwMDNlc2tfc29ja2V0KVxcbiAxNDQ6XFx0XFx0XFx0Y2xlYXJfYml0KFNPQ0tfU1VQUE9SVF9aQywgXFx1MDAyNnNrLVxcdTAwM2Vza19zb2NrZXQtXFx1MDAzZWZsYWdzKTtcXG4gMTQ1OlxcdFxcbiAxNDY6XFx0XFx0ZXJyID0gLUVOT1RDT05OO1xcbiAxNDc6XFx0XFx0aWYgKCF1bHBfb3BzLVxcdTAwM2VjbG9uZSBcXHUwMDI2XFx1MDAyNiBzay1cXHUwMDNlc2tfc3RhdGUgPT0gVENQX0xJU1RFTilcXG4gMTQ4OlxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4gMTQ5OlxcdFxcbiAxNTA6XFx0XFx0ZXJyID0gdWxwX29wcy1cXHUwMDNlaW5pdChzayk7XFxuIDE1MTpcXHRcXHRpZiAoZXJyKVxcbiAxNTI6XFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbiAxNTM6XFx0XFxuIDE1NDpcXHRcXHRpY3NrLVxcdTAwM2VpY3NrX3VscF9vcHMgPSB1bHBfb3BzO1xcbiAxNTU6XFx0XFx0cmV0dXJuIDA7XFxuIDE1NjpcXHRvdXRfZXJyOlxcbiAxNTc6XFx0XFx0bW9kdWxlX3B1dCh1bHBfb3BzLVxcdTAwM2Vvd25lcik7XFxuIDE1ODpcXHRcXHRyZXR1cm4gZXJyO1xcbiAxNTk6XFx0fVxcbiAxNjA6XFx0XFxuIDE2MTpcXHRpbnQgdGNwX3NldF91bHAoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBjaGFyICpuYW1lKVxcbiAxNjI6XFx0e1xcbiAxNjM6XFx0XFx0Y29uc3Qgc3RydWN0IHRjcF91bHBfb3BzICp1bHBfb3BzO1xcbiAxNjQ6XFx0XFxuIDE2NTpcXHRcXHRzb2NrX293bmVkX2J5X21lKHNrKTtcXG4gMTY2OlxcdFxcbiAxNjc6XFx0XFx0dWxwX29wcyA9IF9fdGNwX3VscF9maW5kX2F1dG9sb2FkKG5hbWUpO1xcbiAxNjg6XFx0XFx0aWYgKCF1bHBfb3BzKVxcbiAxNjk6XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjQzOjM5Ljk1ODIxMjcyOFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzQwMjQzODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgU29ja2V0IEFzc29jaWF0aW9uKipcblxuT2theSwgc28gd2UncmUgZGl2aW5nIGJhY2sgaW50byB0aGUgYG5ldC9wc3BgIGRpcmVjdG9yeS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgd2UgbmVlZCB0byBjaGVjayBvdXQgYHBzcF9zb2NrLmNgIGFuZCB6ZXJvIGluIG9uIHRoZSBgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4YCBmdW5jdGlvbi4gTXkgaW5zdGluY3QgaXMgdGhhdCB0aGlzIGFyZWEgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIHN5c3RlbSBzZXRzIHVwIGFuZCBtYW5hZ2VzIHRoZSBhc3NvY2lhdGlvbiBiZXR3ZWVuIHNvY2tldHMgYW5kIHJlY2VpdmUgcGF0aHMuIFdlIG5lZWQgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IGFzc29jaWF0aW9uLCBhbmQgaG93IGl0IGlzIG1hbmFnZWQgd2l0aGluIHRoZSByZWNlaXZlIHByb2Nlc3NpbmcgcGF0aC4gTGV0J3Mgc2VlIGlmIHRoaXMgZnVuY3Rpb24gcmV2ZWFscyBzb21ldGhpbmcgd2UncmUgbWlzc2luZy4gSSBzdXNwZWN0IGEgZGV0YWlsZWQgcmV2aWV3IG9mIHRoaXMgc2VjdGlvbiBtaWdodCBwcm92aWRlIGluc2lnaHRzIGludG8gdGhlIHJvb3QgY2F1c2Ugd2UgYXJlIGNoYXNpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzcxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMDo0Mzo0MS42OTg0NTk1OTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9wc3AvcHNwX3NvY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzA6XFx0fVxcbiAxMzE6XFx0XFxuIDEzMjpcXHRpbnQgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9hc3NvYyAqcGFzLFxcbiAxMzM6XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgcHNwX2tleV9wYXJzZWQgKmtleSxcXG4gMTM0OlxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiAxMzU6XFx0e1xcbiAxMzY6XFx0XFx0aW50IGVycjtcXG4gMTM3OlxcdFxcbiAxMzg6XFx0XFx0bWVtY3B5KFxcdTAwMjZwYXMtXFx1MDAzZXJ4LCBrZXksIHNpemVvZigqa2V5KSk7XFxuIDEzOTpcXHRcXG4gMTQwOlxcdFxcdGxvY2tfc29jayhzayk7XFxuIDE0MTpcXHRcXG4gMTQyOlxcdFxcdGlmIChwc3Bfc2tfYXNzb2Moc2spKSB7XFxuIDE0MzpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJTb2NrZXQgYWxyZWFkeSBoYXMgUFNQIHN0YXRlXFxcIik7XFxuIDE0NDpcXHRcXHRcXHRlcnIgPSAtRUJVU1k7XFxuIDE0NTpcXHRcXHRcXHRnb3RvIGV4aXRfdW5sb2NrO1xcbiAxNDY6XFx0XFx0fSBlbHNlIGlmIChza19oYXNfZGVjcnlwdF91c2VyKHNrKSB8fCBza19oYXNfdmFsaWRhdGVfeG1pdF9za2Ioc2spKSB7XFxuIDE0NzpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJTb2NrZXQgaGFzIGluY29tcGF0aWJsZSBzdGF0ZVxcXCIpO1xcbiAxNDg6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4gMTQ5OlxcdFxcdFxcdGdvdG8gZXhpdF91bmxvY2s7XFxuIDE1MDpcXHRcXHR9XFxuIDE1MTpcXHRcXG4gMTUyOlxcdFxcdHJlZmNvdW50X2luYyhcXHUwMDI2cGFzLVxcdTAwM2VyZWZjbnQpO1xcbiAxNTM6XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHNrLVxcdTAwM2Vwc3BfYXNzb2MsIHBhcyk7XFxuIDE1NDpcXHRcXHRlcnIgPSAwO1xcbiAxNTU6XFx0XFxuIDE1NjpcXHRleGl0X3VubG9jazpcXG4gMTU3OlxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuIDE1ODpcXHRcXG4gMTU5OlxcdFxcdHJldHVybiBlcnI7XFxuIDE2MDpcXHR9XFxuIDE2MTpcXHRcXG4gMTYyOlxcdHN0YXRpYyBpbnQgcHNwX3NvY2tfcmVjdl9xdWV1ZV9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwc3BfYXNzb2MgKnBhcylcXG4gMTYzOlxcdHtcXG4gMTY0OlxcdFxcdHN0cnVjdCBwc3Bfc2tiX2V4dCAqcHNlO1xcbiAxNjU6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gMTY2OlxcdFxcbiAxNjc6XFx0XFx0c2tiX3JidHJlZV93YWxrKHNrYiwgXFx1MDAyNnRjcF9zayhzayktXFx1MDAzZW91dF9vZl9vcmRlcl9xdWV1ZSkge1xcbiAxNjg6XFx0XFx0XFx0cHNlID0gc2tiX2V4dF9maW5kKHNrYiwgU0tCX0VYVF9QU1ApO1xcbiAxNjk6XFx0XFx0XFx0aWYgKCFwc3BfcHNlX21hdGNoZXNfcGFzKHBzZSwgcGFzKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6NDM6NDEuNjk4NTc3MzI3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzNjM3ODA4NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gdGhlIFBTUCBTb2NrZXQgQXNzb2NpYXRpb24gTG9naWMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgYG5ldC9wc3AvYCBkaXJlY3RvcnkuIEZpcnN0IHRoaW5ncyBmaXJzdCwgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IGV4YWN0bHkgUFNQIGlzIGluIHRoaXMgY29udGV4dC4gSXMgaXQgYSBjdXN0b20gcHJvdG9jb2wsIGEgcGFydGljdWxhciBoYXJkd2FyZSBhYnN0cmFjdGlvbiwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFVuZGVyc3RhbmRpbmcgdGhlICpwdXJwb3NlKiBvZiBQU1AgaXMgY3JpdGljYWwgYmVmb3JlIEkgY2FuIG1ha2Ugc2Vuc2Ugb2YgaXRzIHVzYWdlLiBHb3R0YSBnZXQgdGhlIGhpZ2gtbGV2ZWwgY29udGV4dC4gSG93IGlzIGl0ICpkZXNpZ25lZCogdG8gYmUgdXNlZD9cblxuTmV4dCwgbGV0J3MgemVybyBpbiBvbiB0aGUgZnVuY3Rpb24gYHBzcF9zb2NrX2Fzc29jX3NldF9yeGAuIFRoaXMgbGlrZWx5IHBsYXlzIGEga2V5IHJvbGUgaW4gYXNzb2NpYXRpbmcgaW5jb21pbmcgdHJhZmZpYyB3aXRoIGEgc3BlY2lmaWMgc29ja2V0LCBhbmQgdGhlIFwicnhcIiBwYXJ0IHRlbGxzIG1lIGl0J3MgaGFuZGxpbmcgdGhlIHJlY2VpdmluZyBzaWRlIG9mIHRoaW5ncy4gU28sIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIHRoZSBzeXN0ZW0gaWRlbnRpZmllcyBhbmQgcm91dGVzIGluY29taW5nIHBhY2tldHMgb3IgZGF0YSBzdHJlYW1zIGJhc2VkIG9uIFBTUC4gSSdsbCBuZWVkIHRvIHVzZSBgZ3JlcGAgKG9yIG15IHByZWZlcnJlZCBzZWFyY2ggdG9vbCkgdG8gZmluZCB0aGUgY2FsbGluZyBsb2NhdGlvbnMgb2YgYHBzcF9zb2NrX2Fzc29jX3NldF9yeGAuIFRoaXMgd2lsbCBwYWludCB0aGUgYmlnZ2VyIHBpY3R1cmU6IHdoYXQgb3RoZXIgY29tcG9uZW50cyBhcmUgaW52b2x2ZWQsIHdoYXQgdHJpZ2dlcnMgdGhpcyBhc3NvY2lhdGlvbiBwcm9jZXNzLCBhbmQgd2hlcmUgaXQgZml0cyBpbiB0aGUgZGF0YSBmbG93LiBGaW5kaW5nIHRob3NlIGNhbGxlcnMgd2lsbCBnaXZlIG1lIHZhbHVhYmxlIGNsdWVzIHRvIGl0cyBmdW5jdGlvbiBhbmQgc3RydWN0dXJlIHdpdGhpbiB0aGUgd2hvbGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTIxMCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6NDM6NDUuMDYyMzYxMzAyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzIxODY3NzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBzcF9zb2NrX2Fzc29jX3NldF9yeFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcHNwL3BzcC5oPTI1PXZvaWQgcHNwX2Rldl90eF9rZXlfZGVsKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfYXNzb2MgKnBhcyk7XFxubmV0L3BzcC9wc3AuaDoyNjppbnQgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9hc3NvYyAqcGFzLFxcbm5ldC9wc3AvcHNwLmgtMjctXFx0XFx0XFx0ICBzdHJ1Y3QgcHNwX2tleV9wYXJzZWQgKmtleSxcXG4tLVxcbm5ldC9wc3AvcHNwX25sLmM9NzcwPWludCBwc3BfbmxfcnhfYXNzb2NfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L3BzcC9wc3BfbmwuYy04MDktXFxubmV0L3BzcC9wc3BfbmwuYzo4MTA6XFx0ZXJyID0gcHNwX3NvY2tfYXNzb2Nfc2V0X3J4KHNvY2tldC1cXHUwMDNlc2ssIHBhcywgXFx1MDAyNmtleSwgaW5mby1cXHUwMDNlZXh0YWNrKTtcXG5uZXQvcHNwL3BzcF9ubC5jLTgxMS1cXHRpZiAoZXJyKSB7XFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmM9MTI0PXZvaWQgcHNwX3NrX2Fzc29jX2ZyZWUoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L3BzcC9wc3Bfc29jay5jLTEzMS1cXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTMyOmludCBwc3Bfc29ja19hc3NvY19zZXRfcngoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsXFxubmV0L3BzcC9wc3Bfc29jay5jLTEzMy1cXHRcXHRcXHQgIHN0cnVjdCBwc3Bfa2V5X3BhcnNlZCAqa2V5LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMDo0Mzo0Ny4zODQyMzUzMloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzQ3MTMzNzcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgTmV0bGluayBhbmQgUFNQIEludGVyYWN0aW9ucyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIG5ldGxpbmsgUFNQIGJ1c2luZXNzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBpdCBhbGwgaGFuZ3MgdG9nZXRoZXIuIEkgc2hvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhlIG5ldGxpbmsgaW1wbGVtZW50YXRpb24gb2YgUFNQLCBhbmQgd2hpbGUgSSdtIGF0IGl0LCBJJ2xsIHJlZnJlc2ggbXkgbWVtb3J5IG9mIGBza19oYXNfZGVjcnlwdF91c2VyYCwgYW5kIHRoZSBpbm5lciB3b3JraW5ncyBvZiBgX190Y3Bfc2V0X3VscGAsIGFuZCBzaW1pbGFyIHJlbGF0ZWQgZnVuY3Rpb25zLiBBaCwgcmlnaHQhIGB0Y3Bfc2V0X3VscGAgaXMgaW52b2tlZCB0aHJvdWdoIGBzZXRzb2Nrb3B0YCB3aXRoIHRoZSBgU09MX1RDUGAgYW5kIGBUQ1BfVUxQYCBvcHRpb25zLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LlxuXG5Ob3csIHdoZXJlIGRvZXMgdGhlIFBTUCBuZXRsaW5rIHByb2Nlc3NpbmcgYWN0dWFsbHkgaGFwcGVuPyBBaCwgeWVzLCBgcHNwX25sX3J4X2Fzc29jX2RvaXRgIGlzIHdoYXQncyBjYWxsZWQgd2hlbiByZWNlaXZpbmcgdHJhZmZpYyBmcm9tIHRoZSBQU1AgbmV0bGluayBmYW1pbHkuIFRoaXMgZ2l2ZXMgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGRhdGEgcGF0aC5cblxuSSB3b25kZXLigKYgY2FuIHdlIGxldmVyYWdlIG5ldGRldnNpbSBmb3IgdGVzdGluZyBQU1A/IEl0IHdvdWxkIGJlIGdyZWF0IHRvIGlzb2xhdGUgYW5kIHRlc3QgdGhpcyB3aXRob3V0IGhhdmluZyB0byBkZWFsIHdpdGggcmVhbCBoYXJkd2FyZS4gSSdsbCBuZWVkIHRvIHNlZSBpZiB0aGVyZSdzIGFueSBtZW50aW9uIG9mIGBuc2ltX3BzcGAsIG9yIGhvdyBQU1AtcmVsYXRlZCBkZXZpY2VzIGFyZSByZWdpc3RlcmVkIHdpdGhpbiBuZXRkZXZzaW0uIFRpbWUgdG8gYnJlYWsgb3V0IGdyZXAgYW5kIHNlZSB3aGF0IHRoZSBrZXJuZWwgc291cmNlIGhhcyB0byBvZmZlciFcblxuXG4iLCJJbnB1dFRva2VucyI6MTE5MDYsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6NDM6NTAuMTMxMzcxMzEyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjM0ODg1MTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5zaW1fcHNwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYz0xMDM9c3RhdGljIGludCBuc2ltX2ZvcndhcmRfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICp0eF9kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTE3LVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYzoxMTg6XFx0bnNpbV9wc3BfaGFuZGxlX2V4dChza2IsIHBzcF9leHQpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXYuYy0xMTktXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM9MTA0MD1zdGF0aWMgaW50IG5zaW1faW5pdF9uZXRkZXZzaW0oc3RydWN0IG5ldGRldnNpbSAqbnMpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTA3Ni1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmM6MTA3NzpcXHRlcnIgPSBuc2ltX3BzcF9pbml0KG5zKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTA3OC1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jPTExNzU9dm9pZCBuc2ltX2Rlc3Ryb3koc3RydWN0IG5ldGRldnNpbSAqbnMpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTE5MC1cXHRpZiAobnNpbV9kZXZfcG9ydF9pc19wZihucy1cXHUwMDNlbnNpbV9kZXZfcG9ydCkpXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldi5jOjExOTE6XFx0XFx0bnNpbV9wc3BfdW5pbml0KG5zKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2LmMtMTE5Mi1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD00NDU9c3RhdGljIGlubGluZSB2b2lkIG5zaW1fbWFjc2VjX3RlYXJkb3duKHN0cnVjdCBuZXRkZXZzaW0gKm5zKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQ1MC0jaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVF9QU1ApXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQ1MTppbnQgbnNpbV9wc3BfaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucyk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQ1Mjp2b2lkIG5zaW1fcHNwX3VuaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucyk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQ1Mzp2b2lkIG5zaW1fcHNwX2hhbmRsZV9leHQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNrYl9leHQgKnBzcF9leHQpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00NTQtZW51bSBza2JfZHJvcF9yZWFzb25cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg9NDU1PW5zaW1fZG9fcHNwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRkZXZzaW0gKm5zLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQ1Ny0jZWxzZVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDo0NTg6c3RhdGljIGlubGluZSBpbnQgbnNpbV9wc3BfaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucykgeyByZXR1cm4gMDsgfVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDo0NTk6c3RhdGljIGlubGluZSB2b2lkIG5zaW1fcHNwX3VuaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucykge31cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmgtNDYwLXN0YXRpYyBpbmxpbmUgZW51bSBza2JfZHJvcF9yZWFzb25cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD00Njc9c3RhdGljIGlubGluZSB2b2lkXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oOjQ2ODpuc2ltX3BzcF9oYW5kbGVfZXh0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBza2JfZXh0ICpwc3BfZXh0KSB7fVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00NjktI2VuZGlmXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMTAtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjExOnZvaWQgbnNpbV9wc3BfaGFuZGxlX2V4dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2tiX2V4dCAqcHNwX2V4dClcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMTIte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jPTEyMz1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjEyNDpuc2ltX3BzcF9zZXRfY29uZmlnKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfZGV2X2NvbmZpZyAqY29uZixcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMTI1LVxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM9MTg5PXN0YXRpYyB2b2lkIG5zaW1fZ2V0X3N0YXRzKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfZGV2X3N0YXRzICpzdGF0cylcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yMDMtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjIwNDpzdGF0aWMgc3RydWN0IHBzcF9kZXZfb3BzIG5zaW1fcHNwX29wcyA9IHtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM6MjA1OlxcdC5zZXRfY29uZmlnXFx0PSBuc2ltX3BzcF9zZXRfY29uZmlnLFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yMDYtXFx0LnJ4X3NwaV9hbGxvY1xcdD0gbnNpbV9yeF9zcGlfYWxsb2MsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMjEyLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzoyMTM6c3RhdGljIHN0cnVjdCBwc3BfZGV2X2NhcHMgbnNpbV9wc3BfY2FwcyA9IHtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMjE0LVxcdC52ZXJzaW9ucyA9IDEgXFx1MDAzY1xcdTAwM2MgUFNQX1ZFUlNJT05fSERSMF9BRVNfR0NNXzEyOCB8XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMjIwLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzoyMjE6c3RhdGljIHZvaWQgX19uc2ltX3BzcF91bmluaXQoc3RydWN0IG5ldGRldnNpbSAqbnMsIGJvb2wgdGVhcmRvd24pXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTIyMi17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMjM1LVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzoyMzY6dm9pZCBuc2ltX3BzcF91bmluaXQoc3RydWN0IG5ldGRldnNpbSAqbnMpXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTIzNy17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMjM5LVxcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNm5zLVxcdTAwM2Vwc3AucmVyZWdfbG9jayk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjI0MDpcXHRfX25zaW1fcHNwX3VuaW5pdChucywgdHJ1ZSk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTI0MS19XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM9MjQzPXN0YXRpYyBzc2l6ZV90XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjI0NDpuc2ltX3BzcF9yZXJlZ193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmRhdGEsIHNpemVfdCBjb3VudCxcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMjQ1LVxcdFxcdCAgICAgbG9mZl90ICpwcG9zKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTI1MS1cXHRtdXRleF9sb2NrKFxcdTAwMjZucy1cXHUwMDNlcHNwLnJlcmVnX2xvY2spO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzoyNTI6XFx0X19uc2ltX3BzcF91bmluaXQobnMsIGZhbHNlKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMjUzLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzoyNTQ6XFx0cHNkID0gcHNwX2Rldl9jcmVhdGUobnMtXFx1MDAzZW5ldGRldiwgXFx1MDAyNm5zaW1fcHNwX29wcywgXFx1MDAyNm5zaW1fcHNwX2NhcHMsIG5zKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMjU1LVxcdGlmIChJU19FUlIocHNkKSkge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTI2Ni1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM6MjY3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5zaW1fcHNwX3JlcmVnX2ZvcHMgPSB7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTI2OC1cXHQub3BlbiA9IHNpbXBsZV9vcGVuLFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzoyNjk6XFx0LndyaXRlID0gbnNpbV9wc3BfcmVyZWdfd3JpdGUsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTI3MC1cXHQubGxzZWVrID0gZ2VuZXJpY19maWxlX2xsc2VlayxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yNzMtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjI3NDppbnQgbnNpbV9wc3BfaW5pdChzdHJ1Y3QgbmV0ZGV2c2ltICpucylcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMjc1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yNzgtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjI3OTpcXHRwc2QgPSBwc3BfZGV2X2NyZWF0ZShucy1cXHUwMDNlbmV0ZGV2LCBcXHUwMDI2bnNpbV9wc3Bfb3BzLCBcXHUwMDI2bnNpbV9wc3BfY2FwcywgbnMpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yODAtXFx0aWYgKElTX0VSUihwc2QpKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jLTI4Ni1cXHRucy1cXHUwMDNlcHNwLnJlcmVnID0gZGVidWdmc19jcmVhdGVfZmlsZShcXFwicHNwX3JlcmVnXFxcIiwgMDIwMCwgZGRpciwgbnMsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjI4NzpcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNm5zaW1fcHNwX3JlcmVnX2ZvcHMpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYy0yODgtXFx0cmV0dXJuIDA7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk9NTM4PWRlZiBkYXRhX3N0YWxlX2tleShjZmcpOlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTU3MS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk6NTcyOmRlZiBfX25zaW1fcHNwX3JlcmVnKGNmZyk6XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTU3My0gICAgIyBUaGUgUFNQIGRldiBJRCB3aWxsIGNoYW5nZSwgcmVtZW1iZXIgd2hhdCB3YXMgdGhlcmUgYmVmb3JlXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk9NTg1PWRlZiByZW1vdmFsX2RldmljZV9yeChjZmcpOlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTU5OS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk6NjAwOiAgICAgICAgX19uc2ltX3BzcF9yZXJlZyhjZmcpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTYwMS0gICAgZmluYWxseTpcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weT02MDU9ZGVmIHJlbW92YWxfZGV2aWNlX2JpKGNmZyk6XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHktNjIxLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwic29jay1mZFxcXCI6IHMuZmlsZW5vKCl9KVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weTo2MjI6ICAgICAgICBfX25zaW1fcHNwX3JlcmVnKGNmZylcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHktNjIzLSAgICBmaW5hbGx5OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMDo0Mzo1Mi4zNjYyNjE4ODRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDk3NDUzNDAyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQU1AvVENQIFVMUCBJbnRlcmFjdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIFBTUCBpcyBoYW5kbGVkIHRocm91Z2ggYG5ldGRldnNpbWAsIHdoaWNoIGlzIGVzc2VudGlhbGx5IGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgd2l0aGluIFFFTVUgYW5kIHN5emthbGxlci4gVENQIFVMUCwgYW5kIEknbSB0aGlua2luZyBhYm91dCB0aGluZ3MgbGlrZSBrVExTLCBCUEYsIGFuZCBNUFRDUCwgYXJlIGFjY2Vzc2VkIHVzaW5nIHN0YW5kYXJkIHNvY2tldCBzeXNjYWxscywgc3BlY2lmaWNhbGx5IGBzZXRzb2Nrb3B0KC4uLiwgU09MX1RDUCwgVENQX1VMUCwgLi4uKWAuIFJpZ2h0LCBJIHJlY2FsbCB0aG9zZSBmdW5jdGlvbnM6IGBza19oYXNfZGVjcnlwdF91c2VyYCBpcyBpbiBgc29jay5jYCwgYF9fdGNwX3NldF91bHBgIGluIGB0Y3BfdWxwLmNgLCBhbmQgYHBzcF9zb2NrX2Fzc29jX3NldF9yeGAgaW4gYHBzcF9zb2NrLmNgLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IGRvZXMgdGhlIG1vZGlmaWVkIGNvZGUgaW50ZXJhY3Qgd2l0aCB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIGFuZCB0aGUgUFNQIHNpZGUgb2YgdGhpbmdzPyBZZXAsIGl0IGhpdHMgY29yZSBuZXR3b3JraW5nLCBUQ1AgVUxQLCBhbmQgUFNQIHNvY2tldHMuIFRoZSBjb2RlJ3MgaW50cm9kdWNpbmcgY2hlY2tzIHRvIGF2b2lkIGNvbmZsaWN0cyDigJMgc3BlY2lmaWNhbGx5LCBpdCdzIHByZXZlbnRpbmcgdGhlIGNvbWJpbmF0aW9uIG9mIFBTUCB3aXRoIFRDUCBVTFAgb3Igc29ja2V0cyBlbXBsb3lpbmcgYHNrX3ZhbGlkYXRlX3htaXRfc2tiYCwgd2hpY2ggSSB0aGluayBvZiB3aXRoIGtUTFMgZGV2aWNlIG9mZmxvYWQgb3IgUFNQLiBJdCdzIGVzc2VudGlhbGx5IGVuc3VyaW5nIHRoYXQgb2ZmbG9hZCBhbmQgZGVjcnlwdGlvbiBzdGF0ZXMgZG9uJ3QgY2xhc2ggb24gdGhlIHNhbWUgc29ja2V0LiBUaGF0IG1ha2VzIHNlbnNlLlxuXG5OZXh0LCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCdzIFwiV29ydGhGdXp6aW5nXCIuIEZpcnN0LCBpcyBpdCByZWFjaGFibGUgaW4gYSB0eXBpY2FsIFFFTVUvdmlydHVhbGl6ZWQgc2V0dXA/IFllcywgVENQIFVMUCBpcyBwYXJ0IG9mIHN0YW5kYXJkIG5ldHdvcmtpbmcgKHdlJ3ZlIGdvdCBgQ09ORklHX0lORVRgLCBgQ09ORklHX1RDUF9VTFBgKSwga1RMUyBpcyB0aGVyZSAoYENPTkZJR19UTFNgKSwgYW5kIFBTUCBpcyBjb25maWd1cmVkIChgQ09ORklHX0lORVRfUFNQYCwgYENPTkZJR19ORVRERVZTSU1gKS4gTm93LCBpcyBpdCAqd29ydGgqIGZ1enppbmc/IEFic29sdXRlbHkuIFRoZXNlIHJlZmFjdG9yaW5ncyBhbmQgY2hlY2tzIGluIGNydWNpYWwgc3Vic3lzdGVtcyAoVENQIFVMUCwgc29ja2V0IG1hbmFnZW1lbnQsIFBTUCkgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZSBhbmQgYXJlIGFsdGVyaW5nIHNvY2tldCBzdGF0ZSBjaGVja3MuIEl0J3MgcHJpbWUgdGVycml0b3J5IGZvciBmaW5kaW5nIGVkZ2UgY2FzZXMuXG5cbkZpbmFsbHksIHdoYXQgYXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gc2V0IHVwPyBJJ20gdGhpbmtpbmc6XG5cbiogICBgSU5FVF9QU1BgXG4qICAgYFRMU2AgKG9yIGF0IGxlYXN0IGBJTkVUX1VMUGAgb3IgYFRDUF9VTFBgIOKAkyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBLY29uZmlnYCBmb3IgdGhlIGRlcGVuZGVuY2llcyBvZiBgVENQX1VMUGAsIGBUTFNgLCBldGMuKVxuKiAgIGBORVRERVZTSU1gXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgY29uc3VsdCB0aGUgYEtjb25maWdgIGZpbGVzIGZvciBgVENQX1VMUGAgYW5kIGBUTFNgIHRvIGNvbmZpcm0gZGVwZW5kZW5jaWVzIGFuZCB0aGVpciByZWxhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODMzLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjQzOjU3LjM0MDc5ODA4OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY4NDgwMzYxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJUQ1BfVUxQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbmV0d29ya2luZy90bHMucnN0PTIwPVRMUyBVTFAuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGxzLnJzdC0yNS0gIGNvbm5lY3Qoc29jaywgYWRkciwgYWRkcmxlbik7XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3Rscy5yc3Q6MjY6ICBzZXRzb2Nrb3B0KHNvY2ssIFNPTF9UQ1AsIFRDUF9VTFAsIFxcXCJ0bHNcXFwiLCBzaXplb2YoXFxcInRsc1xcXCIpKTtcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGxzLnJzdC0yNy1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2N4dC5jPTk1PXN0YXRpYyBib29sIHNyY19wcm90byhlbnVtIHByb3RvY29sX3R5cGUgdHlwZSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuYy05Ni17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmM6OTc6XFx0cmV0dXJuIHR5cGUgPT0gUFJPVE9DT0xJRF9UQ1BfVUxQIHx8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmMtOTgtXFx0ICAgICAgIHR5cGUgPT0gUFJPVE9DT0xJRF9GQ09FIHx8XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuYz0xMDI9c3RhdGljIGJvb2wgdG1fY2lkX3Byb3RvKGVudW0gcHJvdG9jb2xfdHlwZSB0eXBlKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2N4dC5jLTEwMy17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmM6MTA0OlxcdHJldHVybiB0eXBlID09IFBST1RPQ09MSURfVENQX1VMUCB8fFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2N4dC5jLTEwNS1cXHQgICAgICAgdHlwZSA9PSBQUk9UT0NPTElEX0ZDT0UgfHxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2N4dC5jPTIwMTY9aW50IHFlZF9jeHRfc2V0X3BmX3BhcmFtcyhzdHJ1Y3QgcWVkX2h3Zm4gKnBfaHdmbiwgdTMyIHJkbWFfdGFza3MpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuYy0yMDc4LVxcdFxcdFxcdHFlZF9jeHRfc2V0X3Byb3RvX2NpZF9jb3VudChwX2h3Zm4sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmM6MjA3OTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgUFJPVE9DT0xJRF9UQ1BfVUxQLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2N4dC5jLTIwODAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHBfcGFyYW1zLVxcdTAwM2VudW1fY29ucyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2N4dC5jLTIwODItXFx0XFx0XFx0cWVkX2N4dF9zZXRfcHJvdG9fdGlkX2NvdW50KHBfaHdmbixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuYzoyMDgzOlxcdFxcdFxcdFxcdFxcdFxcdCAgICBQUk9UT0NPTElEX1RDUF9VTFAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmM6MjA4NDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgUUVEX0NYVF9UQ1BfVUxQX1RJRF9TRUcsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmMtMjA4NS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgMCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2N4dC5jLTIxMDEtXFx0XFx0XFx0cWVkX2N4dF9zZXRfcHJvdG9fY2lkX2NvdW50KHBfaHdmbixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuYzoyMTAyOlxcdFxcdFxcdFxcdFxcdFxcdCAgICBQUk9UT0NPTElEX1RDUF9VTFAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmMtMjEwMy1cXHRcXHRcXHRcXHRcXHRcXHQgICAgcF9wYXJhbXMtXFx1MDAzZW51bV9jb25zLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmMtMjEwNS1cXHRcXHRcXHRxZWRfY3h0X3NldF9wcm90b190aWRfY291bnQocF9od2ZuLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2N4dC5jOjIxMDY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFBST1RPQ09MSURfVENQX1VMUCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuYzoyMTA3OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBRRURfQ1hUX1RDUF9VTFBfVElEX1NFRyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuYy0yMTA4LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAwLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmM9MjEyND1pbnQgcWVkX2N4dF9nZXRfdGlkX21lbV9pbmZvKHN0cnVjdCBxZWRfaHdmbiAqcF9od2ZuLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmMtMjE0MC1cXHRjYXNlIFFFRF9QQ0lfTlZNRVRDUDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuYzoyMTQxOlxcdFxcdHByb3RvID0gUFJPVE9DT0xJRF9UQ1BfVUxQO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2N4dC5jOjIxNDI6XFx0XFx0c2VnID0gUUVEX0NYVF9UQ1BfVUxQX1RJRF9TRUc7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmMtMjE0My1cXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2N4dC5jPTI0NDg9aW50IHFlZF9jeHRfZ2V0X3Rhc2tfY3R4KHN0cnVjdCBxZWRfaHdmbiAqcF9od2ZuLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmMtMjQ2Ny1cXHRjYXNlIFFFRF9QQ0lfTlZNRVRDUDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuYzoyNDY4OlxcdFxcdHByb3RvID0gUFJPVE9DT0xJRF9UQ1BfVUxQO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2N4dC5jOjI0Njk6XFx0XFx0c2VnID0gUUVEX0NYVF9UQ1BfVUxQX1RJRF9TRUc7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmMtMjQ3MC1cXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2N4dC5oPTQ5PWludCBxZWRfY3h0X2dldF90aWRfbWVtX2luZm8oc3RydWN0IHFlZF9od2ZuICpwX2h3Zm4sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuaC01MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9jeHQuaDo1MjojZGVmaW5lIFFFRF9DWFRfVENQX1VMUF9USURfU0VHXFx0UFJPVE9DT0xJRF9UQ1BfVUxQXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfY3h0LmgtNTMtI2RlZmluZSBRRURfQ1hUX1JPQ0VfVElEX1NFR1xcdFBST1RPQ09MSURfUk9DRVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfZGV2LmM9MjEzOT1pbnQgcWVkX3Jlc2NfYWxsb2Moc3RydWN0IHFlZF9kZXYgKmNkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9kZXYuYy0yMjU5LVxcdFxcdFxcdCAgICBxZWRfY3h0X2dldF9wcm90b19jaWRfY291bnQocF9od2ZuLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2Rldi5jOjIyNjA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0UFJPVE9DT0xJRF9UQ1BfVUxQLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2Rldi5jLTIyNjEtXFx0XFx0XFx0XFx0XFx0XFx0XFx0TlVMTCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9oc2kuaD0xMTg0PWVudW0gcGVyc29uYWxpdHlfdHlwZSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaHNpLmgtMTE4NS1cXHRCQURfUEVSU09OQUxJVFlfVFlQLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2hzaS5oOjExODY6XFx0UEVSU09OQUxJVFlfVENQX1VMUCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9oc2kuaC0xMTg3LVxcdFBFUlNPTkFMSVRZX0ZDT0UsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pc2NzaS5jPTEzNz1xZWRfc3BfaXNjc2lfZnVuY19zdGFydChzdHJ1Y3QgcWVkX2h3Zm4gKnBfaHdmbixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtMTYxLVxcdFxcdFxcdFxcdCBJU0NTSV9SQU1ST0RfQ01EX0lEX0lOSVRfRlVOQyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pc2NzaS5jOjE2MjpcXHRcXHRcXHRcXHQgUFJPVE9DT0xJRF9UQ1BfVUxQLCBcXHUwMDI2aW5pdF9kYXRhKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pc2NzaS5jLTE2My1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pc2NzaS5jLTI1My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pc2NzaS5jOjI1NDpcXHRxZWRfc3BxX3JlZ2lzdGVyX2FzeW5jX2NiKHBfaHdmbiwgUFJPVE9DT0xJRF9UQ1BfVUxQLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtMjU1LVxcdFxcdFxcdFxcdCAgcWVkX2lzY3NpX2FzeW5jX2V2ZW50KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmM9MjYwPXN0YXRpYyBpbnQgcWVkX3NwX2lzY3NpX2Nvbm5fb2ZmbG9hZChzdHJ1Y3QgcWVkX2h3Zm4gKnBfaHdmbixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtMjg5LVxcdFxcdFxcdFxcdCBJU0NTSV9SQU1ST0RfQ01EX0lEX09GRkxPQURfQ09OTixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pc2NzaS5jOjI5MDpcXHRcXHRcXHRcXHQgUFJPVE9DT0xJRF9UQ1BfVUxQLCBcXHUwMDI2aW5pdF9kYXRhKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pc2NzaS5jLTI5MS1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pc2NzaS5jPTQ0OT1zdGF0aWMgaW50IHFlZF9zcF9pc2NzaV9jb25uX3VwZGF0ZShzdHJ1Y3QgcWVkX2h3Zm4gKnBfaHdmbixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtNDY4LVxcdFxcdFxcdFxcdCBJU0NTSV9SQU1ST0RfQ01EX0lEX1VQREFURV9DT05OLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmM6NDY5OlxcdFxcdFxcdFxcdCBQUk9UT0NPTElEX1RDUF9VTFAsIFxcdTAwMjZpbml0X2RhdGEpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtNDcwLVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmM9NDkwPXFlZF9zcF9pc2NzaV9tYWNfdXBkYXRlKHN0cnVjdCBxZWRfaHdmbiAqcF9od2ZuLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXNjc2kuYy01MDktXFx0XFx0XFx0XFx0IElTQ1NJX1JBTVJPRF9DTURfSURfTUFDX1VQREFURSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pc2NzaS5jOjUxMDpcXHRcXHRcXHRcXHQgUFJPVE9DT0xJRF9UQ1BfVUxQLCBcXHUwMDI2aW5pdF9kYXRhKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pc2NzaS5jLTUxMS1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pc2NzaS5jPTUzMz1zdGF0aWMgaW50IHFlZF9zcF9pc2NzaV9jb25uX3Rlcm1pbmF0ZShzdHJ1Y3QgcWVkX2h3Zm4gKnBfaHdmbixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtNTUxLVxcdFxcdFxcdFxcdCBJU0NTSV9SQU1ST0RfQ01EX0lEX1RFUk1JTkFUSU9OX0NPTk4sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXNjc2kuYzo1NTI6XFx0XFx0XFx0XFx0IFBST1RPQ09MSURfVENQX1VMUCwgXFx1MDAyNmluaXRfZGF0YSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXNjc2kuYy01NTMtXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXNjc2kuYz01Njg9c3RhdGljIGludCBxZWRfc3BfaXNjc2lfY29ubl9jbGVhcl9zcShzdHJ1Y3QgcWVkX2h3Zm4gKnBfaHdmbixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtNTg1LVxcdFxcdFxcdFxcdCBJU0NTSV9SQU1ST0RfQ01EX0lEX0NMRUFSX1NRLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmM6NTg2OlxcdFxcdFxcdFxcdCBQUk9UT0NPTElEX1RDUF9VTFAsIFxcdTAwMjZpbml0X2RhdGEpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtNTg3LVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmM9NTkzPXN0YXRpYyBpbnQgcWVkX3NwX2lzY3NpX2Z1bmNfc3RvcChzdHJ1Y3QgcWVkX2h3Zm4gKnBfaHdmbixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtNjA5LVxcdFxcdFxcdFxcdCBJU0NTSV9SQU1ST0RfQ01EX0lEX0RFU1RST1lfRlVOQyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pc2NzaS5jOjYxMDpcXHRcXHRcXHRcXHQgUFJPVE9DT0xJRF9UQ1BfVUxQLCBcXHUwMDI2aW5pdF9kYXRhKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pc2NzaS5jLTYxMS1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pc2NzaS5jLTYxNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pc2NzaS5jOjYxNjpcXHRxZWRfc3BxX3VucmVnaXN0ZXJfYXN5bmNfY2IocF9od2ZuLCBQUk9UT0NPTElEX1RDUF9VTFApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtNjE3LVxcdHJldHVybiByYztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmM9Nzc5PXN0YXRpYyBpbnQgcWVkX2lzY3NpX2FjcXVpcmVfY29ubmVjdGlvbihzdHJ1Y3QgcWVkX2h3Zm4gKnBfaHdmbixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtNzg3LVxcdHNwaW5fbG9ja19iaChcXHUwMDI2cF9od2ZuLVxcdTAwM2VwX2lzY3NpX2luZm8tXFx1MDAzZWxvY2spO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmM6Nzg4OlxcdHJjID0gcWVkX2N4dF9hY3F1aXJlX2NpZChwX2h3Zm4sIFBST1RPQ09MSURfVENQX1VMUCwgXFx1MDAyNmljaWQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2lzY3NpLmMtNzg5LVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZwX2h3Zm4tXFx1MDAzZXBfaXNjc2lfaW5mby1cXHUwMDNlbG9jayk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9sbDIuYz0xMDIzPXN0YXRpYyBpbnQgcWVkX3NwX2xsMl90eF9xdWV1ZV9zdGFydChzdHJ1Y3QgcWVkX2h3Zm4gKnBfaHdmbixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2xsMi5jLTEwODQtXFx0XFx0YnJlYWs7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbGwyLmM6MTA4NTpcXHRjYXNlIFFFRF9MTDJfVFlQRV9UQ1BfVUxQOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2xsMi5jOjEwODY6XFx0XFx0cF9yYW1yb2QtXFx1MDAzZWNvbm5fdHlwZSA9IFBST1RPQ09MSURfVENQX1VMUDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9sbDIuYy0xMDg3LVxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbGwyLmMtMTA5Ni1cXHRcXHQgICAgcF9od2ZuLVxcdTAwM2Vod19pbmZvLnBlcnNvbmFsaXR5ID09IFFFRF9QQ0lfTlZNRVRDUClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9sbDIuYzoxMDk3OlxcdFxcdFxcdHBfcmFtcm9kLVxcdTAwM2Vjb25uX3R5cGUgPSBQUk9UT0NPTElEX1RDUF9VTFA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbGwyLmMtMTA5OC1cXHRcXHRlbHNlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9sbDIuYz0yNTAwPXN0YXRpYyBpbnQgX19xZWRfbGwyX3N0YXJ0KHN0cnVjdCBxZWRfaHdmbiAqcF9od2ZuLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbGwyLmMtMjUxNC1cXHRjYXNlIFFFRF9QQ0lfTlZNRVRDUDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9sbDIuYzoyNTE1OlxcdFxcdGNvbm5fdHlwZSA9IFFFRF9MTDJfVFlQRV9UQ1BfVUxQO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2xsMi5jLTI1MTYtXFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmM9NDg9c3RhdGljIGludCBxZWRfc3BfbnZtZXRjcF9mdW5jX3N0YXJ0KHN0cnVjdCBxZWRfaHdmbiAqcF9od2ZuLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jLTcwLVxcdFxcdFxcdFxcdCBOVk1FVENQX1JBTVJPRF9DTURfSURfSU5JVF9GVU5DLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX252bWV0Y3AuYzo3MTpcXHRcXHRcXHRcXHQgUFJPVE9DT0xJRF9UQ1BfVUxQLCBcXHUwMDI2aW5pdF9kYXRhKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmMtNzItXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jLTExMi1cXHRwX2h3Zm4tXFx1MDAzZXBfbnZtZXRjcF9pbmZvLVxcdTAwM2VldmVudF9jYiA9IGFzeW5jX2V2ZW50X2NiO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX252bWV0Y3AuYzoxMTM6XFx0cWVkX3NwcV9yZWdpc3Rlcl9hc3luY19jYihwX2h3Zm4sIFBST1RPQ09MSURfVENQX1VMUCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmMtMTE0LVxcdFxcdFxcdFxcdCAgcWVkX252bWV0Y3BfYXN5bmNfZXZlbnQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jPTExOT1zdGF0aWMgaW50IHFlZF9zcF9udm1ldGNwX2Z1bmNfc3RvcChzdHJ1Y3QgcWVkX2h3Zm4gKnBfaHdmbixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX252bWV0Y3AuYy0xMzQtXFx0XFx0XFx0XFx0IE5WTUVUQ1BfUkFNUk9EX0NNRF9JRF9ERVNUUk9ZX0ZVTkMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jOjEzNTpcXHRcXHRcXHRcXHQgUFJPVE9DT0xJRF9UQ1BfVUxQLCBcXHUwMDI2aW5pdF9kYXRhKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmMtMTM2LVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX252bWV0Y3AuYy0xMzktXFx0cmMgPSBxZWRfc3BxX3Bvc3QocF9od2ZuLCBwX2VudCwgTlVMTCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jOjE0MDpcXHRxZWRfc3BxX3VucmVnaXN0ZXJfYXN5bmNfY2IocF9od2ZuLCBQUk9UT0NPTElEX1RDUF9VTFApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX252bWV0Y3AuYy0xNDEtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmM9MjY2PXN0YXRpYyBpbnQgcWVkX3NwX252bWV0Y3BfY29ubl9vZmZsb2FkKHN0cnVjdCBxZWRfaHdmbiAqcF9od2ZuLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jLTI4OC1cXHRcXHRcXHRcXHQgTlZNRVRDUF9SQU1ST0RfQ01EX0lEX09GRkxPQURfQ09OTixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmM6Mjg5OlxcdFxcdFxcdFxcdCBQUk9UT0NPTElEX1RDUF9VTFAsIFxcdTAwMjZpbml0X2RhdGEpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX252bWV0Y3AuYy0yOTAtXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jPTM1Nj1zdGF0aWMgaW50IHFlZF9zcF9udm1ldGNwX2Nvbm5fdXBkYXRlKHN0cnVjdCBxZWRfaHdmbiAqcF9od2ZuLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jLTM3NS1cXHRcXHRcXHRcXHQgTlZNRVRDUF9SQU1ST0RfQ01EX0lEX1VQREFURV9DT05OLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX252bWV0Y3AuYzozNzY6XFx0XFx0XFx0XFx0IFBST1RPQ09MSURfVENQX1VMUCwgXFx1MDAyNmluaXRfZGF0YSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jLTM3Ny1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmM9MzkzPXN0YXRpYyBpbnQgcWVkX3NwX252bWV0Y3BfY29ubl90ZXJtaW5hdGUoc3RydWN0IHFlZF9od2ZuICpwX2h3Zm4sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmMtNDEwLVxcdFxcdFxcdFxcdCBOVk1FVENQX1JBTVJPRF9DTURfSURfVEVSTUlOQVRJT05fQ09OTixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmM6NDExOlxcdFxcdFxcdFxcdCBQUk9UT0NPTElEX1RDUF9VTFAsIFxcdTAwMjZpbml0X2RhdGEpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX252bWV0Y3AuYy00MTItXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jPTQyMj1zdGF0aWMgaW50IHFlZF9zcF9udm1ldGNwX2Nvbm5fY2xlYXJfc3Eoc3RydWN0IHFlZF9od2ZuICpwX2h3Zm4sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmMtNDM4LVxcdFxcdFxcdFxcdCBOVk1FVENQX1JBTVJPRF9DTURfSURfQ0xFQVJfU1EsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jOjQzOTpcXHRcXHRcXHRcXHQgUFJPVE9DT0xJRF9UQ1BfVUxQLCBcXHUwMDI2aW5pdF9kYXRhKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmMtNDQwLVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX252bWV0Y3AuYz01MTg9c3RhdGljIGludCBxZWRfbnZtZXRjcF9hY3F1aXJlX2Nvbm5lY3Rpb24oc3RydWN0IHFlZF9od2ZuICpwX2h3Zm4sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmMtNTI1LVxcdHNwaW5fbG9ja19iaChcXHUwMDI2cF9od2ZuLVxcdTAwM2VwX252bWV0Y3BfaW5mby1cXHUwMDNlbG9jayk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcC5jOjUyNjpcXHRyYyA9IHFlZF9jeHRfYWNxdWlyZV9jaWQocF9od2ZuLCBQUk9UT0NPTElEX1RDUF9VTFAsIFxcdTAwMjZpY2lkKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwLmMtNTI3LVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZwX2h3Zm4tXFx1MDAzZXBfbnZtZXRjcF9pbmZvLVxcdTAwM2Vsb2NrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX29vby5jPTc2PWludCBxZWRfb29vX2FsbG9jKHN0cnVjdCBxZWRfaHdmbiAqcF9od2ZuKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfb29vLmMtODYtXFx0Y2FzZSBRRURfUENJX05WTUVUQ1A6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfb29vLmM6ODc6XFx0XFx0cHJvdG8gPSBQUk9UT0NPTElEX1RDUF9VTFA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfb29vLmMtODgtXFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9zcF9jb21tYW5kcy5jPTMwMD1pbnQgcWVkX3NwX3BmX3N0YXJ0KHN0cnVjdCBxZWRfaHdmbiAqcF9od2ZuLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfc3BfY29tbWFuZHMuYy0zOTQtXFx0Y2FzZSBRRURfUENJX05WTUVUQ1A6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfc3BfY29tbWFuZHMuYzozOTU6XFx0XFx0cF9yYW1yb2QtXFx1MDAzZXBlcnNvbmFsaXR5ID0gUEVSU09OQUxJVFlfVENQX1VMUDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9zcF9jb21tYW5kcy5jLTM5Ni1cXHRcXHRicmVhaztcXG4tLVxcbmluY2x1ZGUvbGludXgvcWVkL2NvbW1vbl9oc2kuaD02ODE9c3RydWN0IHRjcF91bHBfY29ubmVjdF9kb25lX3BhcmFtcyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3FlZC9jb21tb25faHNpLmgtNjg0LVxcdHU4IGZsYWdzO1xcbmluY2x1ZGUvbGludXgvcWVkL2NvbW1vbl9oc2kuaDo2ODU6I2RlZmluZSBUQ1BfVUxQX0NPTk5FQ1RfRE9ORV9QQVJBTVNfVFNfRU5fTUFTS1xcdFxcdDB4MVxcbmluY2x1ZGUvbGludXgvcWVkL2NvbW1vbl9oc2kuaDo2ODY6I2RlZmluZSBUQ1BfVUxQX0NPTk5FQ1RfRE9ORV9QQVJBTVNfVFNfRU5fU0hJRlRcXHRcXHQwXFxuaW5jbHVkZS9saW51eC9xZWQvY29tbW9uX2hzaS5oOjY4NzojZGVmaW5lIFRDUF9VTFBfQ09OTkVDVF9ET05FX1BBUkFNU19SRVNFUlZFRF9NQVNLXFx0MHg3RlxcbmluY2x1ZGUvbGludXgvcWVkL2NvbW1vbl9oc2kuaDo2ODg6I2RlZmluZSBUQ1BfVUxQX0NPTk5FQ1RfRE9ORV9QQVJBTVNfUkVTRVJWRURfU0hJRlRcXHQxXFxuaW5jbHVkZS9saW51eC9xZWQvY29tbW9uX2hzaS5oLTY4OS19O1xcbi0tXFxuaW5jbHVkZS9saW51eC9xZWQvY29tbW9uX2hzaS5oPTcyNz1lbnVtIHByb3RvY29sX3R5cGUge1xcbmluY2x1ZGUvbGludXgvcWVkL2NvbW1vbl9oc2kuaDo3Mjg6XFx0UFJPVE9DT0xJRF9UQ1BfVUxQLFxcbmluY2x1ZGUvbGludXgvcWVkL2NvbW1vbl9oc2kuaC03MjktXFx0UFJPVE9DT0xJRF9GQ09FLFxcbi0tXFxuaW5jbHVkZS9saW51eC9xZWQvcWVkX2xsMl9pZi5oPTE5PWVudW0gcWVkX2xsMl9jb25uX3R5cGUge1xcbmluY2x1ZGUvbGludXgvcWVkL3FlZF9sbDJfaWYuaC0yMC1cXHRRRURfTEwyX1RZUEVfRkNPRSxcXG5pbmNsdWRlL2xpbnV4L3FlZC9xZWRfbGwyX2lmLmg6MjE6XFx0UUVEX0xMMl9UWVBFX1RDUF9VTFAsXFxuaW5jbHVkZS9saW51eC9xZWQvcWVkX2xsMl9pZi5oLTIyLVxcdFFFRF9MTDJfVFlQRV9URVNULFxcbi0tXFxuaW5jbHVkZS9uZXQvdGNwLmg9Mjc5OD1lbnVtIGhydGltZXJfcmVzdGFydCB0Y3BfcGFjZV9raWNrKHN0cnVjdCBocnRpbWVyICp0aW1lcik7XFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaC0yODAzLVxcbmluY2x1ZGUvbmV0L3RjcC5oOjI4MDQ6I2RlZmluZSBUQ1BfVUxQX05BTUVfTUFYXFx0MTZcXG5pbmNsdWRlL25ldC90Y3AuaDoyODA1OiNkZWZpbmUgVENQX1VMUF9NQVhcXHRcXHQxMjhcXG5pbmNsdWRlL25ldC90Y3AuaDoyODA2OiNkZWZpbmUgVENQX1VMUF9CVUZfTUFYXFx0XFx0KFRDUF9VTFBfTkFNRV9NQVgqVENQX1VMUF9NQVgpXFxuaW5jbHVkZS9uZXQvdGNwLmgtMjgwNy1cXG5pbmNsdWRlL25ldC90Y3AuaD0yODA4PXN0cnVjdCB0Y3BfdWxwX29wcyB7XFxuLS1cXG5pbmNsdWRlL25ldC90Y3AuaC0yODI0LVxcbmluY2x1ZGUvbmV0L3RjcC5oOjI4MjU6XFx0Y2hhclxcdFxcdG5hbWVbVENQX1VMUF9OQU1FX01BWF07XFxuaW5jbHVkZS9uZXQvdGNwLmgtMjgyNi1cXHRzdHJ1Y3QgbW9kdWxlXFx0Km93bmVyO1xcbi0tXFxuaW5jbHVkZS9uZXQvdGNwLmg9MjgzMz12b2lkIHRjcF91cGRhdGVfdWxwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHByb3RvICpwLFxcbi0tXFxuaW5jbHVkZS9uZXQvdGNwLmgtMjgzNS1cXG5pbmNsdWRlL25ldC90Y3AuaDoyODM2OiNkZWZpbmUgTU9EVUxFX0FMSUFTX1RDUF9VTFAobmFtZSlcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9uZXQvdGNwLmgtMjgzNy1cXHRNT0RVTEVfSU5GTyhhbGlhcywgbmFtZSk7XFx0XFx0XFxcXFxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oPTc0PWVudW0ge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oLTEyMy0jZGVmaW5lIFRDUF9GQVNUT1BFTl9DT05ORUNUXFx0MzBcXHQvKiBBdHRlbXB0IEZhc3RPcGVuIHdpdGggY29ubmVjdCAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC90Y3AuaDoxMjQ6I2RlZmluZSBUQ1BfVUxQXFx0XFx0XFx0MzFcXHQvKiBBdHRhY2ggYSBVTFAgdG8gYSBUQ1AgY29ubmVjdGlvbiAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC90Y3AuaC0xMjUtI2RlZmluZSBUQ1BfTUQ1U0lHX0VYVFxcdFxcdDMyXFx0LyogVENQIE1ENSBTaWduYXR1cmUgd2l0aCBleHRlbnNpb25zICovXFxuLS1cXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYz0zNzc9c3RhdGljIGludCBwcm9jX3RjcF9hdmFpbGFibGVfdWxwKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCxcXG4tLVxcbm5ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jLTM4MC17XFxubmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmM6MzgxOlxcdHN0cnVjdCBjdGxfdGFibGUgdGJsID0geyAubWF4bGVuID0gVENQX1VMUF9CVUZfTUFYLCB9O1xcbm5ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jLTM4Mi1cXHRpbnQgcmV0O1xcbi0tXFxubmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMtMzg2LVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm5ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jOjM4NzpcXHR0Y3BfZ2V0X2F2YWlsYWJsZV91bHAodGJsLmRhdGEsIFRDUF9VTFBfQlVGX01BWCk7XFxubmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMtMzg4LVxcdHJldCA9IHByb2NfZG9zdHJpbmcoXFx1MDAyNnRibCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7XFxuLS1cXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYz01MzA9c3RhdGljIHN0cnVjdCBjdGxfdGFibGUgaXB2NF90YWJsZVtdID0ge1xcbi0tXFxubmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMtNjA0LVxcdFxcdC5wcm9jbmFtZVxcdD0gXFxcInRjcF9hdmFpbGFibGVfdWxwXFxcIixcXG5uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYzo2MDU6XFx0XFx0Lm1heGxlblxcdFxcdD0gVENQX1VMUF9CVUZfTUFYLFxcbm5ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jLTYwNi1cXHRcXHQubW9kZVxcdFxcdD0gMDQ0NCxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTM4MzY9aW50IGRvX3RjcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTM4NjUtXFx0fVxcbm5ldC9pcHY0L3RjcC5jOjM4NjY6XFx0Y2FzZSBUQ1BfVUxQOiB7XFxubmV0L2lwdjQvdGNwLmM6Mzg2NzpcXHRcXHRjaGFyIG5hbWVbVENQX1VMUF9OQU1FX01BWF07XFxubmV0L2lwdjQvdGNwLmMtMzg2OC1cXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTM4NzItXFx0XFx0dmFsID0gc3RybmNweV9mcm9tX3NvY2twdHIobmFtZSwgb3B0dmFsLFxcbm5ldC9pcHY0L3RjcC5jOjM4NzM6XFx0XFx0XFx0XFx0XFx0bWluX3QobG9uZywgVENQX1VMUF9OQU1FX01BWCAtIDEsXFxubmV0L2lwdjQvdGNwLmMtMzg3NC1cXHRcXHRcXHRcXHRcXHQgICAgICBvcHRsZW4pKTtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTQ0ODA9aW50IGRvX3RjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtNDU5Ny1cXHR9XFxubmV0L2lwdjQvdGNwLmM6NDU5ODpcXHRjYXNlIFRDUF9VTFA6XFxubmV0L2lwdjQvdGNwLmMtNDU5OS1cXHRcXHRpZiAoY29weV9mcm9tX3NvY2twdHIoXFx1MDAyNmxlbiwgb3B0bGVuLCBzaXplb2YoaW50KSkpXFxubmV0L2lwdjQvdGNwLmMtNDYwMC1cXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG5uZXQvaXB2NC90Y3AuYzo0NjAxOlxcdFxcdGxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuLCBUQ1BfVUxQX05BTUVfTUFYKTtcXG5uZXQvaXB2NC90Y3AuYy00NjAyLVxcdFxcdGlmICghaWNzay1cXHUwMDNlaWNza191bHBfb3BzKSB7XFxuLS1cXG5uZXQvaXB2NC90Y3BfZGlhZy5jPTE0Nj1zdGF0aWMgc2l6ZV90IHRjcF9kaWFnX2dldF9hdXhfc2l6ZShzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgbmV0X2FkbWluKVxcbi0tXFxubmV0L2lwdjQvdGNwX2RpYWcuYy0xNzQtXFx0XFx0XFx0c2l6ZSArPSBubGFfdG90YWxfc2l6ZSgwKSArXFxubmV0L2lwdjQvdGNwX2RpYWcuYzoxNzU6XFx0XFx0XFx0XFx0bmxhX3RvdGFsX3NpemUoVENQX1VMUF9OQU1FX01BWCk7XFxubmV0L2lwdjQvdGNwX2RpYWcuYy0xNzYtXFx0XFx0XFx0aWYgKHVscF9vcHMtXFx1MDAzZWdldF9pbmZvX3NpemUpXFxuLS1cXG5uZXQvbXB0Y3Avc29ja29wdC5jPTgzMz1zdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfc29sX3RjcChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtODM5LVxcdHN3aXRjaCAob3B0bmFtZSkge1xcbm5ldC9tcHRjcC9zb2Nrb3B0LmM6ODQwOlxcdGNhc2UgVENQX1VMUDpcXG5uZXQvbXB0Y3Avc29ja29wdC5jLTg0MS1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbXB0Y3Avc29ja29wdC5jPTE0MTE9c3RhdGljIGludCBtcHRjcF9nZXRzb2Nrb3B0X3NvbF90Y3Aoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvbXB0Y3Avc29ja29wdC5jLTE0MTYtXFx0c3dpdGNoIChvcHRuYW1lKSB7XFxubmV0L21wdGNwL3NvY2tvcHQuYzoxNDE3OlxcdGNhc2UgVENQX1VMUDpcXG5uZXQvbXB0Y3Avc29ja29wdC5jLTE0MTgtXFx0Y2FzZSBUQ1BfQ09OR0VTVElPTjpcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9MzA4ND1pbnQgc21jX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMzA5MC1cXG5uZXQvc21jL2FmX3NtYy5jOjMwOTE6XFx0aWYgKGxldmVsID09IFNPTF9UQ1AgXFx1MDAyNlxcdTAwMjYgb3B0bmFtZSA9PSBUQ1BfVUxQKVxcbm5ldC9zbWMvYWZfc21jLmMtMzA5Mi1cXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmM9NTA9TU9EVUxFX0xJQ0VOU0UoXFxcIkR1YWwgQlNEL0dQTFxcXCIpO1xcbm5ldC90bHMvdGxzX21haW4uYzo1MTpNT0RVTEVfQUxJQVNfVENQX1VMUChcXFwidGxzXFxcIik7XFxubmV0L3Rscy90bHNfbWFpbi5jLTUyLVxcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L3RjcC5oPTcyPWVudW0geyBcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC90Y3AuaC0xMjAtI2RlZmluZSBUQ1BfRkFTVE9QRU5fQ09OTkVDVFxcdDMwXFx0LyogQXR0ZW1wdCBGYXN0T3BlbiB3aXRoIGNvbm5lY3QgKi9cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvdGNwLmg6MTIxOiNkZWZpbmUgVENQX1VMUFxcdFxcdFxcdDMxXFx0LyogQXR0YWNoIGEgVUxQIHRvIGEgVENQIGNvbm5lY3Rpb24gKi9cXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvdGNwLmgtMTIyLSNkZWZpbmUgVENQX01ENVNJR19FWFRcXHRcXHQzMlxcdC8qIFRDUCBNRDUgU2lnbmF0dXJlIHdpdGggZXh0ZW5zaW9ucyAqL1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2V0Z2V0X3NvY2tvcHQuYz04Nz1zdGF0aWMgdm9pZCB0ZXN0X2t0bHMoaW50IGZhbWlseSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NldGdldF9zb2Nrb3B0LmMtMTExLVxcdC8qIFNldHVwIEtUTFMgKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZXRnZXRfc29ja29wdC5jOjExMjpcXHRyZXQgPSBzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX1RDUCwgVENQX1VMUCwgXFxcInRsc1xcXCIsIHNpemVvZihcXFwidGxzXFxcIikpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NldGdldF9zb2Nrb3B0LmMtMTEzLVxcdGlmICghQVNTRVJUX09LKHJldCwgXFxcInNldHNvY2tvcHRcXFwiKSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zZXRnZXRfc29ja29wdC5jLTExNC1cXHRcXHRnb3RvIGVycl9vdXQ7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2V0Z2V0X3NvY2tvcHQuYzoxMTU6XFx0cmV0ID0gc2V0c29ja29wdChjZmQsIElQUFJPVE9fVENQLCBUQ1BfVUxQLCBcXFwidGxzXFxcIiwgc2l6ZW9mKFxcXCJ0bHNcXFwiKSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2V0Z2V0X3NvY2tvcHQuYy0xMTYtXFx0aWYgKCFBU1NFUlRfT0socmV0LCBcXFwic2V0c29ja29wdFxcXCIpKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9rdGxzLmMtMTMtI2RlZmluZSBNQVhfVEVTVF9OQU1FIDgwXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9rdGxzLmM6MTQ6I2RlZmluZSBUQ1BfVUxQIDMxXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9rdGxzLmMtMTUtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9rdGxzLmM9MTY9c3RhdGljIGludCBpbml0X2t0bHNfcGFpcnMoaW50IGMsIGludCBwKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9rdGxzLmMtMjEtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9rdGxzLmM6MjI6XFx0ZXJyID0gc2V0c29ja29wdChjLCBJUFBST1RPX1RDUCwgVENQX1VMUCwgXFxcInRsc1xcXCIsIHN0cmxlbihcXFwidGxzXFxcIikpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfa3Rscy5jOjIzOlxcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInNldHNvY2tvcHQoVENQX1VMUClcXFwiKSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2t0bHMuYy0yNC1cXHRcXHRnb3RvIG91dDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2t0bHMuYy0yNS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2t0bHMuYzoyNjpcXHRlcnIgPSBzZXRzb2Nrb3B0KHAsIElQUFJPVE9fVENQLCBUQ1BfVUxQLCBcXFwidGxzXFxcIiwgc3RybGVuKFxcXCJ0bHNcXFwiKSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9rdGxzLmM6Mjc6XFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwic2V0c29ja29wdChUQ1BfVUxQKVxcXCIpKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfa3Rscy5jLTI4LVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9rdGxzLmM9NjM9c3RhdGljIHZvaWQgdGVzdF9zb2NrbWFwX2t0bHNfdXBkYXRlX2ZhaWxzX3doZW5fc29ja19oYXNfdWxwKGludCBmYW1pbHksIGludCBtYXApXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2t0bHMuYy0xMDEtXFx0Lyogc2F2ZSBzay1cXHUwMDNlc2tfcHJvdCBhbmQgc2V0IGl0IHRvIHRsc19wcm90cyAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfa3Rscy5jOjEwMjpcXHRlcnIgPSBzZXRzb2Nrb3B0KHMsIElQUFJPVE9fVENQLCBUQ1BfVUxQLCBcXFwidGxzXFxcIiwgc3RybGVuKFxcXCJ0bHNcXFwiKSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9rdGxzLmM6MTAzOlxcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInNldHNvY2tvcHQoVENQX1VMUClcXFwiKSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2t0bHMuYy0xMDQtXFx0XFx0Z290byBjbG9zZTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfa3Rscy5jPTExOT1zdGF0aWMgdm9pZCB0ZXN0X3NvY2ttYXBfa3Rsc19lbmFibGVfZmFpbHNfd2hlbl9pbl9zb2NrbWFwKGludCBmYW1pbHksIGludCBtYXApXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2t0bHMuYy0xNjgtXFx0LyogSW5zdGFsbGluZyB0aGUgVExTIFVMUCBpcyBhbGxvd2VkLCBpdCBkb2VzIG5vdCB0b3VjaCB0aGUgZGF0YXBhdGguICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc29ja21hcF9rdGxzLmM6MTY5OlxcdGVyciA9IHNldHNvY2tvcHQocywgSVBQUk9UT19UQ1AsIFRDUF9VTFAsIFxcXCJ0bHNcXFwiLCBzdHJsZW4oXFxcInRsc1xcXCIpKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9zb2NrbWFwX2t0bHMuYzoxNzA6XFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwic2V0c29ja29wdChUQ1BfVUxQKVxcXCIpKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NvY2ttYXBfa3Rscy5jLTE3MS1cXHRcXHRnb3RvIGNsb3NlO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5PTI0PWZyb20gbGliLnB5IGltcG9ydCBpcFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS0yNS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk6MjY6VENQX1VMUCA9IDMxXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTI3LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5PTMzOD1kZWYgX3JlcXVpcmVfdGxzX3VscCgpOlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTM0MS0gICAgICAgICAgICB0cnk6XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5OjM0MjogICAgICAgICAgICAgICAgcy5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfVENQLCBUQ1BfVUxQLCBiXFxcInRsc1xcXCIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTM0My0gICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHk9MzQ3PWRlZiBhc3NvY19wc3BfdWxwX2V4Y2x1c2l2ZShjZmcpOlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTM1Ny0gICAgICAgICAgICB3aXRoIGtzZnRfcmFpc2VzKE9TRXJyb3IpIGFzIGNtOlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weTozNTg6ICAgICAgICAgICAgICAgIHMuc2V0c29ja29wdChzb2NrZXQuU09MX1RDUCwgVENQX1VMUCwgYlxcXCJ0bHNcXFwiKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weS0zNTktICAgICAgICAgICAga3NmdF9lcShjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVJTlZBTClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weT0zNjQ9ZGVmIGFzc29jX3VscF9wc3BfZXhjbHVzaXZlKGNmZyk6XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kcml2ZXJzL25ldC9wc3AucHktMzcwLSAgICAgICAgdHJ5OlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weTozNzE6ICAgICAgICAgICAgcy5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfVENQLCBUQ1BfVUxQLCBiXFxcInRsc1xcXCIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5LTM3Mi0gICAgICAgICAgICB3aXRoIGtzZnRfcmFpc2VzKE5sRXJyb3IpIGFzIGNtOlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2dldHNvY2tvcHRfaXRlci5jLTU0LSNlbmRpZlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9nZXRzb2Nrb3B0X2l0ZXIuYzo1NTojaWZuZGVmIFRDUF9VTFBcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZ2V0c29ja29wdF9pdGVyLmM6NTY6I2RlZmluZSBUQ1BfVUxQIDMxXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2dldHNvY2tvcHRfaXRlci5jLTU3LSNlbmRpZlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2dldHNvY2tvcHRfaXRlci5jPTUwMz1GSVhUVVJFX1NFVFVQKHRscylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9nZXRzb2Nrb3B0X2l0ZXIuYy01MzMtXFx0Y2xvc2UobGZkKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZ2V0c29ja29wdF9pdGVyLmM6NTM0OlxcdGlmIChzZXRzb2Nrb3B0KHNlbGYtXFx1MDAzZWZkLCBJUFBST1RPX1RDUCwgVENQX1VMUCwgXFxcInRsc1xcXCIsIHNpemVvZihcXFwidGxzXFxcIikpKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9nZXRzb2Nrb3B0X2l0ZXIuYzo1MzU6XFx0XFx0U0tJUChyZXR1cm4sIFxcXCJUQ1BfVUxQPXRsczogJXMgKGJ1aWx0IHdpdGhvdXQgVExTPylcXFwiLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9nZXRzb2Nrb3B0X2l0ZXIuYy01MzYtXFx0XFx0ICAgICBzdHJlcnJvcihlcnJubykpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3QuYz0zOD1leHRlcm4gaW50IG9wdGluZDtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9jb25uZWN0LmMtNDItI2VuZGlmXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3QuYzo0MzojaWZuZGVmIFRDUF9VTFBcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5jOjQ0OiNkZWZpbmUgVENQX1VMUCAzMVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9jb25uZWN0LmMtNDUtI2VuZGlmXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5jPTI3MD1zdGF0aWMgaW50IGRvX3VscF9zbyhpbnQgc29jaywgY29uc3QgY2hhciAqbmFtZSlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvbXB0Y3BfY29ubmVjdC5jLTI3MS17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3QuYzoyNzI6XFx0cmV0dXJuIHNldHNvY2tvcHQoc29jaywgSVBQUk9UT19UQ1AsIFRDUF9VTFAsIG5hbWUsIHN0cmxlbihuYW1lKSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3QuYy0yNzMtfVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3QuYz0yNzY9c3RhdGljIHZvaWQgc29ja190ZXN0X3RjcHVscChpbnQgc29jaywgaW50IHByb3RvLCB1bnNpZ25lZCBpbnQgbGluZSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9tcHRjcF9jb25uZWN0LmMtMjc5LVxcdGNoYXIgYnVmWzhdID0gXFxcIlxcXCI7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3QuYzoyODA6XFx0aW50IHJldCA9IGdldHNvY2tvcHQoc29jaywgSVBQUk9UT19UQ1AsIFRDUF9VTFAsIGJ1ZiwgXFx1MDAyNmJ1Zmxlbik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL21wdGNwX2Nvbm5lY3QuYy0yODEtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmM9MTEyPXN0YXRpYyB2b2lkIHVscF9zb2NrX3BhaXIoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jLTE0NC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmM6MTQ1OlxcdHJldCA9IHNldHNvY2tvcHQoKmZkLCBJUFBST1RPX1RDUCwgVENQX1VMUCwgXFxcInRsc1xcXCIsIHNpemVvZihcXFwidGxzXFxcIikpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYy0xNDYtXFx0aWYgKHJldCAhPSAwKSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmMtMTQ4LVxcdFxcdCpub3RscyA9IHRydWU7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jOjE0OTpcXHRcXHRwcmludGYoXFxcIkZhaWx1cmUgc2V0dGluZyBUQ1BfVUxQLCB0ZXN0aW5nIHdpdGhvdXQgdGxzXFxcXG5cXFwiKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmMtMTUwLVxcdFxcdHJldHVybjtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYy0xNTItXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jOjE1MzpcXHRyZXQgPSBzZXRzb2Nrb3B0KCpjZmQsIElQUFJPVE9fVENQLCBUQ1BfVUxQLCBcXFwidGxzXFxcIiwgc2l6ZW9mKFxcXCJ0bHNcXFwiKSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jLTE1NC1cXHRBU1NFUlRfRVEocmV0LCAwKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYz0zMTk4PVRFU1Qobm9uX2VzdGFibGlzaGVkKSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmMtMzIyMS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmM6MzIyMjpcXHRyZXQgPSBzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX1RDUCwgVENQX1VMUCwgXFxcInRsc1xcXCIsIHNpemVvZihcXFwidGxzXFxcIikpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYy0zMjIzLVxcdEVYUEVDVF9FUShyZXQsIC0xKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYy0zMjI4LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYzozMjI5OlxcdHJldCA9IHNldHNvY2tvcHQoc2ZkLCBJUFBST1RPX1RDUCwgVENQX1VMUCwgXFxcInRsc1xcXCIsIHNpemVvZihcXFwidGxzXFxcIikpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYy0zMjMwLVxcdEVYUEVDVF9FUShyZXQsIC0xKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYy0zMjM4LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYzozMjM5OlxcdHJldCA9IHNldHNvY2tvcHQoZmQsIElQUFJPVE9fVENQLCBUQ1BfVUxQLCBcXFwidGxzXFxcIiwgc2l6ZW9mKFxcXCJ0bHNcXFwiKSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jLTMyNDAtXFx0QVNTRVJUX0VRKHJldCwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jLTMyNDEtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jOjMyNDI6XFx0cmV0ID0gc2V0c29ja29wdChmZCwgSVBQUk9UT19UQ1AsIFRDUF9VTFAsIFxcXCJ0bHNcXFwiLCBzaXplb2YoXFxcInRsc1xcXCIpKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmMtMzI0My1cXHRFWFBFQ1RfRVEocmV0LCAtMSk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmM9MzMyNj1URVNUKHRsc192Nm9wcykge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jLTMzNTYtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jOjMzNTc6XFx0cmV0ID0gc2V0c29ja29wdChmZCwgSVBQUk9UT19UQ1AsIFRDUF9VTFAsIFxcXCJ0bHNcXFwiLCBzaXplb2YoXFxcInRsc1xcXCIpKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmMtMzM1OC1cXHRpZiAocmV0KSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmM9MzM4MT1URVNUKHByZXF1ZXVlKSB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmMtMzQwNi1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmM6MzQwNzpcXHRyZXQgPSBzZXRzb2Nrb3B0KGZkLCBJUFBST1RPX1RDUCwgVENQX1VMUCwgXFxcInRsc1xcXCIsIHNpemVvZihcXFwidGxzXFxcIikpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYy0zNDA4LVxcdGlmIChyZXQpIHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYy0zNDE1LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYzozNDE2OlxcdEFTU0VSVF9FUShzZXRzb2Nrb3B0KGNmZCwgSVBQUk9UT19UQ1AsIFRDUF9VTFAsIFxcXCJ0bHNcXFwiLCBzaXplb2YoXFxcInRsc1xcXCIpKSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jLTM0MTctXFx0QVNTRVJUX0VRKHNldHNvY2tvcHQoY2ZkLCBTT0xfVExTLCBUTFNfUlgsIFxcdTAwMjZ0bHMxMiwgdGxzMTIubGVuKSwgMCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGxzLmM9MzQyNj1URVNUKGRhdGFfc3RlYWwpIHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYy0zNDUyLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYzozNDUzOlxcdHJldCA9IHNldHNvY2tvcHQoZmQsIElQUFJPVE9fVENQLCBUQ1BfVUxQLCBcXFwidGxzXFxcIiwgc2l6ZW9mKFxcXCJ0bHNcXFwiKSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jLTM0NTQtXFx0aWYgKHJldCkge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jLTM0NTctXFx0fVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90bHMuYzozNDU4OlxcdEFTU0VSVF9FUShzZXRzb2Nrb3B0KGNmZCwgSVBQUk9UT19UQ1AsIFRDUF9VTFAsIFxcXCJ0bHNcXFwiLCBzaXplb2YoXFxcInRsc1xcXCIpKSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3Rscy5jLTM0NTktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjQ0OjAwLjAyNTYxNjFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA3NDc2MDcxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIFRMUyBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhpcy4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBUTFMgaXMgY3VycmVudGx5IGhhbmRsZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIExldCdzIHN0YXJ0IHdpdGggYSBjaGVjayBvZiBgQ09ORklHX1RMU2Agd2l0aGluIHRoZSBLY29uZmlnIGZpbGVzLiBUaGlzIGlzIG15IGdvLXRvIHN0YXJ0aW5nIHBvaW50IHdoZW4gaW52ZXN0aWdhdGluZyBUTFMgZnVuY3Rpb25hbGl0eS4gSXQgd2lsbCBnaXZlIG1lIGEgYmFzZSB0byBzZWUgaWYgaXQncyBldmVuIGVuYWJsZWQgdG8gYmVnaW4gd2l0aC4gRnJvbSB0aGVyZSwgSSBjYW4gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gVExTIHRoYXQgYXJlIHByZXNlbnQsIGFuZCBxdWlja2x5IG1vdmUgdG8gdW5kZXJzdGFuZGluZyB3aGF0IGRlcGVuZGVuY2llcywgaWYgYW55LCBhcmUgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NjY5LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6NDQ6MDIuMTAwMzgwMDI3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTg5NjMzOTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUTFNcXFxcYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGxzL0tjb25maWctNC0jXFxubmV0L3Rscy9LY29uZmlnOjU6Y29uZmlnIFRMU1xcbm5ldC90bHMvS2NvbmZpZy02LVxcdHRyaXN0YXRlIFxcXCJUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6NDQ6MDQuMjkwMDE5NzQ1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMjkxNTAyNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipFeGFtaW5pbmcgdGhlIFRMUyBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJMZXQncyBjaGVjayBgbmV0L3Rscy9LY29uZmlnYC5cIiBHaXZlbiBteSBleHBlcnRpc2UsIEkga25vdyB0aGlzIGlzIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgd2hlbiBleGFtaW5pbmcgYW55IFRMUy1yZWxhdGVkIGNvbmZpZ3VyYXRpb24gd2l0aGluIHRoaXMgcHJvamVjdC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUsIHdoYXQgZGVmYXVsdHMgYXJlIHNldCwgYW5kIGhvdyBkaWZmZXJlbnQgZmVhdHVyZXMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuIFRoaXMgYEtjb25maWdgIGZpbGUgaXMgdGhlIGNlbnRyYWwgc291cmNlIG9mIHRydXRoIGZvciB0aGUgVExTIGJ1aWxkIGNvbmZpZ3VyYXRpb24sIGFuZCBpdCdsbCBnaXZlIG1lIHRoZSBsYXkgb2YgdGhlIGxhbmQgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIuIEknbSBleHBlY3RpbmcgdG8gZmluZCBkZXRhaWxzIG9uIHRoaW5ncyBsaWtlIHN1cHBvcnRlZCBjaXBoZXJzdWl0ZXMsIGtleSBleGNoYW5nZSBhbGdvcml0aG1zLCBhbmQgYW55IGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBvcHRpb25zLiBIb3BlZnVsbHksIHRoZSBmaWxlIGlzIHdlbGwtZG9jdW1lbnRlZCwgYWxsb3dpbmcgZm9yIGEgc3dpZnQgcmV2aWV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzg4NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjQ0OjA2LjQxOTE3MzE3NFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdGxzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgVExTIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdGNvbmZpZyBUTFNcXG4gICA2OlxcdFxcdHRyaXN0YXRlIFxcXCJUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgc3VwcG9ydFxcXCJcXG4gICA3OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgIDg6XFx0XFx0c2VsZWN0IENSWVBUT1xcbiAgIDk6XFx0XFx0c2VsZWN0IENSWVBUT19BRVNcXG4gIDEwOlxcdFxcdHNlbGVjdCBDUllQVE9fR0NNXFxuICAxMTpcXHRcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxuICAxMjpcXHRcXHRkZWZhdWx0IG5cXG4gIDEzOlxcdFxcdGhlbHBcXG4gIDE0OlxcdFxcdEVuYWJsZSBrZXJuZWwgc3VwcG9ydCBmb3IgVExTIHByb3RvY29sLiBUaGlzIGFsbG93cyBzeW1tZXRyaWNcXG4gIDE1OlxcdFxcdGVuY3J5cHRpb24gaGFuZGxpbmcgb2YgdGhlIFRMUyBwcm90b2NvbCB0byBiZSBkb25lIGluLWtlcm5lbC5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0XFx0SWYgdW5zdXJlLCBzYXkgTi5cXG4gIDE4OlxcdFxcbiAgMTk6XFx0Y29uZmlnIFRMU19ERVZJQ0VcXG4gIDIwOlxcdFxcdGJvb2wgXFxcIlRyYW5zcG9ydCBMYXllciBTZWN1cml0eSBIVyBvZmZsb2FkXFxcIlxcbiAgMjE6XFx0XFx0ZGVwZW5kcyBvbiBUTFNcXG4gIDIyOlxcdFxcdHNlbGVjdCBTS0JfREVDUllQVEVEXFxuICAyMzpcXHRcXHRzZWxlY3QgU09DS19WQUxJREFURV9YTUlUXFxuICAyNDpcXHRcXHRzZWxlY3QgU09DS19SWF9RVUVVRV9NQVBQSU5HXFxuICAyNTpcXHRcXHRkZWZhdWx0IG5cXG4gIDI2OlxcdFxcdGhlbHBcXG4gIDI3OlxcdFxcdEVuYWJsZSBrZXJuZWwgc3VwcG9ydCBmb3IgSFcgb2ZmbG9hZCBvZiB0aGUgVExTIHByb3RvY29sLlxcbiAgMjg6XFx0XFxuICAyOTpcXHRcXHRJZiB1bnN1cmUsIHNheSBOLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMDo0NDowNi40MTkyMzA5ODRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDU2MDUzMTA1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQ2hlY2tpbmcgYENPTkZJR19ORVRERVZTSU1gIGluIEtjb25maWcqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIHJpZ2h0IGluLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgQ09ORklHX05FVERFVlNJTWAgd2l0aGluIHRoZSBLY29uZmlnIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEknbSBpbW1lZGlhdGVseSB0aGlua2luZyB3ZSBuZWVkIHRvIGRldGVybWluZSBpdHMgY3VycmVudCBzdGF0ZSBhbmQgYXNzb2NpYXRlZCBkZXBlbmRlbmNpZXMuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCB0aGlzIG1hY3JvIGlzIGxpa2VseSBhIGNyaXRpY2FsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgZW5hYmxlcyBvciBkaXNhYmxlcyBzb21lIG5ldHdvcmsgZGV2aWNlIHNpbXVsYXRpb24gZnVuY3Rpb25hbGl0eS4gRGVwZW5kaW5nIG9uIGl0cyBzdGF0dXMsIGl0IGNvdWxkIGluZmx1ZW5jZSBhIHdpZGUgcmFuZ2Ugb2Ygb3RoZXIgZmVhdHVyZXMgYW5kIG1vZHVsZXMgd2l0aGluIHRoZSBrZXJuZWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3QuIFdoZXJlIGlzIGl0IGRlZmluZWQsIHdoYXQgb3RoZXIgc2V0dGluZ3MgZGVwZW5kIG9uIGl0LCBhbmQgd2hhdCBkb2VzIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdCBhY3R1YWxseSBkbyBpbiBwcmFjdGljYWwgdGVybXM/IFRpbWUgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBLY29uZmlnIHN0cnVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg0MzIsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjQ0OjEwLjk3OTc2NDk5M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0Njg5MjMzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUREVWU0lNXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9NjAyPXNvdXJjZSBcXFwiZHJpdmVycy9uZXQvaHlwZXJ2L0tjb25maWdcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZy02MDMtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo2MDQ6Y29uZmlnIE5FVERFVlNJTVxcbmRyaXZlcnMvbmV0L0tjb25maWctNjA1LVxcdHRyaXN0YXRlIFxcXCJTaW11bGF0ZWQgbmV0d29ya2luZyBkZXZpY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjQ0OjEyLjQyNjY2Mjg1N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTY4NDQwODM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgU29ja2V0IEFzc29jaWF0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzIHNvY2tldCBhc3NvY2lhdGlvbiBpc3N1ZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBzdGF0dXMgdXNpbmcgYGluZXRfY3NrX2hhc191bHAoc2spYCBhbmQgYHBzcF9za19hc3NvYyhzaylgLiBUaG9zZSBzZWVtIGxpa2UgdGhlIGtleSBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGUgVXNlci1MZXZlbCBQcm90b2NvbCBhbmQgdGhlIFBlcmZvcm1hbmNlLVNlbnNpdGl2ZSBQcm90b2NvbCBhc3NvY2lhdGlvbiwgcmVzcGVjdGl2ZWx5LiBNeSBndXQgdGVsbHMgbWUgdGhlc2UgYXJlIGNlbnRyYWwgdG8gdGhlIGlzc3VlLiBCZWZvcmUgSSBnbyB0b28gZGVlcCwgSSBuZWVkIHRvIGtub3cgd2hlcmUgdGhlc2UgYXJlIGRlZmluZWQuIEknbGwgbmVlZCB0byBjb25maXJtIHRoZSBkZWZpbml0aW9ucyBhbmQgd2hhdCB0aGUgYXNzb2NpYXRlZCBoZWFkZXJzIGFyZS4gU28sIGEgcXVpY2sgYGdyZXBgIGlzIGluIG9yZGVyLiBMZXQncyBzZWUgd2hhdCB0aGUgaW5jbHVkZXMgYXJlLCBhbmQgd2hpY2ggZmlsZXMgY29udGFpbiB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9ucy4gVGhpcyB3aWxsIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBjb250ZXh0LiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byByZWFzb24gYWJvdXQgaG93IHRoZXNlIGZ1bmN0aW9ucyByZWxhdGUgdG8gdGhlIGN1cnJlbnQgcHJvYmxlbS4gVGhhdCdzIHRoZSBmaXJzdCBzdG9wLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODcxMywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjQ0OjE1Ljk5NTExODQzMVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4NDE5MjgwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbmV0X2Nza19oYXNfdWxwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmg9MzM4PXN0YXRpYyBpbmxpbmUgdm9pZCBpbmV0X2Nza19pbmNfcGluZ3BvbmdfY250KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbmluY2x1ZGUvbmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmgtMzQ1LVxcbmluY2x1ZGUvbmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmg6MzQ2OnN0YXRpYyBpbmxpbmUgYm9vbCBpbmV0X2Nza19oYXNfdWxwKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG5pbmNsdWRlL25ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oLTM0Ny17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTc1MD1zdHJ1Y3Qgc2tfcHNvY2sgKnNrX3Bzb2NrX2luaXQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbm9kZSlcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtNzU2LVxcbm5ldC9jb3JlL3NrbXNnLmM6NzU3OlxcdGlmIChza19pc19pbmV0KHNrKSBcXHUwMDI2XFx1MDAyNiBpbmV0X2Nza19oYXNfdWxwKHNrKSkge1xcbm5ldC9jb3JlL3NrbXNnLmMtNzU4LVxcdFxcdHBzb2NrID0gRVJSX1BUUigtRUlOVkFMKTtcXG4tLVxcbm5ldC9jb3JlL3NvY2suYz0yNjc0PWJvb2wgc2tfaGFzX2RlY3J5cHRfdXNlcihjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvY29yZS9zb2NrLmMtMjY3Ni1cXHRyZXR1cm4gcHNwX3NrX2Fzc29jKHNrKSB8fFxcbm5ldC9jb3JlL3NvY2suYzoyNjc3OlxcdCAgICAgICAoc2tfaXNfaW5ldChzaykgXFx1MDAyNlxcdTAwMjYgaW5ldF9jc2tfaGFzX3VscChzaykpOyAvKiBmb3IgdGxzICovXFxubmV0L2NvcmUvc29jay5jLTI2NzgtfVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTcyNT1pbnQgdGNwX2JwZl91cGRhdGVfcHJvdG8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBib29sIHJlc3RvcmUpXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzM0LVxcdGlmIChyZXN0b3JlKSB7XFxubmV0L2lwdjQvdGNwX2JwZi5jOjczNTpcXHRcXHRpZiAoaW5ldF9jc2tfaGFzX3VscChzaykpIHtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzM2LVxcdFxcdFxcdC8qIFRMUyBkb2VzIG5vdCBoYXZlIGFuIHVuaGFzaCBwcm90byBpbiBTVyBjYXNlcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6NDQ6MTcuNDc5MzE1OVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTczMjQyOTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDaGVja2luZyB0aGUgYHBzcF9za19hc3NvY2AgRGF0YSoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBjb21lcyB0byBtaW5kIGlzIHRvIHRha2UgYSBsb29rIGF0IGBwc3Bfc2tfYXNzb2NgLiBJIG5lZWQgdG8gYXNzZXNzIHdoYXQncyBoYXBwZW5pbmcgd2l0aCB0aGF0IHBhcnRpY3VsYXIgZGF0YSBzdHJ1Y3R1cmUuIFRoaXMgY291bGQgYmUgYW55dGhpbmcgZnJvbSBjaGVja2luZyBpdHMgY3VycmVudCBzdGF0ZSBmb3IgdW5leHBlY3RlZCB2YWx1ZXMsIGNvbmZpcm1pbmcgaXRzIGV4cGVjdGVkIGJlaGF2aW9yIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucywgb3IgbWF5YmUgZXZlbiBqdXN0IHJlZnJlc2hpbmcgbXkgbWVtb3J5IG9uIGl0cyBleGFjdCBkZWZpbml0aW9uIGFuZCByb2xlIHdpdGhpbiB0aGUgd2lkZXIgc3lzdGVtLiBVbmRlcnN0YW5kaW5nIGl0cyBzdGF0dXMgaXMgZXNzZW50aWFsIGJlZm9yZSBwcm9jZWVkaW5nIGFueSBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTQ1NSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjQ0OjIwLjA1MjU2MTEwOVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyOTcyNjA0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwc3Bfc2tfYXNzb2NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTMzPXVuc2lnbmVkIGludCBwc3Bfa2V5X3NpemUodTMyIHZlcnNpb24pO1xcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDozNDp2b2lkIHBzcF9za19hc3NvY19mcmVlKHN0cnVjdCBzb2NrICpzayk7XFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTM1LXZvaWQgcHNwX3R3c2tfaW5pdChzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dywgY29uc3Qgc3RydWN0IHNvY2sgKnNrKTtcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD0zNz12b2lkIHBzcF9yZXBseV9zZXRfZGVjcnlwdGVkKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTM4LVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDozOTpzdGF0aWMgaW5saW5lIHN0cnVjdCBwc3BfYXNzb2MgKnBzcF9za19hc3NvYyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTQwLXtcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD00NT1wc3BfZW5xdWV1ZV9zZXRfZGVjcnlwdGVkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC00OC1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6NDk6XFx0cGFzID0gcHNwX3NrX2Fzc29jKHNrKTtcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtNTAtXFx0aWYgKHBhcyBcXHUwMDI2XFx1MDAyNiBwYXMtXFx1MDAzZXR4LnNwaSlcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD0xMTY9cHNwX3NrX3J4X3BvbGljeV9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTExNy17XFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjExODpcXHRyZXR1cm4gX19wc3Bfc2tfcnhfcG9saWN5X2NoZWNrKHNrYiwgcHNwX3NrX2Fzc29jKHNrKSk7XFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTExOS19XFxuLS1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9MTUwPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHBzcF9za19vdmVyaGVhZChjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTU3LSNlbHNlXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjE1ODpzdGF0aWMgaW5saW5lIHZvaWQgcHNwX3NrX2Fzc29jX2ZyZWUoc3RydWN0IHNvY2sgKnNrKSB7IH1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTU5LXN0YXRpYyBpbmxpbmUgdm9pZFxcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTE2Mz1wc3BfcmVwbHlfc2V0X2RlY3J5cHRlZChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpIHsgfVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xNjQtXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjE2NTpzdGF0aWMgaW5saW5lIHN0cnVjdCBwc3BfYXNzb2MgKnBzcF9za19hc3NvYyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTE2Ni17XFxuLS1cXG5uZXQvY29yZS9zb2NrLmM9MjY3ND1ib29sIHNrX2hhc19kZWNyeXB0X3VzZXIoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9jb3JlL3NvY2suYy0yNjc1LXtcXG5uZXQvY29yZS9zb2NrLmM6MjY3NjpcXHRyZXR1cm4gcHNwX3NrX2Fzc29jKHNrKSB8fFxcbm5ldC9jb3JlL3NvY2suYy0yNjc3LVxcdCAgICAgICAoc2tfaXNfaW5ldChzaykgXFx1MDAyNlxcdTAwMjYgaW5ldF9jc2tfaGFzX3VscChzaykpOyAvKiBmb3IgdGxzICovXFxuLS1cXG5uZXQvaXB2NC9hZl9pbmV0LmM9MTQwPXZvaWQgaW5ldF9zb2NrX2Rlc3RydWN0KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L2FmX2luZXQuYy0xNjYtXFx0ZHN0X3JlbGVhc2UocmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChzay1cXHUwMDNlc2tfcnhfZHN0LCAxKSk7XFxubmV0L2lwdjQvYWZfaW5ldC5jOjE2NzpcXHRwc3Bfc2tfYXNzb2NfZnJlZShzayk7XFxubmV0L2lwdjQvYWZfaW5ldC5jLTE2OC19XFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmM9MTE4PXZvaWQgcHNwX2Fzc29jX3B1dChzdHJ1Y3QgcHNwX2Fzc29jICpwYXMpXFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTIzLVxcbm5ldC9wc3AvcHNwX3NvY2suYzoxMjQ6dm9pZCBwc3Bfc2tfYXNzb2NfZnJlZShzdHJ1Y3Qgc29jayAqc2spXFxubmV0L3BzcC9wc3Bfc29jay5jLTEyNS17XFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmM9MTMyPWludCBwc3Bfc29ja19hc3NvY19zZXRfcngoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsXFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTQxLVxcbm5ldC9wc3AvcHNwX3NvY2suYzoxNDI6XFx0aWYgKHBzcF9za19hc3NvYyhzaykpIHtcXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTQzLVxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIlNvY2tldCBhbHJlYWR5IGhhcyBQU1Agc3RhdGVcXFwiKTtcXG4tLVxcbm5ldC9wc3AvcHNwX3NvY2suYz0xODE9aW50IHBzcF9zb2NrX2Fzc29jX3NldF90eChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwc3BfZGV2ICpwc2QsXFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTkwLVxcbm5ldC9wc3AvcHNwX3NvY2suYzoxOTE6XFx0cGFzID0gcHNwX3NrX2Fzc29jKHNrKTtcXG5uZXQvcHNwL3BzcF9zb2NrLmMtMTkyLVxcdGlmICghcGFzKSB7XFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmM9MjcwPXZvaWQgcHNwX3R3c2tfaW5pdChzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dywgY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9wc3AvcHNwX3NvY2suYy0yNzEte1xcbm5ldC9wc3AvcHNwX3NvY2suYzoyNzI6XFx0c3RydWN0IHBzcF9hc3NvYyAqcGFzID0gcHNwX3NrX2Fzc29jKHNrKTtcXG5uZXQvcHNwL3BzcF9zb2NrLmMtMjczLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMDo0NDoyMS40ODIyOTcxNDZaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDIyOTQ3MDk0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU3ltYm9sIE1vZGlmaWNhdGlvbnMgYW5kIENhbGxlciBSZWxhdGlvbnNoaXBzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIHRhc2sgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGltcGFjdCBvZiB0aGVzZSBzeW1ib2xzLiBGaXJzdCwgSSBuZWVkIHRvIGlkZW50aWZ5IHdoaWNoIHN5bWJvbHMgYXJlIGJlaW5nIG1vZGlmaWVkIG9yIG5ld2x5IGludHJvZHVjZWQuIEkndmUgbm90ZWQgYSBmZXcga2V5IGl0ZW1zIHJpZ2h0IG9mZiB0aGUgYmF0OlxuXG4xLiAgYHNrX2hhc19kZWNyeXB0X3VzZXJgIGluIGBuZXQvY29yZS9zb2NrLmNgLCB3aGljaCBpcyBhIG5vbi1zdGF0aWMgZnVuY3Rpb24uIFRoYXQncyBhIHBvaW50IHRvIHJlbWVtYmVyIGZvciBwb3RlbnRpYWwgZXh0ZXJuYWwgaW50ZXJhY3Rpb25zLlxuMi4gIGBfX3RjcF9zZXRfdWxwYCBpbiBgbmV0L2lwdjQvdGNwX3VscC5jYCB3aGljaCBpcyBzdGF0aWMgYW5kIGNhbGxlZCBieSBgdGNwX3NldF91bHBgLiBUaGUgZm9jdXMgaGVyZSBzaG91bGQgYmUgb24gYHRjcF9zZXRfdWxwYCBvciBgX190Y3Bfc2V0X3VscGAgcG90ZW50aWFsbHkgYm90aC5cbjMuICBgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4YCBpbiBgbmV0L3BzcC9wc3Bfc29jay5jYCwgYSBub24tc3RhdGljIGZ1bmN0aW9uIGNhbGxlZCBieSBgcHNwX25sX3J4X2Fzc29jX2RvaXRgLlxuNC4gIGBza19oYXNfdmFsaWRhdGVfeG1pdF9za2JgIGluIGBpbmNsdWRlL25ldC9zb2NrLmhgLCBhIHN0YXRpYyBpbmxpbmUgaGVscGVyLiBJdHMgY2FsbGVycyBhcmUgYF9fdGNwX3NldF91bHBgIGFuZCBgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4YC4gVGhpcyBpcyBpbXBvcnRhbnQsIGFzIHN0YXRpYyBpbmxpbmVzIGNhbiBpbnRyb2R1Y2UgY29tcGxleGl0aWVzIGluIHRyYWNpbmcuXG5cbk5vdyBJIG5lZWQgdG8gY2xhcmlmeSB0aGUgdmlzaWJpbGl0eSBvZiBgdGNwX3NldF91bHBgLiBJIHNlZSB0aGF0IGB0Y3Bfc2V0X3VscGAgaXRzZWxmIGlzIG5vbi1zdGF0aWMgaW4gYG5ldC9pcHY0L3RjcF91bHAuY2AuIFRoaXMgbWVhbnMgaXQgKmNvdWxkKiBiZSBleHRlcm5hbGx5IHZpc2libGUsIHNvIEkgbmVlZCB0byBjaGVjayBmb3IgZXh0ZXJuYWwgY2FsbHMuXG5cblRvIGVuc3VyZSBJIGhhdmUgYSBjb21wbGV0ZSBwaWN0dXJlLCBJIHdpbGwgcmV2aWV3IGFsbCBmdW5jdGlvbnMgaW4gYG5ldC9pcHY0L3RjcF91bHAuY2AsIGBuZXQvcHNwL3BzcF9zb2NrLmNgLCBhbmQgYG5ldC9jb3JlL3NvY2suY2A6XG5cbiogICBgc2tfaGFzX2RlY3J5cHRfdXNlcmBcbiogICBgdGNwX3NldF91bHBgXG4qICAgYF9fdGNwX3NldF91bHBgXG4qICAgYHBzcF9zb2NrX2Fzc29jX3NldF9yeGBcbiogICBgcHNwX25sX3J4X2Fzc29jX2RvaXRgXG5cbkZpbmFsbHksIEkgbmVlZCB0byB0aG9yb3VnaGx5IGV4YW1pbmUgdGhlIGNhbGxlcnMgb2YgYHRjcF9zZXRfdWxwYC4gVGhpcyBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgZmxvdyBhbmQgcG90ZW50aWFsIGltcGFjdCBvZiBhbnkgY2hhbmdlcyB0byB0aGlzIGZ1bmN0aW9uLiBUaGlzIGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgbXkgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwOTA2LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjQ0OjI1LjcxMTc3MDA3N1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxMTIxMzkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3Bfc2V0X3VscFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC90Y3AuaD0yODI5PXZvaWQgdGNwX3VucmVnaXN0ZXJfdWxwKHN0cnVjdCB0Y3BfdWxwX29wcyAqdHlwZSk7XFxuaW5jbHVkZS9uZXQvdGNwLmg6MjgzMDppbnQgdGNwX3NldF91bHAoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBjaGFyICpuYW1lKTtcXG5pbmNsdWRlL25ldC90Y3AuaC0yODMxLXZvaWQgdGNwX2dldF9hdmFpbGFibGVfdWxwKGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7XFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0zODM2PWludCBkb190Y3Bfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0zODc5LVxcdFxcdHNvY2tvcHRfbG9ja19zb2NrKHNrKTtcXG5uZXQvaXB2NC90Y3AuYzozODgwOlxcdFxcdGVyciA9IHRjcF9zZXRfdWxwKHNrLCBuYW1lKTtcXG5uZXQvaXB2NC90Y3AuYy0zODgxLVxcdFxcdHNvY2tvcHRfcmVsZWFzZV9zb2NrKHNrKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF91bHAuYz0xMTI9dm9pZCB0Y3BfY2xlYW51cF91bHAoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdGNwX3VscC5jLTEyOS1cXG5uZXQvaXB2NC90Y3BfdWxwLmM6MTMwOnN0YXRpYyBpbnQgX190Y3Bfc2V0X3VscChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCB0Y3BfdWxwX29wcyAqdWxwX29wcylcXG5uZXQvaXB2NC90Y3BfdWxwLmMtMTMxLXtcXG4tLVxcbm5ldC9pcHY0L3RjcF91bHAuYy0xNjAtXFxubmV0L2lwdjQvdGNwX3VscC5jOjE2MTppbnQgdGNwX3NldF91bHAoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBjaGFyICpuYW1lKVxcbm5ldC9pcHY0L3RjcF91bHAuYy0xNjIte1xcbi0tXFxubmV0L2lwdjQvdGNwX3VscC5jLTE3MC1cXG5uZXQvaXB2NC90Y3BfdWxwLmM6MTcxOlxcdHJldHVybiBfX3RjcF9zZXRfdWxwKHNrLCB1bHBfb3BzKTtcXG5uZXQvaXB2NC90Y3BfdWxwLmMtMTcyLX1cXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MTc4MT1pbnQgbXB0Y3Bfc3ViZmxvd19jcmVhdGVfc29ja2V0KHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgZmFtaWx5LFxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xODEyLVxcdHNrX25ldF9yZWZjbnRfdXBncmFkZShzZi1cXHUwMDNlc2spO1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTgxMzpcXHRlcnIgPSB0Y3Bfc2V0X3VscChzZi1cXHUwMDNlc2ssIFxcXCJtcHRjcFxcXCIpO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTgxNC1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMDo0NDoyNy4xMjI5ODkwMzdaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Nzk1MDgyOTAzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgYW5kIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlc2UgY29uZmlndXJhdGlvbnMuIEkgc2VlIHRoYXQgYElORVRfUFNQYCByZWxpZXMgb24gYElORVRgIGFuZCBzZWxlY3RzIGBTS0JfREVDUllQVEVEYCwgYFNLQl9FWFRFTlNJT05TYCwgYW5kIGBTT0NLX1ZBTElEQVRFX1hNSVRgLiBgVExTYCBhbHNvIGRlcGVuZHMgb24gYElORVRgLCBhbmQgYFRMU19ERVZJQ0VgIGRlcGVuZHMgb24gYFRMU2AsIHNoYXJpbmcgc29tZSBvZiB0aGUgc2FtZSBzZWxlY3RlZCBzeW1ib2xzIGFzIGBJTkVUX1BTUGAuIEkgYWxzbyBzZWUgdGhhdCBgTkVUREVWU0lNYCBpcyB0aGVyZSB0byBjcmVhdGUgc2ltdWxhdGVkIG5ldGRldnMgd2l0aCBQU1Agc3VwcG9ydC5cblxuU28sIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBgSU5FVF9QU1BgLCBgVExTYCwgYFRMU19ERVZJQ0VgLCBhbmQgYE5FVERFVlNJTWAuIE5vdywgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX0lORVRfUFNQYCBhY3R1YWxseSBlbmFibGVzIHRoZSBuZWNlc3NhcnkgY29kZSDigJMgSSdsbCBjaGVjayB0aGF0IGBuZXQvcHNwL3BzcF9zb2NrLmNgIGFuZCBgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4YCBhcmUgaW5kZWVkIGluY2x1ZGVkLiBMb29raW5nIGF0IHRoZSBNYWtlZmlsZXMgY29uZmlybXMgdGhpcyBkZXBlbmRlbmN5LlxuXG5OZXh0LCB0aGUgY3JpdGljYWwgc3ltYm9scy4gSSBoYXZlIHRvIGxvb2sgYXQgYHNrX2hhc19kZWNyeXB0X3VzZXJgLCBgdGNwX3NldF91bHBgLCBgX190Y3Bfc2V0X3VscGAsIGBwc3Bfc29ja19hc3NvY19zZXRfcnhgLCBhbmQgYHBzcF9ubF9yeF9hc3NvY19kb2l0YC4gQXJlIGFueSBvZiB0aGVzZSB3aWRlbHkgdXNlZD8gTm8sIHRoYW5rZnVsbHkuIGBza19oYXNfZGVjcnlwdF91c2VyYCBpcyBhIHJlY2VudCBhZGRpdGlvbiBhbmQgb25seSBjYWxsZWQgYnkgYSBmZXcgb3RoZXIgZnVuY3Rpb25zLCBhbmQgdGhlIG90aGVycyBhcmUgc3BlY2lmaWMgdG8gVENQIFVMUCBzZXR1cCBhbmQgUFNQIG5ldGxpbmsgaW50ZXJhY3Rpb25zLiBUaGF0J3MgZ29vZDsgaXQgbmFycm93cyB0aGUgc2NvcGUuXG5cbkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZXMsIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBtdXR1YWwgZXhjbHVzaXZpdHkgY2hlY2tzIGJldHdlZW4gUFNQIHNvY2tldCBhc3NvY2lhdGlvbnMsIFRDUCBVTFAgKGxpa2Uga1RMUyksIGFuZCBzb2NrZXRzIHdpdGggcGFja2V0IHRyYW5zbWlzc2lvbiB2YWxpZGF0aW9uLiBJdCBhZGRzIGNoZWNrcyBmb3IgYHNrX2hhc19kZWNyeXB0X3VzZXIoKWAgYW5kIGBza19oYXNfdmFsaWRhdGVfeG1pdF9za2IoKWAgaW4ga2V5IGZ1bmN0aW9ucyB0byBwcmV2ZW50IGNvbmZsaWN0cy4gVGhlc2UgbW9kaWZpY2F0aW9ucyB0b3VjaCBjcnVjaWFsIHNvY2tldCBjb25maWd1cmF0aW9uIHBhdGhzLCBhY2Nlc3NpYmxlIHZpYSBUQ1Agb3B0aW9ucyBhbmQgbmV0bGluayBjb21tYW5kcy4gVGhhdCdzIGEgY2xhc3NpYyBzY2VuYXJpbyBmb3IgZnV6emluZy5cblxuQWxyaWdodCwgZG91YmxlLWNoZWNraW5nIG15IG5vdGVzOlxuXG4qICAgKipXb3J0aEZ1enppbmc6KiogVHJ1ZVxuKiAgICoqRm9jdXNTeW1ib2xzOioqIFxcW1wic2tcXF9oYXNcXF9kZWNyeXB0XFxfdXNlclwiLCBcInRjcFxcX3NldFxcX3VscFwiLCBcIlxcX1xcX3RjcFxcX3NldFxcX3VscFwiLCBcInBzcFxcX3NvY2tcXF9hc3NvY1xcX3NldFxcX3J4XCIsIFwicHNwXFxfbmxcXF9yeFxcX2Fzc29jXFxfZG9pdFwiXVxuKiAgICoqRW5hYmxlQ29uZmlnczoqKiBcXFtcIklORVRcXF9QU1BcIiwgXCJUTFNcIiwgXCJUTFNcXF9ERVZJQ0VcIiwgXCJORVRERVZTSU1cIl1cbiogICAqKlJlYXNvbmluZzoqKiBDb25jaXNlIGFuZCBhY2N1cmF0ZS5cblxuRXZlcnl0aGluZyBjaGVja3Mgb3V0LiBJJ20gcmVhZHkgdG8gcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIzNzcsIk91dHB1dFRva2VucyI6MjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjQ0OjM1LjA3MzgyMDEwN1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMjQ2OTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUX1BTUFwiLFxuICAgIFwiVExTXCIsXG4gICAgXCJUTFNfREVWSUNFXCIsXG4gICAgXCJORVRERVZTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza19oYXNfZGVjcnlwdF91c2VyXCIsXG4gICAgXCJ0Y3Bfc2V0X3VscFwiLFxuICAgIFwiX190Y3Bfc2V0X3VscFwiLFxuICAgIFwicHNwX3NvY2tfYXNzb2Nfc2V0X3J4XCIsXG4gICAgXCJwc3BfbmxfcnhfYXNzb2NfZG9pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc29ja2V0IHN0YXRlIGV4Y2x1c2l2aXR5IGNoZWNrcyBiZXR3ZWVuIFBTUCAoUFNQIFNlY3VyaXR5IFByb3RvY29sKSBzb2NrZXQgYXNzb2NpYXRpb25zLCBUQ1AgVUxQIChlLmcuLCBrVExTKSwgYW5kIHNvY2tldHMgd2l0aCB0cmFuc21pdCB2YWxpZGF0aW9uIGhhbmRsZXJzIChza192YWxpZGF0ZV94bWl0X3NrYikuIEl0IGFkZHMgc2tfaGFzX2RlY3J5cHRfdXNlcigpIGFuZCBza19oYXNfdmFsaWRhdGVfeG1pdF9za2IoKSB2YWxpZGF0aW9ucyBpbiBfX3RjcF9zZXRfdWxwKCkgYW5kIHBzcF9zb2NrX2Fzc29jX3NldF9yeCgpIHRvIHByZXZlbnQgY29uZmxpY3Rpbmcgc29ja2V0IG9mZmxvYWQgc3RhdGVzLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIFRDUCBzZXRzb2Nrb3B0KFRDUF9VTFApIGFuZCBQU1AgTmV0bGluayBjb21tYW5kcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUX1BTUFwiLFxuICAgIFwiVExTXCIsXG4gICAgXCJUTFNfREVWSUNFXCIsXG4gICAgXCJORVRERVZTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza19oYXNfZGVjcnlwdF91c2VyXCIsXG4gICAgXCJ0Y3Bfc2V0X3VscFwiLFxuICAgIFwiX190Y3Bfc2V0X3VscFwiLFxuICAgIFwicHNwX3NvY2tfYXNzb2Nfc2V0X3J4XCIsXG4gICAgXCJwc3BfbmxfcnhfYXNzb2NfZG9pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc29ja2V0IHN0YXRlIGV4Y2x1c2l2aXR5IGNoZWNrcyBiZXR3ZWVuIFBTUCAoUFNQIFNlY3VyaXR5IFByb3RvY29sKSBzb2NrZXQgYXNzb2NpYXRpb25zLCBUQ1AgVUxQIChlLmcuLCBrVExTKSwgYW5kIHNvY2tldHMgd2l0aCB0cmFuc21pdCB2YWxpZGF0aW9uIGhhbmRsZXJzIChza192YWxpZGF0ZV94bWl0X3NrYikuIEl0IGFkZHMgc2tfaGFzX2RlY3J5cHRfdXNlcigpIGFuZCBza19oYXNfdmFsaWRhdGVfeG1pdF9za2IoKSB2YWxpZGF0aW9ucyBpbiBfX3RjcF9zZXRfdWxwKCkgYW5kIHBzcF9zb2NrX2Fzc29jX3NldF9yeCgpIHRvIHByZXZlbnQgY29uZmxpY3Rpbmcgc29ja2V0IG9mZmxvYWQgc3RhdGVzLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgdmlhIFRDUCBzZXRzb2Nrb3B0KFRDUF9VTFApIGFuZCBQU1AgTmV0bGluayBjb21tYW5kcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6NDQ6MzUuMTQ0MDczNzE2WiIsIlNlcSI6MzksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTcxNTU5NjIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjQ0OjM1LjE0NDUyNzQ5NloiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE1NzE1MTM3MTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG11dHVhbCBleGNsdXNpdml0eSBjaGVja3MgKHNrX2hhc19kZWNyeXB0X3VzZXIgYW5kIHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYikgdG8gcHJldmVudCBpbmNvbXBhdGlibGUgc29ja2V0IHN0YXRlcyB3aGVuIGNvbmZpZ3VyaW5nIFRDUCBVTFAgKGUuZy4ga1RMUykgYW5kIFBTUCAoUFNQIHNlY3VyaXR5IHByb3RvY29sKSBvbiB0aGUgc2FtZSBzb2NrZXQuIFxcblxcbkl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIGNvcGllcyB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhY2Nlc3Mgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgdGVzdGluZyBhbmQgc2FuaXRpemVycyBsaWtlIEtBU0FOIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBtZW1vcnkgc2FmZXR5IG9yIHN0YXRlIG1hbmFnZW1lbnQgaXNzdWVzLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2I0ZjIyZTFkMmUyZmI4MjNkODJiYjY0YTFlMTk0MzQ4NDc1MTJjMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDAwOjQyOjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc29jay5oIGIvaW5jbHVkZS9uZXQvc29jay5oXG5pbmRleCA1MTE4NTIyMmFhYzI5Li5iYTVlNTA5MmYxOTJjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvc29jay5oXG4rKysgYi9pbmNsdWRlL25ldC9zb2NrLmhcbkBAIC0yMzEyLDYgKzIzMTIsMTcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNrX2dzb19kaXNhYmxlKHN0cnVjdCBzb2NrICpzaylcbiBcdHNrLVx1MDAzZXNrX3JvdXRlX2NhcHMgXHUwMDI2PSB+TkVUSUZfRl9HU09fTUFTSztcbiB9XG4gXG4rc3RhdGljIGlubGluZSBib29sIHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYihjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4re1xuKyNpZmRlZiBDT05GSUdfU09DS19WQUxJREFURV9YTUlUXG4rXHRyZXR1cm4gISFzay1cdTAwM2Vza192YWxpZGF0ZV94bWl0X3NrYjtcbisjZWxzZVxuK1x0cmV0dXJuIGZhbHNlO1xuKyNlbmRpZlxuK31cbitcbitib29sIHNrX2hhc19kZWNyeXB0X3VzZXIoY29uc3Qgc3RydWN0IHNvY2sgKnNrKTtcbitcbiBzdGF0aWMgaW5saW5lIGludCBza2JfZG9fY29weV9kYXRhX25vY2FjaGUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sIGNoYXIgKnRvLFxuIFx0XHRcdFx0XHQgICBpbnQgY29weSwgaW50IG9mZnNldClcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9zb2NrLmMgYi9uZXQvY29yZS9zb2NrLmNcbmluZGV4IGZhNjBiNzQ5NGM1ODYuLjk0ODlkOWM0Nzk0OTMgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9zb2NrLmNcbisrKyBiL25ldC9jb3JlL3NvY2suY1xuQEAgLTE0Miw2ICsxNDIsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9zb2NrLmhcdTAwM2VcbiBcbisjaW5jbHVkZSBcdTAwM2NuZXQvcHNwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvdGNwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvYnVzeV9wb2xsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcGhvbmV0L3Bob25ldC5oXHUwMDNlXG5AQCAtMjY3MCw2ICsyNjcxLDEyIEBAIHZvaWQgc2tfc2V0dXBfY2FwcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoc2tfc2V0dXBfY2Fwcyk7XG4gXG4rYm9vbCBza19oYXNfZGVjcnlwdF91c2VyKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHRyZXR1cm4gcHNwX3NrX2Fzc29jKHNrKSB8fFxuK1x0ICAgICAgIChza19pc19pbmV0KHNrKSBcdTAwMjZcdTAwMjYgaW5ldF9jc2tfaGFzX3VscChzaykpOyAvKiBmb3IgdGxzICovXG4rfVxuK1xuIC8qXG4gICpcdFNpbXBsZSByZXNvdXJjZSBtYW5hZ2VycyBmb3Igc29ja2V0cy5cbiAgKi9cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfdWxwLmMgYi9uZXQvaXB2NC90Y3BfdWxwLmNcbmluZGV4IDJhYTQ0MjEyODYzMGUuLmYzZTBjOWQzNzliYjYgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfdWxwLmNcbisrKyBiL25ldC9pcHY0L3RjcF91bHAuY1xuQEAgLTEzNiw2ICsxMzYsMTAgQEAgc3RhdGljIGludCBfX3RjcF9zZXRfdWxwKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHRjcF91bHBfb3BzICp1bHBfb3BzKVxuIFx0aWYgKGljc2stXHUwMDNlaWNza191bHBfb3BzKVxuIFx0XHRnb3RvIG91dF9lcnI7XG4gXG4rXHRlcnIgPSAtRUlOVkFMO1xuK1x0aWYgKHNrX2hhc19kZWNyeXB0X3VzZXIoc2spIHx8IHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYihzaykpXG4rXHRcdGdvdG8gb3V0X2VycjtcbitcbiBcdGlmIChzay1cdTAwM2Vza19zb2NrZXQpXG4gXHRcdGNsZWFyX2JpdChTT0NLX1NVUFBPUlRfWkMsIFx1MDAyNnNrLVx1MDAzZXNrX3NvY2tldC1cdTAwM2VmbGFncyk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L3BzcC9wc3Bfc29jay5jIGIvbmV0L3BzcC9wc3Bfc29jay5jXG5pbmRleCAxYTJhNmI3NTE2YjBmLi41MDkwMzU2MTc4OTRhIDEwMDY0NFxuLS0tIGEvbmV0L3BzcC9wc3Bfc29jay5jXG4rKysgYi9uZXQvcHNwL3BzcF9zb2NrLmNcbkBAIC0xNDMsNiArMTQzLDEwIEBAIGludCBwc3Bfc29ja19hc3NvY19zZXRfcngoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcHNwX2Fzc29jICpwYXMsXG4gXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJTb2NrZXQgYWxyZWFkeSBoYXMgUFNQIHN0YXRlXCIpO1xuIFx0XHRlcnIgPSAtRUJVU1k7XG4gXHRcdGdvdG8gZXhpdF91bmxvY2s7XG4rXHR9IGVsc2UgaWYgKHNrX2hhc19kZWNyeXB0X3VzZXIoc2spIHx8IHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYihzaykpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcIlNvY2tldCBoYXMgaW5jb21wYXRpYmxlIHN0YXRlXCIpO1xuK1x0XHRlcnIgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIGV4aXRfdW5sb2NrO1xuIFx0fVxuIFxuIFx0cmVmY291bnRfaW5jKFx1MDAyNnBhcy1cdTAwM2VyZWZjbnQpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZ1xuaW5kZXggYjY5ODljN2QzZDlkMS4uNDgzOGFkZjI3ZmExYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L2NvbmZpZ1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvY29uZmlnXG5AQCAtMjEsNSArMjEsNiBAQCBDT05GSUdfTkVUX1NDSF9JTkdSRVNTPXlcbiBDT05GSUdfTkVUX1NDSF9QUklPPW1cbiBDT05GSUdfUFBQPXlcbiBDT05GSUdfUFBQT0U9eVxuK0NPTkZJR19UTFM9eVxuIENPTkZJR19WTEFOXzgwMjFRPW1cbiBDT05GSUdfWERQX1NPQ0tFVFM9eVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weVxuaW5kZXggMzE1NjQ4YTc3MGQwMC4uMTJiMjdmMmEzZmExYiAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RyaXZlcnMvbmV0L3BzcC5weVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZHJpdmVycy9uZXQvcHNwLnB5XG5AQCAtMjMsNiArMjMsOCBAQCBmcm9tIGxpYi5weSBpbXBvcnQgTmV0TlNFbnRlclxuIGZyb20gbGliLnB5IGltcG9ydCBia2csIHJhbmRfcG9ydCwgd2FpdF9wb3J0X2xpc3RlblxuIGZyb20gbGliLnB5IGltcG9ydCBpcFxuIFxuK1RDUF9VTFAgPSAzMVxuK1xuIFxuIGRlZiBfZ2V0X291dHEocyk6XG4gICAgIG9uZSA9IGInXFwwJyAqIDRcbkBAIC0zMzMsNiArMzM1LDUwIEBAIGRlZiBhc3NvY192ZXJzaW9uX21pc21hdGNoKGNmZyk6XG4gICAgICAgICAgICAga3NmdF9lcSh0aGVfZXhjZXB0aW9uLm5sX21zZy5lcnJvciwgLWVycm5vLkVJTlZBTClcbiBcbiBcbitkZWYgX3JlcXVpcmVfdGxzX3VscCgpOlxuKyAgICB3aXRoIHNvY2tldC5jcmVhdGVfc2VydmVyKChcImxvY2FsaG9zdFwiLCAwKSkgYXMgc3J2OlxuKyAgICAgICAgd2l0aCBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oc3J2LmdldHNvY2tuYW1lKCkpIGFzIHM6XG4rICAgICAgICAgICAgdHJ5OlxuKyAgICAgICAgICAgICAgICBzLnNldHNvY2tvcHQoc29ja2V0LlNPTF9UQ1AsIFRDUF9VTFAsIGJcInRsc1wiKVxuKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzpcbisgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcImtUTFMgbm90IGF2YWlsYWJsZVwiKSBmcm9tIGV4Y1xuK1xuK1xuK2RlZiBhc3NvY19wc3BfdWxwX2V4Y2x1c2l2ZShjZmcpOlxuKyAgICBcIlwiXCIgVGVzdCB0aGF0IGEgVENQIFVMUCBjYW5ub3QgYmUgYXR0YWNoZWQgdG8gYSBQU1Agc29ja2V0IFwiXCJcIlxuKyAgICBfaW5pdF9wc3BfZGV2KGNmZylcbisgICAgX3JlcXVpcmVfdGxzX3VscCgpXG4rXG4rICAgIHdpdGggX21ha2VfY2xyX2Nvbm4oY2ZnKSBhcyBzOlxuKyAgICAgICAgdHJ5OlxuKyAgICAgICAgICAgIGNmZy5wc3BubC5yeF9hc3NvYyh7XCJ2ZXJzaW9uXCI6IDAsXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRldi1pZFwiOiBjZmcucHNwX2Rldl9pZCxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic29jay1mZFwiOiBzLmZpbGVubygpfSlcbisgICAgICAgICAgICB3aXRoIGtzZnRfcmFpc2VzKE9TRXJyb3IpIGFzIGNtOlxuKyAgICAgICAgICAgICAgICBzLnNldHNvY2tvcHQoc29ja2V0LlNPTF9UQ1AsIFRDUF9VTFAsIGJcInRsc1wiKVxuKyAgICAgICAgICAgIGtzZnRfZXEoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FSU5WQUwpXG4rICAgICAgICBmaW5hbGx5OlxuKyAgICAgICAgICAgIF9jbG9zZV9jb25uKGNmZywgcylcbitcbitcbitkZWYgYXNzb2NfdWxwX3BzcF9leGNsdXNpdmUoY2ZnKTpcbisgICAgXCJcIlwiIFRlc3QgdGhhdCBhIFBTUCBhc3NvYyBjYW5ub3QgYmUgYWRkZWQgdG8gYSBzb2NrZXQgd2l0aCBhIFRDUCBVTFAgXCJcIlwiXG4rICAgIF9pbml0X3BzcF9kZXYoY2ZnKVxuKyAgICBfcmVxdWlyZV90bHNfdWxwKClcbitcbisgICAgd2l0aCBfbWFrZV9jbHJfY29ubihjZmcpIGFzIHM6XG4rICAgICAgICB0cnk6XG4rICAgICAgICAgICAgcy5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfVENQLCBUQ1BfVUxQLCBiXCJ0bHNcIilcbisgICAgICAgICAgICB3aXRoIGtzZnRfcmFpc2VzKE5sRXJyb3IpIGFzIGNtOlxuKyAgICAgICAgICAgICAgICBjZmcucHNwbmwucnhfYXNzb2Moe1widmVyc2lvblwiOiAwLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGV2LWlkXCI6IGNmZy5wc3BfZGV2X2lkLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic29jay1mZFwiOiBzLmZpbGVubygpfSlcbisgICAgICAgICAgICBrc2Z0X2VxKGNtLmV4Y2VwdGlvbi5ubF9tc2cuZXJyb3IsIC1lcnJuby5FSU5WQUwpXG4rICAgICAgICAgICAga3NmdF9lcShjbS5leGNlcHRpb24ubmxfbXNnLmV4dGFja1snYmFkLWF0dHInXSwgXCIuc29jay1mZFwiKVxuKyAgICAgICAgZmluYWxseTpcbisgICAgICAgICAgICBfY2xvc2VfY29ubihjZmcsIHMpXG4rXG4rXG4gZGVmIGFzc29jX3R3aWNlKGNmZyk6XG4gICAgIFwiXCJcIiBUZXN0IHJldXNpbmcgVHggYXNzb2MgZm9yIHR3byBzb2NrZXRzIFwiXCJcIlxuICAgICBfaW5pdF9wc3BfZGV2KGNmZylcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjQ0OjM1LjE0NDUyODM3NloiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NTY0MTkwNjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBNdXR1YWwgRXhjbHVzaW9uIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgZW5mb3JjaW5nIG11dHVhbCBleGNsdXNpdml0eSBiZXR3ZWVuIFBTUCAodGhlIFBTUCBzZWN1cml0eSBwcm90b2NvbC9zb2NrZXQpIGFuZCBUQ1AgVUxQcyAobGlrZSBrVExTKSBvbiBhIHNpbmdsZSBzb2NrZXQuIEl0J3MgYWxzbyBhZGRpbmcgY2hlY2tzIGZvciBgc2tfaGFzX3ZhbGlkYXRlX3htaXRfc2tiKHNrKWAsIHdoaWNoIEknbGwgbmVlZCB0byBrZWVwIGluIG1pbmQuXG5cbkxldCdzIGJyZWFrIGRvd24gdGhlIGNoYW5nZXM6XG5cbiogICAqKkhlYWRlciBhbmQgRGVjbGFyYXRpb25zOioqIFdlJ3ZlIGdvdCBgaW5jbHVkZS9uZXQvc29jay5oYCBhZGRpbmcgYW4gaW5saW5lIGBza19oYXNfdmFsaWRhdGVfeG1pdF9za2IoY29uc3Qgc3RydWN0IHNvY2sgKnNrKWAgYW5kIGRlY2xhcmluZyBgYm9vbCBza19oYXNfZGVjcnlwdF91c2VyKGNvbnN0IHN0cnVjdCBzb2NrICpzayk7YCBUaGlzIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIG5ldyBgc2tfaGFzX3ZhbGlkYXRlX3htaXRfc2tiYCBsaWtlbHkgc2ltcGxpZmllcyBjaGVja2luZyBmb3Igc29tZXRoaW5nLCBhbmQgYHNrX2hhc19kZWNyeXB0X3VzZXJgIHdpbGwgYmUga2V5LlxuXG4qICAgKipEZWZpbml0aW9uIG9mIGBza19oYXNfZGVjcnlwdF91c2VyYDoqKiBJbiBgbmV0L2NvcmUvc29jay5jYCwgdGhlIGRlZmluaXRpb24gb2YgYHNrX2hhc19kZWNyeXB0X3VzZXIoY29uc3Qgc3RydWN0IHNvY2sgKnNrKWAgaXMgdGhlIGNvcmUgbG9naWM6IGByZXR1cm4gcHNwX3NrX2Fzc29jKHNrKSB8fCAoc2tfaXNfaW5ldChzaykgXHUwMDI2XHUwMDI2IGluZXRfY3NrX2hhc191bHAoc2spKTtgLiBFc3NlbnRpYWxseSwgaWYgZWl0aGVyIFBTUCBpcyBhc3NvY2lhdGVkIE9SIGlmIGl0J3MgYW4gaW5ldCBzb2NrZXQgKmFuZCogYSBVTFAgaXMgcHJlc2VudCAobGlrZSBUTFMpLCB0aGVuIHdlIHNheSBkZWNyeXB0aW9uIGlzIGhhbmRsZWQuIE1ha2VzIHNlbnNlLlxuXG4qICAgKipFbmZvcmNlbWVudCBpbiBVTFAgYW5kIFBTUDoqKiBUaGUgYG5ldC9pcHY0L3RjcF91bHAuY2AgaW4gYF9fdGNwX3NldF91bHBgIGNoZWNrcyBmb3IgYHNrX2hhc19kZWNyeXB0X3VzZXIoc2spIHx8IHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYihzaylgLiBJZiAqZWl0aGVyKiBvZiB0aG9zZSBjb25kaXRpb25zIGlzIHRydWUsIGl0IGVycm9ycyBvdXQuIFRoaXMgaXMgd2hlcmUgdGhlIG11dHVhbCBleGNsdXNpb24gY29tZXMgaW50byBwbGF5OiB5b3UgY2FuJ3Qgc2V0IGEgVUxQIGlmIFBTUCBpcyBhbHJlYWR5IGFjdGl2ZSBvciBgdmFsaWRhdGVfeG1pdF9za2JgIGlzIHNldC4gU2ltaWxhcmx5LCBpbiBgbmV0L3BzcC9wc3Bfc29jay5jYCwgYHBzcF9zb2NrX2Fzc29jX3NldF9yeGAgY2hlY2tzIGZvciB0aGUgc2FtZSBjb25kaXRpb25zIGJlZm9yZSBhbGxvd2luZyBhIFBTUCBhc3NvY2lhdGlvbi5cblxuKiAgICoqU2VsZnRlc3RzOioqIEZpbmFsbHksIHRoZXJlIGFyZSB1cGRhdGVzIHRvIHRoZSBzZWxmdGVzdHMgd2hpY2ggSSdsbCBjZXJ0YWlubHkgbmVlZCB0byByZXZpZXcuXG5cblNvLCBpbiBlc3NlbmNlLCB0aGUgcGF0Y2ggcmlnb3JvdXNseSBwcmV2ZW50cyBhdHRhY2hpbmcgYSBVTFAgaWYgUFNQIGlzIGFjdGl2ZSwgb3IgYHZhbGlkYXRlX3htaXRfc2tiYCBpcyBwcmVzZW50LiBBbmQgY29udmVyc2VseSwgaXQgcHJldmVudHMgYXR0YWNoaW5nIFBTUCBpZiBhIFVMUCBvciBgdmFsaWRhdGVfeG1pdF9za2JgIGlzIGFscmVhZHkgdGhlcmUuIEl0J3MgYSBjbGVhbiBleGNsdXNpdml0eSBpbXBsZW1lbnRhdGlvbi5cblxuKipNZW1vcnkgU2FmZXR5IENvbnNpZGVyYXRpb25zOioqXG5cbk5vdywgbGV0J3MgdGhpbmsgYWJvdXQgcG90ZW50aWFsIHJpc2tzLiBDcnVjaWFsbHk6XG5cbiogICBObyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBzbyBubyBvYnZpb3VzIGFsbG9jYXRpb24tcmVsYXRlZCBidWdzLlxuKiAgIE5vIGBjb3B5X3RvX3VzZXJgIGNhbGxzIHRoYXQgY291bGQgbGVhayBpbmZvcm1hdGlvbi5cbiogICBObyBuZXcgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzIGFyZSBpbnRyb2R1Y2VkLlxuKiAgIE5vIGJyYW5jaGluZyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEsIHNvIG5vIGNvbnRyb2wtZmxvdyBpc3N1ZXMuXG4qICAgVGhpcyBpcyBzdHJpY3RseSBhIG11dHVhbCBleGNsdXNpb24gZW5mb3JjZW1lbnQsIHNvIGl0IHNob3VsZG4ndCBpbnRyb2R1Y2UgYW55IG5ldyBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgb3IgbWVtb3J5IHJpc2tzLCBhc3N1bWluZyB0aGUgZnVuY3Rpb25zIGl0IHVzZXMgKGBwc3Bfc2tfYXNzb2NgLCBgaW5ldF9jc2tfaGFzX3VscGAsIGFuZCBgc2tfaGFzX3ZhbGlkYXRlX3htaXRfc2tiYCkgYXJlIHRoZW1zZWx2ZXMgc2FmZS5cblxuKipSZW1haW5pbmcgQ29uY2VybnM6KipcblxuSSdtIGNvbmZpZGVudCB0aGUgbWVtb3J5IGFzcGVjdHMgYXJlIGhhbmRsZWQuIEhvd2V2ZXIsIEkgbmVlZCB0byBkbyBhIHRob3JvdWdoIHJldmlldyBvZiB0aGUgaW1wbGVtZW50YXRpb25zIG9mIGBwc3Bfc2tfYXNzb2NgLCBgaW5ldF9jc2tfaGFzX3VscGAgYW5kIHdoYXQgYHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYmAgbWVhbnMuIEknbGwgY2hlY2sgdGhhdCB0aG9zZSBmdW5jdGlvbnMgdGhlbXNlbHZlcyBhcmUgcm9idXN0IGFuZCBjb3JyZWN0bHkgaGFuZGxlIHRoZWlyIHJlc3BlY3RpdmUgc3RhdGVzLiBUaGF04oCZcyBwcm9iYWJseSB0aGUgbW9zdCBjcml0aWNhbCBhcmVhIHRvIHZlcmlmeS4gQWxzbywgdGhlIHNlbGZ0ZXN0cyBzaG91bGQgYmUgY29tcHJlaGVuc2l2ZSBlbm91Z2ggdG8gY292ZXIgYWxsIHRoZSBwb3NzaWJsZSBzY2VuYXJpb3MuIEknbGwgbmVlZCB0byBnbyB0aHJvdWdoIHRob3NlIHdpdGggYSBmaW5lLXRvb3RoIGNvbWIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NTUsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMDo0NDo0MS43MDg3MjE4NjNaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjA4ODI4MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHNwX3NrX2Fzc29jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD0zMz11bnNpZ25lZCBpbnQgcHNwX2tleV9zaXplKHUzMiB2ZXJzaW9uKTtcXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6MzQ6dm9pZCBwc3Bfc2tfYXNzb2NfZnJlZShzdHJ1Y3Qgc29jayAqc2spO1xcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0zNS12b2lkIHBzcF90d3NrX2luaXQoc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHcsIGNvbnN0IHN0cnVjdCBzb2NrICpzayk7XFxuLS1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9Mzc9dm9pZCBwc3BfcmVwbHlfc2V0X2RlY3J5cHRlZChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0zOC1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg6Mzk6c3RhdGljIGlubGluZSBzdHJ1Y3QgcHNwX2Fzc29jICpwc3Bfc2tfYXNzb2MoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC00MC17XFxuLS1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9NDU9cHNwX2VucXVldWVfc2V0X2RlY3J5cHRlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtNDgtXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oOjQ5OlxcdHBhcyA9IHBzcF9za19hc3NvYyhzayk7XFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTUwLVxcdGlmIChwYXMgXFx1MDAyNlxcdTAwMjYgcGFzLVxcdTAwM2V0eC5zcGkpXFxuLS1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmg9MTE2PXBzcF9za19yeF9wb2xpY3lfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xMTcte1xcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDoxMTg6XFx0cmV0dXJuIF9fcHNwX3NrX3J4X3BvbGljeV9jaGVjayhza2IsIHBzcF9za19hc3NvYyhzaykpO1xcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xMTktfVxcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oPTE1MD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBwc3Bfc2tfb3ZlcmhlYWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTE1Ny0jZWxzZVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDoxNTg6c3RhdGljIGlubGluZSB2b2lkIHBzcF9za19hc3NvY19mcmVlKHN0cnVjdCBzb2NrICpzaykgeyB9XFxuaW5jbHVkZS9uZXQvcHNwL2Z1bmN0aW9ucy5oLTE1OS1zdGF0aWMgaW5saW5lIHZvaWRcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaD0xNjM9cHNwX3JlcGx5X3NldF9kZWNyeXB0ZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSB7IH1cXG5pbmNsdWRlL25ldC9wc3AvZnVuY3Rpb25zLmgtMTY0LVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaDoxNjU6c3RhdGljIGlubGluZSBzdHJ1Y3QgcHNwX2Fzc29jICpwc3Bfc2tfYXNzb2MoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbmluY2x1ZGUvbmV0L3BzcC9mdW5jdGlvbnMuaC0xNjYte1xcbi0tXFxubmV0L2NvcmUvc29jay5jPTI2NzQ9Ym9vbCBza19oYXNfZGVjcnlwdF91c2VyKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG5uZXQvY29yZS9zb2NrLmMtMjY3NS17XFxubmV0L2NvcmUvc29jay5jOjI2NzY6XFx0cmV0dXJuIHBzcF9za19hc3NvYyhzaykgfHxcXG5uZXQvY29yZS9zb2NrLmMtMjY3Ny1cXHQgICAgICAgKHNrX2lzX2luZXQoc2spIFxcdTAwMjZcXHUwMDI2IGluZXRfY3NrX2hhc191bHAoc2spKTsgLyogZm9yIHRscyAqL1xcbi0tXFxubmV0L2lwdjQvYWZfaW5ldC5jPTE0MD12b2lkIGluZXRfc29ja19kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTY2LVxcdGRzdF9yZWxlYXNlKHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoc2stXFx1MDAzZXNrX3J4X2RzdCwgMSkpO1xcbm5ldC9pcHY0L2FmX2luZXQuYzoxNjc6XFx0cHNwX3NrX2Fzc29jX2ZyZWUoc2spO1xcbm5ldC9pcHY0L2FmX2luZXQuYy0xNjgtfVxcbi0tXFxubmV0L3BzcC9wc3Bfc29jay5jPTExOD12b2lkIHBzcF9hc3NvY19wdXQoc3RydWN0IHBzcF9hc3NvYyAqcGFzKVxcbi0tXFxubmV0L3BzcC9wc3Bfc29jay5jLTEyMy1cXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTI0OnZvaWQgcHNwX3NrX2Fzc29jX2ZyZWUoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9wc3AvcHNwX3NvY2suYy0xMjUte1xcbi0tXFxubmV0L3BzcC9wc3Bfc29jay5jPTEzMj1pbnQgcHNwX3NvY2tfYXNzb2Nfc2V0X3J4KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBzcF9hc3NvYyAqcGFzLFxcbi0tXFxubmV0L3BzcC9wc3Bfc29jay5jLTE0MS1cXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTQyOlxcdGlmIChwc3Bfc2tfYXNzb2Moc2spKSB7XFxubmV0L3BzcC9wc3Bfc29jay5jLTE0My1cXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJTb2NrZXQgYWxyZWFkeSBoYXMgUFNQIHN0YXRlXFxcIik7XFxuLS1cXG5uZXQvcHNwL3BzcF9zb2NrLmM9MTgxPWludCBwc3Bfc29ja19hc3NvY19zZXRfdHgoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcHNwX2RldiAqcHNkLFxcbi0tXFxubmV0L3BzcC9wc3Bfc29jay5jLTE5MC1cXG5uZXQvcHNwL3BzcF9zb2NrLmM6MTkxOlxcdHBhcyA9IHBzcF9za19hc3NvYyhzayk7XFxubmV0L3BzcC9wc3Bfc29jay5jLTE5Mi1cXHRpZiAoIXBhcykge1xcbi0tXFxubmV0L3BzcC9wc3Bfc29jay5jPTI3MD12b2lkIHBzcF90d3NrX2luaXQoc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHcsIGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG5uZXQvcHNwL3BzcF9zb2NrLmMtMjcxLXtcXG5uZXQvcHNwL3BzcF9zb2NrLmM6MjcyOlxcdHN0cnVjdCBwc3BfYXNzb2MgKnBhcyA9IHBzcF9za19hc3NvYyhzayk7XFxubmV0L3BzcC9wc3Bfc29jay5jLTI3My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6NDQ6NDMuMTI5NjE2OTgyWiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4MjQ4MDg4ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiBuZXR3b3JrIHByb2dyYW1taW5nL2tlcm5lbCBpbnRlcm5hbHM6XG5cbioqQ2hlY2tpbmcgYSBSZWxhdGVkIEZ1bmN0aW9uKipcblxuUmlnaHQsIEknbSBhbHJlYWR5IGluIHRoaXMgc2VjdGlvbiwgcmV2aWV3aW5nIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoaW5ncy4gQmVmb3JlIEkgbW92ZSBvbiBvciBmaW5hbGl6ZSB0aGlzIHBhcnRpY3VsYXIgY2hlY2ssIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gdmVyaWZ5IGBpbmV0X2Nza19oYXNfdWxwYC4gSXTigJlzIGEgcmVsYXRlZCBmdW5jdGlvbiwgbGlrZWx5IG9wZXJhdGluZyBpbiBhIHNpbWlsYXIgY29udGV4dCBvciBvbiBzaW1pbGFyIGRhdGEgc3RydWN0dXJlcy4gSSBuZWVkIHRvIGVuc3VyZSBteSB1bmRlcnN0YW5kaW5nIGFuZCBhc3N1bXB0aW9ucyBhcmUgY29uc2lzdGVudCBhY3Jvc3MgdGhpcyByZWxhdGVkIGNvZGUuIEl0J3MgdG9vIGVhc3kgdG8gbWlzcyBzb21ldGhpbmcgd2hlbiBmb2N1c2luZyBvbiBqdXN0IG9uZSBmdW5jdGlvbi4gTWFraW5nIHN1cmUgSSBhY2NvdW50IGZvciB0aGlzIHJlbGF0ZWQgZnVuY3Rpb24gd2lsbCBoZWxwIG1lIGJlIHRob3JvdWdoIGluIG15IHJldmlldy4gTGV0J3MgbWFrZSBzdXJlIEkgZGlkbid0IG92ZXJsb29rIHNvbWV0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY0OCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjQ0OjQ1Ljk1NDQzMzczMVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyNzMxNDIzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbmV0X2Nza19oYXNfdWxwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmg9MzM4PXN0YXRpYyBpbmxpbmUgdm9pZCBpbmV0X2Nza19pbmNfcGluZ3BvbmdfY250KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbmluY2x1ZGUvbmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmgtMzQ1LVxcbmluY2x1ZGUvbmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmg6MzQ2OnN0YXRpYyBpbmxpbmUgYm9vbCBpbmV0X2Nza19oYXNfdWxwKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG5pbmNsdWRlL25ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oLTM0Ny17XFxuLS1cXG5uZXQvY29yZS9za21zZy5jPTc1MD1zdHJ1Y3Qgc2tfcHNvY2sgKnNrX3Bzb2NrX2luaXQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbm9kZSlcXG4tLVxcbm5ldC9jb3JlL3NrbXNnLmMtNzU2LVxcbm5ldC9jb3JlL3NrbXNnLmM6NzU3OlxcdGlmIChza19pc19pbmV0KHNrKSBcXHUwMDI2XFx1MDAyNiBpbmV0X2Nza19oYXNfdWxwKHNrKSkge1xcbm5ldC9jb3JlL3NrbXNnLmMtNzU4LVxcdFxcdHBzb2NrID0gRVJSX1BUUigtRUlOVkFMKTtcXG4tLVxcbm5ldC9jb3JlL3NvY2suYz0yNjc0PWJvb2wgc2tfaGFzX2RlY3J5cHRfdXNlcihjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvY29yZS9zb2NrLmMtMjY3Ni1cXHRyZXR1cm4gcHNwX3NrX2Fzc29jKHNrKSB8fFxcbm5ldC9jb3JlL3NvY2suYzoyNjc3OlxcdCAgICAgICAoc2tfaXNfaW5ldChzaykgXFx1MDAyNlxcdTAwMjYgaW5ldF9jc2tfaGFzX3VscChzaykpOyAvKiBmb3IgdGxzICovXFxubmV0L2NvcmUvc29jay5jLTI2NzgtfVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTcyNT1pbnQgdGNwX2JwZl91cGRhdGVfcHJvdG8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLCBib29sIHJlc3RvcmUpXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzM0LVxcdGlmIChyZXN0b3JlKSB7XFxubmV0L2lwdjQvdGNwX2JwZi5jOjczNTpcXHRcXHRpZiAoaW5ldF9jc2tfaGFzX3VscChzaykpIHtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzM2LVxcdFxcdFxcdC8qIFRMUyBkb2VzIG5vdCBoYXZlIGFuIHVuaGFzaCBwcm90byBpbiBTVyBjYXNlcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6NDQ6NDcuNDgxNzUyNjY0WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzNzc4OTE2OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGNoYW5nZXM6XG5cbioqQW5hbHl6aW5nIHRoZSBNdXR1YWwgRXhjbHVzaW9uIGFuZCBWYWxpZGF0aW9uIENoZWNrcyoqXG5cblJpZ2h0LCBzbyBJJ3ZlIGxvb2tlZCBvdmVyIHRoZXNlIHJlY2VudCBtb2RpZmljYXRpb25zLCBhbmQgaXQgc2VlbXMgdGhlIGZvY3VzIGlzIHN0cmljdGx5IG9uIG11dHVhbCBleGNsdXNpb24gYW5kIHZhbGlkYXRpb24gY2hlY2tzLiBXZSdyZSB0YWxraW5nIGFib3V0IGZ1bmN0aW9ucyBsaWtlIGBza19oYXNfZGVjcnlwdF91c2VyYCBhbmQgYHNrX2hhc192YWxpZGF0ZV94bWl0X3NrYmAuIFRoZXNlIGFyZSBlc3NlbnRpYWxseSBnYXRla2VlcGVycywgZW5zdXJpbmcgdGhhdCB0aGUgYXR0YWNobWVudCBvZiBQU1AgYW5kIFVMUC94bWl0IHZhbGlkYXRpb24gdG8gYSBzb2NrZXQgZG9uJ3QgaGFwcGVuIHNpbXVsdGFuZW91c2x5LiBUaGF0J3MgZ29vZCwgbWluaW1pemVzIGNvbmN1cnJlbmN5IGlzc3Vlcy5cblxuQ3J1Y2lhbGx5LCBmcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGVzZSBjaGFuZ2VzIGRvbid0IGludHJvZHVjZSBhbnl0aGluZyB0cnVseSBjb25jZXJuaW5nIGZyb20gYSBtZW1vcnkgcGVyc3BlY3RpdmUuIEknbSBub3Qgc2VlaW5nIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb24sIHdlJ3JlIG5vdCBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFyb3VuZCwgYW5kIHRoZXJlIGFyZW4ndCBhbnkgbmV3IGJyYW5jaGluZyBwYXRocyB0aGF0IHdvdWxkIGRlcGVuZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGRhdGEuIFRoYXQncyBhIGh1Z2UgcmVsaWVmLlxuXG5UaGVyZWZvcmUsIGJlY2F1c2Ugb2YgdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlcywgSSBjYW4gY29uZmlkZW50bHkgc2F5IHRoYXQgd2UgZG9uJ3QgbmVlZCB0byBpbnZvbHZlIEtNU0FOIGluIHRoaXMgcGFydGljdWxhciBhcmVhLiBJdCBsb29rcyBsaWtlIHdlJ3JlIHNhZmUuXG5cbk5vdywgbGV0J3MgcHJlcGFyZSB0aGUgY2FsbCB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MzMzLCJPdXRwdXRUb2tlbnMiOjE0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjQ0OjUwLjg1OTY0NjY2N1oiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBtdXR1YWwgZXhjbHVzaXZpdHkgY2hlY2tzIChza19oYXNfZGVjcnlwdF91c2VyIGFuZCBza19oYXNfdmFsaWRhdGVfeG1pdF9za2IpIHRvIHByZXZlbnQgaW5jb21wYXRpYmxlIHNvY2tldCBzdGF0ZXMgd2hlbiBjb25maWd1cmluZyBUQ1AgVUxQIChlLmcuIGtUTFMpIGFuZCBQU1AgKFBTUCBzZWN1cml0eSBwcm90b2NvbCkgb24gdGhlIHNhbWUgc29ja2V0LiBcXG5cXG5JdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBjb3BpZXMgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWNjZXNzIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIHRlc3RpbmcgYW5kIHNhbml0aXplcnMgbGlrZSBLQVNBTiBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgbWVtb3J5IHNhZmV0eSBvciBzdGF0ZSBtYW5hZ2VtZW50IGlzc3Vlcy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbXV0dWFsIGV4Y2x1c2l2aXR5IGNoZWNrcyAoc2tfaGFzX2RlY3J5cHRfdXNlciBhbmQgc2tfaGFzX3ZhbGlkYXRlX3htaXRfc2tiKSB0byBwcmV2ZW50IGluY29tcGF0aWJsZSBzb2NrZXQgc3RhdGVzIHdoZW4gY29uZmlndXJpbmcgVENQIFVMUCAoZS5nLiBrVExTKSBhbmQgUFNQIChQU1Agc2VjdXJpdHkgcHJvdG9jb2wpIG9uIHRoZSBzYW1lIHNvY2tldC4gXFxuXFxuSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgY29waWVzIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFjY2VzcyBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCB0ZXN0aW5nIGFuZCBzYW5pdGl6ZXJzIGxpa2UgS0FTQU4gYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG1lbW9yeSBzYWZldHkgb3Igc3RhdGUgbWFuYWdlbWVudCBpc3N1ZXMuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowd2hpl[1] Phase: Succeeded StartedAt: 2026-09-11 00:45:02 +0000 UTC FinishedAt: 2026-09-11 00:45:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd2hpl[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-11 00:45:02 +0000 UTC FinishedAt: 2026-09-11 00:45:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd2hpl[2] Phase: Succeeded StartedAt: 2026-09-11 00:45:02 +0000 UTC FinishedAt: 2026-09-11 04:33:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd2hpl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_has_decrypt_user","tcp_set_ulp","__tcp_set_ulp","psp_sock_assoc_set_rx","psp_nl_rx_assoc_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"6881b4dd-0336-48dd-9f85-10be87dfd169","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-11 00:45:02 +0000 UTC FinishedAt: 2026-09-11 04:33:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_has_decrypt_user","tcp_set_ulp","__tcp_set_ulp","psp_sock_assoc_set_rx","psp_nl_rx_assoc_doit"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"6881b4dd-0336-48dd-9f85-10be87dfd169","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-workflowd2hpl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_has_decrypt_user","tcp_set_ulp","__tcp_set_ulp","psp_sock_assoc_set_rx","psp_nl_rx_assoc_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"6881b4dd-0336-48dd-9f85-10be87dfd169","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-11 00:45:02 +0000 UTC FinishedAt: 2026-09-11 00:45:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd2hpl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_has_decrypt_user","tcp_set_ulp","__tcp_set_ulp","psp_sock_assoc_set_rx","psp_nl_rx_assoc_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"6881b4dd-0336-48dd-9f85-10be87dfd169","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-11 00:45:02 +0000 UTC FinishedAt: 2026-09-11 00:45:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"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-workflowd2hpl/series-workflowd2hpl-convert-artifact-3133890816/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd2hpl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_has_decrypt_user","tcp_set_ulp","__tcp_set_ulp","psp_sock_assoc_set_rx","psp_nl_rx_assoc_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"6881b4dd-0336-48dd-9f85-10be87dfd169","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-11 00:45:12 +0000 UTC FinishedAt: 2026-09-11 01:06:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd2hpl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_has_decrypt_user","tcp_set_ulp","__tcp_set_ulp","psp_sock_assoc_set_rx","psp_nl_rx_assoc_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"6881b4dd-0336-48dd-9f85-10be87dfd169","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-11 00:45:12 +0000 UTC FinishedAt: 2026-09-11 01:06:13 +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:*cdd4baad-7bd4-4f71-b06f-7f7966ea5de3,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-workflowd2hpl/series-workflowd2hpl-convert-artifact-3133890816/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": "8c2db701-1e82-4827-a71f-79de11b256c6", "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-workflowd2hpl/series-workflowd2hpl-build-action-2564336582/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd2hpl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_has_decrypt_user","tcp_set_ulp","__tcp_set_ulp","psp_sock_assoc_set_rx","psp_nl_rx_assoc_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"6881b4dd-0336-48dd-9f85-10be87dfd169","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-11 00:45:12 +0000 UTC FinishedAt: 2026-09-11 01:05:32 +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:*cdd4baad-7bd4-4f71-b06f-7f7966ea5de3,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-workflowd2hpl/series-workflowd2hpl-convert-artifact-3133890816/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": "8c2db701-1e82-4827-a71f-79de11b256c6", "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-workflowd2hpl/series-workflowd2hpl-build-action-2564336582/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd2hpl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_has_decrypt_user","tcp_set_ulp","__tcp_set_ulp","psp_sock_assoc_set_rx","psp_nl_rx_assoc_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"6881b4dd-0336-48dd-9f85-10be87dfd169","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-11 01:06:13 +0000 UTC FinishedAt: 2026-09-11 01:06:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd2hpl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_has_decrypt_user","tcp_set_ulp","__tcp_set_ulp","psp_sock_assoc_set_rx","psp_nl_rx_assoc_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"6881b4dd-0336-48dd-9f85-10be87dfd169","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-11 01:06:13 +0000 UTC FinishedAt: 2026-09-11 01:06:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd2hpl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_has_decrypt_user","tcp_set_ulp","__tcp_set_ulp","psp_sock_assoc_set_rx","psp_nl_rx_assoc_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"6881b4dd-0336-48dd-9f85-10be87dfd169","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-11 01:06:13 +0000 UTC FinishedAt: 2026-09-11 01:06:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd2hpl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_has_decrypt_user","tcp_set_ulp","__tcp_set_ulp","psp_sock_assoc_set_rx","psp_nl_rx_assoc_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"6881b4dd-0336-48dd-9f85-10be87dfd169","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-11 01:06:13 +0000 UTC FinishedAt: 2026-09-11 01:06:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"6881b4dd-0336-48dd-9f85-10be87dfd169","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-workflowd2hpl/series-workflowd2hpl-convert-artifact-3464913575/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd2hpl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_has_decrypt_user","tcp_set_ulp","__tcp_set_ulp","psp_sock_assoc_set_rx","psp_nl_rx_assoc_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"6881b4dd-0336-48dd-9f85-10be87dfd169","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-11 01:06:23 +0000 UTC FinishedAt: 2026-09-11 01:08:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd2hpl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_has_decrypt_user","tcp_set_ulp","__tcp_set_ulp","psp_sock_assoc_set_rx","psp_nl_rx_assoc_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"6881b4dd-0336-48dd-9f85-10be87dfd169","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-11 01:06:23 +0000 UTC FinishedAt: 2026-09-11 01:08:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8c2db701-1e82-4827-a71f-79de11b256c6,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-workflowd2hpl/series-workflowd2hpl-build-action-2564336582/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-workflowd2hpl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_has_decrypt_user","tcp_set_ulp","__tcp_set_ulp","psp_sock_assoc_set_rx","psp_nl_rx_assoc_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"6881b4dd-0336-48dd-9f85-10be87dfd169","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-11 01:08:19 +0000 UTC FinishedAt: 2026-09-11 01:08:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd2hpl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_has_decrypt_user","tcp_set_ulp","__tcp_set_ulp","psp_sock_assoc_set_rx","psp_nl_rx_assoc_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"6881b4dd-0336-48dd-9f85-10be87dfd169","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-11 01:08:19 +0000 UTC FinishedAt: 2026-09-11 01:08:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd2hpl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_has_decrypt_user","tcp_set_ulp","__tcp_set_ulp","psp_sock_assoc_set_rx","psp_nl_rx_assoc_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"6881b4dd-0336-48dd-9f85-10be87dfd169","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-11 01:08:19 +0000 UTC FinishedAt: 2026-09-11 01:24:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd2hpl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_has_decrypt_user","tcp_set_ulp","__tcp_set_ulp","psp_sock_assoc_set_rx","psp_nl_rx_assoc_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"6881b4dd-0336-48dd-9f85-10be87dfd169","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-11 01:08:19 +0000 UTC FinishedAt: 2026-09-11 01:24:40 +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:*cdd4baad-7bd4-4f71-b06f-7f7966ea5de3,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-workflowd2hpl/series-workflowd2hpl-convert-artifact-3464913575/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": "292b5689-7781-4859-98dc-39196e5c9804", "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-workflowd2hpl/series-workflowd2hpl-build-action-517395499/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd2hpl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_has_decrypt_user","tcp_set_ulp","__tcp_set_ulp","psp_sock_assoc_set_rx","psp_nl_rx_assoc_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"6881b4dd-0336-48dd-9f85-10be87dfd169","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-11 01:08:19 +0000 UTC FinishedAt: 2026-09-11 01:24:30 +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:*cdd4baad-7bd4-4f71-b06f-7f7966ea5de3,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-workflowd2hpl/series-workflowd2hpl-convert-artifact-3464913575/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": "292b5689-7781-4859-98dc-39196e5c9804", "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-workflowd2hpl/series-workflowd2hpl-build-action-517395499/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd2hpl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_has_decrypt_user","tcp_set_ulp","__tcp_set_ulp","psp_sock_assoc_set_rx","psp_nl_rx_assoc_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"6881b4dd-0336-48dd-9f85-10be87dfd169","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-11 01:24:40 +0000 UTC FinishedAt: 2026-09-11 01:24:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd2hpl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_has_decrypt_user","tcp_set_ulp","__tcp_set_ulp","psp_sock_assoc_set_rx","psp_nl_rx_assoc_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"6881b4dd-0336-48dd-9f85-10be87dfd169","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-11 01:24:40 +0000 UTC FinishedAt: 2026-09-11 01:24:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd2hpl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_has_decrypt_user","tcp_set_ulp","__tcp_set_ulp","psp_sock_assoc_set_rx","psp_nl_rx_assoc_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"6881b4dd-0336-48dd-9f85-10be87dfd169","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-11 01:24:40 +0000 UTC FinishedAt: 2026-09-11 01:26:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd2hpl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_has_decrypt_user","tcp_set_ulp","__tcp_set_ulp","psp_sock_assoc_set_rx","psp_nl_rx_assoc_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"6881b4dd-0336-48dd-9f85-10be87dfd169","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-11 01:24:40 +0000 UTC FinishedAt: 2026-09-11 01:26:27 +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:*292b5689-7781-4859-98dc-39196e5c9804,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-workflowd2hpl/series-workflowd2hpl-build-action-517395499/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-workflowd2hpl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_has_decrypt_user","tcp_set_ulp","__tcp_set_ulp","psp_sock_assoc_set_rx","psp_nl_rx_assoc_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"6881b4dd-0336-48dd-9f85-10be87dfd169","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-11 01:26:37 +0000 UTC FinishedAt: 2026-09-11 04:33:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd2hpl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_has_decrypt_user","tcp_set_ulp","__tcp_set_ulp","psp_sock_assoc_set_rx","psp_nl_rx_assoc_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"6881b4dd-0336-48dd-9f85-10be87dfd169","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-11 01:26:37 +0000 UTC FinishedAt: 2026-09-11 04:33:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_has_decrypt_user","tcp_set_ulp","__tcp_set_ulp","psp_sock_assoc_set_rx","psp_nl_rx_assoc_doit"],"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:*8c2db701-1e82-4827-a71f-79de11b256c6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*292b5689-7781-4859-98dc-39196e5c9804,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-workflowd2hpl/series-workflowd2hpl-build-action-2564336582/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-workflowd2hpl/series-workflowd2hpl-build-action-517395499/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowd2hpl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_has_decrypt_user","tcp_set_ulp","__tcp_set_ulp","psp_sock_assoc_set_rx","psp_nl_rx_assoc_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"6881b4dd-0336-48dd-9f85-10be87dfd169","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-11 01:26:37 +0000 UTC FinishedAt: 2026-09-11 01:26:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd2hpl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_has_decrypt_user","tcp_set_ulp","__tcp_set_ulp","psp_sock_assoc_set_rx","psp_nl_rx_assoc_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"6881b4dd-0336-48dd-9f85-10be87dfd169","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-11 01:26:37 +0000 UTC FinishedAt: 2026-09-11 01:26:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_has_decrypt_user","tcp_set_ulp","__tcp_set_ulp","psp_sock_assoc_set_rx","psp_nl_rx_assoc_doit"],"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-workflowd2hpl/series-workflowd2hpl-convert-artifact-105105408/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd2hpl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_has_decrypt_user","tcp_set_ulp","__tcp_set_ulp","psp_sock_assoc_set_rx","psp_nl_rx_assoc_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"6881b4dd-0336-48dd-9f85-10be87dfd169","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-11 01:26:37 +0000 UTC FinishedAt: 2026-09-11 01:26:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd2hpl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_has_decrypt_user","tcp_set_ulp","__tcp_set_ulp","psp_sock_assoc_set_rx","psp_nl_rx_assoc_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"6881b4dd-0336-48dd-9f85-10be87dfd169","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-11 01:26:37 +0000 UTC FinishedAt: 2026-09-11 01:26:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd2hpl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_has_decrypt_user","tcp_set_ulp","__tcp_set_ulp","psp_sock_assoc_set_rx","psp_nl_rx_assoc_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"6881b4dd-0336-48dd-9f85-10be87dfd169","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-11 01:26:37 +0000 UTC FinishedAt: 2026-09-11 01:26:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd2hpl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_has_decrypt_user","tcp_set_ulp","__tcp_set_ulp","psp_sock_assoc_set_rx","psp_nl_rx_assoc_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"6881b4dd-0336-48dd-9f85-10be87dfd169","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-11 01:26:47 +0000 UTC FinishedAt: 2026-09-11 04:33:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd2hpl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sk_has_decrypt_user","tcp_set_ulp","__tcp_set_ulp","psp_sock_assoc_set_rx","psp_nl_rx_assoc_doit"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2ac09b5353fe6858411fdc8c6efa60d832e20f13","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET_PSP","TLS","TLS_DEVICE","NETDEVSIM"],"series_id":"6881b4dd-0336-48dd-9f85-10be87dfd169","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-11 01:26:47 +0000 UTC FinishedAt: 2026-09-11 04:33:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8c2db701-1e82-4827-a71f-79de11b256c6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*292b5689-7781-4859-98dc-39196e5c9804,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-workflowd2hpl/series-workflowd2hpl-build-action-2564336582/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-workflowd2hpl/series-workflowd2hpl-build-action-517395499/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-workflowd2hpl/series-workflowd2hpl-convert-artifact-105105408/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,}