Name: series-workflow42hb5 Phase: Succeeded StartedAt: 2026-08-03 00:56:32 +0000 UTC FinishedAt: 2026-08-03 04:44:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42hb5[0] Phase: Succeeded StartedAt: 2026-08-03 00:56:32 +0000 UTC FinishedAt: 2026-08-03 00:59:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42hb5[0].run-triage Phase: Succeeded StartedAt: 2026-08-03 00:56:32 +0000 UTC FinishedAt: 2026-08-03 00:59:22 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "2195424c3da2ef1829a63b807e3a900a90e57d85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HSR" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "2195424c3da2ef1829a63b807e3a900a90e57d85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HSR" ], "series_id": "3611eda0-17ee-45db-a836-d14851ee2904" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "hsr_dev_xmit", "hsr_handle_frame", "hsr_create_tagged_frame", "prp_create_tagged_frame", "hsr_forward_skb" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAzIDAwOjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hTUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hzcl9kZXZfeG1pdCYjMzQ7LAogICAgJiMzNDtoc3JfaGFuZGxlX2ZyYW1lJiMzNDssCiAgICAmIzM0O2hzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lJiMzNDssCiAgICAmIzM0O3BycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lJiMzNDssCiAgICAmIzM0O2hzcl9mb3J3YXJkX3NrYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHNoYXJlZC1tdXRhdGlvbiBidWcgaW4gSFNSL1BSUCBieSBhZGRpbmcgYHNrYl9jb3dgIGJlZm9yZSBtb2RpZnlpbmcgY2xvbmVkIHNrYnMgaW4gYGhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCwgYHBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCwgYW5kIGBoc3JfeG1pdGAuIFRoZXNlIGFyZSBjb3JlIHBhY2tldCBmb3J3YXJkaW5nIGZ1bmN0aW9ucyBpbiB0aGUgSFNSIGRyaXZlciwgcmVhY2hhYmxlIHZpYSBgaHNyX2Rldl94bWl0YCAobWFzdGVyIGRldmljZSBUWCkgYW5kIGBoc3JfaGFuZGxlX2ZyYW1lYCAoc2xhdmUgZGV2aWNlIFJYKS4gVGhlIGNvZGUgaXMgZnVsbHkgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDA6NTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyNTgwOTUxYTk2NzI1ZGNhMGRmOGRkMjMzOWJmNmVmZjdkNjI3ZjdjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMyAwMDo1Nzo1OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmMgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcbmluZGV4IDA3NzQ5ODFhNjVjMTYuLjk3NGI1NWYyNDg4MjEgMTAwNjQ0XG4tLS0gYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xuQEAgLTMzNiwxMiAmIzQzOzMzNiwyNCBAQCBzdHJ1Y3Qgc2tfYnVmZiAqaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcbiBcdGludCBtb3ZlbGVuO1xuIFxuIFx0aWYgKGZyYW1lLVx1MDAzZXNrYl9oc3IpIHtcbi1cdFx0c3RydWN0IGhzcl9ldGhoZHIgKmhzcl9ldGhoZHIgPVxuLVx0XHRcdChzdHJ1Y3QgaHNyX2V0aGhkciAqKXNrYl9tYWNfaGVhZGVyKGZyYW1lLVx1MDAzZXNrYl9oc3IpO1xuJiM0MztcdFx0c3RydWN0IGhzcl9ldGhoZHIgKmhzcl9ldGhoZHI7XG4mIzQzO1xuJiM0MztcdFx0LyogVGhlIG9yaWdpbmFsIHNrYiBkYXRhIG1heSBiZSBzaGFyZWQgd2l0aCBhbm90aGVyIGVncmVzc1xuJiM0MztcdFx0ICogY2xvbmUuIE1ha2UgdGhlIGNsb25lIGRhdGEgcHJpdmF0ZSBiZWZvcmUgdXBkYXRpbmcgdGhlXG4mIzQzO1x0XHQgKiBwYXRoIGlkIHNvIHRoZSB1cGRhdGUgY2Fubm90IGNvcnJ1cHQgdGhlIG90aGVyIGNvcHkuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHNrYiA9IHNrYl9jbG9uZShmcmFtZS1cdTAwM2Vza2JfaHNyLCBHRlBfQVRPTUlDKTtcbiYjNDM7XHRcdGlmICghc2tiKVxuJiM0MztcdFx0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRcdGlmIChza2JfY293KHNrYiwgMCkpIHtcbiYjNDM7XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdFx0fVxuIFxuIFx0XHQvKiBzZXQgdGhlIGxhbmUgaWQgcHJvcGVybHkgKi9cbiYjNDM7XHRcdGhzcl9ldGhoZHIgPSAoc3RydWN0IGhzcl9ldGhoZHIgKilza2JfbWFjX2hlYWRlcihza2IpO1xuIFx0XHRoc3Jfc2V0X3BhdGhfaWQoZnJhbWUsIGhzcl9ldGhoZHIsIHBvcnQpO1xuLVx0XHRyZXR1cm4gc2tiX2Nsb25lKGZyYW1lLVx1MDAzZXNrYl9oc3IsIEdGUF9BVE9NSUMpO1xuJiM0MztcdFx0cmV0dXJuIHNrYjtcbiBcdH0gZWxzZSBpZiAocG9ydC1cdTAwM2VkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfSFdfSFNSX1RBR19JTlMpIHtcbiBcdFx0cmV0dXJuIHNrYl9jbG9uZShmcmFtZS1cdTAwM2Vza2Jfc3RkLCBHRlBfQVRPTUlDKTtcbiBcdH1cbkBAIC0zNzcsMTUgJiM0MzszODksMjggQEAgc3RydWN0IHNrX2J1ZmYgKnBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFxuIFx0aWYgKGZyYW1lLVx1MDAzZXNrYl9wcnApIHtcbi1cdFx0c3RydWN0IHBycF9yY3QgKnRyYWlsZXIgPSBza2JfZ2V0X1BSUF9yY3QoZnJhbWUtXHUwMDNlc2tiX3BycCk7XG4mIzQzO1x0XHRzdHJ1Y3QgcHJwX3JjdCAqdHJhaWxlcjtcbiBcbiYjNDM7XHRcdC8qIFNhbWUgc2hhcmluZyBoYXphcmQgYXMgYWJvdmU6IHByaXZhdGl6ZSB0aGUgY2xvbmUgZGF0YVxuJiM0MztcdFx0ICogYmVmb3JlIHVwZGF0aW5nIHRoZSBMQU4gaWQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHNrYiA9IHNrYl9jbG9uZShmcmFtZS1cdTAwM2Vza2JfcHJwLCBHRlBfQVRPTUlDKTtcbiYjNDM7XHRcdGlmICghc2tiKVxuJiM0MztcdFx0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRcdGlmIChza2JfY293KHNrYiwgMCkpIHtcbiYjNDM7XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHRyYWlsZXIgPSBza2JfZ2V0X1BSUF9yY3Qoc2tiKTtcbiBcdFx0aWYgKHRyYWlsZXIpIHtcbiBcdFx0XHRwcnBfc2V0X2xhbl9pZCh0cmFpbGVyLCBwb3J0KTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRXQVJOX09OQ0UoIXRyYWlsZXIsIFwmIzM0O2Vycm9yZWQgUFJQIHNrYlwmIzM0Oyk7XG4mIzQzO1x0XHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRcdHJldHVybiBOVUxMO1xuIFx0XHR9XG4tXHRcdHJldHVybiBza2JfY2xvbmUoZnJhbWUtXHUwMDNlc2tiX3BycCwgR0ZQX0FUT01JQyk7XG4mIzQzO1x0XHRyZXR1cm4gc2tiO1xuIFx0fSBlbHNlIGlmIChwb3J0LVx1MDAzZWRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19IU1JfVEFHX0lOUykge1xuIFx0XHRyZXR1cm4gc2tiX2Nsb25lKGZyYW1lLVx1MDAzZXNrYl9zdGQsIEdGUF9BVE9NSUMpO1xuIFx0fVxuQEAgLTQyMCw2ICYjNDM7NDQ1LDIyIEBAIHN0YXRpYyB2b2lkIGhzcl9kZWxpdmVyX21hc3RlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIHN0YXRpYyBpbnQgaHNyX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0LFxuIFx0XHQgICAgc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcbiB7XG4mIzQzO1x0LyogQW4gaW50ZXJsaW5rLWJvdW5kIHNrYiBmcm9tIGdldF91bnRhZ2dlZF9mcmFtZSgpIGNhbiBzdGlsbCBhbGlhc1xuJiM0MztcdCAqIGFub3RoZXIgbGl2ZSBjb25zdW1lcjogZm9yIG1hc3Rlci1vcmlnaW5hdGVkIGZyYW1lcyB0aGUgY2xvbmVcbiYjNDM7XHQgKiBzaGFyZXMgdGhlIG9yaWdpbmFsIFRYIHNrYiAod2hpY2ggdGFwcyBvciB0aGUgVFggcGF0aCBtYXkgc3RpbGxcbiYjNDM7XHQgKiBob2xkKTsgZm9yIHJpbmcgZnJhbWVzIHRoZSBtYXN0ZXIgYWxzbyBjb25zdW1lcyB0aGVtIHdoZW4gdGhleVxuJiM0MztcdCAqIGFyZSBkZXN0aW5lZCB0byB0aGUgbG9jYWwgbm9kZSB3aXRob3V0IGJlaW5nIGV4Y2x1c2l2ZSB0byBpdC5cbiYjNDM7XHQgKiBQcml2YXRpemUgYmVmb3JlIGFueSBhZGRyZXNzIG11dGF0aW9uLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX0lOVEVSTElOSyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgKGZyYW1lLVx1MDAzZXBvcnRfcmN2LVx1MDAzZXR5cGUgPT0gSFNSX1BUX01BU1RFUiB8fFxuJiM0MztcdCAgICAgKGZyYW1lLVx1MDAzZWlzX2xvY2FsX2Rlc3QgXHUwMDI2XHUwMDI2ICFmcmFtZS1cdTAwM2Vpc19sb2NhbF9leGNsdXNpdmUpKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgc2tiX2Nvdyhza2IsIDApKSB7XG4mIzQzO1x0XHRmcmFtZS1cdTAwM2Vwb3J0X3Jjdi1cdTAwM2VkZXYtXHUwMDNlc3RhdHMucnhfZHJvcHBlZCYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRcdHJldHVybiBORVRfWE1JVF9EUk9QO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAoZnJhbWUtXHUwMDNlcG9ydF9yY3YtXHUwMDNldHlwZSA9PSBIU1JfUFRfTUFTVEVSKSB7XG4gXHRcdGhzcl9hZGRyX3N1YnN0X2Rlc3QoZnJhbWUtXHUwMDNlbm9kZV9zcmMsIHNrYiwgcG9ydCk7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGVcbmluZGV4IDMxZmI5MzI2Y2Y1MzMuLjg3ZmUzNDk1MWI4YjAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG5AQCAtNSw2ICYjNDM7NSw3IEBAIHRvcF9zcmNkaXIgPSAuLi8uLi8uLi8uLi8uLlxuIFRFU1RfUFJPR1MgOj0gXFxcbiBcdGhzcl9waW5nLnNoIFxcXG4gXHRoc3JfcmVkYm94LnNoIFxcXG4mIzQzO1x0aHNyX3NoYXJlZF9tdXRhdGlvbi5zaCBcXFxuIFx0bGlua19mYXVsdHMuc2ggXFxcbiBcdHBycF9waW5nLnNoIFxcXG4gIyBlbmQgb2YgVEVTVF9QUk9HU1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX3NoYXJlZF9tdXRhdGlvbi5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX3NoYXJlZF9tdXRhdGlvbi5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjA1ZTdlODAzZDI4Njdcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX3NoYXJlZF9tdXRhdGlvbi5zaFxuQEAgLTAsMCAmIzQzOzEsMjIzIEBAXG4mIzQzOyMhL2Jpbi9iYXNoXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I1xuJiM0MzsjIFZlcmlmeSB0aGF0IHBlci1lZ3Jlc3MgbXV0YXRpb25zIG9mIHNoYXJlZCBza2IgZGF0YSBhcmUgcHJpdmF0ZTpcbiYjNDM7I1xuJiM0MzsjIEYyIChwYXRoL0xBTiBJRCk6IG9uIGFuIGFmZmVjdGVkIGtlcm5lbCB0aGUgc2Vjb25kIHNsYXZlJiMzOTtzIExBTi1JRCB3cml0ZVxuJiM0MzsjIGxhbmRzIGluIHRoZSBmaXJzdCBzbGF2ZSYjMzk7cyBzdGlsbC1xdWV1ZWQgY2xvbmU7IHdpdGggYSBuZXRlbSBkZWxheSBvblxuJiM0MzsjIHNsYXZlIEEsIGluamVjdGVkIGZyYW1lcyBsZWF2ZSBBIGNhcnJ5aW5nIEImIzM5O3MgTEFOIElELlxuJiM0MzsjXG4mIzQzOyMgRjEgKFJlZEJveCBzb3VyY2UgTUFDKTogb24gYW4gYWZmZWN0ZWQga2VybmVsIGFuIEhTUi10YWdnZWQgbXVsdGljYXN0XG4mIzQzOyMgZnJhbWUgcmVjZWl2ZWQgb24gYSBSZWRCb3ggc2xhdmUgaXMgY2xvbmVkIGZvciBtYXN0ZXIgYW5kIGludGVybGluayxcbiYjNDM7IyBhbmQgdGhlIGludGVybGluayYjMzk7cyBSZWRCb3gtTUFDIHJld3JpdGUgbGFuZHMgaW4gdGhlIG1hc3RlciBjbG9uZSYjMzk7c1xuJiM0MzsjIGJ1ZmZlciwgc28gdGhlIGxvY2FsIHN0YWNrIHJlY2VpdmVzIHRoZSBSZWRCb3ggTUFDIGluc3RlYWQgb2YgdGhlXG4mIzQzOyMgb3JpZ2luYXRpbmcgbm9kZSYjMzk7cyBNQUMuXG4mIzQzO1xuJiM0MztpcHY2PWZhbHNlXG4mIzQzO1xuJiM0Mztzb3VyY2UgLi9oc3JfY29tbW9uLnNoXG4mIzQzO1xuJiM0MztEVVI9NVxuJiM0MztcbiYjNDM7cmVxdWlyZSgpXG4mIzQzO3tcbiYjNDM7XHRjb21tYW5kIC12IFwmIzM0OyQxXCYjMzQ7IFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MSBcdTAwMjZcdTAwMjYgcmV0dXJuIDBcbiYjNDM7XHRlY2hvIFwmIzM0O1NLSVA6ICQxIG5vdCBhdmFpbGFibGVcJiMzNDtcbiYjNDM7XHRleGl0ICRrc2Z0X3NraXBcbiYjNDM7fVxuJiM0MztcbiYjNDM7cmVxdWlyZSBpcFxuJiM0MztyZXF1aXJlIHRjXG4mIzQzO3JlcXVpcmUgcHl0aG9uM1xuJiM0MztcbiYjNDM7dHJhcCBjbGVhbnVwX2FsbF9ucyBFWElUXG4mIzQzO1xuJiM0MzsjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRjI6IExBTi1JRCBpc29sYXRpb25cbiYjNDM7IyBQUlAgREFOUCAocHJvdG8gMSksIEFGX1BBQ0tFVCBwcmUtdGFnZ2VkIGluamVjdGlvbiwgbmV0ZW0gb24gc2xhdmUgQS5cbiYjNDM7cnVuX2YyKClcbiYjNDM7e1xuJiM0MztcdHNldHVwX25zIG5zIDJcdTAwM2UvZGV2L251bGwgfHwgcmV0dXJuICRrc2Z0X3NraXBcbiYjNDM7XHRuc3goKSB7IGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zXCYjMzQ7IFwmIzM0OyRAXCYjMzQ7OyB9XG4mIzQzO1xuJiM0MztcdCMgUHJvYmUgc2NoX25ldGVtIGluc2lkZSB0aGUgZGlzcG9zYWJsZSBuYW1lc3BhY2Ugb25seS5cbiYjNDM7XHRpZiAhIG5zeCB0YyBxZGlzYyBhZGQgZGV2IGxvIHJvb3QgbmV0ZW0gZGVsYXkgMW1zIDJcdTAwM2UvZGV2L251bGw7IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7U0tJUDogc2NoX25ldGVtIG5vdCBhdmFpbGFibGVcJiMzNDtcbiYjNDM7XHRcdHJldHVybiAka3NmdF9za2lwXG4mIzQzO1x0ZmlcbiYjNDM7XHRuc3ggdGMgcWRpc2MgZGVsIGRldiBsbyByb290IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7XG4mIzQzO1x0IyBDYXBhYmlsaXR5IHByb2JlcyBlbmQgaGVyZTsgc2V0dXAgb3IgcnVudGltZSBmYWlsdXJlIGJlbG93IGlzIEZBSUwuXG4mIzQzO1x0bnN4IGlwIGxpbmsgYWRkIHZBIHR5cGUgdmV0aCBwZWVyIG5hbWUgdkFwIHx8XG4mIzQzO1x0XHR7IGVjaG8gXCYjMzQ7RkFJTDogdmV0aCBBXCYjMzQ7OyByZXR1cm4gMTsgfVxuJiM0MztcdG5zeCBpcCBsaW5rIGFkZCB2QiB0eXBlIHZldGggcGVlciBuYW1lIHZCcCB8fFxuJiM0MztcdFx0eyBlY2hvIFwmIzM0O0ZBSUw6IHZldGggQlwmIzM0OzsgcmV0dXJuIDE7IH1cbiYjNDM7XHRmb3IgaSBpbiB2QSB2QiB2QXAgdkJwOyBkb1xuJiM0MztcdFx0bnN4IGlwIGxpbmsgc2V0IFwmIzM0OyRpXCYjMzQ7IHVwIHx8IHsgZWNobyBcJiMzNDtGQUlMOiAkaSB1cFwmIzM0OzsgcmV0dXJuIDE7IH1cbiYjNDM7XHRkb25lXG4mIzQzO1x0aWYgISBuc3ggaXAgbGluayBhZGQgbmFtZSBwcnAwIHR5cGUgaHNyIHNsYXZlMSB2QSBzbGF2ZTIgdkIgXFxcbiYjNDM7XHRcdHN1cGVydmlzaW9uIDQ1IHByb3RvIDEgMlx1MDAzZS9kZXYvbnVsbDsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtTS0lQOiBIU1IvUFJQIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBrZXJuZWxcJiMzNDtcbiYjNDM7XHRcdHJldHVybiAka3NmdF9za2lwXG4mIzQzO1x0ZmlcbiYjNDM7XHRuc3ggaXAgbGluayBzZXQgcHJwMCB1cCB8fCB7IGVjaG8gXCYjMzQ7RkFJTDogcHJwMCB1cFwmIzM0OzsgcmV0dXJuIDE7IH1cbiYjNDM7XHRuc3ggdGMgcWRpc2MgYWRkIGRldiB2QSByb290IG5ldGVtIGRlbGF5IDIwMG1zIHx8XG4mIzQzO1x0XHR7IGVjaG8gXCYjMzQ7RkFJTDogbmV0ZW1cJiMzNDs7IHJldHVybiAxOyB9XG4mIzQzO1xuJiM0MztcdG5zeCBweXRob24zIC9kZXYvc3RkaW4gXCYjMzQ7JERVUlwmIzM0OyBcdTAwM2NcdTAwM2MmIzM5O1BZRjImIzM5O1xuJiM0MztpbXBvcnQgc29ja2V0LCBzdHJ1Y3QsIHNlbGVjdCwgc3lzLCB0aW1lXG4mIzQzO1xuJiM0MztkdXIgPSBpbnQoc3lzLmFyZ3ZbMV0pXG4mIzQzO2RlZiBsYW5pZChwa3QpOlxuJiM0MzsgICAgaWYgbGVuKHBrdCkgXHUwMDNjIDIwIG9yIHBrdFstMjpdICE9IGJcJiMzNDtcXHg4OFxceGZiXCYjMzQ7OlxuJiM0MzsgICAgICAgIHJldHVybiBOb25lXG4mIzQzOyAgICByZXR1cm4gKHBrdFstNF0gXHUwMDNlXHUwMDNlIDQpIFx1MDAyNiAweEZcbiYjNDM7XG4mIzQzO1NSQyA9IGJ5dGVzLmZyb21oZXgob3BlbihcJiMzNDsvc3lzL2NsYXNzL25ldC9wcnAwL2FkZHJlc3NcJiMzNDspLnJlYWQoKS5yZXBsYWNlKFwmIzM0OzpcJiMzNDssIFwmIzM0O1wmIzM0OykpXG4mIzQzO0RTVCA9IGJ5dGVzLmZyb21oZXgoXCYjMzQ7MDJhYWJiY2NkZDAxXCYjMzQ7KVxuJiM0MztQQVkgPSBieXRlcyhyYW5nZSg0NikpXG4mIzQzO3JjdDAgPSBzdHJ1Y3QucGFjayhcJiMzNDtcdTAwM2VIXCYjMzQ7LCAwKSAmIzQzOyBzdHJ1Y3QucGFjayhcJiMzNDtcdTAwM2VIXCYjMzQ7LCA1MiBcdTAwMjYgMHgwRkZGKSAmIzQzOyBiXCYjMzQ7XFx4ODhcXHhmYlwmIzM0O1xuJiM0MztmcmFtZSA9IERTVCAmIzQzOyBTUkMgJiM0MzsgYlwmIzM0O1xceDA4XFx4MDBcJiMzNDsgJiM0MzsgUEFZICYjNDM7IHJjdDBcbiYjNDM7XG4mIzQzO3R4ID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfUEFDS0VULCBzb2NrZXQuU09DS19SQVcpOyB0eC5iaW5kKChcJiMzNDtwcnAwXCYjMzQ7LCAwKSlcbiYjNDM7c0EgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9QQUNLRVQsIHNvY2tldC5TT0NLX1JBVyxcbiYjNDM7ICAgICAgICBzb2NrZXQubnRvaHMoMHgwMDAzKSlcbiYjNDM7c0EuYmluZCgoXCYjMzQ7dkFwXCYjMzQ7LCAwKSlcbiYjNDM7c0IgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9QQUNLRVQsIHNvY2tldC5TT0NLX1JBVyxcbiYjNDM7ICAgICAgICBzb2NrZXQubnRvaHMoMHgwMDAzKSlcbiYjNDM7c0IuYmluZCgoXCYjMzQ7dkJwXCYjMzQ7LCAwKSlcbiYjNDM7c0Euc2V0YmxvY2tpbmcoRmFsc2UpOyBzQi5zZXRibG9ja2luZyhGYWxzZSlcbiYjNDM7Zm9yIF8gaW4gcmFuZ2UoMjAwKTpcbiYjNDM7ICAgIHR4LnNlbmQoZnJhbWUpOyB0aW1lLnNsZWVwKDAuMDAxKVxuJiM0MztcbiYjNDM7YSwgYiA9IFtdLCBbXVxuJiM0MztlbmQgPSB0aW1lLnRpbWUoKSAmIzQzOyBkdXJcbiYjNDM7d2hpbGUgdGltZS50aW1lKCkgXHUwMDNjIGVuZDpcbiYjNDM7ICAgIHIsIF8sIF8gPSBzZWxlY3Quc2VsZWN0KFtzQSwgc0JdLCBbXSwgW10sIDAuMylcbiYjNDM7ICAgIGZvciBzIGluIHI6XG4mIzQzOyAgICAgICAgcGt0ID0gcy5yZWN2KDY1NTM1KVxuJiM0MzsgICAgICAgIGlmIChwa3RbOjZdICE9IERTVCBvciBwa3RbNjoxMl0gIT0gU1JDIG9yIHBrdFsxMjoxNF0gIT0gYlwmIzM0O1xceDA4XFx4MDBcJiMzNDtcbiYjNDM7ICAgICAgICAgICAgICAgIG9yIHBrdFsxNDoxNCAmIzQzOyBsZW4oUEFZKV0gIT0gUEFZKTpcbiYjNDM7ICAgICAgICAgICAgY29udGludWVcbiYjNDM7ICAgICAgICBsaWQgPSBsYW5pZChwa3QpXG4mIzQzOyAgICAgICAgaWYgbGlkIGlzIG5vdCBOb25lOlxuJiM0MzsgICAgICAgICAgICAoYSBpZiBzIGlzIHNBIGVsc2UgYikuYXBwZW5kKGxpZClcbiYjNDM7XG4mIzQzO3ByaW50KFwmIzM0O0Etc2lkZSBjb3VudD0lZCBsYW4gaWRzPSVzXCYjMzQ7ICUgKGxlbihhKSwgc29ydGVkKHNldChhKSkpKVxuJiM0MztwcmludChcJiMzNDtCLXNpZGUgY291bnQ9JWQgbGFuIGlkcz0lc1wmIzM0OyAlIChsZW4oYiksIHNvcnRlZChzZXQoYikpKSlcbiYjNDM7aWYgbGVuKGEpIFx1MDAzYyAxNTAgb3IgbGVuKGIpIFx1MDAzYyAxNTA6XG4mIzQzOyAgICBwcmludChcJiMzNDtGQUlMOiB0b28gZmV3IGluamVjdGVkIGZyYW1lcyBjYXB0dXJlZCAoQT0lZCBCPSVkLCBzZW50IDIwMClcJiMzNDtcbiYjNDM7ICAgICAgICAgICUgKGxlbihhKSwgbGVuKGIpKSlcbiYjNDM7ICAgIHN5cy5leGl0KDEpXG4mIzQzO2JhZF9hID0gW3ggZm9yIHggaW4gYSBpZiAoeCBcdTAwMjYgMSkgIT0gMF1cbiYjNDM7YmFkX2IgPSBbeCBmb3IgeCBpbiBiIGlmICh4IFx1MDAyNiAxKSAhPSAxXVxuJiM0MztpZiBiYWRfYSBvciBiYWRfYjpcbiYjNDM7ICAgIHByaW50KFwmIzM0O0ZBSUw6IHNoYXJlZC1tdXRhdGlvbiBjb3JydXB0aW9uIC0gQTogJWQvJWQgd3JvbmctbGFuLFwmIzM0O1xuJiM0MzsgICAgICAgICAgXCYjMzQ7IEI6ICVkLyVkIHdyb25nLWxhblwmIzM0O1xuJiM0MzsgICAgICAgICAgJSAobGVuKGJhZF9hKSwgbGVuKGEpLCBsZW4oYmFkX2IpLCBsZW4oYikpKVxuJiM0MzsgICAgc3lzLmV4aXQoMSlcbiYjNDM7cHJpbnQoXCYjMzQ7UEFTUzogcGVyLWVncmVzcyBMQU4gSURzIGlzb2xhdGVkIChBIGFsbCBiaXQwPTAsIEIgYWxsIGJpdDA9MSlcJiMzNDspXG4mIzQzO3N5cy5leGl0KDApXG4mIzQzO1BZRjJcbiYjNDM7fVxuJiM0MztcbiYjNDM7IyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRjE6IFJlZEJveCBzb3VyY2UtTUFDIHByaXZhY3lcbiYjNDM7IyBIU1IgUmVkQm94IChwcm90byAwKSwgdGFnZ2VkIG11bHRpY2FzdCBmcm9tIGEgc2xhdmU6IG1hc3RlciBtdXN0IGtlZXBcbiYjNDM7IyB0aGUgbm9kZSBNQUMsIGludGVybGluayBtdXN0IGNhcnJ5IHRoZSBSZWRCb3ggTUFDLlxuJiM0MztydW5fZjEoKVxuJiM0Mzt7XG4mIzQzO1x0c2V0dXBfbnMgbnMgMlx1MDAzZS9kZXYvbnVsbCB8fCByZXR1cm4gJGtzZnRfc2tpcFxuJiM0MztcdG5zeCgpIHsgaXAgbmV0bnMgZXhlYyBcJiMzNDskbnNcJiMzNDsgXCYjMzQ7JEBcJiMzNDs7IH1cbiYjNDM7XG4mIzQzO1x0bnN4IGlwIGxpbmsgYWRkIHZBIHR5cGUgdmV0aCBwZWVyIG5hbWUgdkFwIHx8XG4mIzQzO1x0XHR7IGVjaG8gXCYjMzQ7RkFJTDogdmV0aCBBXCYjMzQ7OyByZXR1cm4gMTsgfVxuJiM0MztcdG5zeCBpcCBsaW5rIGFkZCB2QiB0eXBlIHZldGggcGVlciBuYW1lIHZCcCB8fFxuJiM0MztcdFx0eyBlY2hvIFwmIzM0O0ZBSUw6IHZldGggQlwmIzM0OzsgcmV0dXJuIDE7IH1cbiYjNDM7XHRuc3ggaXAgbGluayBhZGQgdkkgdHlwZSB2ZXRoIHBlZXIgbmFtZSB2SXAgfHxcbiYjNDM7XHRcdHsgZWNobyBcJiMzNDtGQUlMOiB2ZXRoIElcJiMzNDs7IHJldHVybiAxOyB9XG4mIzQzO1x0Zm9yIGkgaW4gdkEgdkIgdkkgdkFwIHZCcCB2SXA7IGRvXG4mIzQzO1x0XHRuc3ggaXAgbGluayBzZXQgXCYjMzQ7JGlcJiMzNDsgdXAgfHwgeyBlY2hvIFwmIzM0O0ZBSUw6ICRpIHVwXCYjMzQ7OyByZXR1cm4gMTsgfVxuJiM0MztcdGRvbmVcbiYjNDM7XHRpZiAhIG5zeCBpcCBsaW5rIGFkZCBuYW1lIGhzcjAgdHlwZSBoc3Igc2xhdmUxIHZBIHNsYXZlMiB2QiBcXFxuJiM0MztcdFx0aW50ZXJsaW5rIHZJIHN1cGVydmlzaW9uIDQ1IHByb3RvIDAgMlx1MDAzZS9kZXYvbnVsbDsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtTS0lQOiBIU1IgUmVkQm94IG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBrZXJuZWxcJiMzNDtcbiYjNDM7XHRcdHJldHVybiAka3NmdF9za2lwXG4mIzQzO1x0ZmlcbiYjNDM7XHRuc3ggaXAgbGluayBzZXQgaHNyMCB1cCB8fCB7IGVjaG8gXCYjMzQ7RkFJTDogaHNyMCB1cFwmIzM0OzsgcmV0dXJuIDE7IH1cbiYjNDM7XG4mIzQzO1x0bnN4IHB5dGhvbjMgL2Rldi9zdGRpbiBcdTAwM2NcdTAwM2MmIzM5O1BZRjEmIzM5O1xuJiM0MztpbXBvcnQgc29ja2V0LCBzZWxlY3QsIHN5cywgdGltZVxuJiM0MztcbiYjNDM7Tk9ERSAgPSBieXRlcy5mcm9taGV4KFwmIzM0OzAyMTEyMjMzNDQ1NVwmIzM0OylcbiYjNDM7TUNBU1QgPSBieXRlcy5mcm9taGV4KFwmIzM0OzAxMDA1ZTAwMDAwMVwmIzM0OylcbiYjNDM7UkIgICAgPSBieXRlcy5mcm9taGV4KG9wZW4oXCYjMzQ7L3N5cy9jbGFzcy9uZXQvdkkvYWRkcmVzc1wmIzM0OykucmVhZCgpLnJlcGxhY2UoXCYjMzQ7OlwmIzM0OywgXCYjMzQ7XCYjMzQ7KSlcbiYjNDM7UEFZICAgPSBieXRlcyhyYW5nZSg0NikpXG4mIzQzO1xuJiM0MztkZWYgZnJhbWUoc2VxKTpcbiYjNDM7ICAgIHRhZyA9ICgoKDEgXHUwMDNjXHUwMDNjIDEyKSB8IGxlbihQQVkpKS50b19ieXRlcygyLCBcJiMzNDtiaWdcJiMzNDspXG4mIzQzOyAgICAgICAgICAgJiM0Mzsgc2VxLnRvX2J5dGVzKDIsIFwmIzM0O2JpZ1wmIzM0OykgJiM0MzsgYlwmIzM0O1xceDA4XFx4MDBcJiMzNDspXG4mIzQzOyAgICByZXR1cm4gTUNBU1QgJiM0MzsgTk9ERSAmIzQzOyBiXCYjMzQ7XFx4ODlcXHgyZlwmIzM0OyAmIzQzOyB0YWcgJiM0MzsgUEFZXG4mIzQzO1xuJiM0Mzt0eCA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1BBQ0tFVCwgc29ja2V0LlNPQ0tfUkFXKTsgdHguYmluZCgoXCYjMzQ7dkFwXCYjMzQ7LCAwKSlcbiYjNDM7c20gPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9QQUNLRVQsIHNvY2tldC5TT0NLX1JBVyxcbiYjNDM7ICAgICAgICBzb2NrZXQubnRvaHMoMHgwMDAzKSlcbiYjNDM7c20uYmluZCgoXCYjMzQ7aHNyMFwmIzM0OywgMCkpXG4mIzQzO3NpID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfUEFDS0VULCBzb2NrZXQuU09DS19SQVcsXG4mIzQzOyAgICAgICAgc29ja2V0Lm50b2hzKDB4MDAwMykpXG4mIzQzO3NpLmJpbmQoKFwmIzM0O3ZJcFwmIzM0OywgMCkpXG4mIzQzO3NtLnNldGJsb2NraW5nKEZhbHNlKTsgc2kuc2V0YmxvY2tpbmcoRmFsc2UpXG4mIzQzO1xuJiM0Mztmb3IgaSBpbiByYW5nZSgzKTpcbiYjNDM7ICAgIHR4LnNlbmQoZnJhbWUoaSAmIzQzOyAxKSk7IHRpbWUuc2xlZXAoMC4wNSlcbiYjNDM7XG4mIzQzO21fc3JjID0gaV9zcmMgPSBOb25lXG4mIzQzO2VuZCA9IHRpbWUudGltZSgpICYjNDM7IDRcbiYjNDM7d2hpbGUgdGltZS50aW1lKCkgXHUwMDNjIGVuZCBhbmQgKG1fc3JjIGlzIE5vbmUgb3IgaV9zcmMgaXMgTm9uZSk6XG4mIzQzOyAgICByLCBfLCBfID0gc2VsZWN0LnNlbGVjdChbc20sIHNpXSwgW10sIFtdLCAwLjMpXG4mIzQzOyAgICBmb3IgcyBpbiByOlxuJiM0MzsgICAgICAgIHBrdCA9IHMucmVjdig2NTUzNSlcbiYjNDM7ICAgICAgICAjIGV4YWN0IGZsb3c6IGRzdCwgcG9zdC1zdHJpcCBFdGhlclR5cGUsIGV4YWN0IHBheWxvYWQsIG1pbiBsZW5ndGg7XG4mIzQzOyAgICAgICAgIyBoX3NvdXJjZSBpcyB0aGUgYXNzZXJ0ZWQgdmFsdWUgYW5kIG11c3QgTk9UIGJlIGZpbHRlcmVkIG9uXG4mIzQzOyAgICAgICAgaWYgKGxlbihwa3QpIFx1MDAzYyA2MCBvciBwa3RbOjZdICE9IE1DQVNUIG9yIHBrdFsxMjoxNF0gIT0gYlwmIzM0O1xceDA4XFx4MDBcJiMzNDtcbiYjNDM7ICAgICAgICAgICAgICAgIG9yIHBrdFsxNDoxNCAmIzQzOyBsZW4oUEFZKV0gIT0gUEFZKTpcbiYjNDM7ICAgICAgICAgICAgY29udGludWVcbiYjNDM7ICAgICAgICBpZiBzIGlzIHNtIGFuZCBtX3NyYyBpcyBOb25lOlxuJiM0MzsgICAgICAgICAgICBtX3NyYyA9IHBrdFs2OjEyXVxuJiM0MzsgICAgICAgIGVsaWYgcyBpcyBzaSBhbmQgaV9zcmMgaXMgTm9uZTpcbiYjNDM7ICAgICAgICAgICAgaV9zcmMgPSBwa3RbNjoxMl1cbiYjNDM7XG4mIzQzO3ByaW50KFwmIzM0O21hc3RlciBoX3NvdXJjZSAgICA9XCYjMzQ7LCBtX3NyYy5oZXgoKSBpZiBtX3NyYyBlbHNlIE5vbmUpXG4mIzQzO3ByaW50KFwmIzM0O25vZGUgTUFDICAgICAgICAgICA9XCYjMzQ7LCBOT0RFLmhleCgpKVxuJiM0MztwcmludChcJiMzNDtpbnRlcmxpbmsgaF9zb3VyY2UgPVwmIzM0OywgaV9zcmMuaGV4KCkgaWYgaV9zcmMgZWxzZSBOb25lKVxuJiM0MztwcmludChcJiMzNDtyZWRib3ggTUFDICAgICAgICAgPVwmIzM0OywgUkIuaGV4KCkpXG4mIzQzO2lmIGlfc3JjICE9IFJCOlxuJiM0MzsgICAgcHJpbnQoXCYjMzQ7RkFJTDogaW50ZXJsaW5rIGRpZCBub3QgY2FycnkgdGhlIFJlZEJveCBNQUNcJiMzNDspXG4mIzQzOyAgICBzeXMuZXhpdCgxKVxuJiM0MztpZiBtX3NyYyAhPSBOT0RFOlxuJiM0MzsgICAgcHJpbnQoXCYjMzQ7RkFJTDogbWFzdGVyIHJlY2VpdmVkICVzIGluc3RlYWQgb2YgdGhlIG5vZGUgTUFDIFwmIzM0O1xuJiM0MzsgICAgICAgICAgXCYjMzQ7KHNoYXJlZC1tdXRhdGlvbiBjb3JydXB0aW9uKVwmIzM0O1xuJiM0MzsgICAgICAgICAgJSAobV9zcmMuaGV4KCkgaWYgbV9zcmMgZWxzZSBcJiMzNDtub3RoaW5nXCYjMzQ7KSlcbiYjNDM7ICAgIHN5cy5leGl0KDEpXG4mIzQzO3ByaW50KFwmIzM0O1BBU1M6IG1hc3RlciBrZXB0IG5vZGUgTUFDLCBpbnRlcmxpbmsga2VwdCBSZWRCb3ggTUFDXCYjMzQ7KVxuJiM0MztzeXMuZXhpdCgwKVxuJiM0MztQWUYxXG4mIzQzO31cbiYjNDM7XG4mIzQzO3JjPTBcbiYjNDM7XG4mIzQzO3J1bl9mMlxuJiM0MztyZXQ9JD9cbiYjNDM7WyBcJiMzNDskcmV0XCYjMzQ7IC1lcSBcJiMzNDska3NmdF9za2lwXCYjMzQ7IF0gXHUwMDI2XHUwMDI2IGV4aXQgXCYjMzQ7JGtzZnRfc2tpcFwmIzM0O1xuJiM0MztbIFwmIzM0OyRyZXRcJiMzNDsgLWVxIDAgXSB8fCByYz0xXG4mIzQzO1xuJiM0MztydW5fZjFcbiYjNDM7cmV0PSQ/XG4mIzQzO1sgXCYjMzQ7JHJldFwmIzM0OyAtZXEgXCYjMzQ7JGtzZnRfc2tpcFwmIzM0OyBdIFx1MDAyNlx1MDAyNiBleGl0IFwmIzM0OyRrc2Z0X3NraXBcJiMzNDtcbiYjNDM7WyBcJiMzNDskcmV0XCYjMzQ7IC1lcSAwIF0gfHwgcmM9MVxuJiM0MztcbiYjNDM7aWYgWyAkcmMgLWVxIDAgXTsgdGhlblxuJiM0MztcdGVjaG8gXCYjMzQ7aHNyX3NoYXJlZF9tdXRhdGlvbjogcGVyLWVncmVzcyBtdXRhdGlvbiBpc29sYXRpb24gKEYxJiM0MztGMikgWyBPSyBdXCYjMzQ7XG4mIzQzO2Vsc2VcbiYjNDM7XHRlY2hvIFwmIzM0O2hzcl9zaGFyZWRfbXV0YXRpb246IHBlci1lZ3Jlc3MgbXV0YXRpb24gaXNvbGF0aW9uIFsgRkFJTCBdXCYjMzQ7IFxcXG4mIzQzO1x0XHRcJiMzNDtyYz0kcmNcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7ZmlcbiYjNDM7ZXhpdCAkcmNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwMDo1ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFNSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHNyX2Rldl94bWl0JiMzNDssCiAgICAmIzM0O2hzcl9oYW5kbGVfZnJhbWUmIzM0OywKICAgICYjMzQ7aHNyX2NyZWF0ZV90YWdnZWRfZnJhbWUmIzM0OywKICAgICYjMzQ7cHJwX2NyZWF0ZV90YWdnZWRfZnJhbWUmIzM0OywKICAgICYjMzQ7aHNyX2ZvcndhcmRfc2tiJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgc2hhcmVkLW11dGF0aW9uIGJ1ZyBpbiBIU1IvUFJQIGJ5IGFkZGluZyBgc2tiX2Nvd2AgYmVmb3JlIG1vZGlmeWluZyBjbG9uZWQgc2ticyBpbiBgaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWVgLCBgcHJwX2NyZWF0ZV90YWdnZWRfZnJhbWVgLCBhbmQgYGhzcl94bWl0YC4gVGhlc2UgYXJlIGNvcmUgcGFja2V0IGZvcndhcmRpbmcgZnVuY3Rpb25zIGluIHRoZSBIU1IgZHJpdmVyLCByZWFjaGFibGUgdmlhIGBoc3JfZGV2X3htaXRgIChtYXN0ZXIgZGV2aWNlIFRYKSBhbmQgYGhzcl9oYW5kbGVfZnJhbWVgIChzbGF2ZSBkZXZpY2UgUlgpLiBUaGUgY29kZSBpcyBmdWxseSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI1ODA5NTFhOTY3MjVkY2EwZGY4ZGQyMzM5YmY2ZWZmN2Q2MjdmN2MKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzIDAwOjU3OjU5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZm9yd2FyZC5jIGIvbmV0L2hzci9oc3JfZm9yd2FyZC5jCmluZGV4IDA3NzQ5ODFhNjVjMTYuLjk3NGI1NWYyNDg4MjEgMTAwNjQ0Ci0tLSBhL25ldC9oc3IvaHNyX2ZvcndhcmQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmMKQEAgLTMzNiwxMiAmIzQzOzMzNiwyNCBAQCBzdHJ1Y3Qgc2tfYnVmZiAqaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSwKIAlpbnQgbW92ZWxlbjsKIAogCWlmIChmcmFtZS0mZ3Q7c2tiX2hzcikgewotCQlzdHJ1Y3QgaHNyX2V0aGhkciAqaHNyX2V0aGhkciA9Ci0JCQkoc3RydWN0IGhzcl9ldGhoZHIgKilza2JfbWFjX2hlYWRlcihmcmFtZS0mZ3Q7c2tiX2hzcik7CiYjNDM7CQlzdHJ1Y3QgaHNyX2V0aGhkciAqaHNyX2V0aGhkcjsKJiM0MzsKJiM0MzsJCS8qIFRoZSBvcmlnaW5hbCBza2IgZGF0YSBtYXkgYmUgc2hhcmVkIHdpdGggYW5vdGhlciBlZ3Jlc3MKJiM0MzsJCSAqIGNsb25lLiBNYWtlIHRoZSBjbG9uZSBkYXRhIHByaXZhdGUgYmVmb3JlIHVwZGF0aW5nIHRoZQomIzQzOwkJICogcGF0aCBpZCBzbyB0aGUgdXBkYXRlIGNhbm5vdCBjb3JydXB0IHRoZSBvdGhlciBjb3B5LgomIzQzOwkJICovCiYjNDM7CQlza2IgPSBza2JfY2xvbmUoZnJhbWUtJmd0O3NrYl9oc3IsIEdGUF9BVE9NSUMpOwomIzQzOwkJaWYgKCFza2IpCiYjNDM7CQkJcmV0dXJuIE5VTEw7CiYjNDM7CQlpZiAoc2tiX2Nvdyhza2IsIDApKSB7CiYjNDM7CQkJa2ZyZWVfc2tiKHNrYik7CiYjNDM7CQkJcmV0dXJuIE5VTEw7CiYjNDM7CQl9CiAKIAkJLyogc2V0IHRoZSBsYW5lIGlkIHByb3Blcmx5ICovCiYjNDM7CQloc3JfZXRoaGRyID0gKHN0cnVjdCBoc3JfZXRoaGRyICopc2tiX21hY19oZWFkZXIoc2tiKTsKIAkJaHNyX3NldF9wYXRoX2lkKGZyYW1lLCBoc3JfZXRoaGRyLCBwb3J0KTsKLQkJcmV0dXJuIHNrYl9jbG9uZShmcmFtZS0mZ3Q7c2tiX2hzciwgR0ZQX0FUT01JQyk7CiYjNDM7CQlyZXR1cm4gc2tiOwogCX0gZWxzZSBpZiAocG9ydC0mZ3Q7ZGV2LSZndDtmZWF0dXJlcyAmYW1wOyBORVRJRl9GX0hXX0hTUl9UQUdfSU5TKSB7CiAJCXJldHVybiBza2JfY2xvbmUoZnJhbWUtJmd0O3NrYl9zdGQsIEdGUF9BVE9NSUMpOwogCX0KQEAgLTM3NywxNSAmIzQzOzM4OSwyOCBAQCBzdHJ1Y3Qgc2tfYnVmZiAqcHJwX2NyZWF0ZV90YWdnZWRfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSwKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCiAJaWYgKGZyYW1lLSZndDtza2JfcHJwKSB7Ci0JCXN0cnVjdCBwcnBfcmN0ICp0cmFpbGVyID0gc2tiX2dldF9QUlBfcmN0KGZyYW1lLSZndDtza2JfcHJwKTsKJiM0MzsJCXN0cnVjdCBwcnBfcmN0ICp0cmFpbGVyOwogCiYjNDM7CQkvKiBTYW1lIHNoYXJpbmcgaGF6YXJkIGFzIGFib3ZlOiBwcml2YXRpemUgdGhlIGNsb25lIGRhdGEKJiM0MzsJCSAqIGJlZm9yZSB1cGRhdGluZyB0aGUgTEFOIGlkLgomIzQzOwkJICovCiYjNDM7CQlza2IgPSBza2JfY2xvbmUoZnJhbWUtJmd0O3NrYl9wcnAsIEdGUF9BVE9NSUMpOwomIzQzOwkJaWYgKCFza2IpCiYjNDM7CQkJcmV0dXJuIE5VTEw7CiYjNDM7CQlpZiAoc2tiX2Nvdyhza2IsIDApKSB7CiYjNDM7CQkJa2ZyZWVfc2tiKHNrYik7CiYjNDM7CQkJcmV0dXJuIE5VTEw7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQl0cmFpbGVyID0gc2tiX2dldF9QUlBfcmN0KHNrYik7CiAJCWlmICh0cmFpbGVyKSB7CiAJCQlwcnBfc2V0X2xhbl9pZCh0cmFpbGVyLCBwb3J0KTsKIAkJfSBlbHNlIHsKIAkJCVdBUk5fT05DRSghdHJhaWxlciwgJiMzNDtlcnJvcmVkIFBSUCBza2ImIzM0Oyk7CiYjNDM7CQkJa2ZyZWVfc2tiKHNrYik7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQotCQlyZXR1cm4gc2tiX2Nsb25lKGZyYW1lLSZndDtza2JfcHJwLCBHRlBfQVRPTUlDKTsKJiM0MzsJCXJldHVybiBza2I7CiAJfSBlbHNlIGlmIChwb3J0LSZndDtkZXYtJmd0O2ZlYXR1cmVzICZhbXA7IE5FVElGX0ZfSFdfSFNSX1RBR19JTlMpIHsKIAkJcmV0dXJuIHNrYl9jbG9uZShmcmFtZS0mZ3Q7c2tiX3N0ZCwgR0ZQX0FUT01JQyk7CiAJfQpAQCAtNDIwLDYgJiM0Mzs0NDUsMjIgQEAgc3RhdGljIHZvaWQgaHNyX2RlbGl2ZXJfbWFzdGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiBzdGF0aWMgaW50IGhzcl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCwKIAkJICAgIHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpCiB7CiYjNDM7CS8qIEFuIGludGVybGluay1ib3VuZCBza2IgZnJvbSBnZXRfdW50YWdnZWRfZnJhbWUoKSBjYW4gc3RpbGwgYWxpYXMKJiM0MzsJICogYW5vdGhlciBsaXZlIGNvbnN1bWVyOiBmb3IgbWFzdGVyLW9yaWdpbmF0ZWQgZnJhbWVzIHRoZSBjbG9uZQomIzQzOwkgKiBzaGFyZXMgdGhlIG9yaWdpbmFsIFRYIHNrYiAod2hpY2ggdGFwcyBvciB0aGUgVFggcGF0aCBtYXkgc3RpbGwKJiM0MzsJICogaG9sZCk7IGZvciByaW5nIGZyYW1lcyB0aGUgbWFzdGVyIGFsc28gY29uc3VtZXMgdGhlbSB3aGVuIHRoZXkKJiM0MzsJICogYXJlIGRlc3RpbmVkIHRvIHRoZSBsb2NhbCBub2RlIHdpdGhvdXQgYmVpbmcgZXhjbHVzaXZlIHRvIGl0LgomIzQzOwkgKiBQcml2YXRpemUgYmVmb3JlIGFueSBhZGRyZXNzIG11dGF0aW9uLgomIzQzOwkgKi8KJiM0MzsJaWYgKHBvcnQtJmd0O3R5cGUgPT0gSFNSX1BUX0lOVEVSTElOSyAmYW1wOyZhbXA7CiYjNDM7CSAgICAoZnJhbWUtJmd0O3BvcnRfcmN2LSZndDt0eXBlID09IEhTUl9QVF9NQVNURVIgfHwKJiM0MzsJICAgICAoZnJhbWUtJmd0O2lzX2xvY2FsX2Rlc3QgJmFtcDsmYW1wOyAhZnJhbWUtJmd0O2lzX2xvY2FsX2V4Y2x1c2l2ZSkpICZhbXA7JmFtcDsKJiM0MzsJICAgIHNrYl9jb3coc2tiLCAwKSkgewomIzQzOwkJZnJhbWUtJmd0O3BvcnRfcmN2LSZndDtkZXYtJmd0O3N0YXRzLnJ4X2Ryb3BwZWQmIzQzOyYjNDM7OwomIzQzOwkJa2ZyZWVfc2tiKHNrYik7CiYjNDM7CQlyZXR1cm4gTkVUX1hNSVRfRFJPUDsKJiM0MzsJfQomIzQzOwogCWlmIChmcmFtZS0mZ3Q7cG9ydF9yY3YtJmd0O3R5cGUgPT0gSFNSX1BUX01BU1RFUikgewogCQloc3JfYWRkcl9zdWJzdF9kZXN0KGZyYW1lLSZndDtub2RlX3NyYywgc2tiLCBwb3J0KTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGUKaW5kZXggMzFmYjkzMjZjZjUzMy4uODdmZTM0OTUxYjhiMCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlCkBAIC01LDYgJiM0Mzs1LDcgQEAgdG9wX3NyY2RpciA9IC4uLy4uLy4uLy4uLy4uCiBURVNUX1BST0dTIDo9IFwKIAloc3JfcGluZy5zaCBcCiAJaHNyX3JlZGJveC5zaCBcCiYjNDM7CWhzcl9zaGFyZWRfbXV0YXRpb24uc2ggXAogCWxpbmtfZmF1bHRzLnNoIFwKIAlwcnBfcGluZy5zaCBcCiAjIGVuZCBvZiBURVNUX1BST0dTCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9zaGFyZWRfbXV0YXRpb24uc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9zaGFyZWRfbXV0YXRpb24uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMC4uMDVlN2U4MDNkMjg2NwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX3NoYXJlZF9tdXRhdGlvbi5zaApAQCAtMCwwICYjNDM7MSwyMjMgQEAKJiM0MzsjIS9iaW4vYmFzaAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjCiYjNDM7IyBWZXJpZnkgdGhhdCBwZXItZWdyZXNzIG11dGF0aW9ucyBvZiBzaGFyZWQgc2tiIGRhdGEgYXJlIHByaXZhdGU6CiYjNDM7IwomIzQzOyMgRjIgKHBhdGgvTEFOIElEKTogb24gYW4gYWZmZWN0ZWQga2VybmVsIHRoZSBzZWNvbmQgc2xhdmUmIzM5O3MgTEFOLUlEIHdyaXRlCiYjNDM7IyBsYW5kcyBpbiB0aGUgZmlyc3Qgc2xhdmUmIzM5O3Mgc3RpbGwtcXVldWVkIGNsb25lOyB3aXRoIGEgbmV0ZW0gZGVsYXkgb24KJiM0MzsjIHNsYXZlIEEsIGluamVjdGVkIGZyYW1lcyBsZWF2ZSBBIGNhcnJ5aW5nIEImIzM5O3MgTEFOIElELgomIzQzOyMKJiM0MzsjIEYxIChSZWRCb3ggc291cmNlIE1BQyk6IG9uIGFuIGFmZmVjdGVkIGtlcm5lbCBhbiBIU1ItdGFnZ2VkIG11bHRpY2FzdAomIzQzOyMgZnJhbWUgcmVjZWl2ZWQgb24gYSBSZWRCb3ggc2xhdmUgaXMgY2xvbmVkIGZvciBtYXN0ZXIgYW5kIGludGVybGluaywKJiM0MzsjIGFuZCB0aGUgaW50ZXJsaW5rJiMzOTtzIFJlZEJveC1NQUMgcmV3cml0ZSBsYW5kcyBpbiB0aGUgbWFzdGVyIGNsb25lJiMzOTtzCiYjNDM7IyBidWZmZXIsIHNvIHRoZSBsb2NhbCBzdGFjayByZWNlaXZlcyB0aGUgUmVkQm94IE1BQyBpbnN0ZWFkIG9mIHRoZQomIzQzOyMgb3JpZ2luYXRpbmcgbm9kZSYjMzk7cyBNQUMuCiYjNDM7CiYjNDM7aXB2Nj1mYWxzZQomIzQzOwomIzQzO3NvdXJjZSAuL2hzcl9jb21tb24uc2gKJiM0MzsKJiM0MztEVVI9NQomIzQzOwomIzQzO3JlcXVpcmUoKQomIzQzO3sKJiM0MzsJY29tbWFuZCAtdiAmIzM0OyQxJiMzNDsgJmd0Oy9kZXYvbnVsbCAyJmd0OyZhbXA7MSAmYW1wOyZhbXA7IHJldHVybiAwCiYjNDM7CWVjaG8gJiMzNDtTS0lQOiAkMSBub3QgYXZhaWxhYmxlJiMzNDsKJiM0MzsJZXhpdCAka3NmdF9za2lwCiYjNDM7fQomIzQzOwomIzQzO3JlcXVpcmUgaXAKJiM0MztyZXF1aXJlIHRjCiYjNDM7cmVxdWlyZSBweXRob24zCiYjNDM7CiYjNDM7dHJhcCBjbGVhbnVwX2FsbF9ucyBFWElUCiYjNDM7CiYjNDM7IyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEYyOiBMQU4tSUQgaXNvbGF0aW9uCiYjNDM7IyBQUlAgREFOUCAocHJvdG8gMSksIEFGX1BBQ0tFVCBwcmUtdGFnZ2VkIGluamVjdGlvbiwgbmV0ZW0gb24gc2xhdmUgQS4KJiM0MztydW5fZjIoKQomIzQzO3sKJiM0MzsJc2V0dXBfbnMgbnMgMiZndDsvZGV2L251bGwgfHwgcmV0dXJuICRrc2Z0X3NraXAKJiM0MzsJbnN4KCkgeyBpcCBuZXRucyBleGVjICYjMzQ7JG5zJiMzNDsgJiMzNDskQCYjMzQ7OyB9CiYjNDM7CiYjNDM7CSMgUHJvYmUgc2NoX25ldGVtIGluc2lkZSB0aGUgZGlzcG9zYWJsZSBuYW1lc3BhY2Ugb25seS4KJiM0MzsJaWYgISBuc3ggdGMgcWRpc2MgYWRkIGRldiBsbyByb290IG5ldGVtIGRlbGF5IDFtcyAyJmd0Oy9kZXYvbnVsbDsgdGhlbgomIzQzOwkJZWNobyAmIzM0O1NLSVA6IHNjaF9uZXRlbSBub3QgYXZhaWxhYmxlJiMzNDsKJiM0MzsJCXJldHVybiAka3NmdF9za2lwCiYjNDM7CWZpCiYjNDM7CW5zeCB0YyBxZGlzYyBkZWwgZGV2IGxvIHJvb3QgMiZndDsvZGV2L251bGwKJiM0MzsKJiM0MzsJIyBDYXBhYmlsaXR5IHByb2JlcyBlbmQgaGVyZTsgc2V0dXAgb3IgcnVudGltZSBmYWlsdXJlIGJlbG93IGlzIEZBSUwuCiYjNDM7CW5zeCBpcCBsaW5rIGFkZCB2QSB0eXBlIHZldGggcGVlciBuYW1lIHZBcCB8fAomIzQzOwkJeyBlY2hvICYjMzQ7RkFJTDogdmV0aCBBJiMzNDs7IHJldHVybiAxOyB9CiYjNDM7CW5zeCBpcCBsaW5rIGFkZCB2QiB0eXBlIHZldGggcGVlciBuYW1lIHZCcCB8fAomIzQzOwkJeyBlY2hvICYjMzQ7RkFJTDogdmV0aCBCJiMzNDs7IHJldHVybiAxOyB9CiYjNDM7CWZvciBpIGluIHZBIHZCIHZBcCB2QnA7IGRvCiYjNDM7CQluc3ggaXAgbGluayBzZXQgJiMzNDskaSYjMzQ7IHVwIHx8IHsgZWNobyAmIzM0O0ZBSUw6ICRpIHVwJiMzNDs7IHJldHVybiAxOyB9CiYjNDM7CWRvbmUKJiM0MzsJaWYgISBuc3ggaXAgbGluayBhZGQgbmFtZSBwcnAwIHR5cGUgaHNyIHNsYXZlMSB2QSBzbGF2ZTIgdkIgXAomIzQzOwkJc3VwZXJ2aXNpb24gNDUgcHJvdG8gMSAyJmd0Oy9kZXYvbnVsbDsgdGhlbgomIzQzOwkJZWNobyAmIzM0O1NLSVA6IEhTUi9QUlAgbm90IHN1cHBvcnRlZCBieSB0aGlzIGtlcm5lbCYjMzQ7CiYjNDM7CQlyZXR1cm4gJGtzZnRfc2tpcAomIzQzOwlmaQomIzQzOwluc3ggaXAgbGluayBzZXQgcHJwMCB1cCB8fCB7IGVjaG8gJiMzNDtGQUlMOiBwcnAwIHVwJiMzNDs7IHJldHVybiAxOyB9CiYjNDM7CW5zeCB0YyBxZGlzYyBhZGQgZGV2IHZBIHJvb3QgbmV0ZW0gZGVsYXkgMjAwbXMgfHwKJiM0MzsJCXsgZWNobyAmIzM0O0ZBSUw6IG5ldGVtJiMzNDs7IHJldHVybiAxOyB9CiYjNDM7CiYjNDM7CW5zeCBweXRob24zIC9kZXYvc3RkaW4gJiMzNDskRFVSJiMzNDsgJmx0OyZsdDsmIzM5O1BZRjImIzM5OwomIzQzO2ltcG9ydCBzb2NrZXQsIHN0cnVjdCwgc2VsZWN0LCBzeXMsIHRpbWUKJiM0MzsKJiM0MztkdXIgPSBpbnQoc3lzLmFyZ3ZbMV0pCiYjNDM7ZGVmIGxhbmlkKHBrdCk6CiYjNDM7ICAgIGlmIGxlbihwa3QpICZsdDsgMjAgb3IgcGt0Wy0yOl0gIT0gYiYjMzQ7XHg4OFx4ZmImIzM0OzoKJiM0MzsgICAgICAgIHJldHVybiBOb25lCiYjNDM7ICAgIHJldHVybiAocGt0Wy00XSAmZ3Q7Jmd0OyA0KSAmYW1wOyAweEYKJiM0MzsKJiM0MztTUkMgPSBieXRlcy5mcm9taGV4KG9wZW4oJiMzNDsvc3lzL2NsYXNzL25ldC9wcnAwL2FkZHJlc3MmIzM0OykucmVhZCgpLnJlcGxhY2UoJiMzNDs6JiMzNDssICYjMzQ7JiMzNDspKQomIzQzO0RTVCA9IGJ5dGVzLmZyb21oZXgoJiMzNDswMmFhYmJjY2RkMDEmIzM0OykKJiM0MztQQVkgPSBieXRlcyhyYW5nZSg0NikpCiYjNDM7cmN0MCA9IHN0cnVjdC5wYWNrKCYjMzQ7Jmd0O0gmIzM0OywgMCkgJiM0Mzsgc3RydWN0LnBhY2soJiMzNDsmZ3Q7SCYjMzQ7LCA1MiAmYW1wOyAweDBGRkYpICYjNDM7IGImIzM0O1x4ODhceGZiJiMzNDsKJiM0MztmcmFtZSA9IERTVCAmIzQzOyBTUkMgJiM0MzsgYiYjMzQ7XHgwOFx4MDAmIzM0OyAmIzQzOyBQQVkgJiM0MzsgcmN0MAomIzQzOwomIzQzO3R4ID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfUEFDS0VULCBzb2NrZXQuU09DS19SQVcpOyB0eC5iaW5kKCgmIzM0O3BycDAmIzM0OywgMCkpCiYjNDM7c0EgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9QQUNLRVQsIHNvY2tldC5TT0NLX1JBVywKJiM0MzsgICAgICAgIHNvY2tldC5udG9ocygweDAwMDMpKQomIzQzO3NBLmJpbmQoKCYjMzQ7dkFwJiMzNDssIDApKQomIzQzO3NCID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfUEFDS0VULCBzb2NrZXQuU09DS19SQVcsCiYjNDM7ICAgICAgICBzb2NrZXQubnRvaHMoMHgwMDAzKSkKJiM0MztzQi5iaW5kKCgmIzM0O3ZCcCYjMzQ7LCAwKSkKJiM0MztzQS5zZXRibG9ja2luZyhGYWxzZSk7IHNCLnNldGJsb2NraW5nKEZhbHNlKQomIzQzO2ZvciBfIGluIHJhbmdlKDIwMCk6CiYjNDM7ICAgIHR4LnNlbmQoZnJhbWUpOyB0aW1lLnNsZWVwKDAuMDAxKQomIzQzOwomIzQzO2EsIGIgPSBbXSwgW10KJiM0MztlbmQgPSB0aW1lLnRpbWUoKSAmIzQzOyBkdXIKJiM0Mzt3aGlsZSB0aW1lLnRpbWUoKSAmbHQ7IGVuZDoKJiM0MzsgICAgciwgXywgXyA9IHNlbGVjdC5zZWxlY3QoW3NBLCBzQl0sIFtdLCBbXSwgMC4zKQomIzQzOyAgICBmb3IgcyBpbiByOgomIzQzOyAgICAgICAgcGt0ID0gcy5yZWN2KDY1NTM1KQomIzQzOyAgICAgICAgaWYgKHBrdFs6Nl0gIT0gRFNUIG9yIHBrdFs2OjEyXSAhPSBTUkMgb3IgcGt0WzEyOjE0XSAhPSBiJiMzNDtceDA4XHgwMCYjMzQ7CiYjNDM7ICAgICAgICAgICAgICAgIG9yIHBrdFsxNDoxNCAmIzQzOyBsZW4oUEFZKV0gIT0gUEFZKToKJiM0MzsgICAgICAgICAgICBjb250aW51ZQomIzQzOyAgICAgICAgbGlkID0gbGFuaWQocGt0KQomIzQzOyAgICAgICAgaWYgbGlkIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgIChhIGlmIHMgaXMgc0EgZWxzZSBiKS5hcHBlbmQobGlkKQomIzQzOwomIzQzO3ByaW50KCYjMzQ7QS1zaWRlIGNvdW50PSVkIGxhbiBpZHM9JXMmIzM0OyAlIChsZW4oYSksIHNvcnRlZChzZXQoYSkpKSkKJiM0MztwcmludCgmIzM0O0Itc2lkZSBjb3VudD0lZCBsYW4gaWRzPSVzJiMzNDsgJSAobGVuKGIpLCBzb3J0ZWQoc2V0KGIpKSkpCiYjNDM7aWYgbGVuKGEpICZsdDsgMTUwIG9yIGxlbihiKSAmbHQ7IDE1MDoKJiM0MzsgICAgcHJpbnQoJiMzNDtGQUlMOiB0b28gZmV3IGluamVjdGVkIGZyYW1lcyBjYXB0dXJlZCAoQT0lZCBCPSVkLCBzZW50IDIwMCkmIzM0OwomIzQzOyAgICAgICAgICAlIChsZW4oYSksIGxlbihiKSkpCiYjNDM7ICAgIHN5cy5leGl0KDEpCiYjNDM7YmFkX2EgPSBbeCBmb3IgeCBpbiBhIGlmICh4ICZhbXA7IDEpICE9IDBdCiYjNDM7YmFkX2IgPSBbeCBmb3IgeCBpbiBiIGlmICh4ICZhbXA7IDEpICE9IDFdCiYjNDM7aWYgYmFkX2Egb3IgYmFkX2I6CiYjNDM7ICAgIHByaW50KCYjMzQ7RkFJTDogc2hhcmVkLW11dGF0aW9uIGNvcnJ1cHRpb24gLSBBOiAlZC8lZCB3cm9uZy1sYW4sJiMzNDsKJiM0MzsgICAgICAgICAgJiMzNDsgQjogJWQvJWQgd3JvbmctbGFuJiMzNDsKJiM0MzsgICAgICAgICAgJSAobGVuKGJhZF9hKSwgbGVuKGEpLCBsZW4oYmFkX2IpLCBsZW4oYikpKQomIzQzOyAgICBzeXMuZXhpdCgxKQomIzQzO3ByaW50KCYjMzQ7UEFTUzogcGVyLWVncmVzcyBMQU4gSURzIGlzb2xhdGVkIChBIGFsbCBiaXQwPTAsIEIgYWxsIGJpdDA9MSkmIzM0OykKJiM0MztzeXMuZXhpdCgwKQomIzQzO1BZRjIKJiM0Mzt9CiYjNDM7CiYjNDM7IyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRjE6IFJlZEJveCBzb3VyY2UtTUFDIHByaXZhY3kKJiM0MzsjIEhTUiBSZWRCb3ggKHByb3RvIDApLCB0YWdnZWQgbXVsdGljYXN0IGZyb20gYSBzbGF2ZTogbWFzdGVyIG11c3Qga2VlcAomIzQzOyMgdGhlIG5vZGUgTUFDLCBpbnRlcmxpbmsgbXVzdCBjYXJyeSB0aGUgUmVkQm94IE1BQy4KJiM0MztydW5fZjEoKQomIzQzO3sKJiM0MzsJc2V0dXBfbnMgbnMgMiZndDsvZGV2L251bGwgfHwgcmV0dXJuICRrc2Z0X3NraXAKJiM0MzsJbnN4KCkgeyBpcCBuZXRucyBleGVjICYjMzQ7JG5zJiMzNDsgJiMzNDskQCYjMzQ7OyB9CiYjNDM7CiYjNDM7CW5zeCBpcCBsaW5rIGFkZCB2QSB0eXBlIHZldGggcGVlciBuYW1lIHZBcCB8fAomIzQzOwkJeyBlY2hvICYjMzQ7RkFJTDogdmV0aCBBJiMzNDs7IHJldHVybiAxOyB9CiYjNDM7CW5zeCBpcCBsaW5rIGFkZCB2QiB0eXBlIHZldGggcGVlciBuYW1lIHZCcCB8fAomIzQzOwkJeyBlY2hvICYjMzQ7RkFJTDogdmV0aCBCJiMzNDs7IHJldHVybiAxOyB9CiYjNDM7CW5zeCBpcCBsaW5rIGFkZCB2SSB0eXBlIHZldGggcGVlciBuYW1lIHZJcCB8fAomIzQzOwkJeyBlY2hvICYjMzQ7RkFJTDogdmV0aCBJJiMzNDs7IHJldHVybiAxOyB9CiYjNDM7CWZvciBpIGluIHZBIHZCIHZJIHZBcCB2QnAgdklwOyBkbwomIzQzOwkJbnN4IGlwIGxpbmsgc2V0ICYjMzQ7JGkmIzM0OyB1cCB8fCB7IGVjaG8gJiMzNDtGQUlMOiAkaSB1cCYjMzQ7OyByZXR1cm4gMTsgfQomIzQzOwlkb25lCiYjNDM7CWlmICEgbnN4IGlwIGxpbmsgYWRkIG5hbWUgaHNyMCB0eXBlIGhzciBzbGF2ZTEgdkEgc2xhdmUyIHZCIFwKJiM0MzsJCWludGVybGluayB2SSBzdXBlcnZpc2lvbiA0NSBwcm90byAwIDImZ3Q7L2Rldi9udWxsOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7U0tJUDogSFNSIFJlZEJveCBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMga2VybmVsJiMzNDsKJiM0MzsJCXJldHVybiAka3NmdF9za2lwCiYjNDM7CWZpCiYjNDM7CW5zeCBpcCBsaW5rIHNldCBoc3IwIHVwIHx8IHsgZWNobyAmIzM0O0ZBSUw6IGhzcjAgdXAmIzM0OzsgcmV0dXJuIDE7IH0KJiM0MzsKJiM0MzsJbnN4IHB5dGhvbjMgL2Rldi9zdGRpbiAmbHQ7Jmx0OyYjMzk7UFlGMSYjMzk7CiYjNDM7aW1wb3J0IHNvY2tldCwgc2VsZWN0LCBzeXMsIHRpbWUKJiM0MzsKJiM0MztOT0RFICA9IGJ5dGVzLmZyb21oZXgoJiMzNDswMjExMjIzMzQ0NTUmIzM0OykKJiM0MztNQ0FTVCA9IGJ5dGVzLmZyb21oZXgoJiMzNDswMTAwNWUwMDAwMDEmIzM0OykKJiM0MztSQiAgICA9IGJ5dGVzLmZyb21oZXgob3BlbigmIzM0Oy9zeXMvY2xhc3MvbmV0L3ZJL2FkZHJlc3MmIzM0OykucmVhZCgpLnJlcGxhY2UoJiMzNDs6JiMzNDssICYjMzQ7JiMzNDspKQomIzQzO1BBWSAgID0gYnl0ZXMocmFuZ2UoNDYpKQomIzQzOwomIzQzO2RlZiBmcmFtZShzZXEpOgomIzQzOyAgICB0YWcgPSAoKCgxICZsdDsmbHQ7IDEyKSB8IGxlbihQQVkpKS50b19ieXRlcygyLCAmIzM0O2JpZyYjMzQ7KQomIzQzOyAgICAgICAgICAgJiM0Mzsgc2VxLnRvX2J5dGVzKDIsICYjMzQ7YmlnJiMzNDspICYjNDM7IGImIzM0O1x4MDhceDAwJiMzNDspCiYjNDM7ICAgIHJldHVybiBNQ0FTVCAmIzQzOyBOT0RFICYjNDM7IGImIzM0O1x4ODlceDJmJiMzNDsgJiM0MzsgdGFnICYjNDM7IFBBWQomIzQzOwomIzQzO3R4ID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfUEFDS0VULCBzb2NrZXQuU09DS19SQVcpOyB0eC5iaW5kKCgmIzM0O3ZBcCYjMzQ7LCAwKSkKJiM0MztzbSA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1BBQ0tFVCwgc29ja2V0LlNPQ0tfUkFXLAomIzQzOyAgICAgICAgc29ja2V0Lm50b2hzKDB4MDAwMykpCiYjNDM7c20uYmluZCgoJiMzNDtoc3IwJiMzNDssIDApKQomIzQzO3NpID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfUEFDS0VULCBzb2NrZXQuU09DS19SQVcsCiYjNDM7ICAgICAgICBzb2NrZXQubnRvaHMoMHgwMDAzKSkKJiM0MztzaS5iaW5kKCgmIzM0O3ZJcCYjMzQ7LCAwKSkKJiM0MztzbS5zZXRibG9ja2luZyhGYWxzZSk7IHNpLnNldGJsb2NraW5nKEZhbHNlKQomIzQzOwomIzQzO2ZvciBpIGluIHJhbmdlKDMpOgomIzQzOyAgICB0eC5zZW5kKGZyYW1lKGkgJiM0MzsgMSkpOyB0aW1lLnNsZWVwKDAuMDUpCiYjNDM7CiYjNDM7bV9zcmMgPSBpX3NyYyA9IE5vbmUKJiM0MztlbmQgPSB0aW1lLnRpbWUoKSAmIzQzOyA0CiYjNDM7d2hpbGUgdGltZS50aW1lKCkgJmx0OyBlbmQgYW5kIChtX3NyYyBpcyBOb25lIG9yIGlfc3JjIGlzIE5vbmUpOgomIzQzOyAgICByLCBfLCBfID0gc2VsZWN0LnNlbGVjdChbc20sIHNpXSwgW10sIFtdLCAwLjMpCiYjNDM7ICAgIGZvciBzIGluIHI6CiYjNDM7ICAgICAgICBwa3QgPSBzLnJlY3YoNjU1MzUpCiYjNDM7ICAgICAgICAjIGV4YWN0IGZsb3c6IGRzdCwgcG9zdC1zdHJpcCBFdGhlclR5cGUsIGV4YWN0IHBheWxvYWQsIG1pbiBsZW5ndGg7CiYjNDM7ICAgICAgICAjIGhfc291cmNlIGlzIHRoZSBhc3NlcnRlZCB2YWx1ZSBhbmQgbXVzdCBOT1QgYmUgZmlsdGVyZWQgb24KJiM0MzsgICAgICAgIGlmIChsZW4ocGt0KSAmbHQ7IDYwIG9yIHBrdFs6Nl0gIT0gTUNBU1Qgb3IgcGt0WzEyOjE0XSAhPSBiJiMzNDtceDA4XHgwMCYjMzQ7CiYjNDM7ICAgICAgICAgICAgICAgIG9yIHBrdFsxNDoxNCAmIzQzOyBsZW4oUEFZKV0gIT0gUEFZKToKJiM0MzsgICAgICAgICAgICBjb250aW51ZQomIzQzOyAgICAgICAgaWYgcyBpcyBzbSBhbmQgbV9zcmMgaXMgTm9uZToKJiM0MzsgICAgICAgICAgICBtX3NyYyA9IHBrdFs2OjEyXQomIzQzOyAgICAgICAgZWxpZiBzIGlzIHNpIGFuZCBpX3NyYyBpcyBOb25lOgomIzQzOyAgICAgICAgICAgIGlfc3JjID0gcGt0WzY6MTJdCiYjNDM7CiYjNDM7cHJpbnQoJiMzNDttYXN0ZXIgaF9zb3VyY2UgICAgPSYjMzQ7LCBtX3NyYy5oZXgoKSBpZiBtX3NyYyBlbHNlIE5vbmUpCiYjNDM7cHJpbnQoJiMzNDtub2RlIE1BQyAgICAgICAgICAgPSYjMzQ7LCBOT0RFLmhleCgpKQomIzQzO3ByaW50KCYjMzQ7aW50ZXJsaW5rIGhfc291cmNlID0mIzM0OywgaV9zcmMuaGV4KCkgaWYgaV9zcmMgZWxzZSBOb25lKQomIzQzO3ByaW50KCYjMzQ7cmVkYm94IE1BQyAgICAgICAgID0mIzM0OywgUkIuaGV4KCkpCiYjNDM7aWYgaV9zcmMgIT0gUkI6CiYjNDM7ICAgIHByaW50KCYjMzQ7RkFJTDogaW50ZXJsaW5rIGRpZCBub3QgY2FycnkgdGhlIFJlZEJveCBNQUMmIzM0OykKJiM0MzsgICAgc3lzLmV4aXQoMSkKJiM0MztpZiBtX3NyYyAhPSBOT0RFOgomIzQzOyAgICBwcmludCgmIzM0O0ZBSUw6IG1hc3RlciByZWNlaXZlZCAlcyBpbnN0ZWFkIG9mIHRoZSBub2RlIE1BQyAmIzM0OwomIzQzOyAgICAgICAgICAmIzM0OyhzaGFyZWQtbXV0YXRpb24gY29ycnVwdGlvbikmIzM0OwomIzQzOyAgICAgICAgICAlIChtX3NyYy5oZXgoKSBpZiBtX3NyYyBlbHNlICYjMzQ7bm90aGluZyYjMzQ7KSkKJiM0MzsgICAgc3lzLmV4aXQoMSkKJiM0MztwcmludCgmIzM0O1BBU1M6IG1hc3RlciBrZXB0IG5vZGUgTUFDLCBpbnRlcmxpbmsga2VwdCBSZWRCb3ggTUFDJiMzNDspCiYjNDM7c3lzLmV4aXQoMCkKJiM0MztQWUYxCiYjNDM7fQomIzQzOwomIzQzO3JjPTAKJiM0MzsKJiM0MztydW5fZjIKJiM0MztyZXQ9JD8KJiM0MztbICYjMzQ7JHJldCYjMzQ7IC1lcSAmIzM0OyRrc2Z0X3NraXAmIzM0OyBdICZhbXA7JmFtcDsgZXhpdCAmIzM0OyRrc2Z0X3NraXAmIzM0OwomIzQzO1sgJiMzNDskcmV0JiMzNDsgLWVxIDAgXSB8fCByYz0xCiYjNDM7CiYjNDM7cnVuX2YxCiYjNDM7cmV0PSQ/CiYjNDM7WyAmIzM0OyRyZXQmIzM0OyAtZXEgJiMzNDska3NmdF9za2lwJiMzNDsgXSAmYW1wOyZhbXA7IGV4aXQgJiMzNDska3NmdF9za2lwJiMzNDsKJiM0MztbICYjMzQ7JHJldCYjMzQ7IC1lcSAwIF0gfHwgcmM9MQomIzQzOwomIzQzO2lmIFsgJHJjIC1lcSAwIF07IHRoZW4KJiM0MzsJZWNobyAmIzM0O2hzcl9zaGFyZWRfbXV0YXRpb246IHBlci1lZ3Jlc3MgbXV0YXRpb24gaXNvbGF0aW9uIChGMSYjNDM7RjIpIFsgT0sgXSYjMzQ7CiYjNDM7ZWxzZQomIzQzOwllY2hvICYjMzQ7aHNyX3NoYXJlZF9tdXRhdGlvbjogcGVyLWVncmVzcyBtdXRhdGlvbiBpc29sYXRpb24gWyBGQUlMIF0mIzM0OyBcCiYjNDM7CQkmIzM0O3JjPSRyYyYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7ZmkKJiM0MztleGl0ICRyYwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwMDo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDQwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSFNSL1BSUCBTaGFyZWQtTXV0YXRpb24gQnVnIEZpeCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgaGl0dGluZyBgbmV0L2hzci9oc3JfZm9yd2FyZC5jYCBhbmQgaW50cm9kdWNpbmcgYSBuZXcgc2VsZnRlc3QgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX3NoYXJlZF9tdXRhdGlvbi5zaGAuIE15IGluaXRpYWwgc2NhbiB0ZWxscyBtZSB0aGlzIGlzIGFkZHJlc3NpbmcgYSBzaGFyZWQtbXV0YXRpb24gYnVnIHdpdGhpbiB0aGUgSFNSL1BSUCBwcm90b2NvbHMuIFNwZWNpZmljYWxseSwgdGhlIGlzc3VlIHJldm9sdmVzIGFyb3VuZCBgc2tiX2Nsb25lYC4gSXQgbG9va3MgbGlrZSB3ZSB3ZXJlIGNsb25pbmcgU0tCcyBidXQgdGhlbiBkaXJlY3RseSBtb2RpZnlpbmcgdGhlICpjbG9uZWQqIFNLQiB3aXRob3V0IHVzaW5nIGBza2JfY293YCBvciBgc2tiX2NvcHlgIGZpcnN0LiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBtaXN0YWtlIOKAkyBtb2RpZnlpbmcgYSBjbG9uZSB3aXRob3V0IGVuc3VyaW5nIHRoZSBvcmlnaW5hbCBkYXRhIGlzIHByb3RlY3RlZC4gVGhpcyB3b3VsZCBsZWFkIHRvIGRhdGEgY29ycnVwdGlvbiBpbiB0aGUgb3JpZ2luYWwgU0tCLCBzaGFyZWQgd2l0aCBvdGhlciBjbG9uZXMsIGEgc2lnbmlmaWNhbnQgdnVsbmVyYWJpbGl0eS4KClRoZSBmaXggc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gSXQgYWRkcyBgc2tiX2Nvdyhza2IsIDApYCBiZWZvcmUgdGhlIG1vZGlmaWNhdGlvbiBzdGVwcy4gTGV0IG1lIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgdGhlIGNvbnRleHQgY29ycmVjdC4gTG9va3MgbGlrZSB0aGlzIGFmZmVjdHMgYGhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCwgYHBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCwgYW5kIGBoc3JfeG1pdGAgd2l0aGluIHRoZSBIU1IgbmV0d29yayBkcml2ZXIuIFF1aWNrIHJlbWluZGVyLCB0aGVzZSBhcmUgYWxsIHBhcnQgb2YgdGhlIEhTUiBzdGFjaywgYW5kIHRoYXQgZnVuY3Rpb25hbGl0eSBpcyBjb25maWd1cmVkIHdpdGggYENPTkZJR19IU1JgLgoKUmlnaHQsIHRpbWUgdG8gZGlnIGluIGFuZCB2ZXJpZnkgdGhlIGxvZ2ljIGFyb3VuZCB0aG9zZSBmdW5jdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBza2JfY293YCBpcyBjb3JyZWN0bHkgaW1wbGVtZW50ZWQgbm93IGluIGFsbCB0aGUgbGlzdGVkIGZ1bmN0aW9ucy4gSSYjMzk7bGwgYWxzbyBuZWVkIHRvIHNlZSBpZiB0aGUgbmV3IHNlbGZ0ZXN0IGFwcHJvcHJpYXRlbHkgY292ZXJzIHRoZSBidWcgc2NlbmFyaW8uIFdlIGNhbiYjMzk7dCBoYXZlIHRoaXMgYWdhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDA6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhTUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9oc3IvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9oc3IvS2NvbmZpZy01LVxubmV0L2hzci9LY29uZmlnOjY6Y29uZmlnIEhTUlxubmV0L2hzci9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5IChIU1IgXHUwMDI2IFBSUClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwMDo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTM2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIERlcGVuZGVuY2llcyBpbiB0aGUgYG5ldC9oc3IvS2NvbmZpZ2AgRmlsZSoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIGluIHRvbyBkZWVwLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJlLCB3aGljaCBpcyBhIGdvb2QgaGFiaXQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIGBuZXQvaHNyL0tjb25maWdgIGZpbGUuIEkmIzM5O20gZ29pbmcgdG8gbmF2aWdhdGUgdG8gdGhhdCBLY29uZmlnIGZpbGUuIEkgd2FudCB0byBzZWUgYSBjbGVhciBtYXAgb2YgdGhlIGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpdGhpbiB0aGUgSFNSIChIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5KSBtb2R1bGUuIEkga25vdyB0aGF0IGZpbGUgd2lsbCBjb250YWluIHRoZSBjcnVjaWFsIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIGFuZCBjb25kaXRpb25hbHMgdGhhdCBnb3Zlcm4gd2hpY2ggZmVhdHVyZXMgYXJlIGVuYWJsZWQsIGFuZCB3aGljaCBhcmVuJiMzOTt0LCBiYXNlZCBvbiB0aGUgb3ZlcmFsbCBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGNydWNpYWwgdmFyaWFibGVzIGFuZCBjb25kaXRpb25zIHRoYXQgZHJpdmUgdGhlIEhTUiBtb2R1bGUmIzM5O3MgYnVpbGQgcHJvY2Vzcy4gRXNzZW50aWFsbHksIEkmIzM5O20gYWltaW5nIGZvciBhIHF1aWNrIHNjYW4gb2YgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAwOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2hzci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgSUVDIDYyNDM5LTMgSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeVxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgSFNSXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5IChIU1IgXHUwMDI2IFBSUClcJiMzNDtcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgVGhpcyBlbmFibGVzIElFQyA2MjQzOSBkZWZpbmVkIEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzXG4gIDEwOlx0XHQgIFJlZHVuZGFuY3kgKEhTUikgYW5kIFBhcmFsbGVsIFJlZHVuZGFuY3kgUHJvdG9jb2wgKFBSUCkuXG4gIDExOlx0XG4gIDEyOlx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHlvdXIgTGludXggYm94IHdpbGwgYmUgYWJsZSB0byBhY3QgYXMgYVxuICAxMzpcdFx0ICBEQU5IIChcJiMzNDtEb3VibHkgYXR0YWNoZWQgbm9kZSBpbXBsZW1lbnRpbmcgSFNSXCYjMzQ7KSBvciBEQU5QIChcJiMzNDtEb3VibHlcbiAgMTQ6XHRcdCAgYXR0YWNoZWQgbm9kZSBpbXBsZW1lbnRpbmcgUFJQXCYjMzQ7KS4gRm9yIHRoaXMgdG8gd29yaywgeW91ciBMaW51eCBib3hcbiAgMTU6XHRcdCAgbmVlZHMgKGF0IGxlYXN0KSB0d28gcGh5c2ljYWwgRXRoZXJuZXQgaW50ZXJmYWNlcy5cbiAgMTY6XHRcbiAgMTc6XHRcdCAgRm9yIERBTkgsIGl0IG11c3QgYmUgY29ubmVjdGVkIGFzIGEgbm9kZSBpbiBhIHJpbmcgbmV0d29yayB0b2dldGhlclxuICAxODpcdFx0ICB3aXRoIG90aGVyIEhTUiBjYXBhYmxlIG5vZGVzLiBBbGwgRXRoZXJuZXQgZnJhbWVzIHNlbnQgb3ZlciB0aGUgSFNSXG4gIDE5Olx0XHQgIGRldmljZSB3aWxsIGJlIHNlbnQgaW4gYm90aCBkaXJlY3Rpb25zIG9uIHRoZSByaW5nIChvdmVyIGJvdGggc2xhdmVcbiAgMjA6XHRcdCAgcG9ydHMpLCBnaXZpbmcgYSByZWR1bmRhbnQsIGluc3RhbnQgZmFpbC1vdmVyIG5ldHdvcmsuIEVhY2ggSFNSIG5vZGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwMDo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzEyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBIU1IgQ29uZmlndXJhdGlvbiBhbmQgRm9yd2FyZGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBIU1IgY29uZmlndXJhdGlvbiwgYW5kIGl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBjb25maWcgaXRzZWxmLCBsZXQmIzM5O3MganVzdCBjYWxsIGl0IGBIU1JgLCBkb2VzbiYjMzk7dCBsb29rIGxpa2UgaXQgaGFzIGFueSBjcmF6eSBkZXBlbmRlbmNpZXMg4oCTIHN0YW5kYXJkIG5ldHdvcmtpbmcgaXMgYWxsIHRoYXQmIzM5O3MgcmVxdWlyZWQsIHdoaWNoIGlzIHdoYXQgSSYjMzk7ZCBleHBlY3QuIE5vdywgSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgdGFnZ2VkIGZyYW1lcyBhcmUgY3JlYXRlZCBhbmQgaGFuZGxlZC4gTXkgcHJpbWFyeSBpbnRlcmVzdCBsaWVzIGluIHRoZSBjb3JlIGZvcndhcmRpbmcgbG9naWMuCgpJIHRoaW5rIEkmIzM5O2xsIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgZnVuY3Rpb25zIGBoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZWAsIGBwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZWAsIGFuZCBgaHNyX3htaXRgIHdpdGhpbiB0aGUgYG5ldC9oc3IvaHNyX2ZvcndhcmQuY2AgZmlsZS4gVGhvc2UgdGhyZWUgc2VlbSBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgdGFnZ2luZyBhbmQgdHJhbnNtaXNzaW9uIHByb2Nlc3Nlcy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBIU1IgYW5kIFBSUCB0YWdnaW5nIG1lY2hhbmlzbXMgaW50ZXJhY3QuIEkgd2FudCB0byBzZWUgaG93IHRoZSBmcmFtZXMgYXJlIGNvbnN0cnVjdGVkIGFuZCBob3cgdGhleSBnZXQgc2VudCBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDA6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHNyX2NyZWF0ZV90YWdnZWRfZnJhbWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaHNyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaHNyL2hzcl9kZXZpY2UuYz02MjE9c3RhdGljIGNvbnN0IHN0cnVjdCBoc3JfcHJvdG9fb3BzIGhzcl9vcHMgPSB7XG5uZXQvaHNyL2hzcl9kZXZpY2UuYy02MjItXHQuc2VuZF9zdl9mcmFtZSA9IHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lLFxubmV0L2hzci9oc3JfZGV2aWNlLmM6NjIzOlx0LmNyZWF0ZV90YWdnZWRfZnJhbWUgPSBoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZSxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTYyNC1cdC5nZXRfdW50YWdnZWRfZnJhbWUgPSBoc3JfZ2V0X3VudGFnZ2VkX2ZyYW1lLFxuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYz0yODg9c3RhdGljIHN0cnVjdCBza19idWZmICpoc3JfZmlsbF90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtMzMwLSAqL1xubmV0L2hzci9oc3JfZm9yd2FyZC5jOjMzMTpzdHJ1Y3Qgc2tfYnVmZiAqaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy0zMzItXHRcdFx0XHRcdHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmg9MTc9c3RydWN0IHNrX2J1ZmYgKnBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmgtMTgtXHRcdFx0XHRcdHN0cnVjdCBoc3JfcG9ydCAqcG9ydCk7XG5uZXQvaHNyL2hzcl9mb3J3YXJkLmg6MTk6c3RydWN0IHNrX2J1ZmYgKmhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmgtMjAtXHRcdFx0XHRcdHN0cnVjdCBoc3JfcG9ydCAqcG9ydCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDA6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ0OAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBjb25zaWRlcmluZyBJJiMzOTttIGRlZXAgaW4gdGhpcyBjb2RlOgoKKipBbmFseXppbmcgRnVuY3Rpb24gU2NvcGUqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnM6IGBoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZWAsIGBwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZWAsIGFuZCBgaHNyX3htaXRgLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIGFsd2F5cyBhYm91dCBzY29wZSDigJMgYXJlIHRoZXNlIHN0YXRpYywgb3IgYXJlIHRoZXkgZ2xvYmFsPyBUaGUgYmVoYXZpb3Igd2lsbCBiZSB2ZXJ5IGRpZmZlcmVudC4gQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4gTG9va3MgbGlrZSBgaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWVgIGlzIGdsb2JhbCwgYW5kIGBwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZWAgaXMgYWxzbyBnbG9iYWxseSBhY2Nlc3NpYmxlLiBIbW0sIGJ1dCB0aGVuIGhlcmUmIzM5O3MgYGhzcl94bWl0YCwgZmxhZ2dlZCBhcyBzdGF0aWMuIE9rYXksIGdvb2QuIExldCYjMzk7cyBtYWtlIGFic29sdXRlbHkgc3VyZSBhYm91dCB0aGUgYGhzcl94bWl0YCBzY29waW5nIGFzIHRoYXQgY291bGQgYmUgYSBwb3RlbnRpYWwgcG9pbnQgb2YgZGl2ZXJnZW5jZSBsYXRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDA6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHNyX3htaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaHNyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaHNyL2hzcl9mb3J3YXJkLmM9NDI0PXN0YXRpYyB2b2lkIGhzcl9kZWxpdmVyX21hc3RlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy00NDQtXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6NDQ1OnN0YXRpYyBpbnQgaHNyX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0LFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTQ0Ni1cdFx0ICAgIHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXG4tLVxubmV0L2hzci9oc3JfZm9yd2FyZC5jPTU2MD1zdGF0aWMgdm9pZCBoc3JfZm9yd2FyZF9kbyhzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lKVxuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy02MjEtXHRcdH0gZWxzZSB7XG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6NjIyOlx0XHRcdGlmICghaHNyX3htaXQoc2tiLCBwb3J0LCBmcmFtZSkpXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNjIzLVx0XHRcdFx0aWYgKHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfU0xBVkVfQSB8fFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwMDo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDI0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBicmVha2Rvd24gb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgYGhzcl94bWl0YCBDb2RlKioKCk9rYXksIHNvIGBoc3JfeG1pdGAgaXMgc3RhdGljLCB3aGljaCB0ZWxscyBtZSBpdCYjMzk7cyBsaWtlbHkgYSBjb3JlIGludGVybmFsIGZ1bmN0aW9uIHdpdGhpbiB0aGlzIEhTUiAoSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSkgbW9kdWxlLiBUaGF0IG1lYW5zIGl0JiMzOTtzIHByb2JhYmx5IG5vdCBkaXJlY3RseSBjYWxsZWQgZnJvbSBvdXRzaWRlLCBidXQgcmF0aGVyIGFjdHMgYXMgdGhlIHdvcmtob3JzZSBmb3Igc2VuZGluZyBmcmFtZXMuIEdpdmVuIHRoYXQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyAqb3RoZXIqIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoIGl0LiBUaGUgZW50cnkgcG9pbnRzLCB0aGUgZnVuY3Rpb25zIHRoYXQga2ljayB0aGluZ3Mgb2ZmLCBhcmUgcHJvYmFibHkgYGhzcl9mb3J3YXJkX2RvYCwgYGhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCwgYHBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCwgYW5kIGBoc3JfZm9yd2FyZF9za2JgLiBUaG9zZSBmdW5jdGlvbnMgYXJlIHRoZSBmcm9udCBkb29ycywgdGhlIGluaXRpYXRvcnMgb2YgdGhlIHByb2Nlc3MuIFRpbWUgdG8gdmVyaWZ5IHRoYXQgaHlwb3RoZXNpcy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGhzcl9mb3J3YXJkX2RvYCBhbmQgc2VlIHdoYXQgaXQgZG9lcy4gSSYjMzk7bGwgZm9jdXMgbXkgYXR0ZW50aW9uIHRoZXJlIGFuZCBzZWUgd2hhdCBpdCB0ZWxscyBtZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDA6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHNyX2ZvcndhcmRfZG8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaHNyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaHNyL2hzcl9mb3J3YXJkLmM9NDkyPWJvb2wgaHNyX2Ryb3BfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy01NTktICovXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6NTYwOnN0YXRpYyB2b2lkIGhzcl9mb3J3YXJkX2RvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNTYxLXtcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM9Nzc1PXZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzgzLVx0aHNyX3JlZ2lzdGVyX2ZyYW1lX2luKGZyYW1lLm5vZGVfc3JjLCBwb3J0LCBmcmFtZS5zZXF1ZW5jZV9ucik7XG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6Nzg0Olx0aHNyX2ZvcndhcmRfZG8oXHUwMDI2ZnJhbWUpO1xubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc4NS1cdHJjdV9yZWFkX3VubG9jaygpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwMDo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTk4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIG5ldHdvcmsga2VybmVsIGludGVybmFscywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHBhY2tldCBwcm9jZXNzaW5nLgoKKipBbmFseXppbmcgdGhlIFNpZ25pZmljYW5jZSBvZiBhIEdsb2JhbCBWYXJpYWJsZTogYGhzcl9mb3J3YXJkX3NrYmAqKgoKQWxyaWdodCwgc28gYGhzcl9mb3J3YXJkX3NrYmAgaXMgZ2xvYmFsLCBodWg/IEltbWVkaWF0ZWx5LCBteSBtaW5kIHN0YXJ0cyByYWNpbmcuIEEgZ2xvYmFsIHZhcmlhYmxlIGluIHRoaXMgY29udGV4dCBpcyByYXJlbHkgYSBnb29kIHRoaW5nLCB1bmxlc3MgaXRzIHVzZSBpcyAqdmVyeSogY2FyZWZ1bGx5IG1hbmFnZWQuIE15IGluaXRpYWwgcmVhY3Rpb24gaXMgYSBtaXggb2YgaW50cmlndWUgYW5kIGNvbmNlcm4uIAoKYGhzcl9mb3J3YXJkX3NrYmAgc3VnZ2VzdHMgYSBzdHJ1Y3R1cmUsIHByb2JhYmx5IGEgYHNrX2J1ZmZgLCBpcyBiZWluZyB1c2VkIHRvIGZvcndhcmQgcGFja2V0cyBpbiBhbiBIU1IgKEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kpIGNvbnRleHQuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgZ2xvYmFsIGltcGxpZXMgaXTigJlzIHByb2JhYmx5IGFjY2Vzc2libGUgZnJvbSBtdWx0aXBsZSB0aHJlYWRzIG9yIGludGVycnVwdCBjb250ZXh0cywgd2hpY2ggcmFpc2VzIHNldmVyYWwgcmVkIGZsYWdzLiBJcyBpdCBhZGVxdWF0ZWx5IHByb3RlY3RlZD8gQXJlIHRoZXJlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgbHVya2luZz8KCkkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBpdHMgc2NvcGUuIFdoYXQgbW9kdWxlcyBhY2Nlc3MgdGhpcyB2YXJpYWJsZT8gV2hlcmUgaXMgaXQgZGVmaW5lZCBhbmQgaW5pdGlhbGl6ZWQ/IEhvdyBpcyBpdCBtb2RpZmllZD8gSXMgdGhlcmUgYSBzcGlubG9jaywgbXV0ZXgsIG9yIFJDVSBtZWNoYW5pc20gZW1wbG95ZWQgZm9yIHN5bmNocm9uaXphdGlvbj8gQSBnbG9iYWwgYHNrYmAgcG9pbnRlciBzY3JlYW1zIGZvciBjb25jdXJyZW50IGFjY2VzcyBzY3J1dGlueS4KClRoZSB1c2Ugb2YgYSBnbG9iYWwgYHNrYmAgaXMgYWxzbyBhIGJpdCB1bnVzdWFsLiBVc3VhbGx5LCB3ZSYjMzk7ZCBwYXNzIHRoZSBgc2tfYnVmZmAgYXJvdW5kIGZ1bmN0aW9uIGFyZ3VtZW50cy4gUGVyaGFwcyBpdOKAmXMgYSB0ZW1wb3JhcnkgYnVmZmVyIGZvciByZS1lbmNhcHN1bGF0aW9uIG9yIGZyYW1lIGNvbnN0cnVjdGlvbiBpbiB0aGUgSFNSIHBhdGguIEkmIzM5O20gd29uZGVyaW5nIGlmIGl0JiMzOTtzIGJlaW5nIHVzZWQgZm9yIGludGVyLUNQVSBjb21tdW5pY2F0aW9uLCBvciBpZiB0aGUgZnVuY3Rpb24gaXMganVzdCBzaGFyaW5nIGEgYnVmZmVyLgoKSSBuZWVkIHRvIGRpdmUgZGVlcGVyIGludG8gdGhlIGNvZGUgdXNpbmcgdGhpcyB2YXJpYWJsZSwgSSBuZWVkIHRvIGtub3cgZXhhY3RseSBob3cgaXQgaXMgdXNlZC4gSSBhbSBtb3N0IGludGVyZXN0ZWQgaW4gaG93IHRoZSB2YXJpYWJsZSBpcyBzaGFyZWQgYW5kIGFjY2Vzc2VkLCBpdCBhbGwgaGluZ2VzIG9uIGNvcnJlY3Qgc3luY2hyb25pemF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwMDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoc3JfZm9yd2FyZF9za2ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaHNyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaHNyL2hzcl9kZXZpY2UuYz0yMjQ9c3RhdGljIG5ldGRldl90eF90IGhzcl9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9oc3IvaHNyX2RldmljZS5jLTIzNS1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbm5ldC9oc3IvaHNyX2RldmljZS5jOjIzNjpcdFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgbWFzdGVyKTtcbm5ldC9oc3IvaHNyX2RldmljZS5jLTIzNy1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuLS1cbm5ldC9oc3IvaHNyX2RldmljZS5jPTI5Mz1zdGF0aWMgdm9pZCBzZW5kX2hzcl9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsXG4tLVxubmV0L2hzci9oc3JfZGV2aWNlLmMtMzYzLVxubmV0L2hzci9oc3JfZGV2aWNlLmM6MzY0Olx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XG5uZXQvaHNyL2hzcl9kZXZpY2UuYy0zNjUtXHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4tLVxubmV0L2hzci9oc3JfZGV2aWNlLmM9MzY5PXN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxuLS1cbm5ldC9oc3IvaHNyX2RldmljZS5jLTQwNC1cbm5ldC9oc3IvaHNyX2RldmljZS5jOjQwNTpcdGhzcl9mb3J3YXJkX3NrYihza2IsIG1hc3Rlcik7XG5uZXQvaHNyL2hzcl9kZXZpY2UuYy00MDYtXHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4tLVxubmV0L2hzci9oc3JfZm9yd2FyZC5jPTcxNz1zdGF0aWMgaW50IGZpbGxfZnJhbWVfaW5mbyhzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03NzQtLyogTXVzdCBiZSBjYWxsZWQgaG9sZGluZyByY3UgcmVhZCBsb2NrIChiZWNhdXNlIG9mIHRoZSBwb3J0IHBhcmFtZXRlcikgKi9cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo3NzU6dm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc3Ni17XG4tLVxubmV0L2hzci9oc3JfZm9yd2FyZC5oLTE1LVxubmV0L2hzci9oc3JfZm9yd2FyZC5oOjE2OnZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCk7XG5uZXQvaHNyL2hzcl9mb3J3YXJkLmgtMTctc3RydWN0IHNrX2J1ZmYgKnBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXG4tLVxubmV0L2hzci9oc3Jfc2xhdmUuYz0yND1zdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBoc3JfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYilcbi0tXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTgwLVx0XHRzcGluX2xvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xubmV0L2hzci9oc3Jfc2xhdmUuYzo4MTpcdFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTgyLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTgzLVx0fSBlbHNlIHtcbm5ldC9oc3IvaHNyX3NsYXZlLmM6ODQ6XHRcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xubmV0L2hzci9oc3Jfc2xhdmUuYy04NS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDA6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4NDIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqRGl2aW5nIGludG8gdGhlIEhTUiBGb3J3YXJkaW5nIE1lY2hhbmlzbSoqCgpSaWdodCwgc28gYGhzcl9mb3J3YXJkX3NrYmAgaXMgdGhlIHByaW1lIGRpcmVjdGl2ZSwgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHRoZSBwYWNrZXQgZm9yd2FyZGluZyBwcm9jZXNzLiBUaGF0JiMzOTtzIHdoZXJlIGl0IGFsbCBiZWdpbnMuIE5vdywgSSBzZWUgYGhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCBhbmQgYHBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCBhcmUgdXNlZCBieSB0aGUgZm9yd2FyZGluZyBmdW5jdGlvbnMsIGFuZCBJIHN1c3BlY3QgdGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCBhY3R1YWxseSBidWlsZCB0aGUgdGFnZ2VkIGZyYW1lcy4gR2l2ZW4gdGhhdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBhbmQsIHNwZWNpZmljYWxseSwgaG93IHRoZSB0YWdnaW5nIGlzIGtpY2tlZCBvZmYgYW5kIGNvbnRyb2xsZWQuIEkmIzM5O2xsIG5lZWQgdG8gZ28gZGVlcGVyIGludG8gYGhzcl9mb3J3YXJkX2RvYCB0byBmaWd1cmUgb3V0IHRoZSBvcGVyYXRpb25hbCBkZXRhaWxzIGFuZCBob3cgdGhlIGNhbGwtdHJlZSB3b3Jrcy4gSSYjMzk7bGwgc2VlIHdoZXJlIHRob3NlIGZyYW1lIGNyZWF0aW9uIGZ1bmN0aW9ucyBmaXQgaW50byB0aGUgcHV6emxlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBzZWUgKmhvdyogdGhleSYjMzk7cmUgY2FsbGVkIGZyb20gd2l0aGluIGBoc3JfZm9yd2FyZF9kb2AsIGxpa2VseSB0aHJvdWdoIHNvbWUgc29ydCBvZiBmdW5jdGlvbiBwb2ludGVyIG9yIG9wZXJhdGlvbiBzdHJ1Y3R1cmUuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAwOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NyZWF0ZV90YWdnZWRfZnJhbWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaHNyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaHNyL2hzcl9kZXZpY2UuYz02MjE9c3RhdGljIGNvbnN0IHN0cnVjdCBoc3JfcHJvdG9fb3BzIGhzcl9vcHMgPSB7XG5uZXQvaHNyL2hzcl9kZXZpY2UuYy02MjItXHQuc2VuZF9zdl9mcmFtZSA9IHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lLFxubmV0L2hzci9oc3JfZGV2aWNlLmM6NjIzOlx0LmNyZWF0ZV90YWdnZWRfZnJhbWUgPSBoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZSxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTYyNC1cdC5nZXRfdW50YWdnZWRfZnJhbWUgPSBoc3JfZ2V0X3VudGFnZ2VkX2ZyYW1lLFxuLS1cbm5ldC9oc3IvaHNyX2RldmljZS5jPTYzMT1zdGF0aWMgY29uc3Qgc3RydWN0IGhzcl9wcm90b19vcHMgcHJwX29wcyA9IHtcbm5ldC9oc3IvaHNyX2RldmljZS5jLTYzMi1cdC5zZW5kX3N2X2ZyYW1lID0gc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUsXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzo2MzM6XHQuY3JlYXRlX3RhZ2dlZF9mcmFtZSA9IHBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lLFxubmV0L2hzci9oc3JfZGV2aWNlLmMtNjM0LVx0LmdldF91bnRhZ2dlZF9mcmFtZSA9IHBycF9nZXRfdW50YWdnZWRfZnJhbWUsXG4tLVxubmV0L2hzci9oc3JfZm9yd2FyZC5jPTI4OD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmhzcl9maWxsX3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy0zMzAtICovXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6MzMxOnN0cnVjdCBza19idWZmICpoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTMzMi1cdFx0XHRcdFx0c3RydWN0IGhzcl9wb3J0ICpwb3J0KVxuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy0zODUtXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6Mzg2OnN0cnVjdCBza19idWZmICpwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTM4Ny1cdFx0XHRcdFx0c3RydWN0IGhzcl9wb3J0ICpwb3J0KVxuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYz01NjA9c3RhdGljIHZvaWQgaHNyX2ZvcndhcmRfZG8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNjA4LVx0XHQgICAgcG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9TTEFWRV9CKVxubmV0L2hzci9oc3JfZm9yd2FyZC5jOjYwOTpcdFx0XHRza2IgPSBoc3ItXHUwMDNlcHJvdG9fb3BzLVx1MDAzZWNyZWF0ZV90YWdnZWRfZnJhbWUoZnJhbWUsIHBvcnQpO1xubmV0L2hzci9oc3JfZm9yd2FyZC5jLTYxMC1cdFx0ZWxzZVxuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuaD0xNj12b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpO1xubmV0L2hzci9oc3JfZm9yd2FyZC5oOjE3OnN0cnVjdCBza19idWZmICpwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxubmV0L2hzci9oc3JfZm9yd2FyZC5oLTE4LVx0XHRcdFx0XHRzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpO1xubmV0L2hzci9oc3JfZm9yd2FyZC5oOjE5OnN0cnVjdCBza19idWZmICpoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxubmV0L2hzci9oc3JfZm9yd2FyZC5oLTIwLVx0XHRcdFx0XHRzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpO1xuLS1cbm5ldC9oc3IvaHNyX21haW4uaD0xNjQ9c3RydWN0IGhzcl9wcm90b19vcHMge1xuLS1cbm5ldC9oc3IvaHNyX21haW4uaC0xNzItXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpO1xubmV0L2hzci9oc3JfbWFpbi5oOjE3MzpcdHN0cnVjdCBza19idWZmICogKCpjcmVhdGVfdGFnZ2VkX2ZyYW1lKShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxubmV0L2hzci9oc3JfbWFpbi5oLTE3NC1cdFx0XHRcdFx0XHRzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwMDo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA4OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDcxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEhTUiBQYXRjaCBhbmQgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGhhbmRlZCB0aGlzIHBhdGNoIGFuZCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGF0dGFjayBzdXJmYWNlIGFuZCBob3cgdG8gYXBwcm9hY2ggZnV6emluZyBpdC4gTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgc2VlLCBgaHNyX2ZvcndhcmRfc2tiYCBpcyB0aGUgY2VudHJhbCBmdW5jdGlvbiBoZXJlLiBJdCYjMzk7cyB0aGUgcG9pbnQgd2hlcmUgcGFja2V0cyBmcm9tIGJvdGggdGhlIHNsYXZlIGFuZCBtYXN0ZXIgZGV2aWNlcyBjb252ZXJnZS4gYGhzcl9kZXZfeG1pdGAgaXMgdGhlIGBuZG9fc3RhcnRfeG1pdGAgZm9yIHRoZSBtYXN0ZXIsIGFuZCBgaHNyX2hhbmRsZV9mcmFtZWAgaXMgdGhlIGByeF9oYW5kbGVyYCBmb3IgdGhlIHNsYXZlcy4gVGhlc2UgYXJlIGFsbCBsaW5rZWQgdG9nZXRoZXI6IGBoc3JfZm9yd2FyZF9za2JgIGNhbGxzIGBoc3JfZGV2X3htaXRgIGFuZCBgaHNyX2hhbmRsZV9mcmFtZWAgdG8gZm9yd2FyZCBwYWNrZXRzLgoKVGhlIHBhdGNoIGl0c2VsZiB0b3VjaGVzIGBoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZWAsIGBwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZWAsIGFuZCBgaHNyX3htaXRgLCBhbGwgcmVhY2hhYmxlIHRocm91Z2ggdGhlIGNvcmUgb2YgYGhzcl9mb3J3YXJkX3NrYmAuIFRoaXMgaXMgYWxsIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIGNhbiBzZXQgdXAgYW4gSFNSIGRldmljZSBhbmQgc3RhcnQgc2VuZGluZyBwYWNrZXRzIHRvIHRlc3QgdGhpcy4gVGhlIHJlbGV2YW50IGNvbmZpZyBpcyBgQ09ORklHX0hTUmAuIEdvb2QsIGl0JiMzOTtzIGEgdHJpc3RhdGUsIGFuZCB0aGF0JiMzOTtzIHRoZSBvbmx5IG9uZSBvZiBpbnRlcmVzdCwgaXQgc2VlbXMuCgpXYWl0LCBJIG5lZWQgdG8gY2hlY2sgYGhzcl94bWl0YCBtb3JlIGNhcmVmdWxseS4gVGhlcmUmIzM5O3MgYSBuZXcgY2hlY2sgaW5zaWRlIGl0LiBTcGVjaWZpY2FsbHksIGluc2lkZSBgaHNyX3htaXRgLCB0aGVyZSYjMzk7cyBhIG5ldyBjaGVjayB3aGVyZSBpZiBgcG9ydC0mZ3Q7dHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LYCBhbmQgYSBzZXQgb2Ygb3RoZXIgY29uZGl0aW9ucyBhcmUgdHJ1ZSwgdGhlIHBhY2tldCBpcyBkcm9wcGVkIHdpdGggYHNrYl9jb3dgLiBUaGlzIGNvdWxkIGJlIGludGVyZXN0aW5nLCBhbmQgZGVmaW5pdGVseSBzb21ldGhpbmcgSSBzaG91bGQgZm9jdXMgb24uIFRoaXMgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBpbnRlcmxpbmstYm91bmQgU0tCcy4gV2Ugd2FudCB0byB0ZXN0IHRoaXMgY29kZXBhdGguIAoKSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucywgcGFydGljdWxhcmx5IHRoZSB2YXJpb3VzIGNhbGxpbmcgcmVsYXRpb25zaGlwcy4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGBoc3JfZm9yd2FyZF9za2JgIGlzIGV4cG9ydGVkIG9yIGlmIGl0JiMzOTtzIGp1c3QgZ2xvYmFsLgoKSSB3aWxsIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBwYWNrZXRzIGNhbiB0cmlnZ2VyIHRoYXQgY29kZXBhdGggZm9yIHRoZSBgaHNyX3htaXRgIGNoYW5nZXMgYW5kIGNyYWZ0IGludGVyZXN0aW5nIHRlc3QgY2FzZXMgdG8gZXhwbG9pdCBwb3RlbnRpYWwgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwMDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmhzcl9mb3J3YXJkX3NrYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9oc3IvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDA6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzMjUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEhTUiBNb2R1bGUgRW50cnkgUG9pbnRzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIEhTUiBtb2R1bGUgYW5kIGp1c3QgdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiBpdHMgaW50ZXJuYWwgc3RydWN0dXJlLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCBhIGZldyB0aGluZ3MgYXJlIGltbWVkaWF0ZWx5IGNsZWFyIGFib3V0IHNjb3BlOiBgaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWVgIGFuZCBgcHJwX2NyZWF0ZV90YWdnZWRfZnJhbWVgIHNlZW0gdG8gYmUgZ2xvYmFsbHkgYWNjZXNzaWJsZSB3aXRoaW4gdGhlIG1vZHVsZSwgd2hpbGUgdGhlIG90aGVyIGZ1bmN0aW9ucyBtZW50aW9uZWQgYXJlIHNjb3BlZCB3aXRoaW4gdGhlIG1vZHVsZTogYGhzcmAKClRoZSBtb3JlIGludGVyZXN0aW5nIGNhc2UgaW52b2x2ZXMgYGhzcl9kZXZfeG1pdGAgYW5kIGBoc3JfaGFuZGxlX2ZyYW1lYCwgYW5kIHNpbmNlIHRob3NlIGFyZSBzdGF0aWMsIHRoZXkgaGF2ZSB0byBiZSBpbXBvcnRhbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24gYXQgdGhlIGVudHJ5IHBvaW50cyBmb3IgdGhlIEhTUiBkcml2ZXIuIFRoZXkgbG9vayBsaWtlIHByaW1lIGNhbmRpZGF0ZXMgZm9yIGRlZXBlciBpbnZlc3RpZ2F0aW9uLgoKQWgsIHJpZ2h0LCBgaHNyX2Rldl94bWl0YCBpcyB0aGUgYG5kb19zdGFydF94bWl0YCBmdW5jdGlvbiwgdGhlIGxpa2VseSB0cmFuc21pc3Npb24gZW50cnkgcG9pbnQuIEFuZCBgaHNyX2hhbmRsZV9mcmFtZWAgaXMgdGhlIGByeF9oYW5kbGVyYCwgc28gdGhhdCYjMzk7cyB0aGUgcmVjZWl2ZSBwYXRoLiBZZXAsIHRoZXNlIGFyZSBkZWZpbml0ZWx5IGdvb2QgZm9jdXMgc3ltYm9scyBmb3IgbXkgYW5hbHlzaXMuCgpOb3cgSSBzaG91bGQgcHJvYmFibHkgcXVpY2tseSBjaGVjayBpZiBJJiMzOTt2ZSBtaXNzZWQgYW55IG90aGVyIGVudHJ5IHBvaW50cy4gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAwOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hzcl9kZXZfeG1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9oc3IvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9oc3IvaHNyX2RldmljZS5jPTIxNj1zdGF0aWMgbmV0ZGV2X2ZlYXR1cmVzX3QgaHNyX2ZpeF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9oc3IvaHNyX2RldmljZS5jLTIyMy1cbm5ldC9oc3IvaHNyX2RldmljZS5jOjIyNDpzdGF0aWMgbmV0ZGV2X3R4X3QgaHNyX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy0yMjUte1xuLS1cbm5ldC9oc3IvaHNyX2RldmljZS5jPTYwNT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGhzcl9kZXZpY2Vfb3BzID0ge1xuLS1cbm5ldC9oc3IvaHNyX2RldmljZS5jLTYwOC1cdC5uZG9fc3RvcCA9IGhzcl9kZXZfY2xvc2UsXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzo2MDk6XHQubmRvX3N0YXJ0X3htaXQgPSBoc3JfZGV2X3htaXQsXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy02MTAtXHQubmRvX2NoYW5nZV9yeF9mbGFncyA9IGhzcl9jaGFuZ2VfcnhfZmxhZ3MsXG4tLVxubmV0L2hzci9oc3JfZGV2aWNlLmM9NjcxPWJvb2wgaXNfaHNyX21hc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2hzci9oc3JfZGV2aWNlLmMtNjcyLXtcbm5ldC9oc3IvaHNyX2RldmljZS5jOjY3MzpcdHJldHVybiAoZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX3N0YXJ0X3htaXQgPT0gaHNyX2Rldl94bWl0KTtcbm5ldC9oc3IvaHNyX2RldmljZS5jLTY3NC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAwOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTU0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIHRoZSBIU1IgRGV2aWNlIFRyYW5zbWlzc2lvbioqCgpBbHJpZ2h0LCBzbyBgaHNyX2Rldl94bWl0YC4uLiB5ZXAsIHRoYXQmIzM5O3MgaXQuIFRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHRoZSBIU1IgZGV2aWNlIHVzZXMgYXMgaXRzIGBuZG9fc3RhcnRfeG1pdGAuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0IGhhbmRsZXMgaW5kaXZpZHVhbCBmcmFtZXMuIFRvIGRvIHRoYXQsIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IHRoZSBgaHNyX2hhbmRsZV9mcmFtZWAgZnVuY3Rpb24uIEkgd2FudCB0byBzZWUgaG93IHRoZSBkZXZpY2UgcHJvY2Vzc2VzIGFuZCBtYW5hZ2VzIHRoZSBmcmFtZXMuIFRoaXMgd2lsbCByZWFsbHkgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIHRyYW5zbWlzc2lvbiBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDA6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHNyX2hhbmRsZV9mcmFtZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9oc3IvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9oc3IvaHNyX2RldmljZS5jPTcyMD1pbnQgaHNyX2Rldl9maW5hbGl6ZShzdHJ1Y3QgbmV0X2RldmljZSAqaHNyX2Rldiwgc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlWzJdLFxuLS1cbm5ldC9oc3IvaHNyX2RldmljZS5jLTc0Ni1cbm5ldC9oc3IvaHNyX2RldmljZS5jOjc0NzpcdC8qIE1ha2Ugc3VyZSB3ZSByZWNvZ25pemUgZnJhbWVzIGZyb20gb3Vyc2VsdmVzIGluIGhzcl9oYW5kbGVfZnJhbWUoKSAqL1xubmV0L2hzci9oc3JfZGV2aWNlLmMtNzQ4LVx0cmVzID0gaHNyX2NyZWF0ZV9zZWxmX25vZGUoaHNyLCBoc3JfZGV2LVx1MDAzZWRldl9hZGRyLFxuLS1cbm5ldC9oc3IvaHNyX2ZyYW1lcmVnLmM9NjY9Ym9vbCBoc3JfaXNfbm9kZV9pbl9kYihzdHJ1Y3QgbGlzdF9oZWFkICpub2RlX2RiLFxuLS1cbm5ldC9oc3IvaHNyX2ZyYW1lcmVnLmMtNzEtXG5uZXQvaHNyL2hzcl9mcmFtZXJlZy5jOjcyOi8qIEhlbHBlciBmb3IgZGV2aWNlIGluaXQ7IHRoZSBzZWxmX25vZGUgaXMgdXNlZCBpbiBoc3JfaGFuZGxlX2ZyYW1lKCkgdG9cbm5ldC9oc3IvaHNyX2ZyYW1lcmVnLmMtNzMtICogcmVjb2duaXplIGZyYW1lcyBmcm9tIHNlbGYgdGhhdCYjMzk7cyBiZWVuIGxvb3BlZCBvdmVyIHRoZSBIU1IgcmluZy5cbi0tXG5uZXQvaHNyL2hzcl9tYWluLmM9MzE9c3RhdGljIGludCBoc3JfbmV0ZGV2X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGV2ZW50LFxuLS1cbm5ldC9oc3IvaHNyX21haW4uYy05MS1cbm5ldC9oc3IvaHNyX21haW4uYzo5MjpcdFx0LyogTWFrZSBzdXJlIHdlIHJlY29nbml6ZSBmcmFtZXMgZnJvbSBvdXJzZWx2ZXMgaW4gaHNyX2hhbmRsZV9mcmFtZSgpICovXG5uZXQvaHNyL2hzcl9tYWluLmMtOTMtXHRcdHBvcnQgPSBoc3JfcG9ydF9nZXRfaHNyKGhzciwgSFNSX1BUX1NMQVZFX0IpO1xuLS1cbm5ldC9oc3IvaHNyX3NsYXZlLmM9MTk9Ym9vbCBoc3JfaW52YWxpZF9kYW5faW5ncmVzc19mcmFtZShfX2JlMTYgcHJvdG9jb2wpXG4tLVxubmV0L2hzci9oc3Jfc2xhdmUuYy0yMy1cbm5ldC9oc3IvaHNyX3NsYXZlLmM6MjQ6c3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgaHNyX2hhbmRsZV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTI1LXtcbi0tXG5uZXQvaHNyL2hzcl9zbGF2ZS5jPTk0PWJvb2wgaHNyX3BvcnRfZXhpc3RzKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTk1LXtcbm5ldC9oc3IvaHNyX3NsYXZlLmM6OTY6XHRyZXR1cm4gcmN1X2FjY2Vzc19wb2ludGVyKGRldi1cdTAwM2VyeF9oYW5kbGVyKSA9PSBoc3JfaGFuZGxlX2ZyYW1lO1xubmV0L2hzci9oc3Jfc2xhdmUuYy05Ny19XG4tLVxubmV0L2hzci9oc3Jfc2xhdmUuYz0xNDE9c3RhdGljIGludCBoc3JfcG9ydGRldl9zZXR1cChzdHJ1Y3QgaHNyX3ByaXYgKmhzciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTE2OC1cbm5ldC9oc3IvaHNyX3NsYXZlLmM6MTY5Olx0cmVzID0gbmV0ZGV2X3J4X2hhbmRsZXJfcmVnaXN0ZXIoZGV2LCBoc3JfaGFuZGxlX2ZyYW1lLCBwb3J0KTtcbm5ldC9oc3IvaHNyX3NsYXZlLmMtMTcwLVx0aWYgKHJlcylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDA6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxMDYKCQkJCQkJCW91dHB1dDogMTk2CgkJCQkJCQl0aG91Z2h0czogNTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgQW5hbHlzaXM6IEhTUiBTaGFyZWQtTXV0YXRpb24gQnVnIEZpeCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIHllcywgYGhzcl9oYW5kbGVfZnJhbWVgIGlzIHRoZSByZWNlaXZlIGhhbmRsZXIgZm9yIHRoZSBzbGF2ZSBIU1IgZGV2aWNlcy4gVGhhdCYjMzk7cyBhIGtleSBmdW5jdGlvbi4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgZml4LCBteSBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGVzZSBzeW1ib2xzOiBgaHNyX2Rldl94bWl0YCwgYGhzcl9oYW5kbGVfZnJhbWVgLCBgaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWVgLCBgcHJwX2NyZWF0ZV90YWdnZWRfZnJhbWVgLCBhbmQgYGhzcl9mb3J3YXJkX3NrYmAuIFRoZXNlIGZ1bmN0aW9ucyBzZWVtIGNlbnRyYWwgdG8gdGhlIHByb2JsZW0uCgpMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uLiBJdCBsb29rcyBsaWtlIGl0IGp1c3QgcmVxdWlyZXMgYEhTUmAuIEdvb2QuIEkmIzM5O2xsIG1ha2Ugc3VyZSB0byBub3RlIHRoYXQuCgpBaGEhIFRoZXJlJiMzOTtzIGFsc28gYSBtb2RpZmljYXRpb24gdG8gYSBzZWxmdGVzdCBzY3JpcHQgKGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9zaGFyZWRfbXV0YXRpb24uc2hgKS4gVGhhdCYjMzk7cyBub3QgdGhlIHRhcmdldC4gV2hpbGUgaXQmIzM5O3MgZ29vZCB0aGUgc2VsZiB0ZXN0IGlzIGluY2x1ZGVkIGl0IGRvZXMgbm90IG5lZWQgdG8gYmUgZnV6emVkLiBUaGUgcmVhbCBrZXJuZWwgY2hhbmdlcyBhcmUgaW4gYG5ldC9oc3IvaHNyX2ZvcndhcmQuY2AsIGFuZCB0aG9zZSBhcmUgd2hhdCBJJiMzOTttIGludGVyZXN0ZWQgaW4gZnV6emluZy4KCk5vdywgbGV0JiMzOTtzIHRoaW5rIGFib3V0ICp3aHkqIHRoaXMgaXMgZnV6emFibGUuIFRoZSBwYXRjaCBhZGRyZXNzZXMgYSBzaGFyZWQtbXV0YXRpb24gYnVnIGluIEhTUi9QUlAgd2hlcmUgY2xvbmVkIGBza2JgcyB3ZXJlIGJlaW5nIGRpcmVjdGx5IG1vZGlmaWVkIHdpdGhvdXQgcHJvcGVyIGNvcHktb24td3JpdGUgbWVjaGFuaXNtcyAoYHNrYl9jb3dgIG9yIGBza2JfY29weWApLiBUaGlzIHdvdWxkIGNvcnJ1cHQgdGhlIG9yaWdpbmFsIHNoYXJlZCBkYXRhLiBUaGUgZml4IGludm9sdmVzIGFkZGluZyBgc2tiX2Nvdyhza2IsIDApYCBiZWZvcmUgbW9kaWZ5aW5nIHRoZSBjbG9uZWQgYHNrYmAgaW4gZnVuY3Rpb25zIGxpa2UgYGhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCwgYHBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCwgYW5kIGBoc3JfeG1pdGAuIFRoZXNlIGZ1bmN0aW9ucywgY3J1Y2lhbGx5LCBhcmUgcmVhY2hhYmxlIGZyb20gYGhzcl9mb3J3YXJkX3NrYmAsIHdoaWNoIGluIHR1cm4gaXMgcmVhY2hhYmxlIHRocm91Z2ggYGhzcl9kZXZfeG1pdGAgYW5kIGBoc3JfaGFuZGxlX2ZyYW1lYC4gSSBjYW4gZGVmaW5pdGVseSBzZWUgdGhpcyBiZWluZyB0cmlnZ2VyZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gU2V0dGluZyB1cCBhbiBIU1IgZGV2aWNlIGFuZCBzZW5kaW5nIHBhY2tldHMgdGhyb3VnaCBpdCBzZWVtcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIHdheSB0byB0ZXN0IHRoaXMuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZG9jdW1lbnQgbXkgZmluZGluZ3MgY29uY2lzZWx5OgoKKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWUKKiAgICoqRm9jdXNTeW1ib2xzOioqIGBoc3JfZGV2X3htaXRgLCBgaHNyX2hhbmRsZV9mcmFtZWAsIGBoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZWAsIGBwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZWAsIGBoc3JfZm9yd2FyZF9za2JgCiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYEhTUmAKKiAgICoqUmVhc29uaW5nOioqIFRoZSBwYXRjaCBhZGRzIGBza2JfY293YCBiZWZvcmUgbXV0YXRpbmcgY2xvbmVkIHNrYnMgdG8gZml4IGEgc2hhcmVkLW11dGF0aW9uIGJ1ZyBpbiBIU1IvUFJQLiBDb3JlIHBhY2tldCBmb3J3YXJkaW5nIGZ1bmN0aW9ucyBpbiBIU1IgZHJpdmVyIHJlYWNoYWJsZSB2aWEgYGhzcl9kZXZfeG1pdGAgKG1hc3RlciBUWCkgYW5kIGBoc3JfaGFuZGxlX2ZyYW1lYCAoc2xhdmUgUlgpLiBGdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDA6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hTUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hzcl9kZXZfeG1pdCYjMzQ7LAogICAgJiMzNDtoc3JfaGFuZGxlX2ZyYW1lJiMzNDssCiAgICAmIzM0O2hzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lJiMzNDssCiAgICAmIzM0O3BycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lJiMzNDssCiAgICAmIzM0O2hzcl9mb3J3YXJkX3NrYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHNoYXJlZC1tdXRhdGlvbiBidWcgaW4gSFNSL1BSUCBieSBhZGRpbmcgYHNrYl9jb3dgIGJlZm9yZSBtb2RpZnlpbmcgY2xvbmVkIHNrYnMgaW4gYGhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCwgYHBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCwgYW5kIGBoc3JfeG1pdGAuIFRoZXNlIGFyZSBjb3JlIHBhY2tldCBmb3J3YXJkaW5nIGZ1bmN0aW9ucyBpbiB0aGUgSFNSIGRyaXZlciwgcmVhY2hhYmxlIHZpYSBgaHNyX2Rldl94bWl0YCAobWFzdGVyIGRldmljZSBUWCkgYW5kIGBoc3JfaGFuZGxlX2ZyYW1lYCAoc2xhdmUgZGV2aWNlIFJYKS4gVGhlIGNvZGUgaXMgZnVsbHkgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hTUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hzcl9kZXZfeG1pdCYjMzQ7LAogICAgJiMzNDtoc3JfaGFuZGxlX2ZyYW1lJiMzNDssCiAgICAmIzM0O2hzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lJiMzNDssCiAgICAmIzM0O3BycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lJiMzNDssCiAgICAmIzM0O2hzcl9mb3J3YXJkX3NrYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHNoYXJlZC1tdXRhdGlvbiBidWcgaW4gSFNSL1BSUCBieSBhZGRpbmcgYHNrYl9jb3dgIGJlZm9yZSBtb2RpZnlpbmcgY2xvbmVkIHNrYnMgaW4gYGhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCwgYHBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCwgYW5kIGBoc3JfeG1pdGAuIFRoZXNlIGFyZSBjb3JlIHBhY2tldCBmb3J3YXJkaW5nIGZ1bmN0aW9ucyBpbiB0aGUgSFNSIGRyaXZlciwgcmVhY2hhYmxlIHZpYSBgaHNyX2Rldl94bWl0YCAobWFzdGVyIGRldmljZSBUWCkgYW5kIGBoc3JfaGFuZGxlX2ZyYW1lYCAoc2xhdmUgZGV2aWNlIFJYKS4gVGhlIGNvZGUgaXMgZnVsbHkgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwMDo1ODowMC42Njc0NjA5MzhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTk4MjU2Mzc4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIU1JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoc3JfZGV2X3htaXRcIixcbiAgICBcImhzcl9oYW5kbGVfZnJhbWVcIixcbiAgICBcImhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lXCIsXG4gICAgXCJwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZVwiLFxuICAgIFwiaHNyX2ZvcndhcmRfc2tiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBzaGFyZWQtbXV0YXRpb24gYnVnIGluIEhTUi9QUlAgYnkgYWRkaW5nIGBza2JfY293YCBiZWZvcmUgbW9kaWZ5aW5nIGNsb25lZCBza2JzIGluIGBoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZWAsIGBwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZWAsIGFuZCBgaHNyX3htaXRgLiBUaGVzZSBhcmUgY29yZSBwYWNrZXQgZm9yd2FyZGluZyBmdW5jdGlvbnMgaW4gdGhlIEhTUiBkcml2ZXIsIHJlYWNoYWJsZSB2aWEgYGhzcl9kZXZfeG1pdGAgKG1hc3RlciBkZXZpY2UgVFgpIGFuZCBgaHNyX2hhbmRsZV9mcmFtZWAgKHNsYXZlIGRldmljZSBSWCkuIFRoZSBjb2RlIGlzIGZ1bGx5IGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwMDo1ODowMC42Njc0NzEyOThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NjU4MzkwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDI1ODA5NTFhOTY3MjVkY2EwZGY4ZGQyMzM5YmY2ZWZmN2Q2MjdmN2NcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMyAwMDo1Nzo1OSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmMgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcXG5pbmRleCAwNzc0OTgxYTY1YzE2Li45NzRiNTVmMjQ4ODIxIDEwMDY0NFxcbi0tLSBhL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xcbisrKyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xcbkBAIC0zMzYsMTIgKzMzNiwyNCBAQCBzdHJ1Y3Qgc2tfYnVmZiAqaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcXG4gXFx0aW50IG1vdmVsZW47XFxuIFxcbiBcXHRpZiAoZnJhbWUtXFx1MDAzZXNrYl9oc3IpIHtcXG4tXFx0XFx0c3RydWN0IGhzcl9ldGhoZHIgKmhzcl9ldGhoZHIgPVxcbi1cXHRcXHRcXHQoc3RydWN0IGhzcl9ldGhoZHIgKilza2JfbWFjX2hlYWRlcihmcmFtZS1cXHUwMDNlc2tiX2hzcik7XFxuK1xcdFxcdHN0cnVjdCBoc3JfZXRoaGRyICpoc3JfZXRoaGRyO1xcbitcXG4rXFx0XFx0LyogVGhlIG9yaWdpbmFsIHNrYiBkYXRhIG1heSBiZSBzaGFyZWQgd2l0aCBhbm90aGVyIGVncmVzc1xcbitcXHRcXHQgKiBjbG9uZS4gTWFrZSB0aGUgY2xvbmUgZGF0YSBwcml2YXRlIGJlZm9yZSB1cGRhdGluZyB0aGVcXG4rXFx0XFx0ICogcGF0aCBpZCBzbyB0aGUgdXBkYXRlIGNhbm5vdCBjb3JydXB0IHRoZSBvdGhlciBjb3B5LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0c2tiID0gc2tiX2Nsb25lKGZyYW1lLVxcdTAwM2Vza2JfaHNyLCBHRlBfQVRPTUlDKTtcXG4rXFx0XFx0aWYgKCFza2IpXFxuK1xcdFxcdFxcdHJldHVybiBOVUxMO1xcbitcXHRcXHRpZiAoc2tiX2Nvdyhza2IsIDApKSB7XFxuK1xcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbitcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0Lyogc2V0IHRoZSBsYW5lIGlkIHByb3Blcmx5ICovXFxuK1xcdFxcdGhzcl9ldGhoZHIgPSAoc3RydWN0IGhzcl9ldGhoZHIgKilza2JfbWFjX2hlYWRlcihza2IpO1xcbiBcXHRcXHRoc3Jfc2V0X3BhdGhfaWQoZnJhbWUsIGhzcl9ldGhoZHIsIHBvcnQpO1xcbi1cXHRcXHRyZXR1cm4gc2tiX2Nsb25lKGZyYW1lLVxcdTAwM2Vza2JfaHNyLCBHRlBfQVRPTUlDKTtcXG4rXFx0XFx0cmV0dXJuIHNrYjtcXG4gXFx0fSBlbHNlIGlmIChwb3J0LVxcdTAwM2VkZXYtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9IV19IU1JfVEFHX0lOUykge1xcbiBcXHRcXHRyZXR1cm4gc2tiX2Nsb25lKGZyYW1lLVxcdTAwM2Vza2Jfc3RkLCBHRlBfQVRPTUlDKTtcXG4gXFx0fVxcbkBAIC0zNzcsMTUgKzM4OSwyOCBAQCBzdHJ1Y3Qgc2tfYnVmZiAqcHJwX2NyZWF0ZV90YWdnZWRfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gXFxuIFxcdGlmIChmcmFtZS1cXHUwMDNlc2tiX3BycCkge1xcbi1cXHRcXHRzdHJ1Y3QgcHJwX3JjdCAqdHJhaWxlciA9IHNrYl9nZXRfUFJQX3JjdChmcmFtZS1cXHUwMDNlc2tiX3BycCk7XFxuK1xcdFxcdHN0cnVjdCBwcnBfcmN0ICp0cmFpbGVyO1xcbiBcXG4rXFx0XFx0LyogU2FtZSBzaGFyaW5nIGhhemFyZCBhcyBhYm92ZTogcHJpdmF0aXplIHRoZSBjbG9uZSBkYXRhXFxuK1xcdFxcdCAqIGJlZm9yZSB1cGRhdGluZyB0aGUgTEFOIGlkLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0c2tiID0gc2tiX2Nsb25lKGZyYW1lLVxcdTAwM2Vza2JfcHJwLCBHRlBfQVRPTUlDKTtcXG4rXFx0XFx0aWYgKCFza2IpXFxuK1xcdFxcdFxcdHJldHVybiBOVUxMO1xcbitcXHRcXHRpZiAoc2tiX2Nvdyhza2IsIDApKSB7XFxuK1xcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbitcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0dHJhaWxlciA9IHNrYl9nZXRfUFJQX3JjdChza2IpO1xcbiBcXHRcXHRpZiAodHJhaWxlcikge1xcbiBcXHRcXHRcXHRwcnBfc2V0X2xhbl9pZCh0cmFpbGVyLCBwb3J0KTtcXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0V0FSTl9PTkNFKCF0cmFpbGVyLCBcXFwiZXJyb3JlZCBQUlAgc2tiXFxcIik7XFxuK1xcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiBcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFx0XFx0fVxcbi1cXHRcXHRyZXR1cm4gc2tiX2Nsb25lKGZyYW1lLVxcdTAwM2Vza2JfcHJwLCBHRlBfQVRPTUlDKTtcXG4rXFx0XFx0cmV0dXJuIHNrYjtcXG4gXFx0fSBlbHNlIGlmIChwb3J0LVxcdTAwM2VkZXYtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9IV19IU1JfVEFHX0lOUykge1xcbiBcXHRcXHRyZXR1cm4gc2tiX2Nsb25lKGZyYW1lLVxcdTAwM2Vza2Jfc3RkLCBHRlBfQVRPTUlDKTtcXG4gXFx0fVxcbkBAIC00MjAsNiArNDQ1LDIyIEBAIHN0YXRpYyB2b2lkIGhzcl9kZWxpdmVyX21hc3RlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBzdGF0aWMgaW50IGhzcl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCxcXG4gXFx0XFx0ICAgIHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXFxuIHtcXG4rXFx0LyogQW4gaW50ZXJsaW5rLWJvdW5kIHNrYiBmcm9tIGdldF91bnRhZ2dlZF9mcmFtZSgpIGNhbiBzdGlsbCBhbGlhc1xcbitcXHQgKiBhbm90aGVyIGxpdmUgY29uc3VtZXI6IGZvciBtYXN0ZXItb3JpZ2luYXRlZCBmcmFtZXMgdGhlIGNsb25lXFxuK1xcdCAqIHNoYXJlcyB0aGUgb3JpZ2luYWwgVFggc2tiICh3aGljaCB0YXBzIG9yIHRoZSBUWCBwYXRoIG1heSBzdGlsbFxcbitcXHQgKiBob2xkKTsgZm9yIHJpbmcgZnJhbWVzIHRoZSBtYXN0ZXIgYWxzbyBjb25zdW1lcyB0aGVtIHdoZW4gdGhleVxcbitcXHQgKiBhcmUgZGVzdGluZWQgdG8gdGhlIGxvY2FsIG5vZGUgd2l0aG91dCBiZWluZyBleGNsdXNpdmUgdG8gaXQuXFxuK1xcdCAqIFByaXZhdGl6ZSBiZWZvcmUgYW55IGFkZHJlc3MgbXV0YXRpb24uXFxuK1xcdCAqL1xcbitcXHRpZiAocG9ydC1cXHUwMDNldHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAoZnJhbWUtXFx1MDAzZXBvcnRfcmN2LVxcdTAwM2V0eXBlID09IEhTUl9QVF9NQVNURVIgfHxcXG4rXFx0ICAgICAoZnJhbWUtXFx1MDAzZWlzX2xvY2FsX2Rlc3QgXFx1MDAyNlxcdTAwMjYgIWZyYW1lLVxcdTAwM2Vpc19sb2NhbF9leGNsdXNpdmUpKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgc2tiX2Nvdyhza2IsIDApKSB7XFxuK1xcdFxcdGZyYW1lLVxcdTAwM2Vwb3J0X3Jjdi1cXHUwMDNlZGV2LVxcdTAwM2VzdGF0cy5yeF9kcm9wcGVkKys7XFxuK1xcdFxcdGtmcmVlX3NrYihza2IpO1xcbitcXHRcXHRyZXR1cm4gTkVUX1hNSVRfRFJPUDtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKGZyYW1lLVxcdTAwM2Vwb3J0X3Jjdi1cXHUwMDNldHlwZSA9PSBIU1JfUFRfTUFTVEVSKSB7XFxuIFxcdFxcdGhzcl9hZGRyX3N1YnN0X2Rlc3QoZnJhbWUtXFx1MDAzZW5vZGVfc3JjLCBza2IsIHBvcnQpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGVcXG5pbmRleCAzMWZiOTMyNmNmNTMzLi44N2ZlMzQ5NTFiOGIwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXFxuQEAgLTUsNiArNSw3IEBAIHRvcF9zcmNkaXIgPSAuLi8uLi8uLi8uLi8uLlxcbiBURVNUX1BST0dTIDo9IFxcXFxcXG4gXFx0aHNyX3Bpbmcuc2ggXFxcXFxcbiBcXHRoc3JfcmVkYm94LnNoIFxcXFxcXG4rXFx0aHNyX3NoYXJlZF9tdXRhdGlvbi5zaCBcXFxcXFxuIFxcdGxpbmtfZmF1bHRzLnNoIFxcXFxcXG4gXFx0cHJwX3Bpbmcuc2ggXFxcXFxcbiAjIGVuZCBvZiBURVNUX1BST0dTXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX3NoYXJlZF9tdXRhdGlvbi5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX3NoYXJlZF9tdXRhdGlvbi5zaFxcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMDVlN2U4MDNkMjg2N1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9zaGFyZWRfbXV0YXRpb24uc2hcXG5AQCAtMCwwICsxLDIyMyBAQFxcbisjIS9iaW4vYmFzaFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNcXG4rIyBWZXJpZnkgdGhhdCBwZXItZWdyZXNzIG11dGF0aW9ucyBvZiBzaGFyZWQgc2tiIGRhdGEgYXJlIHByaXZhdGU6XFxuKyNcXG4rIyBGMiAocGF0aC9MQU4gSUQpOiBvbiBhbiBhZmZlY3RlZCBrZXJuZWwgdGhlIHNlY29uZCBzbGF2ZSdzIExBTi1JRCB3cml0ZVxcbisjIGxhbmRzIGluIHRoZSBmaXJzdCBzbGF2ZSdzIHN0aWxsLXF1ZXVlZCBjbG9uZTsgd2l0aCBhIG5ldGVtIGRlbGF5IG9uXFxuKyMgc2xhdmUgQSwgaW5qZWN0ZWQgZnJhbWVzIGxlYXZlIEEgY2FycnlpbmcgQidzIExBTiBJRC5cXG4rI1xcbisjIEYxIChSZWRCb3ggc291cmNlIE1BQyk6IG9uIGFuIGFmZmVjdGVkIGtlcm5lbCBhbiBIU1ItdGFnZ2VkIG11bHRpY2FzdFxcbisjIGZyYW1lIHJlY2VpdmVkIG9uIGEgUmVkQm94IHNsYXZlIGlzIGNsb25lZCBmb3IgbWFzdGVyIGFuZCBpbnRlcmxpbmssXFxuKyMgYW5kIHRoZSBpbnRlcmxpbmsncyBSZWRCb3gtTUFDIHJld3JpdGUgbGFuZHMgaW4gdGhlIG1hc3RlciBjbG9uZSdzXFxuKyMgYnVmZmVyLCBzbyB0aGUgbG9jYWwgc3RhY2sgcmVjZWl2ZXMgdGhlIFJlZEJveCBNQUMgaW5zdGVhZCBvZiB0aGVcXG4rIyBvcmlnaW5hdGluZyBub2RlJ3MgTUFDLlxcbitcXG4raXB2Nj1mYWxzZVxcbitcXG4rc291cmNlIC4vaHNyX2NvbW1vbi5zaFxcbitcXG4rRFVSPTVcXG4rXFxuK3JlcXVpcmUoKVxcbit7XFxuK1xcdGNvbW1hbmQgLXYgXFxcIiQxXFxcIiBcXHUwMDNlL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjEgXFx1MDAyNlxcdTAwMjYgcmV0dXJuIDBcXG4rXFx0ZWNobyBcXFwiU0tJUDogJDEgbm90IGF2YWlsYWJsZVxcXCJcXG4rXFx0ZXhpdCAka3NmdF9za2lwXFxuK31cXG4rXFxuK3JlcXVpcmUgaXBcXG4rcmVxdWlyZSB0Y1xcbityZXF1aXJlIHB5dGhvbjNcXG4rXFxuK3RyYXAgY2xlYW51cF9hbGxfbnMgRVhJVFxcbitcXG4rIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEYyOiBMQU4tSUQgaXNvbGF0aW9uXFxuKyMgUFJQIERBTlAgKHByb3RvIDEpLCBBRl9QQUNLRVQgcHJlLXRhZ2dlZCBpbmplY3Rpb24sIG5ldGVtIG9uIHNsYXZlIEEuXFxuK3J1bl9mMigpXFxuK3tcXG4rXFx0c2V0dXBfbnMgbnMgMlxcdTAwM2UvZGV2L251bGwgfHwgcmV0dXJuICRrc2Z0X3NraXBcXG4rXFx0bnN4KCkgeyBpcCBuZXRucyBleGVjIFxcXCIkbnNcXFwiIFxcXCIkQFxcXCI7IH1cXG4rXFxuK1xcdCMgUHJvYmUgc2NoX25ldGVtIGluc2lkZSB0aGUgZGlzcG9zYWJsZSBuYW1lc3BhY2Ugb25seS5cXG4rXFx0aWYgISBuc3ggdGMgcWRpc2MgYWRkIGRldiBsbyByb290IG5ldGVtIGRlbGF5IDFtcyAyXFx1MDAzZS9kZXYvbnVsbDsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJTS0lQOiBzY2hfbmV0ZW0gbm90IGF2YWlsYWJsZVxcXCJcXG4rXFx0XFx0cmV0dXJuICRrc2Z0X3NraXBcXG4rXFx0ZmlcXG4rXFx0bnN4IHRjIHFkaXNjIGRlbCBkZXYgbG8gcm9vdCAyXFx1MDAzZS9kZXYvbnVsbFxcbitcXG4rXFx0IyBDYXBhYmlsaXR5IHByb2JlcyBlbmQgaGVyZTsgc2V0dXAgb3IgcnVudGltZSBmYWlsdXJlIGJlbG93IGlzIEZBSUwuXFxuK1xcdG5zeCBpcCBsaW5rIGFkZCB2QSB0eXBlIHZldGggcGVlciBuYW1lIHZBcCB8fFxcbitcXHRcXHR7IGVjaG8gXFxcIkZBSUw6IHZldGggQVxcXCI7IHJldHVybiAxOyB9XFxuK1xcdG5zeCBpcCBsaW5rIGFkZCB2QiB0eXBlIHZldGggcGVlciBuYW1lIHZCcCB8fFxcbitcXHRcXHR7IGVjaG8gXFxcIkZBSUw6IHZldGggQlxcXCI7IHJldHVybiAxOyB9XFxuK1xcdGZvciBpIGluIHZBIHZCIHZBcCB2QnA7IGRvXFxuK1xcdFxcdG5zeCBpcCBsaW5rIHNldCBcXFwiJGlcXFwiIHVwIHx8IHsgZWNobyBcXFwiRkFJTDogJGkgdXBcXFwiOyByZXR1cm4gMTsgfVxcbitcXHRkb25lXFxuK1xcdGlmICEgbnN4IGlwIGxpbmsgYWRkIG5hbWUgcHJwMCB0eXBlIGhzciBzbGF2ZTEgdkEgc2xhdmUyIHZCIFxcXFxcXG4rXFx0XFx0c3VwZXJ2aXNpb24gNDUgcHJvdG8gMSAyXFx1MDAzZS9kZXYvbnVsbDsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJTS0lQOiBIU1IvUFJQIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBrZXJuZWxcXFwiXFxuK1xcdFxcdHJldHVybiAka3NmdF9za2lwXFxuK1xcdGZpXFxuK1xcdG5zeCBpcCBsaW5rIHNldCBwcnAwIHVwIHx8IHsgZWNobyBcXFwiRkFJTDogcHJwMCB1cFxcXCI7IHJldHVybiAxOyB9XFxuK1xcdG5zeCB0YyBxZGlzYyBhZGQgZGV2IHZBIHJvb3QgbmV0ZW0gZGVsYXkgMjAwbXMgfHxcXG4rXFx0XFx0eyBlY2hvIFxcXCJGQUlMOiBuZXRlbVxcXCI7IHJldHVybiAxOyB9XFxuK1xcbitcXHRuc3ggcHl0aG9uMyAvZGV2L3N0ZGluIFxcXCIkRFVSXFxcIiBcXHUwMDNjXFx1MDAzYydQWUYyJ1xcbitpbXBvcnQgc29ja2V0LCBzdHJ1Y3QsIHNlbGVjdCwgc3lzLCB0aW1lXFxuK1xcbitkdXIgPSBpbnQoc3lzLmFyZ3ZbMV0pXFxuK2RlZiBsYW5pZChwa3QpOlxcbisgICAgaWYgbGVuKHBrdCkgXFx1MDAzYyAyMCBvciBwa3RbLTI6XSAhPSBiXFxcIlxcXFx4ODhcXFxceGZiXFxcIjpcXG4rICAgICAgICByZXR1cm4gTm9uZVxcbisgICAgcmV0dXJuIChwa3RbLTRdIFxcdTAwM2VcXHUwMDNlIDQpIFxcdTAwMjYgMHhGXFxuK1xcbitTUkMgPSBieXRlcy5mcm9taGV4KG9wZW4oXFxcIi9zeXMvY2xhc3MvbmV0L3BycDAvYWRkcmVzc1xcXCIpLnJlYWQoKS5yZXBsYWNlKFxcXCI6XFxcIiwgXFxcIlxcXCIpKVxcbitEU1QgPSBieXRlcy5mcm9taGV4KFxcXCIwMmFhYmJjY2RkMDFcXFwiKVxcbitQQVkgPSBieXRlcyhyYW5nZSg0NikpXFxuK3JjdDAgPSBzdHJ1Y3QucGFjayhcXFwiXFx1MDAzZUhcXFwiLCAwKSArIHN0cnVjdC5wYWNrKFxcXCJcXHUwMDNlSFxcXCIsIDUyIFxcdTAwMjYgMHgwRkZGKSArIGJcXFwiXFxcXHg4OFxcXFx4ZmJcXFwiXFxuK2ZyYW1lID0gRFNUICsgU1JDICsgYlxcXCJcXFxceDA4XFxcXHgwMFxcXCIgKyBQQVkgKyByY3QwXFxuK1xcbit0eCA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1BBQ0tFVCwgc29ja2V0LlNPQ0tfUkFXKTsgdHguYmluZCgoXFxcInBycDBcXFwiLCAwKSlcXG4rc0EgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9QQUNLRVQsIHNvY2tldC5TT0NLX1JBVyxcXG4rICAgICAgICBzb2NrZXQubnRvaHMoMHgwMDAzKSlcXG4rc0EuYmluZCgoXFxcInZBcFxcXCIsIDApKVxcbitzQiA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1BBQ0tFVCwgc29ja2V0LlNPQ0tfUkFXLFxcbisgICAgICAgIHNvY2tldC5udG9ocygweDAwMDMpKVxcbitzQi5iaW5kKChcXFwidkJwXFxcIiwgMCkpXFxuK3NBLnNldGJsb2NraW5nKEZhbHNlKTsgc0Iuc2V0YmxvY2tpbmcoRmFsc2UpXFxuK2ZvciBfIGluIHJhbmdlKDIwMCk6XFxuKyAgICB0eC5zZW5kKGZyYW1lKTsgdGltZS5zbGVlcCgwLjAwMSlcXG4rXFxuK2EsIGIgPSBbXSwgW11cXG4rZW5kID0gdGltZS50aW1lKCkgKyBkdXJcXG4rd2hpbGUgdGltZS50aW1lKCkgXFx1MDAzYyBlbmQ6XFxuKyAgICByLCBfLCBfID0gc2VsZWN0LnNlbGVjdChbc0EsIHNCXSwgW10sIFtdLCAwLjMpXFxuKyAgICBmb3IgcyBpbiByOlxcbisgICAgICAgIHBrdCA9IHMucmVjdig2NTUzNSlcXG4rICAgICAgICBpZiAocGt0Wzo2XSAhPSBEU1Qgb3IgcGt0WzY6MTJdICE9IFNSQyBvciBwa3RbMTI6MTRdICE9IGJcXFwiXFxcXHgwOFxcXFx4MDBcXFwiXFxuKyAgICAgICAgICAgICAgICBvciBwa3RbMTQ6MTQgKyBsZW4oUEFZKV0gIT0gUEFZKTpcXG4rICAgICAgICAgICAgY29udGludWVcXG4rICAgICAgICBsaWQgPSBsYW5pZChwa3QpXFxuKyAgICAgICAgaWYgbGlkIGlzIG5vdCBOb25lOlxcbisgICAgICAgICAgICAoYSBpZiBzIGlzIHNBIGVsc2UgYikuYXBwZW5kKGxpZClcXG4rXFxuK3ByaW50KFxcXCJBLXNpZGUgY291bnQ9JWQgbGFuIGlkcz0lc1xcXCIgJSAobGVuKGEpLCBzb3J0ZWQoc2V0KGEpKSkpXFxuK3ByaW50KFxcXCJCLXNpZGUgY291bnQ9JWQgbGFuIGlkcz0lc1xcXCIgJSAobGVuKGIpLCBzb3J0ZWQoc2V0KGIpKSkpXFxuK2lmIGxlbihhKSBcXHUwMDNjIDE1MCBvciBsZW4oYikgXFx1MDAzYyAxNTA6XFxuKyAgICBwcmludChcXFwiRkFJTDogdG9vIGZldyBpbmplY3RlZCBmcmFtZXMgY2FwdHVyZWQgKEE9JWQgQj0lZCwgc2VudCAyMDApXFxcIlxcbisgICAgICAgICAgJSAobGVuKGEpLCBsZW4oYikpKVxcbisgICAgc3lzLmV4aXQoMSlcXG4rYmFkX2EgPSBbeCBmb3IgeCBpbiBhIGlmICh4IFxcdTAwMjYgMSkgIT0gMF1cXG4rYmFkX2IgPSBbeCBmb3IgeCBpbiBiIGlmICh4IFxcdTAwMjYgMSkgIT0gMV1cXG4raWYgYmFkX2Egb3IgYmFkX2I6XFxuKyAgICBwcmludChcXFwiRkFJTDogc2hhcmVkLW11dGF0aW9uIGNvcnJ1cHRpb24gLSBBOiAlZC8lZCB3cm9uZy1sYW4sXFxcIlxcbisgICAgICAgICAgXFxcIiBCOiAlZC8lZCB3cm9uZy1sYW5cXFwiXFxuKyAgICAgICAgICAlIChsZW4oYmFkX2EpLCBsZW4oYSksIGxlbihiYWRfYiksIGxlbihiKSkpXFxuKyAgICBzeXMuZXhpdCgxKVxcbitwcmludChcXFwiUEFTUzogcGVyLWVncmVzcyBMQU4gSURzIGlzb2xhdGVkIChBIGFsbCBiaXQwPTAsIEIgYWxsIGJpdDA9MSlcXFwiKVxcbitzeXMuZXhpdCgwKVxcbitQWUYyXFxuK31cXG4rXFxuKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEYxOiBSZWRCb3ggc291cmNlLU1BQyBwcml2YWN5XFxuKyMgSFNSIFJlZEJveCAocHJvdG8gMCksIHRhZ2dlZCBtdWx0aWNhc3QgZnJvbSBhIHNsYXZlOiBtYXN0ZXIgbXVzdCBrZWVwXFxuKyMgdGhlIG5vZGUgTUFDLCBpbnRlcmxpbmsgbXVzdCBjYXJyeSB0aGUgUmVkQm94IE1BQy5cXG4rcnVuX2YxKClcXG4re1xcbitcXHRzZXR1cF9ucyBucyAyXFx1MDAzZS9kZXYvbnVsbCB8fCByZXR1cm4gJGtzZnRfc2tpcFxcbitcXHRuc3goKSB7IGlwIG5ldG5zIGV4ZWMgXFxcIiRuc1xcXCIgXFxcIiRAXFxcIjsgfVxcbitcXG4rXFx0bnN4IGlwIGxpbmsgYWRkIHZBIHR5cGUgdmV0aCBwZWVyIG5hbWUgdkFwIHx8XFxuK1xcdFxcdHsgZWNobyBcXFwiRkFJTDogdmV0aCBBXFxcIjsgcmV0dXJuIDE7IH1cXG4rXFx0bnN4IGlwIGxpbmsgYWRkIHZCIHR5cGUgdmV0aCBwZWVyIG5hbWUgdkJwIHx8XFxuK1xcdFxcdHsgZWNobyBcXFwiRkFJTDogdmV0aCBCXFxcIjsgcmV0dXJuIDE7IH1cXG4rXFx0bnN4IGlwIGxpbmsgYWRkIHZJIHR5cGUgdmV0aCBwZWVyIG5hbWUgdklwIHx8XFxuK1xcdFxcdHsgZWNobyBcXFwiRkFJTDogdmV0aCBJXFxcIjsgcmV0dXJuIDE7IH1cXG4rXFx0Zm9yIGkgaW4gdkEgdkIgdkkgdkFwIHZCcCB2SXA7IGRvXFxuK1xcdFxcdG5zeCBpcCBsaW5rIHNldCBcXFwiJGlcXFwiIHVwIHx8IHsgZWNobyBcXFwiRkFJTDogJGkgdXBcXFwiOyByZXR1cm4gMTsgfVxcbitcXHRkb25lXFxuK1xcdGlmICEgbnN4IGlwIGxpbmsgYWRkIG5hbWUgaHNyMCB0eXBlIGhzciBzbGF2ZTEgdkEgc2xhdmUyIHZCIFxcXFxcXG4rXFx0XFx0aW50ZXJsaW5rIHZJIHN1cGVydmlzaW9uIDQ1IHByb3RvIDAgMlxcdTAwM2UvZGV2L251bGw7IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiU0tJUDogSFNSIFJlZEJveCBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMga2VybmVsXFxcIlxcbitcXHRcXHRyZXR1cm4gJGtzZnRfc2tpcFxcbitcXHRmaVxcbitcXHRuc3ggaXAgbGluayBzZXQgaHNyMCB1cCB8fCB7IGVjaG8gXFxcIkZBSUw6IGhzcjAgdXBcXFwiOyByZXR1cm4gMTsgfVxcbitcXG4rXFx0bnN4IHB5dGhvbjMgL2Rldi9zdGRpbiBcXHUwMDNjXFx1MDAzYydQWUYxJ1xcbitpbXBvcnQgc29ja2V0LCBzZWxlY3QsIHN5cywgdGltZVxcbitcXG4rTk9ERSAgPSBieXRlcy5mcm9taGV4KFxcXCIwMjExMjIzMzQ0NTVcXFwiKVxcbitNQ0FTVCA9IGJ5dGVzLmZyb21oZXgoXFxcIjAxMDA1ZTAwMDAwMVxcXCIpXFxuK1JCICAgID0gYnl0ZXMuZnJvbWhleChvcGVuKFxcXCIvc3lzL2NsYXNzL25ldC92SS9hZGRyZXNzXFxcIikucmVhZCgpLnJlcGxhY2UoXFxcIjpcXFwiLCBcXFwiXFxcIikpXFxuK1BBWSAgID0gYnl0ZXMocmFuZ2UoNDYpKVxcbitcXG4rZGVmIGZyYW1lKHNlcSk6XFxuKyAgICB0YWcgPSAoKCgxIFxcdTAwM2NcXHUwMDNjIDEyKSB8IGxlbihQQVkpKS50b19ieXRlcygyLCBcXFwiYmlnXFxcIilcXG4rICAgICAgICAgICArIHNlcS50b19ieXRlcygyLCBcXFwiYmlnXFxcIikgKyBiXFxcIlxcXFx4MDhcXFxceDAwXFxcIilcXG4rICAgIHJldHVybiBNQ0FTVCArIE5PREUgKyBiXFxcIlxcXFx4ODlcXFxceDJmXFxcIiArIHRhZyArIFBBWVxcbitcXG4rdHggPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9QQUNLRVQsIHNvY2tldC5TT0NLX1JBVyk7IHR4LmJpbmQoKFxcXCJ2QXBcXFwiLCAwKSlcXG4rc20gPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9QQUNLRVQsIHNvY2tldC5TT0NLX1JBVyxcXG4rICAgICAgICBzb2NrZXQubnRvaHMoMHgwMDAzKSlcXG4rc20uYmluZCgoXFxcImhzcjBcXFwiLCAwKSlcXG4rc2kgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9QQUNLRVQsIHNvY2tldC5TT0NLX1JBVyxcXG4rICAgICAgICBzb2NrZXQubnRvaHMoMHgwMDAzKSlcXG4rc2kuYmluZCgoXFxcInZJcFxcXCIsIDApKVxcbitzbS5zZXRibG9ja2luZyhGYWxzZSk7IHNpLnNldGJsb2NraW5nKEZhbHNlKVxcbitcXG4rZm9yIGkgaW4gcmFuZ2UoMyk6XFxuKyAgICB0eC5zZW5kKGZyYW1lKGkgKyAxKSk7IHRpbWUuc2xlZXAoMC4wNSlcXG4rXFxuK21fc3JjID0gaV9zcmMgPSBOb25lXFxuK2VuZCA9IHRpbWUudGltZSgpICsgNFxcbit3aGlsZSB0aW1lLnRpbWUoKSBcXHUwMDNjIGVuZCBhbmQgKG1fc3JjIGlzIE5vbmUgb3IgaV9zcmMgaXMgTm9uZSk6XFxuKyAgICByLCBfLCBfID0gc2VsZWN0LnNlbGVjdChbc20sIHNpXSwgW10sIFtdLCAwLjMpXFxuKyAgICBmb3IgcyBpbiByOlxcbisgICAgICAgIHBrdCA9IHMucmVjdig2NTUzNSlcXG4rICAgICAgICAjIGV4YWN0IGZsb3c6IGRzdCwgcG9zdC1zdHJpcCBFdGhlclR5cGUsIGV4YWN0IHBheWxvYWQsIG1pbiBsZW5ndGg7XFxuKyAgICAgICAgIyBoX3NvdXJjZSBpcyB0aGUgYXNzZXJ0ZWQgdmFsdWUgYW5kIG11c3QgTk9UIGJlIGZpbHRlcmVkIG9uXFxuKyAgICAgICAgaWYgKGxlbihwa3QpIFxcdTAwM2MgNjAgb3IgcGt0Wzo2XSAhPSBNQ0FTVCBvciBwa3RbMTI6MTRdICE9IGJcXFwiXFxcXHgwOFxcXFx4MDBcXFwiXFxuKyAgICAgICAgICAgICAgICBvciBwa3RbMTQ6MTQgKyBsZW4oUEFZKV0gIT0gUEFZKTpcXG4rICAgICAgICAgICAgY29udGludWVcXG4rICAgICAgICBpZiBzIGlzIHNtIGFuZCBtX3NyYyBpcyBOb25lOlxcbisgICAgICAgICAgICBtX3NyYyA9IHBrdFs2OjEyXVxcbisgICAgICAgIGVsaWYgcyBpcyBzaSBhbmQgaV9zcmMgaXMgTm9uZTpcXG4rICAgICAgICAgICAgaV9zcmMgPSBwa3RbNjoxMl1cXG4rXFxuK3ByaW50KFxcXCJtYXN0ZXIgaF9zb3VyY2UgICAgPVxcXCIsIG1fc3JjLmhleCgpIGlmIG1fc3JjIGVsc2UgTm9uZSlcXG4rcHJpbnQoXFxcIm5vZGUgTUFDICAgICAgICAgICA9XFxcIiwgTk9ERS5oZXgoKSlcXG4rcHJpbnQoXFxcImludGVybGluayBoX3NvdXJjZSA9XFxcIiwgaV9zcmMuaGV4KCkgaWYgaV9zcmMgZWxzZSBOb25lKVxcbitwcmludChcXFwicmVkYm94IE1BQyAgICAgICAgID1cXFwiLCBSQi5oZXgoKSlcXG4raWYgaV9zcmMgIT0gUkI6XFxuKyAgICBwcmludChcXFwiRkFJTDogaW50ZXJsaW5rIGRpZCBub3QgY2FycnkgdGhlIFJlZEJveCBNQUNcXFwiKVxcbisgICAgc3lzLmV4aXQoMSlcXG4raWYgbV9zcmMgIT0gTk9ERTpcXG4rICAgIHByaW50KFxcXCJGQUlMOiBtYXN0ZXIgcmVjZWl2ZWQgJXMgaW5zdGVhZCBvZiB0aGUgbm9kZSBNQUMgXFxcIlxcbisgICAgICAgICAgXFxcIihzaGFyZWQtbXV0YXRpb24gY29ycnVwdGlvbilcXFwiXFxuKyAgICAgICAgICAlIChtX3NyYy5oZXgoKSBpZiBtX3NyYyBlbHNlIFxcXCJub3RoaW5nXFxcIikpXFxuKyAgICBzeXMuZXhpdCgxKVxcbitwcmludChcXFwiUEFTUzogbWFzdGVyIGtlcHQgbm9kZSBNQUMsIGludGVybGluayBrZXB0IFJlZEJveCBNQUNcXFwiKVxcbitzeXMuZXhpdCgwKVxcbitQWUYxXFxuK31cXG4rXFxuK3JjPTBcXG4rXFxuK3J1bl9mMlxcbityZXQ9JD9cXG4rWyBcXFwiJHJldFxcXCIgLWVxIFxcXCIka3NmdF9za2lwXFxcIiBdIFxcdTAwMjZcXHUwMDI2IGV4aXQgXFxcIiRrc2Z0X3NraXBcXFwiXFxuK1sgXFxcIiRyZXRcXFwiIC1lcSAwIF0gfHwgcmM9MVxcbitcXG4rcnVuX2YxXFxuK3JldD0kP1xcbitbIFxcXCIkcmV0XFxcIiAtZXEgXFxcIiRrc2Z0X3NraXBcXFwiIF0gXFx1MDAyNlxcdTAwMjYgZXhpdCBcXFwiJGtzZnRfc2tpcFxcXCJcXG4rWyBcXFwiJHJldFxcXCIgLWVxIDAgXSB8fCByYz0xXFxuK1xcbitpZiBbICRyYyAtZXEgMCBdOyB0aGVuXFxuK1xcdGVjaG8gXFxcImhzcl9zaGFyZWRfbXV0YXRpb246IHBlci1lZ3Jlc3MgbXV0YXRpb24gaXNvbGF0aW9uIChGMStGMikgWyBPSyBdXFxcIlxcbitlbHNlXFxuK1xcdGVjaG8gXFxcImhzcl9zaGFyZWRfbXV0YXRpb246IHBlci1lZ3Jlc3MgbXV0YXRpb24gaXNvbGF0aW9uIFsgRkFJTCBdXFxcIiBcXFxcXFxuK1xcdFxcdFxcXCJyYz0kcmNcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rZmlcXG4rZXhpdCAkcmNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDA6NTg6MDEuMTE1MDI2NzkxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6Njk1MzQ5ODk2NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFNSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHNyX2Rldl94bWl0XCIsXG4gICAgXCJoc3JfaGFuZGxlX2ZyYW1lXCIsXG4gICAgXCJoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZVwiLFxuICAgIFwicHJwX2NyZWF0ZV90YWdnZWRfZnJhbWVcIixcbiAgICBcImhzcl9mb3J3YXJkX3NrYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgc2hhcmVkLW11dGF0aW9uIGJ1ZyBpbiBIU1IvUFJQIGJ5IGFkZGluZyBgc2tiX2Nvd2AgYmVmb3JlIG1vZGlmeWluZyBjbG9uZWQgc2ticyBpbiBgaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWVgLCBgcHJwX2NyZWF0ZV90YWdnZWRfZnJhbWVgLCBhbmQgYGhzcl94bWl0YC4gVGhlc2UgYXJlIGNvcmUgcGFja2V0IGZvcndhcmRpbmcgZnVuY3Rpb25zIGluIHRoZSBIU1IgZHJpdmVyLCByZWFjaGFibGUgdmlhIGBoc3JfZGV2X3htaXRgIChtYXN0ZXIgZGV2aWNlIFRYKSBhbmQgYGhzcl9oYW5kbGVfZnJhbWVgIChzbGF2ZSBkZXZpY2UgUlgpLiBUaGUgY29kZSBpcyBmdWxseSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjU4MDk1MWE5NjcyNWRjYTBkZjhkZDIzMzliZjZlZmY3ZDYyN2Y3Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMgMDA6NTc6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmMgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcbmluZGV4IDA3NzQ5ODFhNjVjMTYuLjk3NGI1NWYyNDg4MjEgMTAwNjQ0XG4tLS0gYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcbisrKyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xuQEAgLTMzNiwxMiArMzM2LDI0IEBAIHN0cnVjdCBza19idWZmICpoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxuIFx0aW50IG1vdmVsZW47XG4gXG4gXHRpZiAoZnJhbWUtXHUwMDNlc2tiX2hzcikge1xuLVx0XHRzdHJ1Y3QgaHNyX2V0aGhkciAqaHNyX2V0aGhkciA9XG4tXHRcdFx0KHN0cnVjdCBoc3JfZXRoaGRyICopc2tiX21hY19oZWFkZXIoZnJhbWUtXHUwMDNlc2tiX2hzcik7XG4rXHRcdHN0cnVjdCBoc3JfZXRoaGRyICpoc3JfZXRoaGRyO1xuK1xuK1x0XHQvKiBUaGUgb3JpZ2luYWwgc2tiIGRhdGEgbWF5IGJlIHNoYXJlZCB3aXRoIGFub3RoZXIgZWdyZXNzXG4rXHRcdCAqIGNsb25lLiBNYWtlIHRoZSBjbG9uZSBkYXRhIHByaXZhdGUgYmVmb3JlIHVwZGF0aW5nIHRoZVxuK1x0XHQgKiBwYXRoIGlkIHNvIHRoZSB1cGRhdGUgY2Fubm90IGNvcnJ1cHQgdGhlIG90aGVyIGNvcHkuXG4rXHRcdCAqL1xuK1x0XHRza2IgPSBza2JfY2xvbmUoZnJhbWUtXHUwMDNlc2tiX2hzciwgR0ZQX0FUT01JQyk7XG4rXHRcdGlmICghc2tiKVxuK1x0XHRcdHJldHVybiBOVUxMO1xuK1x0XHRpZiAoc2tiX2Nvdyhza2IsIDApKSB7XG4rXHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHRcdFx0cmV0dXJuIE5VTEw7XG4rXHRcdH1cbiBcbiBcdFx0Lyogc2V0IHRoZSBsYW5lIGlkIHByb3Blcmx5ICovXG4rXHRcdGhzcl9ldGhoZHIgPSAoc3RydWN0IGhzcl9ldGhoZHIgKilza2JfbWFjX2hlYWRlcihza2IpO1xuIFx0XHRoc3Jfc2V0X3BhdGhfaWQoZnJhbWUsIGhzcl9ldGhoZHIsIHBvcnQpO1xuLVx0XHRyZXR1cm4gc2tiX2Nsb25lKGZyYW1lLVx1MDAzZXNrYl9oc3IsIEdGUF9BVE9NSUMpO1xuK1x0XHRyZXR1cm4gc2tiO1xuIFx0fSBlbHNlIGlmIChwb3J0LVx1MDAzZWRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19IU1JfVEFHX0lOUykge1xuIFx0XHRyZXR1cm4gc2tiX2Nsb25lKGZyYW1lLVx1MDAzZXNrYl9zdGQsIEdGUF9BVE9NSUMpO1xuIFx0fVxuQEAgLTM3NywxNSArMzg5LDI4IEBAIHN0cnVjdCBza19idWZmICpwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcbiBcdGlmIChmcmFtZS1cdTAwM2Vza2JfcHJwKSB7XG4tXHRcdHN0cnVjdCBwcnBfcmN0ICp0cmFpbGVyID0gc2tiX2dldF9QUlBfcmN0KGZyYW1lLVx1MDAzZXNrYl9wcnApO1xuK1x0XHRzdHJ1Y3QgcHJwX3JjdCAqdHJhaWxlcjtcbiBcbitcdFx0LyogU2FtZSBzaGFyaW5nIGhhemFyZCBhcyBhYm92ZTogcHJpdmF0aXplIHRoZSBjbG9uZSBkYXRhXG4rXHRcdCAqIGJlZm9yZSB1cGRhdGluZyB0aGUgTEFOIGlkLlxuK1x0XHQgKi9cbitcdFx0c2tiID0gc2tiX2Nsb25lKGZyYW1lLVx1MDAzZXNrYl9wcnAsIEdGUF9BVE9NSUMpO1xuK1x0XHRpZiAoIXNrYilcbitcdFx0XHRyZXR1cm4gTlVMTDtcbitcdFx0aWYgKHNrYl9jb3coc2tiLCAwKSkge1xuK1x0XHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRcdHJldHVybiBOVUxMO1xuK1x0XHR9XG4rXG4rXHRcdHRyYWlsZXIgPSBza2JfZ2V0X1BSUF9yY3Qoc2tiKTtcbiBcdFx0aWYgKHRyYWlsZXIpIHtcbiBcdFx0XHRwcnBfc2V0X2xhbl9pZCh0cmFpbGVyLCBwb3J0KTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRXQVJOX09OQ0UoIXRyYWlsZXIsIFwiZXJyb3JlZCBQUlAgc2tiXCIpO1xuK1x0XHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRcdHJldHVybiBOVUxMO1xuIFx0XHR9XG4tXHRcdHJldHVybiBza2JfY2xvbmUoZnJhbWUtXHUwMDNlc2tiX3BycCwgR0ZQX0FUT01JQyk7XG4rXHRcdHJldHVybiBza2I7XG4gXHR9IGVsc2UgaWYgKHBvcnQtXHUwMDNlZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX0hTUl9UQUdfSU5TKSB7XG4gXHRcdHJldHVybiBza2JfY2xvbmUoZnJhbWUtXHUwMDNlc2tiX3N0ZCwgR0ZQX0FUT01JQyk7XG4gXHR9XG5AQCAtNDIwLDYgKzQ0NSwyMiBAQCBzdGF0aWMgdm9pZCBoc3JfZGVsaXZlcl9tYXN0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBzdGF0aWMgaW50IGhzcl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCxcbiBcdFx0ICAgIHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXG4ge1xuK1x0LyogQW4gaW50ZXJsaW5rLWJvdW5kIHNrYiBmcm9tIGdldF91bnRhZ2dlZF9mcmFtZSgpIGNhbiBzdGlsbCBhbGlhc1xuK1x0ICogYW5vdGhlciBsaXZlIGNvbnN1bWVyOiBmb3IgbWFzdGVyLW9yaWdpbmF0ZWQgZnJhbWVzIHRoZSBjbG9uZVxuK1x0ICogc2hhcmVzIHRoZSBvcmlnaW5hbCBUWCBza2IgKHdoaWNoIHRhcHMgb3IgdGhlIFRYIHBhdGggbWF5IHN0aWxsXG4rXHQgKiBob2xkKTsgZm9yIHJpbmcgZnJhbWVzIHRoZSBtYXN0ZXIgYWxzbyBjb25zdW1lcyB0aGVtIHdoZW4gdGhleVxuK1x0ICogYXJlIGRlc3RpbmVkIHRvIHRoZSBsb2NhbCBub2RlIHdpdGhvdXQgYmVpbmcgZXhjbHVzaXZlIHRvIGl0LlxuK1x0ICogUHJpdmF0aXplIGJlZm9yZSBhbnkgYWRkcmVzcyBtdXRhdGlvbi5cbitcdCAqL1xuK1x0aWYgKHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LIFx1MDAyNlx1MDAyNlxuK1x0ICAgIChmcmFtZS1cdTAwM2Vwb3J0X3Jjdi1cdTAwM2V0eXBlID09IEhTUl9QVF9NQVNURVIgfHxcbitcdCAgICAgKGZyYW1lLVx1MDAzZWlzX2xvY2FsX2Rlc3QgXHUwMDI2XHUwMDI2ICFmcmFtZS1cdTAwM2Vpc19sb2NhbF9leGNsdXNpdmUpKSBcdTAwMjZcdTAwMjZcbitcdCAgICBza2JfY293KHNrYiwgMCkpIHtcbitcdFx0ZnJhbWUtXHUwMDNlcG9ydF9yY3YtXHUwMDNlZGV2LVx1MDAzZXN0YXRzLnJ4X2Ryb3BwZWQrKztcbitcdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHRcdHJldHVybiBORVRfWE1JVF9EUk9QO1xuK1x0fVxuK1xuIFx0aWYgKGZyYW1lLVx1MDAzZXBvcnRfcmN2LVx1MDAzZXR5cGUgPT0gSFNSX1BUX01BU1RFUikge1xuIFx0XHRoc3JfYWRkcl9zdWJzdF9kZXN0KGZyYW1lLVx1MDAzZW5vZGVfc3JjLCBza2IsIHBvcnQpO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG5pbmRleCAzMWZiOTMyNmNmNTMzLi44N2ZlMzQ5NTFiOGIwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxuQEAgLTUsNiArNSw3IEBAIHRvcF9zcmNkaXIgPSAuLi8uLi8uLi8uLi8uLlxuIFRFU1RfUFJPR1MgOj0gXFxcbiBcdGhzcl9waW5nLnNoIFxcXG4gXHRoc3JfcmVkYm94LnNoIFxcXG4rXHRoc3Jfc2hhcmVkX211dGF0aW9uLnNoIFxcXG4gXHRsaW5rX2ZhdWx0cy5zaCBcXFxuIFx0cHJwX3Bpbmcuc2ggXFxcbiAjIGVuZCBvZiBURVNUX1BST0dTXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3Jfc2hhcmVkX211dGF0aW9uLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3Jfc2hhcmVkX211dGF0aW9uLnNoXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMDVlN2U4MDNkMjg2N1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3Jfc2hhcmVkX211dGF0aW9uLnNoXG5AQCAtMCwwICsxLDIyMyBAQFxuKyMhL2Jpbi9iYXNoXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNcbisjIFZlcmlmeSB0aGF0IHBlci1lZ3Jlc3MgbXV0YXRpb25zIG9mIHNoYXJlZCBza2IgZGF0YSBhcmUgcHJpdmF0ZTpcbisjXG4rIyBGMiAocGF0aC9MQU4gSUQpOiBvbiBhbiBhZmZlY3RlZCBrZXJuZWwgdGhlIHNlY29uZCBzbGF2ZSdzIExBTi1JRCB3cml0ZVxuKyMgbGFuZHMgaW4gdGhlIGZpcnN0IHNsYXZlJ3Mgc3RpbGwtcXVldWVkIGNsb25lOyB3aXRoIGEgbmV0ZW0gZGVsYXkgb25cbisjIHNsYXZlIEEsIGluamVjdGVkIGZyYW1lcyBsZWF2ZSBBIGNhcnJ5aW5nIEIncyBMQU4gSUQuXG4rI1xuKyMgRjEgKFJlZEJveCBzb3VyY2UgTUFDKTogb24gYW4gYWZmZWN0ZWQga2VybmVsIGFuIEhTUi10YWdnZWQgbXVsdGljYXN0XG4rIyBmcmFtZSByZWNlaXZlZCBvbiBhIFJlZEJveCBzbGF2ZSBpcyBjbG9uZWQgZm9yIG1hc3RlciBhbmQgaW50ZXJsaW5rLFxuKyMgYW5kIHRoZSBpbnRlcmxpbmsncyBSZWRCb3gtTUFDIHJld3JpdGUgbGFuZHMgaW4gdGhlIG1hc3RlciBjbG9uZSdzXG4rIyBidWZmZXIsIHNvIHRoZSBsb2NhbCBzdGFjayByZWNlaXZlcyB0aGUgUmVkQm94IE1BQyBpbnN0ZWFkIG9mIHRoZVxuKyMgb3JpZ2luYXRpbmcgbm9kZSdzIE1BQy5cbitcbitpcHY2PWZhbHNlXG4rXG4rc291cmNlIC4vaHNyX2NvbW1vbi5zaFxuK1xuK0RVUj01XG4rXG4rcmVxdWlyZSgpXG4re1xuK1x0Y29tbWFuZCAtdiBcIiQxXCIgXHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxIFx1MDAyNlx1MDAyNiByZXR1cm4gMFxuK1x0ZWNobyBcIlNLSVA6ICQxIG5vdCBhdmFpbGFibGVcIlxuK1x0ZXhpdCAka3NmdF9za2lwXG4rfVxuK1xuK3JlcXVpcmUgaXBcbityZXF1aXJlIHRjXG4rcmVxdWlyZSBweXRob24zXG4rXG4rdHJhcCBjbGVhbnVwX2FsbF9ucyBFWElUXG4rXG4rIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEYyOiBMQU4tSUQgaXNvbGF0aW9uXG4rIyBQUlAgREFOUCAocHJvdG8gMSksIEFGX1BBQ0tFVCBwcmUtdGFnZ2VkIGluamVjdGlvbiwgbmV0ZW0gb24gc2xhdmUgQS5cbitydW5fZjIoKVxuK3tcbitcdHNldHVwX25zIG5zIDJcdTAwM2UvZGV2L251bGwgfHwgcmV0dXJuICRrc2Z0X3NraXBcbitcdG5zeCgpIHsgaXAgbmV0bnMgZXhlYyBcIiRuc1wiIFwiJEBcIjsgfVxuK1xuK1x0IyBQcm9iZSBzY2hfbmV0ZW0gaW5zaWRlIHRoZSBkaXNwb3NhYmxlIG5hbWVzcGFjZSBvbmx5LlxuK1x0aWYgISBuc3ggdGMgcWRpc2MgYWRkIGRldiBsbyByb290IG5ldGVtIGRlbGF5IDFtcyAyXHUwMDNlL2Rldi9udWxsOyB0aGVuXG4rXHRcdGVjaG8gXCJTS0lQOiBzY2hfbmV0ZW0gbm90IGF2YWlsYWJsZVwiXG4rXHRcdHJldHVybiAka3NmdF9za2lwXG4rXHRmaVxuK1x0bnN4IHRjIHFkaXNjIGRlbCBkZXYgbG8gcm9vdCAyXHUwMDNlL2Rldi9udWxsXG4rXG4rXHQjIENhcGFiaWxpdHkgcHJvYmVzIGVuZCBoZXJlOyBzZXR1cCBvciBydW50aW1lIGZhaWx1cmUgYmVsb3cgaXMgRkFJTC5cbitcdG5zeCBpcCBsaW5rIGFkZCB2QSB0eXBlIHZldGggcGVlciBuYW1lIHZBcCB8fFxuK1x0XHR7IGVjaG8gXCJGQUlMOiB2ZXRoIEFcIjsgcmV0dXJuIDE7IH1cbitcdG5zeCBpcCBsaW5rIGFkZCB2QiB0eXBlIHZldGggcGVlciBuYW1lIHZCcCB8fFxuK1x0XHR7IGVjaG8gXCJGQUlMOiB2ZXRoIEJcIjsgcmV0dXJuIDE7IH1cbitcdGZvciBpIGluIHZBIHZCIHZBcCB2QnA7IGRvXG4rXHRcdG5zeCBpcCBsaW5rIHNldCBcIiRpXCIgdXAgfHwgeyBlY2hvIFwiRkFJTDogJGkgdXBcIjsgcmV0dXJuIDE7IH1cbitcdGRvbmVcbitcdGlmICEgbnN4IGlwIGxpbmsgYWRkIG5hbWUgcHJwMCB0eXBlIGhzciBzbGF2ZTEgdkEgc2xhdmUyIHZCIFxcXG4rXHRcdHN1cGVydmlzaW9uIDQ1IHByb3RvIDEgMlx1MDAzZS9kZXYvbnVsbDsgdGhlblxuK1x0XHRlY2hvIFwiU0tJUDogSFNSL1BSUCBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMga2VybmVsXCJcbitcdFx0cmV0dXJuICRrc2Z0X3NraXBcbitcdGZpXG4rXHRuc3ggaXAgbGluayBzZXQgcHJwMCB1cCB8fCB7IGVjaG8gXCJGQUlMOiBwcnAwIHVwXCI7IHJldHVybiAxOyB9XG4rXHRuc3ggdGMgcWRpc2MgYWRkIGRldiB2QSByb290IG5ldGVtIGRlbGF5IDIwMG1zIHx8XG4rXHRcdHsgZWNobyBcIkZBSUw6IG5ldGVtXCI7IHJldHVybiAxOyB9XG4rXG4rXHRuc3ggcHl0aG9uMyAvZGV2L3N0ZGluIFwiJERVUlwiIFx1MDAzY1x1MDAzYydQWUYyJ1xuK2ltcG9ydCBzb2NrZXQsIHN0cnVjdCwgc2VsZWN0LCBzeXMsIHRpbWVcbitcbitkdXIgPSBpbnQoc3lzLmFyZ3ZbMV0pXG4rZGVmIGxhbmlkKHBrdCk6XG4rICAgIGlmIGxlbihwa3QpIFx1MDAzYyAyMCBvciBwa3RbLTI6XSAhPSBiXCJcXHg4OFxceGZiXCI6XG4rICAgICAgICByZXR1cm4gTm9uZVxuKyAgICByZXR1cm4gKHBrdFstNF0gXHUwMDNlXHUwMDNlIDQpIFx1MDAyNiAweEZcbitcbitTUkMgPSBieXRlcy5mcm9taGV4KG9wZW4oXCIvc3lzL2NsYXNzL25ldC9wcnAwL2FkZHJlc3NcIikucmVhZCgpLnJlcGxhY2UoXCI6XCIsIFwiXCIpKVxuK0RTVCA9IGJ5dGVzLmZyb21oZXgoXCIwMmFhYmJjY2RkMDFcIilcbitQQVkgPSBieXRlcyhyYW5nZSg0NikpXG4rcmN0MCA9IHN0cnVjdC5wYWNrKFwiXHUwMDNlSFwiLCAwKSArIHN0cnVjdC5wYWNrKFwiXHUwMDNlSFwiLCA1MiBcdTAwMjYgMHgwRkZGKSArIGJcIlxceDg4XFx4ZmJcIlxuK2ZyYW1lID0gRFNUICsgU1JDICsgYlwiXFx4MDhcXHgwMFwiICsgUEFZICsgcmN0MFxuK1xuK3R4ID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfUEFDS0VULCBzb2NrZXQuU09DS19SQVcpOyB0eC5iaW5kKChcInBycDBcIiwgMCkpXG4rc0EgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9QQUNLRVQsIHNvY2tldC5TT0NLX1JBVyxcbisgICAgICAgIHNvY2tldC5udG9ocygweDAwMDMpKVxuK3NBLmJpbmQoKFwidkFwXCIsIDApKVxuK3NCID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfUEFDS0VULCBzb2NrZXQuU09DS19SQVcsXG4rICAgICAgICBzb2NrZXQubnRvaHMoMHgwMDAzKSlcbitzQi5iaW5kKChcInZCcFwiLCAwKSlcbitzQS5zZXRibG9ja2luZyhGYWxzZSk7IHNCLnNldGJsb2NraW5nKEZhbHNlKVxuK2ZvciBfIGluIHJhbmdlKDIwMCk6XG4rICAgIHR4LnNlbmQoZnJhbWUpOyB0aW1lLnNsZWVwKDAuMDAxKVxuK1xuK2EsIGIgPSBbXSwgW11cbitlbmQgPSB0aW1lLnRpbWUoKSArIGR1clxuK3doaWxlIHRpbWUudGltZSgpIFx1MDAzYyBlbmQ6XG4rICAgIHIsIF8sIF8gPSBzZWxlY3Quc2VsZWN0KFtzQSwgc0JdLCBbXSwgW10sIDAuMylcbisgICAgZm9yIHMgaW4gcjpcbisgICAgICAgIHBrdCA9IHMucmVjdig2NTUzNSlcbisgICAgICAgIGlmIChwa3RbOjZdICE9IERTVCBvciBwa3RbNjoxMl0gIT0gU1JDIG9yIHBrdFsxMjoxNF0gIT0gYlwiXFx4MDhcXHgwMFwiXG4rICAgICAgICAgICAgICAgIG9yIHBrdFsxNDoxNCArIGxlbihQQVkpXSAhPSBQQVkpOlxuKyAgICAgICAgICAgIGNvbnRpbnVlXG4rICAgICAgICBsaWQgPSBsYW5pZChwa3QpXG4rICAgICAgICBpZiBsaWQgaXMgbm90IE5vbmU6XG4rICAgICAgICAgICAgKGEgaWYgcyBpcyBzQSBlbHNlIGIpLmFwcGVuZChsaWQpXG4rXG4rcHJpbnQoXCJBLXNpZGUgY291bnQ9JWQgbGFuIGlkcz0lc1wiICUgKGxlbihhKSwgc29ydGVkKHNldChhKSkpKVxuK3ByaW50KFwiQi1zaWRlIGNvdW50PSVkIGxhbiBpZHM9JXNcIiAlIChsZW4oYiksIHNvcnRlZChzZXQoYikpKSlcbitpZiBsZW4oYSkgXHUwMDNjIDE1MCBvciBsZW4oYikgXHUwMDNjIDE1MDpcbisgICAgcHJpbnQoXCJGQUlMOiB0b28gZmV3IGluamVjdGVkIGZyYW1lcyBjYXB0dXJlZCAoQT0lZCBCPSVkLCBzZW50IDIwMClcIlxuKyAgICAgICAgICAlIChsZW4oYSksIGxlbihiKSkpXG4rICAgIHN5cy5leGl0KDEpXG4rYmFkX2EgPSBbeCBmb3IgeCBpbiBhIGlmICh4IFx1MDAyNiAxKSAhPSAwXVxuK2JhZF9iID0gW3ggZm9yIHggaW4gYiBpZiAoeCBcdTAwMjYgMSkgIT0gMV1cbitpZiBiYWRfYSBvciBiYWRfYjpcbisgICAgcHJpbnQoXCJGQUlMOiBzaGFyZWQtbXV0YXRpb24gY29ycnVwdGlvbiAtIEE6ICVkLyVkIHdyb25nLWxhbixcIlxuKyAgICAgICAgICBcIiBCOiAlZC8lZCB3cm9uZy1sYW5cIlxuKyAgICAgICAgICAlIChsZW4oYmFkX2EpLCBsZW4oYSksIGxlbihiYWRfYiksIGxlbihiKSkpXG4rICAgIHN5cy5leGl0KDEpXG4rcHJpbnQoXCJQQVNTOiBwZXItZWdyZXNzIExBTiBJRHMgaXNvbGF0ZWQgKEEgYWxsIGJpdDA9MCwgQiBhbGwgYml0MD0xKVwiKVxuK3N5cy5leGl0KDApXG4rUFlGMlxuK31cbitcbisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGMTogUmVkQm94IHNvdXJjZS1NQUMgcHJpdmFjeVxuKyMgSFNSIFJlZEJveCAocHJvdG8gMCksIHRhZ2dlZCBtdWx0aWNhc3QgZnJvbSBhIHNsYXZlOiBtYXN0ZXIgbXVzdCBrZWVwXG4rIyB0aGUgbm9kZSBNQUMsIGludGVybGluayBtdXN0IGNhcnJ5IHRoZSBSZWRCb3ggTUFDLlxuK3J1bl9mMSgpXG4re1xuK1x0c2V0dXBfbnMgbnMgMlx1MDAzZS9kZXYvbnVsbCB8fCByZXR1cm4gJGtzZnRfc2tpcFxuK1x0bnN4KCkgeyBpcCBuZXRucyBleGVjIFwiJG5zXCIgXCIkQFwiOyB9XG4rXG4rXHRuc3ggaXAgbGluayBhZGQgdkEgdHlwZSB2ZXRoIHBlZXIgbmFtZSB2QXAgfHxcbitcdFx0eyBlY2hvIFwiRkFJTDogdmV0aCBBXCI7IHJldHVybiAxOyB9XG4rXHRuc3ggaXAgbGluayBhZGQgdkIgdHlwZSB2ZXRoIHBlZXIgbmFtZSB2QnAgfHxcbitcdFx0eyBlY2hvIFwiRkFJTDogdmV0aCBCXCI7IHJldHVybiAxOyB9XG4rXHRuc3ggaXAgbGluayBhZGQgdkkgdHlwZSB2ZXRoIHBlZXIgbmFtZSB2SXAgfHxcbitcdFx0eyBlY2hvIFwiRkFJTDogdmV0aCBJXCI7IHJldHVybiAxOyB9XG4rXHRmb3IgaSBpbiB2QSB2QiB2SSB2QXAgdkJwIHZJcDsgZG9cbitcdFx0bnN4IGlwIGxpbmsgc2V0IFwiJGlcIiB1cCB8fCB7IGVjaG8gXCJGQUlMOiAkaSB1cFwiOyByZXR1cm4gMTsgfVxuK1x0ZG9uZVxuK1x0aWYgISBuc3ggaXAgbGluayBhZGQgbmFtZSBoc3IwIHR5cGUgaHNyIHNsYXZlMSB2QSBzbGF2ZTIgdkIgXFxcbitcdFx0aW50ZXJsaW5rIHZJIHN1cGVydmlzaW9uIDQ1IHByb3RvIDAgMlx1MDAzZS9kZXYvbnVsbDsgdGhlblxuK1x0XHRlY2hvIFwiU0tJUDogSFNSIFJlZEJveCBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMga2VybmVsXCJcbitcdFx0cmV0dXJuICRrc2Z0X3NraXBcbitcdGZpXG4rXHRuc3ggaXAgbGluayBzZXQgaHNyMCB1cCB8fCB7IGVjaG8gXCJGQUlMOiBoc3IwIHVwXCI7IHJldHVybiAxOyB9XG4rXG4rXHRuc3ggcHl0aG9uMyAvZGV2L3N0ZGluIFx1MDAzY1x1MDAzYydQWUYxJ1xuK2ltcG9ydCBzb2NrZXQsIHNlbGVjdCwgc3lzLCB0aW1lXG4rXG4rTk9ERSAgPSBieXRlcy5mcm9taGV4KFwiMDIxMTIyMzM0NDU1XCIpXG4rTUNBU1QgPSBieXRlcy5mcm9taGV4KFwiMDEwMDVlMDAwMDAxXCIpXG4rUkIgICAgPSBieXRlcy5mcm9taGV4KG9wZW4oXCIvc3lzL2NsYXNzL25ldC92SS9hZGRyZXNzXCIpLnJlYWQoKS5yZXBsYWNlKFwiOlwiLCBcIlwiKSlcbitQQVkgICA9IGJ5dGVzKHJhbmdlKDQ2KSlcbitcbitkZWYgZnJhbWUoc2VxKTpcbisgICAgdGFnID0gKCgoMSBcdTAwM2NcdTAwM2MgMTIpIHwgbGVuKFBBWSkpLnRvX2J5dGVzKDIsIFwiYmlnXCIpXG4rICAgICAgICAgICArIHNlcS50b19ieXRlcygyLCBcImJpZ1wiKSArIGJcIlxceDA4XFx4MDBcIilcbisgICAgcmV0dXJuIE1DQVNUICsgTk9ERSArIGJcIlxceDg5XFx4MmZcIiArIHRhZyArIFBBWVxuK1xuK3R4ID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfUEFDS0VULCBzb2NrZXQuU09DS19SQVcpOyB0eC5iaW5kKChcInZBcFwiLCAwKSlcbitzbSA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1BBQ0tFVCwgc29ja2V0LlNPQ0tfUkFXLFxuKyAgICAgICAgc29ja2V0Lm50b2hzKDB4MDAwMykpXG4rc20uYmluZCgoXCJoc3IwXCIsIDApKVxuK3NpID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfUEFDS0VULCBzb2NrZXQuU09DS19SQVcsXG4rICAgICAgICBzb2NrZXQubnRvaHMoMHgwMDAzKSlcbitzaS5iaW5kKChcInZJcFwiLCAwKSlcbitzbS5zZXRibG9ja2luZyhGYWxzZSk7IHNpLnNldGJsb2NraW5nKEZhbHNlKVxuK1xuK2ZvciBpIGluIHJhbmdlKDMpOlxuKyAgICB0eC5zZW5kKGZyYW1lKGkgKyAxKSk7IHRpbWUuc2xlZXAoMC4wNSlcbitcbittX3NyYyA9IGlfc3JjID0gTm9uZVxuK2VuZCA9IHRpbWUudGltZSgpICsgNFxuK3doaWxlIHRpbWUudGltZSgpIFx1MDAzYyBlbmQgYW5kIChtX3NyYyBpcyBOb25lIG9yIGlfc3JjIGlzIE5vbmUpOlxuKyAgICByLCBfLCBfID0gc2VsZWN0LnNlbGVjdChbc20sIHNpXSwgW10sIFtdLCAwLjMpXG4rICAgIGZvciBzIGluIHI6XG4rICAgICAgICBwa3QgPSBzLnJlY3YoNjU1MzUpXG4rICAgICAgICAjIGV4YWN0IGZsb3c6IGRzdCwgcG9zdC1zdHJpcCBFdGhlclR5cGUsIGV4YWN0IHBheWxvYWQsIG1pbiBsZW5ndGg7XG4rICAgICAgICAjIGhfc291cmNlIGlzIHRoZSBhc3NlcnRlZCB2YWx1ZSBhbmQgbXVzdCBOT1QgYmUgZmlsdGVyZWQgb25cbisgICAgICAgIGlmIChsZW4ocGt0KSBcdTAwM2MgNjAgb3IgcGt0Wzo2XSAhPSBNQ0FTVCBvciBwa3RbMTI6MTRdICE9IGJcIlxceDA4XFx4MDBcIlxuKyAgICAgICAgICAgICAgICBvciBwa3RbMTQ6MTQgKyBsZW4oUEFZKV0gIT0gUEFZKTpcbisgICAgICAgICAgICBjb250aW51ZVxuKyAgICAgICAgaWYgcyBpcyBzbSBhbmQgbV9zcmMgaXMgTm9uZTpcbisgICAgICAgICAgICBtX3NyYyA9IHBrdFs2OjEyXVxuKyAgICAgICAgZWxpZiBzIGlzIHNpIGFuZCBpX3NyYyBpcyBOb25lOlxuKyAgICAgICAgICAgIGlfc3JjID0gcGt0WzY6MTJdXG4rXG4rcHJpbnQoXCJtYXN0ZXIgaF9zb3VyY2UgICAgPVwiLCBtX3NyYy5oZXgoKSBpZiBtX3NyYyBlbHNlIE5vbmUpXG4rcHJpbnQoXCJub2RlIE1BQyAgICAgICAgICAgPVwiLCBOT0RFLmhleCgpKVxuK3ByaW50KFwiaW50ZXJsaW5rIGhfc291cmNlID1cIiwgaV9zcmMuaGV4KCkgaWYgaV9zcmMgZWxzZSBOb25lKVxuK3ByaW50KFwicmVkYm94IE1BQyAgICAgICAgID1cIiwgUkIuaGV4KCkpXG4raWYgaV9zcmMgIT0gUkI6XG4rICAgIHByaW50KFwiRkFJTDogaW50ZXJsaW5rIGRpZCBub3QgY2FycnkgdGhlIFJlZEJveCBNQUNcIilcbisgICAgc3lzLmV4aXQoMSlcbitpZiBtX3NyYyAhPSBOT0RFOlxuKyAgICBwcmludChcIkZBSUw6IG1hc3RlciByZWNlaXZlZCAlcyBpbnN0ZWFkIG9mIHRoZSBub2RlIE1BQyBcIlxuKyAgICAgICAgICBcIihzaGFyZWQtbXV0YXRpb24gY29ycnVwdGlvbilcIlxuKyAgICAgICAgICAlIChtX3NyYy5oZXgoKSBpZiBtX3NyYyBlbHNlIFwibm90aGluZ1wiKSlcbisgICAgc3lzLmV4aXQoMSlcbitwcmludChcIlBBU1M6IG1hc3RlciBrZXB0IG5vZGUgTUFDLCBpbnRlcmxpbmsga2VwdCBSZWRCb3ggTUFDXCIpXG4rc3lzLmV4aXQoMClcbitQWUYxXG4rfVxuK1xuK3JjPTBcbitcbitydW5fZjJcbityZXQ9JD9cbitbIFwiJHJldFwiIC1lcSBcIiRrc2Z0X3NraXBcIiBdIFx1MDAyNlx1MDAyNiBleGl0IFwiJGtzZnRfc2tpcFwiXG4rWyBcIiRyZXRcIiAtZXEgMCBdIHx8IHJjPTFcbitcbitydW5fZjFcbityZXQ9JD9cbitbIFwiJHJldFwiIC1lcSBcIiRrc2Z0X3NraXBcIiBdIFx1MDAyNlx1MDAyNiBleGl0IFwiJGtzZnRfc2tpcFwiXG4rWyBcIiRyZXRcIiAtZXEgMCBdIHx8IHJjPTFcbitcbitpZiBbICRyYyAtZXEgMCBdOyB0aGVuXG4rXHRlY2hvIFwiaHNyX3NoYXJlZF9tdXRhdGlvbjogcGVyLWVncmVzcyBtdXRhdGlvbiBpc29sYXRpb24gKEYxK0YyKSBbIE9LIF1cIlxuK2Vsc2VcbitcdGVjaG8gXCJoc3Jfc2hhcmVkX211dGF0aW9uOiBwZXItZWdyZXNzIG11dGF0aW9uIGlzb2xhdGlvbiBbIEZBSUwgXVwiIFxcXG4rXHRcdFwicmM9JHJjXCIgMVx1MDAzZVx1MDAyNjJcbitmaVxuK2V4aXQgJHJjXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwMDo1ODowMS4xMTUwMzAyMTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDkxMzQ0ODk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSFNSL1BSUCBTaGFyZWQtTXV0YXRpb24gQnVnIEZpeCoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0J3MgaGl0dGluZyBgbmV0L2hzci9oc3JfZm9yd2FyZC5jYCBhbmQgaW50cm9kdWNpbmcgYSBuZXcgc2VsZnRlc3QgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX3NoYXJlZF9tdXRhdGlvbi5zaGAuIE15IGluaXRpYWwgc2NhbiB0ZWxscyBtZSB0aGlzIGlzIGFkZHJlc3NpbmcgYSBzaGFyZWQtbXV0YXRpb24gYnVnIHdpdGhpbiB0aGUgSFNSL1BSUCBwcm90b2NvbHMuIFNwZWNpZmljYWxseSwgdGhlIGlzc3VlIHJldm9sdmVzIGFyb3VuZCBgc2tiX2Nsb25lYC4gSXQgbG9va3MgbGlrZSB3ZSB3ZXJlIGNsb25pbmcgU0tCcyBidXQgdGhlbiBkaXJlY3RseSBtb2RpZnlpbmcgdGhlICpjbG9uZWQqIFNLQiB3aXRob3V0IHVzaW5nIGBza2JfY293YCBvciBgc2tiX2NvcHlgIGZpcnN0LiBUaGF0J3MgYSBjbGFzc2ljIG1pc3Rha2Ug4oCTIG1vZGlmeWluZyBhIGNsb25lIHdpdGhvdXQgZW5zdXJpbmcgdGhlIG9yaWdpbmFsIGRhdGEgaXMgcHJvdGVjdGVkLiBUaGlzIHdvdWxkIGxlYWQgdG8gZGF0YSBjb3JydXB0aW9uIGluIHRoZSBvcmlnaW5hbCBTS0IsIHNoYXJlZCB3aXRoIG90aGVyIGNsb25lcywgYSBzaWduaWZpY2FudCB2dWxuZXJhYmlsaXR5LlxuXG5UaGUgZml4IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEl0IGFkZHMgYHNrYl9jb3coc2tiLCAwKWAgYmVmb3JlIHRoZSBtb2RpZmljYXRpb24gc3RlcHMuIExldCBtZSBtYWtlIHN1cmUgSSd2ZSBnb3QgdGhlIGNvbnRleHQgY29ycmVjdC4gTG9va3MgbGlrZSB0aGlzIGFmZmVjdHMgYGhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCwgYHBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCwgYW5kIGBoc3JfeG1pdGAgd2l0aGluIHRoZSBIU1IgbmV0d29yayBkcml2ZXIuIFF1aWNrIHJlbWluZGVyLCB0aGVzZSBhcmUgYWxsIHBhcnQgb2YgdGhlIEhTUiBzdGFjaywgYW5kIHRoYXQgZnVuY3Rpb25hbGl0eSBpcyBjb25maWd1cmVkIHdpdGggYENPTkZJR19IU1JgLlxuXG5SaWdodCwgdGltZSB0byBkaWcgaW4gYW5kIHZlcmlmeSB0aGUgbG9naWMgYXJvdW5kIHRob3NlIGZ1bmN0aW9ucy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgc2tiX2Nvd2AgaXMgY29ycmVjdGx5IGltcGxlbWVudGVkIG5vdyBpbiBhbGwgdGhlIGxpc3RlZCBmdW5jdGlvbnMuIEknbGwgYWxzbyBuZWVkIHRvIHNlZSBpZiB0aGUgbmV3IHNlbGZ0ZXN0IGFwcHJvcHJpYXRlbHkgY292ZXJzIHRoZSBidWcgc2NlbmFyaW8uIFdlIGNhbid0IGhhdmUgdGhpcyBhZ2Fpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ0MCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAwOjU4OjA3LjIwNjM3OTQ0OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzI4ODU0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFNSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9oc3IvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9oc3IvS2NvbmZpZy01LVxcbm5ldC9oc3IvS2NvbmZpZzo2OmNvbmZpZyBIU1JcXG5uZXQvaHNyL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSAoSFNSIFxcdTAwMjYgUFJQKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDA6NTg6MDcuMjgzNjc4MzM4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ4NjM1MTE0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIERlcGVuZGVuY2llcyBpbiB0aGUgYG5ldC9oc3IvS2NvbmZpZ2AgRmlsZSoqXG5cbkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgaW4gdG9vIGRlZXAsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmUsIHdoaWNoIGlzIGEgZ29vZCBoYWJpdC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBkaXJlY3RseSB0byB0aGUgYG5ldC9oc3IvS2NvbmZpZ2AgZmlsZS4gSSdtIGdvaW5nIHRvIG5hdmlnYXRlIHRvIHRoYXQgS2NvbmZpZyBmaWxlLiBJIHdhbnQgdG8gc2VlIGEgY2xlYXIgbWFwIG9mIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aXRoaW4gdGhlIEhTUiAoSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSkgbW9kdWxlLiBJIGtub3cgdGhhdCBmaWxlIHdpbGwgY29udGFpbiB0aGUgY3J1Y2lhbCBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cyBhbmQgY29uZGl0aW9uYWxzIHRoYXQgZ292ZXJuIHdoaWNoIGZlYXR1cmVzIGFyZSBlbmFibGVkLCBhbmQgd2hpY2ggYXJlbid0LCBiYXNlZCBvbiB0aGUgb3ZlcmFsbCBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGNydWNpYWwgdmFyaWFibGVzIGFuZCBjb25kaXRpb25zIHRoYXQgZHJpdmUgdGhlIEhTUiBtb2R1bGUncyBidWlsZCBwcm9jZXNzLiBFc3NlbnRpYWxseSwgSSdtIGFpbWluZyBmb3IgYSBxdWljayBzY2FuIG9mIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzEzNiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAwOjU4OjEwLjc3MDAzMTgxNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9oc3IvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBJRUMgNjI0MzktMyBIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5XFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBIU1JcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5IChIU1IgXFx1MDAyNiBQUlApXFxcIlxcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBUaGlzIGVuYWJsZXMgSUVDIDYyNDM5IGRlZmluZWQgSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3NcXG4gIDEwOlxcdFxcdCAgUmVkdW5kYW5jeSAoSFNSKSBhbmQgUGFyYWxsZWwgUmVkdW5kYW5jeSBQcm90b2NvbCAoUFJQKS5cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB5b3VyIExpbnV4IGJveCB3aWxsIGJlIGFibGUgdG8gYWN0IGFzIGFcXG4gIDEzOlxcdFxcdCAgREFOSCAoXFxcIkRvdWJseSBhdHRhY2hlZCBub2RlIGltcGxlbWVudGluZyBIU1JcXFwiKSBvciBEQU5QIChcXFwiRG91Ymx5XFxuICAxNDpcXHRcXHQgIGF0dGFjaGVkIG5vZGUgaW1wbGVtZW50aW5nIFBSUFxcXCIpLiBGb3IgdGhpcyB0byB3b3JrLCB5b3VyIExpbnV4IGJveFxcbiAgMTU6XFx0XFx0ICBuZWVkcyAoYXQgbGVhc3QpIHR3byBwaHlzaWNhbCBFdGhlcm5ldCBpbnRlcmZhY2VzLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRcXHQgIEZvciBEQU5ILCBpdCBtdXN0IGJlIGNvbm5lY3RlZCBhcyBhIG5vZGUgaW4gYSByaW5nIG5ldHdvcmsgdG9nZXRoZXJcXG4gIDE4OlxcdFxcdCAgd2l0aCBvdGhlciBIU1IgY2FwYWJsZSBub2Rlcy4gQWxsIEV0aGVybmV0IGZyYW1lcyBzZW50IG92ZXIgdGhlIEhTUlxcbiAgMTk6XFx0XFx0ICBkZXZpY2Ugd2lsbCBiZSBzZW50IGluIGJvdGggZGlyZWN0aW9ucyBvbiB0aGUgcmluZyAob3ZlciBib3RoIHNsYXZlXFxuICAyMDpcXHRcXHQgIHBvcnRzKSwgZ2l2aW5nIGEgcmVkdW5kYW50LCBpbnN0YW50IGZhaWwtb3ZlciBuZXR3b3JrLiBFYWNoIEhTUiBub2RlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAwOjU4OjEwLjc3MDExODUyNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MTAxMTMzMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBIU1IgQ29uZmlndXJhdGlvbiBhbmQgRm9yd2FyZGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgSFNSIGNvbmZpZ3VyYXRpb24sIGFuZCBpdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGUgY29uZmlnIGl0c2VsZiwgbGV0J3MganVzdCBjYWxsIGl0IGBIU1JgLCBkb2Vzbid0IGxvb2sgbGlrZSBpdCBoYXMgYW55IGNyYXp5IGRlcGVuZGVuY2llcyDigJMgc3RhbmRhcmQgbmV0d29ya2luZyBpcyBhbGwgdGhhdCdzIHJlcXVpcmVkLCB3aGljaCBpcyB3aGF0IEknZCBleHBlY3QuIE5vdywgSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgdGFnZ2VkIGZyYW1lcyBhcmUgY3JlYXRlZCBhbmQgaGFuZGxlZC4gTXkgcHJpbWFyeSBpbnRlcmVzdCBsaWVzIGluIHRoZSBjb3JlIGZvcndhcmRpbmcgbG9naWMuXG5cbkkgdGhpbmsgSSdsbCBzdGFydCBieSBleGFtaW5pbmcgdGhlIGZ1bmN0aW9ucyBgaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWVgLCBgcHJwX2NyZWF0ZV90YWdnZWRfZnJhbWVgLCBhbmQgYGhzcl94bWl0YCB3aXRoaW4gdGhlIGBuZXQvaHNyL2hzcl9mb3J3YXJkLmNgIGZpbGUuIFRob3NlIHRocmVlIHNlZW0gbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIGRldGFpbHMgb2YgdGhlIHRhZ2dpbmcgYW5kIHRyYW5zbWlzc2lvbiBwcm9jZXNzZXMuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBIU1IgYW5kIFBSUCB0YWdnaW5nIG1lY2hhbmlzbXMgaW50ZXJhY3QuIEkgd2FudCB0byBzZWUgaG93IHRoZSBmcmFtZXMgYXJlIGNvbnN0cnVjdGVkIGFuZCBob3cgdGhleSBnZXQgc2VudCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3MTIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAwOjU4OjE0LjQ4MDIzNDY2OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODYzMDM5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaHNyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaHNyL2hzcl9kZXZpY2UuYz02MjE9c3RhdGljIGNvbnN0IHN0cnVjdCBoc3JfcHJvdG9fb3BzIGhzcl9vcHMgPSB7XFxubmV0L2hzci9oc3JfZGV2aWNlLmMtNjIyLVxcdC5zZW5kX3N2X2ZyYW1lID0gc2VuZF9oc3Jfc3VwZXJ2aXNpb25fZnJhbWUsXFxubmV0L2hzci9oc3JfZGV2aWNlLmM6NjIzOlxcdC5jcmVhdGVfdGFnZ2VkX2ZyYW1lID0gaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWUsXFxubmV0L2hzci9oc3JfZGV2aWNlLmMtNjI0LVxcdC5nZXRfdW50YWdnZWRfZnJhbWUgPSBoc3JfZ2V0X3VudGFnZ2VkX2ZyYW1lLFxcbi0tXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jPTI4OD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmhzcl9maWxsX3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTMzMC0gKi9cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6MzMxOnN0cnVjdCBza19idWZmICpoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy0zMzItXFx0XFx0XFx0XFx0XFx0c3RydWN0IGhzcl9wb3J0ICpwb3J0KVxcbi0tXFxubmV0L2hzci9oc3JfZm9yd2FyZC5oPTE3PXN0cnVjdCBza19idWZmICpwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuaC0xOC1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpO1xcbm5ldC9oc3IvaHNyX2ZvcndhcmQuaDoxOTpzdHJ1Y3Qgc2tfYnVmZiAqaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmgtMjAtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGhzcl9wb3J0ICpwb3J0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDA6NTg6MTQuNTM4ODcwNDg3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc3NDY0MDczMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIGNvbnNpZGVyaW5nIEknbSBkZWVwIGluIHRoaXMgY29kZTpcblxuKipBbmFseXppbmcgRnVuY3Rpb24gU2NvcGUqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zOiBgaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWVgLCBgcHJwX2NyZWF0ZV90YWdnZWRfZnJhbWVgLCBhbmQgYGhzcl94bWl0YC4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcyBhbHdheXMgYWJvdXQgc2NvcGUg4oCTIGFyZSB0aGVzZSBzdGF0aWMsIG9yIGFyZSB0aGV5IGdsb2JhbD8gVGhlIGJlaGF2aW9yIHdpbGwgYmUgdmVyeSBkaWZmZXJlbnQuIEFscmlnaHQsIGxldCdzIHNlZS4gTG9va3MgbGlrZSBgaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWVgIGlzIGdsb2JhbCwgYW5kIGBwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZWAgaXMgYWxzbyBnbG9iYWxseSBhY2Nlc3NpYmxlLiBIbW0sIGJ1dCB0aGVuIGhlcmUncyBgaHNyX3htaXRgLCBmbGFnZ2VkIGFzIHN0YXRpYy4gT2theSwgZ29vZC4gTGV0J3MgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgdGhlIGBoc3JfeG1pdGAgc2NvcGluZyBhcyB0aGF0IGNvdWxkIGJlIGEgcG90ZW50aWFsIHBvaW50IG9mIGRpdmVyZ2VuY2UgbGF0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0NDgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDA6NTg6MTguMzEzNTE0MDdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTc4Mzg2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoc3JfeG1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaHNyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaHNyL2hzcl9mb3J3YXJkLmM9NDI0PXN0YXRpYyB2b2lkIGhzcl9kZWxpdmVyX21hc3RlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTQ0NC1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6NDQ1OnN0YXRpYyBpbnQgaHNyX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0LFxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy00NDYtXFx0XFx0ICAgIHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM9NTYwPXN0YXRpYyB2b2lkIGhzcl9mb3J3YXJkX2RvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNjIxLVxcdFxcdH0gZWxzZSB7XFxubmV0L2hzci9oc3JfZm9yd2FyZC5jOjYyMjpcXHRcXHRcXHRpZiAoIWhzcl94bWl0KHNrYiwgcG9ydCwgZnJhbWUpKVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy02MjMtXFx0XFx0XFx0XFx0aWYgKHBvcnQtXFx1MDAzZXR5cGUgPT0gSFNSX1BUX1NMQVZFX0EgfHxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDA6NTg6MTguNDIzMzAyMjg4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMDI0Nzg0MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGJyZWFrZG93biBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIGBoc3JfeG1pdGAgQ29kZSoqXG5cbk9rYXksIHNvIGBoc3JfeG1pdGAgaXMgc3RhdGljLCB3aGljaCB0ZWxscyBtZSBpdCdzIGxpa2VseSBhIGNvcmUgaW50ZXJuYWwgZnVuY3Rpb24gd2l0aGluIHRoaXMgSFNSIChIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5KSBtb2R1bGUuIFRoYXQgbWVhbnMgaXQncyBwcm9iYWJseSBub3QgZGlyZWN0bHkgY2FsbGVkIGZyb20gb3V0c2lkZSwgYnV0IHJhdGhlciBhY3RzIGFzIHRoZSB3b3JraG9yc2UgZm9yIHNlbmRpbmcgZnJhbWVzLiBHaXZlbiB0aGF0LCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgKm90aGVyKiBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCBpdC4gVGhlIGVudHJ5IHBvaW50cywgdGhlIGZ1bmN0aW9ucyB0aGF0IGtpY2sgdGhpbmdzIG9mZiwgYXJlIHByb2JhYmx5IGBoc3JfZm9yd2FyZF9kb2AsIGBoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZWAsIGBwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZWAsIGFuZCBgaHNyX2ZvcndhcmRfc2tiYC4gVGhvc2UgZnVuY3Rpb25zIGFyZSB0aGUgZnJvbnQgZG9vcnMsIHRoZSBpbml0aWF0b3JzIG9mIHRoZSBwcm9jZXNzLiBUaW1lIHRvIHZlcmlmeSB0aGF0IGh5cG90aGVzaXMuIExldCdzIHN0YXJ0IHdpdGggYGhzcl9mb3J3YXJkX2RvYCBhbmQgc2VlIHdoYXQgaXQgZG9lcy4gSSdsbCBmb2N1cyBteSBhdHRlbnRpb24gdGhlcmUgYW5kIHNlZSB3aGF0IGl0IHRlbGxzIG1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDI0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDA6NTg6MjIuNDI1NzgyOTg4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzIyNTk1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoc3JfZm9yd2FyZF9kb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaHNyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaHNyL2hzcl9mb3J3YXJkLmM9NDkyPWJvb2wgaHNyX2Ryb3BfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxcbi0tXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTU1OS0gKi9cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6NTYwOnN0YXRpYyB2b2lkIGhzcl9mb3J3YXJkX2RvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTU2MS17XFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM9Nzc1PXZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03ODMtXFx0aHNyX3JlZ2lzdGVyX2ZyYW1lX2luKGZyYW1lLm5vZGVfc3JjLCBwb3J0LCBmcmFtZS5zZXF1ZW5jZV9ucik7XFxubmV0L2hzci9oc3JfZm9yd2FyZC5jOjc4NDpcXHRoc3JfZm9yd2FyZF9kbyhcXHUwMDI2ZnJhbWUpO1xcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03ODUtXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAwOjU4OjIyLjUyMzAxMjY1NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjI2MzkzNjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gbmV0d29yayBrZXJuZWwgaW50ZXJuYWxzLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gcGFja2V0IHByb2Nlc3NpbmcuXG5cbioqQW5hbHl6aW5nIHRoZSBTaWduaWZpY2FuY2Ugb2YgYSBHbG9iYWwgVmFyaWFibGU6IGBoc3JfZm9yd2FyZF9za2JgKipcblxuQWxyaWdodCwgc28gYGhzcl9mb3J3YXJkX3NrYmAgaXMgZ2xvYmFsLCBodWg/IEltbWVkaWF0ZWx5LCBteSBtaW5kIHN0YXJ0cyByYWNpbmcuIEEgZ2xvYmFsIHZhcmlhYmxlIGluIHRoaXMgY29udGV4dCBpcyByYXJlbHkgYSBnb29kIHRoaW5nLCB1bmxlc3MgaXRzIHVzZSBpcyAqdmVyeSogY2FyZWZ1bGx5IG1hbmFnZWQuIE15IGluaXRpYWwgcmVhY3Rpb24gaXMgYSBtaXggb2YgaW50cmlndWUgYW5kIGNvbmNlcm4uIFxuXG5gaHNyX2ZvcndhcmRfc2tiYCBzdWdnZXN0cyBhIHN0cnVjdHVyZSwgcHJvYmFibHkgYSBgc2tfYnVmZmAsIGlzIGJlaW5nIHVzZWQgdG8gZm9yd2FyZCBwYWNrZXRzIGluIGFuIEhTUiAoSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSkgY29udGV4dC4gVGhlIGZhY3QgdGhhdCBpdCdzIGdsb2JhbCBpbXBsaWVzIGl04oCZcyBwcm9iYWJseSBhY2Nlc3NpYmxlIGZyb20gbXVsdGlwbGUgdGhyZWFkcyBvciBpbnRlcnJ1cHQgY29udGV4dHMsIHdoaWNoIHJhaXNlcyBzZXZlcmFsIHJlZCBmbGFncy4gSXMgaXQgYWRlcXVhdGVseSBwcm90ZWN0ZWQ/IEFyZSB0aGVyZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGx1cmtpbmc/XG5cbkkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBpdHMgc2NvcGUuIFdoYXQgbW9kdWxlcyBhY2Nlc3MgdGhpcyB2YXJpYWJsZT8gV2hlcmUgaXMgaXQgZGVmaW5lZCBhbmQgaW5pdGlhbGl6ZWQ/IEhvdyBpcyBpdCBtb2RpZmllZD8gSXMgdGhlcmUgYSBzcGlubG9jaywgbXV0ZXgsIG9yIFJDVSBtZWNoYW5pc20gZW1wbG95ZWQgZm9yIHN5bmNocm9uaXphdGlvbj8gQSBnbG9iYWwgYHNrYmAgcG9pbnRlciBzY3JlYW1zIGZvciBjb25jdXJyZW50IGFjY2VzcyBzY3J1dGlueS5cblxuVGhlIHVzZSBvZiBhIGdsb2JhbCBgc2tiYCBpcyBhbHNvIGEgYml0IHVudXN1YWwuIFVzdWFsbHksIHdlJ2QgcGFzcyB0aGUgYHNrX2J1ZmZgIGFyb3VuZCBmdW5jdGlvbiBhcmd1bWVudHMuIFBlcmhhcHMgaXTigJlzIGEgdGVtcG9yYXJ5IGJ1ZmZlciBmb3IgcmUtZW5jYXBzdWxhdGlvbiBvciBmcmFtZSBjb25zdHJ1Y3Rpb24gaW4gdGhlIEhTUiBwYXRoLiBJJ20gd29uZGVyaW5nIGlmIGl0J3MgYmVpbmcgdXNlZCBmb3IgaW50ZXItQ1BVIGNvbW11bmljYXRpb24sIG9yIGlmIHRoZSBmdW5jdGlvbiBpcyBqdXN0IHNoYXJpbmcgYSBidWZmZXIuXG5cbkkgbmVlZCB0byBkaXZlIGRlZXBlciBpbnRvIHRoZSBjb2RlIHVzaW5nIHRoaXMgdmFyaWFibGUsIEkgbmVlZCB0byBrbm93IGV4YWN0bHkgaG93IGl0IGlzIHVzZWQuIEkgYW0gbW9zdCBpbnRlcmVzdGVkIGluIGhvdyB0aGUgdmFyaWFibGUgaXMgc2hhcmVkIGFuZCBhY2Nlc3NlZCwgaXQgYWxsIGhpbmdlcyBvbiBjb3JyZWN0IHN5bmNocm9uaXphdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTU5OCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAwOjU4OjI4LjE0OTQxMTkzMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM4MDYxMjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHNyX2ZvcndhcmRfc2tiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9oc3IvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9oc3IvaHNyX2RldmljZS5jPTIyND1zdGF0aWMgbmV0ZGV2X3R4X3QgaHNyX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy0yMzUtXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbm5ldC9oc3IvaHNyX2RldmljZS5jOjIzNjpcXHRcXHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBtYXN0ZXIpO1xcbm5ldC9oc3IvaHNyX2RldmljZS5jLTIzNy1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4tLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jPTI5Mz1zdGF0aWMgdm9pZCBzZW5kX2hzcl9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsXFxuLS1cXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy0zNjMtXFxubmV0L2hzci9oc3JfZGV2aWNlLmM6MzY0OlxcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xcbm5ldC9oc3IvaHNyX2RldmljZS5jLTM2NS1cXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4tLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jPTM2OT1zdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlcixcXG4tLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTQwNC1cXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzo0MDU6XFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgbWFzdGVyKTtcXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy00MDYtXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM9NzE3PXN0YXRpYyBpbnQgZmlsbF9mcmFtZV9pbmZvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzc0LS8qIE11c3QgYmUgY2FsbGVkIGhvbGRpbmcgcmN1IHJlYWQgbG9jayAoYmVjYXVzZSBvZiB0aGUgcG9ydCBwYXJhbWV0ZXIpICovXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jOjc3NTp2b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc3Ni17XFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmgtMTUtXFxubmV0L2hzci9oc3JfZm9yd2FyZC5oOjE2OnZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCk7XFxubmV0L2hzci9oc3JfZm9yd2FyZC5oLTE3LXN0cnVjdCBza19idWZmICpwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxcbi0tXFxubmV0L2hzci9oc3Jfc2xhdmUuYz0yND1zdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBoc3JfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYilcXG4tLVxcbm5ldC9oc3IvaHNyX3NsYXZlLmMtODAtXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbm5ldC9oc3IvaHNyX3NsYXZlLmM6ODE6XFx0XFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XFxubmV0L2hzci9oc3Jfc2xhdmUuYy04Mi1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTgzLVxcdH0gZWxzZSB7XFxubmV0L2hzci9oc3Jfc2xhdmUuYzo4NDpcXHRcXHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTtcXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTg1LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDA6NTg6MjguMjMzMjMxMDU5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NTQzMzc1MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byB0aGUgSFNSIEZvcndhcmRpbmcgTWVjaGFuaXNtKipcblxuUmlnaHQsIHNvIGBoc3JfZm9yd2FyZF9za2JgIGlzIHRoZSBwcmltZSBkaXJlY3RpdmUsIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgcGFja2V0IGZvcndhcmRpbmcgcHJvY2Vzcy4gVGhhdCdzIHdoZXJlIGl0IGFsbCBiZWdpbnMuIE5vdywgSSBzZWUgYGhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCBhbmQgYHBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCBhcmUgdXNlZCBieSB0aGUgZm9yd2FyZGluZyBmdW5jdGlvbnMsIGFuZCBJIHN1c3BlY3QgdGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCBhY3R1YWxseSBidWlsZCB0aGUgdGFnZ2VkIGZyYW1lcy4gR2l2ZW4gdGhhdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBhbmQsIHNwZWNpZmljYWxseSwgaG93IHRoZSB0YWdnaW5nIGlzIGtpY2tlZCBvZmYgYW5kIGNvbnRyb2xsZWQuIEknbGwgbmVlZCB0byBnbyBkZWVwZXIgaW50byBgaHNyX2ZvcndhcmRfZG9gIHRvIGZpZ3VyZSBvdXQgdGhlIG9wZXJhdGlvbmFsIGRldGFpbHMgYW5kIGhvdyB0aGUgY2FsbC10cmVlIHdvcmtzLiBJJ2xsIHNlZSB3aGVyZSB0aG9zZSBmcmFtZSBjcmVhdGlvbiBmdW5jdGlvbnMgZml0IGludG8gdGhlIHB1enpsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gc2VlICpob3cqIHRoZXkncmUgY2FsbGVkIGZyb20gd2l0aGluIGBoc3JfZm9yd2FyZF9kb2AsIGxpa2VseSB0aHJvdWdoIHNvbWUgc29ydCBvZiBmdW5jdGlvbiBwb2ludGVyIG9yIG9wZXJhdGlvbiBzdHJ1Y3R1cmUuIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4NDIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwMDo1ODozMi42ODc1NzIwMDJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MzA0ODg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNyZWF0ZV90YWdnZWRfZnJhbWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2hzci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2hzci9oc3JfZGV2aWNlLmM9NjIxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaHNyX3Byb3RvX29wcyBoc3Jfb3BzID0ge1xcbm5ldC9oc3IvaHNyX2RldmljZS5jLTYyMi1cXHQuc2VuZF9zdl9mcmFtZSA9IHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lLFxcbm5ldC9oc3IvaHNyX2RldmljZS5jOjYyMzpcXHQuY3JlYXRlX3RhZ2dlZF9mcmFtZSA9IGhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lLFxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTYyNC1cXHQuZ2V0X3VudGFnZ2VkX2ZyYW1lID0gaHNyX2dldF91bnRhZ2dlZF9mcmFtZSxcXG4tLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jPTYzMT1zdGF0aWMgY29uc3Qgc3RydWN0IGhzcl9wcm90b19vcHMgcHJwX29wcyA9IHtcXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy02MzItXFx0LnNlbmRfc3ZfZnJhbWUgPSBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZSxcXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzo2MzM6XFx0LmNyZWF0ZV90YWdnZWRfZnJhbWUgPSBwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZSxcXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy02MzQtXFx0LmdldF91bnRhZ2dlZF9mcmFtZSA9IHBycF9nZXRfdW50YWdnZWRfZnJhbWUsXFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM9Mjg4PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqaHNyX2ZpbGxfdGFnKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtMzMwLSAqL1xcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzozMzE6c3RydWN0IHNrX2J1ZmYgKmhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTMzMi1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtMzg1LVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzozODY6c3RydWN0IHNrX2J1ZmYgKnBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTM4Ny1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM9NTYwPXN0YXRpYyB2b2lkIGhzcl9mb3J3YXJkX2RvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNjA4LVxcdFxcdCAgICBwb3J0LVxcdTAwM2V0eXBlID09IEhTUl9QVF9TTEFWRV9CKVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo2MDk6XFx0XFx0XFx0c2tiID0gaHNyLVxcdTAwM2Vwcm90b19vcHMtXFx1MDAzZWNyZWF0ZV90YWdnZWRfZnJhbWUoZnJhbWUsIHBvcnQpO1xcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy02MTAtXFx0XFx0ZWxzZVxcbi0tXFxubmV0L2hzci9oc3JfZm9yd2FyZC5oPTE2PXZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCk7XFxubmV0L2hzci9oc3JfZm9yd2FyZC5oOjE3OnN0cnVjdCBza19idWZmICpwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuaC0xOC1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpO1xcbm5ldC9oc3IvaHNyX2ZvcndhcmQuaDoxOTpzdHJ1Y3Qgc2tfYnVmZiAqaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmgtMjAtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGhzcl9wb3J0ICpwb3J0KTtcXG4tLVxcbm5ldC9oc3IvaHNyX21haW4uaD0xNjQ9c3RydWN0IGhzcl9wcm90b19vcHMge1xcbi0tXFxubmV0L2hzci9oc3JfbWFpbi5oLTE3Mi1cXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGhzcl9wb3J0ICpwb3J0KTtcXG5uZXQvaHNyL2hzcl9tYWluLmg6MTczOlxcdHN0cnVjdCBza19idWZmICogKCpjcmVhdGVfdGFnZ2VkX2ZyYW1lKShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxcbm5ldC9oc3IvaHNyX21haW4uaC0xNzQtXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGhzcl9wb3J0ICpwb3J0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDA6NTg6MzIuNzQxODgxNDExWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4MzM1MTQ5NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBIU1IgUGF0Y2ggYW5kIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldHMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gaGFuZGVkIHRoaXMgcGF0Y2ggYW5kIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYXR0YWNrIHN1cmZhY2UgYW5kIGhvdyB0byBhcHByb2FjaCBmdXp6aW5nIGl0LiBMZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgYGhzcl9mb3J3YXJkX3NrYmAgaXMgdGhlIGNlbnRyYWwgZnVuY3Rpb24gaGVyZS4gSXQncyB0aGUgcG9pbnQgd2hlcmUgcGFja2V0cyBmcm9tIGJvdGggdGhlIHNsYXZlIGFuZCBtYXN0ZXIgZGV2aWNlcyBjb252ZXJnZS4gYGhzcl9kZXZfeG1pdGAgaXMgdGhlIGBuZG9fc3RhcnRfeG1pdGAgZm9yIHRoZSBtYXN0ZXIsIGFuZCBgaHNyX2hhbmRsZV9mcmFtZWAgaXMgdGhlIGByeF9oYW5kbGVyYCBmb3IgdGhlIHNsYXZlcy4gVGhlc2UgYXJlIGFsbCBsaW5rZWQgdG9nZXRoZXI6IGBoc3JfZm9yd2FyZF9za2JgIGNhbGxzIGBoc3JfZGV2X3htaXRgIGFuZCBgaHNyX2hhbmRsZV9mcmFtZWAgdG8gZm9yd2FyZCBwYWNrZXRzLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIHRvdWNoZXMgYGhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCwgYHBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCwgYW5kIGBoc3JfeG1pdGAsIGFsbCByZWFjaGFibGUgdGhyb3VnaCB0aGUgY29yZSBvZiBgaHNyX2ZvcndhcmRfc2tiYC4gVGhpcyBpcyBhbGwgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBjYW4gc2V0IHVwIGFuIEhTUiBkZXZpY2UgYW5kIHN0YXJ0IHNlbmRpbmcgcGFja2V0cyB0byB0ZXN0IHRoaXMuIFRoZSByZWxldmFudCBjb25maWcgaXMgYENPTkZJR19IU1JgLiBHb29kLCBpdCdzIGEgdHJpc3RhdGUsIGFuZCB0aGF0J3MgdGhlIG9ubHkgb25lIG9mIGludGVyZXN0LCBpdCBzZWVtcy5cblxuV2FpdCwgSSBuZWVkIHRvIGNoZWNrIGBoc3JfeG1pdGAgbW9yZSBjYXJlZnVsbHkuIFRoZXJlJ3MgYSBuZXcgY2hlY2sgaW5zaWRlIGl0LiBTcGVjaWZpY2FsbHksIGluc2lkZSBgaHNyX3htaXRgLCB0aGVyZSdzIGEgbmV3IGNoZWNrIHdoZXJlIGlmIGBwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX0lOVEVSTElOS2AgYW5kIGEgc2V0IG9mIG90aGVyIGNvbmRpdGlvbnMgYXJlIHRydWUsIHRoZSBwYWNrZXQgaXMgZHJvcHBlZCB3aXRoIGBza2JfY293YC4gVGhpcyBjb3VsZCBiZSBpbnRlcmVzdGluZywgYW5kIGRlZmluaXRlbHkgc29tZXRoaW5nIEkgc2hvdWxkIGZvY3VzIG9uLiBUaGlzIHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gaW50ZXJsaW5rLWJvdW5kIFNLQnMuIFdlIHdhbnQgdG8gdGVzdCB0aGlzIGNvZGVwYXRoLiBcblxuSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucywgcGFydGljdWxhcmx5IHRoZSB2YXJpb3VzIGNhbGxpbmcgcmVsYXRpb25zaGlwcy4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYGhzcl9mb3J3YXJkX3NrYmAgaXMgZXhwb3J0ZWQgb3IgaWYgaXQncyBqdXN0IGdsb2JhbC5cblxuSSB3aWxsIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBwYWNrZXRzIGNhbiB0cmlnZ2VyIHRoYXQgY29kZXBhdGggZm9yIHRoZSBgaHNyX3htaXRgIGNoYW5nZXMgYW5kIGNyYWZ0IGludGVyZXN0aW5nIHRlc3QgY2FzZXMgdG8gZXhwbG9pdCBwb3RlbnRpYWwgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA4OCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwMDo1ODo0Mi41NzUzOTkzNzJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzNzA2MDY5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipoc3JfZm9yd2FyZF9za2JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2hzci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAwOjU4OjQyLjYzOTExNTg0MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDY0OTUxMjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBIU1IgTW9kdWxlIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgSFNSIG1vZHVsZSBhbmQganVzdCB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIGl0cyBpbnRlcm5hbCBzdHJ1Y3R1cmUuIEZyb20gd2hhdCBJIGNhbiBzZWUsIGEgZmV3IHRoaW5ncyBhcmUgaW1tZWRpYXRlbHkgY2xlYXIgYWJvdXQgc2NvcGU6IGBoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZWAgYW5kIGBwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZWAgc2VlbSB0byBiZSBnbG9iYWxseSBhY2Nlc3NpYmxlIHdpdGhpbiB0aGUgbW9kdWxlLCB3aGlsZSB0aGUgb3RoZXIgZnVuY3Rpb25zIG1lbnRpb25lZCBhcmUgc2NvcGVkIHdpdGhpbiB0aGUgbW9kdWxlOiBgaHNyYFxuXG5UaGUgbW9yZSBpbnRlcmVzdGluZyBjYXNlIGludm9sdmVzIGBoc3JfZGV2X3htaXRgIGFuZCBgaHNyX2hhbmRsZV9mcmFtZWAsIGFuZCBzaW5jZSB0aG9zZSBhcmUgc3RhdGljLCB0aGV5IGhhdmUgdG8gYmUgaW1wb3J0YW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24gYXQgdGhlIGVudHJ5IHBvaW50cyBmb3IgdGhlIEhTUiBkcml2ZXIuIFRoZXkgbG9vayBsaWtlIHByaW1lIGNhbmRpZGF0ZXMgZm9yIGRlZXBlciBpbnZlc3RpZ2F0aW9uLlxuXG5BaCwgcmlnaHQsIGBoc3JfZGV2X3htaXRgIGlzIHRoZSBgbmRvX3N0YXJ0X3htaXRgIGZ1bmN0aW9uLCB0aGUgbGlrZWx5IHRyYW5zbWlzc2lvbiBlbnRyeSBwb2ludC4gQW5kIGBoc3JfaGFuZGxlX2ZyYW1lYCBpcyB0aGUgYHJ4X2hhbmRsZXJgLCBzbyB0aGF0J3MgdGhlIHJlY2VpdmUgcGF0aC4gWWVwLCB0aGVzZSBhcmUgZGVmaW5pdGVseSBnb29kIGZvY3VzIHN5bWJvbHMgZm9yIG15IGFuYWx5c2lzLlxuXG5Ob3cgSSBzaG91bGQgcHJvYmFibHkgcXVpY2tseSBjaGVjayBpZiBJJ3ZlIG1pc3NlZCBhbnkgb3RoZXIgZW50cnkgcG9pbnRzLiBHb3R0YSBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzMjUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDA6NTg6NDguMTA0MDcwNjU4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDcxMjEyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoc3JfZGV2X3htaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2hzci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2hzci9oc3JfZGV2aWNlLmM9MjE2PXN0YXRpYyBuZXRkZXZfZmVhdHVyZXNfdCBoc3JfZml4X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy0yMjMtXFxubmV0L2hzci9oc3JfZGV2aWNlLmM6MjI0OnN0YXRpYyBuZXRkZXZfdHhfdCBoc3JfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy0yMjUte1xcbi0tXFxubmV0L2hzci9oc3JfZGV2aWNlLmM9NjA1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaHNyX2RldmljZV9vcHMgPSB7XFxuLS1cXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy02MDgtXFx0Lm5kb19zdG9wID0gaHNyX2Rldl9jbG9zZSxcXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzo2MDk6XFx0Lm5kb19zdGFydF94bWl0ID0gaHNyX2Rldl94bWl0LFxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTYxMC1cXHQubmRvX2NoYW5nZV9yeF9mbGFncyA9IGhzcl9jaGFuZ2VfcnhfZmxhZ3MsXFxuLS1cXG5uZXQvaHNyL2hzcl9kZXZpY2UuYz02NzE9Ym9vbCBpc19oc3JfbWFzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2hzci9oc3JfZGV2aWNlLmMtNjcyLXtcXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzo2NzM6XFx0cmV0dXJuIChkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19zdGFydF94bWl0ID09IGhzcl9kZXZfeG1pdCk7XFxubmV0L2hzci9oc3JfZGV2aWNlLmMtNjc0LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDA6NTg6NDguMTU4NzkxOTQ3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5Mzk0NTU4NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIHRoZSBIU1IgRGV2aWNlIFRyYW5zbWlzc2lvbioqXG5cbkFscmlnaHQsIHNvIGBoc3JfZGV2X3htaXRgLi4uIHllcCwgdGhhdCdzIGl0LiBUaGF0J3MgdGhlIGZ1bmN0aW9uIHRoZSBIU1IgZGV2aWNlIHVzZXMgYXMgaXRzIGBuZG9fc3RhcnRfeG1pdGAuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0IGhhbmRsZXMgaW5kaXZpZHVhbCBmcmFtZXMuIFRvIGRvIHRoYXQsIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IHRoZSBgaHNyX2hhbmRsZV9mcmFtZWAgZnVuY3Rpb24uIEkgd2FudCB0byBzZWUgaG93IHRoZSBkZXZpY2UgcHJvY2Vzc2VzIGFuZCBtYW5hZ2VzIHRoZSBmcmFtZXMuIFRoaXMgd2lsbCByZWFsbHkgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIHRyYW5zbWlzc2lvbiBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxNTQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwMDo1ODo1Mi4wOTgyNTA2NjdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNjU2MDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhzcl9oYW5kbGVfZnJhbWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2hzci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2hzci9oc3JfZGV2aWNlLmM9NzIwPWludCBoc3JfZGV2X2ZpbmFsaXplKHN0cnVjdCBuZXRfZGV2aWNlICpoc3JfZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVbMl0sXFxuLS1cXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy03NDYtXFxubmV0L2hzci9oc3JfZGV2aWNlLmM6NzQ3OlxcdC8qIE1ha2Ugc3VyZSB3ZSByZWNvZ25pemUgZnJhbWVzIGZyb20gb3Vyc2VsdmVzIGluIGhzcl9oYW5kbGVfZnJhbWUoKSAqL1xcbm5ldC9oc3IvaHNyX2RldmljZS5jLTc0OC1cXHRyZXMgPSBoc3JfY3JlYXRlX3NlbGZfbm9kZShoc3IsIGhzcl9kZXYtXFx1MDAzZWRldl9hZGRyLFxcbi0tXFxubmV0L2hzci9oc3JfZnJhbWVyZWcuYz02Nj1ib29sIGhzcl9pc19ub2RlX2luX2RiKHN0cnVjdCBsaXN0X2hlYWQgKm5vZGVfZGIsXFxuLS1cXG5uZXQvaHNyL2hzcl9mcmFtZXJlZy5jLTcxLVxcbm5ldC9oc3IvaHNyX2ZyYW1lcmVnLmM6NzI6LyogSGVscGVyIGZvciBkZXZpY2UgaW5pdDsgdGhlIHNlbGZfbm9kZSBpcyB1c2VkIGluIGhzcl9oYW5kbGVfZnJhbWUoKSB0b1xcbm5ldC9oc3IvaHNyX2ZyYW1lcmVnLmMtNzMtICogcmVjb2duaXplIGZyYW1lcyBmcm9tIHNlbGYgdGhhdCdzIGJlZW4gbG9vcGVkIG92ZXIgdGhlIEhTUiByaW5nLlxcbi0tXFxubmV0L2hzci9oc3JfbWFpbi5jPTMxPXN0YXRpYyBpbnQgaHNyX25ldGRldl9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBldmVudCxcXG4tLVxcbm5ldC9oc3IvaHNyX21haW4uYy05MS1cXG5uZXQvaHNyL2hzcl9tYWluLmM6OTI6XFx0XFx0LyogTWFrZSBzdXJlIHdlIHJlY29nbml6ZSBmcmFtZXMgZnJvbSBvdXJzZWx2ZXMgaW4gaHNyX2hhbmRsZV9mcmFtZSgpICovXFxubmV0L2hzci9oc3JfbWFpbi5jLTkzLVxcdFxcdHBvcnQgPSBoc3JfcG9ydF9nZXRfaHNyKGhzciwgSFNSX1BUX1NMQVZFX0IpO1xcbi0tXFxubmV0L2hzci9oc3Jfc2xhdmUuYz0xOT1ib29sIGhzcl9pbnZhbGlkX2Rhbl9pbmdyZXNzX2ZyYW1lKF9fYmUxNiBwcm90b2NvbClcXG4tLVxcbm5ldC9oc3IvaHNyX3NsYXZlLmMtMjMtXFxubmV0L2hzci9oc3Jfc2xhdmUuYzoyNDpzdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBoc3JfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYilcXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTI1LXtcXG4tLVxcbm5ldC9oc3IvaHNyX3NsYXZlLmM9OTQ9Ym9vbCBoc3JfcG9ydF9leGlzdHMoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTk1LXtcXG5uZXQvaHNyL2hzcl9zbGF2ZS5jOjk2OlxcdHJldHVybiByY3VfYWNjZXNzX3BvaW50ZXIoZGV2LVxcdTAwM2VyeF9oYW5kbGVyKSA9PSBoc3JfaGFuZGxlX2ZyYW1lO1xcbm5ldC9oc3IvaHNyX3NsYXZlLmMtOTctfVxcbi0tXFxubmV0L2hzci9oc3Jfc2xhdmUuYz0xNDE9c3RhdGljIGludCBoc3JfcG9ydGRldl9zZXR1cChzdHJ1Y3QgaHNyX3ByaXYgKmhzciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9oc3IvaHNyX3NsYXZlLmMtMTY4LVxcbm5ldC9oc3IvaHNyX3NsYXZlLmM6MTY5OlxcdHJlcyA9IG5ldGRldl9yeF9oYW5kbGVyX3JlZ2lzdGVyKGRldiwgaHNyX2hhbmRsZV9mcmFtZSwgcG9ydCk7XFxubmV0L2hzci9oc3Jfc2xhdmUuYy0xNzAtXFx0aWYgKHJlcylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDA6NTg6NTIuMTUwOTEwOTU2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4MzgxNDU4MjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgQW5hbHlzaXM6IEhTUiBTaGFyZWQtTXV0YXRpb24gQnVnIEZpeCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCB5ZXMsIGBoc3JfaGFuZGxlX2ZyYW1lYCBpcyB0aGUgcmVjZWl2ZSBoYW5kbGVyIGZvciB0aGUgc2xhdmUgSFNSIGRldmljZXMuIFRoYXQncyBhIGtleSBmdW5jdGlvbi4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgZml4LCBteSBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGVzZSBzeW1ib2xzOiBgaHNyX2Rldl94bWl0YCwgYGhzcl9oYW5kbGVfZnJhbWVgLCBgaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWVgLCBgcHJwX2NyZWF0ZV90YWdnZWRfZnJhbWVgLCBhbmQgYGhzcl9mb3J3YXJkX3NrYmAuIFRoZXNlIGZ1bmN0aW9ucyBzZWVtIGNlbnRyYWwgdG8gdGhlIHByb2JsZW0uXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24uIEl0IGxvb2tzIGxpa2UgaXQganVzdCByZXF1aXJlcyBgSFNSYC4gR29vZC4gSSdsbCBtYWtlIHN1cmUgdG8gbm90ZSB0aGF0LlxuXG5BaGEhIFRoZXJlJ3MgYWxzbyBhIG1vZGlmaWNhdGlvbiB0byBhIHNlbGZ0ZXN0IHNjcmlwdCAoYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX3NoYXJlZF9tdXRhdGlvbi5zaGApLiBUaGF0J3Mgbm90IHRoZSB0YXJnZXQuIFdoaWxlIGl0J3MgZ29vZCB0aGUgc2VsZiB0ZXN0IGlzIGluY2x1ZGVkIGl0IGRvZXMgbm90IG5lZWQgdG8gYmUgZnV6emVkLiBUaGUgcmVhbCBrZXJuZWwgY2hhbmdlcyBhcmUgaW4gYG5ldC9oc3IvaHNyX2ZvcndhcmQuY2AsIGFuZCB0aG9zZSBhcmUgd2hhdCBJJ20gaW50ZXJlc3RlZCBpbiBmdXp6aW5nLlxuXG5Ob3csIGxldCdzIHRoaW5rIGFib3V0ICp3aHkqIHRoaXMgaXMgZnV6emFibGUuIFRoZSBwYXRjaCBhZGRyZXNzZXMgYSBzaGFyZWQtbXV0YXRpb24gYnVnIGluIEhTUi9QUlAgd2hlcmUgY2xvbmVkIGBza2JgcyB3ZXJlIGJlaW5nIGRpcmVjdGx5IG1vZGlmaWVkIHdpdGhvdXQgcHJvcGVyIGNvcHktb24td3JpdGUgbWVjaGFuaXNtcyAoYHNrYl9jb3dgIG9yIGBza2JfY29weWApLiBUaGlzIHdvdWxkIGNvcnJ1cHQgdGhlIG9yaWdpbmFsIHNoYXJlZCBkYXRhLiBUaGUgZml4IGludm9sdmVzIGFkZGluZyBgc2tiX2Nvdyhza2IsIDApYCBiZWZvcmUgbW9kaWZ5aW5nIHRoZSBjbG9uZWQgYHNrYmAgaW4gZnVuY3Rpb25zIGxpa2UgYGhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCwgYHBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCwgYW5kIGBoc3JfeG1pdGAuIFRoZXNlIGZ1bmN0aW9ucywgY3J1Y2lhbGx5LCBhcmUgcmVhY2hhYmxlIGZyb20gYGhzcl9mb3J3YXJkX3NrYmAsIHdoaWNoIGluIHR1cm4gaXMgcmVhY2hhYmxlIHRocm91Z2ggYGhzcl9kZXZfeG1pdGAgYW5kIGBoc3JfaGFuZGxlX2ZyYW1lYC4gSSBjYW4gZGVmaW5pdGVseSBzZWUgdGhpcyBiZWluZyB0cmlnZ2VyZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gU2V0dGluZyB1cCBhbiBIU1IgZGV2aWNlIGFuZCBzZW5kaW5nIHBhY2tldHMgdGhyb3VnaCBpdCBzZWVtcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIHdheSB0byB0ZXN0IHRoaXMuXG5cbkFscmlnaHQsIGxldCdzIGRvY3VtZW50IG15IGZpbmRpbmdzIGNvbmNpc2VseTpcblxuKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWVcbiogICAqKkZvY3VzU3ltYm9sczoqKiBgaHNyX2Rldl94bWl0YCwgYGhzcl9oYW5kbGVfZnJhbWVgLCBgaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWVgLCBgcHJwX2NyZWF0ZV90YWdnZWRfZnJhbWVgLCBgaHNyX2ZvcndhcmRfc2tiYFxuKiAgICoqRW5hYmxlQ29uZmlnczoqKiBgSFNSYFxuKiAgICoqUmVhc29uaW5nOioqIFRoZSBwYXRjaCBhZGRzIGBza2JfY293YCBiZWZvcmUgbXV0YXRpbmcgY2xvbmVkIHNrYnMgdG8gZml4IGEgc2hhcmVkLW11dGF0aW9uIGJ1ZyBpbiBIU1IvUFJQLiBDb3JlIHBhY2tldCBmb3J3YXJkaW5nIGZ1bmN0aW9ucyBpbiBIU1IgZHJpdmVyIHJlYWNoYWJsZSB2aWEgYGhzcl9kZXZfeG1pdGAgKG1hc3RlciBUWCkgYW5kIGBoc3JfaGFuZGxlX2ZyYW1lYCAoc2xhdmUgUlgpLiBGdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxMDYsIk91dHB1dFRva2VucyI6MTk2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAwOjU5OjEwLjUzMjM3MTM1N1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzY0MTQ2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFNSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHNyX2Rldl94bWl0XCIsXG4gICAgXCJoc3JfaGFuZGxlX2ZyYW1lXCIsXG4gICAgXCJoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZVwiLFxuICAgIFwicHJwX2NyZWF0ZV90YWdnZWRfZnJhbWVcIixcbiAgICBcImhzcl9mb3J3YXJkX3NrYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgc2hhcmVkLW11dGF0aW9uIGJ1ZyBpbiBIU1IvUFJQIGJ5IGFkZGluZyBgc2tiX2Nvd2AgYmVmb3JlIG1vZGlmeWluZyBjbG9uZWQgc2ticyBpbiBgaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWVgLCBgcHJwX2NyZWF0ZV90YWdnZWRfZnJhbWVgLCBhbmQgYGhzcl94bWl0YC4gVGhlc2UgYXJlIGNvcmUgcGFja2V0IGZvcndhcmRpbmcgZnVuY3Rpb25zIGluIHRoZSBIU1IgZHJpdmVyLCByZWFjaGFibGUgdmlhIGBoc3JfZGV2X3htaXRgIChtYXN0ZXIgZGV2aWNlIFRYKSBhbmQgYGhzcl9oYW5kbGVfZnJhbWVgIChzbGF2ZSBkZXZpY2UgUlgpLiBUaGUgY29kZSBpcyBmdWxseSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIU1JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoc3JfZGV2X3htaXRcIixcbiAgICBcImhzcl9oYW5kbGVfZnJhbWVcIixcbiAgICBcImhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lXCIsXG4gICAgXCJwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZVwiLFxuICAgIFwiaHNyX2ZvcndhcmRfc2tiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBzaGFyZWQtbXV0YXRpb24gYnVnIGluIEhTUi9QUlAgYnkgYWRkaW5nIGBza2JfY293YCBiZWZvcmUgbW9kaWZ5aW5nIGNsb25lZCBza2JzIGluIGBoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZWAsIGBwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZWAsIGFuZCBgaHNyX3htaXRgLiBUaGVzZSBhcmUgY29yZSBwYWNrZXQgZm9yd2FyZGluZyBmdW5jdGlvbnMgaW4gdGhlIEhTUiBkcml2ZXIsIHJlYWNoYWJsZSB2aWEgYGhzcl9kZXZfeG1pdGAgKG1hc3RlciBkZXZpY2UgVFgpIGFuZCBgaHNyX2hhbmRsZV9mcmFtZWAgKHNsYXZlIGRldmljZSBSWCkuIFRoZSBjb2RlIGlzIGZ1bGx5IGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow42hb5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-03 00:56:32 +0000 UTC FinishedAt: 2026-08-03 00:59:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "2195424c3da2ef1829a63b807e3a900a90e57d85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HSR" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "2195424c3da2ef1829a63b807e3a900a90e57d85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HSR" ], "series_id": "3611eda0-17ee-45db-a836-d14851ee2904" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "hsr_dev_xmit", "hsr_handle_frame", "hsr_create_tagged_frame", "prp_create_tagged_frame", "hsr_forward_skb" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAzIDAwOjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hTUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hzcl9kZXZfeG1pdCYjMzQ7LAogICAgJiMzNDtoc3JfaGFuZGxlX2ZyYW1lJiMzNDssCiAgICAmIzM0O2hzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lJiMzNDssCiAgICAmIzM0O3BycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lJiMzNDssCiAgICAmIzM0O2hzcl9mb3J3YXJkX3NrYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHNoYXJlZC1tdXRhdGlvbiBidWcgaW4gSFNSL1BSUCBieSBhZGRpbmcgYHNrYl9jb3dgIGJlZm9yZSBtb2RpZnlpbmcgY2xvbmVkIHNrYnMgaW4gYGhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCwgYHBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCwgYW5kIGBoc3JfeG1pdGAuIFRoZXNlIGFyZSBjb3JlIHBhY2tldCBmb3J3YXJkaW5nIGZ1bmN0aW9ucyBpbiB0aGUgSFNSIGRyaXZlciwgcmVhY2hhYmxlIHZpYSBgaHNyX2Rldl94bWl0YCAobWFzdGVyIGRldmljZSBUWCkgYW5kIGBoc3JfaGFuZGxlX2ZyYW1lYCAoc2xhdmUgZGV2aWNlIFJYKS4gVGhlIGNvZGUgaXMgZnVsbHkgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDA6NTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyNTgwOTUxYTk2NzI1ZGNhMGRmOGRkMjMzOWJmNmVmZjdkNjI3ZjdjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMyAwMDo1Nzo1OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmMgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcbmluZGV4IDA3NzQ5ODFhNjVjMTYuLjk3NGI1NWYyNDg4MjEgMTAwNjQ0XG4tLS0gYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xuQEAgLTMzNiwxMiAmIzQzOzMzNiwyNCBAQCBzdHJ1Y3Qgc2tfYnVmZiAqaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcbiBcdGludCBtb3ZlbGVuO1xuIFxuIFx0aWYgKGZyYW1lLVx1MDAzZXNrYl9oc3IpIHtcbi1cdFx0c3RydWN0IGhzcl9ldGhoZHIgKmhzcl9ldGhoZHIgPVxuLVx0XHRcdChzdHJ1Y3QgaHNyX2V0aGhkciAqKXNrYl9tYWNfaGVhZGVyKGZyYW1lLVx1MDAzZXNrYl9oc3IpO1xuJiM0MztcdFx0c3RydWN0IGhzcl9ldGhoZHIgKmhzcl9ldGhoZHI7XG4mIzQzO1xuJiM0MztcdFx0LyogVGhlIG9yaWdpbmFsIHNrYiBkYXRhIG1heSBiZSBzaGFyZWQgd2l0aCBhbm90aGVyIGVncmVzc1xuJiM0MztcdFx0ICogY2xvbmUuIE1ha2UgdGhlIGNsb25lIGRhdGEgcHJpdmF0ZSBiZWZvcmUgdXBkYXRpbmcgdGhlXG4mIzQzO1x0XHQgKiBwYXRoIGlkIHNvIHRoZSB1cGRhdGUgY2Fubm90IGNvcnJ1cHQgdGhlIG90aGVyIGNvcHkuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHNrYiA9IHNrYl9jbG9uZShmcmFtZS1cdTAwM2Vza2JfaHNyLCBHRlBfQVRPTUlDKTtcbiYjNDM7XHRcdGlmICghc2tiKVxuJiM0MztcdFx0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRcdGlmIChza2JfY293KHNrYiwgMCkpIHtcbiYjNDM7XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdFx0fVxuIFxuIFx0XHQvKiBzZXQgdGhlIGxhbmUgaWQgcHJvcGVybHkgKi9cbiYjNDM7XHRcdGhzcl9ldGhoZHIgPSAoc3RydWN0IGhzcl9ldGhoZHIgKilza2JfbWFjX2hlYWRlcihza2IpO1xuIFx0XHRoc3Jfc2V0X3BhdGhfaWQoZnJhbWUsIGhzcl9ldGhoZHIsIHBvcnQpO1xuLVx0XHRyZXR1cm4gc2tiX2Nsb25lKGZyYW1lLVx1MDAzZXNrYl9oc3IsIEdGUF9BVE9NSUMpO1xuJiM0MztcdFx0cmV0dXJuIHNrYjtcbiBcdH0gZWxzZSBpZiAocG9ydC1cdTAwM2VkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfSFdfSFNSX1RBR19JTlMpIHtcbiBcdFx0cmV0dXJuIHNrYl9jbG9uZShmcmFtZS1cdTAwM2Vza2Jfc3RkLCBHRlBfQVRPTUlDKTtcbiBcdH1cbkBAIC0zNzcsMTUgJiM0MzszODksMjggQEAgc3RydWN0IHNrX2J1ZmYgKnBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFxuIFx0aWYgKGZyYW1lLVx1MDAzZXNrYl9wcnApIHtcbi1cdFx0c3RydWN0IHBycF9yY3QgKnRyYWlsZXIgPSBza2JfZ2V0X1BSUF9yY3QoZnJhbWUtXHUwMDNlc2tiX3BycCk7XG4mIzQzO1x0XHRzdHJ1Y3QgcHJwX3JjdCAqdHJhaWxlcjtcbiBcbiYjNDM7XHRcdC8qIFNhbWUgc2hhcmluZyBoYXphcmQgYXMgYWJvdmU6IHByaXZhdGl6ZSB0aGUgY2xvbmUgZGF0YVxuJiM0MztcdFx0ICogYmVmb3JlIHVwZGF0aW5nIHRoZSBMQU4gaWQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHNrYiA9IHNrYl9jbG9uZShmcmFtZS1cdTAwM2Vza2JfcHJwLCBHRlBfQVRPTUlDKTtcbiYjNDM7XHRcdGlmICghc2tiKVxuJiM0MztcdFx0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRcdGlmIChza2JfY293KHNrYiwgMCkpIHtcbiYjNDM7XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHRyYWlsZXIgPSBza2JfZ2V0X1BSUF9yY3Qoc2tiKTtcbiBcdFx0aWYgKHRyYWlsZXIpIHtcbiBcdFx0XHRwcnBfc2V0X2xhbl9pZCh0cmFpbGVyLCBwb3J0KTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRXQVJOX09OQ0UoIXRyYWlsZXIsIFwmIzM0O2Vycm9yZWQgUFJQIHNrYlwmIzM0Oyk7XG4mIzQzO1x0XHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRcdHJldHVybiBOVUxMO1xuIFx0XHR9XG4tXHRcdHJldHVybiBza2JfY2xvbmUoZnJhbWUtXHUwMDNlc2tiX3BycCwgR0ZQX0FUT01JQyk7XG4mIzQzO1x0XHRyZXR1cm4gc2tiO1xuIFx0fSBlbHNlIGlmIChwb3J0LVx1MDAzZWRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19IU1JfVEFHX0lOUykge1xuIFx0XHRyZXR1cm4gc2tiX2Nsb25lKGZyYW1lLVx1MDAzZXNrYl9zdGQsIEdGUF9BVE9NSUMpO1xuIFx0fVxuQEAgLTQyMCw2ICYjNDM7NDQ1LDIyIEBAIHN0YXRpYyB2b2lkIGhzcl9kZWxpdmVyX21hc3RlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIHN0YXRpYyBpbnQgaHNyX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0LFxuIFx0XHQgICAgc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcbiB7XG4mIzQzO1x0LyogQW4gaW50ZXJsaW5rLWJvdW5kIHNrYiBmcm9tIGdldF91bnRhZ2dlZF9mcmFtZSgpIGNhbiBzdGlsbCBhbGlhc1xuJiM0MztcdCAqIGFub3RoZXIgbGl2ZSBjb25zdW1lcjogZm9yIG1hc3Rlci1vcmlnaW5hdGVkIGZyYW1lcyB0aGUgY2xvbmVcbiYjNDM7XHQgKiBzaGFyZXMgdGhlIG9yaWdpbmFsIFRYIHNrYiAod2hpY2ggdGFwcyBvciB0aGUgVFggcGF0aCBtYXkgc3RpbGxcbiYjNDM7XHQgKiBob2xkKTsgZm9yIHJpbmcgZnJhbWVzIHRoZSBtYXN0ZXIgYWxzbyBjb25zdW1lcyB0aGVtIHdoZW4gdGhleVxuJiM0MztcdCAqIGFyZSBkZXN0aW5lZCB0byB0aGUgbG9jYWwgbm9kZSB3aXRob3V0IGJlaW5nIGV4Y2x1c2l2ZSB0byBpdC5cbiYjNDM7XHQgKiBQcml2YXRpemUgYmVmb3JlIGFueSBhZGRyZXNzIG11dGF0aW9uLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX0lOVEVSTElOSyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgKGZyYW1lLVx1MDAzZXBvcnRfcmN2LVx1MDAzZXR5cGUgPT0gSFNSX1BUX01BU1RFUiB8fFxuJiM0MztcdCAgICAgKGZyYW1lLVx1MDAzZWlzX2xvY2FsX2Rlc3QgXHUwMDI2XHUwMDI2ICFmcmFtZS1cdTAwM2Vpc19sb2NhbF9leGNsdXNpdmUpKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgc2tiX2Nvdyhza2IsIDApKSB7XG4mIzQzO1x0XHRmcmFtZS1cdTAwM2Vwb3J0X3Jjdi1cdTAwM2VkZXYtXHUwMDNlc3RhdHMucnhfZHJvcHBlZCYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRcdHJldHVybiBORVRfWE1JVF9EUk9QO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAoZnJhbWUtXHUwMDNlcG9ydF9yY3YtXHUwMDNldHlwZSA9PSBIU1JfUFRfTUFTVEVSKSB7XG4gXHRcdGhzcl9hZGRyX3N1YnN0X2Rlc3QoZnJhbWUtXHUwMDNlbm9kZV9zcmMsIHNrYiwgcG9ydCk7XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGVcbmluZGV4IDMxZmI5MzI2Y2Y1MzMuLjg3ZmUzNDk1MWI4YjAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG5AQCAtNSw2ICYjNDM7NSw3IEBAIHRvcF9zcmNkaXIgPSAuLi8uLi8uLi8uLi8uLlxuIFRFU1RfUFJPR1MgOj0gXFxcbiBcdGhzcl9waW5nLnNoIFxcXG4gXHRoc3JfcmVkYm94LnNoIFxcXG4mIzQzO1x0aHNyX3NoYXJlZF9tdXRhdGlvbi5zaCBcXFxuIFx0bGlua19mYXVsdHMuc2ggXFxcbiBcdHBycF9waW5nLnNoIFxcXG4gIyBlbmQgb2YgVEVTVF9QUk9HU1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX3NoYXJlZF9tdXRhdGlvbi5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX3NoYXJlZF9tdXRhdGlvbi5zaFxubmV3IGZpbGUgbW9kZSAxMDA3NTVcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjA1ZTdlODAzZDI4Njdcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX3NoYXJlZF9tdXRhdGlvbi5zaFxuQEAgLTAsMCAmIzQzOzEsMjIzIEBAXG4mIzQzOyMhL2Jpbi9iYXNoXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I1xuJiM0MzsjIFZlcmlmeSB0aGF0IHBlci1lZ3Jlc3MgbXV0YXRpb25zIG9mIHNoYXJlZCBza2IgZGF0YSBhcmUgcHJpdmF0ZTpcbiYjNDM7I1xuJiM0MzsjIEYyIChwYXRoL0xBTiBJRCk6IG9uIGFuIGFmZmVjdGVkIGtlcm5lbCB0aGUgc2Vjb25kIHNsYXZlJiMzOTtzIExBTi1JRCB3cml0ZVxuJiM0MzsjIGxhbmRzIGluIHRoZSBmaXJzdCBzbGF2ZSYjMzk7cyBzdGlsbC1xdWV1ZWQgY2xvbmU7IHdpdGggYSBuZXRlbSBkZWxheSBvblxuJiM0MzsjIHNsYXZlIEEsIGluamVjdGVkIGZyYW1lcyBsZWF2ZSBBIGNhcnJ5aW5nIEImIzM5O3MgTEFOIElELlxuJiM0MzsjXG4mIzQzOyMgRjEgKFJlZEJveCBzb3VyY2UgTUFDKTogb24gYW4gYWZmZWN0ZWQga2VybmVsIGFuIEhTUi10YWdnZWQgbXVsdGljYXN0XG4mIzQzOyMgZnJhbWUgcmVjZWl2ZWQgb24gYSBSZWRCb3ggc2xhdmUgaXMgY2xvbmVkIGZvciBtYXN0ZXIgYW5kIGludGVybGluayxcbiYjNDM7IyBhbmQgdGhlIGludGVybGluayYjMzk7cyBSZWRCb3gtTUFDIHJld3JpdGUgbGFuZHMgaW4gdGhlIG1hc3RlciBjbG9uZSYjMzk7c1xuJiM0MzsjIGJ1ZmZlciwgc28gdGhlIGxvY2FsIHN0YWNrIHJlY2VpdmVzIHRoZSBSZWRCb3ggTUFDIGluc3RlYWQgb2YgdGhlXG4mIzQzOyMgb3JpZ2luYXRpbmcgbm9kZSYjMzk7cyBNQUMuXG4mIzQzO1xuJiM0MztpcHY2PWZhbHNlXG4mIzQzO1xuJiM0Mztzb3VyY2UgLi9oc3JfY29tbW9uLnNoXG4mIzQzO1xuJiM0MztEVVI9NVxuJiM0MztcbiYjNDM7cmVxdWlyZSgpXG4mIzQzO3tcbiYjNDM7XHRjb21tYW5kIC12IFwmIzM0OyQxXCYjMzQ7IFx1MDAzZS9kZXYvbnVsbCAyXHUwMDNlXHUwMDI2MSBcdTAwMjZcdTAwMjYgcmV0dXJuIDBcbiYjNDM7XHRlY2hvIFwmIzM0O1NLSVA6ICQxIG5vdCBhdmFpbGFibGVcJiMzNDtcbiYjNDM7XHRleGl0ICRrc2Z0X3NraXBcbiYjNDM7fVxuJiM0MztcbiYjNDM7cmVxdWlyZSBpcFxuJiM0MztyZXF1aXJlIHRjXG4mIzQzO3JlcXVpcmUgcHl0aG9uM1xuJiM0MztcbiYjNDM7dHJhcCBjbGVhbnVwX2FsbF9ucyBFWElUXG4mIzQzO1xuJiM0MzsjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRjI6IExBTi1JRCBpc29sYXRpb25cbiYjNDM7IyBQUlAgREFOUCAocHJvdG8gMSksIEFGX1BBQ0tFVCBwcmUtdGFnZ2VkIGluamVjdGlvbiwgbmV0ZW0gb24gc2xhdmUgQS5cbiYjNDM7cnVuX2YyKClcbiYjNDM7e1xuJiM0MztcdHNldHVwX25zIG5zIDJcdTAwM2UvZGV2L251bGwgfHwgcmV0dXJuICRrc2Z0X3NraXBcbiYjNDM7XHRuc3goKSB7IGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JG5zXCYjMzQ7IFwmIzM0OyRAXCYjMzQ7OyB9XG4mIzQzO1xuJiM0MztcdCMgUHJvYmUgc2NoX25ldGVtIGluc2lkZSB0aGUgZGlzcG9zYWJsZSBuYW1lc3BhY2Ugb25seS5cbiYjNDM7XHRpZiAhIG5zeCB0YyBxZGlzYyBhZGQgZGV2IGxvIHJvb3QgbmV0ZW0gZGVsYXkgMW1zIDJcdTAwM2UvZGV2L251bGw7IHRoZW5cbiYjNDM7XHRcdGVjaG8gXCYjMzQ7U0tJUDogc2NoX25ldGVtIG5vdCBhdmFpbGFibGVcJiMzNDtcbiYjNDM7XHRcdHJldHVybiAka3NmdF9za2lwXG4mIzQzO1x0ZmlcbiYjNDM7XHRuc3ggdGMgcWRpc2MgZGVsIGRldiBsbyByb290IDJcdTAwM2UvZGV2L251bGxcbiYjNDM7XG4mIzQzO1x0IyBDYXBhYmlsaXR5IHByb2JlcyBlbmQgaGVyZTsgc2V0dXAgb3IgcnVudGltZSBmYWlsdXJlIGJlbG93IGlzIEZBSUwuXG4mIzQzO1x0bnN4IGlwIGxpbmsgYWRkIHZBIHR5cGUgdmV0aCBwZWVyIG5hbWUgdkFwIHx8XG4mIzQzO1x0XHR7IGVjaG8gXCYjMzQ7RkFJTDogdmV0aCBBXCYjMzQ7OyByZXR1cm4gMTsgfVxuJiM0MztcdG5zeCBpcCBsaW5rIGFkZCB2QiB0eXBlIHZldGggcGVlciBuYW1lIHZCcCB8fFxuJiM0MztcdFx0eyBlY2hvIFwmIzM0O0ZBSUw6IHZldGggQlwmIzM0OzsgcmV0dXJuIDE7IH1cbiYjNDM7XHRmb3IgaSBpbiB2QSB2QiB2QXAgdkJwOyBkb1xuJiM0MztcdFx0bnN4IGlwIGxpbmsgc2V0IFwmIzM0OyRpXCYjMzQ7IHVwIHx8IHsgZWNobyBcJiMzNDtGQUlMOiAkaSB1cFwmIzM0OzsgcmV0dXJuIDE7IH1cbiYjNDM7XHRkb25lXG4mIzQzO1x0aWYgISBuc3ggaXAgbGluayBhZGQgbmFtZSBwcnAwIHR5cGUgaHNyIHNsYXZlMSB2QSBzbGF2ZTIgdkIgXFxcbiYjNDM7XHRcdHN1cGVydmlzaW9uIDQ1IHByb3RvIDEgMlx1MDAzZS9kZXYvbnVsbDsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtTS0lQOiBIU1IvUFJQIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBrZXJuZWxcJiMzNDtcbiYjNDM7XHRcdHJldHVybiAka3NmdF9za2lwXG4mIzQzO1x0ZmlcbiYjNDM7XHRuc3ggaXAgbGluayBzZXQgcHJwMCB1cCB8fCB7IGVjaG8gXCYjMzQ7RkFJTDogcHJwMCB1cFwmIzM0OzsgcmV0dXJuIDE7IH1cbiYjNDM7XHRuc3ggdGMgcWRpc2MgYWRkIGRldiB2QSByb290IG5ldGVtIGRlbGF5IDIwMG1zIHx8XG4mIzQzO1x0XHR7IGVjaG8gXCYjMzQ7RkFJTDogbmV0ZW1cJiMzNDs7IHJldHVybiAxOyB9XG4mIzQzO1xuJiM0MztcdG5zeCBweXRob24zIC9kZXYvc3RkaW4gXCYjMzQ7JERVUlwmIzM0OyBcdTAwM2NcdTAwM2MmIzM5O1BZRjImIzM5O1xuJiM0MztpbXBvcnQgc29ja2V0LCBzdHJ1Y3QsIHNlbGVjdCwgc3lzLCB0aW1lXG4mIzQzO1xuJiM0MztkdXIgPSBpbnQoc3lzLmFyZ3ZbMV0pXG4mIzQzO2RlZiBsYW5pZChwa3QpOlxuJiM0MzsgICAgaWYgbGVuKHBrdCkgXHUwMDNjIDIwIG9yIHBrdFstMjpdICE9IGJcJiMzNDtcXHg4OFxceGZiXCYjMzQ7OlxuJiM0MzsgICAgICAgIHJldHVybiBOb25lXG4mIzQzOyAgICByZXR1cm4gKHBrdFstNF0gXHUwMDNlXHUwMDNlIDQpIFx1MDAyNiAweEZcbiYjNDM7XG4mIzQzO1NSQyA9IGJ5dGVzLmZyb21oZXgob3BlbihcJiMzNDsvc3lzL2NsYXNzL25ldC9wcnAwL2FkZHJlc3NcJiMzNDspLnJlYWQoKS5yZXBsYWNlKFwmIzM0OzpcJiMzNDssIFwmIzM0O1wmIzM0OykpXG4mIzQzO0RTVCA9IGJ5dGVzLmZyb21oZXgoXCYjMzQ7MDJhYWJiY2NkZDAxXCYjMzQ7KVxuJiM0MztQQVkgPSBieXRlcyhyYW5nZSg0NikpXG4mIzQzO3JjdDAgPSBzdHJ1Y3QucGFjayhcJiMzNDtcdTAwM2VIXCYjMzQ7LCAwKSAmIzQzOyBzdHJ1Y3QucGFjayhcJiMzNDtcdTAwM2VIXCYjMzQ7LCA1MiBcdTAwMjYgMHgwRkZGKSAmIzQzOyBiXCYjMzQ7XFx4ODhcXHhmYlwmIzM0O1xuJiM0MztmcmFtZSA9IERTVCAmIzQzOyBTUkMgJiM0MzsgYlwmIzM0O1xceDA4XFx4MDBcJiMzNDsgJiM0MzsgUEFZICYjNDM7IHJjdDBcbiYjNDM7XG4mIzQzO3R4ID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfUEFDS0VULCBzb2NrZXQuU09DS19SQVcpOyB0eC5iaW5kKChcJiMzNDtwcnAwXCYjMzQ7LCAwKSlcbiYjNDM7c0EgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9QQUNLRVQsIHNvY2tldC5TT0NLX1JBVyxcbiYjNDM7ICAgICAgICBzb2NrZXQubnRvaHMoMHgwMDAzKSlcbiYjNDM7c0EuYmluZCgoXCYjMzQ7dkFwXCYjMzQ7LCAwKSlcbiYjNDM7c0IgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9QQUNLRVQsIHNvY2tldC5TT0NLX1JBVyxcbiYjNDM7ICAgICAgICBzb2NrZXQubnRvaHMoMHgwMDAzKSlcbiYjNDM7c0IuYmluZCgoXCYjMzQ7dkJwXCYjMzQ7LCAwKSlcbiYjNDM7c0Euc2V0YmxvY2tpbmcoRmFsc2UpOyBzQi5zZXRibG9ja2luZyhGYWxzZSlcbiYjNDM7Zm9yIF8gaW4gcmFuZ2UoMjAwKTpcbiYjNDM7ICAgIHR4LnNlbmQoZnJhbWUpOyB0aW1lLnNsZWVwKDAuMDAxKVxuJiM0MztcbiYjNDM7YSwgYiA9IFtdLCBbXVxuJiM0MztlbmQgPSB0aW1lLnRpbWUoKSAmIzQzOyBkdXJcbiYjNDM7d2hpbGUgdGltZS50aW1lKCkgXHUwMDNjIGVuZDpcbiYjNDM7ICAgIHIsIF8sIF8gPSBzZWxlY3Quc2VsZWN0KFtzQSwgc0JdLCBbXSwgW10sIDAuMylcbiYjNDM7ICAgIGZvciBzIGluIHI6XG4mIzQzOyAgICAgICAgcGt0ID0gcy5yZWN2KDY1NTM1KVxuJiM0MzsgICAgICAgIGlmIChwa3RbOjZdICE9IERTVCBvciBwa3RbNjoxMl0gIT0gU1JDIG9yIHBrdFsxMjoxNF0gIT0gYlwmIzM0O1xceDA4XFx4MDBcJiMzNDtcbiYjNDM7ICAgICAgICAgICAgICAgIG9yIHBrdFsxNDoxNCAmIzQzOyBsZW4oUEFZKV0gIT0gUEFZKTpcbiYjNDM7ICAgICAgICAgICAgY29udGludWVcbiYjNDM7ICAgICAgICBsaWQgPSBsYW5pZChwa3QpXG4mIzQzOyAgICAgICAgaWYgbGlkIGlzIG5vdCBOb25lOlxuJiM0MzsgICAgICAgICAgICAoYSBpZiBzIGlzIHNBIGVsc2UgYikuYXBwZW5kKGxpZClcbiYjNDM7XG4mIzQzO3ByaW50KFwmIzM0O0Etc2lkZSBjb3VudD0lZCBsYW4gaWRzPSVzXCYjMzQ7ICUgKGxlbihhKSwgc29ydGVkKHNldChhKSkpKVxuJiM0MztwcmludChcJiMzNDtCLXNpZGUgY291bnQ9JWQgbGFuIGlkcz0lc1wmIzM0OyAlIChsZW4oYiksIHNvcnRlZChzZXQoYikpKSlcbiYjNDM7aWYgbGVuKGEpIFx1MDAzYyAxNTAgb3IgbGVuKGIpIFx1MDAzYyAxNTA6XG4mIzQzOyAgICBwcmludChcJiMzNDtGQUlMOiB0b28gZmV3IGluamVjdGVkIGZyYW1lcyBjYXB0dXJlZCAoQT0lZCBCPSVkLCBzZW50IDIwMClcJiMzNDtcbiYjNDM7ICAgICAgICAgICUgKGxlbihhKSwgbGVuKGIpKSlcbiYjNDM7ICAgIHN5cy5leGl0KDEpXG4mIzQzO2JhZF9hID0gW3ggZm9yIHggaW4gYSBpZiAoeCBcdTAwMjYgMSkgIT0gMF1cbiYjNDM7YmFkX2IgPSBbeCBmb3IgeCBpbiBiIGlmICh4IFx1MDAyNiAxKSAhPSAxXVxuJiM0MztpZiBiYWRfYSBvciBiYWRfYjpcbiYjNDM7ICAgIHByaW50KFwmIzM0O0ZBSUw6IHNoYXJlZC1tdXRhdGlvbiBjb3JydXB0aW9uIC0gQTogJWQvJWQgd3JvbmctbGFuLFwmIzM0O1xuJiM0MzsgICAgICAgICAgXCYjMzQ7IEI6ICVkLyVkIHdyb25nLWxhblwmIzM0O1xuJiM0MzsgICAgICAgICAgJSAobGVuKGJhZF9hKSwgbGVuKGEpLCBsZW4oYmFkX2IpLCBsZW4oYikpKVxuJiM0MzsgICAgc3lzLmV4aXQoMSlcbiYjNDM7cHJpbnQoXCYjMzQ7UEFTUzogcGVyLWVncmVzcyBMQU4gSURzIGlzb2xhdGVkIChBIGFsbCBiaXQwPTAsIEIgYWxsIGJpdDA9MSlcJiMzNDspXG4mIzQzO3N5cy5leGl0KDApXG4mIzQzO1BZRjJcbiYjNDM7fVxuJiM0MztcbiYjNDM7IyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRjE6IFJlZEJveCBzb3VyY2UtTUFDIHByaXZhY3lcbiYjNDM7IyBIU1IgUmVkQm94IChwcm90byAwKSwgdGFnZ2VkIG11bHRpY2FzdCBmcm9tIGEgc2xhdmU6IG1hc3RlciBtdXN0IGtlZXBcbiYjNDM7IyB0aGUgbm9kZSBNQUMsIGludGVybGluayBtdXN0IGNhcnJ5IHRoZSBSZWRCb3ggTUFDLlxuJiM0MztydW5fZjEoKVxuJiM0Mzt7XG4mIzQzO1x0c2V0dXBfbnMgbnMgMlx1MDAzZS9kZXYvbnVsbCB8fCByZXR1cm4gJGtzZnRfc2tpcFxuJiM0MztcdG5zeCgpIHsgaXAgbmV0bnMgZXhlYyBcJiMzNDskbnNcJiMzNDsgXCYjMzQ7JEBcJiMzNDs7IH1cbiYjNDM7XG4mIzQzO1x0bnN4IGlwIGxpbmsgYWRkIHZBIHR5cGUgdmV0aCBwZWVyIG5hbWUgdkFwIHx8XG4mIzQzO1x0XHR7IGVjaG8gXCYjMzQ7RkFJTDogdmV0aCBBXCYjMzQ7OyByZXR1cm4gMTsgfVxuJiM0MztcdG5zeCBpcCBsaW5rIGFkZCB2QiB0eXBlIHZldGggcGVlciBuYW1lIHZCcCB8fFxuJiM0MztcdFx0eyBlY2hvIFwmIzM0O0ZBSUw6IHZldGggQlwmIzM0OzsgcmV0dXJuIDE7IH1cbiYjNDM7XHRuc3ggaXAgbGluayBhZGQgdkkgdHlwZSB2ZXRoIHBlZXIgbmFtZSB2SXAgfHxcbiYjNDM7XHRcdHsgZWNobyBcJiMzNDtGQUlMOiB2ZXRoIElcJiMzNDs7IHJldHVybiAxOyB9XG4mIzQzO1x0Zm9yIGkgaW4gdkEgdkIgdkkgdkFwIHZCcCB2SXA7IGRvXG4mIzQzO1x0XHRuc3ggaXAgbGluayBzZXQgXCYjMzQ7JGlcJiMzNDsgdXAgfHwgeyBlY2hvIFwmIzM0O0ZBSUw6ICRpIHVwXCYjMzQ7OyByZXR1cm4gMTsgfVxuJiM0MztcdGRvbmVcbiYjNDM7XHRpZiAhIG5zeCBpcCBsaW5rIGFkZCBuYW1lIGhzcjAgdHlwZSBoc3Igc2xhdmUxIHZBIHNsYXZlMiB2QiBcXFxuJiM0MztcdFx0aW50ZXJsaW5rIHZJIHN1cGVydmlzaW9uIDQ1IHByb3RvIDAgMlx1MDAzZS9kZXYvbnVsbDsgdGhlblxuJiM0MztcdFx0ZWNobyBcJiMzNDtTS0lQOiBIU1IgUmVkQm94IG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBrZXJuZWxcJiMzNDtcbiYjNDM7XHRcdHJldHVybiAka3NmdF9za2lwXG4mIzQzO1x0ZmlcbiYjNDM7XHRuc3ggaXAgbGluayBzZXQgaHNyMCB1cCB8fCB7IGVjaG8gXCYjMzQ7RkFJTDogaHNyMCB1cFwmIzM0OzsgcmV0dXJuIDE7IH1cbiYjNDM7XG4mIzQzO1x0bnN4IHB5dGhvbjMgL2Rldi9zdGRpbiBcdTAwM2NcdTAwM2MmIzM5O1BZRjEmIzM5O1xuJiM0MztpbXBvcnQgc29ja2V0LCBzZWxlY3QsIHN5cywgdGltZVxuJiM0MztcbiYjNDM7Tk9ERSAgPSBieXRlcy5mcm9taGV4KFwmIzM0OzAyMTEyMjMzNDQ1NVwmIzM0OylcbiYjNDM7TUNBU1QgPSBieXRlcy5mcm9taGV4KFwmIzM0OzAxMDA1ZTAwMDAwMVwmIzM0OylcbiYjNDM7UkIgICAgPSBieXRlcy5mcm9taGV4KG9wZW4oXCYjMzQ7L3N5cy9jbGFzcy9uZXQvdkkvYWRkcmVzc1wmIzM0OykucmVhZCgpLnJlcGxhY2UoXCYjMzQ7OlwmIzM0OywgXCYjMzQ7XCYjMzQ7KSlcbiYjNDM7UEFZICAgPSBieXRlcyhyYW5nZSg0NikpXG4mIzQzO1xuJiM0MztkZWYgZnJhbWUoc2VxKTpcbiYjNDM7ICAgIHRhZyA9ICgoKDEgXHUwMDNjXHUwMDNjIDEyKSB8IGxlbihQQVkpKS50b19ieXRlcygyLCBcJiMzNDtiaWdcJiMzNDspXG4mIzQzOyAgICAgICAgICAgJiM0Mzsgc2VxLnRvX2J5dGVzKDIsIFwmIzM0O2JpZ1wmIzM0OykgJiM0MzsgYlwmIzM0O1xceDA4XFx4MDBcJiMzNDspXG4mIzQzOyAgICByZXR1cm4gTUNBU1QgJiM0MzsgTk9ERSAmIzQzOyBiXCYjMzQ7XFx4ODlcXHgyZlwmIzM0OyAmIzQzOyB0YWcgJiM0MzsgUEFZXG4mIzQzO1xuJiM0Mzt0eCA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1BBQ0tFVCwgc29ja2V0LlNPQ0tfUkFXKTsgdHguYmluZCgoXCYjMzQ7dkFwXCYjMzQ7LCAwKSlcbiYjNDM7c20gPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9QQUNLRVQsIHNvY2tldC5TT0NLX1JBVyxcbiYjNDM7ICAgICAgICBzb2NrZXQubnRvaHMoMHgwMDAzKSlcbiYjNDM7c20uYmluZCgoXCYjMzQ7aHNyMFwmIzM0OywgMCkpXG4mIzQzO3NpID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfUEFDS0VULCBzb2NrZXQuU09DS19SQVcsXG4mIzQzOyAgICAgICAgc29ja2V0Lm50b2hzKDB4MDAwMykpXG4mIzQzO3NpLmJpbmQoKFwmIzM0O3ZJcFwmIzM0OywgMCkpXG4mIzQzO3NtLnNldGJsb2NraW5nKEZhbHNlKTsgc2kuc2V0YmxvY2tpbmcoRmFsc2UpXG4mIzQzO1xuJiM0Mztmb3IgaSBpbiByYW5nZSgzKTpcbiYjNDM7ICAgIHR4LnNlbmQoZnJhbWUoaSAmIzQzOyAxKSk7IHRpbWUuc2xlZXAoMC4wNSlcbiYjNDM7XG4mIzQzO21fc3JjID0gaV9zcmMgPSBOb25lXG4mIzQzO2VuZCA9IHRpbWUudGltZSgpICYjNDM7IDRcbiYjNDM7d2hpbGUgdGltZS50aW1lKCkgXHUwMDNjIGVuZCBhbmQgKG1fc3JjIGlzIE5vbmUgb3IgaV9zcmMgaXMgTm9uZSk6XG4mIzQzOyAgICByLCBfLCBfID0gc2VsZWN0LnNlbGVjdChbc20sIHNpXSwgW10sIFtdLCAwLjMpXG4mIzQzOyAgICBmb3IgcyBpbiByOlxuJiM0MzsgICAgICAgIHBrdCA9IHMucmVjdig2NTUzNSlcbiYjNDM7ICAgICAgICAjIGV4YWN0IGZsb3c6IGRzdCwgcG9zdC1zdHJpcCBFdGhlclR5cGUsIGV4YWN0IHBheWxvYWQsIG1pbiBsZW5ndGg7XG4mIzQzOyAgICAgICAgIyBoX3NvdXJjZSBpcyB0aGUgYXNzZXJ0ZWQgdmFsdWUgYW5kIG11c3QgTk9UIGJlIGZpbHRlcmVkIG9uXG4mIzQzOyAgICAgICAgaWYgKGxlbihwa3QpIFx1MDAzYyA2MCBvciBwa3RbOjZdICE9IE1DQVNUIG9yIHBrdFsxMjoxNF0gIT0gYlwmIzM0O1xceDA4XFx4MDBcJiMzNDtcbiYjNDM7ICAgICAgICAgICAgICAgIG9yIHBrdFsxNDoxNCAmIzQzOyBsZW4oUEFZKV0gIT0gUEFZKTpcbiYjNDM7ICAgICAgICAgICAgY29udGludWVcbiYjNDM7ICAgICAgICBpZiBzIGlzIHNtIGFuZCBtX3NyYyBpcyBOb25lOlxuJiM0MzsgICAgICAgICAgICBtX3NyYyA9IHBrdFs2OjEyXVxuJiM0MzsgICAgICAgIGVsaWYgcyBpcyBzaSBhbmQgaV9zcmMgaXMgTm9uZTpcbiYjNDM7ICAgICAgICAgICAgaV9zcmMgPSBwa3RbNjoxMl1cbiYjNDM7XG4mIzQzO3ByaW50KFwmIzM0O21hc3RlciBoX3NvdXJjZSAgICA9XCYjMzQ7LCBtX3NyYy5oZXgoKSBpZiBtX3NyYyBlbHNlIE5vbmUpXG4mIzQzO3ByaW50KFwmIzM0O25vZGUgTUFDICAgICAgICAgICA9XCYjMzQ7LCBOT0RFLmhleCgpKVxuJiM0MztwcmludChcJiMzNDtpbnRlcmxpbmsgaF9zb3VyY2UgPVwmIzM0OywgaV9zcmMuaGV4KCkgaWYgaV9zcmMgZWxzZSBOb25lKVxuJiM0MztwcmludChcJiMzNDtyZWRib3ggTUFDICAgICAgICAgPVwmIzM0OywgUkIuaGV4KCkpXG4mIzQzO2lmIGlfc3JjICE9IFJCOlxuJiM0MzsgICAgcHJpbnQoXCYjMzQ7RkFJTDogaW50ZXJsaW5rIGRpZCBub3QgY2FycnkgdGhlIFJlZEJveCBNQUNcJiMzNDspXG4mIzQzOyAgICBzeXMuZXhpdCgxKVxuJiM0MztpZiBtX3NyYyAhPSBOT0RFOlxuJiM0MzsgICAgcHJpbnQoXCYjMzQ7RkFJTDogbWFzdGVyIHJlY2VpdmVkICVzIGluc3RlYWQgb2YgdGhlIG5vZGUgTUFDIFwmIzM0O1xuJiM0MzsgICAgICAgICAgXCYjMzQ7KHNoYXJlZC1tdXRhdGlvbiBjb3JydXB0aW9uKVwmIzM0O1xuJiM0MzsgICAgICAgICAgJSAobV9zcmMuaGV4KCkgaWYgbV9zcmMgZWxzZSBcJiMzNDtub3RoaW5nXCYjMzQ7KSlcbiYjNDM7ICAgIHN5cy5leGl0KDEpXG4mIzQzO3ByaW50KFwmIzM0O1BBU1M6IG1hc3RlciBrZXB0IG5vZGUgTUFDLCBpbnRlcmxpbmsga2VwdCBSZWRCb3ggTUFDXCYjMzQ7KVxuJiM0MztzeXMuZXhpdCgwKVxuJiM0MztQWUYxXG4mIzQzO31cbiYjNDM7XG4mIzQzO3JjPTBcbiYjNDM7XG4mIzQzO3J1bl9mMlxuJiM0MztyZXQ9JD9cbiYjNDM7WyBcJiMzNDskcmV0XCYjMzQ7IC1lcSBcJiMzNDska3NmdF9za2lwXCYjMzQ7IF0gXHUwMDI2XHUwMDI2IGV4aXQgXCYjMzQ7JGtzZnRfc2tpcFwmIzM0O1xuJiM0MztbIFwmIzM0OyRyZXRcJiMzNDsgLWVxIDAgXSB8fCByYz0xXG4mIzQzO1xuJiM0MztydW5fZjFcbiYjNDM7cmV0PSQ/XG4mIzQzO1sgXCYjMzQ7JHJldFwmIzM0OyAtZXEgXCYjMzQ7JGtzZnRfc2tpcFwmIzM0OyBdIFx1MDAyNlx1MDAyNiBleGl0IFwmIzM0OyRrc2Z0X3NraXBcJiMzNDtcbiYjNDM7WyBcJiMzNDskcmV0XCYjMzQ7IC1lcSAwIF0gfHwgcmM9MVxuJiM0MztcbiYjNDM7aWYgWyAkcmMgLWVxIDAgXTsgdGhlblxuJiM0MztcdGVjaG8gXCYjMzQ7aHNyX3NoYXJlZF9tdXRhdGlvbjogcGVyLWVncmVzcyBtdXRhdGlvbiBpc29sYXRpb24gKEYxJiM0MztGMikgWyBPSyBdXCYjMzQ7XG4mIzQzO2Vsc2VcbiYjNDM7XHRlY2hvIFwmIzM0O2hzcl9zaGFyZWRfbXV0YXRpb246IHBlci1lZ3Jlc3MgbXV0YXRpb24gaXNvbGF0aW9uIFsgRkFJTCBdXCYjMzQ7IFxcXG4mIzQzO1x0XHRcJiMzNDtyYz0kcmNcJiMzNDsgMVx1MDAzZVx1MDAyNjJcbiYjNDM7ZmlcbiYjNDM7ZXhpdCAkcmNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwMDo1ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFNSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHNyX2Rldl94bWl0JiMzNDssCiAgICAmIzM0O2hzcl9oYW5kbGVfZnJhbWUmIzM0OywKICAgICYjMzQ7aHNyX2NyZWF0ZV90YWdnZWRfZnJhbWUmIzM0OywKICAgICYjMzQ7cHJwX2NyZWF0ZV90YWdnZWRfZnJhbWUmIzM0OywKICAgICYjMzQ7aHNyX2ZvcndhcmRfc2tiJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgc2hhcmVkLW11dGF0aW9uIGJ1ZyBpbiBIU1IvUFJQIGJ5IGFkZGluZyBgc2tiX2Nvd2AgYmVmb3JlIG1vZGlmeWluZyBjbG9uZWQgc2ticyBpbiBgaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWVgLCBgcHJwX2NyZWF0ZV90YWdnZWRfZnJhbWVgLCBhbmQgYGhzcl94bWl0YC4gVGhlc2UgYXJlIGNvcmUgcGFja2V0IGZvcndhcmRpbmcgZnVuY3Rpb25zIGluIHRoZSBIU1IgZHJpdmVyLCByZWFjaGFibGUgdmlhIGBoc3JfZGV2X3htaXRgIChtYXN0ZXIgZGV2aWNlIFRYKSBhbmQgYGhzcl9oYW5kbGVfZnJhbWVgIChzbGF2ZSBkZXZpY2UgUlgpLiBUaGUgY29kZSBpcyBmdWxseSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI1ODA5NTFhOTY3MjVkY2EwZGY4ZGQyMzM5YmY2ZWZmN2Q2MjdmN2MKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzIDAwOjU3OjU5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2hzci9oc3JfZm9yd2FyZC5jIGIvbmV0L2hzci9oc3JfZm9yd2FyZC5jCmluZGV4IDA3NzQ5ODFhNjVjMTYuLjk3NGI1NWYyNDg4MjEgMTAwNjQ0Ci0tLSBhL25ldC9oc3IvaHNyX2ZvcndhcmQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmMKQEAgLTMzNiwxMiAmIzQzOzMzNiwyNCBAQCBzdHJ1Y3Qgc2tfYnVmZiAqaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSwKIAlpbnQgbW92ZWxlbjsKIAogCWlmIChmcmFtZS0mZ3Q7c2tiX2hzcikgewotCQlzdHJ1Y3QgaHNyX2V0aGhkciAqaHNyX2V0aGhkciA9Ci0JCQkoc3RydWN0IGhzcl9ldGhoZHIgKilza2JfbWFjX2hlYWRlcihmcmFtZS0mZ3Q7c2tiX2hzcik7CiYjNDM7CQlzdHJ1Y3QgaHNyX2V0aGhkciAqaHNyX2V0aGhkcjsKJiM0MzsKJiM0MzsJCS8qIFRoZSBvcmlnaW5hbCBza2IgZGF0YSBtYXkgYmUgc2hhcmVkIHdpdGggYW5vdGhlciBlZ3Jlc3MKJiM0MzsJCSAqIGNsb25lLiBNYWtlIHRoZSBjbG9uZSBkYXRhIHByaXZhdGUgYmVmb3JlIHVwZGF0aW5nIHRoZQomIzQzOwkJICogcGF0aCBpZCBzbyB0aGUgdXBkYXRlIGNhbm5vdCBjb3JydXB0IHRoZSBvdGhlciBjb3B5LgomIzQzOwkJICovCiYjNDM7CQlza2IgPSBza2JfY2xvbmUoZnJhbWUtJmd0O3NrYl9oc3IsIEdGUF9BVE9NSUMpOwomIzQzOwkJaWYgKCFza2IpCiYjNDM7CQkJcmV0dXJuIE5VTEw7CiYjNDM7CQlpZiAoc2tiX2Nvdyhza2IsIDApKSB7CiYjNDM7CQkJa2ZyZWVfc2tiKHNrYik7CiYjNDM7CQkJcmV0dXJuIE5VTEw7CiYjNDM7CQl9CiAKIAkJLyogc2V0IHRoZSBsYW5lIGlkIHByb3Blcmx5ICovCiYjNDM7CQloc3JfZXRoaGRyID0gKHN0cnVjdCBoc3JfZXRoaGRyICopc2tiX21hY19oZWFkZXIoc2tiKTsKIAkJaHNyX3NldF9wYXRoX2lkKGZyYW1lLCBoc3JfZXRoaGRyLCBwb3J0KTsKLQkJcmV0dXJuIHNrYl9jbG9uZShmcmFtZS0mZ3Q7c2tiX2hzciwgR0ZQX0FUT01JQyk7CiYjNDM7CQlyZXR1cm4gc2tiOwogCX0gZWxzZSBpZiAocG9ydC0mZ3Q7ZGV2LSZndDtmZWF0dXJlcyAmYW1wOyBORVRJRl9GX0hXX0hTUl9UQUdfSU5TKSB7CiAJCXJldHVybiBza2JfY2xvbmUoZnJhbWUtJmd0O3NrYl9zdGQsIEdGUF9BVE9NSUMpOwogCX0KQEAgLTM3NywxNSAmIzQzOzM4OSwyOCBAQCBzdHJ1Y3Qgc2tfYnVmZiAqcHJwX2NyZWF0ZV90YWdnZWRfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSwKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCiAJaWYgKGZyYW1lLSZndDtza2JfcHJwKSB7Ci0JCXN0cnVjdCBwcnBfcmN0ICp0cmFpbGVyID0gc2tiX2dldF9QUlBfcmN0KGZyYW1lLSZndDtza2JfcHJwKTsKJiM0MzsJCXN0cnVjdCBwcnBfcmN0ICp0cmFpbGVyOwogCiYjNDM7CQkvKiBTYW1lIHNoYXJpbmcgaGF6YXJkIGFzIGFib3ZlOiBwcml2YXRpemUgdGhlIGNsb25lIGRhdGEKJiM0MzsJCSAqIGJlZm9yZSB1cGRhdGluZyB0aGUgTEFOIGlkLgomIzQzOwkJICovCiYjNDM7CQlza2IgPSBza2JfY2xvbmUoZnJhbWUtJmd0O3NrYl9wcnAsIEdGUF9BVE9NSUMpOwomIzQzOwkJaWYgKCFza2IpCiYjNDM7CQkJcmV0dXJuIE5VTEw7CiYjNDM7CQlpZiAoc2tiX2Nvdyhza2IsIDApKSB7CiYjNDM7CQkJa2ZyZWVfc2tiKHNrYik7CiYjNDM7CQkJcmV0dXJuIE5VTEw7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQl0cmFpbGVyID0gc2tiX2dldF9QUlBfcmN0KHNrYik7CiAJCWlmICh0cmFpbGVyKSB7CiAJCQlwcnBfc2V0X2xhbl9pZCh0cmFpbGVyLCBwb3J0KTsKIAkJfSBlbHNlIHsKIAkJCVdBUk5fT05DRSghdHJhaWxlciwgJiMzNDtlcnJvcmVkIFBSUCBza2ImIzM0Oyk7CiYjNDM7CQkJa2ZyZWVfc2tiKHNrYik7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQotCQlyZXR1cm4gc2tiX2Nsb25lKGZyYW1lLSZndDtza2JfcHJwLCBHRlBfQVRPTUlDKTsKJiM0MzsJCXJldHVybiBza2I7CiAJfSBlbHNlIGlmIChwb3J0LSZndDtkZXYtJmd0O2ZlYXR1cmVzICZhbXA7IE5FVElGX0ZfSFdfSFNSX1RBR19JTlMpIHsKIAkJcmV0dXJuIHNrYl9jbG9uZShmcmFtZS0mZ3Q7c2tiX3N0ZCwgR0ZQX0FUT01JQyk7CiAJfQpAQCAtNDIwLDYgJiM0Mzs0NDUsMjIgQEAgc3RhdGljIHZvaWQgaHNyX2RlbGl2ZXJfbWFzdGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiBzdGF0aWMgaW50IGhzcl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCwKIAkJICAgIHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpCiB7CiYjNDM7CS8qIEFuIGludGVybGluay1ib3VuZCBza2IgZnJvbSBnZXRfdW50YWdnZWRfZnJhbWUoKSBjYW4gc3RpbGwgYWxpYXMKJiM0MzsJICogYW5vdGhlciBsaXZlIGNvbnN1bWVyOiBmb3IgbWFzdGVyLW9yaWdpbmF0ZWQgZnJhbWVzIHRoZSBjbG9uZQomIzQzOwkgKiBzaGFyZXMgdGhlIG9yaWdpbmFsIFRYIHNrYiAod2hpY2ggdGFwcyBvciB0aGUgVFggcGF0aCBtYXkgc3RpbGwKJiM0MzsJICogaG9sZCk7IGZvciByaW5nIGZyYW1lcyB0aGUgbWFzdGVyIGFsc28gY29uc3VtZXMgdGhlbSB3aGVuIHRoZXkKJiM0MzsJICogYXJlIGRlc3RpbmVkIHRvIHRoZSBsb2NhbCBub2RlIHdpdGhvdXQgYmVpbmcgZXhjbHVzaXZlIHRvIGl0LgomIzQzOwkgKiBQcml2YXRpemUgYmVmb3JlIGFueSBhZGRyZXNzIG11dGF0aW9uLgomIzQzOwkgKi8KJiM0MzsJaWYgKHBvcnQtJmd0O3R5cGUgPT0gSFNSX1BUX0lOVEVSTElOSyAmYW1wOyZhbXA7CiYjNDM7CSAgICAoZnJhbWUtJmd0O3BvcnRfcmN2LSZndDt0eXBlID09IEhTUl9QVF9NQVNURVIgfHwKJiM0MzsJICAgICAoZnJhbWUtJmd0O2lzX2xvY2FsX2Rlc3QgJmFtcDsmYW1wOyAhZnJhbWUtJmd0O2lzX2xvY2FsX2V4Y2x1c2l2ZSkpICZhbXA7JmFtcDsKJiM0MzsJICAgIHNrYl9jb3coc2tiLCAwKSkgewomIzQzOwkJZnJhbWUtJmd0O3BvcnRfcmN2LSZndDtkZXYtJmd0O3N0YXRzLnJ4X2Ryb3BwZWQmIzQzOyYjNDM7OwomIzQzOwkJa2ZyZWVfc2tiKHNrYik7CiYjNDM7CQlyZXR1cm4gTkVUX1hNSVRfRFJPUDsKJiM0MzsJfQomIzQzOwogCWlmIChmcmFtZS0mZ3Q7cG9ydF9yY3YtJmd0O3R5cGUgPT0gSFNSX1BUX01BU1RFUikgewogCQloc3JfYWRkcl9zdWJzdF9kZXN0KGZyYW1lLSZndDtub2RlX3NyYywgc2tiLCBwb3J0KTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGUKaW5kZXggMzFmYjkzMjZjZjUzMy4uODdmZTM0OTUxYjhiMCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlCkBAIC01LDYgJiM0Mzs1LDcgQEAgdG9wX3NyY2RpciA9IC4uLy4uLy4uLy4uLy4uCiBURVNUX1BST0dTIDo9IFwKIAloc3JfcGluZy5zaCBcCiAJaHNyX3JlZGJveC5zaCBcCiYjNDM7CWhzcl9zaGFyZWRfbXV0YXRpb24uc2ggXAogCWxpbmtfZmF1bHRzLnNoIFwKIAlwcnBfcGluZy5zaCBcCiAjIGVuZCBvZiBURVNUX1BST0dTCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9zaGFyZWRfbXV0YXRpb24uc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9zaGFyZWRfbXV0YXRpb24uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMC4uMDVlN2U4MDNkMjg2NwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX3NoYXJlZF9tdXRhdGlvbi5zaApAQCAtMCwwICYjNDM7MSwyMjMgQEAKJiM0MzsjIS9iaW4vYmFzaAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjCiYjNDM7IyBWZXJpZnkgdGhhdCBwZXItZWdyZXNzIG11dGF0aW9ucyBvZiBzaGFyZWQgc2tiIGRhdGEgYXJlIHByaXZhdGU6CiYjNDM7IwomIzQzOyMgRjIgKHBhdGgvTEFOIElEKTogb24gYW4gYWZmZWN0ZWQga2VybmVsIHRoZSBzZWNvbmQgc2xhdmUmIzM5O3MgTEFOLUlEIHdyaXRlCiYjNDM7IyBsYW5kcyBpbiB0aGUgZmlyc3Qgc2xhdmUmIzM5O3Mgc3RpbGwtcXVldWVkIGNsb25lOyB3aXRoIGEgbmV0ZW0gZGVsYXkgb24KJiM0MzsjIHNsYXZlIEEsIGluamVjdGVkIGZyYW1lcyBsZWF2ZSBBIGNhcnJ5aW5nIEImIzM5O3MgTEFOIElELgomIzQzOyMKJiM0MzsjIEYxIChSZWRCb3ggc291cmNlIE1BQyk6IG9uIGFuIGFmZmVjdGVkIGtlcm5lbCBhbiBIU1ItdGFnZ2VkIG11bHRpY2FzdAomIzQzOyMgZnJhbWUgcmVjZWl2ZWQgb24gYSBSZWRCb3ggc2xhdmUgaXMgY2xvbmVkIGZvciBtYXN0ZXIgYW5kIGludGVybGluaywKJiM0MzsjIGFuZCB0aGUgaW50ZXJsaW5rJiMzOTtzIFJlZEJveC1NQUMgcmV3cml0ZSBsYW5kcyBpbiB0aGUgbWFzdGVyIGNsb25lJiMzOTtzCiYjNDM7IyBidWZmZXIsIHNvIHRoZSBsb2NhbCBzdGFjayByZWNlaXZlcyB0aGUgUmVkQm94IE1BQyBpbnN0ZWFkIG9mIHRoZQomIzQzOyMgb3JpZ2luYXRpbmcgbm9kZSYjMzk7cyBNQUMuCiYjNDM7CiYjNDM7aXB2Nj1mYWxzZQomIzQzOwomIzQzO3NvdXJjZSAuL2hzcl9jb21tb24uc2gKJiM0MzsKJiM0MztEVVI9NQomIzQzOwomIzQzO3JlcXVpcmUoKQomIzQzO3sKJiM0MzsJY29tbWFuZCAtdiAmIzM0OyQxJiMzNDsgJmd0Oy9kZXYvbnVsbCAyJmd0OyZhbXA7MSAmYW1wOyZhbXA7IHJldHVybiAwCiYjNDM7CWVjaG8gJiMzNDtTS0lQOiAkMSBub3QgYXZhaWxhYmxlJiMzNDsKJiM0MzsJZXhpdCAka3NmdF9za2lwCiYjNDM7fQomIzQzOwomIzQzO3JlcXVpcmUgaXAKJiM0MztyZXF1aXJlIHRjCiYjNDM7cmVxdWlyZSBweXRob24zCiYjNDM7CiYjNDM7dHJhcCBjbGVhbnVwX2FsbF9ucyBFWElUCiYjNDM7CiYjNDM7IyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEYyOiBMQU4tSUQgaXNvbGF0aW9uCiYjNDM7IyBQUlAgREFOUCAocHJvdG8gMSksIEFGX1BBQ0tFVCBwcmUtdGFnZ2VkIGluamVjdGlvbiwgbmV0ZW0gb24gc2xhdmUgQS4KJiM0MztydW5fZjIoKQomIzQzO3sKJiM0MzsJc2V0dXBfbnMgbnMgMiZndDsvZGV2L251bGwgfHwgcmV0dXJuICRrc2Z0X3NraXAKJiM0MzsJbnN4KCkgeyBpcCBuZXRucyBleGVjICYjMzQ7JG5zJiMzNDsgJiMzNDskQCYjMzQ7OyB9CiYjNDM7CiYjNDM7CSMgUHJvYmUgc2NoX25ldGVtIGluc2lkZSB0aGUgZGlzcG9zYWJsZSBuYW1lc3BhY2Ugb25seS4KJiM0MzsJaWYgISBuc3ggdGMgcWRpc2MgYWRkIGRldiBsbyByb290IG5ldGVtIGRlbGF5IDFtcyAyJmd0Oy9kZXYvbnVsbDsgdGhlbgomIzQzOwkJZWNobyAmIzM0O1NLSVA6IHNjaF9uZXRlbSBub3QgYXZhaWxhYmxlJiMzNDsKJiM0MzsJCXJldHVybiAka3NmdF9za2lwCiYjNDM7CWZpCiYjNDM7CW5zeCB0YyBxZGlzYyBkZWwgZGV2IGxvIHJvb3QgMiZndDsvZGV2L251bGwKJiM0MzsKJiM0MzsJIyBDYXBhYmlsaXR5IHByb2JlcyBlbmQgaGVyZTsgc2V0dXAgb3IgcnVudGltZSBmYWlsdXJlIGJlbG93IGlzIEZBSUwuCiYjNDM7CW5zeCBpcCBsaW5rIGFkZCB2QSB0eXBlIHZldGggcGVlciBuYW1lIHZBcCB8fAomIzQzOwkJeyBlY2hvICYjMzQ7RkFJTDogdmV0aCBBJiMzNDs7IHJldHVybiAxOyB9CiYjNDM7CW5zeCBpcCBsaW5rIGFkZCB2QiB0eXBlIHZldGggcGVlciBuYW1lIHZCcCB8fAomIzQzOwkJeyBlY2hvICYjMzQ7RkFJTDogdmV0aCBCJiMzNDs7IHJldHVybiAxOyB9CiYjNDM7CWZvciBpIGluIHZBIHZCIHZBcCB2QnA7IGRvCiYjNDM7CQluc3ggaXAgbGluayBzZXQgJiMzNDskaSYjMzQ7IHVwIHx8IHsgZWNobyAmIzM0O0ZBSUw6ICRpIHVwJiMzNDs7IHJldHVybiAxOyB9CiYjNDM7CWRvbmUKJiM0MzsJaWYgISBuc3ggaXAgbGluayBhZGQgbmFtZSBwcnAwIHR5cGUgaHNyIHNsYXZlMSB2QSBzbGF2ZTIgdkIgXAomIzQzOwkJc3VwZXJ2aXNpb24gNDUgcHJvdG8gMSAyJmd0Oy9kZXYvbnVsbDsgdGhlbgomIzQzOwkJZWNobyAmIzM0O1NLSVA6IEhTUi9QUlAgbm90IHN1cHBvcnRlZCBieSB0aGlzIGtlcm5lbCYjMzQ7CiYjNDM7CQlyZXR1cm4gJGtzZnRfc2tpcAomIzQzOwlmaQomIzQzOwluc3ggaXAgbGluayBzZXQgcHJwMCB1cCB8fCB7IGVjaG8gJiMzNDtGQUlMOiBwcnAwIHVwJiMzNDs7IHJldHVybiAxOyB9CiYjNDM7CW5zeCB0YyBxZGlzYyBhZGQgZGV2IHZBIHJvb3QgbmV0ZW0gZGVsYXkgMjAwbXMgfHwKJiM0MzsJCXsgZWNobyAmIzM0O0ZBSUw6IG5ldGVtJiMzNDs7IHJldHVybiAxOyB9CiYjNDM7CiYjNDM7CW5zeCBweXRob24zIC9kZXYvc3RkaW4gJiMzNDskRFVSJiMzNDsgJmx0OyZsdDsmIzM5O1BZRjImIzM5OwomIzQzO2ltcG9ydCBzb2NrZXQsIHN0cnVjdCwgc2VsZWN0LCBzeXMsIHRpbWUKJiM0MzsKJiM0MztkdXIgPSBpbnQoc3lzLmFyZ3ZbMV0pCiYjNDM7ZGVmIGxhbmlkKHBrdCk6CiYjNDM7ICAgIGlmIGxlbihwa3QpICZsdDsgMjAgb3IgcGt0Wy0yOl0gIT0gYiYjMzQ7XHg4OFx4ZmImIzM0OzoKJiM0MzsgICAgICAgIHJldHVybiBOb25lCiYjNDM7ICAgIHJldHVybiAocGt0Wy00XSAmZ3Q7Jmd0OyA0KSAmYW1wOyAweEYKJiM0MzsKJiM0MztTUkMgPSBieXRlcy5mcm9taGV4KG9wZW4oJiMzNDsvc3lzL2NsYXNzL25ldC9wcnAwL2FkZHJlc3MmIzM0OykucmVhZCgpLnJlcGxhY2UoJiMzNDs6JiMzNDssICYjMzQ7JiMzNDspKQomIzQzO0RTVCA9IGJ5dGVzLmZyb21oZXgoJiMzNDswMmFhYmJjY2RkMDEmIzM0OykKJiM0MztQQVkgPSBieXRlcyhyYW5nZSg0NikpCiYjNDM7cmN0MCA9IHN0cnVjdC5wYWNrKCYjMzQ7Jmd0O0gmIzM0OywgMCkgJiM0Mzsgc3RydWN0LnBhY2soJiMzNDsmZ3Q7SCYjMzQ7LCA1MiAmYW1wOyAweDBGRkYpICYjNDM7IGImIzM0O1x4ODhceGZiJiMzNDsKJiM0MztmcmFtZSA9IERTVCAmIzQzOyBTUkMgJiM0MzsgYiYjMzQ7XHgwOFx4MDAmIzM0OyAmIzQzOyBQQVkgJiM0MzsgcmN0MAomIzQzOwomIzQzO3R4ID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfUEFDS0VULCBzb2NrZXQuU09DS19SQVcpOyB0eC5iaW5kKCgmIzM0O3BycDAmIzM0OywgMCkpCiYjNDM7c0EgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9QQUNLRVQsIHNvY2tldC5TT0NLX1JBVywKJiM0MzsgICAgICAgIHNvY2tldC5udG9ocygweDAwMDMpKQomIzQzO3NBLmJpbmQoKCYjMzQ7dkFwJiMzNDssIDApKQomIzQzO3NCID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfUEFDS0VULCBzb2NrZXQuU09DS19SQVcsCiYjNDM7ICAgICAgICBzb2NrZXQubnRvaHMoMHgwMDAzKSkKJiM0MztzQi5iaW5kKCgmIzM0O3ZCcCYjMzQ7LCAwKSkKJiM0MztzQS5zZXRibG9ja2luZyhGYWxzZSk7IHNCLnNldGJsb2NraW5nKEZhbHNlKQomIzQzO2ZvciBfIGluIHJhbmdlKDIwMCk6CiYjNDM7ICAgIHR4LnNlbmQoZnJhbWUpOyB0aW1lLnNsZWVwKDAuMDAxKQomIzQzOwomIzQzO2EsIGIgPSBbXSwgW10KJiM0MztlbmQgPSB0aW1lLnRpbWUoKSAmIzQzOyBkdXIKJiM0Mzt3aGlsZSB0aW1lLnRpbWUoKSAmbHQ7IGVuZDoKJiM0MzsgICAgciwgXywgXyA9IHNlbGVjdC5zZWxlY3QoW3NBLCBzQl0sIFtdLCBbXSwgMC4zKQomIzQzOyAgICBmb3IgcyBpbiByOgomIzQzOyAgICAgICAgcGt0ID0gcy5yZWN2KDY1NTM1KQomIzQzOyAgICAgICAgaWYgKHBrdFs6Nl0gIT0gRFNUIG9yIHBrdFs2OjEyXSAhPSBTUkMgb3IgcGt0WzEyOjE0XSAhPSBiJiMzNDtceDA4XHgwMCYjMzQ7CiYjNDM7ICAgICAgICAgICAgICAgIG9yIHBrdFsxNDoxNCAmIzQzOyBsZW4oUEFZKV0gIT0gUEFZKToKJiM0MzsgICAgICAgICAgICBjb250aW51ZQomIzQzOyAgICAgICAgbGlkID0gbGFuaWQocGt0KQomIzQzOyAgICAgICAgaWYgbGlkIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgICAgIChhIGlmIHMgaXMgc0EgZWxzZSBiKS5hcHBlbmQobGlkKQomIzQzOwomIzQzO3ByaW50KCYjMzQ7QS1zaWRlIGNvdW50PSVkIGxhbiBpZHM9JXMmIzM0OyAlIChsZW4oYSksIHNvcnRlZChzZXQoYSkpKSkKJiM0MztwcmludCgmIzM0O0Itc2lkZSBjb3VudD0lZCBsYW4gaWRzPSVzJiMzNDsgJSAobGVuKGIpLCBzb3J0ZWQoc2V0KGIpKSkpCiYjNDM7aWYgbGVuKGEpICZsdDsgMTUwIG9yIGxlbihiKSAmbHQ7IDE1MDoKJiM0MzsgICAgcHJpbnQoJiMzNDtGQUlMOiB0b28gZmV3IGluamVjdGVkIGZyYW1lcyBjYXB0dXJlZCAoQT0lZCBCPSVkLCBzZW50IDIwMCkmIzM0OwomIzQzOyAgICAgICAgICAlIChsZW4oYSksIGxlbihiKSkpCiYjNDM7ICAgIHN5cy5leGl0KDEpCiYjNDM7YmFkX2EgPSBbeCBmb3IgeCBpbiBhIGlmICh4ICZhbXA7IDEpICE9IDBdCiYjNDM7YmFkX2IgPSBbeCBmb3IgeCBpbiBiIGlmICh4ICZhbXA7IDEpICE9IDFdCiYjNDM7aWYgYmFkX2Egb3IgYmFkX2I6CiYjNDM7ICAgIHByaW50KCYjMzQ7RkFJTDogc2hhcmVkLW11dGF0aW9uIGNvcnJ1cHRpb24gLSBBOiAlZC8lZCB3cm9uZy1sYW4sJiMzNDsKJiM0MzsgICAgICAgICAgJiMzNDsgQjogJWQvJWQgd3JvbmctbGFuJiMzNDsKJiM0MzsgICAgICAgICAgJSAobGVuKGJhZF9hKSwgbGVuKGEpLCBsZW4oYmFkX2IpLCBsZW4oYikpKQomIzQzOyAgICBzeXMuZXhpdCgxKQomIzQzO3ByaW50KCYjMzQ7UEFTUzogcGVyLWVncmVzcyBMQU4gSURzIGlzb2xhdGVkIChBIGFsbCBiaXQwPTAsIEIgYWxsIGJpdDA9MSkmIzM0OykKJiM0MztzeXMuZXhpdCgwKQomIzQzO1BZRjIKJiM0Mzt9CiYjNDM7CiYjNDM7IyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRjE6IFJlZEJveCBzb3VyY2UtTUFDIHByaXZhY3kKJiM0MzsjIEhTUiBSZWRCb3ggKHByb3RvIDApLCB0YWdnZWQgbXVsdGljYXN0IGZyb20gYSBzbGF2ZTogbWFzdGVyIG11c3Qga2VlcAomIzQzOyMgdGhlIG5vZGUgTUFDLCBpbnRlcmxpbmsgbXVzdCBjYXJyeSB0aGUgUmVkQm94IE1BQy4KJiM0MztydW5fZjEoKQomIzQzO3sKJiM0MzsJc2V0dXBfbnMgbnMgMiZndDsvZGV2L251bGwgfHwgcmV0dXJuICRrc2Z0X3NraXAKJiM0MzsJbnN4KCkgeyBpcCBuZXRucyBleGVjICYjMzQ7JG5zJiMzNDsgJiMzNDskQCYjMzQ7OyB9CiYjNDM7CiYjNDM7CW5zeCBpcCBsaW5rIGFkZCB2QSB0eXBlIHZldGggcGVlciBuYW1lIHZBcCB8fAomIzQzOwkJeyBlY2hvICYjMzQ7RkFJTDogdmV0aCBBJiMzNDs7IHJldHVybiAxOyB9CiYjNDM7CW5zeCBpcCBsaW5rIGFkZCB2QiB0eXBlIHZldGggcGVlciBuYW1lIHZCcCB8fAomIzQzOwkJeyBlY2hvICYjMzQ7RkFJTDogdmV0aCBCJiMzNDs7IHJldHVybiAxOyB9CiYjNDM7CW5zeCBpcCBsaW5rIGFkZCB2SSB0eXBlIHZldGggcGVlciBuYW1lIHZJcCB8fAomIzQzOwkJeyBlY2hvICYjMzQ7RkFJTDogdmV0aCBJJiMzNDs7IHJldHVybiAxOyB9CiYjNDM7CWZvciBpIGluIHZBIHZCIHZJIHZBcCB2QnAgdklwOyBkbwomIzQzOwkJbnN4IGlwIGxpbmsgc2V0ICYjMzQ7JGkmIzM0OyB1cCB8fCB7IGVjaG8gJiMzNDtGQUlMOiAkaSB1cCYjMzQ7OyByZXR1cm4gMTsgfQomIzQzOwlkb25lCiYjNDM7CWlmICEgbnN4IGlwIGxpbmsgYWRkIG5hbWUgaHNyMCB0eXBlIGhzciBzbGF2ZTEgdkEgc2xhdmUyIHZCIFwKJiM0MzsJCWludGVybGluayB2SSBzdXBlcnZpc2lvbiA0NSBwcm90byAwIDImZ3Q7L2Rldi9udWxsOyB0aGVuCiYjNDM7CQllY2hvICYjMzQ7U0tJUDogSFNSIFJlZEJveCBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMga2VybmVsJiMzNDsKJiM0MzsJCXJldHVybiAka3NmdF9za2lwCiYjNDM7CWZpCiYjNDM7CW5zeCBpcCBsaW5rIHNldCBoc3IwIHVwIHx8IHsgZWNobyAmIzM0O0ZBSUw6IGhzcjAgdXAmIzM0OzsgcmV0dXJuIDE7IH0KJiM0MzsKJiM0MzsJbnN4IHB5dGhvbjMgL2Rldi9zdGRpbiAmbHQ7Jmx0OyYjMzk7UFlGMSYjMzk7CiYjNDM7aW1wb3J0IHNvY2tldCwgc2VsZWN0LCBzeXMsIHRpbWUKJiM0MzsKJiM0MztOT0RFICA9IGJ5dGVzLmZyb21oZXgoJiMzNDswMjExMjIzMzQ0NTUmIzM0OykKJiM0MztNQ0FTVCA9IGJ5dGVzLmZyb21oZXgoJiMzNDswMTAwNWUwMDAwMDEmIzM0OykKJiM0MztSQiAgICA9IGJ5dGVzLmZyb21oZXgob3BlbigmIzM0Oy9zeXMvY2xhc3MvbmV0L3ZJL2FkZHJlc3MmIzM0OykucmVhZCgpLnJlcGxhY2UoJiMzNDs6JiMzNDssICYjMzQ7JiMzNDspKQomIzQzO1BBWSAgID0gYnl0ZXMocmFuZ2UoNDYpKQomIzQzOwomIzQzO2RlZiBmcmFtZShzZXEpOgomIzQzOyAgICB0YWcgPSAoKCgxICZsdDsmbHQ7IDEyKSB8IGxlbihQQVkpKS50b19ieXRlcygyLCAmIzM0O2JpZyYjMzQ7KQomIzQzOyAgICAgICAgICAgJiM0Mzsgc2VxLnRvX2J5dGVzKDIsICYjMzQ7YmlnJiMzNDspICYjNDM7IGImIzM0O1x4MDhceDAwJiMzNDspCiYjNDM7ICAgIHJldHVybiBNQ0FTVCAmIzQzOyBOT0RFICYjNDM7IGImIzM0O1x4ODlceDJmJiMzNDsgJiM0MzsgdGFnICYjNDM7IFBBWQomIzQzOwomIzQzO3R4ID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfUEFDS0VULCBzb2NrZXQuU09DS19SQVcpOyB0eC5iaW5kKCgmIzM0O3ZBcCYjMzQ7LCAwKSkKJiM0MztzbSA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1BBQ0tFVCwgc29ja2V0LlNPQ0tfUkFXLAomIzQzOyAgICAgICAgc29ja2V0Lm50b2hzKDB4MDAwMykpCiYjNDM7c20uYmluZCgoJiMzNDtoc3IwJiMzNDssIDApKQomIzQzO3NpID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfUEFDS0VULCBzb2NrZXQuU09DS19SQVcsCiYjNDM7ICAgICAgICBzb2NrZXQubnRvaHMoMHgwMDAzKSkKJiM0MztzaS5iaW5kKCgmIzM0O3ZJcCYjMzQ7LCAwKSkKJiM0MztzbS5zZXRibG9ja2luZyhGYWxzZSk7IHNpLnNldGJsb2NraW5nKEZhbHNlKQomIzQzOwomIzQzO2ZvciBpIGluIHJhbmdlKDMpOgomIzQzOyAgICB0eC5zZW5kKGZyYW1lKGkgJiM0MzsgMSkpOyB0aW1lLnNsZWVwKDAuMDUpCiYjNDM7CiYjNDM7bV9zcmMgPSBpX3NyYyA9IE5vbmUKJiM0MztlbmQgPSB0aW1lLnRpbWUoKSAmIzQzOyA0CiYjNDM7d2hpbGUgdGltZS50aW1lKCkgJmx0OyBlbmQgYW5kIChtX3NyYyBpcyBOb25lIG9yIGlfc3JjIGlzIE5vbmUpOgomIzQzOyAgICByLCBfLCBfID0gc2VsZWN0LnNlbGVjdChbc20sIHNpXSwgW10sIFtdLCAwLjMpCiYjNDM7ICAgIGZvciBzIGluIHI6CiYjNDM7ICAgICAgICBwa3QgPSBzLnJlY3YoNjU1MzUpCiYjNDM7ICAgICAgICAjIGV4YWN0IGZsb3c6IGRzdCwgcG9zdC1zdHJpcCBFdGhlclR5cGUsIGV4YWN0IHBheWxvYWQsIG1pbiBsZW5ndGg7CiYjNDM7ICAgICAgICAjIGhfc291cmNlIGlzIHRoZSBhc3NlcnRlZCB2YWx1ZSBhbmQgbXVzdCBOT1QgYmUgZmlsdGVyZWQgb24KJiM0MzsgICAgICAgIGlmIChsZW4ocGt0KSAmbHQ7IDYwIG9yIHBrdFs6Nl0gIT0gTUNBU1Qgb3IgcGt0WzEyOjE0XSAhPSBiJiMzNDtceDA4XHgwMCYjMzQ7CiYjNDM7ICAgICAgICAgICAgICAgIG9yIHBrdFsxNDoxNCAmIzQzOyBsZW4oUEFZKV0gIT0gUEFZKToKJiM0MzsgICAgICAgICAgICBjb250aW51ZQomIzQzOyAgICAgICAgaWYgcyBpcyBzbSBhbmQgbV9zcmMgaXMgTm9uZToKJiM0MzsgICAgICAgICAgICBtX3NyYyA9IHBrdFs2OjEyXQomIzQzOyAgICAgICAgZWxpZiBzIGlzIHNpIGFuZCBpX3NyYyBpcyBOb25lOgomIzQzOyAgICAgICAgICAgIGlfc3JjID0gcGt0WzY6MTJdCiYjNDM7CiYjNDM7cHJpbnQoJiMzNDttYXN0ZXIgaF9zb3VyY2UgICAgPSYjMzQ7LCBtX3NyYy5oZXgoKSBpZiBtX3NyYyBlbHNlIE5vbmUpCiYjNDM7cHJpbnQoJiMzNDtub2RlIE1BQyAgICAgICAgICAgPSYjMzQ7LCBOT0RFLmhleCgpKQomIzQzO3ByaW50KCYjMzQ7aW50ZXJsaW5rIGhfc291cmNlID0mIzM0OywgaV9zcmMuaGV4KCkgaWYgaV9zcmMgZWxzZSBOb25lKQomIzQzO3ByaW50KCYjMzQ7cmVkYm94IE1BQyAgICAgICAgID0mIzM0OywgUkIuaGV4KCkpCiYjNDM7aWYgaV9zcmMgIT0gUkI6CiYjNDM7ICAgIHByaW50KCYjMzQ7RkFJTDogaW50ZXJsaW5rIGRpZCBub3QgY2FycnkgdGhlIFJlZEJveCBNQUMmIzM0OykKJiM0MzsgICAgc3lzLmV4aXQoMSkKJiM0MztpZiBtX3NyYyAhPSBOT0RFOgomIzQzOyAgICBwcmludCgmIzM0O0ZBSUw6IG1hc3RlciByZWNlaXZlZCAlcyBpbnN0ZWFkIG9mIHRoZSBub2RlIE1BQyAmIzM0OwomIzQzOyAgICAgICAgICAmIzM0OyhzaGFyZWQtbXV0YXRpb24gY29ycnVwdGlvbikmIzM0OwomIzQzOyAgICAgICAgICAlIChtX3NyYy5oZXgoKSBpZiBtX3NyYyBlbHNlICYjMzQ7bm90aGluZyYjMzQ7KSkKJiM0MzsgICAgc3lzLmV4aXQoMSkKJiM0MztwcmludCgmIzM0O1BBU1M6IG1hc3RlciBrZXB0IG5vZGUgTUFDLCBpbnRlcmxpbmsga2VwdCBSZWRCb3ggTUFDJiMzNDspCiYjNDM7c3lzLmV4aXQoMCkKJiM0MztQWUYxCiYjNDM7fQomIzQzOwomIzQzO3JjPTAKJiM0MzsKJiM0MztydW5fZjIKJiM0MztyZXQ9JD8KJiM0MztbICYjMzQ7JHJldCYjMzQ7IC1lcSAmIzM0OyRrc2Z0X3NraXAmIzM0OyBdICZhbXA7JmFtcDsgZXhpdCAmIzM0OyRrc2Z0X3NraXAmIzM0OwomIzQzO1sgJiMzNDskcmV0JiMzNDsgLWVxIDAgXSB8fCByYz0xCiYjNDM7CiYjNDM7cnVuX2YxCiYjNDM7cmV0PSQ/CiYjNDM7WyAmIzM0OyRyZXQmIzM0OyAtZXEgJiMzNDska3NmdF9za2lwJiMzNDsgXSAmYW1wOyZhbXA7IGV4aXQgJiMzNDska3NmdF9za2lwJiMzNDsKJiM0MztbICYjMzQ7JHJldCYjMzQ7IC1lcSAwIF0gfHwgcmM9MQomIzQzOwomIzQzO2lmIFsgJHJjIC1lcSAwIF07IHRoZW4KJiM0MzsJZWNobyAmIzM0O2hzcl9zaGFyZWRfbXV0YXRpb246IHBlci1lZ3Jlc3MgbXV0YXRpb24gaXNvbGF0aW9uIChGMSYjNDM7RjIpIFsgT0sgXSYjMzQ7CiYjNDM7ZWxzZQomIzQzOwllY2hvICYjMzQ7aHNyX3NoYXJlZF9tdXRhdGlvbjogcGVyLWVncmVzcyBtdXRhdGlvbiBpc29sYXRpb24gWyBGQUlMIF0mIzM0OyBcCiYjNDM7CQkmIzM0O3JjPSRyYyYjMzQ7IDEmZ3Q7JmFtcDsyCiYjNDM7ZmkKJiM0MztleGl0ICRyYwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwMDo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDQwCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSFNSL1BSUCBTaGFyZWQtTXV0YXRpb24gQnVnIEZpeCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgaGl0dGluZyBgbmV0L2hzci9oc3JfZm9yd2FyZC5jYCBhbmQgaW50cm9kdWNpbmcgYSBuZXcgc2VsZnRlc3QgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX3NoYXJlZF9tdXRhdGlvbi5zaGAuIE15IGluaXRpYWwgc2NhbiB0ZWxscyBtZSB0aGlzIGlzIGFkZHJlc3NpbmcgYSBzaGFyZWQtbXV0YXRpb24gYnVnIHdpdGhpbiB0aGUgSFNSL1BSUCBwcm90b2NvbHMuIFNwZWNpZmljYWxseSwgdGhlIGlzc3VlIHJldm9sdmVzIGFyb3VuZCBgc2tiX2Nsb25lYC4gSXQgbG9va3MgbGlrZSB3ZSB3ZXJlIGNsb25pbmcgU0tCcyBidXQgdGhlbiBkaXJlY3RseSBtb2RpZnlpbmcgdGhlICpjbG9uZWQqIFNLQiB3aXRob3V0IHVzaW5nIGBza2JfY293YCBvciBgc2tiX2NvcHlgIGZpcnN0LiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBtaXN0YWtlIOKAkyBtb2RpZnlpbmcgYSBjbG9uZSB3aXRob3V0IGVuc3VyaW5nIHRoZSBvcmlnaW5hbCBkYXRhIGlzIHByb3RlY3RlZC4gVGhpcyB3b3VsZCBsZWFkIHRvIGRhdGEgY29ycnVwdGlvbiBpbiB0aGUgb3JpZ2luYWwgU0tCLCBzaGFyZWQgd2l0aCBvdGhlciBjbG9uZXMsIGEgc2lnbmlmaWNhbnQgdnVsbmVyYWJpbGl0eS4KClRoZSBmaXggc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gSXQgYWRkcyBgc2tiX2Nvdyhza2IsIDApYCBiZWZvcmUgdGhlIG1vZGlmaWNhdGlvbiBzdGVwcy4gTGV0IG1lIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgdGhlIGNvbnRleHQgY29ycmVjdC4gTG9va3MgbGlrZSB0aGlzIGFmZmVjdHMgYGhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCwgYHBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCwgYW5kIGBoc3JfeG1pdGAgd2l0aGluIHRoZSBIU1IgbmV0d29yayBkcml2ZXIuIFF1aWNrIHJlbWluZGVyLCB0aGVzZSBhcmUgYWxsIHBhcnQgb2YgdGhlIEhTUiBzdGFjaywgYW5kIHRoYXQgZnVuY3Rpb25hbGl0eSBpcyBjb25maWd1cmVkIHdpdGggYENPTkZJR19IU1JgLgoKUmlnaHQsIHRpbWUgdG8gZGlnIGluIGFuZCB2ZXJpZnkgdGhlIGxvZ2ljIGFyb3VuZCB0aG9zZSBmdW5jdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBza2JfY293YCBpcyBjb3JyZWN0bHkgaW1wbGVtZW50ZWQgbm93IGluIGFsbCB0aGUgbGlzdGVkIGZ1bmN0aW9ucy4gSSYjMzk7bGwgYWxzbyBuZWVkIHRvIHNlZSBpZiB0aGUgbmV3IHNlbGZ0ZXN0IGFwcHJvcHJpYXRlbHkgY292ZXJzIHRoZSBidWcgc2NlbmFyaW8uIFdlIGNhbiYjMzk7dCBoYXZlIHRoaXMgYWdhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDA6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhTUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9oc3IvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9oc3IvS2NvbmZpZy01LVxubmV0L2hzci9LY29uZmlnOjY6Y29uZmlnIEhTUlxubmV0L2hzci9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5IChIU1IgXHUwMDI2IFBSUClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwMDo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTM2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIERlcGVuZGVuY2llcyBpbiB0aGUgYG5ldC9oc3IvS2NvbmZpZ2AgRmlsZSoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIGluIHRvbyBkZWVwLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJlLCB3aGljaCBpcyBhIGdvb2QgaGFiaXQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIGBuZXQvaHNyL0tjb25maWdgIGZpbGUuIEkmIzM5O20gZ29pbmcgdG8gbmF2aWdhdGUgdG8gdGhhdCBLY29uZmlnIGZpbGUuIEkgd2FudCB0byBzZWUgYSBjbGVhciBtYXAgb2YgdGhlIGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpdGhpbiB0aGUgSFNSIChIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5KSBtb2R1bGUuIEkga25vdyB0aGF0IGZpbGUgd2lsbCBjb250YWluIHRoZSBjcnVjaWFsIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIGFuZCBjb25kaXRpb25hbHMgdGhhdCBnb3Zlcm4gd2hpY2ggZmVhdHVyZXMgYXJlIGVuYWJsZWQsIGFuZCB3aGljaCBhcmVuJiMzOTt0LCBiYXNlZCBvbiB0aGUgb3ZlcmFsbCBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGNydWNpYWwgdmFyaWFibGVzIGFuZCBjb25kaXRpb25zIHRoYXQgZHJpdmUgdGhlIEhTUiBtb2R1bGUmIzM5O3MgYnVpbGQgcHJvY2Vzcy4gRXNzZW50aWFsbHksIEkmIzM5O20gYWltaW5nIGZvciBhIHF1aWNrIHNjYW4gb2YgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAwOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2hzci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgSUVDIDYyNDM5LTMgSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeVxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgSFNSXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5IChIU1IgXHUwMDI2IFBSUClcJiMzNDtcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgVGhpcyBlbmFibGVzIElFQyA2MjQzOSBkZWZpbmVkIEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzXG4gIDEwOlx0XHQgIFJlZHVuZGFuY3kgKEhTUikgYW5kIFBhcmFsbGVsIFJlZHVuZGFuY3kgUHJvdG9jb2wgKFBSUCkuXG4gIDExOlx0XG4gIDEyOlx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHlvdXIgTGludXggYm94IHdpbGwgYmUgYWJsZSB0byBhY3QgYXMgYVxuICAxMzpcdFx0ICBEQU5IIChcJiMzNDtEb3VibHkgYXR0YWNoZWQgbm9kZSBpbXBsZW1lbnRpbmcgSFNSXCYjMzQ7KSBvciBEQU5QIChcJiMzNDtEb3VibHlcbiAgMTQ6XHRcdCAgYXR0YWNoZWQgbm9kZSBpbXBsZW1lbnRpbmcgUFJQXCYjMzQ7KS4gRm9yIHRoaXMgdG8gd29yaywgeW91ciBMaW51eCBib3hcbiAgMTU6XHRcdCAgbmVlZHMgKGF0IGxlYXN0KSB0d28gcGh5c2ljYWwgRXRoZXJuZXQgaW50ZXJmYWNlcy5cbiAgMTY6XHRcbiAgMTc6XHRcdCAgRm9yIERBTkgsIGl0IG11c3QgYmUgY29ubmVjdGVkIGFzIGEgbm9kZSBpbiBhIHJpbmcgbmV0d29yayB0b2dldGhlclxuICAxODpcdFx0ICB3aXRoIG90aGVyIEhTUiBjYXBhYmxlIG5vZGVzLiBBbGwgRXRoZXJuZXQgZnJhbWVzIHNlbnQgb3ZlciB0aGUgSFNSXG4gIDE5Olx0XHQgIGRldmljZSB3aWxsIGJlIHNlbnQgaW4gYm90aCBkaXJlY3Rpb25zIG9uIHRoZSByaW5nIChvdmVyIGJvdGggc2xhdmVcbiAgMjA6XHRcdCAgcG9ydHMpLCBnaXZpbmcgYSByZWR1bmRhbnQsIGluc3RhbnQgZmFpbC1vdmVyIG5ldHdvcmsuIEVhY2ggSFNSIG5vZGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwMDo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzEyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBIU1IgQ29uZmlndXJhdGlvbiBhbmQgRm9yd2FyZGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBIU1IgY29uZmlndXJhdGlvbiwgYW5kIGl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBjb25maWcgaXRzZWxmLCBsZXQmIzM5O3MganVzdCBjYWxsIGl0IGBIU1JgLCBkb2VzbiYjMzk7dCBsb29rIGxpa2UgaXQgaGFzIGFueSBjcmF6eSBkZXBlbmRlbmNpZXMg4oCTIHN0YW5kYXJkIG5ldHdvcmtpbmcgaXMgYWxsIHRoYXQmIzM5O3MgcmVxdWlyZWQsIHdoaWNoIGlzIHdoYXQgSSYjMzk7ZCBleHBlY3QuIE5vdywgSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgdGFnZ2VkIGZyYW1lcyBhcmUgY3JlYXRlZCBhbmQgaGFuZGxlZC4gTXkgcHJpbWFyeSBpbnRlcmVzdCBsaWVzIGluIHRoZSBjb3JlIGZvcndhcmRpbmcgbG9naWMuCgpJIHRoaW5rIEkmIzM5O2xsIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgZnVuY3Rpb25zIGBoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZWAsIGBwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZWAsIGFuZCBgaHNyX3htaXRgIHdpdGhpbiB0aGUgYG5ldC9oc3IvaHNyX2ZvcndhcmQuY2AgZmlsZS4gVGhvc2UgdGhyZWUgc2VlbSBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgdGFnZ2luZyBhbmQgdHJhbnNtaXNzaW9uIHByb2Nlc3Nlcy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBIU1IgYW5kIFBSUCB0YWdnaW5nIG1lY2hhbmlzbXMgaW50ZXJhY3QuIEkgd2FudCB0byBzZWUgaG93IHRoZSBmcmFtZXMgYXJlIGNvbnN0cnVjdGVkIGFuZCBob3cgdGhleSBnZXQgc2VudCBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDA6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHNyX2NyZWF0ZV90YWdnZWRfZnJhbWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaHNyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaHNyL2hzcl9kZXZpY2UuYz02MjE9c3RhdGljIGNvbnN0IHN0cnVjdCBoc3JfcHJvdG9fb3BzIGhzcl9vcHMgPSB7XG5uZXQvaHNyL2hzcl9kZXZpY2UuYy02MjItXHQuc2VuZF9zdl9mcmFtZSA9IHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lLFxubmV0L2hzci9oc3JfZGV2aWNlLmM6NjIzOlx0LmNyZWF0ZV90YWdnZWRfZnJhbWUgPSBoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZSxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTYyNC1cdC5nZXRfdW50YWdnZWRfZnJhbWUgPSBoc3JfZ2V0X3VudGFnZ2VkX2ZyYW1lLFxuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYz0yODg9c3RhdGljIHN0cnVjdCBza19idWZmICpoc3JfZmlsbF90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtMzMwLSAqL1xubmV0L2hzci9oc3JfZm9yd2FyZC5jOjMzMTpzdHJ1Y3Qgc2tfYnVmZiAqaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy0zMzItXHRcdFx0XHRcdHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmg9MTc9c3RydWN0IHNrX2J1ZmYgKnBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmgtMTgtXHRcdFx0XHRcdHN0cnVjdCBoc3JfcG9ydCAqcG9ydCk7XG5uZXQvaHNyL2hzcl9mb3J3YXJkLmg6MTk6c3RydWN0IHNrX2J1ZmYgKmhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmgtMjAtXHRcdFx0XHRcdHN0cnVjdCBoc3JfcG9ydCAqcG9ydCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDA6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ0OAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBjb25zaWRlcmluZyBJJiMzOTttIGRlZXAgaW4gdGhpcyBjb2RlOgoKKipBbmFseXppbmcgRnVuY3Rpb24gU2NvcGUqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnM6IGBoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZWAsIGBwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZWAsIGFuZCBgaHNyX3htaXRgLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIGFsd2F5cyBhYm91dCBzY29wZSDigJMgYXJlIHRoZXNlIHN0YXRpYywgb3IgYXJlIHRoZXkgZ2xvYmFsPyBUaGUgYmVoYXZpb3Igd2lsbCBiZSB2ZXJ5IGRpZmZlcmVudC4gQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4gTG9va3MgbGlrZSBgaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWVgIGlzIGdsb2JhbCwgYW5kIGBwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZWAgaXMgYWxzbyBnbG9iYWxseSBhY2Nlc3NpYmxlLiBIbW0sIGJ1dCB0aGVuIGhlcmUmIzM5O3MgYGhzcl94bWl0YCwgZmxhZ2dlZCBhcyBzdGF0aWMuIE9rYXksIGdvb2QuIExldCYjMzk7cyBtYWtlIGFic29sdXRlbHkgc3VyZSBhYm91dCB0aGUgYGhzcl94bWl0YCBzY29waW5nIGFzIHRoYXQgY291bGQgYmUgYSBwb3RlbnRpYWwgcG9pbnQgb2YgZGl2ZXJnZW5jZSBsYXRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDA6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHNyX3htaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaHNyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaHNyL2hzcl9mb3J3YXJkLmM9NDI0PXN0YXRpYyB2b2lkIGhzcl9kZWxpdmVyX21hc3RlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy00NDQtXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6NDQ1OnN0YXRpYyBpbnQgaHNyX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0LFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTQ0Ni1cdFx0ICAgIHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXG4tLVxubmV0L2hzci9oc3JfZm9yd2FyZC5jPTU2MD1zdGF0aWMgdm9pZCBoc3JfZm9yd2FyZF9kbyhzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lKVxuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy02MjEtXHRcdH0gZWxzZSB7XG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6NjIyOlx0XHRcdGlmICghaHNyX3htaXQoc2tiLCBwb3J0LCBmcmFtZSkpXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNjIzLVx0XHRcdFx0aWYgKHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfU0xBVkVfQSB8fFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwMDo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDI0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBicmVha2Rvd24gb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgYGhzcl94bWl0YCBDb2RlKioKCk9rYXksIHNvIGBoc3JfeG1pdGAgaXMgc3RhdGljLCB3aGljaCB0ZWxscyBtZSBpdCYjMzk7cyBsaWtlbHkgYSBjb3JlIGludGVybmFsIGZ1bmN0aW9uIHdpdGhpbiB0aGlzIEhTUiAoSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSkgbW9kdWxlLiBUaGF0IG1lYW5zIGl0JiMzOTtzIHByb2JhYmx5IG5vdCBkaXJlY3RseSBjYWxsZWQgZnJvbSBvdXRzaWRlLCBidXQgcmF0aGVyIGFjdHMgYXMgdGhlIHdvcmtob3JzZSBmb3Igc2VuZGluZyBmcmFtZXMuIEdpdmVuIHRoYXQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyAqb3RoZXIqIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoIGl0LiBUaGUgZW50cnkgcG9pbnRzLCB0aGUgZnVuY3Rpb25zIHRoYXQga2ljayB0aGluZ3Mgb2ZmLCBhcmUgcHJvYmFibHkgYGhzcl9mb3J3YXJkX2RvYCwgYGhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCwgYHBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCwgYW5kIGBoc3JfZm9yd2FyZF9za2JgLiBUaG9zZSBmdW5jdGlvbnMgYXJlIHRoZSBmcm9udCBkb29ycywgdGhlIGluaXRpYXRvcnMgb2YgdGhlIHByb2Nlc3MuIFRpbWUgdG8gdmVyaWZ5IHRoYXQgaHlwb3RoZXNpcy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGhzcl9mb3J3YXJkX2RvYCBhbmQgc2VlIHdoYXQgaXQgZG9lcy4gSSYjMzk7bGwgZm9jdXMgbXkgYXR0ZW50aW9uIHRoZXJlIGFuZCBzZWUgd2hhdCBpdCB0ZWxscyBtZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDA6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHNyX2ZvcndhcmRfZG8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaHNyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaHNyL2hzcl9mb3J3YXJkLmM9NDkyPWJvb2wgaHNyX2Ryb3BfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy01NTktICovXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6NTYwOnN0YXRpYyB2b2lkIGhzcl9mb3J3YXJkX2RvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNTYxLXtcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM9Nzc1PXZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzgzLVx0aHNyX3JlZ2lzdGVyX2ZyYW1lX2luKGZyYW1lLm5vZGVfc3JjLCBwb3J0LCBmcmFtZS5zZXF1ZW5jZV9ucik7XG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6Nzg0Olx0aHNyX2ZvcndhcmRfZG8oXHUwMDI2ZnJhbWUpO1xubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc4NS1cdHJjdV9yZWFkX3VubG9jaygpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwMDo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTk4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIG5ldHdvcmsga2VybmVsIGludGVybmFscywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHBhY2tldCBwcm9jZXNzaW5nLgoKKipBbmFseXppbmcgdGhlIFNpZ25pZmljYW5jZSBvZiBhIEdsb2JhbCBWYXJpYWJsZTogYGhzcl9mb3J3YXJkX3NrYmAqKgoKQWxyaWdodCwgc28gYGhzcl9mb3J3YXJkX3NrYmAgaXMgZ2xvYmFsLCBodWg/IEltbWVkaWF0ZWx5LCBteSBtaW5kIHN0YXJ0cyByYWNpbmcuIEEgZ2xvYmFsIHZhcmlhYmxlIGluIHRoaXMgY29udGV4dCBpcyByYXJlbHkgYSBnb29kIHRoaW5nLCB1bmxlc3MgaXRzIHVzZSBpcyAqdmVyeSogY2FyZWZ1bGx5IG1hbmFnZWQuIE15IGluaXRpYWwgcmVhY3Rpb24gaXMgYSBtaXggb2YgaW50cmlndWUgYW5kIGNvbmNlcm4uIAoKYGhzcl9mb3J3YXJkX3NrYmAgc3VnZ2VzdHMgYSBzdHJ1Y3R1cmUsIHByb2JhYmx5IGEgYHNrX2J1ZmZgLCBpcyBiZWluZyB1c2VkIHRvIGZvcndhcmQgcGFja2V0cyBpbiBhbiBIU1IgKEhpZ2gtYXZhaWxhYmlsaXR5IFNlYW1sZXNzIFJlZHVuZGFuY3kpIGNvbnRleHQuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgZ2xvYmFsIGltcGxpZXMgaXTigJlzIHByb2JhYmx5IGFjY2Vzc2libGUgZnJvbSBtdWx0aXBsZSB0aHJlYWRzIG9yIGludGVycnVwdCBjb250ZXh0cywgd2hpY2ggcmFpc2VzIHNldmVyYWwgcmVkIGZsYWdzLiBJcyBpdCBhZGVxdWF0ZWx5IHByb3RlY3RlZD8gQXJlIHRoZXJlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgbHVya2luZz8KCkkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBpdHMgc2NvcGUuIFdoYXQgbW9kdWxlcyBhY2Nlc3MgdGhpcyB2YXJpYWJsZT8gV2hlcmUgaXMgaXQgZGVmaW5lZCBhbmQgaW5pdGlhbGl6ZWQ/IEhvdyBpcyBpdCBtb2RpZmllZD8gSXMgdGhlcmUgYSBzcGlubG9jaywgbXV0ZXgsIG9yIFJDVSBtZWNoYW5pc20gZW1wbG95ZWQgZm9yIHN5bmNocm9uaXphdGlvbj8gQSBnbG9iYWwgYHNrYmAgcG9pbnRlciBzY3JlYW1zIGZvciBjb25jdXJyZW50IGFjY2VzcyBzY3J1dGlueS4KClRoZSB1c2Ugb2YgYSBnbG9iYWwgYHNrYmAgaXMgYWxzbyBhIGJpdCB1bnVzdWFsLiBVc3VhbGx5LCB3ZSYjMzk7ZCBwYXNzIHRoZSBgc2tfYnVmZmAgYXJvdW5kIGZ1bmN0aW9uIGFyZ3VtZW50cy4gUGVyaGFwcyBpdOKAmXMgYSB0ZW1wb3JhcnkgYnVmZmVyIGZvciByZS1lbmNhcHN1bGF0aW9uIG9yIGZyYW1lIGNvbnN0cnVjdGlvbiBpbiB0aGUgSFNSIHBhdGguIEkmIzM5O20gd29uZGVyaW5nIGlmIGl0JiMzOTtzIGJlaW5nIHVzZWQgZm9yIGludGVyLUNQVSBjb21tdW5pY2F0aW9uLCBvciBpZiB0aGUgZnVuY3Rpb24gaXMganVzdCBzaGFyaW5nIGEgYnVmZmVyLgoKSSBuZWVkIHRvIGRpdmUgZGVlcGVyIGludG8gdGhlIGNvZGUgdXNpbmcgdGhpcyB2YXJpYWJsZSwgSSBuZWVkIHRvIGtub3cgZXhhY3RseSBob3cgaXQgaXMgdXNlZC4gSSBhbSBtb3N0IGludGVyZXN0ZWQgaW4gaG93IHRoZSB2YXJpYWJsZSBpcyBzaGFyZWQgYW5kIGFjY2Vzc2VkLCBpdCBhbGwgaGluZ2VzIG9uIGNvcnJlY3Qgc3luY2hyb25pemF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwMDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoc3JfZm9yd2FyZF9za2ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaHNyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaHNyL2hzcl9kZXZpY2UuYz0yMjQ9c3RhdGljIG5ldGRldl90eF90IGhzcl9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9oc3IvaHNyX2RldmljZS5jLTIzNS1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmhzci1cdTAwM2VzZXFucl9sb2NrKTtcbm5ldC9oc3IvaHNyX2RldmljZS5jOjIzNjpcdFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgbWFzdGVyKTtcbm5ldC9oc3IvaHNyX2RldmljZS5jLTIzNy1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xuLS1cbm5ldC9oc3IvaHNyX2RldmljZS5jPTI5Mz1zdGF0aWMgdm9pZCBzZW5kX2hzcl9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsXG4tLVxubmV0L2hzci9oc3JfZGV2aWNlLmMtMzYzLVxubmV0L2hzci9oc3JfZGV2aWNlLmM6MzY0Olx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XG5uZXQvaHNyL2hzcl9kZXZpY2UuYy0zNjUtXHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4tLVxubmV0L2hzci9oc3JfZGV2aWNlLmM9MzY5PXN0YXRpYyB2b2lkIHNlbmRfcHJwX3N1cGVydmlzaW9uX2ZyYW1lKHN0cnVjdCBoc3JfcG9ydCAqbWFzdGVyLFxuLS1cbm5ldC9oc3IvaHNyX2RldmljZS5jLTQwNC1cbm5ldC9oc3IvaHNyX2RldmljZS5jOjQwNTpcdGhzcl9mb3J3YXJkX3NrYihza2IsIG1hc3Rlcik7XG5uZXQvaHNyL2hzcl9kZXZpY2UuYy00MDYtXHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG4tLVxubmV0L2hzci9oc3JfZm9yd2FyZC5jPTcxNz1zdGF0aWMgaW50IGZpbGxfZnJhbWVfaW5mbyhzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03NzQtLyogTXVzdCBiZSBjYWxsZWQgaG9sZGluZyByY3UgcmVhZCBsb2NrIChiZWNhdXNlIG9mIHRoZSBwb3J0IHBhcmFtZXRlcikgKi9cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo3NzU6dm9pZCBoc3JfZm9yd2FyZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc3Ni17XG4tLVxubmV0L2hzci9oc3JfZm9yd2FyZC5oLTE1LVxubmV0L2hzci9oc3JfZm9yd2FyZC5oOjE2OnZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCk7XG5uZXQvaHNyL2hzcl9mb3J3YXJkLmgtMTctc3RydWN0IHNrX2J1ZmYgKnBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXG4tLVxubmV0L2hzci9oc3Jfc2xhdmUuYz0yND1zdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBoc3JfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYilcbi0tXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTgwLVx0XHRzcGluX2xvY2tfYmgoXHUwMDI2aHNyLVx1MDAzZXNlcW5yX2xvY2spO1xubmV0L2hzci9oc3Jfc2xhdmUuYzo4MTpcdFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTgyLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZoc3ItXHUwMDNlc2VxbnJfbG9jayk7XG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTgzLVx0fSBlbHNlIHtcbm5ldC9oc3IvaHNyX3NsYXZlLmM6ODQ6XHRcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xubmV0L2hzci9oc3Jfc2xhdmUuYy04NS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDA6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4NDIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqRGl2aW5nIGludG8gdGhlIEhTUiBGb3J3YXJkaW5nIE1lY2hhbmlzbSoqCgpSaWdodCwgc28gYGhzcl9mb3J3YXJkX3NrYmAgaXMgdGhlIHByaW1lIGRpcmVjdGl2ZSwgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHRoZSBwYWNrZXQgZm9yd2FyZGluZyBwcm9jZXNzLiBUaGF0JiMzOTtzIHdoZXJlIGl0IGFsbCBiZWdpbnMuIE5vdywgSSBzZWUgYGhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCBhbmQgYHBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCBhcmUgdXNlZCBieSB0aGUgZm9yd2FyZGluZyBmdW5jdGlvbnMsIGFuZCBJIHN1c3BlY3QgdGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCBhY3R1YWxseSBidWlsZCB0aGUgdGFnZ2VkIGZyYW1lcy4gR2l2ZW4gdGhhdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBhbmQsIHNwZWNpZmljYWxseSwgaG93IHRoZSB0YWdnaW5nIGlzIGtpY2tlZCBvZmYgYW5kIGNvbnRyb2xsZWQuIEkmIzM5O2xsIG5lZWQgdG8gZ28gZGVlcGVyIGludG8gYGhzcl9mb3J3YXJkX2RvYCB0byBmaWd1cmUgb3V0IHRoZSBvcGVyYXRpb25hbCBkZXRhaWxzIGFuZCBob3cgdGhlIGNhbGwtdHJlZSB3b3Jrcy4gSSYjMzk7bGwgc2VlIHdoZXJlIHRob3NlIGZyYW1lIGNyZWF0aW9uIGZ1bmN0aW9ucyBmaXQgaW50byB0aGUgcHV6emxlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBzZWUgKmhvdyogdGhleSYjMzk7cmUgY2FsbGVkIGZyb20gd2l0aGluIGBoc3JfZm9yd2FyZF9kb2AsIGxpa2VseSB0aHJvdWdoIHNvbWUgc29ydCBvZiBmdW5jdGlvbiBwb2ludGVyIG9yIG9wZXJhdGlvbiBzdHJ1Y3R1cmUuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAwOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NyZWF0ZV90YWdnZWRfZnJhbWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaHNyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaHNyL2hzcl9kZXZpY2UuYz02MjE9c3RhdGljIGNvbnN0IHN0cnVjdCBoc3JfcHJvdG9fb3BzIGhzcl9vcHMgPSB7XG5uZXQvaHNyL2hzcl9kZXZpY2UuYy02MjItXHQuc2VuZF9zdl9mcmFtZSA9IHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lLFxubmV0L2hzci9oc3JfZGV2aWNlLmM6NjIzOlx0LmNyZWF0ZV90YWdnZWRfZnJhbWUgPSBoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZSxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTYyNC1cdC5nZXRfdW50YWdnZWRfZnJhbWUgPSBoc3JfZ2V0X3VudGFnZ2VkX2ZyYW1lLFxuLS1cbm5ldC9oc3IvaHNyX2RldmljZS5jPTYzMT1zdGF0aWMgY29uc3Qgc3RydWN0IGhzcl9wcm90b19vcHMgcHJwX29wcyA9IHtcbm5ldC9oc3IvaHNyX2RldmljZS5jLTYzMi1cdC5zZW5kX3N2X2ZyYW1lID0gc2VuZF9wcnBfc3VwZXJ2aXNpb25fZnJhbWUsXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzo2MzM6XHQuY3JlYXRlX3RhZ2dlZF9mcmFtZSA9IHBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lLFxubmV0L2hzci9oc3JfZGV2aWNlLmMtNjM0LVx0LmdldF91bnRhZ2dlZF9mcmFtZSA9IHBycF9nZXRfdW50YWdnZWRfZnJhbWUsXG4tLVxubmV0L2hzci9oc3JfZm9yd2FyZC5jPTI4OD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmhzcl9maWxsX3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy0zMzAtICovXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6MzMxOnN0cnVjdCBza19idWZmICpoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTMzMi1cdFx0XHRcdFx0c3RydWN0IGhzcl9wb3J0ICpwb3J0KVxuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy0zODUtXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6Mzg2OnN0cnVjdCBza19idWZmICpwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTM4Ny1cdFx0XHRcdFx0c3RydWN0IGhzcl9wb3J0ICpwb3J0KVxuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuYz01NjA9c3RhdGljIHZvaWQgaHNyX2ZvcndhcmRfZG8oc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSlcbi0tXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNjA4LVx0XHQgICAgcG9ydC1cdTAwM2V0eXBlID09IEhTUl9QVF9TTEFWRV9CKVxubmV0L2hzci9oc3JfZm9yd2FyZC5jOjYwOTpcdFx0XHRza2IgPSBoc3ItXHUwMDNlcHJvdG9fb3BzLVx1MDAzZWNyZWF0ZV90YWdnZWRfZnJhbWUoZnJhbWUsIHBvcnQpO1xubmV0L2hzci9oc3JfZm9yd2FyZC5jLTYxMC1cdFx0ZWxzZVxuLS1cbm5ldC9oc3IvaHNyX2ZvcndhcmQuaD0xNj12b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpO1xubmV0L2hzci9oc3JfZm9yd2FyZC5oOjE3OnN0cnVjdCBza19idWZmICpwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxubmV0L2hzci9oc3JfZm9yd2FyZC5oLTE4LVx0XHRcdFx0XHRzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpO1xubmV0L2hzci9oc3JfZm9yd2FyZC5oOjE5OnN0cnVjdCBza19idWZmICpoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxubmV0L2hzci9oc3JfZm9yd2FyZC5oLTIwLVx0XHRcdFx0XHRzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpO1xuLS1cbm5ldC9oc3IvaHNyX21haW4uaD0xNjQ9c3RydWN0IGhzcl9wcm90b19vcHMge1xuLS1cbm5ldC9oc3IvaHNyX21haW4uaC0xNzItXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpO1xubmV0L2hzci9oc3JfbWFpbi5oOjE3MzpcdHN0cnVjdCBza19idWZmICogKCpjcmVhdGVfdGFnZ2VkX2ZyYW1lKShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxubmV0L2hzci9oc3JfbWFpbi5oLTE3NC1cdFx0XHRcdFx0XHRzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwMDo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA4OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDcxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEhTUiBQYXRjaCBhbmQgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGhhbmRlZCB0aGlzIHBhdGNoIGFuZCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGF0dGFjayBzdXJmYWNlIGFuZCBob3cgdG8gYXBwcm9hY2ggZnV6emluZyBpdC4gTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgc2VlLCBgaHNyX2ZvcndhcmRfc2tiYCBpcyB0aGUgY2VudHJhbCBmdW5jdGlvbiBoZXJlLiBJdCYjMzk7cyB0aGUgcG9pbnQgd2hlcmUgcGFja2V0cyBmcm9tIGJvdGggdGhlIHNsYXZlIGFuZCBtYXN0ZXIgZGV2aWNlcyBjb252ZXJnZS4gYGhzcl9kZXZfeG1pdGAgaXMgdGhlIGBuZG9fc3RhcnRfeG1pdGAgZm9yIHRoZSBtYXN0ZXIsIGFuZCBgaHNyX2hhbmRsZV9mcmFtZWAgaXMgdGhlIGByeF9oYW5kbGVyYCBmb3IgdGhlIHNsYXZlcy4gVGhlc2UgYXJlIGFsbCBsaW5rZWQgdG9nZXRoZXI6IGBoc3JfZm9yd2FyZF9za2JgIGNhbGxzIGBoc3JfZGV2X3htaXRgIGFuZCBgaHNyX2hhbmRsZV9mcmFtZWAgdG8gZm9yd2FyZCBwYWNrZXRzLgoKVGhlIHBhdGNoIGl0c2VsZiB0b3VjaGVzIGBoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZWAsIGBwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZWAsIGFuZCBgaHNyX3htaXRgLCBhbGwgcmVhY2hhYmxlIHRocm91Z2ggdGhlIGNvcmUgb2YgYGhzcl9mb3J3YXJkX3NrYmAuIFRoaXMgaXMgYWxsIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIGNhbiBzZXQgdXAgYW4gSFNSIGRldmljZSBhbmQgc3RhcnQgc2VuZGluZyBwYWNrZXRzIHRvIHRlc3QgdGhpcy4gVGhlIHJlbGV2YW50IGNvbmZpZyBpcyBgQ09ORklHX0hTUmAuIEdvb2QsIGl0JiMzOTtzIGEgdHJpc3RhdGUsIGFuZCB0aGF0JiMzOTtzIHRoZSBvbmx5IG9uZSBvZiBpbnRlcmVzdCwgaXQgc2VlbXMuCgpXYWl0LCBJIG5lZWQgdG8gY2hlY2sgYGhzcl94bWl0YCBtb3JlIGNhcmVmdWxseS4gVGhlcmUmIzM5O3MgYSBuZXcgY2hlY2sgaW5zaWRlIGl0LiBTcGVjaWZpY2FsbHksIGluc2lkZSBgaHNyX3htaXRgLCB0aGVyZSYjMzk7cyBhIG5ldyBjaGVjayB3aGVyZSBpZiBgcG9ydC0mZ3Q7dHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LYCBhbmQgYSBzZXQgb2Ygb3RoZXIgY29uZGl0aW9ucyBhcmUgdHJ1ZSwgdGhlIHBhY2tldCBpcyBkcm9wcGVkIHdpdGggYHNrYl9jb3dgLiBUaGlzIGNvdWxkIGJlIGludGVyZXN0aW5nLCBhbmQgZGVmaW5pdGVseSBzb21ldGhpbmcgSSBzaG91bGQgZm9jdXMgb24uIFRoaXMgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byBpbnRlcmxpbmstYm91bmQgU0tCcy4gV2Ugd2FudCB0byB0ZXN0IHRoaXMgY29kZXBhdGguIAoKSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucywgcGFydGljdWxhcmx5IHRoZSB2YXJpb3VzIGNhbGxpbmcgcmVsYXRpb25zaGlwcy4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGBoc3JfZm9yd2FyZF9za2JgIGlzIGV4cG9ydGVkIG9yIGlmIGl0JiMzOTtzIGp1c3QgZ2xvYmFsLgoKSSB3aWxsIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBwYWNrZXRzIGNhbiB0cmlnZ2VyIHRoYXQgY29kZXBhdGggZm9yIHRoZSBgaHNyX3htaXRgIGNoYW5nZXMgYW5kIGNyYWZ0IGludGVyZXN0aW5nIHRlc3QgY2FzZXMgdG8gZXhwbG9pdCBwb3RlbnRpYWwgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAwMDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmhzcl9mb3J3YXJkX3NrYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9oc3IvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDA6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzMjUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEhTUiBNb2R1bGUgRW50cnkgUG9pbnRzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIEhTUiBtb2R1bGUgYW5kIGp1c3QgdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiBpdHMgaW50ZXJuYWwgc3RydWN0dXJlLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCBhIGZldyB0aGluZ3MgYXJlIGltbWVkaWF0ZWx5IGNsZWFyIGFib3V0IHNjb3BlOiBgaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWVgIGFuZCBgcHJwX2NyZWF0ZV90YWdnZWRfZnJhbWVgIHNlZW0gdG8gYmUgZ2xvYmFsbHkgYWNjZXNzaWJsZSB3aXRoaW4gdGhlIG1vZHVsZSwgd2hpbGUgdGhlIG90aGVyIGZ1bmN0aW9ucyBtZW50aW9uZWQgYXJlIHNjb3BlZCB3aXRoaW4gdGhlIG1vZHVsZTogYGhzcmAKClRoZSBtb3JlIGludGVyZXN0aW5nIGNhc2UgaW52b2x2ZXMgYGhzcl9kZXZfeG1pdGAgYW5kIGBoc3JfaGFuZGxlX2ZyYW1lYCwgYW5kIHNpbmNlIHRob3NlIGFyZSBzdGF0aWMsIHRoZXkgaGF2ZSB0byBiZSBpbXBvcnRhbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24gYXQgdGhlIGVudHJ5IHBvaW50cyBmb3IgdGhlIEhTUiBkcml2ZXIuIFRoZXkgbG9vayBsaWtlIHByaW1lIGNhbmRpZGF0ZXMgZm9yIGRlZXBlciBpbnZlc3RpZ2F0aW9uLgoKQWgsIHJpZ2h0LCBgaHNyX2Rldl94bWl0YCBpcyB0aGUgYG5kb19zdGFydF94bWl0YCBmdW5jdGlvbiwgdGhlIGxpa2VseSB0cmFuc21pc3Npb24gZW50cnkgcG9pbnQuIEFuZCBgaHNyX2hhbmRsZV9mcmFtZWAgaXMgdGhlIGByeF9oYW5kbGVyYCwgc28gdGhhdCYjMzk7cyB0aGUgcmVjZWl2ZSBwYXRoLiBZZXAsIHRoZXNlIGFyZSBkZWZpbml0ZWx5IGdvb2QgZm9jdXMgc3ltYm9scyBmb3IgbXkgYW5hbHlzaXMuCgpOb3cgSSBzaG91bGQgcHJvYmFibHkgcXVpY2tseSBjaGVjayBpZiBJJiMzOTt2ZSBtaXNzZWQgYW55IG90aGVyIGVudHJ5IHBvaW50cy4gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAwOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hzcl9kZXZfeG1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9oc3IvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9oc3IvaHNyX2RldmljZS5jPTIxNj1zdGF0aWMgbmV0ZGV2X2ZlYXR1cmVzX3QgaHNyX2ZpeF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9oc3IvaHNyX2RldmljZS5jLTIyMy1cbm5ldC9oc3IvaHNyX2RldmljZS5jOjIyNDpzdGF0aWMgbmV0ZGV2X3R4X3QgaHNyX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy0yMjUte1xuLS1cbm5ldC9oc3IvaHNyX2RldmljZS5jPTYwNT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGhzcl9kZXZpY2Vfb3BzID0ge1xuLS1cbm5ldC9oc3IvaHNyX2RldmljZS5jLTYwOC1cdC5uZG9fc3RvcCA9IGhzcl9kZXZfY2xvc2UsXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzo2MDk6XHQubmRvX3N0YXJ0X3htaXQgPSBoc3JfZGV2X3htaXQsXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy02MTAtXHQubmRvX2NoYW5nZV9yeF9mbGFncyA9IGhzcl9jaGFuZ2VfcnhfZmxhZ3MsXG4tLVxubmV0L2hzci9oc3JfZGV2aWNlLmM9NjcxPWJvb2wgaXNfaHNyX21hc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2hzci9oc3JfZGV2aWNlLmMtNjcyLXtcbm5ldC9oc3IvaHNyX2RldmljZS5jOjY3MzpcdHJldHVybiAoZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX3N0YXJ0X3htaXQgPT0gaHNyX2Rldl94bWl0KTtcbm5ldC9oc3IvaHNyX2RldmljZS5jLTY3NC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDAwOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTU0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIHRoZSBIU1IgRGV2aWNlIFRyYW5zbWlzc2lvbioqCgpBbHJpZ2h0LCBzbyBgaHNyX2Rldl94bWl0YC4uLiB5ZXAsIHRoYXQmIzM5O3MgaXQuIFRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHRoZSBIU1IgZGV2aWNlIHVzZXMgYXMgaXRzIGBuZG9fc3RhcnRfeG1pdGAuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0IGhhbmRsZXMgaW5kaXZpZHVhbCBmcmFtZXMuIFRvIGRvIHRoYXQsIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IHRoZSBgaHNyX2hhbmRsZV9mcmFtZWAgZnVuY3Rpb24uIEkgd2FudCB0byBzZWUgaG93IHRoZSBkZXZpY2UgcHJvY2Vzc2VzIGFuZCBtYW5hZ2VzIHRoZSBmcmFtZXMuIFRoaXMgd2lsbCByZWFsbHkgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIHRyYW5zbWlzc2lvbiBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDA6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHNyX2hhbmRsZV9mcmFtZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9oc3IvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9oc3IvaHNyX2RldmljZS5jPTcyMD1pbnQgaHNyX2Rldl9maW5hbGl6ZShzdHJ1Y3QgbmV0X2RldmljZSAqaHNyX2Rldiwgc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlWzJdLFxuLS1cbm5ldC9oc3IvaHNyX2RldmljZS5jLTc0Ni1cbm5ldC9oc3IvaHNyX2RldmljZS5jOjc0NzpcdC8qIE1ha2Ugc3VyZSB3ZSByZWNvZ25pemUgZnJhbWVzIGZyb20gb3Vyc2VsdmVzIGluIGhzcl9oYW5kbGVfZnJhbWUoKSAqL1xubmV0L2hzci9oc3JfZGV2aWNlLmMtNzQ4LVx0cmVzID0gaHNyX2NyZWF0ZV9zZWxmX25vZGUoaHNyLCBoc3JfZGV2LVx1MDAzZWRldl9hZGRyLFxuLS1cbm5ldC9oc3IvaHNyX2ZyYW1lcmVnLmM9NjY9Ym9vbCBoc3JfaXNfbm9kZV9pbl9kYihzdHJ1Y3QgbGlzdF9oZWFkICpub2RlX2RiLFxuLS1cbm5ldC9oc3IvaHNyX2ZyYW1lcmVnLmMtNzEtXG5uZXQvaHNyL2hzcl9mcmFtZXJlZy5jOjcyOi8qIEhlbHBlciBmb3IgZGV2aWNlIGluaXQ7IHRoZSBzZWxmX25vZGUgaXMgdXNlZCBpbiBoc3JfaGFuZGxlX2ZyYW1lKCkgdG9cbm5ldC9oc3IvaHNyX2ZyYW1lcmVnLmMtNzMtICogcmVjb2duaXplIGZyYW1lcyBmcm9tIHNlbGYgdGhhdCYjMzk7cyBiZWVuIGxvb3BlZCBvdmVyIHRoZSBIU1IgcmluZy5cbi0tXG5uZXQvaHNyL2hzcl9tYWluLmM9MzE9c3RhdGljIGludCBoc3JfbmV0ZGV2X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGV2ZW50LFxuLS1cbm5ldC9oc3IvaHNyX21haW4uYy05MS1cbm5ldC9oc3IvaHNyX21haW4uYzo5MjpcdFx0LyogTWFrZSBzdXJlIHdlIHJlY29nbml6ZSBmcmFtZXMgZnJvbSBvdXJzZWx2ZXMgaW4gaHNyX2hhbmRsZV9mcmFtZSgpICovXG5uZXQvaHNyL2hzcl9tYWluLmMtOTMtXHRcdHBvcnQgPSBoc3JfcG9ydF9nZXRfaHNyKGhzciwgSFNSX1BUX1NMQVZFX0IpO1xuLS1cbm5ldC9oc3IvaHNyX3NsYXZlLmM9MTk9Ym9vbCBoc3JfaW52YWxpZF9kYW5faW5ncmVzc19mcmFtZShfX2JlMTYgcHJvdG9jb2wpXG4tLVxubmV0L2hzci9oc3Jfc2xhdmUuYy0yMy1cbm5ldC9oc3IvaHNyX3NsYXZlLmM6MjQ6c3RhdGljIHJ4X2hhbmRsZXJfcmVzdWx0X3QgaHNyX2hhbmRsZV9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTI1LXtcbi0tXG5uZXQvaHNyL2hzcl9zbGF2ZS5jPTk0PWJvb2wgaHNyX3BvcnRfZXhpc3RzKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTk1LXtcbm5ldC9oc3IvaHNyX3NsYXZlLmM6OTY6XHRyZXR1cm4gcmN1X2FjY2Vzc19wb2ludGVyKGRldi1cdTAwM2VyeF9oYW5kbGVyKSA9PSBoc3JfaGFuZGxlX2ZyYW1lO1xubmV0L2hzci9oc3Jfc2xhdmUuYy05Ny19XG4tLVxubmV0L2hzci9oc3Jfc2xhdmUuYz0xNDE9c3RhdGljIGludCBoc3JfcG9ydGRldl9zZXR1cChzdHJ1Y3QgaHNyX3ByaXYgKmhzciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTE2OC1cbm5ldC9oc3IvaHNyX3NsYXZlLmM6MTY5Olx0cmVzID0gbmV0ZGV2X3J4X2hhbmRsZXJfcmVnaXN0ZXIoZGV2LCBoc3JfaGFuZGxlX2ZyYW1lLCBwb3J0KTtcbm5ldC9oc3IvaHNyX3NsYXZlLmMtMTcwLVx0aWYgKHJlcylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDA6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxMDYKCQkJCQkJCW91dHB1dDogMTk2CgkJCQkJCQl0aG91Z2h0czogNTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgQW5hbHlzaXM6IEhTUiBTaGFyZWQtTXV0YXRpb24gQnVnIEZpeCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIHllcywgYGhzcl9oYW5kbGVfZnJhbWVgIGlzIHRoZSByZWNlaXZlIGhhbmRsZXIgZm9yIHRoZSBzbGF2ZSBIU1IgZGV2aWNlcy4gVGhhdCYjMzk7cyBhIGtleSBmdW5jdGlvbi4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgZml4LCBteSBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGVzZSBzeW1ib2xzOiBgaHNyX2Rldl94bWl0YCwgYGhzcl9oYW5kbGVfZnJhbWVgLCBgaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWVgLCBgcHJwX2NyZWF0ZV90YWdnZWRfZnJhbWVgLCBhbmQgYGhzcl9mb3J3YXJkX3NrYmAuIFRoZXNlIGZ1bmN0aW9ucyBzZWVtIGNlbnRyYWwgdG8gdGhlIHByb2JsZW0uCgpMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uLiBJdCBsb29rcyBsaWtlIGl0IGp1c3QgcmVxdWlyZXMgYEhTUmAuIEdvb2QuIEkmIzM5O2xsIG1ha2Ugc3VyZSB0byBub3RlIHRoYXQuCgpBaGEhIFRoZXJlJiMzOTtzIGFsc28gYSBtb2RpZmljYXRpb24gdG8gYSBzZWxmdGVzdCBzY3JpcHQgKGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9zaGFyZWRfbXV0YXRpb24uc2hgKS4gVGhhdCYjMzk7cyBub3QgdGhlIHRhcmdldC4gV2hpbGUgaXQmIzM5O3MgZ29vZCB0aGUgc2VsZiB0ZXN0IGlzIGluY2x1ZGVkIGl0IGRvZXMgbm90IG5lZWQgdG8gYmUgZnV6emVkLiBUaGUgcmVhbCBrZXJuZWwgY2hhbmdlcyBhcmUgaW4gYG5ldC9oc3IvaHNyX2ZvcndhcmQuY2AsIGFuZCB0aG9zZSBhcmUgd2hhdCBJJiMzOTttIGludGVyZXN0ZWQgaW4gZnV6emluZy4KCk5vdywgbGV0JiMzOTtzIHRoaW5rIGFib3V0ICp3aHkqIHRoaXMgaXMgZnV6emFibGUuIFRoZSBwYXRjaCBhZGRyZXNzZXMgYSBzaGFyZWQtbXV0YXRpb24gYnVnIGluIEhTUi9QUlAgd2hlcmUgY2xvbmVkIGBza2JgcyB3ZXJlIGJlaW5nIGRpcmVjdGx5IG1vZGlmaWVkIHdpdGhvdXQgcHJvcGVyIGNvcHktb24td3JpdGUgbWVjaGFuaXNtcyAoYHNrYl9jb3dgIG9yIGBza2JfY29weWApLiBUaGlzIHdvdWxkIGNvcnJ1cHQgdGhlIG9yaWdpbmFsIHNoYXJlZCBkYXRhLiBUaGUgZml4IGludm9sdmVzIGFkZGluZyBgc2tiX2Nvdyhza2IsIDApYCBiZWZvcmUgbW9kaWZ5aW5nIHRoZSBjbG9uZWQgYHNrYmAgaW4gZnVuY3Rpb25zIGxpa2UgYGhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCwgYHBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCwgYW5kIGBoc3JfeG1pdGAuIFRoZXNlIGZ1bmN0aW9ucywgY3J1Y2lhbGx5LCBhcmUgcmVhY2hhYmxlIGZyb20gYGhzcl9mb3J3YXJkX3NrYmAsIHdoaWNoIGluIHR1cm4gaXMgcmVhY2hhYmxlIHRocm91Z2ggYGhzcl9kZXZfeG1pdGAgYW5kIGBoc3JfaGFuZGxlX2ZyYW1lYC4gSSBjYW4gZGVmaW5pdGVseSBzZWUgdGhpcyBiZWluZyB0cmlnZ2VyZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gU2V0dGluZyB1cCBhbiBIU1IgZGV2aWNlIGFuZCBzZW5kaW5nIHBhY2tldHMgdGhyb3VnaCBpdCBzZWVtcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIHdheSB0byB0ZXN0IHRoaXMuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZG9jdW1lbnQgbXkgZmluZGluZ3MgY29uY2lzZWx5OgoKKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWUKKiAgICoqRm9jdXNTeW1ib2xzOioqIGBoc3JfZGV2X3htaXRgLCBgaHNyX2hhbmRsZV9mcmFtZWAsIGBoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZWAsIGBwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZWAsIGBoc3JfZm9yd2FyZF9za2JgCiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYEhTUmAKKiAgICoqUmVhc29uaW5nOioqIFRoZSBwYXRjaCBhZGRzIGBza2JfY293YCBiZWZvcmUgbXV0YXRpbmcgY2xvbmVkIHNrYnMgdG8gZml4IGEgc2hhcmVkLW11dGF0aW9uIGJ1ZyBpbiBIU1IvUFJQLiBDb3JlIHBhY2tldCBmb3J3YXJkaW5nIGZ1bmN0aW9ucyBpbiBIU1IgZHJpdmVyIHJlYWNoYWJsZSB2aWEgYGhzcl9kZXZfeG1pdGAgKG1hc3RlciBUWCkgYW5kIGBoc3JfaGFuZGxlX2ZyYW1lYCAoc2xhdmUgUlgpLiBGdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMDA6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hTUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hzcl9kZXZfeG1pdCYjMzQ7LAogICAgJiMzNDtoc3JfaGFuZGxlX2ZyYW1lJiMzNDssCiAgICAmIzM0O2hzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lJiMzNDssCiAgICAmIzM0O3BycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lJiMzNDssCiAgICAmIzM0O2hzcl9mb3J3YXJkX3NrYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHNoYXJlZC1tdXRhdGlvbiBidWcgaW4gSFNSL1BSUCBieSBhZGRpbmcgYHNrYl9jb3dgIGJlZm9yZSBtb2RpZnlpbmcgY2xvbmVkIHNrYnMgaW4gYGhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCwgYHBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCwgYW5kIGBoc3JfeG1pdGAuIFRoZXNlIGFyZSBjb3JlIHBhY2tldCBmb3J3YXJkaW5nIGZ1bmN0aW9ucyBpbiB0aGUgSFNSIGRyaXZlciwgcmVhY2hhYmxlIHZpYSBgaHNyX2Rldl94bWl0YCAobWFzdGVyIGRldmljZSBUWCkgYW5kIGBoc3JfaGFuZGxlX2ZyYW1lYCAoc2xhdmUgZGV2aWNlIFJYKS4gVGhlIGNvZGUgaXMgZnVsbHkgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hTUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hzcl9kZXZfeG1pdCYjMzQ7LAogICAgJiMzNDtoc3JfaGFuZGxlX2ZyYW1lJiMzNDssCiAgICAmIzM0O2hzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lJiMzNDssCiAgICAmIzM0O3BycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lJiMzNDssCiAgICAmIzM0O2hzcl9mb3J3YXJkX3NrYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHNoYXJlZC1tdXRhdGlvbiBidWcgaW4gSFNSL1BSUCBieSBhZGRpbmcgYHNrYl9jb3dgIGJlZm9yZSBtb2RpZnlpbmcgY2xvbmVkIHNrYnMgaW4gYGhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCwgYHBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCwgYW5kIGBoc3JfeG1pdGAuIFRoZXNlIGFyZSBjb3JlIHBhY2tldCBmb3J3YXJkaW5nIGZ1bmN0aW9ucyBpbiB0aGUgSFNSIGRyaXZlciwgcmVhY2hhYmxlIHZpYSBgaHNyX2Rldl94bWl0YCAobWFzdGVyIGRldmljZSBUWCkgYW5kIGBoc3JfaGFuZGxlX2ZyYW1lYCAoc2xhdmUgZGV2aWNlIFJYKS4gVGhlIGNvZGUgaXMgZnVsbHkgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwMDo1ODowMC42Njc0NjA5MzhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTk4MjU2Mzc4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIU1JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoc3JfZGV2X3htaXRcIixcbiAgICBcImhzcl9oYW5kbGVfZnJhbWVcIixcbiAgICBcImhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lXCIsXG4gICAgXCJwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZVwiLFxuICAgIFwiaHNyX2ZvcndhcmRfc2tiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBzaGFyZWQtbXV0YXRpb24gYnVnIGluIEhTUi9QUlAgYnkgYWRkaW5nIGBza2JfY293YCBiZWZvcmUgbW9kaWZ5aW5nIGNsb25lZCBza2JzIGluIGBoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZWAsIGBwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZWAsIGFuZCBgaHNyX3htaXRgLiBUaGVzZSBhcmUgY29yZSBwYWNrZXQgZm9yd2FyZGluZyBmdW5jdGlvbnMgaW4gdGhlIEhTUiBkcml2ZXIsIHJlYWNoYWJsZSB2aWEgYGhzcl9kZXZfeG1pdGAgKG1hc3RlciBkZXZpY2UgVFgpIGFuZCBgaHNyX2hhbmRsZV9mcmFtZWAgKHNsYXZlIGRldmljZSBSWCkuIFRoZSBjb2RlIGlzIGZ1bGx5IGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwMDo1ODowMC42Njc0NzEyOThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NjU4MzkwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDI1ODA5NTFhOTY3MjVkY2EwZGY4ZGQyMzM5YmY2ZWZmN2Q2MjdmN2NcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMyAwMDo1Nzo1OSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmMgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcXG5pbmRleCAwNzc0OTgxYTY1YzE2Li45NzRiNTVmMjQ4ODIxIDEwMDY0NFxcbi0tLSBhL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xcbisrKyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xcbkBAIC0zMzYsMTIgKzMzNiwyNCBAQCBzdHJ1Y3Qgc2tfYnVmZiAqaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcXG4gXFx0aW50IG1vdmVsZW47XFxuIFxcbiBcXHRpZiAoZnJhbWUtXFx1MDAzZXNrYl9oc3IpIHtcXG4tXFx0XFx0c3RydWN0IGhzcl9ldGhoZHIgKmhzcl9ldGhoZHIgPVxcbi1cXHRcXHRcXHQoc3RydWN0IGhzcl9ldGhoZHIgKilza2JfbWFjX2hlYWRlcihmcmFtZS1cXHUwMDNlc2tiX2hzcik7XFxuK1xcdFxcdHN0cnVjdCBoc3JfZXRoaGRyICpoc3JfZXRoaGRyO1xcbitcXG4rXFx0XFx0LyogVGhlIG9yaWdpbmFsIHNrYiBkYXRhIG1heSBiZSBzaGFyZWQgd2l0aCBhbm90aGVyIGVncmVzc1xcbitcXHRcXHQgKiBjbG9uZS4gTWFrZSB0aGUgY2xvbmUgZGF0YSBwcml2YXRlIGJlZm9yZSB1cGRhdGluZyB0aGVcXG4rXFx0XFx0ICogcGF0aCBpZCBzbyB0aGUgdXBkYXRlIGNhbm5vdCBjb3JydXB0IHRoZSBvdGhlciBjb3B5LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0c2tiID0gc2tiX2Nsb25lKGZyYW1lLVxcdTAwM2Vza2JfaHNyLCBHRlBfQVRPTUlDKTtcXG4rXFx0XFx0aWYgKCFza2IpXFxuK1xcdFxcdFxcdHJldHVybiBOVUxMO1xcbitcXHRcXHRpZiAoc2tiX2Nvdyhza2IsIDApKSB7XFxuK1xcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbitcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0Lyogc2V0IHRoZSBsYW5lIGlkIHByb3Blcmx5ICovXFxuK1xcdFxcdGhzcl9ldGhoZHIgPSAoc3RydWN0IGhzcl9ldGhoZHIgKilza2JfbWFjX2hlYWRlcihza2IpO1xcbiBcXHRcXHRoc3Jfc2V0X3BhdGhfaWQoZnJhbWUsIGhzcl9ldGhoZHIsIHBvcnQpO1xcbi1cXHRcXHRyZXR1cm4gc2tiX2Nsb25lKGZyYW1lLVxcdTAwM2Vza2JfaHNyLCBHRlBfQVRPTUlDKTtcXG4rXFx0XFx0cmV0dXJuIHNrYjtcXG4gXFx0fSBlbHNlIGlmIChwb3J0LVxcdTAwM2VkZXYtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9IV19IU1JfVEFHX0lOUykge1xcbiBcXHRcXHRyZXR1cm4gc2tiX2Nsb25lKGZyYW1lLVxcdTAwM2Vza2Jfc3RkLCBHRlBfQVRPTUlDKTtcXG4gXFx0fVxcbkBAIC0zNzcsMTUgKzM4OSwyOCBAQCBzdHJ1Y3Qgc2tfYnVmZiAqcHJwX2NyZWF0ZV90YWdnZWRfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gXFxuIFxcdGlmIChmcmFtZS1cXHUwMDNlc2tiX3BycCkge1xcbi1cXHRcXHRzdHJ1Y3QgcHJwX3JjdCAqdHJhaWxlciA9IHNrYl9nZXRfUFJQX3JjdChmcmFtZS1cXHUwMDNlc2tiX3BycCk7XFxuK1xcdFxcdHN0cnVjdCBwcnBfcmN0ICp0cmFpbGVyO1xcbiBcXG4rXFx0XFx0LyogU2FtZSBzaGFyaW5nIGhhemFyZCBhcyBhYm92ZTogcHJpdmF0aXplIHRoZSBjbG9uZSBkYXRhXFxuK1xcdFxcdCAqIGJlZm9yZSB1cGRhdGluZyB0aGUgTEFOIGlkLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0c2tiID0gc2tiX2Nsb25lKGZyYW1lLVxcdTAwM2Vza2JfcHJwLCBHRlBfQVRPTUlDKTtcXG4rXFx0XFx0aWYgKCFza2IpXFxuK1xcdFxcdFxcdHJldHVybiBOVUxMO1xcbitcXHRcXHRpZiAoc2tiX2Nvdyhza2IsIDApKSB7XFxuK1xcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbitcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0dHJhaWxlciA9IHNrYl9nZXRfUFJQX3JjdChza2IpO1xcbiBcXHRcXHRpZiAodHJhaWxlcikge1xcbiBcXHRcXHRcXHRwcnBfc2V0X2xhbl9pZCh0cmFpbGVyLCBwb3J0KTtcXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0V0FSTl9PTkNFKCF0cmFpbGVyLCBcXFwiZXJyb3JlZCBQUlAgc2tiXFxcIik7XFxuK1xcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiBcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFx0XFx0fVxcbi1cXHRcXHRyZXR1cm4gc2tiX2Nsb25lKGZyYW1lLVxcdTAwM2Vza2JfcHJwLCBHRlBfQVRPTUlDKTtcXG4rXFx0XFx0cmV0dXJuIHNrYjtcXG4gXFx0fSBlbHNlIGlmIChwb3J0LVxcdTAwM2VkZXYtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9IV19IU1JfVEFHX0lOUykge1xcbiBcXHRcXHRyZXR1cm4gc2tiX2Nsb25lKGZyYW1lLVxcdTAwM2Vza2Jfc3RkLCBHRlBfQVRPTUlDKTtcXG4gXFx0fVxcbkBAIC00MjAsNiArNDQ1LDIyIEBAIHN0YXRpYyB2b2lkIGhzcl9kZWxpdmVyX21hc3RlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBzdGF0aWMgaW50IGhzcl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCxcXG4gXFx0XFx0ICAgIHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXFxuIHtcXG4rXFx0LyogQW4gaW50ZXJsaW5rLWJvdW5kIHNrYiBmcm9tIGdldF91bnRhZ2dlZF9mcmFtZSgpIGNhbiBzdGlsbCBhbGlhc1xcbitcXHQgKiBhbm90aGVyIGxpdmUgY29uc3VtZXI6IGZvciBtYXN0ZXItb3JpZ2luYXRlZCBmcmFtZXMgdGhlIGNsb25lXFxuK1xcdCAqIHNoYXJlcyB0aGUgb3JpZ2luYWwgVFggc2tiICh3aGljaCB0YXBzIG9yIHRoZSBUWCBwYXRoIG1heSBzdGlsbFxcbitcXHQgKiBob2xkKTsgZm9yIHJpbmcgZnJhbWVzIHRoZSBtYXN0ZXIgYWxzbyBjb25zdW1lcyB0aGVtIHdoZW4gdGhleVxcbitcXHQgKiBhcmUgZGVzdGluZWQgdG8gdGhlIGxvY2FsIG5vZGUgd2l0aG91dCBiZWluZyBleGNsdXNpdmUgdG8gaXQuXFxuK1xcdCAqIFByaXZhdGl6ZSBiZWZvcmUgYW55IGFkZHJlc3MgbXV0YXRpb24uXFxuK1xcdCAqL1xcbitcXHRpZiAocG9ydC1cXHUwMDNldHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAoZnJhbWUtXFx1MDAzZXBvcnRfcmN2LVxcdTAwM2V0eXBlID09IEhTUl9QVF9NQVNURVIgfHxcXG4rXFx0ICAgICAoZnJhbWUtXFx1MDAzZWlzX2xvY2FsX2Rlc3QgXFx1MDAyNlxcdTAwMjYgIWZyYW1lLVxcdTAwM2Vpc19sb2NhbF9leGNsdXNpdmUpKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgc2tiX2Nvdyhza2IsIDApKSB7XFxuK1xcdFxcdGZyYW1lLVxcdTAwM2Vwb3J0X3Jjdi1cXHUwMDNlZGV2LVxcdTAwM2VzdGF0cy5yeF9kcm9wcGVkKys7XFxuK1xcdFxcdGtmcmVlX3NrYihza2IpO1xcbitcXHRcXHRyZXR1cm4gTkVUX1hNSVRfRFJPUDtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKGZyYW1lLVxcdTAwM2Vwb3J0X3Jjdi1cXHUwMDNldHlwZSA9PSBIU1JfUFRfTUFTVEVSKSB7XFxuIFxcdFxcdGhzcl9hZGRyX3N1YnN0X2Rlc3QoZnJhbWUtXFx1MDAzZW5vZGVfc3JjLCBza2IsIHBvcnQpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGVcXG5pbmRleCAzMWZiOTMyNmNmNTMzLi44N2ZlMzQ5NTFiOGIwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXFxuQEAgLTUsNiArNSw3IEBAIHRvcF9zcmNkaXIgPSAuLi8uLi8uLi8uLi8uLlxcbiBURVNUX1BST0dTIDo9IFxcXFxcXG4gXFx0aHNyX3Bpbmcuc2ggXFxcXFxcbiBcXHRoc3JfcmVkYm94LnNoIFxcXFxcXG4rXFx0aHNyX3NoYXJlZF9tdXRhdGlvbi5zaCBcXFxcXFxuIFxcdGxpbmtfZmF1bHRzLnNoIFxcXFxcXG4gXFx0cHJwX3Bpbmcuc2ggXFxcXFxcbiAjIGVuZCBvZiBURVNUX1BST0dTXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX3NoYXJlZF9tdXRhdGlvbi5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX3NoYXJlZF9tdXRhdGlvbi5zaFxcbm5ldyBmaWxlIG1vZGUgMTAwNzU1XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMDVlN2U4MDNkMjg2N1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL2hzcl9zaGFyZWRfbXV0YXRpb24uc2hcXG5AQCAtMCwwICsxLDIyMyBAQFxcbisjIS9iaW4vYmFzaFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNcXG4rIyBWZXJpZnkgdGhhdCBwZXItZWdyZXNzIG11dGF0aW9ucyBvZiBzaGFyZWQgc2tiIGRhdGEgYXJlIHByaXZhdGU6XFxuKyNcXG4rIyBGMiAocGF0aC9MQU4gSUQpOiBvbiBhbiBhZmZlY3RlZCBrZXJuZWwgdGhlIHNlY29uZCBzbGF2ZSdzIExBTi1JRCB3cml0ZVxcbisjIGxhbmRzIGluIHRoZSBmaXJzdCBzbGF2ZSdzIHN0aWxsLXF1ZXVlZCBjbG9uZTsgd2l0aCBhIG5ldGVtIGRlbGF5IG9uXFxuKyMgc2xhdmUgQSwgaW5qZWN0ZWQgZnJhbWVzIGxlYXZlIEEgY2FycnlpbmcgQidzIExBTiBJRC5cXG4rI1xcbisjIEYxIChSZWRCb3ggc291cmNlIE1BQyk6IG9uIGFuIGFmZmVjdGVkIGtlcm5lbCBhbiBIU1ItdGFnZ2VkIG11bHRpY2FzdFxcbisjIGZyYW1lIHJlY2VpdmVkIG9uIGEgUmVkQm94IHNsYXZlIGlzIGNsb25lZCBmb3IgbWFzdGVyIGFuZCBpbnRlcmxpbmssXFxuKyMgYW5kIHRoZSBpbnRlcmxpbmsncyBSZWRCb3gtTUFDIHJld3JpdGUgbGFuZHMgaW4gdGhlIG1hc3RlciBjbG9uZSdzXFxuKyMgYnVmZmVyLCBzbyB0aGUgbG9jYWwgc3RhY2sgcmVjZWl2ZXMgdGhlIFJlZEJveCBNQUMgaW5zdGVhZCBvZiB0aGVcXG4rIyBvcmlnaW5hdGluZyBub2RlJ3MgTUFDLlxcbitcXG4raXB2Nj1mYWxzZVxcbitcXG4rc291cmNlIC4vaHNyX2NvbW1vbi5zaFxcbitcXG4rRFVSPTVcXG4rXFxuK3JlcXVpcmUoKVxcbit7XFxuK1xcdGNvbW1hbmQgLXYgXFxcIiQxXFxcIiBcXHUwMDNlL2Rldi9udWxsIDJcXHUwMDNlXFx1MDAyNjEgXFx1MDAyNlxcdTAwMjYgcmV0dXJuIDBcXG4rXFx0ZWNobyBcXFwiU0tJUDogJDEgbm90IGF2YWlsYWJsZVxcXCJcXG4rXFx0ZXhpdCAka3NmdF9za2lwXFxuK31cXG4rXFxuK3JlcXVpcmUgaXBcXG4rcmVxdWlyZSB0Y1xcbityZXF1aXJlIHB5dGhvbjNcXG4rXFxuK3RyYXAgY2xlYW51cF9hbGxfbnMgRVhJVFxcbitcXG4rIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEYyOiBMQU4tSUQgaXNvbGF0aW9uXFxuKyMgUFJQIERBTlAgKHByb3RvIDEpLCBBRl9QQUNLRVQgcHJlLXRhZ2dlZCBpbmplY3Rpb24sIG5ldGVtIG9uIHNsYXZlIEEuXFxuK3J1bl9mMigpXFxuK3tcXG4rXFx0c2V0dXBfbnMgbnMgMlxcdTAwM2UvZGV2L251bGwgfHwgcmV0dXJuICRrc2Z0X3NraXBcXG4rXFx0bnN4KCkgeyBpcCBuZXRucyBleGVjIFxcXCIkbnNcXFwiIFxcXCIkQFxcXCI7IH1cXG4rXFxuK1xcdCMgUHJvYmUgc2NoX25ldGVtIGluc2lkZSB0aGUgZGlzcG9zYWJsZSBuYW1lc3BhY2Ugb25seS5cXG4rXFx0aWYgISBuc3ggdGMgcWRpc2MgYWRkIGRldiBsbyByb290IG5ldGVtIGRlbGF5IDFtcyAyXFx1MDAzZS9kZXYvbnVsbDsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJTS0lQOiBzY2hfbmV0ZW0gbm90IGF2YWlsYWJsZVxcXCJcXG4rXFx0XFx0cmV0dXJuICRrc2Z0X3NraXBcXG4rXFx0ZmlcXG4rXFx0bnN4IHRjIHFkaXNjIGRlbCBkZXYgbG8gcm9vdCAyXFx1MDAzZS9kZXYvbnVsbFxcbitcXG4rXFx0IyBDYXBhYmlsaXR5IHByb2JlcyBlbmQgaGVyZTsgc2V0dXAgb3IgcnVudGltZSBmYWlsdXJlIGJlbG93IGlzIEZBSUwuXFxuK1xcdG5zeCBpcCBsaW5rIGFkZCB2QSB0eXBlIHZldGggcGVlciBuYW1lIHZBcCB8fFxcbitcXHRcXHR7IGVjaG8gXFxcIkZBSUw6IHZldGggQVxcXCI7IHJldHVybiAxOyB9XFxuK1xcdG5zeCBpcCBsaW5rIGFkZCB2QiB0eXBlIHZldGggcGVlciBuYW1lIHZCcCB8fFxcbitcXHRcXHR7IGVjaG8gXFxcIkZBSUw6IHZldGggQlxcXCI7IHJldHVybiAxOyB9XFxuK1xcdGZvciBpIGluIHZBIHZCIHZBcCB2QnA7IGRvXFxuK1xcdFxcdG5zeCBpcCBsaW5rIHNldCBcXFwiJGlcXFwiIHVwIHx8IHsgZWNobyBcXFwiRkFJTDogJGkgdXBcXFwiOyByZXR1cm4gMTsgfVxcbitcXHRkb25lXFxuK1xcdGlmICEgbnN4IGlwIGxpbmsgYWRkIG5hbWUgcHJwMCB0eXBlIGhzciBzbGF2ZTEgdkEgc2xhdmUyIHZCIFxcXFxcXG4rXFx0XFx0c3VwZXJ2aXNpb24gNDUgcHJvdG8gMSAyXFx1MDAzZS9kZXYvbnVsbDsgdGhlblxcbitcXHRcXHRlY2hvIFxcXCJTS0lQOiBIU1IvUFJQIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBrZXJuZWxcXFwiXFxuK1xcdFxcdHJldHVybiAka3NmdF9za2lwXFxuK1xcdGZpXFxuK1xcdG5zeCBpcCBsaW5rIHNldCBwcnAwIHVwIHx8IHsgZWNobyBcXFwiRkFJTDogcHJwMCB1cFxcXCI7IHJldHVybiAxOyB9XFxuK1xcdG5zeCB0YyBxZGlzYyBhZGQgZGV2IHZBIHJvb3QgbmV0ZW0gZGVsYXkgMjAwbXMgfHxcXG4rXFx0XFx0eyBlY2hvIFxcXCJGQUlMOiBuZXRlbVxcXCI7IHJldHVybiAxOyB9XFxuK1xcbitcXHRuc3ggcHl0aG9uMyAvZGV2L3N0ZGluIFxcXCIkRFVSXFxcIiBcXHUwMDNjXFx1MDAzYydQWUYyJ1xcbitpbXBvcnQgc29ja2V0LCBzdHJ1Y3QsIHNlbGVjdCwgc3lzLCB0aW1lXFxuK1xcbitkdXIgPSBpbnQoc3lzLmFyZ3ZbMV0pXFxuK2RlZiBsYW5pZChwa3QpOlxcbisgICAgaWYgbGVuKHBrdCkgXFx1MDAzYyAyMCBvciBwa3RbLTI6XSAhPSBiXFxcIlxcXFx4ODhcXFxceGZiXFxcIjpcXG4rICAgICAgICByZXR1cm4gTm9uZVxcbisgICAgcmV0dXJuIChwa3RbLTRdIFxcdTAwM2VcXHUwMDNlIDQpIFxcdTAwMjYgMHhGXFxuK1xcbitTUkMgPSBieXRlcy5mcm9taGV4KG9wZW4oXFxcIi9zeXMvY2xhc3MvbmV0L3BycDAvYWRkcmVzc1xcXCIpLnJlYWQoKS5yZXBsYWNlKFxcXCI6XFxcIiwgXFxcIlxcXCIpKVxcbitEU1QgPSBieXRlcy5mcm9taGV4KFxcXCIwMmFhYmJjY2RkMDFcXFwiKVxcbitQQVkgPSBieXRlcyhyYW5nZSg0NikpXFxuK3JjdDAgPSBzdHJ1Y3QucGFjayhcXFwiXFx1MDAzZUhcXFwiLCAwKSArIHN0cnVjdC5wYWNrKFxcXCJcXHUwMDNlSFxcXCIsIDUyIFxcdTAwMjYgMHgwRkZGKSArIGJcXFwiXFxcXHg4OFxcXFx4ZmJcXFwiXFxuK2ZyYW1lID0gRFNUICsgU1JDICsgYlxcXCJcXFxceDA4XFxcXHgwMFxcXCIgKyBQQVkgKyByY3QwXFxuK1xcbit0eCA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1BBQ0tFVCwgc29ja2V0LlNPQ0tfUkFXKTsgdHguYmluZCgoXFxcInBycDBcXFwiLCAwKSlcXG4rc0EgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9QQUNLRVQsIHNvY2tldC5TT0NLX1JBVyxcXG4rICAgICAgICBzb2NrZXQubnRvaHMoMHgwMDAzKSlcXG4rc0EuYmluZCgoXFxcInZBcFxcXCIsIDApKVxcbitzQiA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1BBQ0tFVCwgc29ja2V0LlNPQ0tfUkFXLFxcbisgICAgICAgIHNvY2tldC5udG9ocygweDAwMDMpKVxcbitzQi5iaW5kKChcXFwidkJwXFxcIiwgMCkpXFxuK3NBLnNldGJsb2NraW5nKEZhbHNlKTsgc0Iuc2V0YmxvY2tpbmcoRmFsc2UpXFxuK2ZvciBfIGluIHJhbmdlKDIwMCk6XFxuKyAgICB0eC5zZW5kKGZyYW1lKTsgdGltZS5zbGVlcCgwLjAwMSlcXG4rXFxuK2EsIGIgPSBbXSwgW11cXG4rZW5kID0gdGltZS50aW1lKCkgKyBkdXJcXG4rd2hpbGUgdGltZS50aW1lKCkgXFx1MDAzYyBlbmQ6XFxuKyAgICByLCBfLCBfID0gc2VsZWN0LnNlbGVjdChbc0EsIHNCXSwgW10sIFtdLCAwLjMpXFxuKyAgICBmb3IgcyBpbiByOlxcbisgICAgICAgIHBrdCA9IHMucmVjdig2NTUzNSlcXG4rICAgICAgICBpZiAocGt0Wzo2XSAhPSBEU1Qgb3IgcGt0WzY6MTJdICE9IFNSQyBvciBwa3RbMTI6MTRdICE9IGJcXFwiXFxcXHgwOFxcXFx4MDBcXFwiXFxuKyAgICAgICAgICAgICAgICBvciBwa3RbMTQ6MTQgKyBsZW4oUEFZKV0gIT0gUEFZKTpcXG4rICAgICAgICAgICAgY29udGludWVcXG4rICAgICAgICBsaWQgPSBsYW5pZChwa3QpXFxuKyAgICAgICAgaWYgbGlkIGlzIG5vdCBOb25lOlxcbisgICAgICAgICAgICAoYSBpZiBzIGlzIHNBIGVsc2UgYikuYXBwZW5kKGxpZClcXG4rXFxuK3ByaW50KFxcXCJBLXNpZGUgY291bnQ9JWQgbGFuIGlkcz0lc1xcXCIgJSAobGVuKGEpLCBzb3J0ZWQoc2V0KGEpKSkpXFxuK3ByaW50KFxcXCJCLXNpZGUgY291bnQ9JWQgbGFuIGlkcz0lc1xcXCIgJSAobGVuKGIpLCBzb3J0ZWQoc2V0KGIpKSkpXFxuK2lmIGxlbihhKSBcXHUwMDNjIDE1MCBvciBsZW4oYikgXFx1MDAzYyAxNTA6XFxuKyAgICBwcmludChcXFwiRkFJTDogdG9vIGZldyBpbmplY3RlZCBmcmFtZXMgY2FwdHVyZWQgKEE9JWQgQj0lZCwgc2VudCAyMDApXFxcIlxcbisgICAgICAgICAgJSAobGVuKGEpLCBsZW4oYikpKVxcbisgICAgc3lzLmV4aXQoMSlcXG4rYmFkX2EgPSBbeCBmb3IgeCBpbiBhIGlmICh4IFxcdTAwMjYgMSkgIT0gMF1cXG4rYmFkX2IgPSBbeCBmb3IgeCBpbiBiIGlmICh4IFxcdTAwMjYgMSkgIT0gMV1cXG4raWYgYmFkX2Egb3IgYmFkX2I6XFxuKyAgICBwcmludChcXFwiRkFJTDogc2hhcmVkLW11dGF0aW9uIGNvcnJ1cHRpb24gLSBBOiAlZC8lZCB3cm9uZy1sYW4sXFxcIlxcbisgICAgICAgICAgXFxcIiBCOiAlZC8lZCB3cm9uZy1sYW5cXFwiXFxuKyAgICAgICAgICAlIChsZW4oYmFkX2EpLCBsZW4oYSksIGxlbihiYWRfYiksIGxlbihiKSkpXFxuKyAgICBzeXMuZXhpdCgxKVxcbitwcmludChcXFwiUEFTUzogcGVyLWVncmVzcyBMQU4gSURzIGlzb2xhdGVkIChBIGFsbCBiaXQwPTAsIEIgYWxsIGJpdDA9MSlcXFwiKVxcbitzeXMuZXhpdCgwKVxcbitQWUYyXFxuK31cXG4rXFxuKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEYxOiBSZWRCb3ggc291cmNlLU1BQyBwcml2YWN5XFxuKyMgSFNSIFJlZEJveCAocHJvdG8gMCksIHRhZ2dlZCBtdWx0aWNhc3QgZnJvbSBhIHNsYXZlOiBtYXN0ZXIgbXVzdCBrZWVwXFxuKyMgdGhlIG5vZGUgTUFDLCBpbnRlcmxpbmsgbXVzdCBjYXJyeSB0aGUgUmVkQm94IE1BQy5cXG4rcnVuX2YxKClcXG4re1xcbitcXHRzZXR1cF9ucyBucyAyXFx1MDAzZS9kZXYvbnVsbCB8fCByZXR1cm4gJGtzZnRfc2tpcFxcbitcXHRuc3goKSB7IGlwIG5ldG5zIGV4ZWMgXFxcIiRuc1xcXCIgXFxcIiRAXFxcIjsgfVxcbitcXG4rXFx0bnN4IGlwIGxpbmsgYWRkIHZBIHR5cGUgdmV0aCBwZWVyIG5hbWUgdkFwIHx8XFxuK1xcdFxcdHsgZWNobyBcXFwiRkFJTDogdmV0aCBBXFxcIjsgcmV0dXJuIDE7IH1cXG4rXFx0bnN4IGlwIGxpbmsgYWRkIHZCIHR5cGUgdmV0aCBwZWVyIG5hbWUgdkJwIHx8XFxuK1xcdFxcdHsgZWNobyBcXFwiRkFJTDogdmV0aCBCXFxcIjsgcmV0dXJuIDE7IH1cXG4rXFx0bnN4IGlwIGxpbmsgYWRkIHZJIHR5cGUgdmV0aCBwZWVyIG5hbWUgdklwIHx8XFxuK1xcdFxcdHsgZWNobyBcXFwiRkFJTDogdmV0aCBJXFxcIjsgcmV0dXJuIDE7IH1cXG4rXFx0Zm9yIGkgaW4gdkEgdkIgdkkgdkFwIHZCcCB2SXA7IGRvXFxuK1xcdFxcdG5zeCBpcCBsaW5rIHNldCBcXFwiJGlcXFwiIHVwIHx8IHsgZWNobyBcXFwiRkFJTDogJGkgdXBcXFwiOyByZXR1cm4gMTsgfVxcbitcXHRkb25lXFxuK1xcdGlmICEgbnN4IGlwIGxpbmsgYWRkIG5hbWUgaHNyMCB0eXBlIGhzciBzbGF2ZTEgdkEgc2xhdmUyIHZCIFxcXFxcXG4rXFx0XFx0aW50ZXJsaW5rIHZJIHN1cGVydmlzaW9uIDQ1IHByb3RvIDAgMlxcdTAwM2UvZGV2L251bGw7IHRoZW5cXG4rXFx0XFx0ZWNobyBcXFwiU0tJUDogSFNSIFJlZEJveCBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMga2VybmVsXFxcIlxcbitcXHRcXHRyZXR1cm4gJGtzZnRfc2tpcFxcbitcXHRmaVxcbitcXHRuc3ggaXAgbGluayBzZXQgaHNyMCB1cCB8fCB7IGVjaG8gXFxcIkZBSUw6IGhzcjAgdXBcXFwiOyByZXR1cm4gMTsgfVxcbitcXG4rXFx0bnN4IHB5dGhvbjMgL2Rldi9zdGRpbiBcXHUwMDNjXFx1MDAzYydQWUYxJ1xcbitpbXBvcnQgc29ja2V0LCBzZWxlY3QsIHN5cywgdGltZVxcbitcXG4rTk9ERSAgPSBieXRlcy5mcm9taGV4KFxcXCIwMjExMjIzMzQ0NTVcXFwiKVxcbitNQ0FTVCA9IGJ5dGVzLmZyb21oZXgoXFxcIjAxMDA1ZTAwMDAwMVxcXCIpXFxuK1JCICAgID0gYnl0ZXMuZnJvbWhleChvcGVuKFxcXCIvc3lzL2NsYXNzL25ldC92SS9hZGRyZXNzXFxcIikucmVhZCgpLnJlcGxhY2UoXFxcIjpcXFwiLCBcXFwiXFxcIikpXFxuK1BBWSAgID0gYnl0ZXMocmFuZ2UoNDYpKVxcbitcXG4rZGVmIGZyYW1lKHNlcSk6XFxuKyAgICB0YWcgPSAoKCgxIFxcdTAwM2NcXHUwMDNjIDEyKSB8IGxlbihQQVkpKS50b19ieXRlcygyLCBcXFwiYmlnXFxcIilcXG4rICAgICAgICAgICArIHNlcS50b19ieXRlcygyLCBcXFwiYmlnXFxcIikgKyBiXFxcIlxcXFx4MDhcXFxceDAwXFxcIilcXG4rICAgIHJldHVybiBNQ0FTVCArIE5PREUgKyBiXFxcIlxcXFx4ODlcXFxceDJmXFxcIiArIHRhZyArIFBBWVxcbitcXG4rdHggPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9QQUNLRVQsIHNvY2tldC5TT0NLX1JBVyk7IHR4LmJpbmQoKFxcXCJ2QXBcXFwiLCAwKSlcXG4rc20gPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9QQUNLRVQsIHNvY2tldC5TT0NLX1JBVyxcXG4rICAgICAgICBzb2NrZXQubnRvaHMoMHgwMDAzKSlcXG4rc20uYmluZCgoXFxcImhzcjBcXFwiLCAwKSlcXG4rc2kgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9QQUNLRVQsIHNvY2tldC5TT0NLX1JBVyxcXG4rICAgICAgICBzb2NrZXQubnRvaHMoMHgwMDAzKSlcXG4rc2kuYmluZCgoXFxcInZJcFxcXCIsIDApKVxcbitzbS5zZXRibG9ja2luZyhGYWxzZSk7IHNpLnNldGJsb2NraW5nKEZhbHNlKVxcbitcXG4rZm9yIGkgaW4gcmFuZ2UoMyk6XFxuKyAgICB0eC5zZW5kKGZyYW1lKGkgKyAxKSk7IHRpbWUuc2xlZXAoMC4wNSlcXG4rXFxuK21fc3JjID0gaV9zcmMgPSBOb25lXFxuK2VuZCA9IHRpbWUudGltZSgpICsgNFxcbit3aGlsZSB0aW1lLnRpbWUoKSBcXHUwMDNjIGVuZCBhbmQgKG1fc3JjIGlzIE5vbmUgb3IgaV9zcmMgaXMgTm9uZSk6XFxuKyAgICByLCBfLCBfID0gc2VsZWN0LnNlbGVjdChbc20sIHNpXSwgW10sIFtdLCAwLjMpXFxuKyAgICBmb3IgcyBpbiByOlxcbisgICAgICAgIHBrdCA9IHMucmVjdig2NTUzNSlcXG4rICAgICAgICAjIGV4YWN0IGZsb3c6IGRzdCwgcG9zdC1zdHJpcCBFdGhlclR5cGUsIGV4YWN0IHBheWxvYWQsIG1pbiBsZW5ndGg7XFxuKyAgICAgICAgIyBoX3NvdXJjZSBpcyB0aGUgYXNzZXJ0ZWQgdmFsdWUgYW5kIG11c3QgTk9UIGJlIGZpbHRlcmVkIG9uXFxuKyAgICAgICAgaWYgKGxlbihwa3QpIFxcdTAwM2MgNjAgb3IgcGt0Wzo2XSAhPSBNQ0FTVCBvciBwa3RbMTI6MTRdICE9IGJcXFwiXFxcXHgwOFxcXFx4MDBcXFwiXFxuKyAgICAgICAgICAgICAgICBvciBwa3RbMTQ6MTQgKyBsZW4oUEFZKV0gIT0gUEFZKTpcXG4rICAgICAgICAgICAgY29udGludWVcXG4rICAgICAgICBpZiBzIGlzIHNtIGFuZCBtX3NyYyBpcyBOb25lOlxcbisgICAgICAgICAgICBtX3NyYyA9IHBrdFs2OjEyXVxcbisgICAgICAgIGVsaWYgcyBpcyBzaSBhbmQgaV9zcmMgaXMgTm9uZTpcXG4rICAgICAgICAgICAgaV9zcmMgPSBwa3RbNjoxMl1cXG4rXFxuK3ByaW50KFxcXCJtYXN0ZXIgaF9zb3VyY2UgICAgPVxcXCIsIG1fc3JjLmhleCgpIGlmIG1fc3JjIGVsc2UgTm9uZSlcXG4rcHJpbnQoXFxcIm5vZGUgTUFDICAgICAgICAgICA9XFxcIiwgTk9ERS5oZXgoKSlcXG4rcHJpbnQoXFxcImludGVybGluayBoX3NvdXJjZSA9XFxcIiwgaV9zcmMuaGV4KCkgaWYgaV9zcmMgZWxzZSBOb25lKVxcbitwcmludChcXFwicmVkYm94IE1BQyAgICAgICAgID1cXFwiLCBSQi5oZXgoKSlcXG4raWYgaV9zcmMgIT0gUkI6XFxuKyAgICBwcmludChcXFwiRkFJTDogaW50ZXJsaW5rIGRpZCBub3QgY2FycnkgdGhlIFJlZEJveCBNQUNcXFwiKVxcbisgICAgc3lzLmV4aXQoMSlcXG4raWYgbV9zcmMgIT0gTk9ERTpcXG4rICAgIHByaW50KFxcXCJGQUlMOiBtYXN0ZXIgcmVjZWl2ZWQgJXMgaW5zdGVhZCBvZiB0aGUgbm9kZSBNQUMgXFxcIlxcbisgICAgICAgICAgXFxcIihzaGFyZWQtbXV0YXRpb24gY29ycnVwdGlvbilcXFwiXFxuKyAgICAgICAgICAlIChtX3NyYy5oZXgoKSBpZiBtX3NyYyBlbHNlIFxcXCJub3RoaW5nXFxcIikpXFxuKyAgICBzeXMuZXhpdCgxKVxcbitwcmludChcXFwiUEFTUzogbWFzdGVyIGtlcHQgbm9kZSBNQUMsIGludGVybGluayBrZXB0IFJlZEJveCBNQUNcXFwiKVxcbitzeXMuZXhpdCgwKVxcbitQWUYxXFxuK31cXG4rXFxuK3JjPTBcXG4rXFxuK3J1bl9mMlxcbityZXQ9JD9cXG4rWyBcXFwiJHJldFxcXCIgLWVxIFxcXCIka3NmdF9za2lwXFxcIiBdIFxcdTAwMjZcXHUwMDI2IGV4aXQgXFxcIiRrc2Z0X3NraXBcXFwiXFxuK1sgXFxcIiRyZXRcXFwiIC1lcSAwIF0gfHwgcmM9MVxcbitcXG4rcnVuX2YxXFxuK3JldD0kP1xcbitbIFxcXCIkcmV0XFxcIiAtZXEgXFxcIiRrc2Z0X3NraXBcXFwiIF0gXFx1MDAyNlxcdTAwMjYgZXhpdCBcXFwiJGtzZnRfc2tpcFxcXCJcXG4rWyBcXFwiJHJldFxcXCIgLWVxIDAgXSB8fCByYz0xXFxuK1xcbitpZiBbICRyYyAtZXEgMCBdOyB0aGVuXFxuK1xcdGVjaG8gXFxcImhzcl9zaGFyZWRfbXV0YXRpb246IHBlci1lZ3Jlc3MgbXV0YXRpb24gaXNvbGF0aW9uIChGMStGMikgWyBPSyBdXFxcIlxcbitlbHNlXFxuK1xcdGVjaG8gXFxcImhzcl9zaGFyZWRfbXV0YXRpb246IHBlci1lZ3Jlc3MgbXV0YXRpb24gaXNvbGF0aW9uIFsgRkFJTCBdXFxcIiBcXFxcXFxuK1xcdFxcdFxcXCJyYz0kcmNcXFwiIDFcXHUwMDNlXFx1MDAyNjJcXG4rZmlcXG4rZXhpdCAkcmNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDA6NTg6MDEuMTE1MDI2NzkxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6Njk1MzQ5ODk2NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFNSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHNyX2Rldl94bWl0XCIsXG4gICAgXCJoc3JfaGFuZGxlX2ZyYW1lXCIsXG4gICAgXCJoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZVwiLFxuICAgIFwicHJwX2NyZWF0ZV90YWdnZWRfZnJhbWVcIixcbiAgICBcImhzcl9mb3J3YXJkX3NrYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgc2hhcmVkLW11dGF0aW9uIGJ1ZyBpbiBIU1IvUFJQIGJ5IGFkZGluZyBgc2tiX2Nvd2AgYmVmb3JlIG1vZGlmeWluZyBjbG9uZWQgc2ticyBpbiBgaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWVgLCBgcHJwX2NyZWF0ZV90YWdnZWRfZnJhbWVgLCBhbmQgYGhzcl94bWl0YC4gVGhlc2UgYXJlIGNvcmUgcGFja2V0IGZvcndhcmRpbmcgZnVuY3Rpb25zIGluIHRoZSBIU1IgZHJpdmVyLCByZWFjaGFibGUgdmlhIGBoc3JfZGV2X3htaXRgIChtYXN0ZXIgZGV2aWNlIFRYKSBhbmQgYGhzcl9oYW5kbGVfZnJhbWVgIChzbGF2ZSBkZXZpY2UgUlgpLiBUaGUgY29kZSBpcyBmdWxseSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjU4MDk1MWE5NjcyNWRjYTBkZjhkZDIzMzliZjZlZmY3ZDYyN2Y3Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMgMDA6NTc6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmMgYi9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcbmluZGV4IDA3NzQ5ODFhNjVjMTYuLjk3NGI1NWYyNDg4MjEgMTAwNjQ0XG4tLS0gYS9uZXQvaHNyL2hzcl9mb3J3YXJkLmNcbisrKyBiL25ldC9oc3IvaHNyX2ZvcndhcmQuY1xuQEAgLTMzNiwxMiArMzM2LDI0IEBAIHN0cnVjdCBza19idWZmICpoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxuIFx0aW50IG1vdmVsZW47XG4gXG4gXHRpZiAoZnJhbWUtXHUwMDNlc2tiX2hzcikge1xuLVx0XHRzdHJ1Y3QgaHNyX2V0aGhkciAqaHNyX2V0aGhkciA9XG4tXHRcdFx0KHN0cnVjdCBoc3JfZXRoaGRyICopc2tiX21hY19oZWFkZXIoZnJhbWUtXHUwMDNlc2tiX2hzcik7XG4rXHRcdHN0cnVjdCBoc3JfZXRoaGRyICpoc3JfZXRoaGRyO1xuK1xuK1x0XHQvKiBUaGUgb3JpZ2luYWwgc2tiIGRhdGEgbWF5IGJlIHNoYXJlZCB3aXRoIGFub3RoZXIgZWdyZXNzXG4rXHRcdCAqIGNsb25lLiBNYWtlIHRoZSBjbG9uZSBkYXRhIHByaXZhdGUgYmVmb3JlIHVwZGF0aW5nIHRoZVxuK1x0XHQgKiBwYXRoIGlkIHNvIHRoZSB1cGRhdGUgY2Fubm90IGNvcnJ1cHQgdGhlIG90aGVyIGNvcHkuXG4rXHRcdCAqL1xuK1x0XHRza2IgPSBza2JfY2xvbmUoZnJhbWUtXHUwMDNlc2tiX2hzciwgR0ZQX0FUT01JQyk7XG4rXHRcdGlmICghc2tiKVxuK1x0XHRcdHJldHVybiBOVUxMO1xuK1x0XHRpZiAoc2tiX2Nvdyhza2IsIDApKSB7XG4rXHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHRcdFx0cmV0dXJuIE5VTEw7XG4rXHRcdH1cbiBcbiBcdFx0Lyogc2V0IHRoZSBsYW5lIGlkIHByb3Blcmx5ICovXG4rXHRcdGhzcl9ldGhoZHIgPSAoc3RydWN0IGhzcl9ldGhoZHIgKilza2JfbWFjX2hlYWRlcihza2IpO1xuIFx0XHRoc3Jfc2V0X3BhdGhfaWQoZnJhbWUsIGhzcl9ldGhoZHIsIHBvcnQpO1xuLVx0XHRyZXR1cm4gc2tiX2Nsb25lKGZyYW1lLVx1MDAzZXNrYl9oc3IsIEdGUF9BVE9NSUMpO1xuK1x0XHRyZXR1cm4gc2tiO1xuIFx0fSBlbHNlIGlmIChwb3J0LVx1MDAzZWRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19IU1JfVEFHX0lOUykge1xuIFx0XHRyZXR1cm4gc2tiX2Nsb25lKGZyYW1lLVx1MDAzZXNrYl9zdGQsIEdGUF9BVE9NSUMpO1xuIFx0fVxuQEAgLTM3NywxNSArMzg5LDI4IEBAIHN0cnVjdCBza19idWZmICpwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcbiBcdGlmIChmcmFtZS1cdTAwM2Vza2JfcHJwKSB7XG4tXHRcdHN0cnVjdCBwcnBfcmN0ICp0cmFpbGVyID0gc2tiX2dldF9QUlBfcmN0KGZyYW1lLVx1MDAzZXNrYl9wcnApO1xuK1x0XHRzdHJ1Y3QgcHJwX3JjdCAqdHJhaWxlcjtcbiBcbitcdFx0LyogU2FtZSBzaGFyaW5nIGhhemFyZCBhcyBhYm92ZTogcHJpdmF0aXplIHRoZSBjbG9uZSBkYXRhXG4rXHRcdCAqIGJlZm9yZSB1cGRhdGluZyB0aGUgTEFOIGlkLlxuK1x0XHQgKi9cbitcdFx0c2tiID0gc2tiX2Nsb25lKGZyYW1lLVx1MDAzZXNrYl9wcnAsIEdGUF9BVE9NSUMpO1xuK1x0XHRpZiAoIXNrYilcbitcdFx0XHRyZXR1cm4gTlVMTDtcbitcdFx0aWYgKHNrYl9jb3coc2tiLCAwKSkge1xuK1x0XHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRcdHJldHVybiBOVUxMO1xuK1x0XHR9XG4rXG4rXHRcdHRyYWlsZXIgPSBza2JfZ2V0X1BSUF9yY3Qoc2tiKTtcbiBcdFx0aWYgKHRyYWlsZXIpIHtcbiBcdFx0XHRwcnBfc2V0X2xhbl9pZCh0cmFpbGVyLCBwb3J0KTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRXQVJOX09OQ0UoIXRyYWlsZXIsIFwiZXJyb3JlZCBQUlAgc2tiXCIpO1xuK1x0XHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRcdHJldHVybiBOVUxMO1xuIFx0XHR9XG4tXHRcdHJldHVybiBza2JfY2xvbmUoZnJhbWUtXHUwMDNlc2tiX3BycCwgR0ZQX0FUT01JQyk7XG4rXHRcdHJldHVybiBza2I7XG4gXHR9IGVsc2UgaWYgKHBvcnQtXHUwMDNlZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX0hTUl9UQUdfSU5TKSB7XG4gXHRcdHJldHVybiBza2JfY2xvbmUoZnJhbWUtXHUwMDNlc2tiX3N0ZCwgR0ZQX0FUT01JQyk7XG4gXHR9XG5AQCAtNDIwLDYgKzQ0NSwyMiBAQCBzdGF0aWMgdm9pZCBoc3JfZGVsaXZlcl9tYXN0ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBzdGF0aWMgaW50IGhzcl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCxcbiBcdFx0ICAgIHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXG4ge1xuK1x0LyogQW4gaW50ZXJsaW5rLWJvdW5kIHNrYiBmcm9tIGdldF91bnRhZ2dlZF9mcmFtZSgpIGNhbiBzdGlsbCBhbGlhc1xuK1x0ICogYW5vdGhlciBsaXZlIGNvbnN1bWVyOiBmb3IgbWFzdGVyLW9yaWdpbmF0ZWQgZnJhbWVzIHRoZSBjbG9uZVxuK1x0ICogc2hhcmVzIHRoZSBvcmlnaW5hbCBUWCBza2IgKHdoaWNoIHRhcHMgb3IgdGhlIFRYIHBhdGggbWF5IHN0aWxsXG4rXHQgKiBob2xkKTsgZm9yIHJpbmcgZnJhbWVzIHRoZSBtYXN0ZXIgYWxzbyBjb25zdW1lcyB0aGVtIHdoZW4gdGhleVxuK1x0ICogYXJlIGRlc3RpbmVkIHRvIHRoZSBsb2NhbCBub2RlIHdpdGhvdXQgYmVpbmcgZXhjbHVzaXZlIHRvIGl0LlxuK1x0ICogUHJpdmF0aXplIGJlZm9yZSBhbnkgYWRkcmVzcyBtdXRhdGlvbi5cbitcdCAqL1xuK1x0aWYgKHBvcnQtXHUwMDNldHlwZSA9PSBIU1JfUFRfSU5URVJMSU5LIFx1MDAyNlx1MDAyNlxuK1x0ICAgIChmcmFtZS1cdTAwM2Vwb3J0X3Jjdi1cdTAwM2V0eXBlID09IEhTUl9QVF9NQVNURVIgfHxcbitcdCAgICAgKGZyYW1lLVx1MDAzZWlzX2xvY2FsX2Rlc3QgXHUwMDI2XHUwMDI2ICFmcmFtZS1cdTAwM2Vpc19sb2NhbF9leGNsdXNpdmUpKSBcdTAwMjZcdTAwMjZcbitcdCAgICBza2JfY293KHNrYiwgMCkpIHtcbitcdFx0ZnJhbWUtXHUwMDNlcG9ydF9yY3YtXHUwMDNlZGV2LVx1MDAzZXN0YXRzLnJ4X2Ryb3BwZWQrKztcbitcdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHRcdHJldHVybiBORVRfWE1JVF9EUk9QO1xuK1x0fVxuK1xuIFx0aWYgKGZyYW1lLVx1MDAzZXBvcnRfcmN2LVx1MDAzZXR5cGUgPT0gSFNSX1BUX01BU1RFUikge1xuIFx0XHRoc3JfYWRkcl9zdWJzdF9kZXN0KGZyYW1lLVx1MDAzZW5vZGVfc3JjLCBza2IsIHBvcnQpO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaHNyL01ha2VmaWxlXG5pbmRleCAzMWZiOTMyNmNmNTMzLi44N2ZlMzQ5NTFiOGIwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9NYWtlZmlsZVxuQEAgLTUsNiArNSw3IEBAIHRvcF9zcmNkaXIgPSAuLi8uLi8uLi8uLi8uLlxuIFRFU1RfUFJPR1MgOj0gXFxcbiBcdGhzcl9waW5nLnNoIFxcXG4gXHRoc3JfcmVkYm94LnNoIFxcXG4rXHRoc3Jfc2hhcmVkX211dGF0aW9uLnNoIFxcXG4gXHRsaW5rX2ZhdWx0cy5zaCBcXFxuIFx0cHJwX3Bpbmcuc2ggXFxcbiAjIGVuZCBvZiBURVNUX1BST0dTXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3Jfc2hhcmVkX211dGF0aW9uLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3Jfc2hhcmVkX211dGF0aW9uLnNoXG5uZXcgZmlsZSBtb2RlIDEwMDc1NVxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMDVlN2U4MDNkMjg2N1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2hzci9oc3Jfc2hhcmVkX211dGF0aW9uLnNoXG5AQCAtMCwwICsxLDIyMyBAQFxuKyMhL2Jpbi9iYXNoXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNcbisjIFZlcmlmeSB0aGF0IHBlci1lZ3Jlc3MgbXV0YXRpb25zIG9mIHNoYXJlZCBza2IgZGF0YSBhcmUgcHJpdmF0ZTpcbisjXG4rIyBGMiAocGF0aC9MQU4gSUQpOiBvbiBhbiBhZmZlY3RlZCBrZXJuZWwgdGhlIHNlY29uZCBzbGF2ZSdzIExBTi1JRCB3cml0ZVxuKyMgbGFuZHMgaW4gdGhlIGZpcnN0IHNsYXZlJ3Mgc3RpbGwtcXVldWVkIGNsb25lOyB3aXRoIGEgbmV0ZW0gZGVsYXkgb25cbisjIHNsYXZlIEEsIGluamVjdGVkIGZyYW1lcyBsZWF2ZSBBIGNhcnJ5aW5nIEIncyBMQU4gSUQuXG4rI1xuKyMgRjEgKFJlZEJveCBzb3VyY2UgTUFDKTogb24gYW4gYWZmZWN0ZWQga2VybmVsIGFuIEhTUi10YWdnZWQgbXVsdGljYXN0XG4rIyBmcmFtZSByZWNlaXZlZCBvbiBhIFJlZEJveCBzbGF2ZSBpcyBjbG9uZWQgZm9yIG1hc3RlciBhbmQgaW50ZXJsaW5rLFxuKyMgYW5kIHRoZSBpbnRlcmxpbmsncyBSZWRCb3gtTUFDIHJld3JpdGUgbGFuZHMgaW4gdGhlIG1hc3RlciBjbG9uZSdzXG4rIyBidWZmZXIsIHNvIHRoZSBsb2NhbCBzdGFjayByZWNlaXZlcyB0aGUgUmVkQm94IE1BQyBpbnN0ZWFkIG9mIHRoZVxuKyMgb3JpZ2luYXRpbmcgbm9kZSdzIE1BQy5cbitcbitpcHY2PWZhbHNlXG4rXG4rc291cmNlIC4vaHNyX2NvbW1vbi5zaFxuK1xuK0RVUj01XG4rXG4rcmVxdWlyZSgpXG4re1xuK1x0Y29tbWFuZCAtdiBcIiQxXCIgXHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxIFx1MDAyNlx1MDAyNiByZXR1cm4gMFxuK1x0ZWNobyBcIlNLSVA6ICQxIG5vdCBhdmFpbGFibGVcIlxuK1x0ZXhpdCAka3NmdF9za2lwXG4rfVxuK1xuK3JlcXVpcmUgaXBcbityZXF1aXJlIHRjXG4rcmVxdWlyZSBweXRob24zXG4rXG4rdHJhcCBjbGVhbnVwX2FsbF9ucyBFWElUXG4rXG4rIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEYyOiBMQU4tSUQgaXNvbGF0aW9uXG4rIyBQUlAgREFOUCAocHJvdG8gMSksIEFGX1BBQ0tFVCBwcmUtdGFnZ2VkIGluamVjdGlvbiwgbmV0ZW0gb24gc2xhdmUgQS5cbitydW5fZjIoKVxuK3tcbitcdHNldHVwX25zIG5zIDJcdTAwM2UvZGV2L251bGwgfHwgcmV0dXJuICRrc2Z0X3NraXBcbitcdG5zeCgpIHsgaXAgbmV0bnMgZXhlYyBcIiRuc1wiIFwiJEBcIjsgfVxuK1xuK1x0IyBQcm9iZSBzY2hfbmV0ZW0gaW5zaWRlIHRoZSBkaXNwb3NhYmxlIG5hbWVzcGFjZSBvbmx5LlxuK1x0aWYgISBuc3ggdGMgcWRpc2MgYWRkIGRldiBsbyByb290IG5ldGVtIGRlbGF5IDFtcyAyXHUwMDNlL2Rldi9udWxsOyB0aGVuXG4rXHRcdGVjaG8gXCJTS0lQOiBzY2hfbmV0ZW0gbm90IGF2YWlsYWJsZVwiXG4rXHRcdHJldHVybiAka3NmdF9za2lwXG4rXHRmaVxuK1x0bnN4IHRjIHFkaXNjIGRlbCBkZXYgbG8gcm9vdCAyXHUwMDNlL2Rldi9udWxsXG4rXG4rXHQjIENhcGFiaWxpdHkgcHJvYmVzIGVuZCBoZXJlOyBzZXR1cCBvciBydW50aW1lIGZhaWx1cmUgYmVsb3cgaXMgRkFJTC5cbitcdG5zeCBpcCBsaW5rIGFkZCB2QSB0eXBlIHZldGggcGVlciBuYW1lIHZBcCB8fFxuK1x0XHR7IGVjaG8gXCJGQUlMOiB2ZXRoIEFcIjsgcmV0dXJuIDE7IH1cbitcdG5zeCBpcCBsaW5rIGFkZCB2QiB0eXBlIHZldGggcGVlciBuYW1lIHZCcCB8fFxuK1x0XHR7IGVjaG8gXCJGQUlMOiB2ZXRoIEJcIjsgcmV0dXJuIDE7IH1cbitcdGZvciBpIGluIHZBIHZCIHZBcCB2QnA7IGRvXG4rXHRcdG5zeCBpcCBsaW5rIHNldCBcIiRpXCIgdXAgfHwgeyBlY2hvIFwiRkFJTDogJGkgdXBcIjsgcmV0dXJuIDE7IH1cbitcdGRvbmVcbitcdGlmICEgbnN4IGlwIGxpbmsgYWRkIG5hbWUgcHJwMCB0eXBlIGhzciBzbGF2ZTEgdkEgc2xhdmUyIHZCIFxcXG4rXHRcdHN1cGVydmlzaW9uIDQ1IHByb3RvIDEgMlx1MDAzZS9kZXYvbnVsbDsgdGhlblxuK1x0XHRlY2hvIFwiU0tJUDogSFNSL1BSUCBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMga2VybmVsXCJcbitcdFx0cmV0dXJuICRrc2Z0X3NraXBcbitcdGZpXG4rXHRuc3ggaXAgbGluayBzZXQgcHJwMCB1cCB8fCB7IGVjaG8gXCJGQUlMOiBwcnAwIHVwXCI7IHJldHVybiAxOyB9XG4rXHRuc3ggdGMgcWRpc2MgYWRkIGRldiB2QSByb290IG5ldGVtIGRlbGF5IDIwMG1zIHx8XG4rXHRcdHsgZWNobyBcIkZBSUw6IG5ldGVtXCI7IHJldHVybiAxOyB9XG4rXG4rXHRuc3ggcHl0aG9uMyAvZGV2L3N0ZGluIFwiJERVUlwiIFx1MDAzY1x1MDAzYydQWUYyJ1xuK2ltcG9ydCBzb2NrZXQsIHN0cnVjdCwgc2VsZWN0LCBzeXMsIHRpbWVcbitcbitkdXIgPSBpbnQoc3lzLmFyZ3ZbMV0pXG4rZGVmIGxhbmlkKHBrdCk6XG4rICAgIGlmIGxlbihwa3QpIFx1MDAzYyAyMCBvciBwa3RbLTI6XSAhPSBiXCJcXHg4OFxceGZiXCI6XG4rICAgICAgICByZXR1cm4gTm9uZVxuKyAgICByZXR1cm4gKHBrdFstNF0gXHUwMDNlXHUwMDNlIDQpIFx1MDAyNiAweEZcbitcbitTUkMgPSBieXRlcy5mcm9taGV4KG9wZW4oXCIvc3lzL2NsYXNzL25ldC9wcnAwL2FkZHJlc3NcIikucmVhZCgpLnJlcGxhY2UoXCI6XCIsIFwiXCIpKVxuK0RTVCA9IGJ5dGVzLmZyb21oZXgoXCIwMmFhYmJjY2RkMDFcIilcbitQQVkgPSBieXRlcyhyYW5nZSg0NikpXG4rcmN0MCA9IHN0cnVjdC5wYWNrKFwiXHUwMDNlSFwiLCAwKSArIHN0cnVjdC5wYWNrKFwiXHUwMDNlSFwiLCA1MiBcdTAwMjYgMHgwRkZGKSArIGJcIlxceDg4XFx4ZmJcIlxuK2ZyYW1lID0gRFNUICsgU1JDICsgYlwiXFx4MDhcXHgwMFwiICsgUEFZICsgcmN0MFxuK1xuK3R4ID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfUEFDS0VULCBzb2NrZXQuU09DS19SQVcpOyB0eC5iaW5kKChcInBycDBcIiwgMCkpXG4rc0EgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9QQUNLRVQsIHNvY2tldC5TT0NLX1JBVyxcbisgICAgICAgIHNvY2tldC5udG9ocygweDAwMDMpKVxuK3NBLmJpbmQoKFwidkFwXCIsIDApKVxuK3NCID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfUEFDS0VULCBzb2NrZXQuU09DS19SQVcsXG4rICAgICAgICBzb2NrZXQubnRvaHMoMHgwMDAzKSlcbitzQi5iaW5kKChcInZCcFwiLCAwKSlcbitzQS5zZXRibG9ja2luZyhGYWxzZSk7IHNCLnNldGJsb2NraW5nKEZhbHNlKVxuK2ZvciBfIGluIHJhbmdlKDIwMCk6XG4rICAgIHR4LnNlbmQoZnJhbWUpOyB0aW1lLnNsZWVwKDAuMDAxKVxuK1xuK2EsIGIgPSBbXSwgW11cbitlbmQgPSB0aW1lLnRpbWUoKSArIGR1clxuK3doaWxlIHRpbWUudGltZSgpIFx1MDAzYyBlbmQ6XG4rICAgIHIsIF8sIF8gPSBzZWxlY3Quc2VsZWN0KFtzQSwgc0JdLCBbXSwgW10sIDAuMylcbisgICAgZm9yIHMgaW4gcjpcbisgICAgICAgIHBrdCA9IHMucmVjdig2NTUzNSlcbisgICAgICAgIGlmIChwa3RbOjZdICE9IERTVCBvciBwa3RbNjoxMl0gIT0gU1JDIG9yIHBrdFsxMjoxNF0gIT0gYlwiXFx4MDhcXHgwMFwiXG4rICAgICAgICAgICAgICAgIG9yIHBrdFsxNDoxNCArIGxlbihQQVkpXSAhPSBQQVkpOlxuKyAgICAgICAgICAgIGNvbnRpbnVlXG4rICAgICAgICBsaWQgPSBsYW5pZChwa3QpXG4rICAgICAgICBpZiBsaWQgaXMgbm90IE5vbmU6XG4rICAgICAgICAgICAgKGEgaWYgcyBpcyBzQSBlbHNlIGIpLmFwcGVuZChsaWQpXG4rXG4rcHJpbnQoXCJBLXNpZGUgY291bnQ9JWQgbGFuIGlkcz0lc1wiICUgKGxlbihhKSwgc29ydGVkKHNldChhKSkpKVxuK3ByaW50KFwiQi1zaWRlIGNvdW50PSVkIGxhbiBpZHM9JXNcIiAlIChsZW4oYiksIHNvcnRlZChzZXQoYikpKSlcbitpZiBsZW4oYSkgXHUwMDNjIDE1MCBvciBsZW4oYikgXHUwMDNjIDE1MDpcbisgICAgcHJpbnQoXCJGQUlMOiB0b28gZmV3IGluamVjdGVkIGZyYW1lcyBjYXB0dXJlZCAoQT0lZCBCPSVkLCBzZW50IDIwMClcIlxuKyAgICAgICAgICAlIChsZW4oYSksIGxlbihiKSkpXG4rICAgIHN5cy5leGl0KDEpXG4rYmFkX2EgPSBbeCBmb3IgeCBpbiBhIGlmICh4IFx1MDAyNiAxKSAhPSAwXVxuK2JhZF9iID0gW3ggZm9yIHggaW4gYiBpZiAoeCBcdTAwMjYgMSkgIT0gMV1cbitpZiBiYWRfYSBvciBiYWRfYjpcbisgICAgcHJpbnQoXCJGQUlMOiBzaGFyZWQtbXV0YXRpb24gY29ycnVwdGlvbiAtIEE6ICVkLyVkIHdyb25nLWxhbixcIlxuKyAgICAgICAgICBcIiBCOiAlZC8lZCB3cm9uZy1sYW5cIlxuKyAgICAgICAgICAlIChsZW4oYmFkX2EpLCBsZW4oYSksIGxlbihiYWRfYiksIGxlbihiKSkpXG4rICAgIHN5cy5leGl0KDEpXG4rcHJpbnQoXCJQQVNTOiBwZXItZWdyZXNzIExBTiBJRHMgaXNvbGF0ZWQgKEEgYWxsIGJpdDA9MCwgQiBhbGwgYml0MD0xKVwiKVxuK3N5cy5leGl0KDApXG4rUFlGMlxuK31cbitcbisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGMTogUmVkQm94IHNvdXJjZS1NQUMgcHJpdmFjeVxuKyMgSFNSIFJlZEJveCAocHJvdG8gMCksIHRhZ2dlZCBtdWx0aWNhc3QgZnJvbSBhIHNsYXZlOiBtYXN0ZXIgbXVzdCBrZWVwXG4rIyB0aGUgbm9kZSBNQUMsIGludGVybGluayBtdXN0IGNhcnJ5IHRoZSBSZWRCb3ggTUFDLlxuK3J1bl9mMSgpXG4re1xuK1x0c2V0dXBfbnMgbnMgMlx1MDAzZS9kZXYvbnVsbCB8fCByZXR1cm4gJGtzZnRfc2tpcFxuK1x0bnN4KCkgeyBpcCBuZXRucyBleGVjIFwiJG5zXCIgXCIkQFwiOyB9XG4rXG4rXHRuc3ggaXAgbGluayBhZGQgdkEgdHlwZSB2ZXRoIHBlZXIgbmFtZSB2QXAgfHxcbitcdFx0eyBlY2hvIFwiRkFJTDogdmV0aCBBXCI7IHJldHVybiAxOyB9XG4rXHRuc3ggaXAgbGluayBhZGQgdkIgdHlwZSB2ZXRoIHBlZXIgbmFtZSB2QnAgfHxcbitcdFx0eyBlY2hvIFwiRkFJTDogdmV0aCBCXCI7IHJldHVybiAxOyB9XG4rXHRuc3ggaXAgbGluayBhZGQgdkkgdHlwZSB2ZXRoIHBlZXIgbmFtZSB2SXAgfHxcbitcdFx0eyBlY2hvIFwiRkFJTDogdmV0aCBJXCI7IHJldHVybiAxOyB9XG4rXHRmb3IgaSBpbiB2QSB2QiB2SSB2QXAgdkJwIHZJcDsgZG9cbitcdFx0bnN4IGlwIGxpbmsgc2V0IFwiJGlcIiB1cCB8fCB7IGVjaG8gXCJGQUlMOiAkaSB1cFwiOyByZXR1cm4gMTsgfVxuK1x0ZG9uZVxuK1x0aWYgISBuc3ggaXAgbGluayBhZGQgbmFtZSBoc3IwIHR5cGUgaHNyIHNsYXZlMSB2QSBzbGF2ZTIgdkIgXFxcbitcdFx0aW50ZXJsaW5rIHZJIHN1cGVydmlzaW9uIDQ1IHByb3RvIDAgMlx1MDAzZS9kZXYvbnVsbDsgdGhlblxuK1x0XHRlY2hvIFwiU0tJUDogSFNSIFJlZEJveCBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMga2VybmVsXCJcbitcdFx0cmV0dXJuICRrc2Z0X3NraXBcbitcdGZpXG4rXHRuc3ggaXAgbGluayBzZXQgaHNyMCB1cCB8fCB7IGVjaG8gXCJGQUlMOiBoc3IwIHVwXCI7IHJldHVybiAxOyB9XG4rXG4rXHRuc3ggcHl0aG9uMyAvZGV2L3N0ZGluIFx1MDAzY1x1MDAzYydQWUYxJ1xuK2ltcG9ydCBzb2NrZXQsIHNlbGVjdCwgc3lzLCB0aW1lXG4rXG4rTk9ERSAgPSBieXRlcy5mcm9taGV4KFwiMDIxMTIyMzM0NDU1XCIpXG4rTUNBU1QgPSBieXRlcy5mcm9taGV4KFwiMDEwMDVlMDAwMDAxXCIpXG4rUkIgICAgPSBieXRlcy5mcm9taGV4KG9wZW4oXCIvc3lzL2NsYXNzL25ldC92SS9hZGRyZXNzXCIpLnJlYWQoKS5yZXBsYWNlKFwiOlwiLCBcIlwiKSlcbitQQVkgICA9IGJ5dGVzKHJhbmdlKDQ2KSlcbitcbitkZWYgZnJhbWUoc2VxKTpcbisgICAgdGFnID0gKCgoMSBcdTAwM2NcdTAwM2MgMTIpIHwgbGVuKFBBWSkpLnRvX2J5dGVzKDIsIFwiYmlnXCIpXG4rICAgICAgICAgICArIHNlcS50b19ieXRlcygyLCBcImJpZ1wiKSArIGJcIlxceDA4XFx4MDBcIilcbisgICAgcmV0dXJuIE1DQVNUICsgTk9ERSArIGJcIlxceDg5XFx4MmZcIiArIHRhZyArIFBBWVxuK1xuK3R4ID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfUEFDS0VULCBzb2NrZXQuU09DS19SQVcpOyB0eC5iaW5kKChcInZBcFwiLCAwKSlcbitzbSA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1BBQ0tFVCwgc29ja2V0LlNPQ0tfUkFXLFxuKyAgICAgICAgc29ja2V0Lm50b2hzKDB4MDAwMykpXG4rc20uYmluZCgoXCJoc3IwXCIsIDApKVxuK3NpID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfUEFDS0VULCBzb2NrZXQuU09DS19SQVcsXG4rICAgICAgICBzb2NrZXQubnRvaHMoMHgwMDAzKSlcbitzaS5iaW5kKChcInZJcFwiLCAwKSlcbitzbS5zZXRibG9ja2luZyhGYWxzZSk7IHNpLnNldGJsb2NraW5nKEZhbHNlKVxuK1xuK2ZvciBpIGluIHJhbmdlKDMpOlxuKyAgICB0eC5zZW5kKGZyYW1lKGkgKyAxKSk7IHRpbWUuc2xlZXAoMC4wNSlcbitcbittX3NyYyA9IGlfc3JjID0gTm9uZVxuK2VuZCA9IHRpbWUudGltZSgpICsgNFxuK3doaWxlIHRpbWUudGltZSgpIFx1MDAzYyBlbmQgYW5kIChtX3NyYyBpcyBOb25lIG9yIGlfc3JjIGlzIE5vbmUpOlxuKyAgICByLCBfLCBfID0gc2VsZWN0LnNlbGVjdChbc20sIHNpXSwgW10sIFtdLCAwLjMpXG4rICAgIGZvciBzIGluIHI6XG4rICAgICAgICBwa3QgPSBzLnJlY3YoNjU1MzUpXG4rICAgICAgICAjIGV4YWN0IGZsb3c6IGRzdCwgcG9zdC1zdHJpcCBFdGhlclR5cGUsIGV4YWN0IHBheWxvYWQsIG1pbiBsZW5ndGg7XG4rICAgICAgICAjIGhfc291cmNlIGlzIHRoZSBhc3NlcnRlZCB2YWx1ZSBhbmQgbXVzdCBOT1QgYmUgZmlsdGVyZWQgb25cbisgICAgICAgIGlmIChsZW4ocGt0KSBcdTAwM2MgNjAgb3IgcGt0Wzo2XSAhPSBNQ0FTVCBvciBwa3RbMTI6MTRdICE9IGJcIlxceDA4XFx4MDBcIlxuKyAgICAgICAgICAgICAgICBvciBwa3RbMTQ6MTQgKyBsZW4oUEFZKV0gIT0gUEFZKTpcbisgICAgICAgICAgICBjb250aW51ZVxuKyAgICAgICAgaWYgcyBpcyBzbSBhbmQgbV9zcmMgaXMgTm9uZTpcbisgICAgICAgICAgICBtX3NyYyA9IHBrdFs2OjEyXVxuKyAgICAgICAgZWxpZiBzIGlzIHNpIGFuZCBpX3NyYyBpcyBOb25lOlxuKyAgICAgICAgICAgIGlfc3JjID0gcGt0WzY6MTJdXG4rXG4rcHJpbnQoXCJtYXN0ZXIgaF9zb3VyY2UgICAgPVwiLCBtX3NyYy5oZXgoKSBpZiBtX3NyYyBlbHNlIE5vbmUpXG4rcHJpbnQoXCJub2RlIE1BQyAgICAgICAgICAgPVwiLCBOT0RFLmhleCgpKVxuK3ByaW50KFwiaW50ZXJsaW5rIGhfc291cmNlID1cIiwgaV9zcmMuaGV4KCkgaWYgaV9zcmMgZWxzZSBOb25lKVxuK3ByaW50KFwicmVkYm94IE1BQyAgICAgICAgID1cIiwgUkIuaGV4KCkpXG4raWYgaV9zcmMgIT0gUkI6XG4rICAgIHByaW50KFwiRkFJTDogaW50ZXJsaW5rIGRpZCBub3QgY2FycnkgdGhlIFJlZEJveCBNQUNcIilcbisgICAgc3lzLmV4aXQoMSlcbitpZiBtX3NyYyAhPSBOT0RFOlxuKyAgICBwcmludChcIkZBSUw6IG1hc3RlciByZWNlaXZlZCAlcyBpbnN0ZWFkIG9mIHRoZSBub2RlIE1BQyBcIlxuKyAgICAgICAgICBcIihzaGFyZWQtbXV0YXRpb24gY29ycnVwdGlvbilcIlxuKyAgICAgICAgICAlIChtX3NyYy5oZXgoKSBpZiBtX3NyYyBlbHNlIFwibm90aGluZ1wiKSlcbisgICAgc3lzLmV4aXQoMSlcbitwcmludChcIlBBU1M6IG1hc3RlciBrZXB0IG5vZGUgTUFDLCBpbnRlcmxpbmsga2VwdCBSZWRCb3ggTUFDXCIpXG4rc3lzLmV4aXQoMClcbitQWUYxXG4rfVxuK1xuK3JjPTBcbitcbitydW5fZjJcbityZXQ9JD9cbitbIFwiJHJldFwiIC1lcSBcIiRrc2Z0X3NraXBcIiBdIFx1MDAyNlx1MDAyNiBleGl0IFwiJGtzZnRfc2tpcFwiXG4rWyBcIiRyZXRcIiAtZXEgMCBdIHx8IHJjPTFcbitcbitydW5fZjFcbityZXQ9JD9cbitbIFwiJHJldFwiIC1lcSBcIiRrc2Z0X3NraXBcIiBdIFx1MDAyNlx1MDAyNiBleGl0IFwiJGtzZnRfc2tpcFwiXG4rWyBcIiRyZXRcIiAtZXEgMCBdIHx8IHJjPTFcbitcbitpZiBbICRyYyAtZXEgMCBdOyB0aGVuXG4rXHRlY2hvIFwiaHNyX3NoYXJlZF9tdXRhdGlvbjogcGVyLWVncmVzcyBtdXRhdGlvbiBpc29sYXRpb24gKEYxK0YyKSBbIE9LIF1cIlxuK2Vsc2VcbitcdGVjaG8gXCJoc3Jfc2hhcmVkX211dGF0aW9uOiBwZXItZWdyZXNzIG11dGF0aW9uIGlzb2xhdGlvbiBbIEZBSUwgXVwiIFxcXG4rXHRcdFwicmM9JHJjXCIgMVx1MDAzZVx1MDAyNjJcbitmaVxuK2V4aXQgJHJjXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwMDo1ODowMS4xMTUwMzAyMTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDkxMzQ0ODk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSFNSL1BSUCBTaGFyZWQtTXV0YXRpb24gQnVnIEZpeCoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0J3MgaGl0dGluZyBgbmV0L2hzci9oc3JfZm9yd2FyZC5jYCBhbmQgaW50cm9kdWNpbmcgYSBuZXcgc2VsZnRlc3QgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX3NoYXJlZF9tdXRhdGlvbi5zaGAuIE15IGluaXRpYWwgc2NhbiB0ZWxscyBtZSB0aGlzIGlzIGFkZHJlc3NpbmcgYSBzaGFyZWQtbXV0YXRpb24gYnVnIHdpdGhpbiB0aGUgSFNSL1BSUCBwcm90b2NvbHMuIFNwZWNpZmljYWxseSwgdGhlIGlzc3VlIHJldm9sdmVzIGFyb3VuZCBgc2tiX2Nsb25lYC4gSXQgbG9va3MgbGlrZSB3ZSB3ZXJlIGNsb25pbmcgU0tCcyBidXQgdGhlbiBkaXJlY3RseSBtb2RpZnlpbmcgdGhlICpjbG9uZWQqIFNLQiB3aXRob3V0IHVzaW5nIGBza2JfY293YCBvciBgc2tiX2NvcHlgIGZpcnN0LiBUaGF0J3MgYSBjbGFzc2ljIG1pc3Rha2Ug4oCTIG1vZGlmeWluZyBhIGNsb25lIHdpdGhvdXQgZW5zdXJpbmcgdGhlIG9yaWdpbmFsIGRhdGEgaXMgcHJvdGVjdGVkLiBUaGlzIHdvdWxkIGxlYWQgdG8gZGF0YSBjb3JydXB0aW9uIGluIHRoZSBvcmlnaW5hbCBTS0IsIHNoYXJlZCB3aXRoIG90aGVyIGNsb25lcywgYSBzaWduaWZpY2FudCB2dWxuZXJhYmlsaXR5LlxuXG5UaGUgZml4IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEl0IGFkZHMgYHNrYl9jb3coc2tiLCAwKWAgYmVmb3JlIHRoZSBtb2RpZmljYXRpb24gc3RlcHMuIExldCBtZSBtYWtlIHN1cmUgSSd2ZSBnb3QgdGhlIGNvbnRleHQgY29ycmVjdC4gTG9va3MgbGlrZSB0aGlzIGFmZmVjdHMgYGhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCwgYHBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCwgYW5kIGBoc3JfeG1pdGAgd2l0aGluIHRoZSBIU1IgbmV0d29yayBkcml2ZXIuIFF1aWNrIHJlbWluZGVyLCB0aGVzZSBhcmUgYWxsIHBhcnQgb2YgdGhlIEhTUiBzdGFjaywgYW5kIHRoYXQgZnVuY3Rpb25hbGl0eSBpcyBjb25maWd1cmVkIHdpdGggYENPTkZJR19IU1JgLlxuXG5SaWdodCwgdGltZSB0byBkaWcgaW4gYW5kIHZlcmlmeSB0aGUgbG9naWMgYXJvdW5kIHRob3NlIGZ1bmN0aW9ucy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgc2tiX2Nvd2AgaXMgY29ycmVjdGx5IGltcGxlbWVudGVkIG5vdyBpbiBhbGwgdGhlIGxpc3RlZCBmdW5jdGlvbnMuIEknbGwgYWxzbyBuZWVkIHRvIHNlZSBpZiB0aGUgbmV3IHNlbGZ0ZXN0IGFwcHJvcHJpYXRlbHkgY292ZXJzIHRoZSBidWcgc2NlbmFyaW8uIFdlIGNhbid0IGhhdmUgdGhpcyBhZ2Fpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ0MCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAwOjU4OjA3LjIwNjM3OTQ0OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzI4ODU0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFNSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9oc3IvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9oc3IvS2NvbmZpZy01LVxcbm5ldC9oc3IvS2NvbmZpZzo2OmNvbmZpZyBIU1JcXG5uZXQvaHNyL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSAoSFNSIFxcdTAwMjYgUFJQKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDA6NTg6MDcuMjgzNjc4MzM4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ4NjM1MTE0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIERlcGVuZGVuY2llcyBpbiB0aGUgYG5ldC9oc3IvS2NvbmZpZ2AgRmlsZSoqXG5cbkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgaW4gdG9vIGRlZXAsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmUsIHdoaWNoIGlzIGEgZ29vZCBoYWJpdC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBkaXJlY3RseSB0byB0aGUgYG5ldC9oc3IvS2NvbmZpZ2AgZmlsZS4gSSdtIGdvaW5nIHRvIG5hdmlnYXRlIHRvIHRoYXQgS2NvbmZpZyBmaWxlLiBJIHdhbnQgdG8gc2VlIGEgY2xlYXIgbWFwIG9mIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aXRoaW4gdGhlIEhTUiAoSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSkgbW9kdWxlLiBJIGtub3cgdGhhdCBmaWxlIHdpbGwgY29udGFpbiB0aGUgY3J1Y2lhbCBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cyBhbmQgY29uZGl0aW9uYWxzIHRoYXQgZ292ZXJuIHdoaWNoIGZlYXR1cmVzIGFyZSBlbmFibGVkLCBhbmQgd2hpY2ggYXJlbid0LCBiYXNlZCBvbiB0aGUgb3ZlcmFsbCBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGNydWNpYWwgdmFyaWFibGVzIGFuZCBjb25kaXRpb25zIHRoYXQgZHJpdmUgdGhlIEhTUiBtb2R1bGUncyBidWlsZCBwcm9jZXNzLiBFc3NlbnRpYWxseSwgSSdtIGFpbWluZyBmb3IgYSBxdWljayBzY2FuIG9mIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzEzNiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAwOjU4OjEwLjc3MDAzMTgxNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9oc3IvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBJRUMgNjI0MzktMyBIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5XFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBIU1JcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5IChIU1IgXFx1MDAyNiBQUlApXFxcIlxcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBUaGlzIGVuYWJsZXMgSUVDIDYyNDM5IGRlZmluZWQgSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3NcXG4gIDEwOlxcdFxcdCAgUmVkdW5kYW5jeSAoSFNSKSBhbmQgUGFyYWxsZWwgUmVkdW5kYW5jeSBQcm90b2NvbCAoUFJQKS5cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB5b3VyIExpbnV4IGJveCB3aWxsIGJlIGFibGUgdG8gYWN0IGFzIGFcXG4gIDEzOlxcdFxcdCAgREFOSCAoXFxcIkRvdWJseSBhdHRhY2hlZCBub2RlIGltcGxlbWVudGluZyBIU1JcXFwiKSBvciBEQU5QIChcXFwiRG91Ymx5XFxuICAxNDpcXHRcXHQgIGF0dGFjaGVkIG5vZGUgaW1wbGVtZW50aW5nIFBSUFxcXCIpLiBGb3IgdGhpcyB0byB3b3JrLCB5b3VyIExpbnV4IGJveFxcbiAgMTU6XFx0XFx0ICBuZWVkcyAoYXQgbGVhc3QpIHR3byBwaHlzaWNhbCBFdGhlcm5ldCBpbnRlcmZhY2VzLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRcXHQgIEZvciBEQU5ILCBpdCBtdXN0IGJlIGNvbm5lY3RlZCBhcyBhIG5vZGUgaW4gYSByaW5nIG5ldHdvcmsgdG9nZXRoZXJcXG4gIDE4OlxcdFxcdCAgd2l0aCBvdGhlciBIU1IgY2FwYWJsZSBub2Rlcy4gQWxsIEV0aGVybmV0IGZyYW1lcyBzZW50IG92ZXIgdGhlIEhTUlxcbiAgMTk6XFx0XFx0ICBkZXZpY2Ugd2lsbCBiZSBzZW50IGluIGJvdGggZGlyZWN0aW9ucyBvbiB0aGUgcmluZyAob3ZlciBib3RoIHNsYXZlXFxuICAyMDpcXHRcXHQgIHBvcnRzKSwgZ2l2aW5nIGEgcmVkdW5kYW50LCBpbnN0YW50IGZhaWwtb3ZlciBuZXR3b3JrLiBFYWNoIEhTUiBub2RlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAwOjU4OjEwLjc3MDExODUyNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MTAxMTMzMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBIU1IgQ29uZmlndXJhdGlvbiBhbmQgRm9yd2FyZGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgSFNSIGNvbmZpZ3VyYXRpb24sIGFuZCBpdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGUgY29uZmlnIGl0c2VsZiwgbGV0J3MganVzdCBjYWxsIGl0IGBIU1JgLCBkb2Vzbid0IGxvb2sgbGlrZSBpdCBoYXMgYW55IGNyYXp5IGRlcGVuZGVuY2llcyDigJMgc3RhbmRhcmQgbmV0d29ya2luZyBpcyBhbGwgdGhhdCdzIHJlcXVpcmVkLCB3aGljaCBpcyB3aGF0IEknZCBleHBlY3QuIE5vdywgSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgdGFnZ2VkIGZyYW1lcyBhcmUgY3JlYXRlZCBhbmQgaGFuZGxlZC4gTXkgcHJpbWFyeSBpbnRlcmVzdCBsaWVzIGluIHRoZSBjb3JlIGZvcndhcmRpbmcgbG9naWMuXG5cbkkgdGhpbmsgSSdsbCBzdGFydCBieSBleGFtaW5pbmcgdGhlIGZ1bmN0aW9ucyBgaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWVgLCBgcHJwX2NyZWF0ZV90YWdnZWRfZnJhbWVgLCBhbmQgYGhzcl94bWl0YCB3aXRoaW4gdGhlIGBuZXQvaHNyL2hzcl9mb3J3YXJkLmNgIGZpbGUuIFRob3NlIHRocmVlIHNlZW0gbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIGRldGFpbHMgb2YgdGhlIHRhZ2dpbmcgYW5kIHRyYW5zbWlzc2lvbiBwcm9jZXNzZXMuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBIU1IgYW5kIFBSUCB0YWdnaW5nIG1lY2hhbmlzbXMgaW50ZXJhY3QuIEkgd2FudCB0byBzZWUgaG93IHRoZSBmcmFtZXMgYXJlIGNvbnN0cnVjdGVkIGFuZCBob3cgdGhleSBnZXQgc2VudCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3MTIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAwOjU4OjE0LjQ4MDIzNDY2OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODYzMDM5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaHNyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaHNyL2hzcl9kZXZpY2UuYz02MjE9c3RhdGljIGNvbnN0IHN0cnVjdCBoc3JfcHJvdG9fb3BzIGhzcl9vcHMgPSB7XFxubmV0L2hzci9oc3JfZGV2aWNlLmMtNjIyLVxcdC5zZW5kX3N2X2ZyYW1lID0gc2VuZF9oc3Jfc3VwZXJ2aXNpb25fZnJhbWUsXFxubmV0L2hzci9oc3JfZGV2aWNlLmM6NjIzOlxcdC5jcmVhdGVfdGFnZ2VkX2ZyYW1lID0gaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWUsXFxubmV0L2hzci9oc3JfZGV2aWNlLmMtNjI0LVxcdC5nZXRfdW50YWdnZWRfZnJhbWUgPSBoc3JfZ2V0X3VudGFnZ2VkX2ZyYW1lLFxcbi0tXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jPTI4OD1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmhzcl9maWxsX3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTMzMC0gKi9cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6MzMxOnN0cnVjdCBza19idWZmICpoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy0zMzItXFx0XFx0XFx0XFx0XFx0c3RydWN0IGhzcl9wb3J0ICpwb3J0KVxcbi0tXFxubmV0L2hzci9oc3JfZm9yd2FyZC5oPTE3PXN0cnVjdCBza19idWZmICpwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuaC0xOC1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpO1xcbm5ldC9oc3IvaHNyX2ZvcndhcmQuaDoxOTpzdHJ1Y3Qgc2tfYnVmZiAqaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmgtMjAtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGhzcl9wb3J0ICpwb3J0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDA6NTg6MTQuNTM4ODcwNDg3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc3NDY0MDczMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIGNvbnNpZGVyaW5nIEknbSBkZWVwIGluIHRoaXMgY29kZTpcblxuKipBbmFseXppbmcgRnVuY3Rpb24gU2NvcGUqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zOiBgaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWVgLCBgcHJwX2NyZWF0ZV90YWdnZWRfZnJhbWVgLCBhbmQgYGhzcl94bWl0YC4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcyBhbHdheXMgYWJvdXQgc2NvcGUg4oCTIGFyZSB0aGVzZSBzdGF0aWMsIG9yIGFyZSB0aGV5IGdsb2JhbD8gVGhlIGJlaGF2aW9yIHdpbGwgYmUgdmVyeSBkaWZmZXJlbnQuIEFscmlnaHQsIGxldCdzIHNlZS4gTG9va3MgbGlrZSBgaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWVgIGlzIGdsb2JhbCwgYW5kIGBwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZWAgaXMgYWxzbyBnbG9iYWxseSBhY2Nlc3NpYmxlLiBIbW0sIGJ1dCB0aGVuIGhlcmUncyBgaHNyX3htaXRgLCBmbGFnZ2VkIGFzIHN0YXRpYy4gT2theSwgZ29vZC4gTGV0J3MgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgdGhlIGBoc3JfeG1pdGAgc2NvcGluZyBhcyB0aGF0IGNvdWxkIGJlIGEgcG90ZW50aWFsIHBvaW50IG9mIGRpdmVyZ2VuY2UgbGF0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0NDgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDA6NTg6MTguMzEzNTE0MDdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTc4Mzg2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoc3JfeG1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaHNyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaHNyL2hzcl9mb3J3YXJkLmM9NDI0PXN0YXRpYyB2b2lkIGhzcl9kZWxpdmVyX21hc3RlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTQ0NC1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6NDQ1OnN0YXRpYyBpbnQgaHNyX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhzcl9wb3J0ICpwb3J0LFxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy00NDYtXFx0XFx0ICAgIHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM9NTYwPXN0YXRpYyB2b2lkIGhzcl9mb3J3YXJkX2RvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNjIxLVxcdFxcdH0gZWxzZSB7XFxubmV0L2hzci9oc3JfZm9yd2FyZC5jOjYyMjpcXHRcXHRcXHRpZiAoIWhzcl94bWl0KHNrYiwgcG9ydCwgZnJhbWUpKVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy02MjMtXFx0XFx0XFx0XFx0aWYgKHBvcnQtXFx1MDAzZXR5cGUgPT0gSFNSX1BUX1NMQVZFX0EgfHxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDA6NTg6MTguNDIzMzAyMjg4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMDI0Nzg0MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGJyZWFrZG93biBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIGBoc3JfeG1pdGAgQ29kZSoqXG5cbk9rYXksIHNvIGBoc3JfeG1pdGAgaXMgc3RhdGljLCB3aGljaCB0ZWxscyBtZSBpdCdzIGxpa2VseSBhIGNvcmUgaW50ZXJuYWwgZnVuY3Rpb24gd2l0aGluIHRoaXMgSFNSIChIaWdoLWF2YWlsYWJpbGl0eSBTZWFtbGVzcyBSZWR1bmRhbmN5KSBtb2R1bGUuIFRoYXQgbWVhbnMgaXQncyBwcm9iYWJseSBub3QgZGlyZWN0bHkgY2FsbGVkIGZyb20gb3V0c2lkZSwgYnV0IHJhdGhlciBhY3RzIGFzIHRoZSB3b3JraG9yc2UgZm9yIHNlbmRpbmcgZnJhbWVzLiBHaXZlbiB0aGF0LCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgKm90aGVyKiBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCBpdC4gVGhlIGVudHJ5IHBvaW50cywgdGhlIGZ1bmN0aW9ucyB0aGF0IGtpY2sgdGhpbmdzIG9mZiwgYXJlIHByb2JhYmx5IGBoc3JfZm9yd2FyZF9kb2AsIGBoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZWAsIGBwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZWAsIGFuZCBgaHNyX2ZvcndhcmRfc2tiYC4gVGhvc2UgZnVuY3Rpb25zIGFyZSB0aGUgZnJvbnQgZG9vcnMsIHRoZSBpbml0aWF0b3JzIG9mIHRoZSBwcm9jZXNzLiBUaW1lIHRvIHZlcmlmeSB0aGF0IGh5cG90aGVzaXMuIExldCdzIHN0YXJ0IHdpdGggYGhzcl9mb3J3YXJkX2RvYCBhbmQgc2VlIHdoYXQgaXQgZG9lcy4gSSdsbCBmb2N1cyBteSBhdHRlbnRpb24gdGhlcmUgYW5kIHNlZSB3aGF0IGl0IHRlbGxzIG1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDI0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDA6NTg6MjIuNDI1NzgyOTg4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzIyNTk1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoc3JfZm9yd2FyZF9kb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaHNyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaHNyL2hzcl9mb3J3YXJkLmM9NDkyPWJvb2wgaHNyX2Ryb3BfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSwgc3RydWN0IGhzcl9wb3J0ICpwb3J0KVxcbi0tXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTU1OS0gKi9cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM6NTYwOnN0YXRpYyB2b2lkIGhzcl9mb3J3YXJkX2RvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTU2MS17XFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM9Nzc1PXZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydClcXG4tLVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03ODMtXFx0aHNyX3JlZ2lzdGVyX2ZyYW1lX2luKGZyYW1lLm5vZGVfc3JjLCBwb3J0LCBmcmFtZS5zZXF1ZW5jZV9ucik7XFxubmV0L2hzci9oc3JfZm9yd2FyZC5jOjc4NDpcXHRoc3JfZm9yd2FyZF9kbyhcXHUwMDI2ZnJhbWUpO1xcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy03ODUtXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAwOjU4OjIyLjUyMzAxMjY1NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjI2MzkzNjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gbmV0d29yayBrZXJuZWwgaW50ZXJuYWxzLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gcGFja2V0IHByb2Nlc3NpbmcuXG5cbioqQW5hbHl6aW5nIHRoZSBTaWduaWZpY2FuY2Ugb2YgYSBHbG9iYWwgVmFyaWFibGU6IGBoc3JfZm9yd2FyZF9za2JgKipcblxuQWxyaWdodCwgc28gYGhzcl9mb3J3YXJkX3NrYmAgaXMgZ2xvYmFsLCBodWg/IEltbWVkaWF0ZWx5LCBteSBtaW5kIHN0YXJ0cyByYWNpbmcuIEEgZ2xvYmFsIHZhcmlhYmxlIGluIHRoaXMgY29udGV4dCBpcyByYXJlbHkgYSBnb29kIHRoaW5nLCB1bmxlc3MgaXRzIHVzZSBpcyAqdmVyeSogY2FyZWZ1bGx5IG1hbmFnZWQuIE15IGluaXRpYWwgcmVhY3Rpb24gaXMgYSBtaXggb2YgaW50cmlndWUgYW5kIGNvbmNlcm4uIFxuXG5gaHNyX2ZvcndhcmRfc2tiYCBzdWdnZXN0cyBhIHN0cnVjdHVyZSwgcHJvYmFibHkgYSBgc2tfYnVmZmAsIGlzIGJlaW5nIHVzZWQgdG8gZm9yd2FyZCBwYWNrZXRzIGluIGFuIEhTUiAoSGlnaC1hdmFpbGFiaWxpdHkgU2VhbWxlc3MgUmVkdW5kYW5jeSkgY29udGV4dC4gVGhlIGZhY3QgdGhhdCBpdCdzIGdsb2JhbCBpbXBsaWVzIGl04oCZcyBwcm9iYWJseSBhY2Nlc3NpYmxlIGZyb20gbXVsdGlwbGUgdGhyZWFkcyBvciBpbnRlcnJ1cHQgY29udGV4dHMsIHdoaWNoIHJhaXNlcyBzZXZlcmFsIHJlZCBmbGFncy4gSXMgaXQgYWRlcXVhdGVseSBwcm90ZWN0ZWQ/IEFyZSB0aGVyZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGx1cmtpbmc/XG5cbkkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBpdHMgc2NvcGUuIFdoYXQgbW9kdWxlcyBhY2Nlc3MgdGhpcyB2YXJpYWJsZT8gV2hlcmUgaXMgaXQgZGVmaW5lZCBhbmQgaW5pdGlhbGl6ZWQ/IEhvdyBpcyBpdCBtb2RpZmllZD8gSXMgdGhlcmUgYSBzcGlubG9jaywgbXV0ZXgsIG9yIFJDVSBtZWNoYW5pc20gZW1wbG95ZWQgZm9yIHN5bmNocm9uaXphdGlvbj8gQSBnbG9iYWwgYHNrYmAgcG9pbnRlciBzY3JlYW1zIGZvciBjb25jdXJyZW50IGFjY2VzcyBzY3J1dGlueS5cblxuVGhlIHVzZSBvZiBhIGdsb2JhbCBgc2tiYCBpcyBhbHNvIGEgYml0IHVudXN1YWwuIFVzdWFsbHksIHdlJ2QgcGFzcyB0aGUgYHNrX2J1ZmZgIGFyb3VuZCBmdW5jdGlvbiBhcmd1bWVudHMuIFBlcmhhcHMgaXTigJlzIGEgdGVtcG9yYXJ5IGJ1ZmZlciBmb3IgcmUtZW5jYXBzdWxhdGlvbiBvciBmcmFtZSBjb25zdHJ1Y3Rpb24gaW4gdGhlIEhTUiBwYXRoLiBJJ20gd29uZGVyaW5nIGlmIGl0J3MgYmVpbmcgdXNlZCBmb3IgaW50ZXItQ1BVIGNvbW11bmljYXRpb24sIG9yIGlmIHRoZSBmdW5jdGlvbiBpcyBqdXN0IHNoYXJpbmcgYSBidWZmZXIuXG5cbkkgbmVlZCB0byBkaXZlIGRlZXBlciBpbnRvIHRoZSBjb2RlIHVzaW5nIHRoaXMgdmFyaWFibGUsIEkgbmVlZCB0byBrbm93IGV4YWN0bHkgaG93IGl0IGlzIHVzZWQuIEkgYW0gbW9zdCBpbnRlcmVzdGVkIGluIGhvdyB0aGUgdmFyaWFibGUgaXMgc2hhcmVkIGFuZCBhY2Nlc3NlZCwgaXQgYWxsIGhpbmdlcyBvbiBjb3JyZWN0IHN5bmNocm9uaXphdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTU5OCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAwOjU4OjI4LjE0OTQxMTkzMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM4MDYxMjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHNyX2ZvcndhcmRfc2tiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9oc3IvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9oc3IvaHNyX2RldmljZS5jPTIyND1zdGF0aWMgbmV0ZGV2X3R4X3QgaHNyX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy0yMzUtXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbm5ldC9oc3IvaHNyX2RldmljZS5jOjIzNjpcXHRcXHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBtYXN0ZXIpO1xcbm5ldC9oc3IvaHNyX2RldmljZS5jLTIzNy1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4tLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jPTI5Mz1zdGF0aWMgdm9pZCBzZW5kX2hzcl9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQsXFxuLS1cXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy0zNjMtXFxubmV0L2hzci9oc3JfZGV2aWNlLmM6MzY0OlxcdGhzcl9mb3J3YXJkX3NrYihza2IsIHBvcnQpO1xcbm5ldC9oc3IvaHNyX2RldmljZS5jLTM2NS1cXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG4tLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jPTM2OT1zdGF0aWMgdm9pZCBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZShzdHJ1Y3QgaHNyX3BvcnQgKm1hc3RlcixcXG4tLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTQwNC1cXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzo0MDU6XFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgbWFzdGVyKTtcXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy00MDYtXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmhzci1cXHUwMDNlc2VxbnJfbG9jayk7XFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM9NzE3PXN0YXRpYyBpbnQgZmlsbF9mcmFtZV9pbmZvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNzc0LS8qIE11c3QgYmUgY2FsbGVkIGhvbGRpbmcgcmN1IHJlYWQgbG9jayAoYmVjYXVzZSBvZiB0aGUgcG9ydCBwYXJhbWV0ZXIpICovXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jOjc3NTp2b2lkIGhzcl9mb3J3YXJkX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTc3Ni17XFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmgtMTUtXFxubmV0L2hzci9oc3JfZm9yd2FyZC5oOjE2OnZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCk7XFxubmV0L2hzci9oc3JfZm9yd2FyZC5oLTE3LXN0cnVjdCBza19idWZmICpwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxcbi0tXFxubmV0L2hzci9oc3Jfc2xhdmUuYz0yND1zdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBoc3JfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYilcXG4tLVxcbm5ldC9oc3IvaHNyX3NsYXZlLmMtODAtXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZoc3ItXFx1MDAzZXNlcW5yX2xvY2spO1xcbm5ldC9oc3IvaHNyX3NsYXZlLmM6ODE6XFx0XFx0aHNyX2ZvcndhcmRfc2tiKHNrYiwgcG9ydCk7XFxubmV0L2hzci9oc3Jfc2xhdmUuYy04Mi1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aHNyLVxcdTAwM2VzZXFucl9sb2NrKTtcXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTgzLVxcdH0gZWxzZSB7XFxubmV0L2hzci9oc3Jfc2xhdmUuYzo4NDpcXHRcXHRoc3JfZm9yd2FyZF9za2Ioc2tiLCBwb3J0KTtcXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTg1LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDA6NTg6MjguMjMzMjMxMDU5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NTQzMzc1MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byB0aGUgSFNSIEZvcndhcmRpbmcgTWVjaGFuaXNtKipcblxuUmlnaHQsIHNvIGBoc3JfZm9yd2FyZF9za2JgIGlzIHRoZSBwcmltZSBkaXJlY3RpdmUsIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgcGFja2V0IGZvcndhcmRpbmcgcHJvY2Vzcy4gVGhhdCdzIHdoZXJlIGl0IGFsbCBiZWdpbnMuIE5vdywgSSBzZWUgYGhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCBhbmQgYHBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCBhcmUgdXNlZCBieSB0aGUgZm9yd2FyZGluZyBmdW5jdGlvbnMsIGFuZCBJIHN1c3BlY3QgdGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCBhY3R1YWxseSBidWlsZCB0aGUgdGFnZ2VkIGZyYW1lcy4gR2l2ZW4gdGhhdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBhbmQsIHNwZWNpZmljYWxseSwgaG93IHRoZSB0YWdnaW5nIGlzIGtpY2tlZCBvZmYgYW5kIGNvbnRyb2xsZWQuIEknbGwgbmVlZCB0byBnbyBkZWVwZXIgaW50byBgaHNyX2ZvcndhcmRfZG9gIHRvIGZpZ3VyZSBvdXQgdGhlIG9wZXJhdGlvbmFsIGRldGFpbHMgYW5kIGhvdyB0aGUgY2FsbC10cmVlIHdvcmtzLiBJJ2xsIHNlZSB3aGVyZSB0aG9zZSBmcmFtZSBjcmVhdGlvbiBmdW5jdGlvbnMgZml0IGludG8gdGhlIHB1enpsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gc2VlICpob3cqIHRoZXkncmUgY2FsbGVkIGZyb20gd2l0aGluIGBoc3JfZm9yd2FyZF9kb2AsIGxpa2VseSB0aHJvdWdoIHNvbWUgc29ydCBvZiBmdW5jdGlvbiBwb2ludGVyIG9yIG9wZXJhdGlvbiBzdHJ1Y3R1cmUuIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4NDIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwMDo1ODozMi42ODc1NzIwMDJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MzA0ODg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNyZWF0ZV90YWdnZWRfZnJhbWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2hzci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2hzci9oc3JfZGV2aWNlLmM9NjIxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaHNyX3Byb3RvX29wcyBoc3Jfb3BzID0ge1xcbm5ldC9oc3IvaHNyX2RldmljZS5jLTYyMi1cXHQuc2VuZF9zdl9mcmFtZSA9IHNlbmRfaHNyX3N1cGVydmlzaW9uX2ZyYW1lLFxcbm5ldC9oc3IvaHNyX2RldmljZS5jOjYyMzpcXHQuY3JlYXRlX3RhZ2dlZF9mcmFtZSA9IGhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lLFxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTYyNC1cXHQuZ2V0X3VudGFnZ2VkX2ZyYW1lID0gaHNyX2dldF91bnRhZ2dlZF9mcmFtZSxcXG4tLVxcbm5ldC9oc3IvaHNyX2RldmljZS5jPTYzMT1zdGF0aWMgY29uc3Qgc3RydWN0IGhzcl9wcm90b19vcHMgcHJwX29wcyA9IHtcXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy02MzItXFx0LnNlbmRfc3ZfZnJhbWUgPSBzZW5kX3BycF9zdXBlcnZpc2lvbl9mcmFtZSxcXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzo2MzM6XFx0LmNyZWF0ZV90YWdnZWRfZnJhbWUgPSBwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZSxcXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy02MzQtXFx0LmdldF91bnRhZ2dlZF9mcmFtZSA9IHBycF9nZXRfdW50YWdnZWRfZnJhbWUsXFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM9Mjg4PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqaHNyX2ZpbGxfdGFnKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtMzMwLSAqL1xcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzozMzE6c3RydWN0IHNrX2J1ZmYgKmhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTMzMi1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtMzg1LVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzozODY6c3RydWN0IHNrX2J1ZmYgKnBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUsXFxubmV0L2hzci9oc3JfZm9yd2FyZC5jLTM4Ny1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpXFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmM9NTYwPXN0YXRpYyB2b2lkIGhzcl9mb3J3YXJkX2RvKHN0cnVjdCBoc3JfZnJhbWVfaW5mbyAqZnJhbWUpXFxuLS1cXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmMtNjA4LVxcdFxcdCAgICBwb3J0LVxcdTAwM2V0eXBlID09IEhTUl9QVF9TTEFWRV9CKVxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYzo2MDk6XFx0XFx0XFx0c2tiID0gaHNyLVxcdTAwM2Vwcm90b19vcHMtXFx1MDAzZWNyZWF0ZV90YWdnZWRfZnJhbWUoZnJhbWUsIHBvcnQpO1xcbm5ldC9oc3IvaHNyX2ZvcndhcmQuYy02MTAtXFx0XFx0ZWxzZVxcbi0tXFxubmV0L2hzci9oc3JfZm9yd2FyZC5oPTE2PXZvaWQgaHNyX2ZvcndhcmRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoc3JfcG9ydCAqcG9ydCk7XFxubmV0L2hzci9oc3JfZm9yd2FyZC5oOjE3OnN0cnVjdCBza19idWZmICpwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxcbm5ldC9oc3IvaHNyX2ZvcndhcmQuaC0xOC1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaHNyX3BvcnQgKnBvcnQpO1xcbm5ldC9oc3IvaHNyX2ZvcndhcmQuaDoxOTpzdHJ1Y3Qgc2tfYnVmZiAqaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWUoc3RydWN0IGhzcl9mcmFtZV9pbmZvICpmcmFtZSxcXG5uZXQvaHNyL2hzcl9mb3J3YXJkLmgtMjAtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGhzcl9wb3J0ICpwb3J0KTtcXG4tLVxcbm5ldC9oc3IvaHNyX21haW4uaD0xNjQ9c3RydWN0IGhzcl9wcm90b19vcHMge1xcbi0tXFxubmV0L2hzci9oc3JfbWFpbi5oLTE3Mi1cXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGhzcl9wb3J0ICpwb3J0KTtcXG5uZXQvaHNyL2hzcl9tYWluLmg6MTczOlxcdHN0cnVjdCBza19idWZmICogKCpjcmVhdGVfdGFnZ2VkX2ZyYW1lKShzdHJ1Y3QgaHNyX2ZyYW1lX2luZm8gKmZyYW1lLFxcbm5ldC9oc3IvaHNyX21haW4uaC0xNzQtXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGhzcl9wb3J0ICpwb3J0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDA6NTg6MzIuNzQxODgxNDExWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4MzM1MTQ5NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBIU1IgUGF0Y2ggYW5kIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldHMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gaGFuZGVkIHRoaXMgcGF0Y2ggYW5kIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYXR0YWNrIHN1cmZhY2UgYW5kIGhvdyB0byBhcHByb2FjaCBmdXp6aW5nIGl0LiBMZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgYGhzcl9mb3J3YXJkX3NrYmAgaXMgdGhlIGNlbnRyYWwgZnVuY3Rpb24gaGVyZS4gSXQncyB0aGUgcG9pbnQgd2hlcmUgcGFja2V0cyBmcm9tIGJvdGggdGhlIHNsYXZlIGFuZCBtYXN0ZXIgZGV2aWNlcyBjb252ZXJnZS4gYGhzcl9kZXZfeG1pdGAgaXMgdGhlIGBuZG9fc3RhcnRfeG1pdGAgZm9yIHRoZSBtYXN0ZXIsIGFuZCBgaHNyX2hhbmRsZV9mcmFtZWAgaXMgdGhlIGByeF9oYW5kbGVyYCBmb3IgdGhlIHNsYXZlcy4gVGhlc2UgYXJlIGFsbCBsaW5rZWQgdG9nZXRoZXI6IGBoc3JfZm9yd2FyZF9za2JgIGNhbGxzIGBoc3JfZGV2X3htaXRgIGFuZCBgaHNyX2hhbmRsZV9mcmFtZWAgdG8gZm9yd2FyZCBwYWNrZXRzLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIHRvdWNoZXMgYGhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCwgYHBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCwgYW5kIGBoc3JfeG1pdGAsIGFsbCByZWFjaGFibGUgdGhyb3VnaCB0aGUgY29yZSBvZiBgaHNyX2ZvcndhcmRfc2tiYC4gVGhpcyBpcyBhbGwgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBjYW4gc2V0IHVwIGFuIEhTUiBkZXZpY2UgYW5kIHN0YXJ0IHNlbmRpbmcgcGFja2V0cyB0byB0ZXN0IHRoaXMuIFRoZSByZWxldmFudCBjb25maWcgaXMgYENPTkZJR19IU1JgLiBHb29kLCBpdCdzIGEgdHJpc3RhdGUsIGFuZCB0aGF0J3MgdGhlIG9ubHkgb25lIG9mIGludGVyZXN0LCBpdCBzZWVtcy5cblxuV2FpdCwgSSBuZWVkIHRvIGNoZWNrIGBoc3JfeG1pdGAgbW9yZSBjYXJlZnVsbHkuIFRoZXJlJ3MgYSBuZXcgY2hlY2sgaW5zaWRlIGl0LiBTcGVjaWZpY2FsbHksIGluc2lkZSBgaHNyX3htaXRgLCB0aGVyZSdzIGEgbmV3IGNoZWNrIHdoZXJlIGlmIGBwb3J0LVx1MDAzZXR5cGUgPT0gSFNSX1BUX0lOVEVSTElOS2AgYW5kIGEgc2V0IG9mIG90aGVyIGNvbmRpdGlvbnMgYXJlIHRydWUsIHRoZSBwYWNrZXQgaXMgZHJvcHBlZCB3aXRoIGBza2JfY293YC4gVGhpcyBjb3VsZCBiZSBpbnRlcmVzdGluZywgYW5kIGRlZmluaXRlbHkgc29tZXRoaW5nIEkgc2hvdWxkIGZvY3VzIG9uLiBUaGlzIHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gaW50ZXJsaW5rLWJvdW5kIFNLQnMuIFdlIHdhbnQgdG8gdGVzdCB0aGlzIGNvZGVwYXRoLiBcblxuSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucywgcGFydGljdWxhcmx5IHRoZSB2YXJpb3VzIGNhbGxpbmcgcmVsYXRpb25zaGlwcy4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYGhzcl9mb3J3YXJkX3NrYmAgaXMgZXhwb3J0ZWQgb3IgaWYgaXQncyBqdXN0IGdsb2JhbC5cblxuSSB3aWxsIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBwYWNrZXRzIGNhbiB0cmlnZ2VyIHRoYXQgY29kZXBhdGggZm9yIHRoZSBgaHNyX3htaXRgIGNoYW5nZXMgYW5kIGNyYWZ0IGludGVyZXN0aW5nIHRlc3QgY2FzZXMgdG8gZXhwbG9pdCBwb3RlbnRpYWwgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA4OCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwMDo1ODo0Mi41NzUzOTkzNzJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzNzA2MDY5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipoc3JfZm9yd2FyZF9za2JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2hzci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAwOjU4OjQyLjYzOTExNTg0MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDY0OTUxMjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBIU1IgTW9kdWxlIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgSFNSIG1vZHVsZSBhbmQganVzdCB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIGl0cyBpbnRlcm5hbCBzdHJ1Y3R1cmUuIEZyb20gd2hhdCBJIGNhbiBzZWUsIGEgZmV3IHRoaW5ncyBhcmUgaW1tZWRpYXRlbHkgY2xlYXIgYWJvdXQgc2NvcGU6IGBoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZWAgYW5kIGBwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZWAgc2VlbSB0byBiZSBnbG9iYWxseSBhY2Nlc3NpYmxlIHdpdGhpbiB0aGUgbW9kdWxlLCB3aGlsZSB0aGUgb3RoZXIgZnVuY3Rpb25zIG1lbnRpb25lZCBhcmUgc2NvcGVkIHdpdGhpbiB0aGUgbW9kdWxlOiBgaHNyYFxuXG5UaGUgbW9yZSBpbnRlcmVzdGluZyBjYXNlIGludm9sdmVzIGBoc3JfZGV2X3htaXRgIGFuZCBgaHNyX2hhbmRsZV9mcmFtZWAsIGFuZCBzaW5jZSB0aG9zZSBhcmUgc3RhdGljLCB0aGV5IGhhdmUgdG8gYmUgaW1wb3J0YW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24gYXQgdGhlIGVudHJ5IHBvaW50cyBmb3IgdGhlIEhTUiBkcml2ZXIuIFRoZXkgbG9vayBsaWtlIHByaW1lIGNhbmRpZGF0ZXMgZm9yIGRlZXBlciBpbnZlc3RpZ2F0aW9uLlxuXG5BaCwgcmlnaHQsIGBoc3JfZGV2X3htaXRgIGlzIHRoZSBgbmRvX3N0YXJ0X3htaXRgIGZ1bmN0aW9uLCB0aGUgbGlrZWx5IHRyYW5zbWlzc2lvbiBlbnRyeSBwb2ludC4gQW5kIGBoc3JfaGFuZGxlX2ZyYW1lYCBpcyB0aGUgYHJ4X2hhbmRsZXJgLCBzbyB0aGF0J3MgdGhlIHJlY2VpdmUgcGF0aC4gWWVwLCB0aGVzZSBhcmUgZGVmaW5pdGVseSBnb29kIGZvY3VzIHN5bWJvbHMgZm9yIG15IGFuYWx5c2lzLlxuXG5Ob3cgSSBzaG91bGQgcHJvYmFibHkgcXVpY2tseSBjaGVjayBpZiBJJ3ZlIG1pc3NlZCBhbnkgb3RoZXIgZW50cnkgcG9pbnRzLiBHb3R0YSBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzMjUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDA6NTg6NDguMTA0MDcwNjU4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDcxMjEyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoc3JfZGV2X3htaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2hzci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2hzci9oc3JfZGV2aWNlLmM9MjE2PXN0YXRpYyBuZXRkZXZfZmVhdHVyZXNfdCBoc3JfZml4X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy0yMjMtXFxubmV0L2hzci9oc3JfZGV2aWNlLmM6MjI0OnN0YXRpYyBuZXRkZXZfdHhfdCBoc3JfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy0yMjUte1xcbi0tXFxubmV0L2hzci9oc3JfZGV2aWNlLmM9NjA1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaHNyX2RldmljZV9vcHMgPSB7XFxuLS1cXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy02MDgtXFx0Lm5kb19zdG9wID0gaHNyX2Rldl9jbG9zZSxcXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzo2MDk6XFx0Lm5kb19zdGFydF94bWl0ID0gaHNyX2Rldl94bWl0LFxcbm5ldC9oc3IvaHNyX2RldmljZS5jLTYxMC1cXHQubmRvX2NoYW5nZV9yeF9mbGFncyA9IGhzcl9jaGFuZ2VfcnhfZmxhZ3MsXFxuLS1cXG5uZXQvaHNyL2hzcl9kZXZpY2UuYz02NzE9Ym9vbCBpc19oc3JfbWFzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2hzci9oc3JfZGV2aWNlLmMtNjcyLXtcXG5uZXQvaHNyL2hzcl9kZXZpY2UuYzo2NzM6XFx0cmV0dXJuIChkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19zdGFydF94bWl0ID09IGhzcl9kZXZfeG1pdCk7XFxubmV0L2hzci9oc3JfZGV2aWNlLmMtNjc0LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDA6NTg6NDguMTU4NzkxOTQ3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5Mzk0NTU4NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIHRoZSBIU1IgRGV2aWNlIFRyYW5zbWlzc2lvbioqXG5cbkFscmlnaHQsIHNvIGBoc3JfZGV2X3htaXRgLi4uIHllcCwgdGhhdCdzIGl0LiBUaGF0J3MgdGhlIGZ1bmN0aW9uIHRoZSBIU1IgZGV2aWNlIHVzZXMgYXMgaXRzIGBuZG9fc3RhcnRfeG1pdGAuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0IGhhbmRsZXMgaW5kaXZpZHVhbCBmcmFtZXMuIFRvIGRvIHRoYXQsIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IHRoZSBgaHNyX2hhbmRsZV9mcmFtZWAgZnVuY3Rpb24uIEkgd2FudCB0byBzZWUgaG93IHRoZSBkZXZpY2UgcHJvY2Vzc2VzIGFuZCBtYW5hZ2VzIHRoZSBmcmFtZXMuIFRoaXMgd2lsbCByZWFsbHkgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIHRyYW5zbWlzc2lvbiBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxNTQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QwMDo1ODo1Mi4wOTgyNTA2NjdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNjU2MDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhzcl9oYW5kbGVfZnJhbWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2hzci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2hzci9oc3JfZGV2aWNlLmM9NzIwPWludCBoc3JfZGV2X2ZpbmFsaXplKHN0cnVjdCBuZXRfZGV2aWNlICpoc3JfZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVbMl0sXFxuLS1cXG5uZXQvaHNyL2hzcl9kZXZpY2UuYy03NDYtXFxubmV0L2hzci9oc3JfZGV2aWNlLmM6NzQ3OlxcdC8qIE1ha2Ugc3VyZSB3ZSByZWNvZ25pemUgZnJhbWVzIGZyb20gb3Vyc2VsdmVzIGluIGhzcl9oYW5kbGVfZnJhbWUoKSAqL1xcbm5ldC9oc3IvaHNyX2RldmljZS5jLTc0OC1cXHRyZXMgPSBoc3JfY3JlYXRlX3NlbGZfbm9kZShoc3IsIGhzcl9kZXYtXFx1MDAzZWRldl9hZGRyLFxcbi0tXFxubmV0L2hzci9oc3JfZnJhbWVyZWcuYz02Nj1ib29sIGhzcl9pc19ub2RlX2luX2RiKHN0cnVjdCBsaXN0X2hlYWQgKm5vZGVfZGIsXFxuLS1cXG5uZXQvaHNyL2hzcl9mcmFtZXJlZy5jLTcxLVxcbm5ldC9oc3IvaHNyX2ZyYW1lcmVnLmM6NzI6LyogSGVscGVyIGZvciBkZXZpY2UgaW5pdDsgdGhlIHNlbGZfbm9kZSBpcyB1c2VkIGluIGhzcl9oYW5kbGVfZnJhbWUoKSB0b1xcbm5ldC9oc3IvaHNyX2ZyYW1lcmVnLmMtNzMtICogcmVjb2duaXplIGZyYW1lcyBmcm9tIHNlbGYgdGhhdCdzIGJlZW4gbG9vcGVkIG92ZXIgdGhlIEhTUiByaW5nLlxcbi0tXFxubmV0L2hzci9oc3JfbWFpbi5jPTMxPXN0YXRpYyBpbnQgaHNyX25ldGRldl9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBldmVudCxcXG4tLVxcbm5ldC9oc3IvaHNyX21haW4uYy05MS1cXG5uZXQvaHNyL2hzcl9tYWluLmM6OTI6XFx0XFx0LyogTWFrZSBzdXJlIHdlIHJlY29nbml6ZSBmcmFtZXMgZnJvbSBvdXJzZWx2ZXMgaW4gaHNyX2hhbmRsZV9mcmFtZSgpICovXFxubmV0L2hzci9oc3JfbWFpbi5jLTkzLVxcdFxcdHBvcnQgPSBoc3JfcG9ydF9nZXRfaHNyKGhzciwgSFNSX1BUX1NMQVZFX0IpO1xcbi0tXFxubmV0L2hzci9oc3Jfc2xhdmUuYz0xOT1ib29sIGhzcl9pbnZhbGlkX2Rhbl9pbmdyZXNzX2ZyYW1lKF9fYmUxNiBwcm90b2NvbClcXG4tLVxcbm5ldC9oc3IvaHNyX3NsYXZlLmMtMjMtXFxubmV0L2hzci9oc3Jfc2xhdmUuYzoyNDpzdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBoc3JfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYilcXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTI1LXtcXG4tLVxcbm5ldC9oc3IvaHNyX3NsYXZlLmM9OTQ9Ym9vbCBoc3JfcG9ydF9leGlzdHMoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvaHNyL2hzcl9zbGF2ZS5jLTk1LXtcXG5uZXQvaHNyL2hzcl9zbGF2ZS5jOjk2OlxcdHJldHVybiByY3VfYWNjZXNzX3BvaW50ZXIoZGV2LVxcdTAwM2VyeF9oYW5kbGVyKSA9PSBoc3JfaGFuZGxlX2ZyYW1lO1xcbm5ldC9oc3IvaHNyX3NsYXZlLmMtOTctfVxcbi0tXFxubmV0L2hzci9oc3Jfc2xhdmUuYz0xNDE9c3RhdGljIGludCBoc3JfcG9ydGRldl9zZXR1cChzdHJ1Y3QgaHNyX3ByaXYgKmhzciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9oc3IvaHNyX3NsYXZlLmMtMTY4LVxcbm5ldC9oc3IvaHNyX3NsYXZlLmM6MTY5OlxcdHJlcyA9IG5ldGRldl9yeF9oYW5kbGVyX3JlZ2lzdGVyKGRldiwgaHNyX2hhbmRsZV9mcmFtZSwgcG9ydCk7XFxubmV0L2hzci9oc3Jfc2xhdmUuYy0xNzAtXFx0aWYgKHJlcylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMDA6NTg6NTIuMTUwOTEwOTU2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4MzgxNDU4MjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgQW5hbHlzaXM6IEhTUiBTaGFyZWQtTXV0YXRpb24gQnVnIEZpeCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCB5ZXMsIGBoc3JfaGFuZGxlX2ZyYW1lYCBpcyB0aGUgcmVjZWl2ZSBoYW5kbGVyIGZvciB0aGUgc2xhdmUgSFNSIGRldmljZXMuIFRoYXQncyBhIGtleSBmdW5jdGlvbi4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgZml4LCBteSBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGVzZSBzeW1ib2xzOiBgaHNyX2Rldl94bWl0YCwgYGhzcl9oYW5kbGVfZnJhbWVgLCBgaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWVgLCBgcHJwX2NyZWF0ZV90YWdnZWRfZnJhbWVgLCBhbmQgYGhzcl9mb3J3YXJkX3NrYmAuIFRoZXNlIGZ1bmN0aW9ucyBzZWVtIGNlbnRyYWwgdG8gdGhlIHByb2JsZW0uXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24uIEl0IGxvb2tzIGxpa2UgaXQganVzdCByZXF1aXJlcyBgSFNSYC4gR29vZC4gSSdsbCBtYWtlIHN1cmUgdG8gbm90ZSB0aGF0LlxuXG5BaGEhIFRoZXJlJ3MgYWxzbyBhIG1vZGlmaWNhdGlvbiB0byBhIHNlbGZ0ZXN0IHNjcmlwdCAoYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9oc3IvaHNyX3NoYXJlZF9tdXRhdGlvbi5zaGApLiBUaGF0J3Mgbm90IHRoZSB0YXJnZXQuIFdoaWxlIGl0J3MgZ29vZCB0aGUgc2VsZiB0ZXN0IGlzIGluY2x1ZGVkIGl0IGRvZXMgbm90IG5lZWQgdG8gYmUgZnV6emVkLiBUaGUgcmVhbCBrZXJuZWwgY2hhbmdlcyBhcmUgaW4gYG5ldC9oc3IvaHNyX2ZvcndhcmQuY2AsIGFuZCB0aG9zZSBhcmUgd2hhdCBJJ20gaW50ZXJlc3RlZCBpbiBmdXp6aW5nLlxuXG5Ob3csIGxldCdzIHRoaW5rIGFib3V0ICp3aHkqIHRoaXMgaXMgZnV6emFibGUuIFRoZSBwYXRjaCBhZGRyZXNzZXMgYSBzaGFyZWQtbXV0YXRpb24gYnVnIGluIEhTUi9QUlAgd2hlcmUgY2xvbmVkIGBza2JgcyB3ZXJlIGJlaW5nIGRpcmVjdGx5IG1vZGlmaWVkIHdpdGhvdXQgcHJvcGVyIGNvcHktb24td3JpdGUgbWVjaGFuaXNtcyAoYHNrYl9jb3dgIG9yIGBza2JfY29weWApLiBUaGlzIHdvdWxkIGNvcnJ1cHQgdGhlIG9yaWdpbmFsIHNoYXJlZCBkYXRhLiBUaGUgZml4IGludm9sdmVzIGFkZGluZyBgc2tiX2Nvdyhza2IsIDApYCBiZWZvcmUgbW9kaWZ5aW5nIHRoZSBjbG9uZWQgYHNrYmAgaW4gZnVuY3Rpb25zIGxpa2UgYGhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCwgYHBycF9jcmVhdGVfdGFnZ2VkX2ZyYW1lYCwgYW5kIGBoc3JfeG1pdGAuIFRoZXNlIGZ1bmN0aW9ucywgY3J1Y2lhbGx5LCBhcmUgcmVhY2hhYmxlIGZyb20gYGhzcl9mb3J3YXJkX3NrYmAsIHdoaWNoIGluIHR1cm4gaXMgcmVhY2hhYmxlIHRocm91Z2ggYGhzcl9kZXZfeG1pdGAgYW5kIGBoc3JfaGFuZGxlX2ZyYW1lYC4gSSBjYW4gZGVmaW5pdGVseSBzZWUgdGhpcyBiZWluZyB0cmlnZ2VyZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gU2V0dGluZyB1cCBhbiBIU1IgZGV2aWNlIGFuZCBzZW5kaW5nIHBhY2tldHMgdGhyb3VnaCBpdCBzZWVtcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIHdheSB0byB0ZXN0IHRoaXMuXG5cbkFscmlnaHQsIGxldCdzIGRvY3VtZW50IG15IGZpbmRpbmdzIGNvbmNpc2VseTpcblxuKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWVcbiogICAqKkZvY3VzU3ltYm9sczoqKiBgaHNyX2Rldl94bWl0YCwgYGhzcl9oYW5kbGVfZnJhbWVgLCBgaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWVgLCBgcHJwX2NyZWF0ZV90YWdnZWRfZnJhbWVgLCBgaHNyX2ZvcndhcmRfc2tiYFxuKiAgICoqRW5hYmxlQ29uZmlnczoqKiBgSFNSYFxuKiAgICoqUmVhc29uaW5nOioqIFRoZSBwYXRjaCBhZGRzIGBza2JfY293YCBiZWZvcmUgbXV0YXRpbmcgY2xvbmVkIHNrYnMgdG8gZml4IGEgc2hhcmVkLW11dGF0aW9uIGJ1ZyBpbiBIU1IvUFJQLiBDb3JlIHBhY2tldCBmb3J3YXJkaW5nIGZ1bmN0aW9ucyBpbiBIU1IgZHJpdmVyIHJlYWNoYWJsZSB2aWEgYGhzcl9kZXZfeG1pdGAgKG1hc3RlciBUWCkgYW5kIGBoc3JfaGFuZGxlX2ZyYW1lYCAoc2xhdmUgUlgpLiBGdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxMDYsIk91dHB1dFRva2VucyI6MTk2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDAwOjU5OjEwLjUzMjM3MTM1N1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzY0MTQ2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFNSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHNyX2Rldl94bWl0XCIsXG4gICAgXCJoc3JfaGFuZGxlX2ZyYW1lXCIsXG4gICAgXCJoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZVwiLFxuICAgIFwicHJwX2NyZWF0ZV90YWdnZWRfZnJhbWVcIixcbiAgICBcImhzcl9mb3J3YXJkX3NrYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgc2hhcmVkLW11dGF0aW9uIGJ1ZyBpbiBIU1IvUFJQIGJ5IGFkZGluZyBgc2tiX2Nvd2AgYmVmb3JlIG1vZGlmeWluZyBjbG9uZWQgc2ticyBpbiBgaHNyX2NyZWF0ZV90YWdnZWRfZnJhbWVgLCBgcHJwX2NyZWF0ZV90YWdnZWRfZnJhbWVgLCBhbmQgYGhzcl94bWl0YC4gVGhlc2UgYXJlIGNvcmUgcGFja2V0IGZvcndhcmRpbmcgZnVuY3Rpb25zIGluIHRoZSBIU1IgZHJpdmVyLCByZWFjaGFibGUgdmlhIGBoc3JfZGV2X3htaXRgIChtYXN0ZXIgZGV2aWNlIFRYKSBhbmQgYGhzcl9oYW5kbGVfZnJhbWVgIChzbGF2ZSBkZXZpY2UgUlgpLiBUaGUgY29kZSBpcyBmdWxseSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIU1JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoc3JfZGV2X3htaXRcIixcbiAgICBcImhzcl9oYW5kbGVfZnJhbWVcIixcbiAgICBcImhzcl9jcmVhdGVfdGFnZ2VkX2ZyYW1lXCIsXG4gICAgXCJwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZVwiLFxuICAgIFwiaHNyX2ZvcndhcmRfc2tiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBzaGFyZWQtbXV0YXRpb24gYnVnIGluIEhTUi9QUlAgYnkgYWRkaW5nIGBza2JfY293YCBiZWZvcmUgbW9kaWZ5aW5nIGNsb25lZCBza2JzIGluIGBoc3JfY3JlYXRlX3RhZ2dlZF9mcmFtZWAsIGBwcnBfY3JlYXRlX3RhZ2dlZF9mcmFtZWAsIGFuZCBgaHNyX3htaXRgLiBUaGVzZSBhcmUgY29yZSBwYWNrZXQgZm9yd2FyZGluZyBmdW5jdGlvbnMgaW4gdGhlIEhTUiBkcml2ZXIsIHJlYWNoYWJsZSB2aWEgYGhzcl9kZXZfeG1pdGAgKG1hc3RlciBkZXZpY2UgVFgpIGFuZCBgaHNyX2hhbmRsZV9mcmFtZWAgKHNsYXZlIGRldmljZSBSWCkuIFRoZSBjb2RlIGlzIGZ1bGx5IGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow42hb5[1] Phase: Succeeded StartedAt: 2026-08-03 00:59:22 +0000 UTC FinishedAt: 2026-08-03 00:59:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42hb5[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-03 00:59:22 +0000 UTC FinishedAt: 2026-08-03 00:59:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42hb5[2] Phase: Succeeded StartedAt: 2026-08-03 00:59:22 +0000 UTC FinishedAt: 2026-08-03 04:44:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42hb5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_dev_xmit","hsr_handle_frame","hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3611eda0-17ee-45db-a836-d14851ee2904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-03 00:59:22 +0000 UTC FinishedAt: 2026-08-03 04:44:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_dev_xmit","hsr_handle_frame","hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3611eda0-17ee-45db-a836-d14851ee2904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow42hb5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_dev_xmit","hsr_handle_frame","hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3611eda0-17ee-45db-a836-d14851ee2904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-03 00:59:22 +0000 UTC FinishedAt: 2026-08-03 00:59:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42hb5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_dev_xmit","hsr_handle_frame","hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3611eda0-17ee-45db-a836-d14851ee2904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-03 00:59:22 +0000 UTC FinishedAt: 2026-08-03 00:59:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow42hb5/series-workflow42hb5-convert-artifact-4142317417/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow42hb5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_dev_xmit","hsr_handle_frame","hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3611eda0-17ee-45db-a836-d14851ee2904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-03 00:59:32 +0000 UTC FinishedAt: 2026-08-03 01:17:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42hb5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_dev_xmit","hsr_handle_frame","hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3611eda0-17ee-45db-a836-d14851ee2904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-03 00:59:32 +0000 UTC FinishedAt: 2026-08-03 01:17:58 +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:*1271f168-53eb-46ae-9b52-aac7a3ea60d1,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-workflow42hb5/series-workflow42hb5-convert-artifact-4142317417/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": "1ee087e1-63b4-49bf-9fd7-bcce61d07c50", "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-workflow42hb5/series-workflow42hb5-build-action-2546635463/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow42hb5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_dev_xmit","hsr_handle_frame","hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3611eda0-17ee-45db-a836-d14851ee2904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-03 00:59:32 +0000 UTC FinishedAt: 2026-08-03 01:17:48 +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:*1271f168-53eb-46ae-9b52-aac7a3ea60d1,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-workflow42hb5/series-workflow42hb5-convert-artifact-4142317417/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": "1ee087e1-63b4-49bf-9fd7-bcce61d07c50", "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-workflow42hb5/series-workflow42hb5-build-action-2546635463/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow42hb5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_dev_xmit","hsr_handle_frame","hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3611eda0-17ee-45db-a836-d14851ee2904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-03 01:17:58 +0000 UTC FinishedAt: 2026-08-03 01:17:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42hb5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_dev_xmit","hsr_handle_frame","hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3611eda0-17ee-45db-a836-d14851ee2904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-03 01:17:58 +0000 UTC FinishedAt: 2026-08-03 01:17:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42hb5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_dev_xmit","hsr_handle_frame","hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3611eda0-17ee-45db-a836-d14851ee2904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-03 01:17:58 +0000 UTC FinishedAt: 2026-08-03 01:18:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42hb5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_dev_xmit","hsr_handle_frame","hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3611eda0-17ee-45db-a836-d14851ee2904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-03 01:17:58 +0000 UTC FinishedAt: 2026-08-03 01:18:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3611eda0-17ee-45db-a836-d14851ee2904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow42hb5/series-workflow42hb5-convert-artifact-2434513660/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow42hb5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_dev_xmit","hsr_handle_frame","hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3611eda0-17ee-45db-a836-d14851ee2904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-03 01:18:08 +0000 UTC FinishedAt: 2026-08-03 01:20:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42hb5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_dev_xmit","hsr_handle_frame","hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3611eda0-17ee-45db-a836-d14851ee2904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-03 01:18:08 +0000 UTC FinishedAt: 2026-08-03 01:20:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1ee087e1-63b4-49bf-9fd7-bcce61d07c50,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-workflow42hb5/series-workflow42hb5-build-action-2546635463/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-workflow42hb5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_dev_xmit","hsr_handle_frame","hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3611eda0-17ee-45db-a836-d14851ee2904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-03 01:20:11 +0000 UTC FinishedAt: 2026-08-03 01:20:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42hb5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_dev_xmit","hsr_handle_frame","hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3611eda0-17ee-45db-a836-d14851ee2904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-03 01:20:11 +0000 UTC FinishedAt: 2026-08-03 01:20:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42hb5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_dev_xmit","hsr_handle_frame","hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3611eda0-17ee-45db-a836-d14851ee2904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-03 01:20:11 +0000 UTC FinishedAt: 2026-08-03 01:39:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42hb5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_dev_xmit","hsr_handle_frame","hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3611eda0-17ee-45db-a836-d14851ee2904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-03 01:20:11 +0000 UTC FinishedAt: 2026-08-03 01:39:36 +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:*1271f168-53eb-46ae-9b52-aac7a3ea60d1,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-workflow42hb5/series-workflow42hb5-convert-artifact-2434513660/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": "42f510d5-e7da-4526-bd46-09ca5e00d9a6", "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-workflow42hb5/series-workflow42hb5-build-action-3743561560/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow42hb5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_dev_xmit","hsr_handle_frame","hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3611eda0-17ee-45db-a836-d14851ee2904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-03 01:20:11 +0000 UTC FinishedAt: 2026-08-03 01:39:26 +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:*1271f168-53eb-46ae-9b52-aac7a3ea60d1,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-workflow42hb5/series-workflow42hb5-convert-artifact-2434513660/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": "42f510d5-e7da-4526-bd46-09ca5e00d9a6", "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-workflow42hb5/series-workflow42hb5-build-action-3743561560/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow42hb5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_dev_xmit","hsr_handle_frame","hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3611eda0-17ee-45db-a836-d14851ee2904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-03 01:39:36 +0000 UTC FinishedAt: 2026-08-03 01:39:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42hb5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_dev_xmit","hsr_handle_frame","hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3611eda0-17ee-45db-a836-d14851ee2904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-03 01:39:36 +0000 UTC FinishedAt: 2026-08-03 01:39:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42hb5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_dev_xmit","hsr_handle_frame","hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3611eda0-17ee-45db-a836-d14851ee2904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-03 01:39:36 +0000 UTC FinishedAt: 2026-08-03 01:41:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42hb5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_dev_xmit","hsr_handle_frame","hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3611eda0-17ee-45db-a836-d14851ee2904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-03 01:39:36 +0000 UTC FinishedAt: 2026-08-03 01:41:16 +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:*42f510d5-e7da-4526-bd46-09ca5e00d9a6,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-workflow42hb5/series-workflow42hb5-build-action-3743561560/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-workflow42hb5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_dev_xmit","hsr_handle_frame","hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3611eda0-17ee-45db-a836-d14851ee2904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-03 01:41:25 +0000 UTC FinishedAt: 2026-08-03 04:44:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42hb5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_dev_xmit","hsr_handle_frame","hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3611eda0-17ee-45db-a836-d14851ee2904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-03 01:41:25 +0000 UTC FinishedAt: 2026-08-03 04:44:13 +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":["hsr_dev_xmit","hsr_handle_frame","hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"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:*1ee087e1-63b4-49bf-9fd7-bcce61d07c50,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*42f510d5-e7da-4526-bd46-09ca5e00d9a6,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-workflow42hb5/series-workflow42hb5-build-action-2546635463/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-workflow42hb5/series-workflow42hb5-build-action-3743561560/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow42hb5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_dev_xmit","hsr_handle_frame","hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3611eda0-17ee-45db-a836-d14851ee2904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-03 01:41:25 +0000 UTC FinishedAt: 2026-08-03 01:41:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42hb5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_dev_xmit","hsr_handle_frame","hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3611eda0-17ee-45db-a836-d14851ee2904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-03 01:41:25 +0000 UTC FinishedAt: 2026-08-03 01:41:30 +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":["hsr_dev_xmit","hsr_handle_frame","hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"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-workflow42hb5/series-workflow42hb5-convert-artifact-3350514629/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow42hb5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_dev_xmit","hsr_handle_frame","hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3611eda0-17ee-45db-a836-d14851ee2904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-03 01:41:25 +0000 UTC FinishedAt: 2026-08-03 01:41:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42hb5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_dev_xmit","hsr_handle_frame","hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3611eda0-17ee-45db-a836-d14851ee2904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-03 01:41:25 +0000 UTC FinishedAt: 2026-08-03 01:41:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42hb5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_dev_xmit","hsr_handle_frame","hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3611eda0-17ee-45db-a836-d14851ee2904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-03 01:41:26 +0000 UTC FinishedAt: 2026-08-03 01:41:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42hb5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_dev_xmit","hsr_handle_frame","hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3611eda0-17ee-45db-a836-d14851ee2904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-03 01:41:36 +0000 UTC FinishedAt: 2026-08-03 04:44:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42hb5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hsr_dev_xmit","hsr_handle_frame","hsr_create_tagged_frame","prp_create_tagged_frame","hsr_forward_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["HSR"],"series_id":"3611eda0-17ee-45db-a836-d14851ee2904","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-03 01:41:36 +0000 UTC FinishedAt: 2026-08-03 04:44:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1ee087e1-63b4-49bf-9fd7-bcce61d07c50,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*42f510d5-e7da-4526-bd46-09ca5e00d9a6,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-workflow42hb5/series-workflow42hb5-build-action-2546635463/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-workflow42hb5/series-workflow42hb5-build-action-3743561560/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-workflow42hb5/series-workflow42hb5-convert-artifact-3350514629/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,}