Name: series-workflowgbz7c Phase: Succeeded StartedAt: 2026-09-05 23:52:17 +0000 UTC FinishedAt: 2026-09-06 03:52:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgbz7c[0] Phase: Succeeded StartedAt: 2026-09-05 23:52:17 +0000 UTC FinishedAt: 2026-09-06 00:09:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgbz7c[0].run-triage Phase: Succeeded StartedAt: 2026-09-05 23:52:17 +0000 UTC FinishedAt: 2026-09-06 00:09:17 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "8ab1afb2eb246ab15b301cd255b5943d208a93c1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "NET_DEVMEM", "DMA_SHARED_BUFFER", "PAGE_POOL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "8ab1afb2eb246ab15b301cd255b5943d208a93c1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "NET_DEVMEM", "DMA_SHARED_BUFFER", "PAGE_POOL" ], "series_id": "f0e780a4-70c5-478e-b5ab-801e596a21a0" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tcp_sendmsg_locked", "tcp_sendmsg", "net_devmem_get_binding" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7TkVUX0RFVk1FTSYjMzQ7LAogICAgJiMzNDtETUFfU0hBUkVEX0JVRkZFUiYjMzQ7LAogICAgJiMzNDtQQUdFX1BPT0wmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3Bfc2VuZG1zZ19sb2NrZWQmIzM0OywKICAgICYjMzQ7dGNwX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7bmV0X2Rldm1lbV9nZXRfYmluZGluZyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHRpZ2h0ZW5zIGVycm9yIHZhbGlkYXRpb24gaW4gYHRjcF9zZW5kbXNnX2xvY2tlZCgpYCB3aGVuIGBzb2NrYy5kbWFidWZfaWRgIGlzIHN1cHBsaWVkLCBlbnN1cmluZyB0aGF0IGRldm1lbSB0cmFuc21pc3Npb24gaXMgb25seSBwZXJtaXR0ZWQgd2hlbiB6ZXJvLWNvcHkgaXMgYWN0aXZlIChgemMgPT0gTVNHX1pFUk9DT1BZYCkgYW5kIGEgdmFsaWQgZGV2bWVtIGJpbmRpbmcgZXhpc3RzIChgYmluZGluZyAhPSBOVUxMYCkuIEFsbCB2YXJpYWJsZXMgZXZhbHVhdGVkIGluIHRoaXMgY29uZGl0aW9uIChgc29ja2NfZXJyYCwgYHNvY2tjYCwgYHpjYCwgYW5kIGBiaW5kaW5nYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgc3RhY2sgdmFyaWFibGVzLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IG9yIHBhZGRpbmcgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBib3VuZHMgb3IgbWVtb3J5IGNvcHlpbmcgbG9naWMgaW4gYSBtYW5uZXIgdGhhdCBjb3VsZCBjYXVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gaW52YWxpZCBwb2ludGVycyBvciBzdGF0ZSBpbnZhcmlhbnRzIGFyZSBhZGRyZXNzYWJsZSBieSBzdGFuZGFyZCBkZXRlY3RvcnMgLyBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB2YWxpZGF0aW9uIGxvZ2ljIGluIHRjcF9zZW5kbXNnX2xvY2tlZCgpIHdoZW4gcHJvY2Vzc2luZyBUQ1AgemVyby1jb3B5IG1lc3NhZ2VzIHdpdGggZGV2aWNlIG1lbW9yeSBkbWFidWYgSURzIChTQ01fREVWTUVNX0RNQUJVRikuIEl0IGVuc3VyZXMgdGhhdCB0cmFuc21pc3Npb25zIHdpdGggZG1hYnVmX2lkIGZhaWwgd2l0aCAtRUlOVkFMIHVubGVzcyB6ZXJvY29weSBpcyBhY3R1YWxseSBlbmFibGVkICh6YyA9PSBNU0dfWkVST0NPUFkpIGFuZCBhIHZhbGlkIGRldm1lbSBiaW5kaW5nIGV4aXN0cy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBUQ1Agc29ja2V0IHRyYW5zbWl0IHBhdGhzIHRoYXQgY2FuIGJlIHRlc3RlZCB1c2luZyBzdGFuZGFyZCBzb2NrZXQgc3lzY2FsbHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwYjJmMjJjNzI2OTYwM2Y4MzY1ZTE2ZDQyYTI5NGYwZTg2YWIzMTFhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAwMDowNzo0NyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jXG5pbmRleCBiNDIzN2QwZTk5NGQ2Li4xMGY1ODI4MWJlMTdiIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcC5jXG5AQCAtMTE2OSw4ICYjNDM7MTE2OSw3IEBAIGludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuIFx0XHRcdHpjID0gTVNHX1NQTElDRV9QQUdFUztcbiBcdH1cbiBcbi1cdGlmICghc29ja2NfZXJyIFx1MDAyNlx1MDAyNiBzb2NrYy5kbWFidWZfaWQgXHUwMDI2XHUwMDI2XG4tXHQgICAgKCEoZmxhZ3MgXHUwMDI2IE1TR19aRVJPQ09QWSkgfHwgIXNvY2tfZmxhZyhzaywgU09DS19aRVJPQ09QWSkpKSB7XG4mIzQzO1x0aWYgKCFzb2NrY19lcnIgXHUwMDI2XHUwMDI2IHNvY2tjLmRtYWJ1Zl9pZCBcdTAwMjZcdTAwMjYgKHpjICE9IE1TR19aRVJPQ09QWSB8fCAhYmluZGluZykpIHtcbiBcdFx0ZXJyID0gLUVJTlZBTDtcbiBcdFx0Z290byBvdXRfZXJyO1xuIFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjA3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7TkVUX0RFVk1FTSYjMzQ7LAogICAgJiMzNDtETUFfU0hBUkVEX0JVRkZFUiYjMzQ7LAogICAgJiMzNDtQQUdFX1BPT0wmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3Bfc2VuZG1zZ19sb2NrZWQmIzM0OywKICAgICYjMzQ7dGNwX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7bmV0X2Rldm1lbV9nZXRfYmluZGluZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB2YWxpZGF0aW9uIGxvZ2ljIGluIHRjcF9zZW5kbXNnX2xvY2tlZCgpIHdoZW4gcHJvY2Vzc2luZyBUQ1AgemVyby1jb3B5IG1lc3NhZ2VzIHdpdGggZGV2aWNlIG1lbW9yeSBkbWFidWYgSURzIChTQ01fREVWTUVNX0RNQUJVRikuIEl0IGVuc3VyZXMgdGhhdCB0cmFuc21pc3Npb25zIHdpdGggZG1hYnVmX2lkIGZhaWwgd2l0aCAtRUlOVkFMIHVubGVzcyB6ZXJvY29weSBpcyBhY3R1YWxseSBlbmFibGVkICh6YyA9PSBNU0dfWkVST0NPUFkpIGFuZCBhIHZhbGlkIGRldm1lbSBiaW5kaW5nIGV4aXN0cy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBUQ1Agc29ja2V0IHRyYW5zbWl0IHBhdGhzIHRoYXQgY2FuIGJlIHRlc3RlZCB1c2luZyBzdGFuZGFyZCBzb2NrZXQgc3lzY2FsbHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwYjJmMjJjNzI2OTYwM2Y4MzY1ZTE2ZDQyYTI5NGYwZTg2YWIzMTFhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgNiAwMDowNzo0NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmMKaW5kZXggYjQyMzdkMGU5OTRkNi4uMTBmNTgyODFiZTE3YiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwLmMKQEAgLTExNjksOCAmIzQzOzExNjksNyBAQCBpbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSkKIAkJCXpjID0gTVNHX1NQTElDRV9QQUdFUzsKIAl9CiAKLQlpZiAoIXNvY2tjX2VyciAmYW1wOyZhbXA7IHNvY2tjLmRtYWJ1Zl9pZCAmYW1wOyZhbXA7Ci0JICAgICghKGZsYWdzICZhbXA7IE1TR19aRVJPQ09QWSkgfHwgIXNvY2tfZmxhZyhzaywgU09DS19aRVJPQ09QWSkpKSB7CiYjNDM7CWlmICghc29ja2NfZXJyICZhbXA7JmFtcDsgc29ja2MuZG1hYnVmX2lkICZhbXA7JmFtcDsgKHpjICE9IE1TR19aRVJPQ09QWSB8fCAhYmluZGluZykpIHsKIAkJZXJyID0gLUVJTlZBTDsKIAkJZ290byBvdXRfZXJyOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkwNQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb24sIHByZXNlbnRlZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydDoKCioqRGl2aW5nIGludG8gdGhlIFRDUCBDb2RlKioKCk9rYXksIHNvIHdlIGhhdmUgYSBwYXRjaCB0byByZXZpZXcsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIGBuZXQvaXB2NC90Y3AuY2AgZmlsZSBhbmQsIG1vcmUgcHJlY2lzZWx5LCB0aGUgYHRjcF9zZW5kbXNnX2xvY2tlZGAgZnVuY3Rpb24uIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHRoZSAqY29udGV4dCogc3Vycm91bmRpbmcgdGhpcyBjaGFuZ2UuIEkmIzM5O20gZ29pbmcgdG8gbGV2ZXJhZ2UgbXkgZXN0YWJsaXNoZWQgdG9vbGtpdC4gSSYjMzk7bGwgcmVhY2ggZm9yIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCwgZGVwZW5kaW5nIG9uIG15IHByZWZlcmVuY2UsIHRvIHplcm8gaW4gb24gYG5ldC9pcHY0L3RjcC5jYCBhcm91bmQgbGluZSAxMTY5LiBUaGlzIGFwcHJvYWNoIGdpdmVzIG1lIGEgcXVpY2sgd2luZG93IGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGxldHRpbmcgbWUgdW5kZXJzdGFuZCB0aGUgaW1tZWRpYXRlIGRlcGVuZGVuY2llcyBhbmQgcG90ZW50aWFsIGltcGFjdCBvZiB0aGUgcHJvcG9zZWQgY2hhbmdlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgKmJlZm9yZSogdGhhdCBsaW5lLCBhbmQgd2hhdCB0aGUgY29kZSBkb2VzICphZnRlciogdGhlIGxpbmUgaW4gdGhlIHJvdXRpbmUgYHRjcF9zZW5kbXNnX2xvY2tlZGAsIGJlY2F1c2UgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYWx3YXlzIHByb3ZpZGVzIHRoZSB2aXRhbCBjb250ZXh0IEkgbmVlZCB0byBwcm9wZXJseSBpbnRlcnByZXQgdGhlIG1vZGlmaWNhdGlvbi4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IHRvIHNlZSB0aGUgY29kZSwgYW5kIHVuZGVyc3RhbmQgdGhlIGludGVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTQwOlx0XHRpZiAoKGZsYWdzIFx1MDAyNiBNU0dfWkVST0NPUFkpIFx1MDAyNlx1MDAyNiBzaXplKSB7XG4xMTQxOlx0XHRcdGlmIChtc2ctXHUwMDNlbXNnX3VidWYpIHtcbjExNDI6XHRcdFx0XHR1YXJnID0gbXNnLVx1MDAzZW1zZ191YnVmO1xuMTE0MzpcdFx0XHRcdGlmIChzay1cdTAwM2Vza19yb3V0ZV9jYXBzIFx1MDAyNiBORVRJRl9GX1NHKVxuMTE0NDpcdFx0XHRcdFx0emMgPSBNU0dfWkVST0NPUFk7XG4xMTQ1Olx0XHRcdH0gZWxzZSBpZiAoc29ja19mbGFnKHNrLCBTT0NLX1pFUk9DT1BZKSkge1xuMTE0NjpcdFx0XHRcdHNrYiA9IHRjcF93cml0ZV9xdWV1ZV90YWlsKHNrKTtcbjExNDc6XHRcdFx0XHR1YXJnID0gbXNnX3plcm9jb3B5X3JlYWxsb2Moc2ssIHNpemUsIHNrYl96Y29weShza2IpLFxuMTE0ODpcdFx0XHRcdFx0XHRcdCAgICAhc29ja2NfZXJyIFx1MDAyNlx1MDAyNiBzb2NrYy5kbWFidWZfaWQpO1xuMTE0OTpcdFx0XHRcdGlmICghdWFyZykge1xuMTE1MDpcdFx0XHRcdFx0ZXJyID0gLUVOT0JVRlM7XG4xMTUxOlx0XHRcdFx0XHRnb3RvIG91dF9lcnI7XG4xMTUyOlx0XHRcdFx0fVxuMTE1MzpcdFx0XHRcdGlmIChzay1cdTAwM2Vza19yb3V0ZV9jYXBzIFx1MDAyNiBORVRJRl9GX1NHKVxuMTE1NDpcdFx0XHRcdFx0emMgPSBNU0dfWkVST0NPUFk7XG4xMTU1Olx0XHRcdFx0ZWxzZVxuMTE1NjpcdFx0XHRcdFx0dWFyZ190b19tc2d6Yyh1YXJnKS1cdTAwM2V6ZXJvY29weSA9IDA7XG4xMTU3Olx0XG4xMTU4Olx0XHRcdFx0aWYgKCFzb2NrY19lcnIgXHUwMDI2XHUwMDI2IHNvY2tjLmRtYWJ1Zl9pZCkge1xuMTE1OTpcdFx0XHRcdFx0YmluZGluZyA9IG5ldF9kZXZtZW1fZ2V0X2JpbmRpbmcoc2ssIHNvY2tjLmRtYWJ1Zl9pZCk7XG4xMTYwOlx0XHRcdFx0XHRpZiAoSVNfRVJSKGJpbmRpbmcpKSB7XG4xMTYxOlx0XHRcdFx0XHRcdGVyciA9IFBUUl9FUlIoYmluZGluZyk7XG4xMTYyOlx0XHRcdFx0XHRcdGJpbmRpbmcgPSBOVUxMO1xuMTE2MzpcdFx0XHRcdFx0XHRnb3RvIG91dF9lcnI7XG4xMTY0Olx0XHRcdFx0XHR9XG4xMTY1Olx0XHRcdFx0fVxuMTE2NjpcdFx0XHR9XG4xMTY3Olx0XHR9IGVsc2UgaWYgKHVubGlrZWx5KG1zZy1cdTAwM2Vtc2dfZmxhZ3MgXHUwMDI2IE1TR19TUExJQ0VfUEFHRVMpIFx1MDAyNlx1MDAyNiBzaXplKSB7XG4xMTY4Olx0XHRcdGlmIChzay1cdTAwM2Vza19yb3V0ZV9jYXBzIFx1MDAyNiBORVRJRl9GX1NHKVxuMTE2OTpcdFx0XHRcdHpjID0gTVNHX1NQTElDRV9QQUdFUztcbjExNzA6XHRcdH1cbjExNzE6XHRcbjExNzI6XHRcdGlmICghc29ja2NfZXJyIFx1MDAyNlx1MDAyNiBzb2NrYy5kbWFidWZfaWQgXHUwMDI2XHUwMDI2ICh6YyAhPSBNU0dfWkVST0NPUFkgfHwgIWJpbmRpbmcpKSB7XG4xMTczOlx0XHRcdGVyciA9IC1FSU5WQUw7XG4xMTc0Olx0XHRcdGdvdG8gb3V0X2VycjtcbjExNzU6XHRcdH1cbjExNzY6XHRcbjExNzc6XHRcdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgTVNHX0ZBU1RPUEVOIHx8XG4xMTc4Olx0XHRcdCAgICAgaW5ldF90ZXN0X2JpdChERUZFUl9DT05ORUNULCBzaykpIFx1MDAyNlx1MDAyNlxuMTE3OTpcdFx0ICAgICF0cC1cdTAwM2VyZXBhaXIpIHtcbjExODA6XHRcdFx0ZXJyID0gdGNwX3NlbmRtc2dfZmFzdG9wZW4oc2ssIG1zZywgXHUwMDI2Y29waWVkX3N5biwgc2l6ZSwgdWFyZyk7XG4xMTgxOlx0XHRcdGlmIChlcnIgPT0gLUVJTlBST0dSRVNTIFx1MDAyNlx1MDAyNiBjb3BpZWRfc3luIFx1MDAzZSAwKVxuMTE4MjpcdFx0XHRcdGdvdG8gb3V0O1xuMTE4MzpcdFx0XHRlbHNlIGlmIChlcnIpXG4xMTg0Olx0XHRcdFx0Z290byBvdXRfZXJyO1xuMTE4NTpcdFx0fVxuMTE4NjpcdFxuMTE4NzpcdFx0dGltZW8gPSBzb2NrX3NuZHRpbWVvKHNrLCBmbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKTtcbjExODg6XHRcbjExODk6XHRcdHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKHNrKTsgIC8qIGlzIHNlbmRpbmcgYXBwbGljYXRpb24tbGltaXRlZD8gKi9cbjExOTA6XHRcbjExOTE6XHRcdC8qIFdhaXQgZm9yIGEgY29ubmVjdGlvbiB0byBmaW5pc2guIE9uZSBleGNlcHRpb24gaXMgVENQIEZhc3QgT3BlblxuMTE5MjpcdFx0ICogKHBhc3NpdmUgc2lkZSkgd2hlcmUgZGF0YSBpcyBhbGxvd2VkIHRvIGJlIHNlbnQgYmVmb3JlIGEgY29ubmVjdGlvblxuMTE5MzpcdFx0ICogaXMgZnVsbHkgZXN0YWJsaXNoZWQuXG4xMTk0Olx0XHQgKi9cbjExOTU6XHRcdGlmICgoKDEgXHUwMDNjXHUwMDNjIHNrLVx1MDAzZXNrX3N0YXRlKSBcdTAwMjYgfihUQ1BGX0VTVEFCTElTSEVEIHwgVENQRl9DTE9TRV9XQUlUKSkgXHUwMDI2XHUwMDI2XG4xMTk2Olx0XHQgICAgIXRjcF9wYXNzaXZlX2Zhc3RvcGVuKHNrKSkge1xuMTE5NzpcdFx0XHRlcnIgPSBza19zdHJlYW1fd2FpdF9jb25uZWN0KHNrLCBcdTAwMjZ0aW1lbyk7XG4xMTk4Olx0XHRcdGlmIChlcnIgIT0gMClcbjExOTk6XHRcdFx0XHRnb3RvIGRvX2Vycm9yO1xuMTIwMDpcdFx0fVxuMTIwMTpcdFxuMTIwMjpcdFx0aWYgKHVubGlrZWx5KHRwLVx1MDAzZXJlcGFpcikpIHtcbjEyMDM6XHRcdFx0aWYgKHRwLVx1MDAzZXJlcGFpcl9xdWV1ZSA9PSBUQ1BfUkVDVl9RVUVVRSkge1xuMTIwNDpcdFx0XHRcdGNvcGllZCA9IHRjcF9zZW5kX3JjdnEoc2ssIG1zZywgc2l6ZSk7XG4xMjA1Olx0XHRcdFx0Z290byBvdXRfbm9wdXNoO1xuMTIwNjpcdFx0XHR9XG4xMjA3Olx0XG4xMjA4Olx0XHRcdGVyciA9IC1FSU5WQUw7XG4xMjA5Olx0XHRcdGlmICh0cC1cdTAwM2VyZXBhaXJfcXVldWUgPT0gVENQX05PX1FVRVVFKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzOTcKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgVENQIFNlbmQgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSBhIG1vZGlmaWNhdGlvbiB0byBgdGNwX3NlbmRtc2dfbG9ja2VkYCBpbiBgbmV0L2lwdjQvdGNwLmNgLCB3aGljaCBpcyBhbHdheXMgaW50ZXJlc3RpbmcuIFRoZSBjb3JlIGNoYW5nZSBmb2N1c2VzIG9uIHRoaXMgY29uZGl0aW9uYWwgYmxvY2s6CgpgYGBjCi0JaWYgKCFzb2NrY19lcnIgJmFtcDsmYW1wOyBzb2NrYy5kbWFidWZfaWQgJmFtcDsmYW1wOwotCSAgICAoIShmbGFncyAmYW1wOyBNU0dfWkVST0NPUFkpIHx8ICFzb2NrX2ZsYWcoc2ssIFNPQ0tfWkVST0NPUFkpKSkgewomIzQzOwlpZiAoIXNvY2tjX2VyciAmYW1wOyZhbXA7IHNvY2tjLmRtYWJ1Zl9pZCAmYW1wOyZhbXA7ICh6YyAhPSBNU0dfWkVST0NPUFkgfHwgIWJpbmRpbmcpKSB7CiAJCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0X2VycjsKIAl9CmBgYAoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyBhIHdvcnRod2hpbGUgdGFyZ2V0IGZvciBmdXp6aW5nLiBUaGlzIGNvZGUgaXMgY2xlYXJseSBpbiB0aGUgcGF0aCBvZiBgdGNwX3NlbmRtc2dfbG9ja2VkYCwgd2hpY2ggaXMgKnRoZSogY29yZSBmdW5jdGlvbiBmb3IgVENQIHNvY2tldCBzZW5kIG9wZXJhdGlvbnMuIEl0IGhhbmRsZXMgYE1TR19aRVJPQ09QWWAgYW5kLCBjcnVjaWFsbHksIGludGVyYWN0cyB3aXRoIGBkbWFidWZfaWRgLCB3aGljaCBpcyBsaWtlbHkgcmVsYXRlZCB0byBgZGV2bWVtYCBvciBzaW1pbGFyIERNQSBidWZmZXIgbWVjaGFuaXNtcy4KCmB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGlzIHJlYWNoZWQgdGhyb3VnaCBzdGFuZGFyZCBzb2NrZXQgc3lzY2FsbHMgbGlrZSBgc2VuZG1zZ2AsIGBzZW5kYCwgYW5kIGBzZW5kdG9gLiBTbywgaXQmIzM5O3MgcHJldHR5IGFjY2Vzc2libGUuIE15IG5leHQgc3RlcCBpcyB0byBkZXRlcm1pbmUgaWYgYW55IGNvbmZpZ3VyYXRpb25zIGdhdGUgdGhpcyBmdW5jdGlvbmFsaXR5LiBJJiMzOTtsbCBuZWVkIHRvIGludmVzdGlnYXRlIGBuZXRfZGV2bWVtX2dldF9iaW5kaW5nYCBhbmQgdGhlIGBzb2NrYy5kbWFidWZfaWRgIHRvIHVuZGVyc3RhbmQgdGhlIHByZXJlcXVpc2l0ZXMgZm9yIHRoaXMgY29uZGl0aW9uIHRvIGJlIHRyaWdnZXJlZC4gQW55IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBoZXJlIGNvdWxkIG5hcnJvdyBteSBmb2N1cyBmb3IgZnV6emluZyBvciBpbmZsdWVuY2UgdGhlIHR5cGUgb2YgaW5wdXQgSSYjMzk7bGwgbmVlZCB0byBjcmFmdCB0byBoaXQgdGhpcyBwb3RlbnRpYWxseSB2dWxuZXJhYmxlIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0X2Rldm1lbV9nZXRfYmluZGluZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXZtZW0uYz0zNzk9dm9pZCBuZXRfZGV2bWVtX3B1dF9uZXRfaW92KHN0cnVjdCBuZXRfaW92ICpuaW92KVxuLS1cbm5ldC9jb3JlL2Rldm1lbS5jLTM4My1cbm5ldC9jb3JlL2Rldm1lbS5jOjM4NDpzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqbmV0X2Rldm1lbV9nZXRfYmluZGluZyhzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvY29yZS9kZXZtZW0uYy0zODUtXHRcdFx0XHRcdFx0XHQgdW5zaWduZWQgaW50IGRtYWJ1Zl9pZClcbi0tXG5uZXQvY29yZS9kZXZtZW0uaD0xNTU9c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxubmV0L2NvcmUvZGV2bWVtLmg6MTU2Om5ldF9kZXZtZW1fZ2V0X2JpbmRpbmcoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgZG1hYnVmX2lkKTtcbm5ldC9jb3JlL2Rldm1lbS5oLTE1Ny1zdHJ1Y3QgbmV0X2lvdiAqXG4tLVxubmV0L2NvcmUvZGV2bWVtLmg9MjI4PXN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxubmV0L2NvcmUvZGV2bWVtLmg6MjI5Om5ldF9kZXZtZW1fZ2V0X2JpbmRpbmcoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgZG1hYnVmX2lkKVxubmV0L2NvcmUvZGV2bWVtLmgtMjMwLXtcbi0tXG5uZXQvaXB2NC90Y3AuYz0xMTE2PWludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuLS1cbm5ldC9pcHY0L3RjcC5jLTExNTgtXHRcdFx0aWYgKCFzb2NrY19lcnIgXHUwMDI2XHUwMDI2IHNvY2tjLmRtYWJ1Zl9pZCkge1xubmV0L2lwdjQvdGNwLmM6MTE1OTpcdFx0XHRcdGJpbmRpbmcgPSBuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHNrLCBzb2NrYy5kbWFidWZfaWQpO1xubmV0L2lwdjQvdGNwLmMtMTE2MC1cdFx0XHRcdGlmIChJU19FUlIoYmluZGluZykpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDQ5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZToKCioqSW52ZXN0aWdhdGluZyBDb25kaXRpb25hbCBDb21waWxhdGlvbiBpbiBgbmV0L2NvcmUvZGV2bWVtLmhgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbmNsdXNpb24gb3IgYmVoYXZpb3Igb2YgYG5ldC9jb3JlL2Rldm1lbS5oYC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGxvb2sgZm9yIGFueSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBvciBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBjb250cm9sIGl0cyBjb21waWxhdGlvbi4gSSB3YW50IHRvIHNlZSBpZiBpdCYjMzk7cyBkZXBlbmRlbnQgb24gYSBzcGVjaWZpYyBgQ09ORklHYCBvcHRpb24sIG9yIGlmIHRoZXJlJiMzOTtzIGFueSBvdGhlciBjb25kaXRpb25hbCBsb2dpYyBkZXRlcm1pbmluZyB3aGVuIHRoaXMgaGVhZGVyIGdldHMgcHVsbGVkIGluLiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4sIGFuZCBpdOKAmXMgYWx3YXlzIHRoZSBmaXJzdCBwbGFjZSBJIHN0YXJ0IHdoZW4gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgY29uZmlndXJhdGlvbiBvZiBhIHBpZWNlIG9mIGtlcm5lbCBjb2RlIGxpa2UgdGhpcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBhIHR5cGljYWwgYCNpZmRlZmAsIGAjaWZuZGVmYCwgb3IgbWF5YmUgZXZlbiBzb21lIG1vcmUgY29tcGxleCBtYWNybyBjb25zdHJ1Y3RzLiBUaGUgZ29hbCBpcyB0byBmaWd1cmUgb3V0IHRoZSBzY2VuYXJpb3Mgd2hlcmUgYGRldm1lbS5oYCBpcyByZWxldmFudCwgYW5kIHBlcmhhcHMsIHdoeSBpdCBtaWdodCBiZSBleGNsdWRlZCBpbiBvdGhlcnMuIExldOKAmXMgZGl2ZSBpbiBhbmQgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldm1lbS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cbiAgIDI6XHQvKlxuICAgMzpcdCAqIERldmljZSBtZW1vcnkgVENQIHN1cHBvcnRcbiAgIDQ6XHQgKlxuICAgNTpcdCAqIEF1dGhvcnM6XHRNaW5hIEFsbWFzcnkgXHUwMDNjYWxtYXNyeW1pbmFAZ29vZ2xlLmNvbVx1MDAzZVxuICAgNjpcdCAqXHRcdFdpbGxlbSBkZSBCcnVpam4gXHUwMDNjd2lsbGVtYkBnb29nbGUuY29tXHUwMDNlXG4gICA3Olx0ICpcdFx0S2FpeXVhbiBaaGFuZyBcdTAwM2NrYWl5dWFuekBnb29nbGUuY29tXHUwMDNlXG4gICA4Olx0ICpcbiAgIDk6XHQgKi9cbiAgMTA6XHQjaWZuZGVmIF9ORVRfREVWTUVNX0hcbiAgMTE6XHQjZGVmaW5lIF9ORVRfREVWTUVNX0hcbiAgMTI6XHRcbiAgMTM6XHQjaW5jbHVkZSBcdTAwM2NuZXQvbmV0bWVtLmhcdTAwM2VcbiAgMTQ6XHQjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZGV2X25ldGxpbmsuaFx1MDAzZVxuICAxNTpcdFxuICAxNjpcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2s7XG4gIDE3Olx0XG4gIDE4Olx0c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcge1xuICAxOTpcdFx0c3RydWN0IGRtYV9idWYgKmRtYWJ1ZjtcbiAgMjA6XHRcdHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQ7XG4gIDIxOlx0XHRzdHJ1Y3Qgc2dfdGFibGUgKnNndDtcbiAgMjI6XHRcdC8qIFBoeXNpY2FsIE5JQyB0aGF0IGRvZXMgdGhlIGFjdHVhbCBETUEgZm9yIHRoaXMgYmluZGluZy4gKi9cbiAgMjM6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4gIDI0Olx0XHQvKiBPcGFxdWUgY29va2llIGlkZW50aWZ5aW5nIHRoZSB2aXJ0dWFsIGRldmljZSAoZS5nLiBuZXRraXQpIHRoZSB1c2VyXG4gIDI1Olx0XHQgKiBjYWxsZWQgYmluZC10eCBvbi4gVXNlZCBvbmx5IGZvciBwb2ludGVyIGNvbXBhcmlzb24uIE5ldmVyXG4gIDI2Olx0XHQgKiBkZXJlZmVyZW5jZWQuXG4gIDI3Olx0XHQgKi9cbiAgMjg6XHRcdHZvaWQgKnZkZXY7XG4gIDI5Olx0XHRzdHJ1Y3QgZ2VuX3Bvb2wgKmNodW5rX3Bvb2w7XG4gIDMwOlx0XHQvKiBQcm90ZWN0IGRldiAqL1xuICAzMTpcdFx0c3RydWN0IG11dGV4IGxvY2s7XG4gIDMyOlx0XG4gIDMzOlx0XHQvKiBUaGUgdXNlciBob2xkcyBhIHJlZiAodmlhIHRoZSBuZXRsaW5rIEFQSSkgZm9yIGFzIGxvbmcgYXMgdGhleSB3YW50XG4gIDM0Olx0XHQgKiB0aGUgYmluZGluZyB0byByZW1haW4gYWxpdmUuIEVhY2ggcGFnZSBwb29sIHVzaW5nIHRoaXMgYmluZGluZyBob2xkc1xuICAzNTpcdFx0ICogYSByZWYgdG8ga2VlcCB0aGUgYmluZGluZyBhbGl2ZS4gVGhlIHBhZ2VfcG9vbCBkb2VzIG5vdCByZWxlYXNlIHRoZVxuICAzNjpcdFx0ICogcmVmIHVudGlsIGFsbCB0aGUgbmV0X2lvdnMgYWxsb2NhdGVkIGZyb20gdGhpcyBiaW5kaW5nIGFyZSByZWxlYXNlZFxuICAzNzpcdFx0ICogYmFjayB0byB0aGUgcGFnZV9wb29sLlxuICAzODpcdFx0ICpcbiAgMzk6XHRcdCAqIFRoZSBiaW5kaW5nIHVuZG9zIGl0c2VsZiBhbmQgdW5tYXBzIHRoZSB1bmRlcmx5aW5nIGRtYWJ1ZiBvbmNlIGFsbFxuICA0MDpcdFx0ICogdGhvc2UgcmVmcyBhcmUgZHJvcHBlZCBhbmQgdGhlIGJpbmRpbmcgaXMgbm8gbG9uZ2VyIGRlc2lyZWQgb3IgaW5cbiAgNDE6XHRcdCAqIHVzZS5cbiAgNDI6XHRcdCAqXG4gIDQzOlx0XHQgKiBuZXRfZGV2bWVtX2dldF9uZXRfaW92KCkgb24gZG1hYnVmIG5ldF9pb3ZzIHdpbGwgaW5jcmVtZW50IHRoaXNcbiAgNDQ6XHRcdCAqIHJlZmVyZW5jZSwgbWFraW5nIHN1cmUgdGhhdCB0aGUgYmluZGluZyByZW1haW5zIGFsaXZlIHVudGlsIGFsbCB0aGVcbiAgNDU6XHRcdCAqIG5ldF9pb3ZzIGFyZSBubyBsb25nZXIgdXNlZC4gbmV0X2lvdnMgYWxsb2NhdGVkIGZyb20gdGhpcyBiaW5kaW5nXG4gIDQ2Olx0XHQgKiB0aGF0IGFyZSBzdHVjayBpbiB0aGUgVFggcGF0aCBmb3IgYW55IHJlYXNvbiAoc3VjaCBhcyBhd2FpdGluZ1xuICA0NzpcdFx0ICogcmV0cmFuc21pdHMpIGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIGJpbmRpbmcgdW50aWwgdGhlIHNrYiBob2xkaW5nXG4gIDQ4Olx0XHQgKiB0aGVtIGlzIGZyZWVkLlxuICA0OTpcdFx0ICovXG4gIDUwOlx0XHRzdHJ1Y3QgcGVyY3B1X3JlZiByZWY7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ2OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gZGV2bWVtLmgmIzM5O3MgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24qKgoKT2theSwgdGltZSB0byBkaWcgaW50byBgbmV0L2NvcmUvZGV2bWVtLmhgLiBJJiMzOTttIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBhbnkgYCNpZmRlZmAgZGlyZWN0aXZlcyBpbiB0aGlzIGZpbGUuIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCBJJiMzOTttIGludGVyZXN0ZWQgaW4gdGhlIGludGVycGxheSBiZXR3ZWVuIHZhcmlvdXMgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gcGF0aHMsIHdoaWNoIGNhbiBiZSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgZGV2aWNlIG1lbW9yeSBpcyBoYW5kbGVkLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGRpZmZlcmVudCBoYXJkd2FyZSBhcmNoaXRlY3R1cmVzLCBjb25maWd1cmF0aW9ucywgb3Iga2VybmVsIHZlcnNpb25zLiBUaGlzIGZpbGUgc2VlbXMgY3J1Y2lhbCBmb3IgbG93LWxldmVsIGRldmljZSBpbnRlcmFjdGlvbiwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBzZWxlY3RpdmVseSBpbmNsdWRlZCBvciBleGNsdWRlZCBiYXNlZCBvbiBidWlsZC10aW1lIGRlZmluZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZnVuY3Rpb25hbGl0eSBpcyBjb25kaXRpb25hbCwgYW5kIHdoYXQgY29uZmlndXJhdGlvbnMgY2FuIGhhdmUgYSBiaWcgaW1wYWN0IG9uIGhvdyB0aGlzIHRoaW5nIHdvcmtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldm1lbS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDU6XHR9XG4gMTQ2Olx0XG4gMTQ3Olx0dm9pZCBuZXRfZGV2bWVtX2dldF9uZXRfaW92KHN0cnVjdCBuZXRfaW92ICpuaW92KTtcbiAxNDg6XHR2b2lkIG5ldF9kZXZtZW1fcHV0X25ldF9pb3Yoc3RydWN0IG5ldF9pb3YgKm5pb3YpO1xuIDE0OTpcdFxuIDE1MDpcdHN0cnVjdCBuZXRfaW92ICpcbiAxNTE6XHRuZXRfZGV2bWVtX2FsbG9jX2RtYWJ1ZihzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyk7XG4gMTUyOlx0dm9pZCBuZXRfZGV2bWVtX2ZyZWVfZG1hYnVmKHN0cnVjdCBuZXRfaW92ICpwcGlvdik7XG4gMTUzOlx0XG4gMTU0Olx0XG4gMTU1Olx0c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxuIDE1NjpcdG5ldF9kZXZtZW1fZ2V0X2JpbmRpbmcoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgZG1hYnVmX2lkKTtcbiAxNTc6XHRzdHJ1Y3QgbmV0X2lvdiAqXG4gMTU4Olx0bmV0X2Rldm1lbV9nZXRfbmlvdl9hdChzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZywgc2l6ZV90IGFkZHIsXG4gMTU5Olx0XHRcdCAgICAgICBzaXplX3QgKm9mZiwgc2l6ZV90ICpzaXplKTtcbiAxNjA6XHRcbiAxNjE6XHQjZWxzZVxuIDE2MjpcdHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nO1xuIDE2MzpcdFxuIDE2NDpcdHN0YXRpYyBpbmxpbmUgdm9pZFxuIDE2NTpcdG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmdfcHV0KHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKVxuIDE2NjpcdHtcbiAxNjc6XHR9XG4gMTY4Olx0XG4gMTY5Olx0c3RhdGljIGlubGluZSB2b2lkIG5ldF9kZXZtZW1fZ2V0X25ldF9pb3Yoc3RydWN0IG5ldF9pb3YgKm5pb3YpXG4gMTcwOlx0e1xuIDE3MTpcdH1cbiAxNzI6XHRcbiAxNzM6XHRzdGF0aWMgaW5saW5lIHZvaWQgbmV0X2Rldm1lbV9wdXRfbmV0X2lvdihzdHJ1Y3QgbmV0X2lvdiAqbmlvdilcbiAxNzQ6XHR7XG4gMTc1Olx0fVxuIDE3NjpcdFxuIDE3NzpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxuIDE3ODpcdG5ldF9kZXZtZW1fYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdmRldixcbiAxNzk6XHRcdFx0ICAgICAgIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXYsXG4gMTgwOlx0XHRcdCAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sXG4gMTgxOlx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgZG1hYnVmX2ZkLFxuIDE4MjpcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IG5pb3Zfc2hpZnQsXG4gMTgzOlx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgKnByaXYsXG4gMTg0Olx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gMTg1Olx0e1xuIDE4NjpcdFx0cmV0dXJuIEVSUl9QVFIoLUVPUE5PVFNVUFApO1xuIDE4NzpcdH1cbiAxODg6XHRcbiAxODk6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpuZXRfZGV2bWVtX2xvb2t1cF9kbWFidWYodTMyIGlkKVxuIDE5MDpcdHtcbiAxOTE6XHRcdHJldHVybiBOVUxMO1xuIDE5MjpcdH1cbiAxOTM6XHRcbiAxOTQ6XHRzdGF0aWMgaW5saW5lIHZvaWRcbiAxOTU6XHRuZXRfZGV2bWVtX3VuYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcpXG4gMTk2Olx0e1xuIDE5NzpcdH1cbiAxOTg6XHRcbiAxOTk6XHRzdGF0aWMgaW5saW5lIGludFxuIDIwMDpcdG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHJ4cV9pZHgsXG4gMjAxOlx0XHRcdFx0XHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyxcbiAyMDI6XHRcdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiAyMDM6XHRcbiAyMDQ6XHR7XG4gMjA1Olx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gMjA2Olx0fVxuIDIwNzpcdFxuIDIwODpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9pb3YgKlxuIDIwOTpcdG5ldF9kZXZtZW1fYWxsb2NfZG1hYnVmKHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKVxuIDIxMDpcdHtcbiAyMTE6XHRcdHJldHVybiBOVUxMO1xuIDIxMjpcdH1cbiAyMTM6XHRcbiAyMTQ6XHRzdGF0aWMgaW5saW5lIHZvaWQgbmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZihzdHJ1Y3QgbmV0X2lvdiAqcHBpb3YpXG4gMjE1Olx0e1xuIDIxNjpcdH1cbiAyMTc6XHRcbiAyMTg6XHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbmV0X2lvdl92aXJ0dWFsX2FkZHIoY29uc3Qgc3RydWN0IG5ldF9pb3YgKm5pb3YpXG4gMjE5Olx0e1xuIDIyMDpcdFx0cmV0dXJuIDA7XG4gMjIxOlx0fVxuIDIyMjpcdFxuIDIyMzpcdHN0YXRpYyBpbmxpbmUgdTMyIG5ldF9kZXZtZW1faW92X2JpbmRpbmdfaWQoY29uc3Qgc3RydWN0IG5ldF9pb3YgKm5pb3YpXG4gMjI0Olx0e1xuIDIyNTpcdFx0cmV0dXJuIDA7XG4gMjI2Olx0fVxuIDIyNzpcdFxuIDIyODpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxuIDIyOTpcdG5ldF9kZXZtZW1fZ2V0X2JpbmRpbmcoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgZG1hYnVmX2lkKVxuIDIzMDpcdHtcbiAyMzE6XHRcdHJldHVybiBFUlJfUFRSKC1FT1BOT1RTVVBQKTtcbiAyMzI6XHR9XG4gMjMzOlx0XG4gMjM0Olx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2lvdiAqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMTMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBlbmFibGluZyBgZGV2bWVtYDoKCioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBmb3IgYGRldm1lbWAqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZW5hYmxpbmcgYGRldm1lbWAgaW4gdGhlIGBuZXQvY29yZS9kZXZtZW0uaGAgZmlsZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIGlmIGl0JiMzOTtzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gYSBrZXJuZWwgY29uZmlnIG9wdGlvbi4gSSBleHBlY3QgaXQgdG8gYmUgZ3VhcmRlZCBieSBhIGAjaWZkZWZgIG9yIHNpbWlsYXIgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZS4gSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSB0aGUgc3BlY2lmaWMgY29uZmlnIHN5bWJvbCB0aGF0IGNvbnRyb2xzIHdoZXRoZXIgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGluY2x1ZGVkIGR1cmluZyBjb21waWxhdGlvbi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIG9uIGhvdyB0aGUgYGRldm1lbWAgZnVuY3Rpb25hbGl0eSBpcyBlbmFibGVkIGJhc2VkIG9uIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2bWVtLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDUwOlx0XHRzdHJ1Y3QgcGVyY3B1X3JlZiByZWY7XG4gIDUxOlx0XG4gIDUyOlx0XHQvKiBUaGUgbGlzdCBvZiBiaW5kaW5ncyBjdXJyZW50bHkgYWN0aXZlLiBVc2VkIGZvciBuZXRsaW5rIHRvIG5vdGlmeSB1c1xuICA1MzpcdFx0ICogb2YgdGhlIHVzZXIgZHJvcHBpbmcgdGhlIGJpbmQuXG4gIDU0Olx0XHQgKi9cbiAgNTU6XHRcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiAgNTY6XHRcbiAgNTc6XHRcdC8qIHJ4cSYjMzk7cyB0aGlzIGJpbmRpbmcgaXMgYWN0aXZlIG9uLiAqL1xuICA1ODpcdFx0c3RydWN0IHhhcnJheSBib3VuZF9yeHFzO1xuICA1OTpcdFxuICA2MDpcdFx0LyogSUQgb2YgdGhpcyBiaW5kaW5nLiBHbG9iYWxseSB1bmlxdWUgdG8gYWxsIGJpbmRpbmdzIGN1cnJlbnRseVxuICA2MTpcdFx0ICogYWN0aXZlLlxuICA2MjpcdFx0ICovXG4gIDYzOlx0XHR1MzIgaWQ7XG4gIDY0Olx0XG4gIDY1Olx0XHQvKiBETUEgZGlyZWN0aW9uLCBGUk9NX0RFVklDRSBmb3IgUnggYmluZGluZywgVE9fREVWSUNFIGZvciBUeC4gKi9cbiAgNjY6XHRcdGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbjtcbiAgNjc6XHRcbiAgNjg6XHRcdC8qIEFycmF5IG9mIG5ldF9pb3YgcG9pbnRlcnMgZm9yIHRoaXMgYmluZGluZywgc29ydGVkIGJ5IHZpcnR1YWxcbiAgNjk6XHRcdCAqIGFkZHJlc3MuIFRoaXMgYXJyYXkgaXMgY29udmVuaWVudCB0byBtYXAgdGhlIHZpcnR1YWwgYWRkcmVzc2VzIHRvXG4gIDcwOlx0XHQgKiBuZXRfaW92cyBpbiB0aGUgVFggcGF0aC5cbiAgNzE6XHRcdCAqL1xuICA3MjpcdFx0c3RydWN0IG5ldF9pb3YgKip0eF92ZWM7XG4gIDczOlx0XG4gIDc0Olx0XHR1bnNpZ25lZCBpbnQgbmlvdl9zaGlmdDtcbiAgNzU6XHRcbiAgNzY6XHRcdHN0cnVjdCB3b3JrX3N0cnVjdCB1bmJpbmRfdztcbiAgNzc6XHR9O1xuICA3ODpcdFxuICA3OTpcdCNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWTUVNKVxuICA4MDpcdC8qIE93bmVyIG9mIHRoZSBkbWEtYnVmIGNodW5rcyBpbnNlcnRlZCBpbnRvIHRoZSBnZW4gcG9vbC4gRWFjaCBzY2F0dGVybGlzdFxuICA4MTpcdCAqIGVudHJ5IGZyb20gdGhlIGRtYWJ1ZiBpcyBpbnNlcnRlZCBpbnRvIHRoZSBnZW5wb29sIGFzIGEgY2h1bmssIGFuZCBuZWVkc1xuICA4MjpcdCAqIHRoaXMgb3duZXIgc3RydWN0IHRvIGtlZXAgdHJhY2sgb2Ygc29tZSBtZXRhZGF0YSBuZWNlc3NhcnkgdG8gY3JlYXRlXG4gIDgzOlx0ICogYWxsb2NhdGlvbnMgZnJvbSB0aGlzIGNodW5rLlxuICA4NDpcdCAqL1xuICA4NTpcdHN0cnVjdCBkbWFidWZfZ2VucG9vbF9jaHVua19vd25lciB7XG4gIDg2Olx0XHRzdHJ1Y3QgbmV0X2lvdl9hcmVhIGFyZWE7XG4gIDg3Olx0XHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZztcbiAgODg6XHRcbiAgODk6XHRcdC8qIGRtYV9hZGRyIG9mIHRoZSBzdGFydCBvZiB0aGUgY2h1bmsuICAqL1xuICA5MDpcdFx0ZG1hX2FkZHJfdCBiYXNlX2RtYV9hZGRyO1xuICA5MTpcdH07XG4gIDkyOlx0XG4gIDkzOlx0dm9pZCBfX25ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmdfZnJlZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndxKTtcbiAgOTQ6XHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqXG4gIDk1Olx0bmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxuICA5NjpcdFx0XHQgICAgICAgc3RydWN0IGRldmljZSAqZG1hX2RldixcbiAgOTc6XHRcdFx0ICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbixcbiAgOTg6XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBkbWFidWZfZmQsIHVuc2lnbmVkIGludCBuaW92X3NoaWZ0LFxuICA5OTpcdFx0XHQgICAgICAgc3RydWN0IG5ldGRldl9ubF9zb2NrICpwcml2LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTI3CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKktjb25maWcgRGl2ZTogQSBRdWljayBEaWFnbm9zdGljIENoZWNrKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0JiMzOTtzIHplcm8gaW4gb24gYENPTkZJR19ORVRfREVWTUVNYC4gR2l2ZW4gbXkgZXhwZXJ0aXNlIGluIHRoaXMgYXJlYSwgaXQmIzM5O3MgaW1tZWRpYXRlbHkganVtcGluZyBvdXQgYXMgYSBwb3RlbnRpYWwgcG9pbnQgb2YgaW50ZXJlc3QuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpdHMgc3RhdHVzIHdpdGhpbiB0aGUgS2NvbmZpZyBzeXN0ZW0uIFRoaXMgaXNuJiMzOTt0IGp1c3QgYWJvdXQgZmluZGluZyBpdHMgY3VycmVudCBzZXR0aW5nOyBJJiMzOTttIGRpZ2dpbmcgZGVlcGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLCBpbXBsaWNhdGlvbnMsIGFuZCBwb3NzaWJsZSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBuZXR3b3JrIGNvbmZpZ3VyYXRpb25zLiBUaGlzICYjMzk7Y2hlY2smIzM5OyBpcyBtb3JlIHRoYW4gYSBzaW1wbGUgYGdyZXBgIG9yIHNlYXJjaDsgaXQmIzM5O3MgYSBkaWFnbm9zdGljIHByb2JlIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgcmVkIGZsYWdzIG9yIGFyZWFzIGRlbWFuZGluZyBmdXJ0aGVyIGludmVzdGlnYXRpb24gd2l0aGluIHRoZSBicm9hZGVyIG5ldHdvcmsgc3RhY2suIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgc3RhcnRpbmcgcG9pbnQgYmVmb3JlIHRhY2tsaW5nIGFueXRoaW5nIG1vcmUgY29tcGxleC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9ERVZNRU0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9NjY9Y29uZmlnIFNLQl9FWFRFTlNJT05TXG4tLVxubmV0L0tjb25maWctNjgtXG5uZXQvS2NvbmZpZzo2OTpjb25maWcgTkVUX0RFVk1FTVxubmV0L0tjb25maWctNzAtXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyMDAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIGNvbmZpZ3VyYXRpb24gaXRlbSwgYW5kIEkgd2FudCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4gVGhlIGRvY3VtZW50YXRpb24gaXMgcHJvYmFibHkgZGVjZW50LCBidXQgbGV0JiMzOTtzIGJlIGhvbmVzdCwgdGhlIHRydWUgc291cmNlIG9mIHRydXRoIGlzIGFsd2F5cyB0aGUgS2NvbmZpZyBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGl0ZW0gaW4gaXRzIG5hdGl2ZSBoYWJpdGF0LiBUaGF0IG1lYW5zIGNyYWNraW5nIG9wZW4gdGhlIGBuZXQvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBob3BpbmcgaXQmIzM5O3Mgd2VsbC1vcmdhbml6ZWQsIHdpdGggY2xlYXIgZGVwZW5kZW5jaWVzLCBkZXNjcmlwdGlvbnMsIGFuZCBtYXliZSBldmVuIHNvbWUgdXNlZnVsIGRlZmF1bHRzIG9yIGhlbHAgdGV4dC4gSXQmIzM5O3MgdGhlIG9ubHkgcmVhbCB3YXkgdG8gZ2V0IGEgY29tcGxldGVseSBwcmVjaXNlIHVuZGVyc3RhbmRpbmcsIHJpZ2h0PyBUaGUgZGVmYWN0byBkb2N1bWVudGF0aW9uIG1pZ2h0IGJlIHJpZ2h0LCBidXQgdGhlIEtjb25maWcgZmlsZSB3aWxsIHJldmVhbCB0aGUgdHJ1ZSBpbnRlcmFjdGlvbnMgYW5kIGltcGFjdHMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290IGluIHRoYXQgZmlsZS4gSSBleHBlY3QgdG8gcGFyc2UgdGhlIHN5bWJvbCBkZWZpbml0aW9uLCBhbnkgYXNzb2NpYXRlZCBkZXBlbmRlbmNpZXMgKGxpa2UgYGRlcGVuZHMgb25gIG9yIGBzZWxlY3RgKSwgYW5kIGFueSBoZWxwIHRleHQgYXNzb2NpYXRlZCB3aXRoIGl0LiBGcm9tIHRoZXJlIEkgY2FuIGluZmVyIGFueXRoaW5nIEkgbmVlZCB0byBrbm93IGFib3V0IHRoZSBzeW1ib2wuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDY1Olx0XG4gIDY2Olx0Y29uZmlnIFNLQl9FWFRFTlNJT05TXG4gIDY3Olx0XHRib29sXG4gIDY4Olx0XG4gIDY5Olx0Y29uZmlnIE5FVF9ERVZNRU1cbiAgNzA6XHRcdGRlZl9ib29sIHlcbiAgNzE6XHRcdHNlbGVjdCBHRU5FUklDX0FMTE9DQVRPUlxuICA3MjpcdFx0ZGVwZW5kcyBvbiBETUFfU0hBUkVEX0JVRkZFUlxuICA3MzpcdFx0ZGVwZW5kcyBvbiBQQUdFX1BPT0xcbiAgNzQ6XHRcbiAgNzU6XHRjb25maWcgTkVUX1NIQVBFUlxuICA3NjpcdFx0Ym9vbFxuICA3NzpcdFxuICA3ODpcdGNvbmZpZyBORVRfQ1JDMzJDXG4gIDc5Olx0XHRib29sXG4gIDgwOlx0XHRzZWxlY3QgQ1JDMzJcbiAgODE6XHRcbiAgODI6XHRtZW51IFwmIzM0O05ldHdvcmtpbmcgb3B0aW9uc1wmIzM0O1xuICA4MzpcdFxuICA4NDpcdHNvdXJjZSBcJiMzNDtuZXQvcGFja2V0L0tjb25maWdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTY2NAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRDUCBaZXJvLUNvcHkgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gSSBzZWUgdGhleSYjMzk7dmUgbW9kaWZpZWQgYG5ldC9pcHY0L3RjcC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgdGNwX3NlbmRtc2dfbG9ja2VkYCBmdW5jdGlvbi4gVGhlIG9yaWdpbmFsIGNvZGUgaGFkIGEgY29uZGl0aW9uYWwgY2hlY2sgaW52b2x2aW5nIGBzb2NrY19lcnJgLCBgc29ja2MuZG1hYnVmX2lkYCwgYGZsYWdzICZhbXA7IE1TR19aRVJPQ09QWWAsIGFuZCBgc29ja19mbGFnKHNrLCBTT0NLX1pFUk9DT1BZKWAuIFRoZSBuZXcgY29kZSByZXBsYWNlcyB0aGF0IHdpdGggYCh6YyAhPSBNU0dfWkVST0NPUFkgfHwgIWJpbmRpbmcpYC4gSG1tLCBzb3VuZHMgbGlrZSB0aGV5JiMzOTtyZSB0aWdodGVuaW5nIHVwIHRoZSB6ZXJvLWNvcHkgbG9naWMgd2hlbiBgZGV2bWVtYCBjbXNnIChkbWFidWZfaWQpIGlzIHVzZWQuCgpUaGlua2luZyBhYm91dCB0aGUgY29udGV4dCwgdGhpcyBoYXBwZW5zIHdoZW4gd2UmIzM5O3JlIHNlbmRpbmcgZGF0YSBvdmVyIGEgVENQIHNvY2tldCB1c2luZyBgTVNHX1pFUk9DT1BZYCBhbmQgdGhpcyBgZGV2bWVtYCBmZWF0dXJlLiBJIHJlY2FsbCBgemNgIGlzIHNldCBpZiB0aGUgdW5kZXJseWluZyBuZXR3b3JrIGludGVyZmFjZSBzdXBwb3J0cyBzY2F0dGVyLWdhdGhlciwgdXNpbmcgYE5FVElGX0ZfU0dgLiBUaGUgb3JpZ2luYWwgY29kZSBzZWVtcyB0byBoYXZlIGhhZCBhIHBvdGVudGlhbCB3ZWFrbmVzcyDigJMgaXQgbWlnaHQgaGF2ZSBwcm9jZWVkZWQgaW4gc2l0dWF0aW9ucyB3aGVyZSBgemNgIHdhcyB6ZXJvIChtZWFuaW5nIG5vIHNjYXR0ZXItZ2F0aGVyIHN1cHBvcnQsIG9yIG90aGVyIGlzc3VlcyksICpvciogd2hlcmUgdGhlIGBiaW5kaW5nYCBwcm9jZXNzIGZhaWxlZCwgZXZlbiBpZiBgTVNHX1pFUk9DT1BZYCB3YXMgc2V0LiBOb3csIHRoZSBjaGVjayBpcyBtb3JlIHN0cmljdDsgZWl0aGVyIGB6Y2AgKm11c3QqIGJlIHNldCAqb3IqIGBiaW5kaW5nYCBtdXN0IHN1Y2NlZWQuIFRoYXQgbWFrZXMgc2Vuc2UsIGtlZXBzIHRoaW5ncyBjbGVhbmVyIGFuZCBzYWZlci4KCklzIHRoaXMgc29tZXRoaW5nIHRvIHNwZW5kIG15IHRpbWUgb24sIHRvIHNlZSBpZiBpdCBjYXVzZXMgaXNzdWVzPyBBYnNvbHV0ZWx5LiBUaGlzIGlzIGluIHRoZSBjb3JlIFRDUCBzdGFjaywgaXQmIzM5O3MgdXNlci1jb250cm9sbGVkIHRocm91Z2ggc29ja2V0IGNhbGxzIHdpdGggY29tbW9uIG9wdGlvbnMgc3VjaCBhcyBgTVNHX1pFUk9DT1BZYCBhbmQgYGRtYWJ1ZmAsIGFuZCBpdCYjMzk7cyBkZWFsaW5nIHdpdGggZXJyb3IgaGFuZGxpbmcuIFRoaXMgaXMgY2xhc3NpYyBmdXp6aW5nIHRlcnJpdG9yeTogcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBzb2NrZXRzIGluIHRoZSB1c3VhbCBRRU1VIGVudmlyb25tZW50LgoKTm93LCBsZXQmIzM5O3MgdGhpbmsgYWJvdXQgZm9jdXMgc3ltYm9sczogYHRjcF9zZW5kbXNnX2xvY2tlZGAgaXMgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uLCBkZWZpbml0ZWx5IG5lZWRzIGF0dGVudGlvbi4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbGVycyBvZiBgdGNwX3NlbmRtc2dfbG9ja2VkYCBhbmQgYW55IHJlbGF0ZWQgZGV2bWVtIHRyYW5zbWl0IGZ1bmN0aW9ucyB0byBlbnN1cmUgSSYjMzk7dmUgY292ZXJlZCBldmVyeXRoaW5nLiBUaW1lIHRvIGdldCBteSBmdXp6aW5nIHRvb2xzIHJlYWR5IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3Bfc2VuZG1zZ19sb2NrZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvYWZfaW5ldC5jPTEwNjA9Y29uc3Qgc3RydWN0IHByb3RvX29wcyBpbmV0X3N0cmVhbV9vcHMgPSB7XG4tLVxubmV0L2lwdjQvYWZfaW5ldC5jLTEwODUtXHQucmVhZF9za2JcdCAgID0gdGNwX3JlYWRfc2tiLFxubmV0L2lwdjQvYWZfaW5ldC5jOjEwODY6XHQuc2VuZG1zZ19sb2NrZWQgICAgPSB0Y3Bfc2VuZG1zZ19sb2NrZWQsXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTA4Ny1cdC5wZWVrX2xlblx0ICAgPSB0Y3BfcGVla19sZW4sXG4tLVxubmV0L2lwdjQvdGNwLmM9MTExND1FWFBPUlRfU1lNQk9MX0dQTCh0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZCk7XG5uZXQvaXB2NC90Y3AuYy0xMTE1LVxubmV0L2lwdjQvdGNwLmM6MTExNjppbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbm5ldC9pcHY0L3RjcC5jLTExMTcte1xuLS1cbm5ldC9pcHY0L3RjcC5jLTEyMzktXG5uZXQvaXB2NC90Y3AuYzoxMjQwOlx0XHR0cmFjZV90Y3Bfc2VuZG1zZ19sb2NrZWQoc2ssIG1zZywgc2tiLCBzaXplX2dvYWwpO1xubmV0L2lwdjQvdGNwLmMtMTI0MS1cbi0tXG5uZXQvaXB2NC90Y3AuYy0xNDQzLX1cbm5ldC9pcHY0L3RjcC5jOjE0NDQ6RVhQT1JUX1NZTUJPTF9HUEwodGNwX3NlbmRtc2dfbG9ja2VkKTtcbm5ldC9pcHY0L3RjcC5jLTE0NDUtXG5uZXQvaXB2NC90Y3AuYz0xNDQ2PWludCB0Y3Bfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4tLVxubmV0L2lwdjQvdGNwLmMtMTQ1MC1cdGxvY2tfc29jayhzayk7XG5uZXQvaXB2NC90Y3AuYzoxNDUxOlx0cmV0ID0gdGNwX3NlbmRtc2dfbG9ja2VkKHNrLCBtc2csIHNpemUpO1xubmV0L2lwdjQvdGNwLmMtMTQ1Mi1cdHJlbGVhc2Vfc29jayhzayk7XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTkxPXN0YXRpYyBpbnQgdGNwX2JwZl9wdXNoKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLCB1MzIgYXBwbHlfYnl0ZXMsXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTEyMi1cdFx0aW92X2l0ZXJfYnZlYyhcdTAwMjZtc2doZHIubXNnX2l0ZXIsIElURVJfU09VUkNFLCBcdTAwMjZidmVjLCAxLCBzaXplKTtcbm5ldC9pcHY0L3RjcF9icGYuYzoxMjM6XHRcdHJldCA9IHRjcF9zZW5kbXNnX2xvY2tlZChzaywgXHUwMDI2bXNnaGRyLCBzaXplKTtcbm5ldC9pcHY0L3RjcF9icGYuYy0xMjQtXHRcdGlmIChyZXQgXHUwMDNjPSAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTIxNAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBTY29wZSBvZiB0aGUgVENQIFNlbmRtc2cgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UgdG8gYHRjcF9zZW5kbXNnX2xvY2tlZGAuIEZpcnN0LCBJIGFsd2F5cyBzdGFydCBieSBjYXN0aW5nIGEgd2lkZXIgbmV0LCBtYWtpbmcgc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJIG5lZWQgdG8gc2VlIGlmIGFueSBvdGhlciBzeW1ib2xzIG9yIGZpbGVzIGFyZSBpbXBsaWNhdGVkIGJleW9uZCB0aGUgZGlyZWN0IG1vZGlmaWNhdGlvbiBpdHNlbGYuIEJ1dCBiYXNlZCBvbiB0aGUgZGlmZiwgaXQgbG9va3MgbGlrZSBpdCBpcyBqdXN0IHRoZSBvbmUgZnVuY3Rpb24gaW4gYG5ldC9pcHY0L3RjcC5jYCwgd2hpY2ggaXMgYSBnb29kIHNpZ24uCgpBbHJpZ2h0LCBub3cgbGV0JiMzOTtzIHRoaW5rIGFib3V0IHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGZvciB0aGUgcHJlc2VuY2Ugb2YgYElORVRgLCBgTkVUX0RFVk1FTWAsIGBETUFfU0hBUkVEX0JVRkZFUmAsIGFuZCBgUEFHRV9QT09MYC4gVGhhdCBzZXQgdXN1YWxseSBoZWxwcyBuYXJyb3cgaXQgZG93bi4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aG9zZSBiZWNhdXNlIG9mIHRoZSBuYXR1cmUgb2YgdGhlIGZ1bmN0aW9uIEkmIzM5O20gbG9va2luZyBhdC4KCkZyb20gdGhlcmUsIEkmIzM5O2xsIGFzc2VzcyB3aGV0aGVyIGBJTkVUYCBvciBgTkVUX0RFVk1FTWAgaXMgdGhlIHJlbGV2YW50IHNldHRpbmcgaGVyZS4gYElORVRgIGlzIHRoZSBkZWZhdWx0IGFuZCBzaG91bGQgYmUgc3RhbmRhcmQsIGJ1dCBgTkVUX0RFVk1FTWAgaXMgZ29pbmcgdG8gYmUgcmVsZXZhbnQgaWYgaXQgaGFzIGJlZW4gc2V0IHVwIHdpdGggYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGAuIFNvIGxldCYjMzk7cyBzZWUgd2hpY2ggb3B0aW9uIHdlIGFyZSBsb29raW5nIGF0LgoKTm93LCBJJiMzOTtsbCBuZWVkIHRvIGdvIGZ1cnRoZXIgaW50byB0aGUgY29kZSwgYW5kIGV4YW1pbmUgdGhlIGBzb2NrY2Agc3RydWN0dXJlIGFuZCBob3cgaXQgZW5hYmxlcyBgZGV2bWVtYCBhbmQgYGRtYWJ1Zl9pZGAsIGluIGNhc2UgYE5FVF9ERVZNRU1gIGlzIGluIHBsYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RtYWJ1Zl9pZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2bWVtLmM9Mzg0PXN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHN0cnVjdCBzb2NrICpzayxcbm5ldC9jb3JlL2Rldm1lbS5jOjM4NTpcdFx0XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgZG1hYnVmX2lkKVxubmV0L2NvcmUvZGV2bWVtLmMtMzg2LXtcbi0tXG5uZXQvY29yZS9kZXZtZW0uYy0zOTEtXG5uZXQvY29yZS9kZXZtZW0uYzozOTI6XHRiaW5kaW5nID0gbmV0X2Rldm1lbV9sb29rdXBfZG1hYnVmKGRtYWJ1Zl9pZCk7XG5uZXQvY29yZS9kZXZtZW0uYy0zOTMtXHRpZiAoIWJpbmRpbmcgfHwgIWJpbmRpbmctXHUwMDNldHhfdmVjKSB7XG4tLVxubmV0L2NvcmUvZGV2bWVtLmg9MTU1PXN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcbm5ldC9jb3JlL2Rldm1lbS5oOjE1NjpuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGRtYWJ1Zl9pZCk7XG5uZXQvY29yZS9kZXZtZW0uaC0xNTctc3RydWN0IG5ldF9pb3YgKlxuLS1cbm5ldC9jb3JlL2Rldm1lbS5oPTIyOD1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcbm5ldC9jb3JlL2Rldm1lbS5oOjIyOTpuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGRtYWJ1Zl9pZClcbm5ldC9jb3JlL2Rldm1lbS5oLTIzMC17XG4tLVxubmV0L2NvcmUvc29jay5jPTMwMjY9aW50IF9fc29ja19jbXNnX3NlbmQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgY21zZ2hkciAqY21zZyxcbi0tXG5uZXQvY29yZS9zb2NrLmMtMzExNS1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbm5ldC9jb3JlL3NvY2suYzozMTE2Olx0XHRzb2NrYy1cdTAwM2VkbWFidWZfaWQgPSAqKHUzMiAqKUNNU0dfREFUQShjbXNnKTtcbm5ldC9jb3JlL3NvY2suYy0zMTE3LVx0XHRicmVhaztcbi0tXG5uZXQvaXB2NC90Y3AuYz0xMTE2PWludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuLS1cbm5ldC9pcHY0L3RjcC5jLTExNDctXHRcdFx0dWFyZyA9IG1zZ196ZXJvY29weV9yZWFsbG9jKHNrLCBzaXplLCBza2JfemNvcHkoc2tiKSxcbm5ldC9pcHY0L3RjcC5jOjExNDg6XHRcdFx0XHRcdFx0ICAgICFzb2NrY19lcnIgXHUwMDI2XHUwMDI2IHNvY2tjLmRtYWJ1Zl9pZCk7XG5uZXQvaXB2NC90Y3AuYy0xMTQ5LVx0XHRcdGlmICghdWFyZykge1xuLS1cbm5ldC9pcHY0L3RjcC5jLTExNTctXG5uZXQvaXB2NC90Y3AuYzoxMTU4Olx0XHRcdGlmICghc29ja2NfZXJyIFx1MDAyNlx1MDAyNiBzb2NrYy5kbWFidWZfaWQpIHtcbm5ldC9pcHY0L3RjcC5jOjExNTk6XHRcdFx0XHRiaW5kaW5nID0gbmV0X2Rldm1lbV9nZXRfYmluZGluZyhzaywgc29ja2MuZG1hYnVmX2lkKTtcbm5ldC9pcHY0L3RjcC5jLTExNjAtXHRcdFx0XHRpZiAoSVNfRVJSKGJpbmRpbmcpKSB7XG4tLVxubmV0L2lwdjQvdGNwLmMtMTE3MS1cbm5ldC9pcHY0L3RjcC5jOjExNzI6XHRpZiAoIXNvY2tjX2VyciBcdTAwMjZcdTAwMjYgc29ja2MuZG1hYnVmX2lkIFx1MDAyNlx1MDAyNiAoemMgIT0gTVNHX1pFUk9DT1BZIHx8ICFiaW5kaW5nKSkge1xubmV0L2lwdjQvdGNwLmMtMTE3My1cdFx0ZXJyID0gLUVJTlZBTDtcbi0tXG5uZXQvaXB2NC90Y3AuYz0yNDk5PXN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfZG1hYnVmKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3AuYy0yNTk4LVx0XHRcdFx0ZG1hYnVmX2Ntc2cuZnJhZ190b2tlbiA9IHRjcF94YV9wb29sLnRva2Vuc1t0Y3BfeGFfcG9vbC5pZHhdO1xubmV0L2lwdjQvdGNwLmM6MjU5OTpcdFx0XHRcdGRtYWJ1Zl9jbXNnLmRtYWJ1Zl9pZCA9IG5ldF9kZXZtZW1faW92X2JpbmRpbmdfaWQobmlvdik7XG5uZXQvaXB2NC90Y3AuYy0yNjAwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjYxMgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIGBuZXQvY29yZS9zb2NrLmNgKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IHRoZSBwYXJzaW5nIG9mIGBzb2NrYy0mZ3Q7ZG1hYnVmX2lkYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBgbmV0L2NvcmUvc29jay5jYCBmZWVscyBsaWtlIHRoZSBsaWtlbHkgcGxhY2Ugd2hlcmUgdGhpcyBpbnRlcmFjdGlvbiBpcyBoYW5kbGVkLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5JiMzOTtyZSBwdWxsaW5nIHRoYXQgdmFsdWUgYXBhcnQgYW5kIHdoYXQgaXRzIGltcGxpY2F0aW9ucyBhcmUuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGhlcmUsIHNlZSBpZiBpdCYjMzk7cyBnb3QgYW55IHVuZXhwZWN0ZWQgYmVoYXZpb3JzLiBMZXQmIzM5O3Mgc3RhcnQgZGlnZ2luZyBpbiB0aGVyZSBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuIEkgZXhwZWN0IHRoYXQgd2lsbCBiZSB3aGVyZSB0aGUgcGFyc2luZywgYW5kIHBvdGVudGlhbGx5IHZhbGlkYXRpb24sIGFyZSBoYXBwZW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29jay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzEwNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMTA1Olx0XHRcdGJyZWFrO1xuMzEwNjpcdFx0Y2FzZSBTT19QUklPUklUWTpcbjMxMDc6XHRcdFx0aWYgKGNtc2ctXHUwMDNlY21zZ19sZW4gIT0gQ01TR19MRU4oc2l6ZW9mKHUzMikpKVxuMzEwODpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzEwOTpcdFx0XHRpZiAoIXNrX3NldF9wcmlvX2FsbG93ZWQoc2ssICoodTMyICopQ01TR19EQVRBKGNtc2cpKSlcbjMxMTA6XHRcdFx0XHRyZXR1cm4gLUVQRVJNO1xuMzExMTpcdFx0XHRzb2NrYy1cdTAwM2Vwcmlvcml0eSA9ICoodTMyICopQ01TR19EQVRBKGNtc2cpO1xuMzExMjpcdFx0XHRicmVhaztcbjMxMTM6XHRcdGNhc2UgU0NNX0RFVk1FTV9ETUFCVUY6XG4zMTE0Olx0XHRcdGlmIChjbXNnLVx1MDAzZWNtc2dfbGVuICE9IENNU0dfTEVOKHNpemVvZih1MzIpKSlcbjMxMTU6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjMxMTY6XHRcdFx0c29ja2MtXHUwMDNlZG1hYnVmX2lkID0gKih1MzIgKilDTVNHX0RBVEEoY21zZyk7XG4zMTE3Olx0XHRcdGJyZWFrO1xuMzExODpcdFx0ZGVmYXVsdDpcbjMxMTk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zMTIwOlx0XHR9XG4zMTIxOlx0XHRyZXR1cm4gMDtcbjMxMjI6XHR9XG4zMTIzOlx0RVhQT1JUX1NZTUJPTChfX3NvY2tfY21zZ19zZW5kKTtcbjMxMjQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxNTMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBETUEtQlVGIFVzYWdlIGluIFNvY2tldCBDb250cm9sIE1lc3NhZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBTQ01fREVWTUVNX0RNQUJVRmAgdGhpbmcsIGFuZCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGJlaW5nIGhhbmRsZWQgdW5jb25kaXRpb25hbGx5IGluIGBfX3NvY2tfY21zZ19zZW5kYC4gVGhhdCYjMzk7cyBhIGJpdCBvZiBhIHJlZCBmbGFnIC0gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IGRpcmVjdCBwYXJzaW5nLiAgVGhlbiBJIHNlZSB0aGF0IGBDT05GSUdfTkVUX0RFVk1FTWAgaXMgYXV0b21hdGljYWxseSBlbmFibGVkIGlmIHdlIGhhdmUgYm90aCBgRE1BX1NIQVJFRF9CVUZGRVJgIGFuZCBgUEFHRV9QT09MYCBkZWZpbmVkLiBJbnRlcmVzdGluZy4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgZG9lcyBgQ09ORklHX05FVF9ERVZNRU1gICpyZWx5KiBvbiB0aG9zZSB0d28sIG9yIGlzIGl0IGp1c3QgYSBjb252ZW5pZW50IGRlZmF1bHQ/ICBJIG5lZWQgdG8gY2xhcmlmeSB0aGF0IGRlcGVuZGVuY3kuICBUbyBuYWlsIHRoaXMgZG93biwgSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBkcml2ZXJzL2RtYS1idWYvS2NvbmZpZ2AgZmlsZSBhbmQgY29uZmlybSB0aGUgcmVsYXRpb25zaGlwIHdpdGggYERNQV9TSEFSRURfQlVGRkVSYC4gSSBiZXQgdGhlcmUmIzM5O3Mgc29tZSB1c2VmdWwgY29udGV4dCBhYm91dCBgUEFHRV9QT09MYCBpbiB0aGVyZSBhcyB3ZWxsLiBUaW1lIHRvIGRpZyBpbiBhbmQgY2xhcmlmeSB0aGlzIHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRE1BX1NIQVJFRF9CVUZGRVImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL0tjb25maWc9MjEzPXNvdXJjZSBcJiMzNDtkcml2ZXJzL2Jhc2UvcmVnbWFwL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvYmFzZS9LY29uZmlnLTIxNC1cbmRyaXZlcnMvYmFzZS9LY29uZmlnOjIxNTpjb25maWcgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvYmFzZS9LY29uZmlnLTIxNi1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1ODcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyB0aGUgRE1BX1NIQVJFRF9CVUZGRVIgRGVmaW5pdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhpcyBgRE1BX1NIQVJFRF9CVUZGRVJgIHRoaW5nLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyBhbHdheXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBzb3VyY2UgY29kZSwgc28gSSYjMzk7bGwgaGVhZCBvdmVyIHRvIHRoZSBgZHJpdmVycy9iYXNlL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQg4oCTIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIG9mdGVuIGRlZmluZSBhbmQgZXhwbGFpbiB0aGVzZSBraW5kcyBvZiBzeW1ib2xzLCBlc3BlY2lhbGx5IGlmIHRoZXkmIzM5O3JlIGZ1bmRhbWVudGFsIHRvIHRoZSBkcml2ZXIgbW9kZWwuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgYSBjb25kaXRpb25hbCBkZWZpbml0aW9uLCBwb3NzaWJseSB0aWVkIHRvIG90aGVyIGhhcmR3YXJlIGZlYXR1cmVzIG9yIHN5c3RlbSBjb25maWd1cmF0aW9ucy4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdCwgYW5kIGFueSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gb3IgY29tbWVudHMgdGhhdCBtaWdodCBwcm92aWRlIGNvbnRleHQuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBmaWxlIHJldmVhbHMuLi4ga25vd2luZyB0aGUga2VybmVsLCBJIHdvdWxkbiYjMzk7dCBiZSBzdXJwcmlzZWQgdG8gZmluZCBzb21lIGhpZGRlbiBjb21wbGV4aXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIxMzpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL2Jhc2UvcmVnbWFwL0tjb25maWdcJiMzNDtcbiAyMTQ6XHRcbiAyMTU6XHRjb25maWcgRE1BX1NIQVJFRF9CVUZGRVJcbiAyMTY6XHRcdGJvb2xcbiAyMTc6XHRcdGRlZmF1bHQgblxuIDIxODpcdFx0c2VsZWN0IElSUV9XT1JLXG4gMjE5Olx0XHRoZWxwXG4gMjIwOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGZyYW1ld29yayBmb3IgYnVmZmVyLXNoYXJpbmcgYmV0d2VlblxuIDIyMTpcdFx0ICBtdWx0aXBsZSBkcml2ZXJzLiBBIGJ1ZmZlciBpcyBhc3NvY2lhdGVkIHdpdGggYSBmaWxlIHVzaW5nIGRyaXZlclxuIDIyMjpcdFx0ICBBUElzIGV4dGVuc2lvbjsgdGhlIGZpbGUmIzM5O3MgZGVzY3JpcHRvciBjYW4gdGhlbiBiZSBwYXNzZWQgb24gdG8gb3RoZXJcbiAyMjM6XHRcdCAgZHJpdmVyLlxuIDIyNDpcdFxuIDIyNTpcdGNvbmZpZyBHRU5FUklDX0FSQ0hfVE9QT0xPR1lcbiAyMjY6XHRcdGJvb2xcbiAyMjc6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwMTMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIE5ldHdvcmsgQnVmZmVyIE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgd2hlcmUgZXhhY3RseSBpcyBgUEFHRV9QT09MYCBkZWZpbmVkPyBUaGF0JiMzOTtzIHRoZSBrZXkgdmFyaWFibGUgaGVyZSwgYW5kIEkgbmVlZCB0byB0cmFjayBkb3duIGl0cyBvcmlnaW4uIExldCBtZSBxdWlja2x5IGp1bXAgaW50byB0aGUga2VybmVsIHNvdXJjZSB0cmVlLi4uIEkmIzM5O20gcHJldHR5IHN1cmUgaXQmIzM5O3MgaGFuZ2luZyBvdXQgc29tZXdoZXJlIGluIHRoZSBgbmV0L2NvcmUvYCBkaXJlY3RvcnksIHNwZWNpZmljYWxseSB3aXRoaW4gYSBLY29uZmlnIGZpbGUuIE9yIHNvbWV0aGluZyBzaW1pbGFyLCBvYnZpb3VzbHkuIEl0ICpoYXMqIHRvIGJlIGEgY29uZmlnIG9wdGlvbi4gR290dGEgZmluZCB0aGF0IGRlZmluaXRpb24hIE1heWJlIGBuZXQvY29yZS9LY29uZmlnYCBpcyB0aGUgYmVzdCBiZXQgdG8gc3RhcnQgd2l0aDsgdGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSBmb3VuZGF0aW9uYWwgc3R1ZmYgcmVzaWRlcy4gTGV0JiMzOTtzIHNlZSBpZiB0aGF0IGZpbGUgY29udGFpbnMgdGhlIHByZWNpc2UgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBBR0VfUE9PTFxcYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz00ODc9Y29uZmlnIE5FVF9ERVZMSU5LXG4tLVxubmV0L0tjb25maWctNDkwLVxubmV0L0tjb25maWc6NDkxOmNvbmZpZyBQQUdFX1BPT0xcbm5ldC9LY29uZmlnLTQ5Mi1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyNzgKCQkJCQkJCW91dHB1dDogMTc3CgkJCQkJCQl0aG91Z2h0czogMzQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgQ2FuZGlkYXRlIEFzc2Vzc21lbnQ6IFRDUCBaZXJvLUNvcHkgYW5kIERldm1lbSBJbnRlZ3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3IgZnV6emluZy4gRmlyc3QsIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGRlcGVuZGVuY2llcy4gIGBORVRfREVWTUVNYCBpcyBjb250aW5nZW50IG9uIGVpdGhlciBgRE1BX1NIQVJFRF9CVUZGRVJgIGFuZCBgUEFHRV9QT09MYCBiZWluZyBlbmFibGVkLCBvciBqdXN0IGBORVRfREVWTUVNYCBkaXJlY3RseSwgYW5kIHdlICpkZWZpbml0ZWx5KiBuZWVkIGBJTkVUYCBmb3IgYHRjcC5jYC4gIFNvLCBteSBjb25maWcgbGlzdCBpczogYElORVRgLCBgTkVUX0RFVk1FTWAsIGBETUFfU0hBUkVEX0JVRkZFUmAsIGFuZCBgUEFHRV9QT09MYC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUuCgpOb3csIHRoZSBpbXBvcnRhbnQgc3ltYm9scyBoZXJlLCB0aGUgb25lcyBJIG5lZWQgdG8gcmVhbGx5IHVuZGVyc3RhbmQsIGFyZSBgdGNwX3NlbmRtc2dfbG9ja2VkYCwgYHRjcF9zZW5kbXNnYCwgYW5kIGBuZXRfZGV2bWVtX2dldF9iaW5kaW5nYC4KCklzIHRoaXMgYWN0dWFsbHkgd29ydGggdGhlIGVmZm9ydD8gIEFic29sdXRlbHkuIFRoaXMgcGF0Y2ggZnVuZGFtZW50YWxseSBhbHRlcnMgZXhlY3V0YWJsZSBsb2dpYyB3aXRoaW4gYHRjcF9zZW5kbXNnX2xvY2tlZGAsIHJpZ2h0IGluIHRoZSBoZWFydCBvZiB0aGUgVENQIG5ldHdvcmtpbmcgc3Vic3lzdGVtLiBJdCYjMzk7cyBtb2RpZnlpbmcgdGhlIHZhbGlkYXRpb24gY3JpdGVyaWEgZm9yIHplcm8tY29weSBhbmQgZGV2bWVtIGRtYWJ1ZiB0cmFuc21pc3Npb25zIHZpYSBUQ1AmIzM5O3MgYHNlbmRtc2dgIGZ1bmN0aW9uLiBJdCYjMzk7cyBhZGRpbmcgdGlnaHRlciwgbW9yZSBjb3JyZWN0IGNoZWNrcyBvbiB0aGUgemVyb2NvcHkgYW5kIGRldm1lbSBiaW5kaW5nLiBUaGUgY3J1Y2lhbCBwYXJ0PyAgVGhpcyBpcyByZWFjaGFibGUgZGlyZWN0bHkgZnJvbSB1c2VyLXNwYWNlIFRDUCBzb2NrZXRzIHVzaW5nIGJvdGggYE1TR19aRVJPQ09QWWAgKmFuZCogYFNDTV9ERVZNRU1fRE1BQlVGYCBjbXNncy4gVGhhdCBtYWtlcyBpdCBhIHByaW1lIHRhcmdldC4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIGRvdWJsZS1jaGVjayB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZzoKMS4gIGBXb3J0aEZ1enppbmdgOiBUcnVlLgoyLiAgYEZvY3VzU3ltYm9sc2A6IGBbJiMzNDt0Y3Bfc2VuZG1zZ19sb2NrZWQmIzM0OywgJiMzNDt0Y3Bfc2VuZG1zZyYjMzQ7LCAmIzM0O25ldF9kZXZtZW1fZ2V0X2JpbmRpbmcmIzM0O11gCjMuICBgRW5hYmxlQ29uZmlnc2A6IGBbJiMzNDtJTkVUJiMzNDssICYjMzQ7TkVUX0RFVk1FTSYjMzQ7LCAmIzM0O0RNQV9TSEFSRURfQlVGRkVSJiMzNDssICYjMzQ7UEFHRV9QT09MJiMzNDtdYAo0LiAgYFJlYXNvbmluZ2A6IFRoaXMgY2hhbmdlcyBjcml0aWNhbCBUQ1AgbG9naWMgZm9yIHplcm8tY29weSBhbmQgZGV2bWVtIGludGVyYWN0aW9ucy4gSXQmIzM5O3MgcmVhY2hhYmxlIHZpYSBjb21tb24gdXNlci1zcGFjZSBzb2NrZXQgY2FsbHMuIEl0IG1ha2VzIGEgcGVyZmVjdCBmdXp6aW5nIGNhbmRpZGF0ZS4KCk9rYXksIEkmIzM5O20gcmVhZHkgdG8gcHJvY2VlZC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O05FVF9ERVZNRU0mIzM0OywKICAgICYjMzQ7RE1BX1NIQVJFRF9CVUZGRVImIzM0OywKICAgICYjMzQ7UEFHRV9QT09MJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX3NlbmRtc2dfbG9ja2VkJiMzNDssCiAgICAmIzM0O3RjcF9zZW5kbXNnJiMzNDssCiAgICAmIzM0O25ldF9kZXZtZW1fZ2V0X2JpbmRpbmcmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdmFsaWRhdGlvbiBsb2dpYyBpbiB0Y3Bfc2VuZG1zZ19sb2NrZWQoKSB3aGVuIHByb2Nlc3NpbmcgVENQIHplcm8tY29weSBtZXNzYWdlcyB3aXRoIGRldmljZSBtZW1vcnkgZG1hYnVmIElEcyAoU0NNX0RFVk1FTV9ETUFCVUYpLiBJdCBlbnN1cmVzIHRoYXQgdHJhbnNtaXNzaW9ucyB3aXRoIGRtYWJ1Zl9pZCBmYWlsIHdpdGggLUVJTlZBTCB1bmxlc3MgemVyb2NvcHkgaXMgYWN0dWFsbHkgZW5hYmxlZCAoemMgPT0gTVNHX1pFUk9DT1BZKSBhbmQgYSB2YWxpZCBkZXZtZW0gYmluZGluZyBleGlzdHMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUgVENQIHNvY2tldCB0cmFuc21pdCBwYXRocyB0aGF0IGNhbiBiZSB0ZXN0ZWQgdXNpbmcgc3RhbmRhcmQgc29ja2V0IHN5c2NhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O05FVF9ERVZNRU0mIzM0OywKICAgICYjMzQ7RE1BX1NIQVJFRF9CVUZGRVImIzM0OywKICAgICYjMzQ7UEFHRV9QT09MJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX3NlbmRtc2dfbG9ja2VkJiMzNDssCiAgICAmIzM0O3RjcF9zZW5kbXNnJiMzNDssCiAgICAmIzM0O25ldF9kZXZtZW1fZ2V0X2JpbmRpbmcmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdmFsaWRhdGlvbiBsb2dpYyBpbiB0Y3Bfc2VuZG1zZ19sb2NrZWQoKSB3aGVuIHByb2Nlc3NpbmcgVENQIHplcm8tY29weSBtZXNzYWdlcyB3aXRoIGRldmljZSBtZW1vcnkgZG1hYnVmIElEcyAoU0NNX0RFVk1FTV9ETUFCVUYpLiBJdCBlbnN1cmVzIHRoYXQgdHJhbnNtaXNzaW9ucyB3aXRoIGRtYWJ1Zl9pZCBmYWlsIHdpdGggLUVJTlZBTCB1bmxlc3MgemVyb2NvcHkgaXMgYWN0dWFsbHkgZW5hYmxlZCAoemMgPT0gTVNHX1pFUk9DT1BZKSBhbmQgYSB2YWxpZCBkZXZtZW0gYmluZGluZyBleGlzdHMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUgVENQIHNvY2tldCB0cmFuc21pdCBwYXRocyB0aGF0IGNhbiBiZSB0ZXN0ZWQgdXNpbmcgc3RhbmRhcmQgc29ja2V0IHN5c2NhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDowODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjA4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdGlnaHRlbnMgZXJyb3IgdmFsaWRhdGlvbiBpbiBgdGNwX3NlbmRtc2dfbG9ja2VkKClgIHdoZW4gYHNvY2tjLmRtYWJ1Zl9pZGAgaXMgc3VwcGxpZWQsIGVuc3VyaW5nIHRoYXQgZGV2bWVtIHRyYW5zbWlzc2lvbiBpcyBvbmx5IHBlcm1pdHRlZCB3aGVuIHplcm8tY29weSBpcyBhY3RpdmUgKGB6YyA9PSBNU0dfWkVST0NPUFlgKSBhbmQgYSB2YWxpZCBkZXZtZW0gYmluZGluZyBleGlzdHMgKGBiaW5kaW5nICE9IE5VTExgKS4gQWxsIHZhcmlhYmxlcyBldmFsdWF0ZWQgaW4gdGhpcyBjb25kaXRpb24gKGBzb2NrY19lcnJgLCBgc29ja2NgLCBgemNgLCBhbmQgYGJpbmRpbmdgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZXMuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBtZW1vcnkgY29weWluZyBsb2dpYyBpbiBhIG1hbm5lciB0aGF0IGNvdWxkIGNhdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBpbnZhbGlkIHBvaW50ZXJzIG9yIHN0YXRlIGludmFyaWFudHMgYXJlIGFkZHJlc3NhYmxlIGJ5IHN0YW5kYXJkIGRldGVjdG9ycyAvIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwYjJmMjJjNzI2OTYwM2Y4MzY1ZTE2ZDQyYTI5NGYwZTg2YWIzMTFhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgNiAwMDowNzo0NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmMKaW5kZXggYjQyMzdkMGU5OTRkNi4uMTBmNTgyODFiZTE3YiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwLmMKQEAgLTExNjksOCAmIzQzOzExNjksNyBAQCBpbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSkKIAkJCXpjID0gTVNHX1NQTElDRV9QQUdFUzsKIAl9CiAKLQlpZiAoIXNvY2tjX2VyciAmYW1wOyZhbXA7IHNvY2tjLmRtYWJ1Zl9pZCAmYW1wOyZhbXA7Ci0JICAgICghKGZsYWdzICZhbXA7IE1TR19aRVJPQ09QWSkgfHwgIXNvY2tfZmxhZyhzaywgU09DS19aRVJPQ09QWSkpKSB7CiYjNDM7CWlmICghc29ja2NfZXJyICZhbXA7JmFtcDsgc29ja2MuZG1hYnVmX2lkICZhbXA7JmFtcDsgKHpjICE9IE1TR19aRVJPQ09QWSB8fCAhYmluZGluZykpIHsKIAkJZXJyID0gLUVJTlZBTDsKIAkJZ290byBvdXRfZXJyOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIHRoZSBDb2RlOiBUQ1AgSW1wbGVtZW50YXRpb24gRGVlcCBEaXZlKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHdvcmsuIFRoaXMgbmV3IHBhdGNoIG5lZWRzIGEgdGhvcm91Z2ggcmV2aWV3LiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB0aGUgY29udGV4dC4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIGNvZGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgYG5ldC9pcHY0L3RjcC5jYCBmaWxlLiBHaXZlbiB0aGUgbGluZSBudW1iZXIgcHJvdmlkZWQsIGFyb3VuZCBsaW5lIDExNjksIEkmIzM5O2xsIHByb2JhYmx5IGJlIGFibGUgdG8gZGV0ZXJtaW5lIHdoYXQgaXMgYmVpbmcgY2hhbmdlZC4KCkkgbmVlZCB0byBxdWlja2x5IGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHNvIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB3aWxsIGJlIHRoZSBiZXN0IHRvb2wgZm9yIHRoaXM7IGl0JiMzOTtzIHRoZSBmYXN0ZXN0IHdheSB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExNDA6XHRcdGlmICgoZmxhZ3MgXHUwMDI2IE1TR19aRVJPQ09QWSkgXHUwMDI2XHUwMDI2IHNpemUpIHtcbjExNDE6XHRcdFx0aWYgKG1zZy1cdTAwM2Vtc2dfdWJ1Zikge1xuMTE0MjpcdFx0XHRcdHVhcmcgPSBtc2ctXHUwMDNlbXNnX3VidWY7XG4xMTQzOlx0XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3JvdXRlX2NhcHMgXHUwMDI2IE5FVElGX0ZfU0cpXG4xMTQ0Olx0XHRcdFx0XHR6YyA9IE1TR19aRVJPQ09QWTtcbjExNDU6XHRcdFx0fSBlbHNlIGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfWkVST0NPUFkpKSB7XG4xMTQ2Olx0XHRcdFx0c2tiID0gdGNwX3dyaXRlX3F1ZXVlX3RhaWwoc2spO1xuMTE0NzpcdFx0XHRcdHVhcmcgPSBtc2dfemVyb2NvcHlfcmVhbGxvYyhzaywgc2l6ZSwgc2tiX3pjb3B5KHNrYiksXG4xMTQ4Olx0XHRcdFx0XHRcdFx0ICAgICFzb2NrY19lcnIgXHUwMDI2XHUwMDI2IHNvY2tjLmRtYWJ1Zl9pZCk7XG4xMTQ5Olx0XHRcdFx0aWYgKCF1YXJnKSB7XG4xMTUwOlx0XHRcdFx0XHRlcnIgPSAtRU5PQlVGUztcbjExNTE6XHRcdFx0XHRcdGdvdG8gb3V0X2VycjtcbjExNTI6XHRcdFx0XHR9XG4xMTUzOlx0XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3JvdXRlX2NhcHMgXHUwMDI2IE5FVElGX0ZfU0cpXG4xMTU0Olx0XHRcdFx0XHR6YyA9IE1TR19aRVJPQ09QWTtcbjExNTU6XHRcdFx0XHRlbHNlXG4xMTU2Olx0XHRcdFx0XHR1YXJnX3RvX21zZ3pjKHVhcmcpLVx1MDAzZXplcm9jb3B5ID0gMDtcbjExNTc6XHRcbjExNTg6XHRcdFx0XHRpZiAoIXNvY2tjX2VyciBcdTAwMjZcdTAwMjYgc29ja2MuZG1hYnVmX2lkKSB7XG4xMTU5Olx0XHRcdFx0XHRiaW5kaW5nID0gbmV0X2Rldm1lbV9nZXRfYmluZGluZyhzaywgc29ja2MuZG1hYnVmX2lkKTtcbjExNjA6XHRcdFx0XHRcdGlmIChJU19FUlIoYmluZGluZykpIHtcbjExNjE6XHRcdFx0XHRcdFx0ZXJyID0gUFRSX0VSUihiaW5kaW5nKTtcbjExNjI6XHRcdFx0XHRcdFx0YmluZGluZyA9IE5VTEw7XG4xMTYzOlx0XHRcdFx0XHRcdGdvdG8gb3V0X2VycjtcbjExNjQ6XHRcdFx0XHRcdH1cbjExNjU6XHRcdFx0XHR9XG4xMTY2Olx0XHRcdH1cbjExNjc6XHRcdH0gZWxzZSBpZiAodW5saWtlbHkobXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX1NQTElDRV9QQUdFUykgXHUwMDI2XHUwMDI2IHNpemUpIHtcbjExNjg6XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3JvdXRlX2NhcHMgXHUwMDI2IE5FVElGX0ZfU0cpXG4xMTY5Olx0XHRcdFx0emMgPSBNU0dfU1BMSUNFX1BBR0VTO1xuMTE3MDpcdFx0fVxuMTE3MTpcdFxuMTE3MjpcdFx0aWYgKCFzb2NrY19lcnIgXHUwMDI2XHUwMDI2IHNvY2tjLmRtYWJ1Zl9pZCBcdTAwMjZcdTAwMjYgKHpjICE9IE1TR19aRVJPQ09QWSB8fCAhYmluZGluZykpIHtcbjExNzM6XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjExNzQ6XHRcdFx0Z290byBvdXRfZXJyO1xuMTE3NTpcdFx0fVxuMTE3NjpcdFxuMTE3NzpcdFx0aWYgKHVubGlrZWx5KGZsYWdzIFx1MDAyNiBNU0dfRkFTVE9QRU4gfHxcbjExNzg6XHRcdFx0ICAgICBpbmV0X3Rlc3RfYml0KERFRkVSX0NPTk5FQ1QsIHNrKSkgXHUwMDI2XHUwMDI2XG4xMTc5Olx0XHQgICAgIXRwLVx1MDAzZXJlcGFpcikge1xuMTE4MDpcdFx0XHRlcnIgPSB0Y3Bfc2VuZG1zZ19mYXN0b3BlbihzaywgbXNnLCBcdTAwMjZjb3BpZWRfc3luLCBzaXplLCB1YXJnKTtcbjExODE6XHRcdFx0aWYgKGVyciA9PSAtRUlOUFJPR1JFU1MgXHUwMDI2XHUwMDI2IGNvcGllZF9zeW4gXHUwMDNlIDApXG4xMTgyOlx0XHRcdFx0Z290byBvdXQ7XG4xMTgzOlx0XHRcdGVsc2UgaWYgKGVycilcbjExODQ6XHRcdFx0XHRnb3RvIG91dF9lcnI7XG4xMTg1Olx0XHR9XG4xMTg2Olx0XG4xMTg3Olx0XHR0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIGZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xuMTE4ODpcdFxuMTE4OTpcdFx0dGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spOyAgLyogaXMgc2VuZGluZyBhcHBsaWNhdGlvbi1saW1pdGVkPyAqL1xuMTE5MDpcdFxuMTE5MTpcdFx0LyogV2FpdCBmb3IgYSBjb25uZWN0aW9uIHRvIGZpbmlzaC4gT25lIGV4Y2VwdGlvbiBpcyBUQ1AgRmFzdCBPcGVuXG4xMTkyOlx0XHQgKiAocGFzc2l2ZSBzaWRlKSB3aGVyZSBkYXRhIGlzIGFsbG93ZWQgdG8gYmUgc2VudCBiZWZvcmUgYSBjb25uZWN0aW9uXG4xMTkzOlx0XHQgKiBpcyBmdWxseSBlc3RhYmxpc2hlZC5cbjExOTQ6XHRcdCAqL1xuMTE5NTpcdFx0aWYgKCgoMSBcdTAwM2NcdTAwM2Mgc2stXHUwMDNlc2tfc3RhdGUpIFx1MDAyNiB+KFRDUEZfRVNUQUJMSVNIRUQgfCBUQ1BGX0NMT1NFX1dBSVQpKSBcdTAwMjZcdTAwMjZcbjExOTY6XHRcdCAgICAhdGNwX3Bhc3NpdmVfZmFzdG9wZW4oc2spKSB7XG4xMTk3Olx0XHRcdGVyciA9IHNrX3N0cmVhbV93YWl0X2Nvbm5lY3Qoc2ssIFx1MDAyNnRpbWVvKTtcbjExOTg6XHRcdFx0aWYgKGVyciAhPSAwKVxuMTE5OTpcdFx0XHRcdGdvdG8gZG9fZXJyb3I7XG4xMjAwOlx0XHR9XG4xMjAxOlx0XG4xMjAyOlx0XHRpZiAodW5saWtlbHkodHAtXHUwMDNlcmVwYWlyKSkge1xuMTIwMzpcdFx0XHRpZiAodHAtXHUwMDNlcmVwYWlyX3F1ZXVlID09IFRDUF9SRUNWX1FVRVVFKSB7XG4xMjA0Olx0XHRcdFx0Y29waWVkID0gdGNwX3NlbmRfcmN2cShzaywgbXNnLCBzaXplKTtcbjEyMDU6XHRcdFx0XHRnb3RvIG91dF9ub3B1c2g7XG4xMjA2Olx0XHRcdH1cbjEyMDc6XHRcbjEyMDg6XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjEyMDk6XHRcdFx0aWYgKHRwLVx1MDAzZXJlcGFpcl9xdWV1ZSA9PSBUQ1BfTk9fUVVFVUUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MjEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgYHRjcF9zZW5kbXNnX2xvY2tlZGAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgKmJlZm9yZSogbGluZSAxMTQwIGluIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLiBUaGF0IGZ1bmN0aW9uIGlzIGNyaXRpY2FsLCBlc3BlY2lhbGx5IHdoZW4gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgc2VuZGluZyBkYXRhIG92ZXIgVENQLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHByZS1jb25kaXRpb25zIGFyZSBlc3RhYmxpc2hlZCwgd2hhdCYjMzk7cyBiZWluZyBpbml0aWFsaXplZCwgYW5kIHdoYXQgZGVjaXNpb25zIGFyZSBiZWluZyBtYWRlIHRoYXQgd2lsbCBpbmZsdWVuY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIGxlYWRpbmcgdXAgdG8gdGhhdCBwb2ludC4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgY29udHJvbCBmbG93LCBsb29rIGF0IHZhcmlhYmxlIGFzc2lnbm1lbnRzLCBhbmQgY29uc2lkZXIgYW55IHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcywgcGFydGljdWxhcmx5IHRoZSBgc29ja2Agc3RydWN0dXJlLCB0aGUgYHRjcF9zb2NrYCBzdHJ1Y3R1cmUsIGFuZCBhbnkgcmVsYXRlZCBxdWV1ZXMuIElzIHRoaXMgaGFwcGVuaW5nIGR1cmluZyBhIHJlZ3VsYXIgc2VuZCwgb3IgaXMgaXQgcmVsYXRlZCB0byBzb21ldGhpbmcgbGlrZSB1cmdlbnQgZGF0YSwgb3IgYSBzb2NrZXQgc2h1dGRvd24/IEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhlIGNhbGxzIHRoYXQgbGVhZCBpbnRvIHRoaXMgZnVuY3Rpb24gZnJvbSB0aGUgdXBwZXIgbGF5ZXJzIHRvIGdyYXNwIHRoZSBjb250ZXh0LiBXaGF0IGxlZCB1cyBoZXJlPyBXaGF0IGV2ZW50cyB0cmlnZ2VyZWQgdGhpcyBjYWxsPyBUaGlzIGlzIGdvaW5nIHRvIGJlIGFib3V0IHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBsZXRlIHN0YXRlIGJlZm9yZSB0aGF0IGxpbmUsIHNvIEkgY2FuIHN0YXJ0IHRvIGluZmVyIHdoYXQgY2hhbmdlcyBhcmUgdGFraW5nIHBsYWNlLCBhbmQgd2h5LiBJJiMzOTtsbCBuZWVkIHRvIGNvcnJlbGF0ZSB0aGUgdmFyaWFibGVzIGF0IGxpbmUgMTE0MCB0byB0aGVpciB2YWx1ZXMgYXQgdGhlIGVudHJ5IHRvIHRoZSBmdW5jdGlvbiwgYW5kIGxvb2sgZm9yIGFueSBjbHVlcyBhYm91dCB0aGUgY29uZGl0aW9ucy4gRmluYWxseSwgYWZ0ZXIgZG9pbmcgdGhpcyBwcmVsaW1pbmFyeSBpbnZlc3RpZ2F0aW9uLCBJJiMzOTtsbCBiZSBpbiBhIGJldHRlciBwb3NpdGlvbiB0byBzZWUgdGhlIGJyb2FkZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTEwMDpcdHtcbjExMDE6XHRcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xuMTEwMjpcdFxuMTEwMzpcdFx0aWYgKC8qIFdlIGhhdmUgbGVzcyB0aGFuIG9uZSBwYWNrZXQgdG8gc2VuZC4gKi9cbjExMDQ6XHRcdCAgICB0cC1cdTAwM2V3cml0ZV9zZXEgLSB0cC1cdTAwM2VzbmRfbnh0IFx1MDAzYyB0cC1cdTAwM2Vtc3NfY2FjaGUgXHUwMDI2XHUwMDI2XG4xMTA1Olx0XHQgICAgLyogTm90aGluZyBpbiBzZW5kaW5nIGhvc3QmIzM5O3MgcWRpc2MgcXVldWVzIG9yIE5JQyB0eCBxdWV1ZS4gKi9cbjExMDY6XHRcdCAgICBza193bWVtX2FsbG9jX2dldChzaykgXHUwMDNjIFNLQl9UUlVFU0laRSgxKSBcdTAwMjZcdTAwMjZcbjExMDc6XHRcdCAgICAvKiBXZSBhcmUgbm90IGxpbWl0ZWQgYnkgQ1dORC4gKi9cbjExMDg6XHRcdCAgICB0Y3BfcGFja2V0c19pbl9mbGlnaHQodHApIFx1MDAzYyB0Y3Bfc25kX2N3bmQodHApIFx1MDAyNlx1MDAyNlxuMTEwOTpcdFx0ICAgIC8qIEFsbCBsb3N0IHBhY2tldHMgaGF2ZSBiZWVuIHJldHJhbnNtaXR0ZWQuICovXG4xMTEwOlx0XHQgICAgdHAtXHUwMDNlbG9zdF9vdXQgXHUwMDNjPSB0cC1cdTAwM2VyZXRyYW5zX291dClcbjExMTE6XHRcdFx0dHAtXHUwMDNlYXBwX2xpbWl0ZWQgPVxuMTExMjpcdFx0XHRcdCh0cC1cdTAwM2VkZWxpdmVyZWQgJiM0MzsgdGNwX3BhY2tldHNfaW5fZmxpZ2h0KHRwKSkgPyA6IDE7XG4xMTEzOlx0fVxuMTExNDpcdEVYUE9SVF9TWU1CT0xfR1BMKHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKTtcbjExMTU6XHRcbjExMTY6XHRpbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbjExMTc6XHR7XG4xMTE4Olx0XHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyA9IE5VTEw7XG4xMTE5Olx0XHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbjExMjA6XHRcdHN0cnVjdCB1YnVmX2luZm8gKnVhcmcgPSBOVUxMO1xuMTEyMTpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbjExMjI6XHRcdHN0cnVjdCBzb2NrY21fY29va2llIHNvY2tjO1xuMTEyMzpcdFx0aW50IGZsYWdzLCBlcnIsIGNvcGllZCA9IDA7XG4xMTI0Olx0XHRpbnQgbXNzX25vdyA9IDAsIHNpemVfZ29hbCwgY29waWVkX3N5biA9IDA7XG4xMTI1Olx0XHRpbnQgcHJvY2Vzc19iYWNrbG9nID0gMDtcbjExMjY6XHRcdGludCBzb2NrY19lcnIgPSAwO1xuMTEyNzpcdFx0aW50IHpjID0gMDtcbjExMjg6XHRcdGxvbmcgdGltZW87XG4xMTI5Olx0XG4xMTMwOlx0XHRmbGFncyA9IG1zZy1cdTAwM2Vtc2dfZmxhZ3M7XG4xMTMxOlx0XG4xMTMyOlx0XHRzb2NrYyA9IChzdHJ1Y3Qgc29ja2NtX2Nvb2tpZSl7IC50c2ZsYWdzID0gUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3RzZmxhZ3MpIH07XG4xMTMzOlx0XHRpZiAobXNnLVx1MDAzZW1zZ19jb250cm9sbGVuKSB7XG4xMTM0Olx0XHRcdHNvY2tjX2VyciA9IHNvY2tfY21zZ19zZW5kKHNrLCBtc2csIFx1MDAyNnNvY2tjKTtcbjExMzU6XHRcdFx0LyogRG9uJiMzOTt0IHJldHVybiBlcnJvciB1bnRpbCBNU0dfRkFTVE9QRU4gaGFzIGJlZW4gcHJvY2Vzc2VkO1xuMTEzNjpcdFx0XHQgKiB0aGF0IG1heSBzdWNjZWVkIGV2ZW4gaWYgdGhlIGNtc2cgaXMgaW52YWxpZC5cbjExMzc6XHRcdFx0ICovXG4xMTM4Olx0XHR9XG4xMTM5Olx0XG4xMTQwOlx0XHRpZiAoKGZsYWdzIFx1MDAyNiBNU0dfWkVST0NPUFkpIFx1MDAyNlx1MDAyNiBzaXplKSB7XG4xMTQxOlx0XHRcdGlmIChtc2ctXHUwMDNlbXNnX3VidWYpIHtcbjExNDI6XHRcdFx0XHR1YXJnID0gbXNnLVx1MDAzZW1zZ191YnVmO1xuMTE0MzpcdFx0XHRcdGlmIChzay1cdTAwM2Vza19yb3V0ZV9jYXBzIFx1MDAyNiBORVRJRl9GX1NHKVxuMTE0NDpcdFx0XHRcdFx0emMgPSBNU0dfWkVST0NPUFk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2ODIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIGRlbHZlIGludG8gdGhlIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGNvZGU6CgoqKkRpdmluZyBEZWVwIGludG8gYHRjcF9zZW5kbXNnX2xvY2tlZGAgYW5kIGBiaW5kaW5nYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZm9jdXNpbmcgb24gYHRjcF9zZW5kbXNnX2xvY2tlZGAgbm93LiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IHdoZXJlLCB3aXRoaW4gdGhpcyBmdW5jdGlvbiwgZG8gd2UgYWN0dWFsbHkgKnVzZSogYGJpbmRpbmdgPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNvbmNlcHQgb2YgJiMzNDtiaW5kaW5nJiMzNDsg4oCTIHRoZSBhc3NvY2lhdGlvbiBvZiBhIHNvY2tldCB3aXRoIGEgc3BlY2lmaWMgbG9jYWwgYWRkcmVzcyBhbmQgcG9ydCDigJMgaXMgaW50ZXJ3b3ZlbiBpbnRvIHRoaXMgY3JpdGljYWwgc2VuZCBwYXRoLiBJcyBpdCB1c2VkIGZvciBhZGRyZXNzIHNlbGVjdGlvbiwgcGVyaGFwcz8gT3IgbWF5YmUgZm9yIGVuZm9yY2luZyBzcGVjaWZpYyBzb2NrZXQgb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBkZXN0aW5hdGlvbj8gSSBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZSB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3Qgb24gdGhlIHNlbmQgb3BlcmF0aW9uLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIGRpcmVjdCByZWZlcmVuY2VzIHRvIHRoZSBgYmluZGluZ2AgdmFyaWFibGUgb3Igc3RydWN0dXJlLiBJIHN1c3BlY3QgaXRzIGluZmx1ZW5jZSB3aWxsIGJlIHN1YnRsZSBpbiBtYW55IGNhc2VzLCBzbyBhIGNvbXByZWhlbnNpdmUgc2VhcmNoIGlzIGluIG9yZGVyLiBJ4oCZbSB0aGlua2luZyBhYm91dCBzY2VuYXJpb3MgaW52b2x2aW5nIG11bHRpY2FzdCwgYWRkcmVzcyBmYW1pbHkgZGlmZmVyZW5jZXMsIG9yIGFueSB0aW1lIHdlIG5lZWQgdG8gYXNzb2NpYXRlIHRoZSBvdXRnb2luZyBkYXRhIHdpdGggdGhlIGxvY2FsIGVuZHBvaW50LiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjEwOlx0XHRcdFx0Z290byBvdXRfZXJyO1xuMTIxMTpcdFxuMTIxMjpcdFx0XHQvKiAmIzM5O2NvbW1vbiYjMzk7IHNlbmRpbmcgdG8gc2VuZHEgKi9cbjEyMTM6XHRcdH1cbjEyMTQ6XHRcbjEyMTU6XHRcdGlmIChzb2NrY19lcnIpIHtcbjEyMTY6XHRcdFx0ZXJyID0gc29ja2NfZXJyO1xuMTIxNzpcdFx0XHRnb3RvIG91dF9lcnI7XG4xMjE4Olx0XHR9XG4xMjE5Olx0XG4xMjIwOlx0XHQvKiBUaGlzIHNob3VsZCBiZSBpbiBwb2xsICovXG4xMjIxOlx0XHRza19jbGVhcl9iaXQoU09DS1dRX0FTWU5DX05PU1BBQ0UsIHNrKTtcbjEyMjI6XHRcbjEyMjM6XHRcdC8qIE9rIGNvbW1lbmNlIHNlbmRpbmcuICovXG4xMjI0Olx0XHRjb3BpZWQgPSAwO1xuMTIyNTpcdFxuMTIyNjpcdHJlc3RhcnQ6XG4xMjI3Olx0XHRtc3Nfbm93ID0gdGNwX3NlbmRfbXNzKHNrLCBcdTAwMjZzaXplX2dvYWwsIGZsYWdzKTtcbjEyMjg6XHRcbjEyMjk6XHRcdGVyciA9IC1FUElQRTtcbjEyMzA6XHRcdGlmIChzay1cdTAwM2Vza19lcnIgfHwgKHNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNiBTRU5EX1NIVVRET1dOKSlcbjEyMzE6XHRcdFx0Z290byBkb19lcnJvcjtcbjEyMzI6XHRcbjEyMzM6XHRcdHdoaWxlIChtc2dfZGF0YV9sZWZ0KG1zZykpIHtcbjEyMzQ6XHRcdFx0aW50IGNvcHkgPSAwO1xuMTIzNTpcdFxuMTIzNjpcdFx0XHRza2IgPSB0Y3Bfd3JpdGVfcXVldWVfdGFpbChzayk7XG4xMjM3Olx0XHRcdGlmIChza2IpXG4xMjM4Olx0XHRcdFx0Y29weSA9IHNpemVfZ29hbCAtIHNrYi1cdTAwM2VsZW47XG4xMjM5Olx0XG4xMjQwOlx0XHRcdHRyYWNlX3RjcF9zZW5kbXNnX2xvY2tlZChzaywgbXNnLCBza2IsIHNpemVfZ29hbCk7XG4xMjQxOlx0XG4xMjQyOlx0XHRcdGlmIChjb3B5IFx1MDAzYz0gMCB8fCAhdGNwX3NrYl9jYW5fY29sbGFwc2VfdG8oc2tiKSB8fFxuMTI0MzpcdFx0XHQgICAgdW5saWtlbHkoc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikgIT0gIWJpbmRpbmcpKSB7XG4xMjQ0Olx0XHRcdFx0Ym9vbCBmaXJzdF9za2I7XG4xMjQ1Olx0XG4xMjQ2Olx0bmV3X3NlZ21lbnQ6XG4xMjQ3Olx0XHRcdFx0aWYgKCFza19zdHJlYW1fbWVtb3J5X2ZyZWUoc2spKVxuMTI0ODpcdFx0XHRcdFx0Z290byB3YWl0X2Zvcl9zcGFjZTtcbjEyNDk6XHRcbjEyNTA6XHRcdFx0XHRpZiAodW5saWtlbHkocHJvY2Vzc19iYWNrbG9nIFx1MDAzZT0gMTYpKSB7XG4xMjUxOlx0XHRcdFx0XHRwcm9jZXNzX2JhY2tsb2cgPSAwO1xuMTI1MjpcdFx0XHRcdFx0aWYgKHNrX2ZsdXNoX2JhY2tsb2coc2spKVxuMTI1MzpcdFx0XHRcdFx0XHRnb3RvIHJlc3RhcnQ7XG4xMjU0Olx0XHRcdFx0fVxuMTI1NTpcdFx0XHRcdGZpcnN0X3NrYiA9IHRjcF9ydHhfYW5kX3dyaXRlX3F1ZXVlc19lbXB0eShzayk7XG4xMjU2Olx0XHRcdFx0c2tiID0gdGNwX3N0cmVhbV9hbGxvY19za2Ioc2ssIHNrLVx1MDAzZXNrX2FsbG9jYXRpb24sXG4xMjU3Olx0XHRcdFx0XHRcdFx0ICAgZmlyc3Rfc2tiKTtcbjEyNTg6XHRcdFx0XHRpZiAoIXNrYilcbjEyNTk6XHRcdFx0XHRcdGdvdG8gd2FpdF9mb3Jfc3BhY2U7XG4xMjYwOlx0XG4xMjYxOlx0XHRcdFx0cHJvY2Vzc19iYWNrbG9nJiM0MzsmIzQzOztcbjEyNjI6XHRcbjEyNjM6XHQjaWZkZWYgQ09ORklHX1NLQl9ERUNSWVBURURcbjEyNjQ6XHRcdFx0XHRza2ItXHUwMDNlZGVjcnlwdGVkID0gISEoZmxhZ3MgXHUwMDI2IE1TR19TRU5EUEFHRV9ERUNSWVBURUQpO1xuMTI2NTpcdCNlbmRpZlxuMTI2NjpcdFx0XHRcdHRjcF9za2JfZW50YWlsKHNrLCBza2IpO1xuMTI2NzpcdFx0XHRcdGNvcHkgPSBzaXplX2dvYWw7XG4xMjY4Olx0XG4xMjY5Olx0XHRcdFx0LyogQWxsIHBhY2tldHMgYXJlIHJlc3RvcmVkIGFzIGlmIHRoZXkgaGF2ZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODI3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbm5lciBtb25vbG9ndWU6CgoqKkRpdmluZyBEZWVwZXIgaW50byBgdGNwX3NlbmRtc2dfbG9ja2VkYCoqCgpBbHJpZ2h0LCBzbyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBmbG93IHdpdGhpbiBgdGNwX3NlbmRtc2dfbG9ja2VkYCwgYW5kIHNwZWNpZmljYWxseSwgdW5kZXJzdGFuZCB0aGUgcGF0aCBsZWFkaW5nIGFsbCB0aGUgd2F5IGRvd24gdG8gYG91dF9lcnJgLiBJJiMzOTttIGFscmVhZHkgcXVpdGUgZmFtaWxpYXIgd2l0aCB0aGUgb3ZlcmFsbCBUQ1Agc2VuZGluZyBwcm9jZXNzLCBzbyB0aGlzIGV4ZXJjaXNlIHdpbGwgYmUgYWJvdXQgcGlucG9pbnRpbmcgdGhlIHNwZWNpZmljIGVycm9yIGNvbmRpdGlvbnMgdGhhdCBjb3VsZCB0cmlnZ2VyIHRoYXQgcGFydGljdWxhciBwYXRoLiBJIHdhbnQgdG8gc2VlIHdoaWNoIHN1YnRsZSBkZXRhaWxzIGFyZSByZWxldmFudC4KCkkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGRpZmZlcmVudCBmYWlsdXJlIHBvaW50czogYXJlIHdlIHRhbGtpbmcgYWJvdXQgcmVzb3VyY2UgZXhoYXVzdGlvbiAobWVtb3J5LCBzb2NrZXQgYnVmZmVycyksIHByb3RvY29sIHZpb2xhdGlvbnMsIGNvbmdlc3Rpb24gY29udHJvbCBpc3N1ZXMsIG9yIHBlcmhhcHMgcHJvYmxlbXMgcmVsYXRlZCB0byB0aGUgdW5kZXJseWluZyBuZXR3b3JrIGludGVyZmFjZT8gVGhlIG51YW5jZXMgYXJlIGFsd2F5cyB0aGUgZGV2aWwgaW4gdGhlIGRldGFpbHMsIGFuZCBJIHdhbnQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGVkZ2UgY2FzZXMuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgYW55IG9mIHRoZSBjaGVja3Mgb3IgbWFuaXB1bGF0aW9ucyBwZXJmb3JtZWQgcHJpb3IgdG8gdGhlIGVycm9yIHBhdGggYXJlIGF0eXBpY2FsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzcwOlx0XHRcdFx0c2tfbWVtX2NoYXJnZShzaywgY29weSk7XG4xMzcxOlx0XHRcdH1cbjEzNzI6XHRcbjEzNzM6XHRcdFx0aWYgKCFjb3BpZWQpXG4xMzc0Olx0XHRcdFx0VENQX1NLQl9DQihza2IpLVx1MDAzZXRjcF9mbGFncyBcdTAwMjY9IH5UQ1BIRFJfUFNIO1xuMTM3NTpcdFxuMTM3NjpcdFx0XHRXUklURV9PTkNFKHRwLVx1MDAzZXdyaXRlX3NlcSwgdHAtXHUwMDNld3JpdGVfc2VxICYjNDM7IGNvcHkpO1xuMTM3NzpcdFx0XHRUQ1BfU0tCX0NCKHNrYiktXHUwMDNlZW5kX3NlcSAmIzQzOz0gY29weTtcbjEzNzg6XHRcdFx0dGNwX3NrYl9wY291bnRfc2V0KHNrYiwgMCk7XG4xMzc5Olx0XG4xMzgwOlx0XHRcdGNvcGllZCAmIzQzOz0gY29weTtcbjEzODE6XHRcdFx0aWYgKCFtc2dfZGF0YV9sZWZ0KG1zZykpIHtcbjEzODI6XHRcdFx0XHRpZiAodW5saWtlbHkoZmxhZ3MgXHUwMDI2IE1TR19FT1IpKVxuMTM4MzpcdFx0XHRcdFx0VENQX1NLQl9DQihza2IpLVx1MDAzZWVvciA9IDE7XG4xMzg0Olx0XHRcdFx0Z290byBvdXQ7XG4xMzg1Olx0XHRcdH1cbjEzODY6XHRcbjEzODc6XHRcdFx0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIHNpemVfZ29hbCB8fCAoZmxhZ3MgXHUwMDI2IE1TR19PT0IpIHx8IHVubGlrZWx5KHRwLVx1MDAzZXJlcGFpcikpXG4xMzg4Olx0XHRcdFx0Y29udGludWU7XG4xMzg5Olx0XG4xMzkwOlx0XHRcdGlmIChmb3JjZWRfcHVzaCh0cCkpIHtcbjEzOTE6XHRcdFx0XHR0Y3BfbWFya19wdXNoKHRwLCBza2IpO1xuMTM5MjpcdFx0XHRcdF9fdGNwX3B1c2hfcGVuZGluZ19mcmFtZXMoc2ssIG1zc19ub3csIFRDUF9OQUdMRV9QVVNIKTtcbjEzOTM6XHRcdFx0fSBlbHNlIGlmIChza2IgPT0gdGNwX3NlbmRfaGVhZChzaykpXG4xMzk0Olx0XHRcdFx0dGNwX3B1c2hfb25lKHNrLCBtc3Nfbm93KTtcbjEzOTU6XHRcdFx0Y29udGludWU7XG4xMzk2Olx0XG4xMzk3Olx0d2FpdF9mb3Jfc3BhY2U6XG4xMzk4Olx0XHRcdHNldF9iaXQoU09DS19OT1NQQUNFLCBcdTAwMjZzay1cdTAwM2Vza19zb2NrZXQtXHUwMDNlZmxhZ3MpO1xuMTM5OTpcdFx0XHR0Y3BfcmVtb3ZlX2VtcHR5X3NrYihzayk7XG4xNDAwOlx0XHRcdGlmIChjb3BpZWQpXG4xNDAxOlx0XHRcdFx0dGNwX3B1c2goc2ssIGZsYWdzIFx1MDAyNiB+TVNHX01PUkUsIG1zc19ub3csXG4xNDAyOlx0XHRcdFx0XHQgVENQX05BR0xFX1BVU0gsIHNpemVfZ29hbCk7XG4xNDAzOlx0XG4xNDA0Olx0XHRcdGVyciA9IHNrX3N0cmVhbV93YWl0X21lbW9yeShzaywgXHUwMDI2dGltZW8pO1xuMTQwNTpcdFx0XHRpZiAoZXJyICE9IDApXG4xNDA2Olx0XHRcdFx0Z290byBkb19lcnJvcjtcbjE0MDc6XHRcbjE0MDg6XHRcdFx0bXNzX25vdyA9IHRjcF9zZW5kX21zcyhzaywgXHUwMDI2c2l6ZV9nb2FsLCBmbGFncyk7XG4xNDA5Olx0XHR9XG4xNDEwOlx0XG4xNDExOlx0b3V0OlxuMTQxMjpcdFx0aWYgKGNvcGllZCkge1xuMTQxMzpcdFx0XHR0Y3BfdHhfdGltZXN0YW1wKHNrLCBcdTAwMjZzb2NrYyk7XG4xNDE0Olx0XHRcdHRjcF9wdXNoKHNrLCBmbGFncywgbXNzX25vdywgdHAtXHUwMDNlbm9uYWdsZSwgc2l6ZV9nb2FsKTtcbjE0MTU6XHRcdH1cbjE0MTY6XHRvdXRfbm9wdXNoOlxuMTQxNzpcdFx0LyogbXNnLVx1MDAzZW1zZ191YnVmIGlzIHBpbm5lZCBieSB0aGUgY2FsbGVyIHNvIHdlIGRvbiYjMzk7dCB0YWtlIGV4dHJhIHJlZnMgKi9cbjE0MTg6XHRcdGlmICh1YXJnIFx1MDAyNlx1MDAyNiAhbXNnLVx1MDAzZW1zZ191YnVmKVxuMTQxOTpcdFx0XHRuZXRfemNvcHlfcHV0KHVhcmcpO1xuMTQyMDpcdFx0aWYgKGJpbmRpbmcpXG4xNDIxOlx0XHRcdG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmdfcHV0KGJpbmRpbmcpO1xuMTQyMjpcdFx0cmV0dXJuIGNvcGllZCAmIzQzOyBjb3BpZWRfc3luO1xuMTQyMzpcdFxuMTQyNDpcdGRvX2Vycm9yOlxuMTQyNTpcdFx0dGNwX3JlbW92ZV9lbXB0eV9za2Ioc2spO1xuMTQyNjpcdFxuMTQyNzpcdFx0aWYgKGNvcGllZCAmIzQzOyBjb3BpZWRfc3luKVxuMTQyODpcdFx0XHRnb3RvIG91dDtcbjE0Mjk6XHRvdXRfZXJyOlxuMTQzMDpcdFx0LyogbXNnLVx1MDAzZW1zZ191YnVmIGlzIHBpbm5lZCBieSB0aGUgY2FsbGVyIHNvIHdlIGRvbiYjMzk7dCB0YWtlIGV4dHJhIHJlZnMgKi9cbjE0MzE6XHRcdGlmICh1YXJnIFx1MDAyNlx1MDAyNiAhbXNnLVx1MDAzZW1zZ191YnVmKVxuMTQzMjpcdFx0XHRuZXRfemNvcHlfcHV0X2Fib3J0KHVhcmcsIHRydWUpO1xuMTQzMzpcdFx0ZXJyID0gc2tfc3RyZWFtX2Vycm9yKHNrLCBmbGFncywgZXJyKTtcbjE0MzQ6XHRcdC8qIG1ha2Ugc3VyZSB3ZSB3YWtlIGFueSBlcG9sbCBlZGdlIHRyaWdnZXIgd2FpdGVyICovXG4xNDM1Olx0XHRpZiAodW5saWtlbHkodGNwX3J0eF9hbmRfd3JpdGVfcXVldWVzX2VtcHR5KHNrKSBcdTAwMjZcdTAwMjYgZXJyID09IC1FQUdBSU4pKSB7XG4xNDM2Olx0XHRcdFJFQURfT05DRShzay1cdTAwM2Vza193cml0ZV9zcGFjZSkoc2spO1xuMTQzNzpcdFx0XHR0Y3BfY2hyb25vX3N0b3Aoc2ssIFRDUF9DSFJPTk9fU05EQlVGX0xJTUlURUQpO1xuMTQzODpcdFx0fVxuMTQzOTpcdFx0aWYgKGJpbmRpbmcpXG4xNDQwOlx0XHRcdG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmdfcHV0KGJpbmRpbmcpO1xuMTQ0MTpcdFxuMTQ0MjpcdFx0cmV0dXJuIGVycjtcbjE0NDM6XHR9XG4xNDQ0Olx0RVhQT1JUX1NZTUJPTF9HUEwodGNwX3NlbmRtc2dfbG9ja2VkKTtcbjE0NDU6XHRcbjE0NDY6XHRpbnQgdGNwX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuMTQ0NzpcdHtcbjE0NDg6XHRcdGludCByZXQ7XG4xNDQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNjcKCQkJCQkJCW91dHB1dDogMTk1CgkJCQkJCQl0aG91Z2h0czogMTEwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBUQ1AgU2VuZG1zZyBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBJJiMzOTttIGxvb2tpbmcgYXQgYSBjaGFuZ2UgaW4gYHRjcF9zZW5kbXNnX2xvY2tlZGAuIFRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIGNoZWNrIHRvIHNlZSBpZiBgZG1hYnVmX2lkYCB3YXMgc2V0IGluIGEgYHNvY2tjbV9jb29raWVgLCBidXQgdGhhdCBjaGVjayBoYWQgc29tZSBjb25kaXRpb25zIHdoZXJlIGl0IG1pZ2h0ICpub3QqIGJlIHRyaWdnZXJlZCBldmVuIGlmIHRoZSBgZG1hYnVmX2lkYCAqd2FzKiBzZXQuIFRoaXMgY291bGQgcG90ZW50aWFsbHkgbGVhZCB0byBwcm9ibGVtcyBkb3duc3RyZWFtIGJlY2F1c2UgdGhlIHN5c3RlbSBtaWdodCBhc3N1bWUgdGhlIGBkbWFidWZgIHdhcyBjb3JyZWN0bHkgYm91bmQsIHdoZW4gaXQgd2FzbiYjMzk7dC4KClRoZSBwcmV2aW91cyBjb2RlIHdhcyBlc3NlbnRpYWxseSBzYXlpbmcsICYjMzQ7SWYgdGhlcmUmIzM5O3MgYSBETUEgYnVmZmVyIElELCBhbmQgd2UgKmFyZW4mIzM5O3QqIHVzaW5nIHplcm8tY29weSAob3IgaXQmIzM5O3Mgbm90IGVuYWJsZWQgb24gdGhlIHNvY2tldCksIHRoZW4gZXJyb3Igb3V0LiYjMzQ7ICBCdXQgdGhlcmUgd2VyZSBjb3JuZXIgY2FzZXMuIFNwZWNpZmljYWxseSwgYHpjYCBtaWdodCAqbm90KiBiZSBzZXQgdG8gYE1TR19aRVJPQ09QWWAsIGFuZCBgYmluZGluZ2AgKHdoaWNoIEkgYXNzdW1lIGlzIGEgcG9pbnRlciB0byBzb21ldGhpbmcgY3J1Y2lhbCkgbWlnaHQgYmUgYE5VTExgLgoKVGhlIGZpeCBzdHJlbmd0aGVucyB0aGlzIHZhbGlkYXRpb246IGBpZiAoIXNvY2tjX2VyciAmYW1wOyZhbXA7IHNvY2tjLmRtYWJ1Zl9pZCAmYW1wOyZhbXA7ICh6YyAhPSBNU0dfWkVST0NPUFkgfHwgIWJpbmRpbmcpKWAuIE5vdyBpdCAqYWx3YXlzKiBjaGVja3M6IElmIGBkbWFidWZfaWRgIGlzIHNldCwgZWl0aGVyIGB6Y2AgKm11c3QqIGJlIGBNU0dfWkVST0NPUFlgIG9yIHRoZSBiaW5kaW5nIGlzIG5vdCBudWxsLiBUaGF0IGVuc3VyZXMgdGhhdCBpZiB6ZXJvLWNvcHkgaXMgdXNlZCBhbmQgYGRtYWJ1Zl9pZGAgaXMgcGFzc2VkLCB0aGUgYXNzb2NpYXRlZCBzdHJ1Y3R1cmUgKGBiaW5kaW5nYCkgaXMgdmFsaWQuCgpNeSBtYWluIGNvbmNlcm4gd2l0aCBhIHBhdGNoIGxpa2UgdGhpcyBpcyB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGNoYW5nZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgdGhvc2Ugcmlza3MsIG9yIGNhdXNlIHVuaW5pdGlhbGl6ZWQgdmFsdWVzIHRvIGJlIHJlYWQgaW4gc29tZSByZWFjaGFibGUgY29kZSBwYXRoLgoKTGV0JiMzOTtzIGxvb2sgYXQgdGhlIHZhcmlhYmxlcyBpbnZvbHZlZCBpbiB0aGUgY29uZGl0aW9uOgotICAgYHNvY2tjX2VycmA6IEluaXRpYWxpemVkIHRvIDAuIEdvb2QuCi0gICBgc29ja2NgOiBJbml0aWFsaXplZCBhdCBsaW5lIDExMzIgYW5kIGlzIHByb3Blcmx5IGluaXRpYWxpemVkLgotICAgYHNvY2tjLmRtYWJ1Zl9pZGA6IEluaXRpYWxpemVkIHRvIDAgdGhyb3VnaCBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24sIGFuZCBpdCBvbmx5IGdldHMgcG9wdWxhdGVkIGlmIGBtc2ctJmd0O21zZ19jb250cm9sbGVuYCBpcyBzZXQuCi0gICBgemNgOiBJbml0aWFsaXplZCB0byAwLiBHb29kLgotICAgYGJpbmRpbmdgOiBJbml0aWFsaXplZCB0byBgTlVMTGAuCgpPa2F5LCBldmVyeXRoaW5nIGlzIHByb3Blcmx5IGluaXRpYWxpemVkLiBUaGlzIGlzIHNpbXBseSBzdHJlbmd0aGVuaW5nIHZhbGlkYXRpb24gbG9naWMsIHdoaWNoIG1ha2VzIGl0IHNhZmUuIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnZvbHZlIGFueSBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSAoc28sIG5vIHJpc2tzIGZvciB1bmluaXRpYWxpemVkIGZpZWxkcyBpbiBkYXRhIHBhc3NlZCBhY3Jvc3MgdGhlIGtlcm5lbC91c2VyIGJvdW5kYXJ5KSwgYW5kIGl0JiMzOTtzIG5vdCBhIG1lbW9yeSBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uIGlzc3VlLgoKVGhpcyBpcyBhbGwgKmxvZ2ljKiB2YWxpZGF0aW9uLCByZWFsbHkgdGlnaHRlbmluZyBpbnB1dCB2YWxpZGF0aW9uIGZvciBkZXZtZW0gVENQIHplcm8tY29weSB0cmFuc21pc3Npb24uICBJJiMzOTttIG5vdCBzZWVpbmcgYW55IHNjZW5hcmlvcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSB3b3VsZCBiZSByZWFkIGFzIGEgcmVzdWx0IG9mICp0aGlzKiBwYXRjaC4gVGhlcmVmb3JlLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IEtNU0FOIGZ1enppbmcgaXMgdW5uZWNlc3NhcnkgaGVyZS4gVGhpcyBpcyBhIHNvbGlkLCBzYWZlIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdGlnaHRlbnMgZXJyb3IgdmFsaWRhdGlvbiBpbiBgdGNwX3NlbmRtc2dfbG9ja2VkKClgIHdoZW4gYHNvY2tjLmRtYWJ1Zl9pZGAgaXMgc3VwcGxpZWQsIGVuc3VyaW5nIHRoYXQgZGV2bWVtIHRyYW5zbWlzc2lvbiBpcyBvbmx5IHBlcm1pdHRlZCB3aGVuIHplcm8tY29weSBpcyBhY3RpdmUgKGB6YyA9PSBNU0dfWkVST0NPUFlgKSBhbmQgYSB2YWxpZCBkZXZtZW0gYmluZGluZyBleGlzdHMgKGBiaW5kaW5nICE9IE5VTExgKS4gQWxsIHZhcmlhYmxlcyBldmFsdWF0ZWQgaW4gdGhpcyBjb25kaXRpb24gKGBzb2NrY19lcnJgLCBgc29ja2NgLCBgemNgLCBhbmQgYGJpbmRpbmdgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZXMuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBtZW1vcnkgY29weWluZyBsb2dpYyBpbiBhIG1hbm5lciB0aGF0IGNvdWxkIGNhdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBpbnZhbGlkIHBvaW50ZXJzIG9yIHN0YXRlIGludmFyaWFudHMgYXJlIGFkZHJlc3NhYmxlIGJ5IHN0YW5kYXJkIGRldGVjdG9ycyAvIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB0aWdodGVucyBlcnJvciB2YWxpZGF0aW9uIGluIGB0Y3Bfc2VuZG1zZ19sb2NrZWQoKWAgd2hlbiBgc29ja2MuZG1hYnVmX2lkYCBpcyBzdXBwbGllZCwgZW5zdXJpbmcgdGhhdCBkZXZtZW0gdHJhbnNtaXNzaW9uIGlzIG9ubHkgcGVybWl0dGVkIHdoZW4gemVyby1jb3B5IGlzIGFjdGl2ZSAoYHpjID09IE1TR19aRVJPQ09QWWApIGFuZCBhIHZhbGlkIGRldm1lbSBiaW5kaW5nIGV4aXN0cyAoYGJpbmRpbmcgIT0gTlVMTGApLiBBbGwgdmFyaWFibGVzIGV2YWx1YXRlZCBpbiB0aGlzIGNvbmRpdGlvbiAoYHNvY2tjX2VycmAsIGBzb2NrY2AsIGB6Y2AsIGFuZCBgYmluZGluZ2ApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlcy4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBvciBwYWRkaW5nIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzIG9yIG1lbW9yeSBjb3B5aW5nIGxvZ2ljIGluIGEgbWFubmVyIHRoYXQgY291bGQgY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIGludmFsaWQgcG9pbnRlcnMgb3Igc3RhdGUgaW52YXJpYW50cyBhcmUgYWRkcmVzc2FibGUgYnkgc3RhbmRhcmQgZGV0ZWN0b3JzIC8gS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MDc6NDguNDM0NDA0MTE5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc2MTU3MDg4ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiTkVUX0RFVk1FTVwiLFxuICAgIFwiRE1BX1NIQVJFRF9CVUZGRVJcIixcbiAgICBcIlBBR0VfUE9PTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF9zZW5kbXNnX2xvY2tlZFwiLFxuICAgIFwidGNwX3NlbmRtc2dcIixcbiAgICBcIm5ldF9kZXZtZW1fZ2V0X2JpbmRpbmdcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHRpZ2h0ZW5zIGVycm9yIHZhbGlkYXRpb24gaW4gYHRjcF9zZW5kbXNnX2xvY2tlZCgpYCB3aGVuIGBzb2NrYy5kbWFidWZfaWRgIGlzIHN1cHBsaWVkLCBlbnN1cmluZyB0aGF0IGRldm1lbSB0cmFuc21pc3Npb24gaXMgb25seSBwZXJtaXR0ZWQgd2hlbiB6ZXJvLWNvcHkgaXMgYWN0aXZlIChgemMgPT0gTVNHX1pFUk9DT1BZYCkgYW5kIGEgdmFsaWQgZGV2bWVtIGJpbmRpbmcgZXhpc3RzIChgYmluZGluZyAhPSBOVUxMYCkuIEFsbCB2YXJpYWJsZXMgZXZhbHVhdGVkIGluIHRoaXMgY29uZGl0aW9uIChgc29ja2NfZXJyYCwgYHNvY2tjYCwgYHpjYCwgYW5kIGBiaW5kaW5nYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgc3RhY2sgdmFyaWFibGVzLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IG9yIHBhZGRpbmcgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBib3VuZHMgb3IgbWVtb3J5IGNvcHlpbmcgbG9naWMgaW4gYSBtYW5uZXIgdGhhdCBjb3VsZCBjYXVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gaW52YWxpZCBwb2ludGVycyBvciBzdGF0ZSBpbnZhcmlhbnRzIGFyZSBhZGRyZXNzYWJsZSBieSBzdGFuZGFyZCBkZXRlY3RvcnMgLyBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHZhbGlkYXRpb24gbG9naWMgaW4gdGNwX3NlbmRtc2dfbG9ja2VkKCkgd2hlbiBwcm9jZXNzaW5nIFRDUCB6ZXJvLWNvcHkgbWVzc2FnZXMgd2l0aCBkZXZpY2UgbWVtb3J5IGRtYWJ1ZiBJRHMgKFNDTV9ERVZNRU1fRE1BQlVGKS4gSXQgZW5zdXJlcyB0aGF0IHRyYW5zbWlzc2lvbnMgd2l0aCBkbWFidWZfaWQgZmFpbCB3aXRoIC1FSU5WQUwgdW5sZXNzIHplcm9jb3B5IGlzIGFjdHVhbGx5IGVuYWJsZWQgKHpjID09IE1TR19aRVJPQ09QWSkgYW5kIGEgdmFsaWQgZGV2bWVtIGJpbmRpbmcgZXhpc3RzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIFRDUCBzb2NrZXQgdHJhbnNtaXQgcGF0aHMgdGhhdCBjYW4gYmUgdGVzdGVkIHVzaW5nIHN0YW5kYXJkIHNvY2tldCBzeXNjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MDc6NDguNDM0NDExNzU5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzMxNTM4NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwYjJmMjJjNzI2OTYwM2Y4MzY1ZTE2ZDQyYTI5NGYwZTg2YWIzMTFhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gU2VwIDYgMDA6MDc6NDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuY1xcbmluZGV4IGI0MjM3ZDBlOTk0ZDYuLjEwZjU4MjgxYmUxN2IgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvdGNwLmNcXG4rKysgYi9uZXQvaXB2NC90Y3AuY1xcbkBAIC0xMTY5LDggKzExNjksNyBAQCBpbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG4gXFx0XFx0XFx0emMgPSBNU0dfU1BMSUNFX1BBR0VTO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoIXNvY2tjX2VyciBcXHUwMDI2XFx1MDAyNiBzb2NrYy5kbWFidWZfaWQgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgICghKGZsYWdzIFxcdTAwMjYgTVNHX1pFUk9DT1BZKSB8fCAhc29ja19mbGFnKHNrLCBTT0NLX1pFUk9DT1BZKSkpIHtcXG4rXFx0aWYgKCFzb2NrY19lcnIgXFx1MDAyNlxcdTAwMjYgc29ja2MuZG1hYnVmX2lkIFxcdTAwMjZcXHUwMDI2ICh6YyAhPSBNU0dfWkVST0NPUFkgfHwgIWJpbmRpbmcpKSB7XFxuIFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuIFxcdFxcdGdvdG8gb3V0X2VycjtcXG4gXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDowNzo0OC44MDgzOTc4ODFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjUxMDcxMDUzNDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIk5FVF9ERVZNRU1cIixcbiAgICBcIkRNQV9TSEFSRURfQlVGRkVSXCIsXG4gICAgXCJQQUdFX1BPT0xcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3Bfc2VuZG1zZ19sb2NrZWRcIixcbiAgICBcInRjcF9zZW5kbXNnXCIsXG4gICAgXCJuZXRfZGV2bWVtX2dldF9iaW5kaW5nXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdmFsaWRhdGlvbiBsb2dpYyBpbiB0Y3Bfc2VuZG1zZ19sb2NrZWQoKSB3aGVuIHByb2Nlc3NpbmcgVENQIHplcm8tY29weSBtZXNzYWdlcyB3aXRoIGRldmljZSBtZW1vcnkgZG1hYnVmIElEcyAoU0NNX0RFVk1FTV9ETUFCVUYpLiBJdCBlbnN1cmVzIHRoYXQgdHJhbnNtaXNzaW9ucyB3aXRoIGRtYWJ1Zl9pZCBmYWlsIHdpdGggLUVJTlZBTCB1bmxlc3MgemVyb2NvcHkgaXMgYWN0dWFsbHkgZW5hYmxlZCAoemMgPT0gTVNHX1pFUk9DT1BZKSBhbmQgYSB2YWxpZCBkZXZtZW0gYmluZGluZyBleGlzdHMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUgVENQIHNvY2tldCB0cmFuc21pdCBwYXRocyB0aGF0IGNhbiBiZSB0ZXN0ZWQgdXNpbmcgc3RhbmRhcmQgc29ja2V0IHN5c2NhbGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDBiMmYyMmM3MjY5NjAzZjgzNjVlMTZkNDJhMjk0ZjBlODZhYjMxMWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDAwOjA3OjQ3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuY1xuaW5kZXggYjQyMzdkMGU5OTRkNi4uMTBmNTgyODFiZTE3YiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcC5jXG4rKysgYi9uZXQvaXB2NC90Y3AuY1xuQEAgLTExNjksOCArMTE2OSw3IEBAIGludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuIFx0XHRcdHpjID0gTVNHX1NQTElDRV9QQUdFUztcbiBcdH1cbiBcbi1cdGlmICghc29ja2NfZXJyIFx1MDAyNlx1MDAyNiBzb2NrYy5kbWFidWZfaWQgXHUwMDI2XHUwMDI2XG4tXHQgICAgKCEoZmxhZ3MgXHUwMDI2IE1TR19aRVJPQ09QWSkgfHwgIXNvY2tfZmxhZyhzaywgU09DS19aRVJPQ09QWSkpKSB7XG4rXHRpZiAoIXNvY2tjX2VyciBcdTAwMjZcdTAwMjYgc29ja2MuZG1hYnVmX2lkIFx1MDAyNlx1MDAyNiAoemMgIT0gTVNHX1pFUk9DT1BZIHx8ICFiaW5kaW5nKSkge1xuIFx0XHRlcnIgPSAtRUlOVkFMO1xuIFx0XHRnb3RvIG91dF9lcnI7XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDowNzo0OC44MDg0MDAyMTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1OTU5MTIyMzA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbiwgcHJlc2VudGVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBUQ1AgQ29kZSoqXG5cbk9rYXksIHNvIHdlIGhhdmUgYSBwYXRjaCB0byByZXZpZXcsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIGBuZXQvaXB2NC90Y3AuY2AgZmlsZSBhbmQsIG1vcmUgcHJlY2lzZWx5LCB0aGUgYHRjcF9zZW5kbXNnX2xvY2tlZGAgZnVuY3Rpb24uIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHRoZSAqY29udGV4dCogc3Vycm91bmRpbmcgdGhpcyBjaGFuZ2UuIEknbSBnb2luZyB0byBsZXZlcmFnZSBteSBlc3RhYmxpc2hlZCB0b29sa2l0LiBJJ2xsIHJlYWNoIGZvciBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAsIGRlcGVuZGluZyBvbiBteSBwcmVmZXJlbmNlLCB0byB6ZXJvIGluIG9uIGBuZXQvaXB2NC90Y3AuY2AgYXJvdW5kIGxpbmUgMTE2OS4gVGhpcyBhcHByb2FjaCBnaXZlcyBtZSBhIHF1aWNrIHdpbmRvdyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBsZXR0aW5nIG1lIHVuZGVyc3RhbmQgdGhlIGltbWVkaWF0ZSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhlIHByb3Bvc2VkIGNoYW5nZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgKmJlZm9yZSogdGhhdCBsaW5lLCBhbmQgd2hhdCB0aGUgY29kZSBkb2VzICphZnRlciogdGhlIGxpbmUgaW4gdGhlIHJvdXRpbmUgYHRjcF9zZW5kbXNnX2xvY2tlZGAsIGJlY2F1c2UgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYWx3YXlzIHByb3ZpZGVzIHRoZSB2aXRhbCBjb250ZXh0IEkgbmVlZCB0byBwcm9wZXJseSBpbnRlcnByZXQgdGhlIG1vZGlmaWNhdGlvbi4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IHRvIHNlZSB0aGUgY29kZSwgYW5kIHVuZGVyc3RhbmQgdGhlIGludGVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkwNSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MDc6NTQuNzY3NTI0NTM2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2MzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNDAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNDA6XFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IE1TR19aRVJPQ09QWSkgXFx1MDAyNlxcdTAwMjYgc2l6ZSkge1xcbjExNDE6XFx0XFx0XFx0aWYgKG1zZy1cXHUwMDNlbXNnX3VidWYpIHtcXG4xMTQyOlxcdFxcdFxcdFxcdHVhcmcgPSBtc2ctXFx1MDAzZW1zZ191YnVmO1xcbjExNDM6XFx0XFx0XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19yb3V0ZV9jYXBzIFxcdTAwMjYgTkVUSUZfRl9TRylcXG4xMTQ0OlxcdFxcdFxcdFxcdFxcdHpjID0gTVNHX1pFUk9DT1BZO1xcbjExNDU6XFx0XFx0XFx0fSBlbHNlIGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfWkVST0NPUFkpKSB7XFxuMTE0NjpcXHRcXHRcXHRcXHRza2IgPSB0Y3Bfd3JpdGVfcXVldWVfdGFpbChzayk7XFxuMTE0NzpcXHRcXHRcXHRcXHR1YXJnID0gbXNnX3plcm9jb3B5X3JlYWxsb2Moc2ssIHNpemUsIHNrYl96Y29weShza2IpLFxcbjExNDg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICFzb2NrY19lcnIgXFx1MDAyNlxcdTAwMjYgc29ja2MuZG1hYnVmX2lkKTtcXG4xMTQ5OlxcdFxcdFxcdFxcdGlmICghdWFyZykge1xcbjExNTA6XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVOT0JVRlM7XFxuMTE1MTpcXHRcXHRcXHRcXHRcXHRnb3RvIG91dF9lcnI7XFxuMTE1MjpcXHRcXHRcXHRcXHR9XFxuMTE1MzpcXHRcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3JvdXRlX2NhcHMgXFx1MDAyNiBORVRJRl9GX1NHKVxcbjExNTQ6XFx0XFx0XFx0XFx0XFx0emMgPSBNU0dfWkVST0NPUFk7XFxuMTE1NTpcXHRcXHRcXHRcXHRlbHNlXFxuMTE1NjpcXHRcXHRcXHRcXHRcXHR1YXJnX3RvX21zZ3pjKHVhcmcpLVxcdTAwM2V6ZXJvY29weSA9IDA7XFxuMTE1NzpcXHRcXG4xMTU4OlxcdFxcdFxcdFxcdGlmICghc29ja2NfZXJyIFxcdTAwMjZcXHUwMDI2IHNvY2tjLmRtYWJ1Zl9pZCkge1xcbjExNTk6XFx0XFx0XFx0XFx0XFx0YmluZGluZyA9IG5ldF9kZXZtZW1fZ2V0X2JpbmRpbmcoc2ssIHNvY2tjLmRtYWJ1Zl9pZCk7XFxuMTE2MDpcXHRcXHRcXHRcXHRcXHRpZiAoSVNfRVJSKGJpbmRpbmcpKSB7XFxuMTE2MTpcXHRcXHRcXHRcXHRcXHRcXHRlcnIgPSBQVFJfRVJSKGJpbmRpbmcpO1xcbjExNjI6XFx0XFx0XFx0XFx0XFx0XFx0YmluZGluZyA9IE5VTEw7XFxuMTE2MzpcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIG91dF9lcnI7XFxuMTE2NDpcXHRcXHRcXHRcXHRcXHR9XFxuMTE2NTpcXHRcXHRcXHRcXHR9XFxuMTE2NjpcXHRcXHRcXHR9XFxuMTE2NzpcXHRcXHR9IGVsc2UgaWYgKHVubGlrZWx5KG1zZy1cXHUwMDNlbXNnX2ZsYWdzIFxcdTAwMjYgTVNHX1NQTElDRV9QQUdFUykgXFx1MDAyNlxcdTAwMjYgc2l6ZSkge1xcbjExNjg6XFx0XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19yb3V0ZV9jYXBzIFxcdTAwMjYgTkVUSUZfRl9TRylcXG4xMTY5OlxcdFxcdFxcdFxcdHpjID0gTVNHX1NQTElDRV9QQUdFUztcXG4xMTcwOlxcdFxcdH1cXG4xMTcxOlxcdFxcbjExNzI6XFx0XFx0aWYgKCFzb2NrY19lcnIgXFx1MDAyNlxcdTAwMjYgc29ja2MuZG1hYnVmX2lkIFxcdTAwMjZcXHUwMDI2ICh6YyAhPSBNU0dfWkVST0NPUFkgfHwgIWJpbmRpbmcpKSB7XFxuMTE3MzpcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjExNzQ6XFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbjExNzU6XFx0XFx0fVxcbjExNzY6XFx0XFxuMTE3NzpcXHRcXHRpZiAodW5saWtlbHkoZmxhZ3MgXFx1MDAyNiBNU0dfRkFTVE9QRU4gfHxcXG4xMTc4OlxcdFxcdFxcdCAgICAgaW5ldF90ZXN0X2JpdChERUZFUl9DT05ORUNULCBzaykpIFxcdTAwMjZcXHUwMDI2XFxuMTE3OTpcXHRcXHQgICAgIXRwLVxcdTAwM2VyZXBhaXIpIHtcXG4xMTgwOlxcdFxcdFxcdGVyciA9IHRjcF9zZW5kbXNnX2Zhc3RvcGVuKHNrLCBtc2csIFxcdTAwMjZjb3BpZWRfc3luLCBzaXplLCB1YXJnKTtcXG4xMTgxOlxcdFxcdFxcdGlmIChlcnIgPT0gLUVJTlBST0dSRVNTIFxcdTAwMjZcXHUwMDI2IGNvcGllZF9zeW4gXFx1MDAzZSAwKVxcbjExODI6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTE4MzpcXHRcXHRcXHRlbHNlIGlmIChlcnIpXFxuMTE4NDpcXHRcXHRcXHRcXHRnb3RvIG91dF9lcnI7XFxuMTE4NTpcXHRcXHR9XFxuMTE4NjpcXHRcXG4xMTg3OlxcdFxcdHRpbWVvID0gc29ja19zbmR0aW1lbyhzaywgZmxhZ3MgXFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xcbjExODg6XFx0XFxuMTE4OTpcXHRcXHR0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzayk7ICAvKiBpcyBzZW5kaW5nIGFwcGxpY2F0aW9uLWxpbWl0ZWQ/ICovXFxuMTE5MDpcXHRcXG4xMTkxOlxcdFxcdC8qIFdhaXQgZm9yIGEgY29ubmVjdGlvbiB0byBmaW5pc2guIE9uZSBleGNlcHRpb24gaXMgVENQIEZhc3QgT3BlblxcbjExOTI6XFx0XFx0ICogKHBhc3NpdmUgc2lkZSkgd2hlcmUgZGF0YSBpcyBhbGxvd2VkIHRvIGJlIHNlbnQgYmVmb3JlIGEgY29ubmVjdGlvblxcbjExOTM6XFx0XFx0ICogaXMgZnVsbHkgZXN0YWJsaXNoZWQuXFxuMTE5NDpcXHRcXHQgKi9cXG4xMTk1OlxcdFxcdGlmICgoKDEgXFx1MDAzY1xcdTAwM2Mgc2stXFx1MDAzZXNrX3N0YXRlKSBcXHUwMDI2IH4oVENQRl9FU1RBQkxJU0hFRCB8IFRDUEZfQ0xPU0VfV0FJVCkpIFxcdTAwMjZcXHUwMDI2XFxuMTE5NjpcXHRcXHQgICAgIXRjcF9wYXNzaXZlX2Zhc3RvcGVuKHNrKSkge1xcbjExOTc6XFx0XFx0XFx0ZXJyID0gc2tfc3RyZWFtX3dhaXRfY29ubmVjdChzaywgXFx1MDAyNnRpbWVvKTtcXG4xMTk4OlxcdFxcdFxcdGlmIChlcnIgIT0gMClcXG4xMTk5OlxcdFxcdFxcdFxcdGdvdG8gZG9fZXJyb3I7XFxuMTIwMDpcXHRcXHR9XFxuMTIwMTpcXHRcXG4xMjAyOlxcdFxcdGlmICh1bmxpa2VseSh0cC1cXHUwMDNlcmVwYWlyKSkge1xcbjEyMDM6XFx0XFx0XFx0aWYgKHRwLVxcdTAwM2VyZXBhaXJfcXVldWUgPT0gVENQX1JFQ1ZfUVVFVUUpIHtcXG4xMjA0OlxcdFxcdFxcdFxcdGNvcGllZCA9IHRjcF9zZW5kX3JjdnEoc2ssIG1zZywgc2l6ZSk7XFxuMTIwNTpcXHRcXHRcXHRcXHRnb3RvIG91dF9ub3B1c2g7XFxuMTIwNjpcXHRcXHRcXHR9XFxuMTIwNzpcXHRcXG4xMjA4OlxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuMTIwOTpcXHRcXHRcXHRpZiAodHAtXFx1MDAzZXJlcGFpcl9xdWV1ZSA9PSBUQ1BfTk9fUVVFVUUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjA3OjU0Ljc2NzcxMjcwNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzOTQ5ODg3MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVENQIFNlbmQgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgYSBtb2RpZmljYXRpb24gdG8gYHRjcF9zZW5kbXNnX2xvY2tlZGAgaW4gYG5ldC9pcHY0L3RjcC5jYCwgd2hpY2ggaXMgYWx3YXlzIGludGVyZXN0aW5nLiBUaGUgY29yZSBjaGFuZ2UgZm9jdXNlcyBvbiB0aGlzIGNvbmRpdGlvbmFsIGJsb2NrOlxuXG5gYGBjXG4tXHRpZiAoIXNvY2tjX2VyciBcdTAwMjZcdTAwMjYgc29ja2MuZG1hYnVmX2lkIFx1MDAyNlx1MDAyNlxuLVx0ICAgICghKGZsYWdzIFx1MDAyNiBNU0dfWkVST0NPUFkpIHx8ICFzb2NrX2ZsYWcoc2ssIFNPQ0tfWkVST0NPUFkpKSkge1xuK1x0aWYgKCFzb2NrY19lcnIgXHUwMDI2XHUwMDI2IHNvY2tjLmRtYWJ1Zl9pZCBcdTAwMjZcdTAwMjYgKHpjICE9IE1TR19aRVJPQ09QWSB8fCAhYmluZGluZykpIHtcbiBcdFx0ZXJyID0gLUVJTlZBTDtcbiBcdFx0Z290byBvdXRfZXJyO1xuIFx0fVxuYGBgXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgYSB3b3J0aHdoaWxlIHRhcmdldCBmb3IgZnV6emluZy4gVGhpcyBjb2RlIGlzIGNsZWFybHkgaW4gdGhlIHBhdGggb2YgYHRjcF9zZW5kbXNnX2xvY2tlZGAsIHdoaWNoIGlzICp0aGUqIGNvcmUgZnVuY3Rpb24gZm9yIFRDUCBzb2NrZXQgc2VuZCBvcGVyYXRpb25zLiBJdCBoYW5kbGVzIGBNU0dfWkVST0NPUFlgIGFuZCwgY3J1Y2lhbGx5LCBpbnRlcmFjdHMgd2l0aCBgZG1hYnVmX2lkYCwgd2hpY2ggaXMgbGlrZWx5IHJlbGF0ZWQgdG8gYGRldm1lbWAgb3Igc2ltaWxhciBETUEgYnVmZmVyIG1lY2hhbmlzbXMuXG5cbmB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGlzIHJlYWNoZWQgdGhyb3VnaCBzdGFuZGFyZCBzb2NrZXQgc3lzY2FsbHMgbGlrZSBgc2VuZG1zZ2AsIGBzZW5kYCwgYW5kIGBzZW5kdG9gLiBTbywgaXQncyBwcmV0dHkgYWNjZXNzaWJsZS4gTXkgbmV4dCBzdGVwIGlzIHRvIGRldGVybWluZSBpZiBhbnkgY29uZmlndXJhdGlvbnMgZ2F0ZSB0aGlzIGZ1bmN0aW9uYWxpdHkuIEknbGwgbmVlZCB0byBpbnZlc3RpZ2F0ZSBgbmV0X2Rldm1lbV9nZXRfYmluZGluZ2AgYW5kIHRoZSBgc29ja2MuZG1hYnVmX2lkYCB0byB1bmRlcnN0YW5kIHRoZSBwcmVyZXF1aXNpdGVzIGZvciB0aGlzIGNvbmRpdGlvbiB0byBiZSB0cmlnZ2VyZWQuIEFueSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaGVyZSBjb3VsZCBuYXJyb3cgbXkgZm9jdXMgZm9yIGZ1enppbmcgb3IgaW5mbHVlbmNlIHRoZSB0eXBlIG9mIGlucHV0IEknbGwgbmVlZCB0byBjcmFmdCB0byBoaXQgdGhpcyBwb3RlbnRpYWxseSB2dWxuZXJhYmxlIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzOTcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDowNzo1OC4xNjI3MDM4ODhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA1MTMzMTE5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRfZGV2bWVtX2dldF9iaW5kaW5nXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldm1lbS5jPTM3OT12b2lkIG5ldF9kZXZtZW1fcHV0X25ldF9pb3Yoc3RydWN0IG5ldF9pb3YgKm5pb3YpXFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uYy0zODMtXFxubmV0L2NvcmUvZGV2bWVtLmM6Mzg0OnN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHN0cnVjdCBzb2NrICpzayxcXG5uZXQvY29yZS9kZXZtZW0uYy0zODUtXFx0XFx0XFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCBkbWFidWZfaWQpXFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uaD0xNTU9c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxcbm5ldC9jb3JlL2Rldm1lbS5oOjE1NjpuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGRtYWJ1Zl9pZCk7XFxubmV0L2NvcmUvZGV2bWVtLmgtMTU3LXN0cnVjdCBuZXRfaW92ICpcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5oPTIyOD1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcXG5uZXQvY29yZS9kZXZtZW0uaDoyMjk6bmV0X2Rldm1lbV9nZXRfYmluZGluZyhzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBkbWFidWZfaWQpXFxubmV0L2NvcmUvZGV2bWVtLmgtMjMwLXtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTExMTY9aW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0xMTU4LVxcdFxcdFxcdGlmICghc29ja2NfZXJyIFxcdTAwMjZcXHUwMDI2IHNvY2tjLmRtYWJ1Zl9pZCkge1xcbm5ldC9pcHY0L3RjcC5jOjExNTk6XFx0XFx0XFx0XFx0YmluZGluZyA9IG5ldF9kZXZtZW1fZ2V0X2JpbmRpbmcoc2ssIHNvY2tjLmRtYWJ1Zl9pZCk7XFxubmV0L2lwdjQvdGNwLmMtMTE2MC1cXHRcXHRcXHRcXHRpZiAoSVNfRVJSKGJpbmRpbmcpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjA4OjAwLjIxNDA0MjA4MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwMDk1NDA0MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlOlxuXG4qKkludmVzdGlnYXRpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gaW4gYG5ldC9jb3JlL2Rldm1lbS5oYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbmNsdXNpb24gb3IgYmVoYXZpb3Igb2YgYG5ldC9jb3JlL2Rldm1lbS5oYC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGxvb2sgZm9yIGFueSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBvciBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBjb250cm9sIGl0cyBjb21waWxhdGlvbi4gSSB3YW50IHRvIHNlZSBpZiBpdCdzIGRlcGVuZGVudCBvbiBhIHNwZWNpZmljIGBDT05GSUdgIG9wdGlvbiwgb3IgaWYgdGhlcmUncyBhbnkgb3RoZXIgY29uZGl0aW9uYWwgbG9naWMgZGV0ZXJtaW5pbmcgd2hlbiB0aGlzIGhlYWRlciBnZXRzIHB1bGxlZCBpbi4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuLCBhbmQgaXTigJlzIGFsd2F5cyB0aGUgZmlyc3QgcGxhY2UgSSBzdGFydCB3aGVuIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIGNvbmZpZ3VyYXRpb24gb2YgYSBwaWVjZSBvZiBrZXJuZWwgY29kZSBsaWtlIHRoaXMuIEknbSBleHBlY3RpbmcgdG8gZmluZCBhIHR5cGljYWwgYCNpZmRlZmAsIGAjaWZuZGVmYCwgb3IgbWF5YmUgZXZlbiBzb21lIG1vcmUgY29tcGxleCBtYWNybyBjb25zdHJ1Y3RzLiBUaGUgZ29hbCBpcyB0byBmaWd1cmUgb3V0IHRoZSBzY2VuYXJpb3Mgd2hlcmUgYGRldm1lbS5oYCBpcyByZWxldmFudCwgYW5kIHBlcmhhcHMsIHdoeSBpdCBtaWdodCBiZSBleGNsdWRlZCBpbiBvdGhlcnMuIExldOKAmXMgZGl2ZSBpbiBhbmQgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ0OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjA4OjA0LjIyMzU4NDUwNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2Rldm1lbS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBEZXZpY2UgbWVtb3J5IFRDUCBzdXBwb3J0XFxuICAgNDpcXHQgKlxcbiAgIDU6XFx0ICogQXV0aG9yczpcXHRNaW5hIEFsbWFzcnkgXFx1MDAzY2FsbWFzcnltaW5hQGdvb2dsZS5jb21cXHUwMDNlXFxuICAgNjpcXHQgKlxcdFxcdFdpbGxlbSBkZSBCcnVpam4gXFx1MDAzY3dpbGxlbWJAZ29vZ2xlLmNvbVxcdTAwM2VcXG4gICA3OlxcdCAqXFx0XFx0S2FpeXVhbiBaaGFuZyBcXHUwMDNja2FpeXVhbnpAZ29vZ2xlLmNvbVxcdTAwM2VcXG4gICA4OlxcdCAqXFxuICAgOTpcXHQgKi9cXG4gIDEwOlxcdCNpZm5kZWYgX05FVF9ERVZNRU1fSFxcbiAgMTE6XFx0I2RlZmluZSBfTkVUX0RFVk1FTV9IXFxuICAxMjpcXHRcXG4gIDEzOlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bWVtLmhcXHUwMDNlXFxuICAxNDpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGRldl9uZXRsaW5rLmhcXHUwMDNlXFxuICAxNTpcXHRcXG4gIDE2OlxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2s7XFxuICAxNzpcXHRcXG4gIDE4OlxcdHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nIHtcXG4gIDE5OlxcdFxcdHN0cnVjdCBkbWFfYnVmICpkbWFidWY7XFxuICAyMDpcXHRcXHRzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2htZW50O1xcbiAgMjE6XFx0XFx0c3RydWN0IHNnX3RhYmxlICpzZ3Q7XFxuICAyMjpcXHRcXHQvKiBQaHlzaWNhbCBOSUMgdGhhdCBkb2VzIHRoZSBhY3R1YWwgRE1BIGZvciB0aGlzIGJpbmRpbmcuICovXFxuICAyMzpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbiAgMjQ6XFx0XFx0LyogT3BhcXVlIGNvb2tpZSBpZGVudGlmeWluZyB0aGUgdmlydHVhbCBkZXZpY2UgKGUuZy4gbmV0a2l0KSB0aGUgdXNlclxcbiAgMjU6XFx0XFx0ICogY2FsbGVkIGJpbmQtdHggb24uIFVzZWQgb25seSBmb3IgcG9pbnRlciBjb21wYXJpc29uLiBOZXZlclxcbiAgMjY6XFx0XFx0ICogZGVyZWZlcmVuY2VkLlxcbiAgMjc6XFx0XFx0ICovXFxuICAyODpcXHRcXHR2b2lkICp2ZGV2O1xcbiAgMjk6XFx0XFx0c3RydWN0IGdlbl9wb29sICpjaHVua19wb29sO1xcbiAgMzA6XFx0XFx0LyogUHJvdGVjdCBkZXYgKi9cXG4gIDMxOlxcdFxcdHN0cnVjdCBtdXRleCBsb2NrO1xcbiAgMzI6XFx0XFxuICAzMzpcXHRcXHQvKiBUaGUgdXNlciBob2xkcyBhIHJlZiAodmlhIHRoZSBuZXRsaW5rIEFQSSkgZm9yIGFzIGxvbmcgYXMgdGhleSB3YW50XFxuICAzNDpcXHRcXHQgKiB0aGUgYmluZGluZyB0byByZW1haW4gYWxpdmUuIEVhY2ggcGFnZSBwb29sIHVzaW5nIHRoaXMgYmluZGluZyBob2xkc1xcbiAgMzU6XFx0XFx0ICogYSByZWYgdG8ga2VlcCB0aGUgYmluZGluZyBhbGl2ZS4gVGhlIHBhZ2VfcG9vbCBkb2VzIG5vdCByZWxlYXNlIHRoZVxcbiAgMzY6XFx0XFx0ICogcmVmIHVudGlsIGFsbCB0aGUgbmV0X2lvdnMgYWxsb2NhdGVkIGZyb20gdGhpcyBiaW5kaW5nIGFyZSByZWxlYXNlZFxcbiAgMzc6XFx0XFx0ICogYmFjayB0byB0aGUgcGFnZV9wb29sLlxcbiAgMzg6XFx0XFx0ICpcXG4gIDM5OlxcdFxcdCAqIFRoZSBiaW5kaW5nIHVuZG9zIGl0c2VsZiBhbmQgdW5tYXBzIHRoZSB1bmRlcmx5aW5nIGRtYWJ1ZiBvbmNlIGFsbFxcbiAgNDA6XFx0XFx0ICogdGhvc2UgcmVmcyBhcmUgZHJvcHBlZCBhbmQgdGhlIGJpbmRpbmcgaXMgbm8gbG9uZ2VyIGRlc2lyZWQgb3IgaW5cXG4gIDQxOlxcdFxcdCAqIHVzZS5cXG4gIDQyOlxcdFxcdCAqXFxuICA0MzpcXHRcXHQgKiBuZXRfZGV2bWVtX2dldF9uZXRfaW92KCkgb24gZG1hYnVmIG5ldF9pb3ZzIHdpbGwgaW5jcmVtZW50IHRoaXNcXG4gIDQ0OlxcdFxcdCAqIHJlZmVyZW5jZSwgbWFraW5nIHN1cmUgdGhhdCB0aGUgYmluZGluZyByZW1haW5zIGFsaXZlIHVudGlsIGFsbCB0aGVcXG4gIDQ1OlxcdFxcdCAqIG5ldF9pb3ZzIGFyZSBubyBsb25nZXIgdXNlZC4gbmV0X2lvdnMgYWxsb2NhdGVkIGZyb20gdGhpcyBiaW5kaW5nXFxuICA0NjpcXHRcXHQgKiB0aGF0IGFyZSBzdHVjayBpbiB0aGUgVFggcGF0aCBmb3IgYW55IHJlYXNvbiAoc3VjaCBhcyBhd2FpdGluZ1xcbiAgNDc6XFx0XFx0ICogcmV0cmFuc21pdHMpIGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIGJpbmRpbmcgdW50aWwgdGhlIHNrYiBob2xkaW5nXFxuICA0ODpcXHRcXHQgKiB0aGVtIGlzIGZyZWVkLlxcbiAgNDk6XFx0XFx0ICovXFxuICA1MDpcXHRcXHRzdHJ1Y3QgcGVyY3B1X3JlZiByZWY7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjA4OjA0LjIyMzY2MjM3NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NTI5OTg2MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gZGV2bWVtLmgncyBDb25kaXRpb25hbCBDb21waWxhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gYG5ldC9jb3JlL2Rldm1lbS5oYC4gSSdtIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBhbnkgYCNpZmRlZmAgZGlyZWN0aXZlcyBpbiB0aGlzIGZpbGUuIEknbSBndWVzc2luZyB0aGF0IEknbSBpbnRlcmVzdGVkIGluIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB2YXJpb3VzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHBhdGhzLCB3aGljaCBjYW4gYmUgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGRldmljZSBtZW1vcnkgaXMgaGFuZGxlZCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBkaWZmZXJlbnQgaGFyZHdhcmUgYXJjaGl0ZWN0dXJlcywgY29uZmlndXJhdGlvbnMsIG9yIGtlcm5lbCB2ZXJzaW9ucy4gVGhpcyBmaWxlIHNlZW1zIGNydWNpYWwgZm9yIGxvdy1sZXZlbCBkZXZpY2UgaW50ZXJhY3Rpb24sIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBzZWxlY3RpdmVseSBpbmNsdWRlZCBvciBleGNsdWRlZCBiYXNlZCBvbiBidWlsZC10aW1lIGRlZmluZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZnVuY3Rpb25hbGl0eSBpcyBjb25kaXRpb25hbCwgYW5kIHdoYXQgY29uZmlndXJhdGlvbnMgY2FuIGhhdmUgYSBiaWcgaW1wYWN0IG9uIGhvdyB0aGlzIHRoaW5nIHdvcmtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDY5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDowODowNi4xNzY2NjQ5OTZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2Rldm1lbS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0NSxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE0NTpcXHR9XFxuIDE0NjpcXHRcXG4gMTQ3OlxcdHZvaWQgbmV0X2Rldm1lbV9nZXRfbmV0X2lvdihzdHJ1Y3QgbmV0X2lvdiAqbmlvdik7XFxuIDE0ODpcXHR2b2lkIG5ldF9kZXZtZW1fcHV0X25ldF9pb3Yoc3RydWN0IG5ldF9pb3YgKm5pb3YpO1xcbiAxNDk6XFx0XFxuIDE1MDpcXHRzdHJ1Y3QgbmV0X2lvdiAqXFxuIDE1MTpcXHRuZXRfZGV2bWVtX2FsbG9jX2RtYWJ1ZihzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyk7XFxuIDE1MjpcXHR2b2lkIG5ldF9kZXZtZW1fZnJlZV9kbWFidWYoc3RydWN0IG5ldF9pb3YgKnBwaW92KTtcXG4gMTUzOlxcdFxcbiAxNTQ6XFx0XFxuIDE1NTpcXHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqXFxuIDE1NjpcXHRuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGRtYWJ1Zl9pZCk7XFxuIDE1NzpcXHRzdHJ1Y3QgbmV0X2lvdiAqXFxuIDE1ODpcXHRuZXRfZGV2bWVtX2dldF9uaW92X2F0KHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nLCBzaXplX3QgYWRkcixcXG4gMTU5OlxcdFxcdFxcdCAgICAgICBzaXplX3QgKm9mZiwgc2l6ZV90ICpzaXplKTtcXG4gMTYwOlxcdFxcbiAxNjE6XFx0I2Vsc2VcXG4gMTYyOlxcdHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nO1xcbiAxNjM6XFx0XFxuIDE2NDpcXHRzdGF0aWMgaW5saW5lIHZvaWRcXG4gMTY1OlxcdG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmdfcHV0KHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKVxcbiAxNjY6XFx0e1xcbiAxNjc6XFx0fVxcbiAxNjg6XFx0XFxuIDE2OTpcXHRzdGF0aWMgaW5saW5lIHZvaWQgbmV0X2Rldm1lbV9nZXRfbmV0X2lvdihzdHJ1Y3QgbmV0X2lvdiAqbmlvdilcXG4gMTcwOlxcdHtcXG4gMTcxOlxcdH1cXG4gMTcyOlxcdFxcbiAxNzM6XFx0c3RhdGljIGlubGluZSB2b2lkIG5ldF9kZXZtZW1fcHV0X25ldF9pb3Yoc3RydWN0IG5ldF9pb3YgKm5pb3YpXFxuIDE3NDpcXHR7XFxuIDE3NTpcXHR9XFxuIDE3NjpcXHRcXG4gMTc3OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxcbiAxNzg6XFx0bmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxcbiAxNzk6XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXYsXFxuIDE4MDpcXHRcXHRcXHQgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLFxcbiAxODE6XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBkbWFidWZfZmQsXFxuIDE4MjpcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IG5pb3Zfc2hpZnQsXFxuIDE4MzpcXHRcXHRcXHQgICAgICAgc3RydWN0IG5ldGRldl9ubF9zb2NrICpwcml2LFxcbiAxODQ6XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4gMTg1OlxcdHtcXG4gMTg2OlxcdFxcdHJldHVybiBFUlJfUFRSKC1FT1BOT1RTVVBQKTtcXG4gMTg3OlxcdH1cXG4gMTg4OlxcdFxcbiAxODk6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqbmV0X2Rldm1lbV9sb29rdXBfZG1hYnVmKHUzMiBpZClcXG4gMTkwOlxcdHtcXG4gMTkxOlxcdFxcdHJldHVybiBOVUxMO1xcbiAxOTI6XFx0fVxcbiAxOTM6XFx0XFxuIDE5NDpcXHRzdGF0aWMgaW5saW5lIHZvaWRcXG4gMTk1OlxcdG5ldF9kZXZtZW1fdW5iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZylcXG4gMTk2OlxcdHtcXG4gMTk3OlxcdH1cXG4gMTk4OlxcdFxcbiAxOTk6XFx0c3RhdGljIGlubGluZSBpbnRcXG4gMjAwOlxcdG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHJ4cV9pZHgsXFxuIDIwMTpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyxcXG4gMjAyOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4gMjAzOlxcdFxcbiAyMDQ6XFx0e1xcbiAyMDU6XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiAyMDY6XFx0fVxcbiAyMDc6XFx0XFxuIDIwODpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfaW92ICpcXG4gMjA5OlxcdG5ldF9kZXZtZW1fYWxsb2NfZG1hYnVmKHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKVxcbiAyMTA6XFx0e1xcbiAyMTE6XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDIxMjpcXHR9XFxuIDIxMzpcXHRcXG4gMjE0OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRfZGV2bWVtX2ZyZWVfZG1hYnVmKHN0cnVjdCBuZXRfaW92ICpwcGlvdilcXG4gMjE1OlxcdHtcXG4gMjE2OlxcdH1cXG4gMjE3OlxcdFxcbiAyMTg6XFx0c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG5ldF9pb3ZfdmlydHVhbF9hZGRyKGNvbnN0IHN0cnVjdCBuZXRfaW92ICpuaW92KVxcbiAyMTk6XFx0e1xcbiAyMjA6XFx0XFx0cmV0dXJuIDA7XFxuIDIyMTpcXHR9XFxuIDIyMjpcXHRcXG4gMjIzOlxcdHN0YXRpYyBpbmxpbmUgdTMyIG5ldF9kZXZtZW1faW92X2JpbmRpbmdfaWQoY29uc3Qgc3RydWN0IG5ldF9pb3YgKm5pb3YpXFxuIDIyNDpcXHR7XFxuIDIyNTpcXHRcXHRyZXR1cm4gMDtcXG4gMjI2OlxcdH1cXG4gMjI3OlxcdFxcbiAyMjg6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqXFxuIDIyOTpcXHRuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGRtYWJ1Zl9pZClcXG4gMjMwOlxcdHtcXG4gMjMxOlxcdFxcdHJldHVybiBFUlJfUFRSKC1FT1BOT1RTVVBQKTtcXG4gMjMyOlxcdH1cXG4gMjMzOlxcdFxcbiAyMzQ6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2lvdiAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjA4OjA2LjE3Njc3NTc3NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODk2MTM5ODU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBlbmFibGluZyBgZGV2bWVtYDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBDb25maWd1cmF0aW9uIGZvciBgZGV2bWVtYCoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0J3MgZW5hYmxpbmcgYGRldm1lbWAgaW4gdGhlIGBuZXQvY29yZS9kZXZtZW0uaGAgZmlsZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIGlmIGl0J3MgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiBhIGtlcm5lbCBjb25maWcgb3B0aW9uLiBJIGV4cGVjdCBpdCB0byBiZSBndWFyZGVkIGJ5IGEgYCNpZmRlZmAgb3Igc2ltaWxhciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLiBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHNwZWNpZmljIGNvbmZpZyBzeW1ib2wgdGhhdCBjb250cm9scyB3aGV0aGVyIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBpbmNsdWRlZCBkdXJpbmcgY29tcGlsYXRpb24uIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIG9uIGhvdyB0aGUgYGRldm1lbWAgZnVuY3Rpb25hbGl0eSBpcyBlbmFibGVkIGJhc2VkIG9uIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMTMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjA4OjA4LjA3MjkxOTE4MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZGV2bWVtLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTA6XFx0XFx0c3RydWN0IHBlcmNwdV9yZWYgcmVmO1xcbiAgNTE6XFx0XFxuICA1MjpcXHRcXHQvKiBUaGUgbGlzdCBvZiBiaW5kaW5ncyBjdXJyZW50bHkgYWN0aXZlLiBVc2VkIGZvciBuZXRsaW5rIHRvIG5vdGlmeSB1c1xcbiAgNTM6XFx0XFx0ICogb2YgdGhlIHVzZXIgZHJvcHBpbmcgdGhlIGJpbmQuXFxuICA1NDpcXHRcXHQgKi9cXG4gIDU1OlxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG4gIDU2OlxcdFxcbiAgNTc6XFx0XFx0LyogcnhxJ3MgdGhpcyBiaW5kaW5nIGlzIGFjdGl2ZSBvbi4gKi9cXG4gIDU4OlxcdFxcdHN0cnVjdCB4YXJyYXkgYm91bmRfcnhxcztcXG4gIDU5OlxcdFxcbiAgNjA6XFx0XFx0LyogSUQgb2YgdGhpcyBiaW5kaW5nLiBHbG9iYWxseSB1bmlxdWUgdG8gYWxsIGJpbmRpbmdzIGN1cnJlbnRseVxcbiAgNjE6XFx0XFx0ICogYWN0aXZlLlxcbiAgNjI6XFx0XFx0ICovXFxuICA2MzpcXHRcXHR1MzIgaWQ7XFxuICA2NDpcXHRcXG4gIDY1OlxcdFxcdC8qIERNQSBkaXJlY3Rpb24sIEZST01fREVWSUNFIGZvciBSeCBiaW5kaW5nLCBUT19ERVZJQ0UgZm9yIFR4LiAqL1xcbiAgNjY6XFx0XFx0ZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uO1xcbiAgNjc6XFx0XFxuICA2ODpcXHRcXHQvKiBBcnJheSBvZiBuZXRfaW92IHBvaW50ZXJzIGZvciB0aGlzIGJpbmRpbmcsIHNvcnRlZCBieSB2aXJ0dWFsXFxuICA2OTpcXHRcXHQgKiBhZGRyZXNzLiBUaGlzIGFycmF5IGlzIGNvbnZlbmllbnQgdG8gbWFwIHRoZSB2aXJ0dWFsIGFkZHJlc3NlcyB0b1xcbiAgNzA6XFx0XFx0ICogbmV0X2lvdnMgaW4gdGhlIFRYIHBhdGguXFxuICA3MTpcXHRcXHQgKi9cXG4gIDcyOlxcdFxcdHN0cnVjdCBuZXRfaW92ICoqdHhfdmVjO1xcbiAgNzM6XFx0XFxuICA3NDpcXHRcXHR1bnNpZ25lZCBpbnQgbmlvdl9zaGlmdDtcXG4gIDc1OlxcdFxcbiAgNzY6XFx0XFx0c3RydWN0IHdvcmtfc3RydWN0IHVuYmluZF93O1xcbiAgNzc6XFx0fTtcXG4gIDc4OlxcdFxcbiAgNzk6XFx0I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZNRU0pXFxuICA4MDpcXHQvKiBPd25lciBvZiB0aGUgZG1hLWJ1ZiBjaHVua3MgaW5zZXJ0ZWQgaW50byB0aGUgZ2VuIHBvb2wuIEVhY2ggc2NhdHRlcmxpc3RcXG4gIDgxOlxcdCAqIGVudHJ5IGZyb20gdGhlIGRtYWJ1ZiBpcyBpbnNlcnRlZCBpbnRvIHRoZSBnZW5wb29sIGFzIGEgY2h1bmssIGFuZCBuZWVkc1xcbiAgODI6XFx0ICogdGhpcyBvd25lciBzdHJ1Y3QgdG8ga2VlcCB0cmFjayBvZiBzb21lIG1ldGFkYXRhIG5lY2Vzc2FyeSB0byBjcmVhdGVcXG4gIDgzOlxcdCAqIGFsbG9jYXRpb25zIGZyb20gdGhpcyBjaHVuay5cXG4gIDg0OlxcdCAqL1xcbiAgODU6XFx0c3RydWN0IGRtYWJ1Zl9nZW5wb29sX2NodW5rX293bmVyIHtcXG4gIDg2OlxcdFxcdHN0cnVjdCBuZXRfaW92X2FyZWEgYXJlYTtcXG4gIDg3OlxcdFxcdHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nO1xcbiAgODg6XFx0XFxuICA4OTpcXHRcXHQvKiBkbWFfYWRkciBvZiB0aGUgc3RhcnQgb2YgdGhlIGNodW5rLiAgKi9cXG4gIDkwOlxcdFxcdGRtYV9hZGRyX3QgYmFzZV9kbWFfYWRkcjtcXG4gIDkxOlxcdH07XFxuICA5MjpcXHRcXG4gIDkzOlxcdHZvaWQgX19uZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nX2ZyZWUoc3RydWN0IHdvcmtfc3RydWN0ICp3cSk7XFxuICA5NDpcXHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqXFxuICA5NTpcXHRuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsXFxuICA5NjpcXHRcXHRcXHQgICAgICAgc3RydWN0IGRldmljZSAqZG1hX2RldixcXG4gIDk3OlxcdFxcdFxcdCAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sXFxuICA5ODpcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IGRtYWJ1Zl9mZCwgdW5zaWduZWQgaW50IG5pb3Zfc2hpZnQsXFxuICA5OTpcXHRcXHRcXHQgICAgICAgc3RydWN0IG5ldGRldl9ubF9zb2NrICpwcml2LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDowODowOC4wNzMwOTc0NTJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg1MzI0NDcwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKktjb25maWcgRGl2ZTogQSBRdWljayBEaWFnbm9zdGljIENoZWNrKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQncyB6ZXJvIGluIG9uIGBDT05GSUdfTkVUX0RFVk1FTWAuIEdpdmVuIG15IGV4cGVydGlzZSBpbiB0aGlzIGFyZWEsIGl0J3MgaW1tZWRpYXRlbHkganVtcGluZyBvdXQgYXMgYSBwb3RlbnRpYWwgcG9pbnQgb2YgaW50ZXJlc3QuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGl0cyBzdGF0dXMgd2l0aGluIHRoZSBLY29uZmlnIHN5c3RlbS4gVGhpcyBpc24ndCBqdXN0IGFib3V0IGZpbmRpbmcgaXRzIGN1cnJlbnQgc2V0dGluZzsgSSdtIGRpZ2dpbmcgZGVlcGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLCBpbXBsaWNhdGlvbnMsIGFuZCBwb3NzaWJsZSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBuZXR3b3JrIGNvbmZpZ3VyYXRpb25zLiBUaGlzICdjaGVjaycgaXMgbW9yZSB0aGFuIGEgc2ltcGxlIGBncmVwYCBvciBzZWFyY2g7IGl0J3MgYSBkaWFnbm9zdGljIHByb2JlIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgcmVkIGZsYWdzIG9yIGFyZWFzIGRlbWFuZGluZyBmdXJ0aGVyIGludmVzdGlnYXRpb24gd2l0aGluIHRoZSBicm9hZGVyIG5ldHdvcmsgc3RhY2suIEl0J3MgYSBmdW5kYW1lbnRhbCBzdGFydGluZyBwb2ludCBiZWZvcmUgdGFja2xpbmcgYW55dGhpbmcgbW9yZSBjb21wbGV4LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTI3LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDowODowOS45MjYzNDY1M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwMTU1MzAxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0RFVk1FTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz02Nj1jb25maWcgU0tCX0VYVEVOU0lPTlNcXG4tLVxcbm5ldC9LY29uZmlnLTY4LVxcbm5ldC9LY29uZmlnOjY5OmNvbmZpZyBORVRfREVWTUVNXFxubmV0L0tjb25maWctNzAtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDowODoxMS43Mjc5MDkwMDNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMxNTUyOTA1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgY29uZmlndXJhdGlvbiBpdGVtLCBhbmQgSSB3YW50IHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLiBUaGUgZG9jdW1lbnRhdGlvbiBpcyBwcm9iYWJseSBkZWNlbnQsIGJ1dCBsZXQncyBiZSBob25lc3QsIHRoZSB0cnVlIHNvdXJjZSBvZiB0cnV0aCBpcyBhbHdheXMgdGhlIEtjb25maWcgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBpdGVtIGluIGl0cyBuYXRpdmUgaGFiaXRhdC4gVGhhdCBtZWFucyBjcmFja2luZyBvcGVuIHRoZSBgbmV0L0tjb25maWdgIGZpbGUuIEknbSBob3BpbmcgaXQncyB3ZWxsLW9yZ2FuaXplZCwgd2l0aCBjbGVhciBkZXBlbmRlbmNpZXMsIGRlc2NyaXB0aW9ucywgYW5kIG1heWJlIGV2ZW4gc29tZSB1c2VmdWwgZGVmYXVsdHMgb3IgaGVscCB0ZXh0LiBJdCdzIHRoZSBvbmx5IHJlYWwgd2F5IHRvIGdldCBhIGNvbXBsZXRlbHkgcHJlY2lzZSB1bmRlcnN0YW5kaW5nLCByaWdodD8gVGhlIGRlZmFjdG8gZG9jdW1lbnRhdGlvbiBtaWdodCBiZSByaWdodCwgYnV0IHRoZSBLY29uZmlnIGZpbGUgd2lsbCByZXZlYWwgdGhlIHRydWUgaW50ZXJhY3Rpb25zIGFuZCBpbXBhY3RzLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QgaW4gdGhhdCBmaWxlLiBJIGV4cGVjdCB0byBwYXJzZSB0aGUgc3ltYm9sIGRlZmluaXRpb24sIGFueSBhc3NvY2lhdGVkIGRlcGVuZGVuY2llcyAobGlrZSBgZGVwZW5kcyBvbmAgb3IgYHNlbGVjdGApLCBhbmQgYW55IGhlbHAgdGV4dCBhc3NvY2lhdGVkIHdpdGggaXQuIEZyb20gdGhlcmUgSSBjYW4gaW5mZXIgYW55dGhpbmcgSSBuZWVkIHRvIGtub3cgYWJvdXQgdGhlIHN5bWJvbC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTIwMCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjA4OjE0LjA0MzQ0MTQzNloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2NTpcXHRcXG4gIDY2OlxcdGNvbmZpZyBTS0JfRVhURU5TSU9OU1xcbiAgNjc6XFx0XFx0Ym9vbFxcbiAgNjg6XFx0XFxuICA2OTpcXHRjb25maWcgTkVUX0RFVk1FTVxcbiAgNzA6XFx0XFx0ZGVmX2Jvb2wgeVxcbiAgNzE6XFx0XFx0c2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SXFxuICA3MjpcXHRcXHRkZXBlbmRzIG9uIERNQV9TSEFSRURfQlVGRkVSXFxuICA3MzpcXHRcXHRkZXBlbmRzIG9uIFBBR0VfUE9PTFxcbiAgNzQ6XFx0XFxuICA3NTpcXHRjb25maWcgTkVUX1NIQVBFUlxcbiAgNzY6XFx0XFx0Ym9vbFxcbiAgNzc6XFx0XFxuICA3ODpcXHRjb25maWcgTkVUX0NSQzMyQ1xcbiAgNzk6XFx0XFx0Ym9vbFxcbiAgODA6XFx0XFx0c2VsZWN0IENSQzMyXFxuICA4MTpcXHRcXG4gIDgyOlxcdG1lbnUgXFxcIk5ldHdvcmtpbmcgb3B0aW9uc1xcXCJcXG4gIDgzOlxcdFxcbiAgODQ6XFx0c291cmNlIFxcXCJuZXQvcGFja2V0L0tjb25maWdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjA4OjE0LjA0MzUxNTg2NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDg2NDY4OTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVENQIFplcm8tQ29weSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gSSBzZWUgdGhleSd2ZSBtb2RpZmllZCBgbmV0L2lwdjQvdGNwLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGZ1bmN0aW9uLiBUaGUgb3JpZ2luYWwgY29kZSBoYWQgYSBjb25kaXRpb25hbCBjaGVjayBpbnZvbHZpbmcgYHNvY2tjX2VycmAsIGBzb2NrYy5kbWFidWZfaWRgLCBgZmxhZ3MgXHUwMDI2IE1TR19aRVJPQ09QWWAsIGFuZCBgc29ja19mbGFnKHNrLCBTT0NLX1pFUk9DT1BZKWAuIFRoZSBuZXcgY29kZSByZXBsYWNlcyB0aGF0IHdpdGggYCh6YyAhPSBNU0dfWkVST0NPUFkgfHwgIWJpbmRpbmcpYC4gSG1tLCBzb3VuZHMgbGlrZSB0aGV5J3JlIHRpZ2h0ZW5pbmcgdXAgdGhlIHplcm8tY29weSBsb2dpYyB3aGVuIGBkZXZtZW1gIGNtc2cgKGRtYWJ1Zl9pZCkgaXMgdXNlZC5cblxuVGhpbmtpbmcgYWJvdXQgdGhlIGNvbnRleHQsIHRoaXMgaGFwcGVucyB3aGVuIHdlJ3JlIHNlbmRpbmcgZGF0YSBvdmVyIGEgVENQIHNvY2tldCB1c2luZyBgTVNHX1pFUk9DT1BZYCBhbmQgdGhpcyBgZGV2bWVtYCBmZWF0dXJlLiBJIHJlY2FsbCBgemNgIGlzIHNldCBpZiB0aGUgdW5kZXJseWluZyBuZXR3b3JrIGludGVyZmFjZSBzdXBwb3J0cyBzY2F0dGVyLWdhdGhlciwgdXNpbmcgYE5FVElGX0ZfU0dgLiBUaGUgb3JpZ2luYWwgY29kZSBzZWVtcyB0byBoYXZlIGhhZCBhIHBvdGVudGlhbCB3ZWFrbmVzcyDigJMgaXQgbWlnaHQgaGF2ZSBwcm9jZWVkZWQgaW4gc2l0dWF0aW9ucyB3aGVyZSBgemNgIHdhcyB6ZXJvIChtZWFuaW5nIG5vIHNjYXR0ZXItZ2F0aGVyIHN1cHBvcnQsIG9yIG90aGVyIGlzc3VlcyksICpvciogd2hlcmUgdGhlIGBiaW5kaW5nYCBwcm9jZXNzIGZhaWxlZCwgZXZlbiBpZiBgTVNHX1pFUk9DT1BZYCB3YXMgc2V0LiBOb3csIHRoZSBjaGVjayBpcyBtb3JlIHN0cmljdDsgZWl0aGVyIGB6Y2AgKm11c3QqIGJlIHNldCAqb3IqIGBiaW5kaW5nYCBtdXN0IHN1Y2NlZWQuIFRoYXQgbWFrZXMgc2Vuc2UsIGtlZXBzIHRoaW5ncyBjbGVhbmVyIGFuZCBzYWZlci5cblxuSXMgdGhpcyBzb21ldGhpbmcgdG8gc3BlbmQgbXkgdGltZSBvbiwgdG8gc2VlIGlmIGl0IGNhdXNlcyBpc3N1ZXM/IEFic29sdXRlbHkuIFRoaXMgaXMgaW4gdGhlIGNvcmUgVENQIHN0YWNrLCBpdCdzIHVzZXItY29udHJvbGxlZCB0aHJvdWdoIHNvY2tldCBjYWxscyB3aXRoIGNvbW1vbiBvcHRpb25zIHN1Y2ggYXMgYE1TR19aRVJPQ09QWWAgYW5kIGBkbWFidWZgLCBhbmQgaXQncyBkZWFsaW5nIHdpdGggZXJyb3IgaGFuZGxpbmcuIFRoaXMgaXMgY2xhc3NpYyBmdXp6aW5nIHRlcnJpdG9yeTogcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBzb2NrZXRzIGluIHRoZSB1c3VhbCBRRU1VIGVudmlyb25tZW50LlxuXG5Ob3csIGxldCdzIHRoaW5rIGFib3V0IGZvY3VzIHN5bWJvbHM6IGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGlzIHRoZSBtb2RpZmllZCBmdW5jdGlvbiwgZGVmaW5pdGVseSBuZWVkcyBhdHRlbnRpb24uIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbGVycyBvZiBgdGNwX3NlbmRtc2dfbG9ja2VkYCBhbmQgYW55IHJlbGF0ZWQgZGV2bWVtIHRyYW5zbWl0IGZ1bmN0aW9ucyB0byBlbnN1cmUgSSd2ZSBjb3ZlcmVkIGV2ZXJ5dGhpbmcuIFRpbWUgdG8gZ2V0IG15IGZ1enppbmcgdG9vbHMgcmVhZHkhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2NjQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDowODoxOC41Mjk5ODc2MzRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjgxMDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9zZW5kbXNnX2xvY2tlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvYWZfaW5ldC5jPTEwNjA9Y29uc3Qgc3RydWN0IHByb3RvX29wcyBpbmV0X3N0cmVhbV9vcHMgPSB7XFxuLS1cXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTA4NS1cXHQucmVhZF9za2JcXHQgICA9IHRjcF9yZWFkX3NrYixcXG5uZXQvaXB2NC9hZl9pbmV0LmM6MTA4NjpcXHQuc2VuZG1zZ19sb2NrZWQgICAgPSB0Y3Bfc2VuZG1zZ19sb2NrZWQsXFxubmV0L2lwdjQvYWZfaW5ldC5jLTEwODctXFx0LnBlZWtfbGVuXFx0ICAgPSB0Y3BfcGVla19sZW4sXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0xMTE0PUVYUE9SVF9TWU1CT0xfR1BMKHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKTtcXG5uZXQvaXB2NC90Y3AuYy0xMTE1LVxcbm5ldC9pcHY0L3RjcC5jOjExMTY6aW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxubmV0L2lwdjQvdGNwLmMtMTExNy17XFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0xMjM5LVxcbm5ldC9pcHY0L3RjcC5jOjEyNDA6XFx0XFx0dHJhY2VfdGNwX3NlbmRtc2dfbG9ja2VkKHNrLCBtc2csIHNrYiwgc2l6ZV9nb2FsKTtcXG5uZXQvaXB2NC90Y3AuYy0xMjQxLVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTQ0My19XFxubmV0L2lwdjQvdGNwLmM6MTQ0NDpFWFBPUlRfU1lNQk9MX0dQTCh0Y3Bfc2VuZG1zZ19sb2NrZWQpO1xcbm5ldC9pcHY0L3RjcC5jLTE0NDUtXFxubmV0L2lwdjQvdGNwLmM9MTQ0Nj1pbnQgdGNwX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTQ1MC1cXHRsb2NrX3NvY2soc2spO1xcbm5ldC9pcHY0L3RjcC5jOjE0NTE6XFx0cmV0ID0gdGNwX3NlbmRtc2dfbG9ja2VkKHNrLCBtc2csIHNpemUpO1xcbm5ldC9pcHY0L3RjcC5jLTE0NTItXFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYz05MT1zdGF0aWMgaW50IHRjcF9icGZfcHVzaChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGFwcGx5X2J5dGVzLFxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTEyMi1cXHRcXHRpb3ZfaXRlcl9idmVjKFxcdTAwMjZtc2doZHIubXNnX2l0ZXIsIElURVJfU09VUkNFLCBcXHUwMDI2YnZlYywgMSwgc2l6ZSk7XFxubmV0L2lwdjQvdGNwX2JwZi5jOjEyMzpcXHRcXHRyZXQgPSB0Y3Bfc2VuZG1zZ19sb2NrZWQoc2ssIFxcdTAwMjZtc2doZHIsIHNpemUpO1xcbm5ldC9pcHY0L3RjcF9icGYuYy0xMjQtXFx0XFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDowODoxOC41NzkyNzU2MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTI5NTg0NjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIFNjb3BlIG9mIHRoZSBUQ1AgU2VuZG1zZyBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIHRvIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLiBGaXJzdCwgSSBhbHdheXMgc3RhcnQgYnkgY2FzdGluZyBhIHdpZGVyIG5ldCwgbWFraW5nIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJIG5lZWQgdG8gc2VlIGlmIGFueSBvdGhlciBzeW1ib2xzIG9yIGZpbGVzIGFyZSBpbXBsaWNhdGVkIGJleW9uZCB0aGUgZGlyZWN0IG1vZGlmaWNhdGlvbiBpdHNlbGYuIEJ1dCBiYXNlZCBvbiB0aGUgZGlmZiwgaXQgbG9va3MgbGlrZSBpdCBpcyBqdXN0IHRoZSBvbmUgZnVuY3Rpb24gaW4gYG5ldC9pcHY0L3RjcC5jYCwgd2hpY2ggaXMgYSBnb29kIHNpZ24uXG5cbkFscmlnaHQsIG5vdyBsZXQncyB0aGluayBhYm91dCByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGZvciB0aGUgcHJlc2VuY2Ugb2YgYElORVRgLCBgTkVUX0RFVk1FTWAsIGBETUFfU0hBUkVEX0JVRkZFUmAsIGFuZCBgUEFHRV9QT09MYC4gVGhhdCBzZXQgdXN1YWxseSBoZWxwcyBuYXJyb3cgaXQgZG93bi4gSSdtIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRob3NlIGJlY2F1c2Ugb2YgdGhlIG5hdHVyZSBvZiB0aGUgZnVuY3Rpb24gSSdtIGxvb2tpbmcgYXQuXG5cbkZyb20gdGhlcmUsIEknbGwgYXNzZXNzIHdoZXRoZXIgYElORVRgIG9yIGBORVRfREVWTUVNYCBpcyB0aGUgcmVsZXZhbnQgc2V0dGluZyBoZXJlLiBgSU5FVGAgaXMgdGhlIGRlZmF1bHQgYW5kIHNob3VsZCBiZSBzdGFuZGFyZCwgYnV0IGBORVRfREVWTUVNYCBpcyBnb2luZyB0byBiZSByZWxldmFudCBpZiBpdCBoYXMgYmVlbiBzZXQgdXAgd2l0aCBgRE1BX1NIQVJFRF9CVUZGRVJgIGFuZCBgUEFHRV9QT09MYC4gU28gbGV0J3Mgc2VlIHdoaWNoIG9wdGlvbiB3ZSBhcmUgbG9va2luZyBhdC5cblxuTm93LCBJJ2xsIG5lZWQgdG8gZ28gZnVydGhlciBpbnRvIHRoZSBjb2RlLCBhbmQgZXhhbWluZSB0aGUgYHNvY2tjYCBzdHJ1Y3R1cmUgYW5kIGhvdyBpdCBlbmFibGVzIGBkZXZtZW1gIGFuZCBgZG1hYnVmX2lkYCwgaW4gY2FzZSBgTkVUX0RFVk1FTWAgaXMgaW4gcGxheS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyMTQsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MDg6MjEuNTA4ODYyMzg1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTY0OTI0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkbWFidWZfaWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9kZXZtZW0uYz0zODQ9c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKm5ldF9kZXZtZW1fZ2V0X2JpbmRpbmcoc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9jb3JlL2Rldm1lbS5jOjM4NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IGRtYWJ1Zl9pZClcXG5uZXQvY29yZS9kZXZtZW0uYy0zODYte1xcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmMtMzkxLVxcbm5ldC9jb3JlL2Rldm1lbS5jOjM5MjpcXHRiaW5kaW5nID0gbmV0X2Rldm1lbV9sb29rdXBfZG1hYnVmKGRtYWJ1Zl9pZCk7XFxubmV0L2NvcmUvZGV2bWVtLmMtMzkzLVxcdGlmICghYmluZGluZyB8fCAhYmluZGluZy1cXHUwMDNldHhfdmVjKSB7XFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uaD0xNTU9c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxcbm5ldC9jb3JlL2Rldm1lbS5oOjE1NjpuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGRtYWJ1Zl9pZCk7XFxubmV0L2NvcmUvZGV2bWVtLmgtMTU3LXN0cnVjdCBuZXRfaW92ICpcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5oPTIyOD1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcXG5uZXQvY29yZS9kZXZtZW0uaDoyMjk6bmV0X2Rldm1lbV9nZXRfYmluZGluZyhzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBkbWFidWZfaWQpXFxubmV0L2NvcmUvZGV2bWVtLmgtMjMwLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2suYz0zMDI2PWludCBfX3NvY2tfY21zZ19zZW5kKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGNtc2doZHIgKmNtc2csXFxuLS1cXG5uZXQvY29yZS9zb2NrLmMtMzExNS1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5uZXQvY29yZS9zb2NrLmM6MzExNjpcXHRcXHRzb2NrYy1cXHUwMDNlZG1hYnVmX2lkID0gKih1MzIgKilDTVNHX0RBVEEoY21zZyk7XFxubmV0L2NvcmUvc29jay5jLTMxMTctXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0xMTE2PWludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTE0Ny1cXHRcXHRcXHR1YXJnID0gbXNnX3plcm9jb3B5X3JlYWxsb2Moc2ssIHNpemUsIHNrYl96Y29weShza2IpLFxcbm5ldC9pcHY0L3RjcC5jOjExNDg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICFzb2NrY19lcnIgXFx1MDAyNlxcdTAwMjYgc29ja2MuZG1hYnVmX2lkKTtcXG5uZXQvaXB2NC90Y3AuYy0xMTQ5LVxcdFxcdFxcdGlmICghdWFyZykge1xcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTE1Ny1cXG5uZXQvaXB2NC90Y3AuYzoxMTU4OlxcdFxcdFxcdGlmICghc29ja2NfZXJyIFxcdTAwMjZcXHUwMDI2IHNvY2tjLmRtYWJ1Zl9pZCkge1xcbm5ldC9pcHY0L3RjcC5jOjExNTk6XFx0XFx0XFx0XFx0YmluZGluZyA9IG5ldF9kZXZtZW1fZ2V0X2JpbmRpbmcoc2ssIHNvY2tjLmRtYWJ1Zl9pZCk7XFxubmV0L2lwdjQvdGNwLmMtMTE2MC1cXHRcXHRcXHRcXHRpZiAoSVNfRVJSKGJpbmRpbmcpKSB7XFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0xMTcxLVxcbm5ldC9pcHY0L3RjcC5jOjExNzI6XFx0aWYgKCFzb2NrY19lcnIgXFx1MDAyNlxcdTAwMjYgc29ja2MuZG1hYnVmX2lkIFxcdTAwMjZcXHUwMDI2ICh6YyAhPSBNU0dfWkVST0NPUFkgfHwgIWJpbmRpbmcpKSB7XFxubmV0L2lwdjQvdGNwLmMtMTE3My1cXHRcXHRlcnIgPSAtRUlOVkFMO1xcbi0tXFxubmV0L2lwdjQvdGNwLmM9MjQ5OT1zdGF0aWMgaW50IHRjcF9yZWN2bXNnX2RtYWJ1ZihzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yNTk4LVxcdFxcdFxcdFxcdGRtYWJ1Zl9jbXNnLmZyYWdfdG9rZW4gPSB0Y3BfeGFfcG9vbC50b2tlbnNbdGNwX3hhX3Bvb2wuaWR4XTtcXG5uZXQvaXB2NC90Y3AuYzoyNTk5OlxcdFxcdFxcdFxcdGRtYWJ1Zl9jbXNnLmRtYWJ1Zl9pZCA9IG5ldF9kZXZtZW1faW92X2JpbmRpbmdfaWQobmlvdik7XFxubmV0L2lwdjQvdGNwLmMtMjYwMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MDg6MjEuNTg0NTE4MTk5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0OTA3MDQ0MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIGBuZXQvY29yZS9zb2NrLmNgKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCB0aGUgcGFyc2luZyBvZiBgc29ja2MtXHUwMDNlZG1hYnVmX2lkYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBgbmV0L2NvcmUvc29jay5jYCBmZWVscyBsaWtlIHRoZSBsaWtlbHkgcGxhY2Ugd2hlcmUgdGhpcyBpbnRlcmFjdGlvbiBpcyBoYW5kbGVkLiBMZXQncyBzZWUgaG93IHRoZXkncmUgcHVsbGluZyB0aGF0IHZhbHVlIGFwYXJ0IGFuZCB3aGF0IGl0cyBpbXBsaWNhdGlvbnMgYXJlLiBXZSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBoZXJlLCBzZWUgaWYgaXQncyBnb3QgYW55IHVuZXhwZWN0ZWQgYmVoYXZpb3JzLiBMZXQncyBzdGFydCBkaWdnaW5nIGluIHRoZXJlIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZC4gSSBleHBlY3QgdGhhdCB3aWxsIGJlIHdoZXJlIHRoZSBwYXJzaW5nLCBhbmQgcG90ZW50aWFsbHkgdmFsaWRhdGlvbiwgYXJlIGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2MTIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDowODoyNC4wNzUyMjQ5MTRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0ODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NvY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTA1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMTA1OlxcdFxcdFxcdGJyZWFrO1xcbjMxMDY6XFx0XFx0Y2FzZSBTT19QUklPUklUWTpcXG4zMTA3OlxcdFxcdFxcdGlmIChjbXNnLVxcdTAwM2VjbXNnX2xlbiAhPSBDTVNHX0xFTihzaXplb2YodTMyKSkpXFxuMzEwODpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zMTA5OlxcdFxcdFxcdGlmICghc2tfc2V0X3ByaW9fYWxsb3dlZChzaywgKih1MzIgKilDTVNHX0RBVEEoY21zZykpKVxcbjMxMTA6XFx0XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4zMTExOlxcdFxcdFxcdHNvY2tjLVxcdTAwM2Vwcmlvcml0eSA9ICoodTMyICopQ01TR19EQVRBKGNtc2cpO1xcbjMxMTI6XFx0XFx0XFx0YnJlYWs7XFxuMzExMzpcXHRcXHRjYXNlIFNDTV9ERVZNRU1fRE1BQlVGOlxcbjMxMTQ6XFx0XFx0XFx0aWYgKGNtc2ctXFx1MDAzZWNtc2dfbGVuICE9IENNU0dfTEVOKHNpemVvZih1MzIpKSlcXG4zMTE1OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjMxMTY6XFx0XFx0XFx0c29ja2MtXFx1MDAzZWRtYWJ1Zl9pZCA9ICoodTMyICopQ01TR19EQVRBKGNtc2cpO1xcbjMxMTc6XFx0XFx0XFx0YnJlYWs7XFxuMzExODpcXHRcXHRkZWZhdWx0OlxcbjMxMTk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMzEyMDpcXHRcXHR9XFxuMzEyMTpcXHRcXHRyZXR1cm4gMDtcXG4zMTIyOlxcdH1cXG4zMTIzOlxcdEVYUE9SVF9TWU1CT0woX19zb2NrX2Ntc2dfc2VuZCk7XFxuMzEyNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MDg6MjQuMDc1MzgxNTA0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0NzAwMzEzODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBETUEtQlVGIFVzYWdlIGluIFNvY2tldCBDb250cm9sIE1lc3NhZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgU0NNX0RFVk1FTV9ETUFCVUZgIHRoaW5nLCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIGJlaW5nIGhhbmRsZWQgdW5jb25kaXRpb25hbGx5IGluIGBfX3NvY2tfY21zZ19zZW5kYC4gVGhhdCdzIGEgYml0IG9mIGEgcmVkIGZsYWcgLSBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgZGlyZWN0IHBhcnNpbmcuICBUaGVuIEkgc2VlIHRoYXQgYENPTkZJR19ORVRfREVWTUVNYCBpcyBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgaWYgd2UgaGF2ZSBib3RoIGBETUFfU0hBUkVEX0JVRkZFUmAgYW5kIGBQQUdFX1BPT0xgIGRlZmluZWQuIEludGVyZXN0aW5nLlxuXG5NeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGRvZXMgYENPTkZJR19ORVRfREVWTUVNYCAqcmVseSogb24gdGhvc2UgdHdvLCBvciBpcyBpdCBqdXN0IGEgY29udmVuaWVudCBkZWZhdWx0PyAgSSBuZWVkIHRvIGNsYXJpZnkgdGhhdCBkZXBlbmRlbmN5LiAgVG8gbmFpbCB0aGlzIGRvd24sIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBkcml2ZXJzL2RtYS1idWYvS2NvbmZpZ2AgZmlsZSBhbmQgY29uZmlybSB0aGUgcmVsYXRpb25zaGlwIHdpdGggYERNQV9TSEFSRURfQlVGRkVSYC4gSSBiZXQgdGhlcmUncyBzb21lIHVzZWZ1bCBjb250ZXh0IGFib3V0IGBQQUdFX1BPT0xgIGluIHRoZXJlIGFzIHdlbGwuIFRpbWUgdG8gZGlnIGluIGFuZCBjbGFyaWZ5IHRoaXMgc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTUzLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MDg6MjYuNTQ1NDE1MDk1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjcxOTI2MjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBETUFfU0hBUkVEX0JVRkZFUlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jhc2UvS2NvbmZpZz0yMTM9c291cmNlIFxcXCJkcml2ZXJzL2Jhc2UvcmVnbWFwL0tjb25maWdcXFwiXFxuZHJpdmVycy9iYXNlL0tjb25maWctMjE0LVxcbmRyaXZlcnMvYmFzZS9LY29uZmlnOjIxNTpjb25maWcgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL2Jhc2UvS2NvbmZpZy0yMTYtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDowODoyOC4yMTczNDU2MzhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMzOTc2NDA5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyB0aGUgRE1BX1NIQVJFRF9CVUZGRVIgRGVmaW5pdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiB3aXRoIHRoaXMgYERNQV9TSEFSRURfQlVGRkVSYCB0aGluZy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgc291cmNlIGNvZGUsIHNvIEknbGwgaGVhZCBvdmVyIHRvIHRoZSBgZHJpdmVycy9iYXNlL0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCDigJMgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgb2Z0ZW4gZGVmaW5lIGFuZCBleHBsYWluIHRoZXNlIGtpbmRzIG9mIHN5bWJvbHMsIGVzcGVjaWFsbHkgaWYgdGhleSdyZSBmdW5kYW1lbnRhbCB0byB0aGUgZHJpdmVyIG1vZGVsLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgYSBjb25kaXRpb25hbCBkZWZpbml0aW9uLCBwb3NzaWJseSB0aWVkIHRvIG90aGVyIGhhcmR3YXJlIGZlYXR1cmVzIG9yIHN5c3RlbSBjb25maWd1cmF0aW9ucy4gSSdtIGxvb2tpbmcgZm9yIHRoZSBkZXBlbmRlbmNpZXMsIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGl0LCBhbmQgYW55IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBvciBjb21tZW50cyB0aGF0IG1pZ2h0IHByb3ZpZGUgY29udGV4dC4gTGV0J3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZSByZXZlYWxzLi4uIGtub3dpbmcgdGhlIGtlcm5lbCwgSSB3b3VsZG4ndCBiZSBzdXJwcmlzZWQgdG8gZmluZCBzb21lIGhpZGRlbiBjb21wbGV4aXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTg3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MDg6MzAuNTU3MTExOTc5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jhc2UvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTMsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMTM6XFx0c291cmNlIFxcXCJkcml2ZXJzL2Jhc2UvcmVnbWFwL0tjb25maWdcXFwiXFxuIDIxNDpcXHRcXG4gMjE1OlxcdGNvbmZpZyBETUFfU0hBUkVEX0JVRkZFUlxcbiAyMTY6XFx0XFx0Ym9vbFxcbiAyMTc6XFx0XFx0ZGVmYXVsdCBuXFxuIDIxODpcXHRcXHRzZWxlY3QgSVJRX1dPUktcXG4gMjE5OlxcdFxcdGhlbHBcXG4gMjIwOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgZnJhbWV3b3JrIGZvciBidWZmZXItc2hhcmluZyBiZXR3ZWVuXFxuIDIyMTpcXHRcXHQgIG11bHRpcGxlIGRyaXZlcnMuIEEgYnVmZmVyIGlzIGFzc29jaWF0ZWQgd2l0aCBhIGZpbGUgdXNpbmcgZHJpdmVyXFxuIDIyMjpcXHRcXHQgIEFQSXMgZXh0ZW5zaW9uOyB0aGUgZmlsZSdzIGRlc2NyaXB0b3IgY2FuIHRoZW4gYmUgcGFzc2VkIG9uIHRvIG90aGVyXFxuIDIyMzpcXHRcXHQgIGRyaXZlci5cXG4gMjI0OlxcdFxcbiAyMjU6XFx0Y29uZmlnIEdFTkVSSUNfQVJDSF9UT1BPTE9HWVxcbiAyMjY6XFx0XFx0Ym9vbFxcbiAyMjc6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDowODozMC41NTcyMjI5NjlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEyMjQ5NzQ2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIE5ldHdvcmsgQnVmZmVyIE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIHdoZXJlIGV4YWN0bHkgaXMgYFBBR0VfUE9PTGAgZGVmaW5lZD8gVGhhdCdzIHRoZSBrZXkgdmFyaWFibGUgaGVyZSwgYW5kIEkgbmVlZCB0byB0cmFjayBkb3duIGl0cyBvcmlnaW4uIExldCBtZSBxdWlja2x5IGp1bXAgaW50byB0aGUga2VybmVsIHNvdXJjZSB0cmVlLi4uIEknbSBwcmV0dHkgc3VyZSBpdCdzIGhhbmdpbmcgb3V0IHNvbWV3aGVyZSBpbiB0aGUgYG5ldC9jb3JlL2AgZGlyZWN0b3J5LCBzcGVjaWZpY2FsbHkgd2l0aGluIGEgS2NvbmZpZyBmaWxlLiBPciBzb21ldGhpbmcgc2ltaWxhciwgb2J2aW91c2x5LiBJdCAqaGFzKiB0byBiZSBhIGNvbmZpZyBvcHRpb24uIEdvdHRhIGZpbmQgdGhhdCBkZWZpbml0aW9uISBNYXliZSBgbmV0L2NvcmUvS2NvbmZpZ2AgaXMgdGhlIGJlc3QgYmV0IHRvIHN0YXJ0IHdpdGg7IHRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBmb3VuZGF0aW9uYWwgc3R1ZmYgcmVzaWRlcy4gTGV0J3Mgc2VlIGlmIHRoYXQgZmlsZSBjb250YWlucyB0aGUgcHJlY2lzZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDAxMywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MDg6MzIuNjc5NzIzNzc3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjMzODgzMzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQQUdFX1BPT0xcXFxcYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz00ODc9Y29uZmlnIE5FVF9ERVZMSU5LXFxuLS1cXG5uZXQvS2NvbmZpZy00OTAtXFxubmV0L0tjb25maWc6NDkxOmNvbmZpZyBQQUdFX1BPT0xcXG5uZXQvS2NvbmZpZy00OTItXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDowODozNC45MTM2MTc2NDdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDg5MTUxMTk4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIENhbmRpZGF0ZSBBc3Nlc3NtZW50OiBUQ1AgWmVyby1Db3B5IGFuZCBEZXZtZW0gSW50ZWdyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBmdXp6aW5nLiBGaXJzdCwgbGV0J3MgbmFpbCBkb3duIHRoZSBkZXBlbmRlbmNpZXMuICBgTkVUX0RFVk1FTWAgaXMgY29udGluZ2VudCBvbiBlaXRoZXIgYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGAgYmVpbmcgZW5hYmxlZCwgb3IganVzdCBgTkVUX0RFVk1FTWAgZGlyZWN0bHksIGFuZCB3ZSAqZGVmaW5pdGVseSogbmVlZCBgSU5FVGAgZm9yIGB0Y3AuY2AuICBTbywgbXkgY29uZmlnIGxpc3QgaXM6IGBJTkVUYCwgYE5FVF9ERVZNRU1gLCBgRE1BX1NIQVJFRF9CVUZGRVJgLCBhbmQgYFBBR0VfUE9PTGAuIFRoYXQncyB0aGUgYmFzZWxpbmUuXG5cbk5vdywgdGhlIGltcG9ydGFudCBzeW1ib2xzIGhlcmUsIHRoZSBvbmVzIEkgbmVlZCB0byByZWFsbHkgdW5kZXJzdGFuZCwgYXJlIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLCBgdGNwX3NlbmRtc2dgLCBhbmQgYG5ldF9kZXZtZW1fZ2V0X2JpbmRpbmdgLlxuXG5JcyB0aGlzIGFjdHVhbGx5IHdvcnRoIHRoZSBlZmZvcnQ/ICBBYnNvbHV0ZWx5LiBUaGlzIHBhdGNoIGZ1bmRhbWVudGFsbHkgYWx0ZXJzIGV4ZWN1dGFibGUgbG9naWMgd2l0aGluIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLCByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhlIFRDUCBuZXR3b3JraW5nIHN1YnN5c3RlbS4gSXQncyBtb2RpZnlpbmcgdGhlIHZhbGlkYXRpb24gY3JpdGVyaWEgZm9yIHplcm8tY29weSBhbmQgZGV2bWVtIGRtYWJ1ZiB0cmFuc21pc3Npb25zIHZpYSBUQ1AncyBgc2VuZG1zZ2AgZnVuY3Rpb24uIEl0J3MgYWRkaW5nIHRpZ2h0ZXIsIG1vcmUgY29ycmVjdCBjaGVja3Mgb24gdGhlIHplcm9jb3B5IGFuZCBkZXZtZW0gYmluZGluZy4gVGhlIGNydWNpYWwgcGFydD8gIFRoaXMgaXMgcmVhY2hhYmxlIGRpcmVjdGx5IGZyb20gdXNlci1zcGFjZSBUQ1Agc29ja2V0cyB1c2luZyBib3RoIGBNU0dfWkVST0NPUFlgICphbmQqIGBTQ01fREVWTUVNX0RNQUJVRmAgY21zZ3MuIFRoYXQgbWFrZXMgaXQgYSBwcmltZSB0YXJnZXQuXG5cbkxldCdzIGRvIGEgcXVpY2sgZG91YmxlLWNoZWNrIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmc6XG4xLiAgYFdvcnRoRnV6emluZ2A6IFRydWUuXG4yLiAgYEZvY3VzU3ltYm9sc2A6IGBbXCJ0Y3Bfc2VuZG1zZ19sb2NrZWRcIiwgXCJ0Y3Bfc2VuZG1zZ1wiLCBcIm5ldF9kZXZtZW1fZ2V0X2JpbmRpbmdcIl1gXG4zLiAgYEVuYWJsZUNvbmZpZ3NgOiBgW1wiSU5FVFwiLCBcIk5FVF9ERVZNRU1cIiwgXCJETUFfU0hBUkVEX0JVRkZFUlwiLCBcIlBBR0VfUE9PTFwiXWBcbjQuICBgUmVhc29uaW5nYDogVGhpcyBjaGFuZ2VzIGNyaXRpY2FsIFRDUCBsb2dpYyBmb3IgemVyby1jb3B5IGFuZCBkZXZtZW0gaW50ZXJhY3Rpb25zLiBJdCdzIHJlYWNoYWJsZSB2aWEgY29tbW9uIHVzZXItc3BhY2Ugc29ja2V0IGNhbGxzLiBJdCBtYWtlcyBhIHBlcmZlY3QgZnV6emluZyBjYW5kaWRhdGUuXG5cbk9rYXksIEknbSByZWFkeSB0byBwcm9jZWVkLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyNzgsIk91dHB1dFRva2VucyI6MTc3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjA4OjM5LjgwNTEzMTQ0NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MzE2NDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJORVRfREVWTUVNXCIsXG4gICAgXCJETUFfU0hBUkVEX0JVRkZFUlwiLFxuICAgIFwiUEFHRV9QT09MXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX3NlbmRtc2dfbG9ja2VkXCIsXG4gICAgXCJ0Y3Bfc2VuZG1zZ1wiLFxuICAgIFwibmV0X2Rldm1lbV9nZXRfYmluZGluZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHZhbGlkYXRpb24gbG9naWMgaW4gdGNwX3NlbmRtc2dfbG9ja2VkKCkgd2hlbiBwcm9jZXNzaW5nIFRDUCB6ZXJvLWNvcHkgbWVzc2FnZXMgd2l0aCBkZXZpY2UgbWVtb3J5IGRtYWJ1ZiBJRHMgKFNDTV9ERVZNRU1fRE1BQlVGKS4gSXQgZW5zdXJlcyB0aGF0IHRyYW5zbWlzc2lvbnMgd2l0aCBkbWFidWZfaWQgZmFpbCB3aXRoIC1FSU5WQUwgdW5sZXNzIHplcm9jb3B5IGlzIGFjdHVhbGx5IGVuYWJsZWQgKHpjID09IE1TR19aRVJPQ09QWSkgYW5kIGEgdmFsaWQgZGV2bWVtIGJpbmRpbmcgZXhpc3RzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIFRDUCBzb2NrZXQgdHJhbnNtaXQgcGF0aHMgdGhhdCBjYW4gYmUgdGVzdGVkIHVzaW5nIHN0YW5kYXJkIHNvY2tldCBzeXNjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJORVRfREVWTUVNXCIsXG4gICAgXCJETUFfU0hBUkVEX0JVRkZFUlwiLFxuICAgIFwiUEFHRV9QT09MXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX3NlbmRtc2dfbG9ja2VkXCIsXG4gICAgXCJ0Y3Bfc2VuZG1zZ1wiLFxuICAgIFwibmV0X2Rldm1lbV9nZXRfYmluZGluZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHZhbGlkYXRpb24gbG9naWMgaW4gdGNwX3NlbmRtc2dfbG9ja2VkKCkgd2hlbiBwcm9jZXNzaW5nIFRDUCB6ZXJvLWNvcHkgbWVzc2FnZXMgd2l0aCBkZXZpY2UgbWVtb3J5IGRtYWJ1ZiBJRHMgKFNDTV9ERVZNRU1fRE1BQlVGKS4gSXQgZW5zdXJlcyB0aGF0IHRyYW5zbWlzc2lvbnMgd2l0aCBkbWFidWZfaWQgZmFpbCB3aXRoIC1FSU5WQUwgdW5sZXNzIHplcm9jb3B5IGlzIGFjdHVhbGx5IGVuYWJsZWQgKHpjID09IE1TR19aRVJPQ09QWSkgYW5kIGEgdmFsaWQgZGV2bWVtIGJpbmRpbmcgZXhpc3RzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIFRDUCBzb2NrZXQgdHJhbnNtaXQgcGF0aHMgdGhhdCBjYW4gYmUgdGVzdGVkIHVzaW5nIHN0YW5kYXJkIHNvY2tldCBzeXNjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MDg6MzkuODc5NDU1NDU5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjE3MDY0ODQ1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjA4OjM5Ljg3OTg5MjE2OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI2MTcwMjA3OTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB0aWdodGVucyBlcnJvciB2YWxpZGF0aW9uIGluIGB0Y3Bfc2VuZG1zZ19sb2NrZWQoKWAgd2hlbiBgc29ja2MuZG1hYnVmX2lkYCBpcyBzdXBwbGllZCwgZW5zdXJpbmcgdGhhdCBkZXZtZW0gdHJhbnNtaXNzaW9uIGlzIG9ubHkgcGVybWl0dGVkIHdoZW4gemVyby1jb3B5IGlzIGFjdGl2ZSAoYHpjID09IE1TR19aRVJPQ09QWWApIGFuZCBhIHZhbGlkIGRldm1lbSBiaW5kaW5nIGV4aXN0cyAoYGJpbmRpbmcgIT0gTlVMTGApLiBBbGwgdmFyaWFibGVzIGV2YWx1YXRlZCBpbiB0aGlzIGNvbmRpdGlvbiAoYHNvY2tjX2VycmAsIGBzb2NrY2AsIGB6Y2AsIGFuZCBgYmluZGluZ2ApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlcy4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBvciBwYWRkaW5nIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzIG9yIG1lbW9yeSBjb3B5aW5nIGxvZ2ljIGluIGEgbWFubmVyIHRoYXQgY291bGQgY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIGludmFsaWQgcG9pbnRlcnMgb3Igc3RhdGUgaW52YXJpYW50cyBhcmUgYWRkcmVzc2FibGUgYnkgc3RhbmRhcmQgZGV0ZWN0b3JzIC8gS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwYjJmMjJjNzI2OTYwM2Y4MzY1ZTE2ZDQyYTI5NGYwZTg2YWIzMTFhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAwMDowNzo0NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmNcbmluZGV4IGI0MjM3ZDBlOTk0ZDYuLjEwZjU4MjgxYmUxN2IgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3AuY1xuKysrIGIvbmV0L2lwdjQvdGNwLmNcbkBAIC0xMTY5LDggKzExNjksNyBAQCBpbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbiBcdFx0XHR6YyA9IE1TR19TUExJQ0VfUEFHRVM7XG4gXHR9XG4gXG4tXHRpZiAoIXNvY2tjX2VyciBcdTAwMjZcdTAwMjYgc29ja2MuZG1hYnVmX2lkIFx1MDAyNlx1MDAyNlxuLVx0ICAgICghKGZsYWdzIFx1MDAyNiBNU0dfWkVST0NPUFkpIHx8ICFzb2NrX2ZsYWcoc2ssIFNPQ0tfWkVST0NPUFkpKSkge1xuK1x0aWYgKCFzb2NrY19lcnIgXHUwMDI2XHUwMDI2IHNvY2tjLmRtYWJ1Zl9pZCBcdTAwMjZcdTAwMjYgKHpjICE9IE1TR19aRVJPQ09QWSB8fCAhYmluZGluZykpIHtcbiBcdFx0ZXJyID0gLUVJTlZBTDtcbiBcdFx0Z290byBvdXRfZXJyO1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MDg6MzkuODc5ODkzNTc5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNDMyMzMxMDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDb2RlOiBUQ1AgSW1wbGVtZW50YXRpb24gRGVlcCBEaXZlKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gd29yay4gVGhpcyBuZXcgcGF0Y2ggbmVlZHMgYSB0aG9yb3VnaCByZXZpZXcuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHRoZSBjb250ZXh0LiBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIHRoZSBjb2RlLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgYG5ldC9pcHY0L3RjcC5jYCBmaWxlLiBHaXZlbiB0aGUgbGluZSBudW1iZXIgcHJvdmlkZWQsIGFyb3VuZCBsaW5lIDExNjksIEknbGwgcHJvYmFibHkgYmUgYWJsZSB0byBkZXRlcm1pbmUgd2hhdCBpcyBiZWluZyBjaGFuZ2VkLlxuXG5JIG5lZWQgdG8gcXVpY2tseSBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLCBzbyBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgd2lsbCBiZSB0aGUgYmVzdCB0b29sIGZvciB0aGlzOyBpdCdzIHRoZSBmYXN0ZXN0IHdheSB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjA4OjUwLjMxMjIyNjkxM1oiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODczMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdGNwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE0MCxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE0MDpcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgTVNHX1pFUk9DT1BZKSBcXHUwMDI2XFx1MDAyNiBzaXplKSB7XFxuMTE0MTpcXHRcXHRcXHRpZiAobXNnLVxcdTAwM2Vtc2dfdWJ1Zikge1xcbjExNDI6XFx0XFx0XFx0XFx0dWFyZyA9IG1zZy1cXHUwMDNlbXNnX3VidWY7XFxuMTE0MzpcXHRcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3JvdXRlX2NhcHMgXFx1MDAyNiBORVRJRl9GX1NHKVxcbjExNDQ6XFx0XFx0XFx0XFx0XFx0emMgPSBNU0dfWkVST0NPUFk7XFxuMTE0NTpcXHRcXHRcXHR9IGVsc2UgaWYgKHNvY2tfZmxhZyhzaywgU09DS19aRVJPQ09QWSkpIHtcXG4xMTQ2OlxcdFxcdFxcdFxcdHNrYiA9IHRjcF93cml0ZV9xdWV1ZV90YWlsKHNrKTtcXG4xMTQ3OlxcdFxcdFxcdFxcdHVhcmcgPSBtc2dfemVyb2NvcHlfcmVhbGxvYyhzaywgc2l6ZSwgc2tiX3pjb3B5KHNrYiksXFxuMTE0ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIXNvY2tjX2VyciBcXHUwMDI2XFx1MDAyNiBzb2NrYy5kbWFidWZfaWQpO1xcbjExNDk6XFx0XFx0XFx0XFx0aWYgKCF1YXJnKSB7XFxuMTE1MDpcXHRcXHRcXHRcXHRcXHRlcnIgPSAtRU5PQlVGUztcXG4xMTUxOlxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4xMTUyOlxcdFxcdFxcdFxcdH1cXG4xMTUzOlxcdFxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfcm91dGVfY2FwcyBcXHUwMDI2IE5FVElGX0ZfU0cpXFxuMTE1NDpcXHRcXHRcXHRcXHRcXHR6YyA9IE1TR19aRVJPQ09QWTtcXG4xMTU1OlxcdFxcdFxcdFxcdGVsc2VcXG4xMTU2OlxcdFxcdFxcdFxcdFxcdHVhcmdfdG9fbXNnemModWFyZyktXFx1MDAzZXplcm9jb3B5ID0gMDtcXG4xMTU3OlxcdFxcbjExNTg6XFx0XFx0XFx0XFx0aWYgKCFzb2NrY19lcnIgXFx1MDAyNlxcdTAwMjYgc29ja2MuZG1hYnVmX2lkKSB7XFxuMTE1OTpcXHRcXHRcXHRcXHRcXHRiaW5kaW5nID0gbmV0X2Rldm1lbV9nZXRfYmluZGluZyhzaywgc29ja2MuZG1hYnVmX2lkKTtcXG4xMTYwOlxcdFxcdFxcdFxcdFxcdGlmIChJU19FUlIoYmluZGluZykpIHtcXG4xMTYxOlxcdFxcdFxcdFxcdFxcdFxcdGVyciA9IFBUUl9FUlIoYmluZGluZyk7XFxuMTE2MjpcXHRcXHRcXHRcXHRcXHRcXHRiaW5kaW5nID0gTlVMTDtcXG4xMTYzOlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4xMTY0OlxcdFxcdFxcdFxcdFxcdH1cXG4xMTY1OlxcdFxcdFxcdFxcdH1cXG4xMTY2OlxcdFxcdFxcdH1cXG4xMTY3OlxcdFxcdH0gZWxzZSBpZiAodW5saWtlbHkobXNnLVxcdTAwM2Vtc2dfZmxhZ3MgXFx1MDAyNiBNU0dfU1BMSUNFX1BBR0VTKSBcXHUwMDI2XFx1MDAyNiBzaXplKSB7XFxuMTE2ODpcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3JvdXRlX2NhcHMgXFx1MDAyNiBORVRJRl9GX1NHKVxcbjExNjk6XFx0XFx0XFx0XFx0emMgPSBNU0dfU1BMSUNFX1BBR0VTO1xcbjExNzA6XFx0XFx0fVxcbjExNzE6XFx0XFxuMTE3MjpcXHRcXHRpZiAoIXNvY2tjX2VyciBcXHUwMDI2XFx1MDAyNiBzb2NrYy5kbWFidWZfaWQgXFx1MDAyNlxcdTAwMjYgKHpjICE9IE1TR19aRVJPQ09QWSB8fCAhYmluZGluZykpIHtcXG4xMTczOlxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuMTE3NDpcXHRcXHRcXHRnb3RvIG91dF9lcnI7XFxuMTE3NTpcXHRcXHR9XFxuMTE3NjpcXHRcXG4xMTc3OlxcdFxcdGlmICh1bmxpa2VseShmbGFncyBcXHUwMDI2IE1TR19GQVNUT1BFTiB8fFxcbjExNzg6XFx0XFx0XFx0ICAgICBpbmV0X3Rlc3RfYml0KERFRkVSX0NPTk5FQ1QsIHNrKSkgXFx1MDAyNlxcdTAwMjZcXG4xMTc5OlxcdFxcdCAgICAhdHAtXFx1MDAzZXJlcGFpcikge1xcbjExODA6XFx0XFx0XFx0ZXJyID0gdGNwX3NlbmRtc2dfZmFzdG9wZW4oc2ssIG1zZywgXFx1MDAyNmNvcGllZF9zeW4sIHNpemUsIHVhcmcpO1xcbjExODE6XFx0XFx0XFx0aWYgKGVyciA9PSAtRUlOUFJPR1JFU1MgXFx1MDAyNlxcdTAwMjYgY29waWVkX3N5biBcXHUwMDNlIDApXFxuMTE4MjpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4xMTgzOlxcdFxcdFxcdGVsc2UgaWYgKGVycilcXG4xMTg0OlxcdFxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4xMTg1OlxcdFxcdH1cXG4xMTg2OlxcdFxcbjExODc6XFx0XFx0dGltZW8gPSBzb2NrX3NuZHRpbWVvKHNrLCBmbGFncyBcXHUwMDI2IE1TR19ET05UV0FJVCk7XFxuMTE4ODpcXHRcXG4xMTg5OlxcdFxcdHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKHNrKTsgIC8qIGlzIHNlbmRpbmcgYXBwbGljYXRpb24tbGltaXRlZD8gKi9cXG4xMTkwOlxcdFxcbjExOTE6XFx0XFx0LyogV2FpdCBmb3IgYSBjb25uZWN0aW9uIHRvIGZpbmlzaC4gT25lIGV4Y2VwdGlvbiBpcyBUQ1AgRmFzdCBPcGVuXFxuMTE5MjpcXHRcXHQgKiAocGFzc2l2ZSBzaWRlKSB3aGVyZSBkYXRhIGlzIGFsbG93ZWQgdG8gYmUgc2VudCBiZWZvcmUgYSBjb25uZWN0aW9uXFxuMTE5MzpcXHRcXHQgKiBpcyBmdWxseSBlc3RhYmxpc2hlZC5cXG4xMTk0OlxcdFxcdCAqL1xcbjExOTU6XFx0XFx0aWYgKCgoMSBcXHUwMDNjXFx1MDAzYyBzay1cXHUwMDNlc2tfc3RhdGUpIFxcdTAwMjYgfihUQ1BGX0VTVEFCTElTSEVEIHwgVENQRl9DTE9TRV9XQUlUKSkgXFx1MDAyNlxcdTAwMjZcXG4xMTk2OlxcdFxcdCAgICAhdGNwX3Bhc3NpdmVfZmFzdG9wZW4oc2spKSB7XFxuMTE5NzpcXHRcXHRcXHRlcnIgPSBza19zdHJlYW1fd2FpdF9jb25uZWN0KHNrLCBcXHUwMDI2dGltZW8pO1xcbjExOTg6XFx0XFx0XFx0aWYgKGVyciAhPSAwKVxcbjExOTk6XFx0XFx0XFx0XFx0Z290byBkb19lcnJvcjtcXG4xMjAwOlxcdFxcdH1cXG4xMjAxOlxcdFxcbjEyMDI6XFx0XFx0aWYgKHVubGlrZWx5KHRwLVxcdTAwM2VyZXBhaXIpKSB7XFxuMTIwMzpcXHRcXHRcXHRpZiAodHAtXFx1MDAzZXJlcGFpcl9xdWV1ZSA9PSBUQ1BfUkVDVl9RVUVVRSkge1xcbjEyMDQ6XFx0XFx0XFx0XFx0Y29waWVkID0gdGNwX3NlbmRfcmN2cShzaywgbXNnLCBzaXplKTtcXG4xMjA1OlxcdFxcdFxcdFxcdGdvdG8gb3V0X25vcHVzaDtcXG4xMjA2OlxcdFxcdFxcdH1cXG4xMjA3OlxcdFxcbjEyMDg6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4xMjA5OlxcdFxcdFxcdGlmICh0cC1cXHUwMDNlcmVwYWlyX3F1ZXVlID09IFRDUF9OT19RVUVVRSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MDg6NTAuMzEyNTE2MTkzWiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3NzU0MjUxOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyBgdGNwX3NlbmRtc2dfbG9ja2VkYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgKmJlZm9yZSogbGluZSAxMTQwIGluIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLiBUaGF0IGZ1bmN0aW9uIGlzIGNyaXRpY2FsLCBlc3BlY2lhbGx5IHdoZW4gd2UncmUgdGFsa2luZyBhYm91dCBzZW5kaW5nIGRhdGEgb3ZlciBUQ1AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgcHJlLWNvbmRpdGlvbnMgYXJlIGVzdGFibGlzaGVkLCB3aGF0J3MgYmVpbmcgaW5pdGlhbGl6ZWQsIGFuZCB3aGF0IGRlY2lzaW9ucyBhcmUgYmVpbmcgbWFkZSB0aGF0IHdpbGwgaW5mbHVlbmNlIHRoZSBleGVjdXRpb24gcGF0aCBsZWFkaW5nIHVwIHRvIHRoYXQgcG9pbnQuIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgY29udHJvbCBmbG93LCBsb29rIGF0IHZhcmlhYmxlIGFzc2lnbm1lbnRzLCBhbmQgY29uc2lkZXIgYW55IHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcywgcGFydGljdWxhcmx5IHRoZSBgc29ja2Agc3RydWN0dXJlLCB0aGUgYHRjcF9zb2NrYCBzdHJ1Y3R1cmUsIGFuZCBhbnkgcmVsYXRlZCBxdWV1ZXMuIElzIHRoaXMgaGFwcGVuaW5nIGR1cmluZyBhIHJlZ3VsYXIgc2VuZCwgb3IgaXMgaXQgcmVsYXRlZCB0byBzb21ldGhpbmcgbGlrZSB1cmdlbnQgZGF0YSwgb3IgYSBzb2NrZXQgc2h1dGRvd24/IEknbGwgcHJvYmFibHkgc3RhcnQgYnkgbG9va2luZyBhdCB0aGUgY2FsbHMgdGhhdCBsZWFkIGludG8gdGhpcyBmdW5jdGlvbiBmcm9tIHRoZSB1cHBlciBsYXllcnMgdG8gZ3Jhc3AgdGhlIGNvbnRleHQuIFdoYXQgbGVkIHVzIGhlcmU/IFdoYXQgZXZlbnRzIHRyaWdnZXJlZCB0aGlzIGNhbGw/IFRoaXMgaXMgZ29pbmcgdG8gYmUgYWJvdXQgdW5kZXJzdGFuZGluZyB0aGUgY29tcGxldGUgc3RhdGUgYmVmb3JlIHRoYXQgbGluZSwgc28gSSBjYW4gc3RhcnQgdG8gaW5mZXIgd2hhdCBjaGFuZ2VzIGFyZSB0YWtpbmcgcGxhY2UsIGFuZCB3aHkuIEknbGwgbmVlZCB0byBjb3JyZWxhdGUgdGhlIHZhcmlhYmxlcyBhdCBsaW5lIDExNDAgdG8gdGhlaXIgdmFsdWVzIGF0IHRoZSBlbnRyeSB0byB0aGUgZnVuY3Rpb24sIGFuZCBsb29rIGZvciBhbnkgY2x1ZXMgYWJvdXQgdGhlIGNvbmRpdGlvbnMuIEZpbmFsbHksIGFmdGVyIGRvaW5nIHRoaXMgcHJlbGltaW5hcnkgaW52ZXN0aWdhdGlvbiwgSSdsbCBiZSBpbiBhIGJldHRlciBwb3NpdGlvbiB0byBzZWUgdGhlIGJyb2FkZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUyMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MDg6NTMuMDg3OTQ0MTIxWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNzU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTAwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTAwOlxcdHtcXG4xMTAxOlxcdFxcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xcbjExMDI6XFx0XFxuMTEwMzpcXHRcXHRpZiAoLyogV2UgaGF2ZSBsZXNzIHRoYW4gb25lIHBhY2tldCB0byBzZW5kLiAqL1xcbjExMDQ6XFx0XFx0ICAgIHRwLVxcdTAwM2V3cml0ZV9zZXEgLSB0cC1cXHUwMDNlc25kX254dCBcXHUwMDNjIHRwLVxcdTAwM2Vtc3NfY2FjaGUgXFx1MDAyNlxcdTAwMjZcXG4xMTA1OlxcdFxcdCAgICAvKiBOb3RoaW5nIGluIHNlbmRpbmcgaG9zdCdzIHFkaXNjIHF1ZXVlcyBvciBOSUMgdHggcXVldWUuICovXFxuMTEwNjpcXHRcXHQgICAgc2tfd21lbV9hbGxvY19nZXQoc2spIFxcdTAwM2MgU0tCX1RSVUVTSVpFKDEpIFxcdTAwMjZcXHUwMDI2XFxuMTEwNzpcXHRcXHQgICAgLyogV2UgYXJlIG5vdCBsaW1pdGVkIGJ5IENXTkQuICovXFxuMTEwODpcXHRcXHQgICAgdGNwX3BhY2tldHNfaW5fZmxpZ2h0KHRwKSBcXHUwMDNjIHRjcF9zbmRfY3duZCh0cCkgXFx1MDAyNlxcdTAwMjZcXG4xMTA5OlxcdFxcdCAgICAvKiBBbGwgbG9zdCBwYWNrZXRzIGhhdmUgYmVlbiByZXRyYW5zbWl0dGVkLiAqL1xcbjExMTA6XFx0XFx0ICAgIHRwLVxcdTAwM2Vsb3N0X291dCBcXHUwMDNjPSB0cC1cXHUwMDNlcmV0cmFuc19vdXQpXFxuMTExMTpcXHRcXHRcXHR0cC1cXHUwMDNlYXBwX2xpbWl0ZWQgPVxcbjExMTI6XFx0XFx0XFx0XFx0KHRwLVxcdTAwM2VkZWxpdmVyZWQgKyB0Y3BfcGFja2V0c19pbl9mbGlnaHQodHApKSA/IDogMTtcXG4xMTEzOlxcdH1cXG4xMTE0OlxcdEVYUE9SVF9TWU1CT0xfR1BMKHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKTtcXG4xMTE1OlxcdFxcbjExMTY6XFx0aW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxuMTExNzpcXHR7XFxuMTExODpcXHRcXHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyA9IE5VTEw7XFxuMTExOTpcXHRcXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcXG4xMTIwOlxcdFxcdHN0cnVjdCB1YnVmX2luZm8gKnVhcmcgPSBOVUxMO1xcbjExMjE6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4xMTIyOlxcdFxcdHN0cnVjdCBzb2NrY21fY29va2llIHNvY2tjO1xcbjExMjM6XFx0XFx0aW50IGZsYWdzLCBlcnIsIGNvcGllZCA9IDA7XFxuMTEyNDpcXHRcXHRpbnQgbXNzX25vdyA9IDAsIHNpemVfZ29hbCwgY29waWVkX3N5biA9IDA7XFxuMTEyNTpcXHRcXHRpbnQgcHJvY2Vzc19iYWNrbG9nID0gMDtcXG4xMTI2OlxcdFxcdGludCBzb2NrY19lcnIgPSAwO1xcbjExMjc6XFx0XFx0aW50IHpjID0gMDtcXG4xMTI4OlxcdFxcdGxvbmcgdGltZW87XFxuMTEyOTpcXHRcXG4xMTMwOlxcdFxcdGZsYWdzID0gbXNnLVxcdTAwM2Vtc2dfZmxhZ3M7XFxuMTEzMTpcXHRcXG4xMTMyOlxcdFxcdHNvY2tjID0gKHN0cnVjdCBzb2NrY21fY29va2llKXsgLnRzZmxhZ3MgPSBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX3RzZmxhZ3MpIH07XFxuMTEzMzpcXHRcXHRpZiAobXNnLVxcdTAwM2Vtc2dfY29udHJvbGxlbikge1xcbjExMzQ6XFx0XFx0XFx0c29ja2NfZXJyID0gc29ja19jbXNnX3NlbmQoc2ssIG1zZywgXFx1MDAyNnNvY2tjKTtcXG4xMTM1OlxcdFxcdFxcdC8qIERvbid0IHJldHVybiBlcnJvciB1bnRpbCBNU0dfRkFTVE9QRU4gaGFzIGJlZW4gcHJvY2Vzc2VkO1xcbjExMzY6XFx0XFx0XFx0ICogdGhhdCBtYXkgc3VjY2VlZCBldmVuIGlmIHRoZSBjbXNnIGlzIGludmFsaWQuXFxuMTEzNzpcXHRcXHRcXHQgKi9cXG4xMTM4OlxcdFxcdH1cXG4xMTM5OlxcdFxcbjExNDA6XFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IE1TR19aRVJPQ09QWSkgXFx1MDAyNlxcdTAwMjYgc2l6ZSkge1xcbjExNDE6XFx0XFx0XFx0aWYgKG1zZy1cXHUwMDNlbXNnX3VidWYpIHtcXG4xMTQyOlxcdFxcdFxcdFxcdHVhcmcgPSBtc2ctXFx1MDAzZW1zZ191YnVmO1xcbjExNDM6XFx0XFx0XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19yb3V0ZV9jYXBzIFxcdTAwMjYgTkVUSUZfRl9TRylcXG4xMTQ0OlxcdFxcdFxcdFxcdFxcdHpjID0gTVNHX1pFUk9DT1BZO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDowODo1My4wODgyNjQ1MzFaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ4OTMyMzI4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIEkgZGVsdmUgaW50byB0aGUgYHRjcF9zZW5kbXNnX2xvY2tlZGAgY29kZTpcblxuKipEaXZpbmcgRGVlcCBpbnRvIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGFuZCBgYmluZGluZ2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIGZvY3VzaW5nIG9uIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIG5vdy4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiB3aGVyZSwgd2l0aGluIHRoaXMgZnVuY3Rpb24sIGRvIHdlIGFjdHVhbGx5ICp1c2UqIGBiaW5kaW5nYD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjb25jZXB0IG9mIFwiYmluZGluZ1wiIOKAkyB0aGUgYXNzb2NpYXRpb24gb2YgYSBzb2NrZXQgd2l0aCBhIHNwZWNpZmljIGxvY2FsIGFkZHJlc3MgYW5kIHBvcnQg4oCTIGlzIGludGVyd292ZW4gaW50byB0aGlzIGNyaXRpY2FsIHNlbmQgcGF0aC4gSXMgaXQgdXNlZCBmb3IgYWRkcmVzcyBzZWxlY3Rpb24sIHBlcmhhcHM/IE9yIG1heWJlIGZvciBlbmZvcmNpbmcgc3BlY2lmaWMgc29ja2V0IG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgZGVzdGluYXRpb24/IEkgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2UgdG8gdW5kZXJzdGFuZCBpdHMgaW1wYWN0IG9uIHRoZSBzZW5kIG9wZXJhdGlvbi4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIGRpcmVjdCByZWZlcmVuY2VzIHRvIHRoZSBgYmluZGluZ2AgdmFyaWFibGUgb3Igc3RydWN0dXJlLiBJIHN1c3BlY3QgaXRzIGluZmx1ZW5jZSB3aWxsIGJlIHN1YnRsZSBpbiBtYW55IGNhc2VzLCBzbyBhIGNvbXByZWhlbnNpdmUgc2VhcmNoIGlzIGluIG9yZGVyLiBJ4oCZbSB0aGlua2luZyBhYm91dCBzY2VuYXJpb3MgaW52b2x2aW5nIG11bHRpY2FzdCwgYWRkcmVzcyBmYW1pbHkgZGlmZmVyZW5jZXMsIG9yIGFueSB0aW1lIHdlIG5lZWQgdG8gYXNzb2NpYXRlIHRoZSBvdXRnb2luZyBkYXRhIHdpdGggdGhlIGxvY2FsIGVuZHBvaW50LiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2ODIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjA4OjU1LjU3NzU5MDc0MloiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODQwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdGNwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIxMCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTIxMDpcXHRcXHRcXHRcXHRnb3RvIG91dF9lcnI7XFxuMTIxMTpcXHRcXG4xMjEyOlxcdFxcdFxcdC8qICdjb21tb24nIHNlbmRpbmcgdG8gc2VuZHEgKi9cXG4xMjEzOlxcdFxcdH1cXG4xMjE0OlxcdFxcbjEyMTU6XFx0XFx0aWYgKHNvY2tjX2Vycikge1xcbjEyMTY6XFx0XFx0XFx0ZXJyID0gc29ja2NfZXJyO1xcbjEyMTc6XFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbjEyMTg6XFx0XFx0fVxcbjEyMTk6XFx0XFxuMTIyMDpcXHRcXHQvKiBUaGlzIHNob3VsZCBiZSBpbiBwb2xsICovXFxuMTIyMTpcXHRcXHRza19jbGVhcl9iaXQoU09DS1dRX0FTWU5DX05PU1BBQ0UsIHNrKTtcXG4xMjIyOlxcdFxcbjEyMjM6XFx0XFx0LyogT2sgY29tbWVuY2Ugc2VuZGluZy4gKi9cXG4xMjI0OlxcdFxcdGNvcGllZCA9IDA7XFxuMTIyNTpcXHRcXG4xMjI2OlxcdHJlc3RhcnQ6XFxuMTIyNzpcXHRcXHRtc3Nfbm93ID0gdGNwX3NlbmRfbXNzKHNrLCBcXHUwMDI2c2l6ZV9nb2FsLCBmbGFncyk7XFxuMTIyODpcXHRcXG4xMjI5OlxcdFxcdGVyciA9IC1FUElQRTtcXG4xMjMwOlxcdFxcdGlmIChzay1cXHUwMDNlc2tfZXJyIHx8IChzay1cXHUwMDNlc2tfc2h1dGRvd24gXFx1MDAyNiBTRU5EX1NIVVRET1dOKSlcXG4xMjMxOlxcdFxcdFxcdGdvdG8gZG9fZXJyb3I7XFxuMTIzMjpcXHRcXG4xMjMzOlxcdFxcdHdoaWxlIChtc2dfZGF0YV9sZWZ0KG1zZykpIHtcXG4xMjM0OlxcdFxcdFxcdGludCBjb3B5ID0gMDtcXG4xMjM1OlxcdFxcbjEyMzY6XFx0XFx0XFx0c2tiID0gdGNwX3dyaXRlX3F1ZXVlX3RhaWwoc2spO1xcbjEyMzc6XFx0XFx0XFx0aWYgKHNrYilcXG4xMjM4OlxcdFxcdFxcdFxcdGNvcHkgPSBzaXplX2dvYWwgLSBza2ItXFx1MDAzZWxlbjtcXG4xMjM5OlxcdFxcbjEyNDA6XFx0XFx0XFx0dHJhY2VfdGNwX3NlbmRtc2dfbG9ja2VkKHNrLCBtc2csIHNrYiwgc2l6ZV9nb2FsKTtcXG4xMjQxOlxcdFxcbjEyNDI6XFx0XFx0XFx0aWYgKGNvcHkgXFx1MDAzYz0gMCB8fCAhdGNwX3NrYl9jYW5fY29sbGFwc2VfdG8oc2tiKSB8fFxcbjEyNDM6XFx0XFx0XFx0ICAgIHVubGlrZWx5KHNrYl9mcmFnc19yZWFkYWJsZShza2IpICE9ICFiaW5kaW5nKSkge1xcbjEyNDQ6XFx0XFx0XFx0XFx0Ym9vbCBmaXJzdF9za2I7XFxuMTI0NTpcXHRcXG4xMjQ2OlxcdG5ld19zZWdtZW50OlxcbjEyNDc6XFx0XFx0XFx0XFx0aWYgKCFza19zdHJlYW1fbWVtb3J5X2ZyZWUoc2spKVxcbjEyNDg6XFx0XFx0XFx0XFx0XFx0Z290byB3YWl0X2Zvcl9zcGFjZTtcXG4xMjQ5OlxcdFxcbjEyNTA6XFx0XFx0XFx0XFx0aWYgKHVubGlrZWx5KHByb2Nlc3NfYmFja2xvZyBcXHUwMDNlPSAxNikpIHtcXG4xMjUxOlxcdFxcdFxcdFxcdFxcdHByb2Nlc3NfYmFja2xvZyA9IDA7XFxuMTI1MjpcXHRcXHRcXHRcXHRcXHRpZiAoc2tfZmx1c2hfYmFja2xvZyhzaykpXFxuMTI1MzpcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIHJlc3RhcnQ7XFxuMTI1NDpcXHRcXHRcXHRcXHR9XFxuMTI1NTpcXHRcXHRcXHRcXHRmaXJzdF9za2IgPSB0Y3BfcnR4X2FuZF93cml0ZV9xdWV1ZXNfZW1wdHkoc2spO1xcbjEyNTY6XFx0XFx0XFx0XFx0c2tiID0gdGNwX3N0cmVhbV9hbGxvY19za2Ioc2ssIHNrLVxcdTAwM2Vza19hbGxvY2F0aW9uLFxcbjEyNTc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgZmlyc3Rfc2tiKTtcXG4xMjU4OlxcdFxcdFxcdFxcdGlmICghc2tiKVxcbjEyNTk6XFx0XFx0XFx0XFx0XFx0Z290byB3YWl0X2Zvcl9zcGFjZTtcXG4xMjYwOlxcdFxcbjEyNjE6XFx0XFx0XFx0XFx0cHJvY2Vzc19iYWNrbG9nKys7XFxuMTI2MjpcXHRcXG4xMjYzOlxcdCNpZmRlZiBDT05GSUdfU0tCX0RFQ1JZUFRFRFxcbjEyNjQ6XFx0XFx0XFx0XFx0c2tiLVxcdTAwM2VkZWNyeXB0ZWQgPSAhIShmbGFncyBcXHUwMDI2IE1TR19TRU5EUEFHRV9ERUNSWVBURUQpO1xcbjEyNjU6XFx0I2VuZGlmXFxuMTI2NjpcXHRcXHRcXHRcXHR0Y3Bfc2tiX2VudGFpbChzaywgc2tiKTtcXG4xMjY3OlxcdFxcdFxcdFxcdGNvcHkgPSBzaXplX2dvYWw7XFxuMTI2ODpcXHRcXG4xMjY5OlxcdFxcdFxcdFxcdC8qIEFsbCBwYWNrZXRzIGFyZSByZXN0b3JlZCBhcyBpZiB0aGV5IGhhdmVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MDg6NTUuNTc3ODc2MjkxWiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4OTUzNDUyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW5uZXIgbW9ub2xvZ3VlOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBgdGNwX3NlbmRtc2dfbG9ja2VkYCoqXG5cbkFscmlnaHQsIHNvIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIGZsb3cgd2l0aGluIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLCBhbmQgc3BlY2lmaWNhbGx5LCB1bmRlcnN0YW5kIHRoZSBwYXRoIGxlYWRpbmcgYWxsIHRoZSB3YXkgZG93biB0byBgb3V0X2VycmAuIEknbSBhbHJlYWR5IHF1aXRlIGZhbWlsaWFyIHdpdGggdGhlIG92ZXJhbGwgVENQIHNlbmRpbmcgcHJvY2Vzcywgc28gdGhpcyBleGVyY2lzZSB3aWxsIGJlIGFib3V0IHBpbnBvaW50aW5nIHRoZSBzcGVjaWZpYyBlcnJvciBjb25kaXRpb25zIHRoYXQgY291bGQgdHJpZ2dlciB0aGF0IHBhcnRpY3VsYXIgcGF0aC4gSSB3YW50IHRvIHNlZSB3aGljaCBzdWJ0bGUgZGV0YWlscyBhcmUgcmVsZXZhbnQuXG5cbkknbSB0aGlua2luZyBhYm91dCB0aGUgZGlmZmVyZW50IGZhaWx1cmUgcG9pbnRzOiBhcmUgd2UgdGFsa2luZyBhYm91dCByZXNvdXJjZSBleGhhdXN0aW9uIChtZW1vcnksIHNvY2tldCBidWZmZXJzKSwgcHJvdG9jb2wgdmlvbGF0aW9ucywgY29uZ2VzdGlvbiBjb250cm9sIGlzc3Vlcywgb3IgcGVyaGFwcyBwcm9ibGVtcyByZWxhdGVkIHRvIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgaW50ZXJmYWNlPyBUaGUgbnVhbmNlcyBhcmUgYWx3YXlzIHRoZSBkZXZpbCBpbiB0aGUgZGV0YWlscywgYW5kIEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZWRnZSBjYXNlcy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIGFueSBvZiB0aGUgY2hlY2tzIG9yIG1hbmlwdWxhdGlvbnMgcGVyZm9ybWVkIHByaW9yIHRvIHRoZSBlcnJvciBwYXRoIGFyZSBhdHlwaWNhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgyNywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MDg6NTguNDczMjI0MTkxWiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwOTEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzcwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzcwOlxcdFxcdFxcdFxcdHNrX21lbV9jaGFyZ2Uoc2ssIGNvcHkpO1xcbjEzNzE6XFx0XFx0XFx0fVxcbjEzNzI6XFx0XFxuMTM3MzpcXHRcXHRcXHRpZiAoIWNvcGllZClcXG4xMzc0OlxcdFxcdFxcdFxcdFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNldGNwX2ZsYWdzIFxcdTAwMjY9IH5UQ1BIRFJfUFNIO1xcbjEzNzU6XFx0XFxuMTM3NjpcXHRcXHRcXHRXUklURV9PTkNFKHRwLVxcdTAwM2V3cml0ZV9zZXEsIHRwLVxcdTAwM2V3cml0ZV9zZXEgKyBjb3B5KTtcXG4xMzc3OlxcdFxcdFxcdFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNlZW5kX3NlcSArPSBjb3B5O1xcbjEzNzg6XFx0XFx0XFx0dGNwX3NrYl9wY291bnRfc2V0KHNrYiwgMCk7XFxuMTM3OTpcXHRcXG4xMzgwOlxcdFxcdFxcdGNvcGllZCArPSBjb3B5O1xcbjEzODE6XFx0XFx0XFx0aWYgKCFtc2dfZGF0YV9sZWZ0KG1zZykpIHtcXG4xMzgyOlxcdFxcdFxcdFxcdGlmICh1bmxpa2VseShmbGFncyBcXHUwMDI2IE1TR19FT1IpKVxcbjEzODM6XFx0XFx0XFx0XFx0XFx0VENQX1NLQl9DQihza2IpLVxcdTAwM2Vlb3IgPSAxO1xcbjEzODQ6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTM4NTpcXHRcXHRcXHR9XFxuMTM4NjpcXHRcXG4xMzg3OlxcdFxcdFxcdGlmIChza2ItXFx1MDAzZWxlbiBcXHUwMDNjIHNpemVfZ29hbCB8fCAoZmxhZ3MgXFx1MDAyNiBNU0dfT09CKSB8fCB1bmxpa2VseSh0cC1cXHUwMDNlcmVwYWlyKSlcXG4xMzg4OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjEzODk6XFx0XFxuMTM5MDpcXHRcXHRcXHRpZiAoZm9yY2VkX3B1c2godHApKSB7XFxuMTM5MTpcXHRcXHRcXHRcXHR0Y3BfbWFya19wdXNoKHRwLCBza2IpO1xcbjEzOTI6XFx0XFx0XFx0XFx0X190Y3BfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzaywgbXNzX25vdywgVENQX05BR0xFX1BVU0gpO1xcbjEzOTM6XFx0XFx0XFx0fSBlbHNlIGlmIChza2IgPT0gdGNwX3NlbmRfaGVhZChzaykpXFxuMTM5NDpcXHRcXHRcXHRcXHR0Y3BfcHVzaF9vbmUoc2ssIG1zc19ub3cpO1xcbjEzOTU6XFx0XFx0XFx0Y29udGludWU7XFxuMTM5NjpcXHRcXG4xMzk3OlxcdHdhaXRfZm9yX3NwYWNlOlxcbjEzOTg6XFx0XFx0XFx0c2V0X2JpdChTT0NLX05PU1BBQ0UsIFxcdTAwMjZzay1cXHUwMDNlc2tfc29ja2V0LVxcdTAwM2VmbGFncyk7XFxuMTM5OTpcXHRcXHRcXHR0Y3BfcmVtb3ZlX2VtcHR5X3NrYihzayk7XFxuMTQwMDpcXHRcXHRcXHRpZiAoY29waWVkKVxcbjE0MDE6XFx0XFx0XFx0XFx0dGNwX3B1c2goc2ssIGZsYWdzIFxcdTAwMjYgfk1TR19NT1JFLCBtc3Nfbm93LFxcbjE0MDI6XFx0XFx0XFx0XFx0XFx0IFRDUF9OQUdMRV9QVVNILCBzaXplX2dvYWwpO1xcbjE0MDM6XFx0XFxuMTQwNDpcXHRcXHRcXHRlcnIgPSBza19zdHJlYW1fd2FpdF9tZW1vcnkoc2ssIFxcdTAwMjZ0aW1lbyk7XFxuMTQwNTpcXHRcXHRcXHRpZiAoZXJyICE9IDApXFxuMTQwNjpcXHRcXHRcXHRcXHRnb3RvIGRvX2Vycm9yO1xcbjE0MDc6XFx0XFxuMTQwODpcXHRcXHRcXHRtc3Nfbm93ID0gdGNwX3NlbmRfbXNzKHNrLCBcXHUwMDI2c2l6ZV9nb2FsLCBmbGFncyk7XFxuMTQwOTpcXHRcXHR9XFxuMTQxMDpcXHRcXG4xNDExOlxcdG91dDpcXG4xNDEyOlxcdFxcdGlmIChjb3BpZWQpIHtcXG4xNDEzOlxcdFxcdFxcdHRjcF90eF90aW1lc3RhbXAoc2ssIFxcdTAwMjZzb2NrYyk7XFxuMTQxNDpcXHRcXHRcXHR0Y3BfcHVzaChzaywgZmxhZ3MsIG1zc19ub3csIHRwLVxcdTAwM2Vub25hZ2xlLCBzaXplX2dvYWwpO1xcbjE0MTU6XFx0XFx0fVxcbjE0MTY6XFx0b3V0X25vcHVzaDpcXG4xNDE3OlxcdFxcdC8qIG1zZy1cXHUwMDNlbXNnX3VidWYgaXMgcGlubmVkIGJ5IHRoZSBjYWxsZXIgc28gd2UgZG9uJ3QgdGFrZSBleHRyYSByZWZzICovXFxuMTQxODpcXHRcXHRpZiAodWFyZyBcXHUwMDI2XFx1MDAyNiAhbXNnLVxcdTAwM2Vtc2dfdWJ1ZilcXG4xNDE5OlxcdFxcdFxcdG5ldF96Y29weV9wdXQodWFyZyk7XFxuMTQyMDpcXHRcXHRpZiAoYmluZGluZylcXG4xNDIxOlxcdFxcdFxcdG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmdfcHV0KGJpbmRpbmcpO1xcbjE0MjI6XFx0XFx0cmV0dXJuIGNvcGllZCArIGNvcGllZF9zeW47XFxuMTQyMzpcXHRcXG4xNDI0OlxcdGRvX2Vycm9yOlxcbjE0MjU6XFx0XFx0dGNwX3JlbW92ZV9lbXB0eV9za2Ioc2spO1xcbjE0MjY6XFx0XFxuMTQyNzpcXHRcXHRpZiAoY29waWVkICsgY29waWVkX3N5bilcXG4xNDI4OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE0Mjk6XFx0b3V0X2VycjpcXG4xNDMwOlxcdFxcdC8qIG1zZy1cXHUwMDNlbXNnX3VidWYgaXMgcGlubmVkIGJ5IHRoZSBjYWxsZXIgc28gd2UgZG9uJ3QgdGFrZSBleHRyYSByZWZzICovXFxuMTQzMTpcXHRcXHRpZiAodWFyZyBcXHUwMDI2XFx1MDAyNiAhbXNnLVxcdTAwM2Vtc2dfdWJ1ZilcXG4xNDMyOlxcdFxcdFxcdG5ldF96Y29weV9wdXRfYWJvcnQodWFyZywgdHJ1ZSk7XFxuMTQzMzpcXHRcXHRlcnIgPSBza19zdHJlYW1fZXJyb3Ioc2ssIGZsYWdzLCBlcnIpO1xcbjE0MzQ6XFx0XFx0LyogbWFrZSBzdXJlIHdlIHdha2UgYW55IGVwb2xsIGVkZ2UgdHJpZ2dlciB3YWl0ZXIgKi9cXG4xNDM1OlxcdFxcdGlmICh1bmxpa2VseSh0Y3BfcnR4X2FuZF93cml0ZV9xdWV1ZXNfZW1wdHkoc2spIFxcdTAwMjZcXHUwMDI2IGVyciA9PSAtRUFHQUlOKSkge1xcbjE0MzY6XFx0XFx0XFx0UkVBRF9PTkNFKHNrLVxcdTAwM2Vza193cml0ZV9zcGFjZSkoc2spO1xcbjE0Mzc6XFx0XFx0XFx0dGNwX2Nocm9ub19zdG9wKHNrLCBUQ1BfQ0hST05PX1NOREJVRl9MSU1JVEVEKTtcXG4xNDM4OlxcdFxcdH1cXG4xNDM5OlxcdFxcdGlmIChiaW5kaW5nKVxcbjE0NDA6XFx0XFx0XFx0bmV0X2Rldm1lbV9kbWFidWZfYmluZGluZ19wdXQoYmluZGluZyk7XFxuMTQ0MTpcXHRcXG4xNDQyOlxcdFxcdHJldHVybiBlcnI7XFxuMTQ0MzpcXHR9XFxuMTQ0NDpcXHRFWFBPUlRfU1lNQk9MX0dQTCh0Y3Bfc2VuZG1zZ19sb2NrZWQpO1xcbjE0NDU6XFx0XFxuMTQ0NjpcXHRpbnQgdGNwX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbjE0NDc6XFx0e1xcbjE0NDg6XFx0XFx0aW50IHJldDtcXG4xNDQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDowODo1OC40NzM1NDAwNTFaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzU3NjU0MDczMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBUQ1AgU2VuZG1zZyBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gSSdtIGxvb2tpbmcgYXQgYSBjaGFuZ2UgaW4gYHRjcF9zZW5kbXNnX2xvY2tlZGAuIFRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIGNoZWNrIHRvIHNlZSBpZiBgZG1hYnVmX2lkYCB3YXMgc2V0IGluIGEgYHNvY2tjbV9jb29raWVgLCBidXQgdGhhdCBjaGVjayBoYWQgc29tZSBjb25kaXRpb25zIHdoZXJlIGl0IG1pZ2h0ICpub3QqIGJlIHRyaWdnZXJlZCBldmVuIGlmIHRoZSBgZG1hYnVmX2lkYCAqd2FzKiBzZXQuIFRoaXMgY291bGQgcG90ZW50aWFsbHkgbGVhZCB0byBwcm9ibGVtcyBkb3duc3RyZWFtIGJlY2F1c2UgdGhlIHN5c3RlbSBtaWdodCBhc3N1bWUgdGhlIGBkbWFidWZgIHdhcyBjb3JyZWN0bHkgYm91bmQsIHdoZW4gaXQgd2Fzbid0LlxuXG5UaGUgcHJldmlvdXMgY29kZSB3YXMgZXNzZW50aWFsbHkgc2F5aW5nLCBcIklmIHRoZXJlJ3MgYSBETUEgYnVmZmVyIElELCBhbmQgd2UgKmFyZW4ndCogdXNpbmcgemVyby1jb3B5IChvciBpdCdzIG5vdCBlbmFibGVkIG9uIHRoZSBzb2NrZXQpLCB0aGVuIGVycm9yIG91dC5cIiAgQnV0IHRoZXJlIHdlcmUgY29ybmVyIGNhc2VzLiBTcGVjaWZpY2FsbHksIGB6Y2AgbWlnaHQgKm5vdCogYmUgc2V0IHRvIGBNU0dfWkVST0NPUFlgLCBhbmQgYGJpbmRpbmdgICh3aGljaCBJIGFzc3VtZSBpcyBhIHBvaW50ZXIgdG8gc29tZXRoaW5nIGNydWNpYWwpIG1pZ2h0IGJlIGBOVUxMYC5cblxuVGhlIGZpeCBzdHJlbmd0aGVucyB0aGlzIHZhbGlkYXRpb246IGBpZiAoIXNvY2tjX2VyciBcdTAwMjZcdTAwMjYgc29ja2MuZG1hYnVmX2lkIFx1MDAyNlx1MDAyNiAoemMgIT0gTVNHX1pFUk9DT1BZIHx8ICFiaW5kaW5nKSlgLiBOb3cgaXQgKmFsd2F5cyogY2hlY2tzOiBJZiBgZG1hYnVmX2lkYCBpcyBzZXQsIGVpdGhlciBgemNgICptdXN0KiBiZSBgTVNHX1pFUk9DT1BZYCBvciB0aGUgYmluZGluZyBpcyBub3QgbnVsbC4gVGhhdCBlbnN1cmVzIHRoYXQgaWYgemVyby1jb3B5IGlzIHVzZWQgYW5kIGBkbWFidWZfaWRgIGlzIHBhc3NlZCwgdGhlIGFzc29jaWF0ZWQgc3RydWN0dXJlIChgYmluZGluZ2ApIGlzIHZhbGlkLlxuXG5NeSBtYWluIGNvbmNlcm4gd2l0aCBhIHBhdGNoIGxpa2UgdGhpcyBpcyB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGNoYW5nZSBkb2Vzbid0IGludHJvZHVjZSB0aG9zZSByaXNrcywgb3IgY2F1c2UgdW5pbml0aWFsaXplZCB2YWx1ZXMgdG8gYmUgcmVhZCBpbiBzb21lIHJlYWNoYWJsZSBjb2RlIHBhdGguXG5cbkxldCdzIGxvb2sgYXQgdGhlIHZhcmlhYmxlcyBpbnZvbHZlZCBpbiB0aGUgY29uZGl0aW9uOlxuLSAgIGBzb2NrY19lcnJgOiBJbml0aWFsaXplZCB0byAwLiBHb29kLlxuLSAgIGBzb2NrY2A6IEluaXRpYWxpemVkIGF0IGxpbmUgMTEzMiBhbmQgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQuXG4tICAgYHNvY2tjLmRtYWJ1Zl9pZGA6IEluaXRpYWxpemVkIHRvIDAgdGhyb3VnaCBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24sIGFuZCBpdCBvbmx5IGdldHMgcG9wdWxhdGVkIGlmIGBtc2ctXHUwMDNlbXNnX2NvbnRyb2xsZW5gIGlzIHNldC5cbi0gICBgemNgOiBJbml0aWFsaXplZCB0byAwLiBHb29kLlxuLSAgIGBiaW5kaW5nYDogSW5pdGlhbGl6ZWQgdG8gYE5VTExgLlxuXG5Pa2F5LCBldmVyeXRoaW5nIGlzIHByb3Blcmx5IGluaXRpYWxpemVkLiBUaGlzIGlzIHNpbXBseSBzdHJlbmd0aGVuaW5nIHZhbGlkYXRpb24gbG9naWMsIHdoaWNoIG1ha2VzIGl0IHNhZmUuIFRoZSBwYXRjaCBkb2Vzbid0IGludm9sdmUgYW55IGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlIChzbywgbm8gcmlza3MgZm9yIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGluIGRhdGEgcGFzc2VkIGFjcm9zcyB0aGUga2VybmVsL3VzZXIgYm91bmRhcnkpLCBhbmQgaXQncyBub3QgYSBtZW1vcnkgYWxsb2NhdGlvbi9pbml0aWFsaXphdGlvbiBpc3N1ZS5cblxuVGhpcyBpcyBhbGwgKmxvZ2ljKiB2YWxpZGF0aW9uLCByZWFsbHkgdGlnaHRlbmluZyBpbnB1dCB2YWxpZGF0aW9uIGZvciBkZXZtZW0gVENQIHplcm8tY29weSB0cmFuc21pc3Npb24uICBJJ20gbm90IHNlZWluZyBhbnkgc2NlbmFyaW9zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdvdWxkIGJlIHJlYWQgYXMgYSByZXN1bHQgb2YgKnRoaXMqIHBhdGNoLiBUaGVyZWZvcmUsIEknbSBjb25maWRlbnQgdGhhdCBLTVNBTiBmdXp6aW5nIGlzIHVubmVjZXNzYXJ5IGhlcmUuIFRoaXMgaXMgYSBzb2xpZCwgc2FmZSBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNjcsIk91dHB1dFRva2VucyI6MTk1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEwMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjA5OjA2LjA1MDA4Mjk5M1oiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdGlnaHRlbnMgZXJyb3IgdmFsaWRhdGlvbiBpbiBgdGNwX3NlbmRtc2dfbG9ja2VkKClgIHdoZW4gYHNvY2tjLmRtYWJ1Zl9pZGAgaXMgc3VwcGxpZWQsIGVuc3VyaW5nIHRoYXQgZGV2bWVtIHRyYW5zbWlzc2lvbiBpcyBvbmx5IHBlcm1pdHRlZCB3aGVuIHplcm8tY29weSBpcyBhY3RpdmUgKGB6YyA9PSBNU0dfWkVST0NPUFlgKSBhbmQgYSB2YWxpZCBkZXZtZW0gYmluZGluZyBleGlzdHMgKGBiaW5kaW5nICE9IE5VTExgKS4gQWxsIHZhcmlhYmxlcyBldmFsdWF0ZWQgaW4gdGhpcyBjb25kaXRpb24gKGBzb2NrY19lcnJgLCBgc29ja2NgLCBgemNgLCBhbmQgYGJpbmRpbmdgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZXMuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBtZW1vcnkgY29weWluZyBsb2dpYyBpbiBhIG1hbm5lciB0aGF0IGNvdWxkIGNhdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBpbnZhbGlkIHBvaW50ZXJzIG9yIHN0YXRlIGludmFyaWFudHMgYXJlIGFkZHJlc3NhYmxlIGJ5IHN0YW5kYXJkIGRldGVjdG9ycyAvIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdGlnaHRlbnMgZXJyb3IgdmFsaWRhdGlvbiBpbiBgdGNwX3NlbmRtc2dfbG9ja2VkKClgIHdoZW4gYHNvY2tjLmRtYWJ1Zl9pZGAgaXMgc3VwcGxpZWQsIGVuc3VyaW5nIHRoYXQgZGV2bWVtIHRyYW5zbWlzc2lvbiBpcyBvbmx5IHBlcm1pdHRlZCB3aGVuIHplcm8tY29weSBpcyBhY3RpdmUgKGB6YyA9PSBNU0dfWkVST0NPUFlgKSBhbmQgYSB2YWxpZCBkZXZtZW0gYmluZGluZyBleGlzdHMgKGBiaW5kaW5nICE9IE5VTExgKS4gQWxsIHZhcmlhYmxlcyBldmFsdWF0ZWQgaW4gdGhpcyBjb25kaXRpb24gKGBzb2NrY19lcnJgLCBgc29ja2NgLCBgemNgLCBhbmQgYGJpbmRpbmdgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZXMuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBtZW1vcnkgY29weWluZyBsb2dpYyBpbiBhIG1hbm5lciB0aGF0IGNvdWxkIGNhdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBpbnZhbGlkIHBvaW50ZXJzIG9yIHN0YXRlIGludmFyaWFudHMgYXJlIGFkZHJlc3NhYmxlIGJ5IHN0YW5kYXJkIGRldGVjdG9ycyAvIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowgbz7c[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-05 23:52:17 +0000 UTC FinishedAt: 2026-09-06 00:09:07 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "8ab1afb2eb246ab15b301cd255b5943d208a93c1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "NET_DEVMEM", "DMA_SHARED_BUFFER", "PAGE_POOL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "8ab1afb2eb246ab15b301cd255b5943d208a93c1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "NET_DEVMEM", "DMA_SHARED_BUFFER", "PAGE_POOL" ], "series_id": "f0e780a4-70c5-478e-b5ab-801e596a21a0" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tcp_sendmsg_locked", "tcp_sendmsg", "net_devmem_get_binding" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7TkVUX0RFVk1FTSYjMzQ7LAogICAgJiMzNDtETUFfU0hBUkVEX0JVRkZFUiYjMzQ7LAogICAgJiMzNDtQQUdFX1BPT0wmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3Bfc2VuZG1zZ19sb2NrZWQmIzM0OywKICAgICYjMzQ7dGNwX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7bmV0X2Rldm1lbV9nZXRfYmluZGluZyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHRpZ2h0ZW5zIGVycm9yIHZhbGlkYXRpb24gaW4gYHRjcF9zZW5kbXNnX2xvY2tlZCgpYCB3aGVuIGBzb2NrYy5kbWFidWZfaWRgIGlzIHN1cHBsaWVkLCBlbnN1cmluZyB0aGF0IGRldm1lbSB0cmFuc21pc3Npb24gaXMgb25seSBwZXJtaXR0ZWQgd2hlbiB6ZXJvLWNvcHkgaXMgYWN0aXZlIChgemMgPT0gTVNHX1pFUk9DT1BZYCkgYW5kIGEgdmFsaWQgZGV2bWVtIGJpbmRpbmcgZXhpc3RzIChgYmluZGluZyAhPSBOVUxMYCkuIEFsbCB2YXJpYWJsZXMgZXZhbHVhdGVkIGluIHRoaXMgY29uZGl0aW9uIChgc29ja2NfZXJyYCwgYHNvY2tjYCwgYHpjYCwgYW5kIGBiaW5kaW5nYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgc3RhY2sgdmFyaWFibGVzLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IG9yIHBhZGRpbmcgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBib3VuZHMgb3IgbWVtb3J5IGNvcHlpbmcgbG9naWMgaW4gYSBtYW5uZXIgdGhhdCBjb3VsZCBjYXVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gaW52YWxpZCBwb2ludGVycyBvciBzdGF0ZSBpbnZhcmlhbnRzIGFyZSBhZGRyZXNzYWJsZSBieSBzdGFuZGFyZCBkZXRlY3RvcnMgLyBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB2YWxpZGF0aW9uIGxvZ2ljIGluIHRjcF9zZW5kbXNnX2xvY2tlZCgpIHdoZW4gcHJvY2Vzc2luZyBUQ1AgemVyby1jb3B5IG1lc3NhZ2VzIHdpdGggZGV2aWNlIG1lbW9yeSBkbWFidWYgSURzIChTQ01fREVWTUVNX0RNQUJVRikuIEl0IGVuc3VyZXMgdGhhdCB0cmFuc21pc3Npb25zIHdpdGggZG1hYnVmX2lkIGZhaWwgd2l0aCAtRUlOVkFMIHVubGVzcyB6ZXJvY29weSBpcyBhY3R1YWxseSBlbmFibGVkICh6YyA9PSBNU0dfWkVST0NPUFkpIGFuZCBhIHZhbGlkIGRldm1lbSBiaW5kaW5nIGV4aXN0cy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBUQ1Agc29ja2V0IHRyYW5zbWl0IHBhdGhzIHRoYXQgY2FuIGJlIHRlc3RlZCB1c2luZyBzdGFuZGFyZCBzb2NrZXQgc3lzY2FsbHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwYjJmMjJjNzI2OTYwM2Y4MzY1ZTE2ZDQyYTI5NGYwZTg2YWIzMTFhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAwMDowNzo0NyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jXG5pbmRleCBiNDIzN2QwZTk5NGQ2Li4xMGY1ODI4MWJlMTdiIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcC5jXG5AQCAtMTE2OSw4ICYjNDM7MTE2OSw3IEBAIGludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuIFx0XHRcdHpjID0gTVNHX1NQTElDRV9QQUdFUztcbiBcdH1cbiBcbi1cdGlmICghc29ja2NfZXJyIFx1MDAyNlx1MDAyNiBzb2NrYy5kbWFidWZfaWQgXHUwMDI2XHUwMDI2XG4tXHQgICAgKCEoZmxhZ3MgXHUwMDI2IE1TR19aRVJPQ09QWSkgfHwgIXNvY2tfZmxhZyhzaywgU09DS19aRVJPQ09QWSkpKSB7XG4mIzQzO1x0aWYgKCFzb2NrY19lcnIgXHUwMDI2XHUwMDI2IHNvY2tjLmRtYWJ1Zl9pZCBcdTAwMjZcdTAwMjYgKHpjICE9IE1TR19aRVJPQ09QWSB8fCAhYmluZGluZykpIHtcbiBcdFx0ZXJyID0gLUVJTlZBTDtcbiBcdFx0Z290byBvdXRfZXJyO1xuIFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjA3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7TkVUX0RFVk1FTSYjMzQ7LAogICAgJiMzNDtETUFfU0hBUkVEX0JVRkZFUiYjMzQ7LAogICAgJiMzNDtQQUdFX1BPT0wmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3Bfc2VuZG1zZ19sb2NrZWQmIzM0OywKICAgICYjMzQ7dGNwX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7bmV0X2Rldm1lbV9nZXRfYmluZGluZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB2YWxpZGF0aW9uIGxvZ2ljIGluIHRjcF9zZW5kbXNnX2xvY2tlZCgpIHdoZW4gcHJvY2Vzc2luZyBUQ1AgemVyby1jb3B5IG1lc3NhZ2VzIHdpdGggZGV2aWNlIG1lbW9yeSBkbWFidWYgSURzIChTQ01fREVWTUVNX0RNQUJVRikuIEl0IGVuc3VyZXMgdGhhdCB0cmFuc21pc3Npb25zIHdpdGggZG1hYnVmX2lkIGZhaWwgd2l0aCAtRUlOVkFMIHVubGVzcyB6ZXJvY29weSBpcyBhY3R1YWxseSBlbmFibGVkICh6YyA9PSBNU0dfWkVST0NPUFkpIGFuZCBhIHZhbGlkIGRldm1lbSBiaW5kaW5nIGV4aXN0cy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBUQ1Agc29ja2V0IHRyYW5zbWl0IHBhdGhzIHRoYXQgY2FuIGJlIHRlc3RlZCB1c2luZyBzdGFuZGFyZCBzb2NrZXQgc3lzY2FsbHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwYjJmMjJjNzI2OTYwM2Y4MzY1ZTE2ZDQyYTI5NGYwZTg2YWIzMTFhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgNiAwMDowNzo0NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmMKaW5kZXggYjQyMzdkMGU5OTRkNi4uMTBmNTgyODFiZTE3YiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwLmMKQEAgLTExNjksOCAmIzQzOzExNjksNyBAQCBpbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSkKIAkJCXpjID0gTVNHX1NQTElDRV9QQUdFUzsKIAl9CiAKLQlpZiAoIXNvY2tjX2VyciAmYW1wOyZhbXA7IHNvY2tjLmRtYWJ1Zl9pZCAmYW1wOyZhbXA7Ci0JICAgICghKGZsYWdzICZhbXA7IE1TR19aRVJPQ09QWSkgfHwgIXNvY2tfZmxhZyhzaywgU09DS19aRVJPQ09QWSkpKSB7CiYjNDM7CWlmICghc29ja2NfZXJyICZhbXA7JmFtcDsgc29ja2MuZG1hYnVmX2lkICZhbXA7JmFtcDsgKHpjICE9IE1TR19aRVJPQ09QWSB8fCAhYmluZGluZykpIHsKIAkJZXJyID0gLUVJTlZBTDsKIAkJZ290byBvdXRfZXJyOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkwNQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb24sIHByZXNlbnRlZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydDoKCioqRGl2aW5nIGludG8gdGhlIFRDUCBDb2RlKioKCk9rYXksIHNvIHdlIGhhdmUgYSBwYXRjaCB0byByZXZpZXcsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIGBuZXQvaXB2NC90Y3AuY2AgZmlsZSBhbmQsIG1vcmUgcHJlY2lzZWx5LCB0aGUgYHRjcF9zZW5kbXNnX2xvY2tlZGAgZnVuY3Rpb24uIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHRoZSAqY29udGV4dCogc3Vycm91bmRpbmcgdGhpcyBjaGFuZ2UuIEkmIzM5O20gZ29pbmcgdG8gbGV2ZXJhZ2UgbXkgZXN0YWJsaXNoZWQgdG9vbGtpdC4gSSYjMzk7bGwgcmVhY2ggZm9yIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCwgZGVwZW5kaW5nIG9uIG15IHByZWZlcmVuY2UsIHRvIHplcm8gaW4gb24gYG5ldC9pcHY0L3RjcC5jYCBhcm91bmQgbGluZSAxMTY5LiBUaGlzIGFwcHJvYWNoIGdpdmVzIG1lIGEgcXVpY2sgd2luZG93IGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGxldHRpbmcgbWUgdW5kZXJzdGFuZCB0aGUgaW1tZWRpYXRlIGRlcGVuZGVuY2llcyBhbmQgcG90ZW50aWFsIGltcGFjdCBvZiB0aGUgcHJvcG9zZWQgY2hhbmdlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgKmJlZm9yZSogdGhhdCBsaW5lLCBhbmQgd2hhdCB0aGUgY29kZSBkb2VzICphZnRlciogdGhlIGxpbmUgaW4gdGhlIHJvdXRpbmUgYHRjcF9zZW5kbXNnX2xvY2tlZGAsIGJlY2F1c2UgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYWx3YXlzIHByb3ZpZGVzIHRoZSB2aXRhbCBjb250ZXh0IEkgbmVlZCB0byBwcm9wZXJseSBpbnRlcnByZXQgdGhlIG1vZGlmaWNhdGlvbi4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IHRvIHNlZSB0aGUgY29kZSwgYW5kIHVuZGVyc3RhbmQgdGhlIGludGVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTQwOlx0XHRpZiAoKGZsYWdzIFx1MDAyNiBNU0dfWkVST0NPUFkpIFx1MDAyNlx1MDAyNiBzaXplKSB7XG4xMTQxOlx0XHRcdGlmIChtc2ctXHUwMDNlbXNnX3VidWYpIHtcbjExNDI6XHRcdFx0XHR1YXJnID0gbXNnLVx1MDAzZW1zZ191YnVmO1xuMTE0MzpcdFx0XHRcdGlmIChzay1cdTAwM2Vza19yb3V0ZV9jYXBzIFx1MDAyNiBORVRJRl9GX1NHKVxuMTE0NDpcdFx0XHRcdFx0emMgPSBNU0dfWkVST0NPUFk7XG4xMTQ1Olx0XHRcdH0gZWxzZSBpZiAoc29ja19mbGFnKHNrLCBTT0NLX1pFUk9DT1BZKSkge1xuMTE0NjpcdFx0XHRcdHNrYiA9IHRjcF93cml0ZV9xdWV1ZV90YWlsKHNrKTtcbjExNDc6XHRcdFx0XHR1YXJnID0gbXNnX3plcm9jb3B5X3JlYWxsb2Moc2ssIHNpemUsIHNrYl96Y29weShza2IpLFxuMTE0ODpcdFx0XHRcdFx0XHRcdCAgICAhc29ja2NfZXJyIFx1MDAyNlx1MDAyNiBzb2NrYy5kbWFidWZfaWQpO1xuMTE0OTpcdFx0XHRcdGlmICghdWFyZykge1xuMTE1MDpcdFx0XHRcdFx0ZXJyID0gLUVOT0JVRlM7XG4xMTUxOlx0XHRcdFx0XHRnb3RvIG91dF9lcnI7XG4xMTUyOlx0XHRcdFx0fVxuMTE1MzpcdFx0XHRcdGlmIChzay1cdTAwM2Vza19yb3V0ZV9jYXBzIFx1MDAyNiBORVRJRl9GX1NHKVxuMTE1NDpcdFx0XHRcdFx0emMgPSBNU0dfWkVST0NPUFk7XG4xMTU1Olx0XHRcdFx0ZWxzZVxuMTE1NjpcdFx0XHRcdFx0dWFyZ190b19tc2d6Yyh1YXJnKS1cdTAwM2V6ZXJvY29weSA9IDA7XG4xMTU3Olx0XG4xMTU4Olx0XHRcdFx0aWYgKCFzb2NrY19lcnIgXHUwMDI2XHUwMDI2IHNvY2tjLmRtYWJ1Zl9pZCkge1xuMTE1OTpcdFx0XHRcdFx0YmluZGluZyA9IG5ldF9kZXZtZW1fZ2V0X2JpbmRpbmcoc2ssIHNvY2tjLmRtYWJ1Zl9pZCk7XG4xMTYwOlx0XHRcdFx0XHRpZiAoSVNfRVJSKGJpbmRpbmcpKSB7XG4xMTYxOlx0XHRcdFx0XHRcdGVyciA9IFBUUl9FUlIoYmluZGluZyk7XG4xMTYyOlx0XHRcdFx0XHRcdGJpbmRpbmcgPSBOVUxMO1xuMTE2MzpcdFx0XHRcdFx0XHRnb3RvIG91dF9lcnI7XG4xMTY0Olx0XHRcdFx0XHR9XG4xMTY1Olx0XHRcdFx0fVxuMTE2NjpcdFx0XHR9XG4xMTY3Olx0XHR9IGVsc2UgaWYgKHVubGlrZWx5KG1zZy1cdTAwM2Vtc2dfZmxhZ3MgXHUwMDI2IE1TR19TUExJQ0VfUEFHRVMpIFx1MDAyNlx1MDAyNiBzaXplKSB7XG4xMTY4Olx0XHRcdGlmIChzay1cdTAwM2Vza19yb3V0ZV9jYXBzIFx1MDAyNiBORVRJRl9GX1NHKVxuMTE2OTpcdFx0XHRcdHpjID0gTVNHX1NQTElDRV9QQUdFUztcbjExNzA6XHRcdH1cbjExNzE6XHRcbjExNzI6XHRcdGlmICghc29ja2NfZXJyIFx1MDAyNlx1MDAyNiBzb2NrYy5kbWFidWZfaWQgXHUwMDI2XHUwMDI2ICh6YyAhPSBNU0dfWkVST0NPUFkgfHwgIWJpbmRpbmcpKSB7XG4xMTczOlx0XHRcdGVyciA9IC1FSU5WQUw7XG4xMTc0Olx0XHRcdGdvdG8gb3V0X2VycjtcbjExNzU6XHRcdH1cbjExNzY6XHRcbjExNzc6XHRcdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgTVNHX0ZBU1RPUEVOIHx8XG4xMTc4Olx0XHRcdCAgICAgaW5ldF90ZXN0X2JpdChERUZFUl9DT05ORUNULCBzaykpIFx1MDAyNlx1MDAyNlxuMTE3OTpcdFx0ICAgICF0cC1cdTAwM2VyZXBhaXIpIHtcbjExODA6XHRcdFx0ZXJyID0gdGNwX3NlbmRtc2dfZmFzdG9wZW4oc2ssIG1zZywgXHUwMDI2Y29waWVkX3N5biwgc2l6ZSwgdWFyZyk7XG4xMTgxOlx0XHRcdGlmIChlcnIgPT0gLUVJTlBST0dSRVNTIFx1MDAyNlx1MDAyNiBjb3BpZWRfc3luIFx1MDAzZSAwKVxuMTE4MjpcdFx0XHRcdGdvdG8gb3V0O1xuMTE4MzpcdFx0XHRlbHNlIGlmIChlcnIpXG4xMTg0Olx0XHRcdFx0Z290byBvdXRfZXJyO1xuMTE4NTpcdFx0fVxuMTE4NjpcdFxuMTE4NzpcdFx0dGltZW8gPSBzb2NrX3NuZHRpbWVvKHNrLCBmbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKTtcbjExODg6XHRcbjExODk6XHRcdHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKHNrKTsgIC8qIGlzIHNlbmRpbmcgYXBwbGljYXRpb24tbGltaXRlZD8gKi9cbjExOTA6XHRcbjExOTE6XHRcdC8qIFdhaXQgZm9yIGEgY29ubmVjdGlvbiB0byBmaW5pc2guIE9uZSBleGNlcHRpb24gaXMgVENQIEZhc3QgT3BlblxuMTE5MjpcdFx0ICogKHBhc3NpdmUgc2lkZSkgd2hlcmUgZGF0YSBpcyBhbGxvd2VkIHRvIGJlIHNlbnQgYmVmb3JlIGEgY29ubmVjdGlvblxuMTE5MzpcdFx0ICogaXMgZnVsbHkgZXN0YWJsaXNoZWQuXG4xMTk0Olx0XHQgKi9cbjExOTU6XHRcdGlmICgoKDEgXHUwMDNjXHUwMDNjIHNrLVx1MDAzZXNrX3N0YXRlKSBcdTAwMjYgfihUQ1BGX0VTVEFCTElTSEVEIHwgVENQRl9DTE9TRV9XQUlUKSkgXHUwMDI2XHUwMDI2XG4xMTk2Olx0XHQgICAgIXRjcF9wYXNzaXZlX2Zhc3RvcGVuKHNrKSkge1xuMTE5NzpcdFx0XHRlcnIgPSBza19zdHJlYW1fd2FpdF9jb25uZWN0KHNrLCBcdTAwMjZ0aW1lbyk7XG4xMTk4Olx0XHRcdGlmIChlcnIgIT0gMClcbjExOTk6XHRcdFx0XHRnb3RvIGRvX2Vycm9yO1xuMTIwMDpcdFx0fVxuMTIwMTpcdFxuMTIwMjpcdFx0aWYgKHVubGlrZWx5KHRwLVx1MDAzZXJlcGFpcikpIHtcbjEyMDM6XHRcdFx0aWYgKHRwLVx1MDAzZXJlcGFpcl9xdWV1ZSA9PSBUQ1BfUkVDVl9RVUVVRSkge1xuMTIwNDpcdFx0XHRcdGNvcGllZCA9IHRjcF9zZW5kX3JjdnEoc2ssIG1zZywgc2l6ZSk7XG4xMjA1Olx0XHRcdFx0Z290byBvdXRfbm9wdXNoO1xuMTIwNjpcdFx0XHR9XG4xMjA3Olx0XG4xMjA4Olx0XHRcdGVyciA9IC1FSU5WQUw7XG4xMjA5Olx0XHRcdGlmICh0cC1cdTAwM2VyZXBhaXJfcXVldWUgPT0gVENQX05PX1FVRVVFKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzOTcKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgVENQIFNlbmQgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSBhIG1vZGlmaWNhdGlvbiB0byBgdGNwX3NlbmRtc2dfbG9ja2VkYCBpbiBgbmV0L2lwdjQvdGNwLmNgLCB3aGljaCBpcyBhbHdheXMgaW50ZXJlc3RpbmcuIFRoZSBjb3JlIGNoYW5nZSBmb2N1c2VzIG9uIHRoaXMgY29uZGl0aW9uYWwgYmxvY2s6CgpgYGBjCi0JaWYgKCFzb2NrY19lcnIgJmFtcDsmYW1wOyBzb2NrYy5kbWFidWZfaWQgJmFtcDsmYW1wOwotCSAgICAoIShmbGFncyAmYW1wOyBNU0dfWkVST0NPUFkpIHx8ICFzb2NrX2ZsYWcoc2ssIFNPQ0tfWkVST0NPUFkpKSkgewomIzQzOwlpZiAoIXNvY2tjX2VyciAmYW1wOyZhbXA7IHNvY2tjLmRtYWJ1Zl9pZCAmYW1wOyZhbXA7ICh6YyAhPSBNU0dfWkVST0NPUFkgfHwgIWJpbmRpbmcpKSB7CiAJCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0X2VycjsKIAl9CmBgYAoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyBhIHdvcnRod2hpbGUgdGFyZ2V0IGZvciBmdXp6aW5nLiBUaGlzIGNvZGUgaXMgY2xlYXJseSBpbiB0aGUgcGF0aCBvZiBgdGNwX3NlbmRtc2dfbG9ja2VkYCwgd2hpY2ggaXMgKnRoZSogY29yZSBmdW5jdGlvbiBmb3IgVENQIHNvY2tldCBzZW5kIG9wZXJhdGlvbnMuIEl0IGhhbmRsZXMgYE1TR19aRVJPQ09QWWAgYW5kLCBjcnVjaWFsbHksIGludGVyYWN0cyB3aXRoIGBkbWFidWZfaWRgLCB3aGljaCBpcyBsaWtlbHkgcmVsYXRlZCB0byBgZGV2bWVtYCBvciBzaW1pbGFyIERNQSBidWZmZXIgbWVjaGFuaXNtcy4KCmB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGlzIHJlYWNoZWQgdGhyb3VnaCBzdGFuZGFyZCBzb2NrZXQgc3lzY2FsbHMgbGlrZSBgc2VuZG1zZ2AsIGBzZW5kYCwgYW5kIGBzZW5kdG9gLiBTbywgaXQmIzM5O3MgcHJldHR5IGFjY2Vzc2libGUuIE15IG5leHQgc3RlcCBpcyB0byBkZXRlcm1pbmUgaWYgYW55IGNvbmZpZ3VyYXRpb25zIGdhdGUgdGhpcyBmdW5jdGlvbmFsaXR5LiBJJiMzOTtsbCBuZWVkIHRvIGludmVzdGlnYXRlIGBuZXRfZGV2bWVtX2dldF9iaW5kaW5nYCBhbmQgdGhlIGBzb2NrYy5kbWFidWZfaWRgIHRvIHVuZGVyc3RhbmQgdGhlIHByZXJlcXVpc2l0ZXMgZm9yIHRoaXMgY29uZGl0aW9uIHRvIGJlIHRyaWdnZXJlZC4gQW55IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBoZXJlIGNvdWxkIG5hcnJvdyBteSBmb2N1cyBmb3IgZnV6emluZyBvciBpbmZsdWVuY2UgdGhlIHR5cGUgb2YgaW5wdXQgSSYjMzk7bGwgbmVlZCB0byBjcmFmdCB0byBoaXQgdGhpcyBwb3RlbnRpYWxseSB2dWxuZXJhYmxlIHBhdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0X2Rldm1lbV9nZXRfYmluZGluZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXZtZW0uYz0zNzk9dm9pZCBuZXRfZGV2bWVtX3B1dF9uZXRfaW92KHN0cnVjdCBuZXRfaW92ICpuaW92KVxuLS1cbm5ldC9jb3JlL2Rldm1lbS5jLTM4My1cbm5ldC9jb3JlL2Rldm1lbS5jOjM4NDpzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqbmV0X2Rldm1lbV9nZXRfYmluZGluZyhzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvY29yZS9kZXZtZW0uYy0zODUtXHRcdFx0XHRcdFx0XHQgdW5zaWduZWQgaW50IGRtYWJ1Zl9pZClcbi0tXG5uZXQvY29yZS9kZXZtZW0uaD0xNTU9c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxubmV0L2NvcmUvZGV2bWVtLmg6MTU2Om5ldF9kZXZtZW1fZ2V0X2JpbmRpbmcoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgZG1hYnVmX2lkKTtcbm5ldC9jb3JlL2Rldm1lbS5oLTE1Ny1zdHJ1Y3QgbmV0X2lvdiAqXG4tLVxubmV0L2NvcmUvZGV2bWVtLmg9MjI4PXN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxubmV0L2NvcmUvZGV2bWVtLmg6MjI5Om5ldF9kZXZtZW1fZ2V0X2JpbmRpbmcoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgZG1hYnVmX2lkKVxubmV0L2NvcmUvZGV2bWVtLmgtMjMwLXtcbi0tXG5uZXQvaXB2NC90Y3AuYz0xMTE2PWludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuLS1cbm5ldC9pcHY0L3RjcC5jLTExNTgtXHRcdFx0aWYgKCFzb2NrY19lcnIgXHUwMDI2XHUwMDI2IHNvY2tjLmRtYWJ1Zl9pZCkge1xubmV0L2lwdjQvdGNwLmM6MTE1OTpcdFx0XHRcdGJpbmRpbmcgPSBuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHNrLCBzb2NrYy5kbWFidWZfaWQpO1xubmV0L2lwdjQvdGNwLmMtMTE2MC1cdFx0XHRcdGlmIChJU19FUlIoYmluZGluZykpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDQ5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZToKCioqSW52ZXN0aWdhdGluZyBDb25kaXRpb25hbCBDb21waWxhdGlvbiBpbiBgbmV0L2NvcmUvZGV2bWVtLmhgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbmNsdXNpb24gb3IgYmVoYXZpb3Igb2YgYG5ldC9jb3JlL2Rldm1lbS5oYC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGxvb2sgZm9yIGFueSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBvciBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBjb250cm9sIGl0cyBjb21waWxhdGlvbi4gSSB3YW50IHRvIHNlZSBpZiBpdCYjMzk7cyBkZXBlbmRlbnQgb24gYSBzcGVjaWZpYyBgQ09ORklHYCBvcHRpb24sIG9yIGlmIHRoZXJlJiMzOTtzIGFueSBvdGhlciBjb25kaXRpb25hbCBsb2dpYyBkZXRlcm1pbmluZyB3aGVuIHRoaXMgaGVhZGVyIGdldHMgcHVsbGVkIGluLiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4sIGFuZCBpdOKAmXMgYWx3YXlzIHRoZSBmaXJzdCBwbGFjZSBJIHN0YXJ0IHdoZW4gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgY29uZmlndXJhdGlvbiBvZiBhIHBpZWNlIG9mIGtlcm5lbCBjb2RlIGxpa2UgdGhpcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBhIHR5cGljYWwgYCNpZmRlZmAsIGAjaWZuZGVmYCwgb3IgbWF5YmUgZXZlbiBzb21lIG1vcmUgY29tcGxleCBtYWNybyBjb25zdHJ1Y3RzLiBUaGUgZ29hbCBpcyB0byBmaWd1cmUgb3V0IHRoZSBzY2VuYXJpb3Mgd2hlcmUgYGRldm1lbS5oYCBpcyByZWxldmFudCwgYW5kIHBlcmhhcHMsIHdoeSBpdCBtaWdodCBiZSBleGNsdWRlZCBpbiBvdGhlcnMuIExldOKAmXMgZGl2ZSBpbiBhbmQgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldm1lbS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cbiAgIDI6XHQvKlxuICAgMzpcdCAqIERldmljZSBtZW1vcnkgVENQIHN1cHBvcnRcbiAgIDQ6XHQgKlxuICAgNTpcdCAqIEF1dGhvcnM6XHRNaW5hIEFsbWFzcnkgXHUwMDNjYWxtYXNyeW1pbmFAZ29vZ2xlLmNvbVx1MDAzZVxuICAgNjpcdCAqXHRcdFdpbGxlbSBkZSBCcnVpam4gXHUwMDNjd2lsbGVtYkBnb29nbGUuY29tXHUwMDNlXG4gICA3Olx0ICpcdFx0S2FpeXVhbiBaaGFuZyBcdTAwM2NrYWl5dWFuekBnb29nbGUuY29tXHUwMDNlXG4gICA4Olx0ICpcbiAgIDk6XHQgKi9cbiAgMTA6XHQjaWZuZGVmIF9ORVRfREVWTUVNX0hcbiAgMTE6XHQjZGVmaW5lIF9ORVRfREVWTUVNX0hcbiAgMTI6XHRcbiAgMTM6XHQjaW5jbHVkZSBcdTAwM2NuZXQvbmV0bWVtLmhcdTAwM2VcbiAgMTQ6XHQjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZGV2X25ldGxpbmsuaFx1MDAzZVxuICAxNTpcdFxuICAxNjpcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2s7XG4gIDE3Olx0XG4gIDE4Olx0c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcge1xuICAxOTpcdFx0c3RydWN0IGRtYV9idWYgKmRtYWJ1ZjtcbiAgMjA6XHRcdHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQ7XG4gIDIxOlx0XHRzdHJ1Y3Qgc2dfdGFibGUgKnNndDtcbiAgMjI6XHRcdC8qIFBoeXNpY2FsIE5JQyB0aGF0IGRvZXMgdGhlIGFjdHVhbCBETUEgZm9yIHRoaXMgYmluZGluZy4gKi9cbiAgMjM6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4gIDI0Olx0XHQvKiBPcGFxdWUgY29va2llIGlkZW50aWZ5aW5nIHRoZSB2aXJ0dWFsIGRldmljZSAoZS5nLiBuZXRraXQpIHRoZSB1c2VyXG4gIDI1Olx0XHQgKiBjYWxsZWQgYmluZC10eCBvbi4gVXNlZCBvbmx5IGZvciBwb2ludGVyIGNvbXBhcmlzb24uIE5ldmVyXG4gIDI2Olx0XHQgKiBkZXJlZmVyZW5jZWQuXG4gIDI3Olx0XHQgKi9cbiAgMjg6XHRcdHZvaWQgKnZkZXY7XG4gIDI5Olx0XHRzdHJ1Y3QgZ2VuX3Bvb2wgKmNodW5rX3Bvb2w7XG4gIDMwOlx0XHQvKiBQcm90ZWN0IGRldiAqL1xuICAzMTpcdFx0c3RydWN0IG11dGV4IGxvY2s7XG4gIDMyOlx0XG4gIDMzOlx0XHQvKiBUaGUgdXNlciBob2xkcyBhIHJlZiAodmlhIHRoZSBuZXRsaW5rIEFQSSkgZm9yIGFzIGxvbmcgYXMgdGhleSB3YW50XG4gIDM0Olx0XHQgKiB0aGUgYmluZGluZyB0byByZW1haW4gYWxpdmUuIEVhY2ggcGFnZSBwb29sIHVzaW5nIHRoaXMgYmluZGluZyBob2xkc1xuICAzNTpcdFx0ICogYSByZWYgdG8ga2VlcCB0aGUgYmluZGluZyBhbGl2ZS4gVGhlIHBhZ2VfcG9vbCBkb2VzIG5vdCByZWxlYXNlIHRoZVxuICAzNjpcdFx0ICogcmVmIHVudGlsIGFsbCB0aGUgbmV0X2lvdnMgYWxsb2NhdGVkIGZyb20gdGhpcyBiaW5kaW5nIGFyZSByZWxlYXNlZFxuICAzNzpcdFx0ICogYmFjayB0byB0aGUgcGFnZV9wb29sLlxuICAzODpcdFx0ICpcbiAgMzk6XHRcdCAqIFRoZSBiaW5kaW5nIHVuZG9zIGl0c2VsZiBhbmQgdW5tYXBzIHRoZSB1bmRlcmx5aW5nIGRtYWJ1ZiBvbmNlIGFsbFxuICA0MDpcdFx0ICogdGhvc2UgcmVmcyBhcmUgZHJvcHBlZCBhbmQgdGhlIGJpbmRpbmcgaXMgbm8gbG9uZ2VyIGRlc2lyZWQgb3IgaW5cbiAgNDE6XHRcdCAqIHVzZS5cbiAgNDI6XHRcdCAqXG4gIDQzOlx0XHQgKiBuZXRfZGV2bWVtX2dldF9uZXRfaW92KCkgb24gZG1hYnVmIG5ldF9pb3ZzIHdpbGwgaW5jcmVtZW50IHRoaXNcbiAgNDQ6XHRcdCAqIHJlZmVyZW5jZSwgbWFraW5nIHN1cmUgdGhhdCB0aGUgYmluZGluZyByZW1haW5zIGFsaXZlIHVudGlsIGFsbCB0aGVcbiAgNDU6XHRcdCAqIG5ldF9pb3ZzIGFyZSBubyBsb25nZXIgdXNlZC4gbmV0X2lvdnMgYWxsb2NhdGVkIGZyb20gdGhpcyBiaW5kaW5nXG4gIDQ2Olx0XHQgKiB0aGF0IGFyZSBzdHVjayBpbiB0aGUgVFggcGF0aCBmb3IgYW55IHJlYXNvbiAoc3VjaCBhcyBhd2FpdGluZ1xuICA0NzpcdFx0ICogcmV0cmFuc21pdHMpIGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIGJpbmRpbmcgdW50aWwgdGhlIHNrYiBob2xkaW5nXG4gIDQ4Olx0XHQgKiB0aGVtIGlzIGZyZWVkLlxuICA0OTpcdFx0ICovXG4gIDUwOlx0XHRzdHJ1Y3QgcGVyY3B1X3JlZiByZWY7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ2OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gZGV2bWVtLmgmIzM5O3MgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24qKgoKT2theSwgdGltZSB0byBkaWcgaW50byBgbmV0L2NvcmUvZGV2bWVtLmhgLiBJJiMzOTttIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBhbnkgYCNpZmRlZmAgZGlyZWN0aXZlcyBpbiB0aGlzIGZpbGUuIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCBJJiMzOTttIGludGVyZXN0ZWQgaW4gdGhlIGludGVycGxheSBiZXR3ZWVuIHZhcmlvdXMgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gcGF0aHMsIHdoaWNoIGNhbiBiZSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgZGV2aWNlIG1lbW9yeSBpcyBoYW5kbGVkLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGRpZmZlcmVudCBoYXJkd2FyZSBhcmNoaXRlY3R1cmVzLCBjb25maWd1cmF0aW9ucywgb3Iga2VybmVsIHZlcnNpb25zLiBUaGlzIGZpbGUgc2VlbXMgY3J1Y2lhbCBmb3IgbG93LWxldmVsIGRldmljZSBpbnRlcmFjdGlvbiwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBzZWxlY3RpdmVseSBpbmNsdWRlZCBvciBleGNsdWRlZCBiYXNlZCBvbiBidWlsZC10aW1lIGRlZmluZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZnVuY3Rpb25hbGl0eSBpcyBjb25kaXRpb25hbCwgYW5kIHdoYXQgY29uZmlndXJhdGlvbnMgY2FuIGhhdmUgYSBiaWcgaW1wYWN0IG9uIGhvdyB0aGlzIHRoaW5nIHdvcmtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldm1lbS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDU6XHR9XG4gMTQ2Olx0XG4gMTQ3Olx0dm9pZCBuZXRfZGV2bWVtX2dldF9uZXRfaW92KHN0cnVjdCBuZXRfaW92ICpuaW92KTtcbiAxNDg6XHR2b2lkIG5ldF9kZXZtZW1fcHV0X25ldF9pb3Yoc3RydWN0IG5ldF9pb3YgKm5pb3YpO1xuIDE0OTpcdFxuIDE1MDpcdHN0cnVjdCBuZXRfaW92ICpcbiAxNTE6XHRuZXRfZGV2bWVtX2FsbG9jX2RtYWJ1ZihzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyk7XG4gMTUyOlx0dm9pZCBuZXRfZGV2bWVtX2ZyZWVfZG1hYnVmKHN0cnVjdCBuZXRfaW92ICpwcGlvdik7XG4gMTUzOlx0XG4gMTU0Olx0XG4gMTU1Olx0c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxuIDE1NjpcdG5ldF9kZXZtZW1fZ2V0X2JpbmRpbmcoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgZG1hYnVmX2lkKTtcbiAxNTc6XHRzdHJ1Y3QgbmV0X2lvdiAqXG4gMTU4Olx0bmV0X2Rldm1lbV9nZXRfbmlvdl9hdChzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZywgc2l6ZV90IGFkZHIsXG4gMTU5Olx0XHRcdCAgICAgICBzaXplX3QgKm9mZiwgc2l6ZV90ICpzaXplKTtcbiAxNjA6XHRcbiAxNjE6XHQjZWxzZVxuIDE2MjpcdHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nO1xuIDE2MzpcdFxuIDE2NDpcdHN0YXRpYyBpbmxpbmUgdm9pZFxuIDE2NTpcdG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmdfcHV0KHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKVxuIDE2NjpcdHtcbiAxNjc6XHR9XG4gMTY4Olx0XG4gMTY5Olx0c3RhdGljIGlubGluZSB2b2lkIG5ldF9kZXZtZW1fZ2V0X25ldF9pb3Yoc3RydWN0IG5ldF9pb3YgKm5pb3YpXG4gMTcwOlx0e1xuIDE3MTpcdH1cbiAxNzI6XHRcbiAxNzM6XHRzdGF0aWMgaW5saW5lIHZvaWQgbmV0X2Rldm1lbV9wdXRfbmV0X2lvdihzdHJ1Y3QgbmV0X2lvdiAqbmlvdilcbiAxNzQ6XHR7XG4gMTc1Olx0fVxuIDE3NjpcdFxuIDE3NzpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxuIDE3ODpcdG5ldF9kZXZtZW1fYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdmRldixcbiAxNzk6XHRcdFx0ICAgICAgIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXYsXG4gMTgwOlx0XHRcdCAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sXG4gMTgxOlx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgZG1hYnVmX2ZkLFxuIDE4MjpcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IG5pb3Zfc2hpZnQsXG4gMTgzOlx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0ZGV2X25sX3NvY2sgKnByaXYsXG4gMTg0Olx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gMTg1Olx0e1xuIDE4NjpcdFx0cmV0dXJuIEVSUl9QVFIoLUVPUE5PVFNVUFApO1xuIDE4NzpcdH1cbiAxODg6XHRcbiAxODk6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpuZXRfZGV2bWVtX2xvb2t1cF9kbWFidWYodTMyIGlkKVxuIDE5MDpcdHtcbiAxOTE6XHRcdHJldHVybiBOVUxMO1xuIDE5MjpcdH1cbiAxOTM6XHRcbiAxOTQ6XHRzdGF0aWMgaW5saW5lIHZvaWRcbiAxOTU6XHRuZXRfZGV2bWVtX3VuYmluZF9kbWFidWYoc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKmJpbmRpbmcpXG4gMTk2Olx0e1xuIDE5NzpcdH1cbiAxOTg6XHRcbiAxOTk6XHRzdGF0aWMgaW5saW5lIGludFxuIDIwMDpcdG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHJ4cV9pZHgsXG4gMjAxOlx0XHRcdFx0XHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyxcbiAyMDI6XHRcdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiAyMDM6XHRcbiAyMDQ6XHR7XG4gMjA1Olx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gMjA2Olx0fVxuIDIwNzpcdFxuIDIwODpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9pb3YgKlxuIDIwOTpcdG5ldF9kZXZtZW1fYWxsb2NfZG1hYnVmKHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKVxuIDIxMDpcdHtcbiAyMTE6XHRcdHJldHVybiBOVUxMO1xuIDIxMjpcdH1cbiAyMTM6XHRcbiAyMTQ6XHRzdGF0aWMgaW5saW5lIHZvaWQgbmV0X2Rldm1lbV9mcmVlX2RtYWJ1ZihzdHJ1Y3QgbmV0X2lvdiAqcHBpb3YpXG4gMjE1Olx0e1xuIDIxNjpcdH1cbiAyMTc6XHRcbiAyMTg6XHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbmV0X2lvdl92aXJ0dWFsX2FkZHIoY29uc3Qgc3RydWN0IG5ldF9pb3YgKm5pb3YpXG4gMjE5Olx0e1xuIDIyMDpcdFx0cmV0dXJuIDA7XG4gMjIxOlx0fVxuIDIyMjpcdFxuIDIyMzpcdHN0YXRpYyBpbmxpbmUgdTMyIG5ldF9kZXZtZW1faW92X2JpbmRpbmdfaWQoY29uc3Qgc3RydWN0IG5ldF9pb3YgKm5pb3YpXG4gMjI0Olx0e1xuIDIyNTpcdFx0cmV0dXJuIDA7XG4gMjI2Olx0fVxuIDIyNzpcdFxuIDIyODpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxuIDIyOTpcdG5ldF9kZXZtZW1fZ2V0X2JpbmRpbmcoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgZG1hYnVmX2lkKVxuIDIzMDpcdHtcbiAyMzE6XHRcdHJldHVybiBFUlJfUFRSKC1FT1BOT1RTVVBQKTtcbiAyMzI6XHR9XG4gMjMzOlx0XG4gMjM0Olx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2lvdiAqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMTMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBlbmFibGluZyBgZGV2bWVtYDoKCioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBmb3IgYGRldm1lbWAqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZW5hYmxpbmcgYGRldm1lbWAgaW4gdGhlIGBuZXQvY29yZS9kZXZtZW0uaGAgZmlsZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIGlmIGl0JiMzOTtzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gYSBrZXJuZWwgY29uZmlnIG9wdGlvbi4gSSBleHBlY3QgaXQgdG8gYmUgZ3VhcmRlZCBieSBhIGAjaWZkZWZgIG9yIHNpbWlsYXIgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZS4gSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSB0aGUgc3BlY2lmaWMgY29uZmlnIHN5bWJvbCB0aGF0IGNvbnRyb2xzIHdoZXRoZXIgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGluY2x1ZGVkIGR1cmluZyBjb21waWxhdGlvbi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIG9uIGhvdyB0aGUgYGRldm1lbWAgZnVuY3Rpb25hbGl0eSBpcyBlbmFibGVkIGJhc2VkIG9uIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2bWVtLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDUwOlx0XHRzdHJ1Y3QgcGVyY3B1X3JlZiByZWY7XG4gIDUxOlx0XG4gIDUyOlx0XHQvKiBUaGUgbGlzdCBvZiBiaW5kaW5ncyBjdXJyZW50bHkgYWN0aXZlLiBVc2VkIGZvciBuZXRsaW5rIHRvIG5vdGlmeSB1c1xuICA1MzpcdFx0ICogb2YgdGhlIHVzZXIgZHJvcHBpbmcgdGhlIGJpbmQuXG4gIDU0Olx0XHQgKi9cbiAgNTU6XHRcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiAgNTY6XHRcbiAgNTc6XHRcdC8qIHJ4cSYjMzk7cyB0aGlzIGJpbmRpbmcgaXMgYWN0aXZlIG9uLiAqL1xuICA1ODpcdFx0c3RydWN0IHhhcnJheSBib3VuZF9yeHFzO1xuICA1OTpcdFxuICA2MDpcdFx0LyogSUQgb2YgdGhpcyBiaW5kaW5nLiBHbG9iYWxseSB1bmlxdWUgdG8gYWxsIGJpbmRpbmdzIGN1cnJlbnRseVxuICA2MTpcdFx0ICogYWN0aXZlLlxuICA2MjpcdFx0ICovXG4gIDYzOlx0XHR1MzIgaWQ7XG4gIDY0Olx0XG4gIDY1Olx0XHQvKiBETUEgZGlyZWN0aW9uLCBGUk9NX0RFVklDRSBmb3IgUnggYmluZGluZywgVE9fREVWSUNFIGZvciBUeC4gKi9cbiAgNjY6XHRcdGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbjtcbiAgNjc6XHRcbiAgNjg6XHRcdC8qIEFycmF5IG9mIG5ldF9pb3YgcG9pbnRlcnMgZm9yIHRoaXMgYmluZGluZywgc29ydGVkIGJ5IHZpcnR1YWxcbiAgNjk6XHRcdCAqIGFkZHJlc3MuIFRoaXMgYXJyYXkgaXMgY29udmVuaWVudCB0byBtYXAgdGhlIHZpcnR1YWwgYWRkcmVzc2VzIHRvXG4gIDcwOlx0XHQgKiBuZXRfaW92cyBpbiB0aGUgVFggcGF0aC5cbiAgNzE6XHRcdCAqL1xuICA3MjpcdFx0c3RydWN0IG5ldF9pb3YgKip0eF92ZWM7XG4gIDczOlx0XG4gIDc0Olx0XHR1bnNpZ25lZCBpbnQgbmlvdl9zaGlmdDtcbiAgNzU6XHRcbiAgNzY6XHRcdHN0cnVjdCB3b3JrX3N0cnVjdCB1bmJpbmRfdztcbiAgNzc6XHR9O1xuICA3ODpcdFxuICA3OTpcdCNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWTUVNKVxuICA4MDpcdC8qIE93bmVyIG9mIHRoZSBkbWEtYnVmIGNodW5rcyBpbnNlcnRlZCBpbnRvIHRoZSBnZW4gcG9vbC4gRWFjaCBzY2F0dGVybGlzdFxuICA4MTpcdCAqIGVudHJ5IGZyb20gdGhlIGRtYWJ1ZiBpcyBpbnNlcnRlZCBpbnRvIHRoZSBnZW5wb29sIGFzIGEgY2h1bmssIGFuZCBuZWVkc1xuICA4MjpcdCAqIHRoaXMgb3duZXIgc3RydWN0IHRvIGtlZXAgdHJhY2sgb2Ygc29tZSBtZXRhZGF0YSBuZWNlc3NhcnkgdG8gY3JlYXRlXG4gIDgzOlx0ICogYWxsb2NhdGlvbnMgZnJvbSB0aGlzIGNodW5rLlxuICA4NDpcdCAqL1xuICA4NTpcdHN0cnVjdCBkbWFidWZfZ2VucG9vbF9jaHVua19vd25lciB7XG4gIDg2Olx0XHRzdHJ1Y3QgbmV0X2lvdl9hcmVhIGFyZWE7XG4gIDg3Olx0XHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZztcbiAgODg6XHRcbiAgODk6XHRcdC8qIGRtYV9hZGRyIG9mIHRoZSBzdGFydCBvZiB0aGUgY2h1bmsuICAqL1xuICA5MDpcdFx0ZG1hX2FkZHJfdCBiYXNlX2RtYV9hZGRyO1xuICA5MTpcdH07XG4gIDkyOlx0XG4gIDkzOlx0dm9pZCBfX25ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmdfZnJlZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndxKTtcbiAgOTQ6XHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqXG4gIDk1Olx0bmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxuICA5NjpcdFx0XHQgICAgICAgc3RydWN0IGRldmljZSAqZG1hX2RldixcbiAgOTc6XHRcdFx0ICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbixcbiAgOTg6XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBkbWFidWZfZmQsIHVuc2lnbmVkIGludCBuaW92X3NoaWZ0LFxuICA5OTpcdFx0XHQgICAgICAgc3RydWN0IG5ldGRldl9ubF9zb2NrICpwcml2LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTI3CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKktjb25maWcgRGl2ZTogQSBRdWljayBEaWFnbm9zdGljIENoZWNrKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0JiMzOTtzIHplcm8gaW4gb24gYENPTkZJR19ORVRfREVWTUVNYC4gR2l2ZW4gbXkgZXhwZXJ0aXNlIGluIHRoaXMgYXJlYSwgaXQmIzM5O3MgaW1tZWRpYXRlbHkganVtcGluZyBvdXQgYXMgYSBwb3RlbnRpYWwgcG9pbnQgb2YgaW50ZXJlc3QuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpdHMgc3RhdHVzIHdpdGhpbiB0aGUgS2NvbmZpZyBzeXN0ZW0uIFRoaXMgaXNuJiMzOTt0IGp1c3QgYWJvdXQgZmluZGluZyBpdHMgY3VycmVudCBzZXR0aW5nOyBJJiMzOTttIGRpZ2dpbmcgZGVlcGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLCBpbXBsaWNhdGlvbnMsIGFuZCBwb3NzaWJsZSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBuZXR3b3JrIGNvbmZpZ3VyYXRpb25zLiBUaGlzICYjMzk7Y2hlY2smIzM5OyBpcyBtb3JlIHRoYW4gYSBzaW1wbGUgYGdyZXBgIG9yIHNlYXJjaDsgaXQmIzM5O3MgYSBkaWFnbm9zdGljIHByb2JlIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgcmVkIGZsYWdzIG9yIGFyZWFzIGRlbWFuZGluZyBmdXJ0aGVyIGludmVzdGlnYXRpb24gd2l0aGluIHRoZSBicm9hZGVyIG5ldHdvcmsgc3RhY2suIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgc3RhcnRpbmcgcG9pbnQgYmVmb3JlIHRhY2tsaW5nIGFueXRoaW5nIG1vcmUgY29tcGxleC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9ERVZNRU0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9NjY9Y29uZmlnIFNLQl9FWFRFTlNJT05TXG4tLVxubmV0L0tjb25maWctNjgtXG5uZXQvS2NvbmZpZzo2OTpjb25maWcgTkVUX0RFVk1FTVxubmV0L0tjb25maWctNzAtXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyMDAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIGNvbmZpZ3VyYXRpb24gaXRlbSwgYW5kIEkgd2FudCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4gVGhlIGRvY3VtZW50YXRpb24gaXMgcHJvYmFibHkgZGVjZW50LCBidXQgbGV0JiMzOTtzIGJlIGhvbmVzdCwgdGhlIHRydWUgc291cmNlIG9mIHRydXRoIGlzIGFsd2F5cyB0aGUgS2NvbmZpZyBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGl0ZW0gaW4gaXRzIG5hdGl2ZSBoYWJpdGF0LiBUaGF0IG1lYW5zIGNyYWNraW5nIG9wZW4gdGhlIGBuZXQvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBob3BpbmcgaXQmIzM5O3Mgd2VsbC1vcmdhbml6ZWQsIHdpdGggY2xlYXIgZGVwZW5kZW5jaWVzLCBkZXNjcmlwdGlvbnMsIGFuZCBtYXliZSBldmVuIHNvbWUgdXNlZnVsIGRlZmF1bHRzIG9yIGhlbHAgdGV4dC4gSXQmIzM5O3MgdGhlIG9ubHkgcmVhbCB3YXkgdG8gZ2V0IGEgY29tcGxldGVseSBwcmVjaXNlIHVuZGVyc3RhbmRpbmcsIHJpZ2h0PyBUaGUgZGVmYWN0byBkb2N1bWVudGF0aW9uIG1pZ2h0IGJlIHJpZ2h0LCBidXQgdGhlIEtjb25maWcgZmlsZSB3aWxsIHJldmVhbCB0aGUgdHJ1ZSBpbnRlcmFjdGlvbnMgYW5kIGltcGFjdHMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290IGluIHRoYXQgZmlsZS4gSSBleHBlY3QgdG8gcGFyc2UgdGhlIHN5bWJvbCBkZWZpbml0aW9uLCBhbnkgYXNzb2NpYXRlZCBkZXBlbmRlbmNpZXMgKGxpa2UgYGRlcGVuZHMgb25gIG9yIGBzZWxlY3RgKSwgYW5kIGFueSBoZWxwIHRleHQgYXNzb2NpYXRlZCB3aXRoIGl0LiBGcm9tIHRoZXJlIEkgY2FuIGluZmVyIGFueXRoaW5nIEkgbmVlZCB0byBrbm93IGFib3V0IHRoZSBzeW1ib2wuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDY1Olx0XG4gIDY2Olx0Y29uZmlnIFNLQl9FWFRFTlNJT05TXG4gIDY3Olx0XHRib29sXG4gIDY4Olx0XG4gIDY5Olx0Y29uZmlnIE5FVF9ERVZNRU1cbiAgNzA6XHRcdGRlZl9ib29sIHlcbiAgNzE6XHRcdHNlbGVjdCBHRU5FUklDX0FMTE9DQVRPUlxuICA3MjpcdFx0ZGVwZW5kcyBvbiBETUFfU0hBUkVEX0JVRkZFUlxuICA3MzpcdFx0ZGVwZW5kcyBvbiBQQUdFX1BPT0xcbiAgNzQ6XHRcbiAgNzU6XHRjb25maWcgTkVUX1NIQVBFUlxuICA3NjpcdFx0Ym9vbFxuICA3NzpcdFxuICA3ODpcdGNvbmZpZyBORVRfQ1JDMzJDXG4gIDc5Olx0XHRib29sXG4gIDgwOlx0XHRzZWxlY3QgQ1JDMzJcbiAgODE6XHRcbiAgODI6XHRtZW51IFwmIzM0O05ldHdvcmtpbmcgb3B0aW9uc1wmIzM0O1xuICA4MzpcdFxuICA4NDpcdHNvdXJjZSBcJiMzNDtuZXQvcGFja2V0L0tjb25maWdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTY2NAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRDUCBaZXJvLUNvcHkgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gSSBzZWUgdGhleSYjMzk7dmUgbW9kaWZpZWQgYG5ldC9pcHY0L3RjcC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgdGNwX3NlbmRtc2dfbG9ja2VkYCBmdW5jdGlvbi4gVGhlIG9yaWdpbmFsIGNvZGUgaGFkIGEgY29uZGl0aW9uYWwgY2hlY2sgaW52b2x2aW5nIGBzb2NrY19lcnJgLCBgc29ja2MuZG1hYnVmX2lkYCwgYGZsYWdzICZhbXA7IE1TR19aRVJPQ09QWWAsIGFuZCBgc29ja19mbGFnKHNrLCBTT0NLX1pFUk9DT1BZKWAuIFRoZSBuZXcgY29kZSByZXBsYWNlcyB0aGF0IHdpdGggYCh6YyAhPSBNU0dfWkVST0NPUFkgfHwgIWJpbmRpbmcpYC4gSG1tLCBzb3VuZHMgbGlrZSB0aGV5JiMzOTtyZSB0aWdodGVuaW5nIHVwIHRoZSB6ZXJvLWNvcHkgbG9naWMgd2hlbiBgZGV2bWVtYCBjbXNnIChkbWFidWZfaWQpIGlzIHVzZWQuCgpUaGlua2luZyBhYm91dCB0aGUgY29udGV4dCwgdGhpcyBoYXBwZW5zIHdoZW4gd2UmIzM5O3JlIHNlbmRpbmcgZGF0YSBvdmVyIGEgVENQIHNvY2tldCB1c2luZyBgTVNHX1pFUk9DT1BZYCBhbmQgdGhpcyBgZGV2bWVtYCBmZWF0dXJlLiBJIHJlY2FsbCBgemNgIGlzIHNldCBpZiB0aGUgdW5kZXJseWluZyBuZXR3b3JrIGludGVyZmFjZSBzdXBwb3J0cyBzY2F0dGVyLWdhdGhlciwgdXNpbmcgYE5FVElGX0ZfU0dgLiBUaGUgb3JpZ2luYWwgY29kZSBzZWVtcyB0byBoYXZlIGhhZCBhIHBvdGVudGlhbCB3ZWFrbmVzcyDigJMgaXQgbWlnaHQgaGF2ZSBwcm9jZWVkZWQgaW4gc2l0dWF0aW9ucyB3aGVyZSBgemNgIHdhcyB6ZXJvIChtZWFuaW5nIG5vIHNjYXR0ZXItZ2F0aGVyIHN1cHBvcnQsIG9yIG90aGVyIGlzc3VlcyksICpvciogd2hlcmUgdGhlIGBiaW5kaW5nYCBwcm9jZXNzIGZhaWxlZCwgZXZlbiBpZiBgTVNHX1pFUk9DT1BZYCB3YXMgc2V0LiBOb3csIHRoZSBjaGVjayBpcyBtb3JlIHN0cmljdDsgZWl0aGVyIGB6Y2AgKm11c3QqIGJlIHNldCAqb3IqIGBiaW5kaW5nYCBtdXN0IHN1Y2NlZWQuIFRoYXQgbWFrZXMgc2Vuc2UsIGtlZXBzIHRoaW5ncyBjbGVhbmVyIGFuZCBzYWZlci4KCklzIHRoaXMgc29tZXRoaW5nIHRvIHNwZW5kIG15IHRpbWUgb24sIHRvIHNlZSBpZiBpdCBjYXVzZXMgaXNzdWVzPyBBYnNvbHV0ZWx5LiBUaGlzIGlzIGluIHRoZSBjb3JlIFRDUCBzdGFjaywgaXQmIzM5O3MgdXNlci1jb250cm9sbGVkIHRocm91Z2ggc29ja2V0IGNhbGxzIHdpdGggY29tbW9uIG9wdGlvbnMgc3VjaCBhcyBgTVNHX1pFUk9DT1BZYCBhbmQgYGRtYWJ1ZmAsIGFuZCBpdCYjMzk7cyBkZWFsaW5nIHdpdGggZXJyb3IgaGFuZGxpbmcuIFRoaXMgaXMgY2xhc3NpYyBmdXp6aW5nIHRlcnJpdG9yeTogcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBzb2NrZXRzIGluIHRoZSB1c3VhbCBRRU1VIGVudmlyb25tZW50LgoKTm93LCBsZXQmIzM5O3MgdGhpbmsgYWJvdXQgZm9jdXMgc3ltYm9sczogYHRjcF9zZW5kbXNnX2xvY2tlZGAgaXMgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uLCBkZWZpbml0ZWx5IG5lZWRzIGF0dGVudGlvbi4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbGVycyBvZiBgdGNwX3NlbmRtc2dfbG9ja2VkYCBhbmQgYW55IHJlbGF0ZWQgZGV2bWVtIHRyYW5zbWl0IGZ1bmN0aW9ucyB0byBlbnN1cmUgSSYjMzk7dmUgY292ZXJlZCBldmVyeXRoaW5nLiBUaW1lIHRvIGdldCBteSBmdXp6aW5nIHRvb2xzIHJlYWR5IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3Bfc2VuZG1zZ19sb2NrZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvYWZfaW5ldC5jPTEwNjA9Y29uc3Qgc3RydWN0IHByb3RvX29wcyBpbmV0X3N0cmVhbV9vcHMgPSB7XG4tLVxubmV0L2lwdjQvYWZfaW5ldC5jLTEwODUtXHQucmVhZF9za2JcdCAgID0gdGNwX3JlYWRfc2tiLFxubmV0L2lwdjQvYWZfaW5ldC5jOjEwODY6XHQuc2VuZG1zZ19sb2NrZWQgICAgPSB0Y3Bfc2VuZG1zZ19sb2NrZWQsXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTA4Ny1cdC5wZWVrX2xlblx0ICAgPSB0Y3BfcGVla19sZW4sXG4tLVxubmV0L2lwdjQvdGNwLmM9MTExND1FWFBPUlRfU1lNQk9MX0dQTCh0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZCk7XG5uZXQvaXB2NC90Y3AuYy0xMTE1LVxubmV0L2lwdjQvdGNwLmM6MTExNjppbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbm5ldC9pcHY0L3RjcC5jLTExMTcte1xuLS1cbm5ldC9pcHY0L3RjcC5jLTEyMzktXG5uZXQvaXB2NC90Y3AuYzoxMjQwOlx0XHR0cmFjZV90Y3Bfc2VuZG1zZ19sb2NrZWQoc2ssIG1zZywgc2tiLCBzaXplX2dvYWwpO1xubmV0L2lwdjQvdGNwLmMtMTI0MS1cbi0tXG5uZXQvaXB2NC90Y3AuYy0xNDQzLX1cbm5ldC9pcHY0L3RjcC5jOjE0NDQ6RVhQT1JUX1NZTUJPTF9HUEwodGNwX3NlbmRtc2dfbG9ja2VkKTtcbm5ldC9pcHY0L3RjcC5jLTE0NDUtXG5uZXQvaXB2NC90Y3AuYz0xNDQ2PWludCB0Y3Bfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4tLVxubmV0L2lwdjQvdGNwLmMtMTQ1MC1cdGxvY2tfc29jayhzayk7XG5uZXQvaXB2NC90Y3AuYzoxNDUxOlx0cmV0ID0gdGNwX3NlbmRtc2dfbG9ja2VkKHNrLCBtc2csIHNpemUpO1xubmV0L2lwdjQvdGNwLmMtMTQ1Mi1cdHJlbGVhc2Vfc29jayhzayk7XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTkxPXN0YXRpYyBpbnQgdGNwX2JwZl9wdXNoKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLCB1MzIgYXBwbHlfYnl0ZXMsXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTEyMi1cdFx0aW92X2l0ZXJfYnZlYyhcdTAwMjZtc2doZHIubXNnX2l0ZXIsIElURVJfU09VUkNFLCBcdTAwMjZidmVjLCAxLCBzaXplKTtcbm5ldC9pcHY0L3RjcF9icGYuYzoxMjM6XHRcdHJldCA9IHRjcF9zZW5kbXNnX2xvY2tlZChzaywgXHUwMDI2bXNnaGRyLCBzaXplKTtcbm5ldC9pcHY0L3RjcF9icGYuYy0xMjQtXHRcdGlmIChyZXQgXHUwMDNjPSAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTIxNAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBTY29wZSBvZiB0aGUgVENQIFNlbmRtc2cgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UgdG8gYHRjcF9zZW5kbXNnX2xvY2tlZGAuIEZpcnN0LCBJIGFsd2F5cyBzdGFydCBieSBjYXN0aW5nIGEgd2lkZXIgbmV0LCBtYWtpbmcgc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJIG5lZWQgdG8gc2VlIGlmIGFueSBvdGhlciBzeW1ib2xzIG9yIGZpbGVzIGFyZSBpbXBsaWNhdGVkIGJleW9uZCB0aGUgZGlyZWN0IG1vZGlmaWNhdGlvbiBpdHNlbGYuIEJ1dCBiYXNlZCBvbiB0aGUgZGlmZiwgaXQgbG9va3MgbGlrZSBpdCBpcyBqdXN0IHRoZSBvbmUgZnVuY3Rpb24gaW4gYG5ldC9pcHY0L3RjcC5jYCwgd2hpY2ggaXMgYSBnb29kIHNpZ24uCgpBbHJpZ2h0LCBub3cgbGV0JiMzOTtzIHRoaW5rIGFib3V0IHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGZvciB0aGUgcHJlc2VuY2Ugb2YgYElORVRgLCBgTkVUX0RFVk1FTWAsIGBETUFfU0hBUkVEX0JVRkZFUmAsIGFuZCBgUEFHRV9QT09MYC4gVGhhdCBzZXQgdXN1YWxseSBoZWxwcyBuYXJyb3cgaXQgZG93bi4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aG9zZSBiZWNhdXNlIG9mIHRoZSBuYXR1cmUgb2YgdGhlIGZ1bmN0aW9uIEkmIzM5O20gbG9va2luZyBhdC4KCkZyb20gdGhlcmUsIEkmIzM5O2xsIGFzc2VzcyB3aGV0aGVyIGBJTkVUYCBvciBgTkVUX0RFVk1FTWAgaXMgdGhlIHJlbGV2YW50IHNldHRpbmcgaGVyZS4gYElORVRgIGlzIHRoZSBkZWZhdWx0IGFuZCBzaG91bGQgYmUgc3RhbmRhcmQsIGJ1dCBgTkVUX0RFVk1FTWAgaXMgZ29pbmcgdG8gYmUgcmVsZXZhbnQgaWYgaXQgaGFzIGJlZW4gc2V0IHVwIHdpdGggYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGAuIFNvIGxldCYjMzk7cyBzZWUgd2hpY2ggb3B0aW9uIHdlIGFyZSBsb29raW5nIGF0LgoKTm93LCBJJiMzOTtsbCBuZWVkIHRvIGdvIGZ1cnRoZXIgaW50byB0aGUgY29kZSwgYW5kIGV4YW1pbmUgdGhlIGBzb2NrY2Agc3RydWN0dXJlIGFuZCBob3cgaXQgZW5hYmxlcyBgZGV2bWVtYCBhbmQgYGRtYWJ1Zl9pZGAsIGluIGNhc2UgYE5FVF9ERVZNRU1gIGlzIGluIHBsYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RtYWJ1Zl9pZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2bWVtLmM9Mzg0PXN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHN0cnVjdCBzb2NrICpzayxcbm5ldC9jb3JlL2Rldm1lbS5jOjM4NTpcdFx0XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgZG1hYnVmX2lkKVxubmV0L2NvcmUvZGV2bWVtLmMtMzg2LXtcbi0tXG5uZXQvY29yZS9kZXZtZW0uYy0zOTEtXG5uZXQvY29yZS9kZXZtZW0uYzozOTI6XHRiaW5kaW5nID0gbmV0X2Rldm1lbV9sb29rdXBfZG1hYnVmKGRtYWJ1Zl9pZCk7XG5uZXQvY29yZS9kZXZtZW0uYy0zOTMtXHRpZiAoIWJpbmRpbmcgfHwgIWJpbmRpbmctXHUwMDNldHhfdmVjKSB7XG4tLVxubmV0L2NvcmUvZGV2bWVtLmg9MTU1PXN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcbm5ldC9jb3JlL2Rldm1lbS5oOjE1NjpuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGRtYWJ1Zl9pZCk7XG5uZXQvY29yZS9kZXZtZW0uaC0xNTctc3RydWN0IG5ldF9pb3YgKlxuLS1cbm5ldC9jb3JlL2Rldm1lbS5oPTIyOD1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcbm5ldC9jb3JlL2Rldm1lbS5oOjIyOTpuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGRtYWJ1Zl9pZClcbm5ldC9jb3JlL2Rldm1lbS5oLTIzMC17XG4tLVxubmV0L2NvcmUvc29jay5jPTMwMjY9aW50IF9fc29ja19jbXNnX3NlbmQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgY21zZ2hkciAqY21zZyxcbi0tXG5uZXQvY29yZS9zb2NrLmMtMzExNS1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbm5ldC9jb3JlL3NvY2suYzozMTE2Olx0XHRzb2NrYy1cdTAwM2VkbWFidWZfaWQgPSAqKHUzMiAqKUNNU0dfREFUQShjbXNnKTtcbm5ldC9jb3JlL3NvY2suYy0zMTE3LVx0XHRicmVhaztcbi0tXG5uZXQvaXB2NC90Y3AuYz0xMTE2PWludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuLS1cbm5ldC9pcHY0L3RjcC5jLTExNDctXHRcdFx0dWFyZyA9IG1zZ196ZXJvY29weV9yZWFsbG9jKHNrLCBzaXplLCBza2JfemNvcHkoc2tiKSxcbm5ldC9pcHY0L3RjcC5jOjExNDg6XHRcdFx0XHRcdFx0ICAgICFzb2NrY19lcnIgXHUwMDI2XHUwMDI2IHNvY2tjLmRtYWJ1Zl9pZCk7XG5uZXQvaXB2NC90Y3AuYy0xMTQ5LVx0XHRcdGlmICghdWFyZykge1xuLS1cbm5ldC9pcHY0L3RjcC5jLTExNTctXG5uZXQvaXB2NC90Y3AuYzoxMTU4Olx0XHRcdGlmICghc29ja2NfZXJyIFx1MDAyNlx1MDAyNiBzb2NrYy5kbWFidWZfaWQpIHtcbm5ldC9pcHY0L3RjcC5jOjExNTk6XHRcdFx0XHRiaW5kaW5nID0gbmV0X2Rldm1lbV9nZXRfYmluZGluZyhzaywgc29ja2MuZG1hYnVmX2lkKTtcbm5ldC9pcHY0L3RjcC5jLTExNjAtXHRcdFx0XHRpZiAoSVNfRVJSKGJpbmRpbmcpKSB7XG4tLVxubmV0L2lwdjQvdGNwLmMtMTE3MS1cbm5ldC9pcHY0L3RjcC5jOjExNzI6XHRpZiAoIXNvY2tjX2VyciBcdTAwMjZcdTAwMjYgc29ja2MuZG1hYnVmX2lkIFx1MDAyNlx1MDAyNiAoemMgIT0gTVNHX1pFUk9DT1BZIHx8ICFiaW5kaW5nKSkge1xubmV0L2lwdjQvdGNwLmMtMTE3My1cdFx0ZXJyID0gLUVJTlZBTDtcbi0tXG5uZXQvaXB2NC90Y3AuYz0yNDk5PXN0YXRpYyBpbnQgdGNwX3JlY3Ztc2dfZG1hYnVmKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3AuYy0yNTk4LVx0XHRcdFx0ZG1hYnVmX2Ntc2cuZnJhZ190b2tlbiA9IHRjcF94YV9wb29sLnRva2Vuc1t0Y3BfeGFfcG9vbC5pZHhdO1xubmV0L2lwdjQvdGNwLmM6MjU5OTpcdFx0XHRcdGRtYWJ1Zl9jbXNnLmRtYWJ1Zl9pZCA9IG5ldF9kZXZtZW1faW92X2JpbmRpbmdfaWQobmlvdik7XG5uZXQvaXB2NC90Y3AuYy0yNjAwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjYxMgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIGBuZXQvY29yZS9zb2NrLmNgKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IHRoZSBwYXJzaW5nIG9mIGBzb2NrYy0mZ3Q7ZG1hYnVmX2lkYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBgbmV0L2NvcmUvc29jay5jYCBmZWVscyBsaWtlIHRoZSBsaWtlbHkgcGxhY2Ugd2hlcmUgdGhpcyBpbnRlcmFjdGlvbiBpcyBoYW5kbGVkLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5JiMzOTtyZSBwdWxsaW5nIHRoYXQgdmFsdWUgYXBhcnQgYW5kIHdoYXQgaXRzIGltcGxpY2F0aW9ucyBhcmUuIFdlIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGhlcmUsIHNlZSBpZiBpdCYjMzk7cyBnb3QgYW55IHVuZXhwZWN0ZWQgYmVoYXZpb3JzLiBMZXQmIzM5O3Mgc3RhcnQgZGlnZ2luZyBpbiB0aGVyZSBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuIEkgZXhwZWN0IHRoYXQgd2lsbCBiZSB3aGVyZSB0aGUgcGFyc2luZywgYW5kIHBvdGVudGlhbGx5IHZhbGlkYXRpb24sIGFyZSBoYXBwZW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29jay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzEwNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMTA1Olx0XHRcdGJyZWFrO1xuMzEwNjpcdFx0Y2FzZSBTT19QUklPUklUWTpcbjMxMDc6XHRcdFx0aWYgKGNtc2ctXHUwMDNlY21zZ19sZW4gIT0gQ01TR19MRU4oc2l6ZW9mKHUzMikpKVxuMzEwODpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzEwOTpcdFx0XHRpZiAoIXNrX3NldF9wcmlvX2FsbG93ZWQoc2ssICoodTMyICopQ01TR19EQVRBKGNtc2cpKSlcbjMxMTA6XHRcdFx0XHRyZXR1cm4gLUVQRVJNO1xuMzExMTpcdFx0XHRzb2NrYy1cdTAwM2Vwcmlvcml0eSA9ICoodTMyICopQ01TR19EQVRBKGNtc2cpO1xuMzExMjpcdFx0XHRicmVhaztcbjMxMTM6XHRcdGNhc2UgU0NNX0RFVk1FTV9ETUFCVUY6XG4zMTE0Olx0XHRcdGlmIChjbXNnLVx1MDAzZWNtc2dfbGVuICE9IENNU0dfTEVOKHNpemVvZih1MzIpKSlcbjMxMTU6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjMxMTY6XHRcdFx0c29ja2MtXHUwMDNlZG1hYnVmX2lkID0gKih1MzIgKilDTVNHX0RBVEEoY21zZyk7XG4zMTE3Olx0XHRcdGJyZWFrO1xuMzExODpcdFx0ZGVmYXVsdDpcbjMxMTk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zMTIwOlx0XHR9XG4zMTIxOlx0XHRyZXR1cm4gMDtcbjMxMjI6XHR9XG4zMTIzOlx0RVhQT1JUX1NZTUJPTChfX3NvY2tfY21zZ19zZW5kKTtcbjMxMjQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxNTMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBETUEtQlVGIFVzYWdlIGluIFNvY2tldCBDb250cm9sIE1lc3NhZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBTQ01fREVWTUVNX0RNQUJVRmAgdGhpbmcsIGFuZCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGJlaW5nIGhhbmRsZWQgdW5jb25kaXRpb25hbGx5IGluIGBfX3NvY2tfY21zZ19zZW5kYC4gVGhhdCYjMzk7cyBhIGJpdCBvZiBhIHJlZCBmbGFnIC0gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IGRpcmVjdCBwYXJzaW5nLiAgVGhlbiBJIHNlZSB0aGF0IGBDT05GSUdfTkVUX0RFVk1FTWAgaXMgYXV0b21hdGljYWxseSBlbmFibGVkIGlmIHdlIGhhdmUgYm90aCBgRE1BX1NIQVJFRF9CVUZGRVJgIGFuZCBgUEFHRV9QT09MYCBkZWZpbmVkLiBJbnRlcmVzdGluZy4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgZG9lcyBgQ09ORklHX05FVF9ERVZNRU1gICpyZWx5KiBvbiB0aG9zZSB0d28sIG9yIGlzIGl0IGp1c3QgYSBjb252ZW5pZW50IGRlZmF1bHQ/ICBJIG5lZWQgdG8gY2xhcmlmeSB0aGF0IGRlcGVuZGVuY3kuICBUbyBuYWlsIHRoaXMgZG93biwgSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBkcml2ZXJzL2RtYS1idWYvS2NvbmZpZ2AgZmlsZSBhbmQgY29uZmlybSB0aGUgcmVsYXRpb25zaGlwIHdpdGggYERNQV9TSEFSRURfQlVGRkVSYC4gSSBiZXQgdGhlcmUmIzM5O3Mgc29tZSB1c2VmdWwgY29udGV4dCBhYm91dCBgUEFHRV9QT09MYCBpbiB0aGVyZSBhcyB3ZWxsLiBUaW1lIHRvIGRpZyBpbiBhbmQgY2xhcmlmeSB0aGlzIHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRE1BX1NIQVJFRF9CVUZGRVImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL0tjb25maWc9MjEzPXNvdXJjZSBcJiMzNDtkcml2ZXJzL2Jhc2UvcmVnbWFwL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvYmFzZS9LY29uZmlnLTIxNC1cbmRyaXZlcnMvYmFzZS9LY29uZmlnOjIxNTpjb25maWcgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvYmFzZS9LY29uZmlnLTIxNi1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1ODcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyB0aGUgRE1BX1NIQVJFRF9CVUZGRVIgRGVmaW5pdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhpcyBgRE1BX1NIQVJFRF9CVUZGRVJgIHRoaW5nLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyBhbHdheXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBzb3VyY2UgY29kZSwgc28gSSYjMzk7bGwgaGVhZCBvdmVyIHRvIHRoZSBgZHJpdmVycy9iYXNlL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQg4oCTIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIG9mdGVuIGRlZmluZSBhbmQgZXhwbGFpbiB0aGVzZSBraW5kcyBvZiBzeW1ib2xzLCBlc3BlY2lhbGx5IGlmIHRoZXkmIzM5O3JlIGZ1bmRhbWVudGFsIHRvIHRoZSBkcml2ZXIgbW9kZWwuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgYSBjb25kaXRpb25hbCBkZWZpbml0aW9uLCBwb3NzaWJseSB0aWVkIHRvIG90aGVyIGhhcmR3YXJlIGZlYXR1cmVzIG9yIHN5c3RlbSBjb25maWd1cmF0aW9ucy4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdCwgYW5kIGFueSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gb3IgY29tbWVudHMgdGhhdCBtaWdodCBwcm92aWRlIGNvbnRleHQuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBmaWxlIHJldmVhbHMuLi4ga25vd2luZyB0aGUga2VybmVsLCBJIHdvdWxkbiYjMzk7dCBiZSBzdXJwcmlzZWQgdG8gZmluZCBzb21lIGhpZGRlbiBjb21wbGV4aXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIxMzpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL2Jhc2UvcmVnbWFwL0tjb25maWdcJiMzNDtcbiAyMTQ6XHRcbiAyMTU6XHRjb25maWcgRE1BX1NIQVJFRF9CVUZGRVJcbiAyMTY6XHRcdGJvb2xcbiAyMTc6XHRcdGRlZmF1bHQgblxuIDIxODpcdFx0c2VsZWN0IElSUV9XT1JLXG4gMjE5Olx0XHRoZWxwXG4gMjIwOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGZyYW1ld29yayBmb3IgYnVmZmVyLXNoYXJpbmcgYmV0d2VlblxuIDIyMTpcdFx0ICBtdWx0aXBsZSBkcml2ZXJzLiBBIGJ1ZmZlciBpcyBhc3NvY2lhdGVkIHdpdGggYSBmaWxlIHVzaW5nIGRyaXZlclxuIDIyMjpcdFx0ICBBUElzIGV4dGVuc2lvbjsgdGhlIGZpbGUmIzM5O3MgZGVzY3JpcHRvciBjYW4gdGhlbiBiZSBwYXNzZWQgb24gdG8gb3RoZXJcbiAyMjM6XHRcdCAgZHJpdmVyLlxuIDIyNDpcdFxuIDIyNTpcdGNvbmZpZyBHRU5FUklDX0FSQ0hfVE9QT0xPR1lcbiAyMjY6XHRcdGJvb2xcbiAyMjc6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwMTMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIE5ldHdvcmsgQnVmZmVyIE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgd2hlcmUgZXhhY3RseSBpcyBgUEFHRV9QT09MYCBkZWZpbmVkPyBUaGF0JiMzOTtzIHRoZSBrZXkgdmFyaWFibGUgaGVyZSwgYW5kIEkgbmVlZCB0byB0cmFjayBkb3duIGl0cyBvcmlnaW4uIExldCBtZSBxdWlja2x5IGp1bXAgaW50byB0aGUga2VybmVsIHNvdXJjZSB0cmVlLi4uIEkmIzM5O20gcHJldHR5IHN1cmUgaXQmIzM5O3MgaGFuZ2luZyBvdXQgc29tZXdoZXJlIGluIHRoZSBgbmV0L2NvcmUvYCBkaXJlY3RvcnksIHNwZWNpZmljYWxseSB3aXRoaW4gYSBLY29uZmlnIGZpbGUuIE9yIHNvbWV0aGluZyBzaW1pbGFyLCBvYnZpb3VzbHkuIEl0ICpoYXMqIHRvIGJlIGEgY29uZmlnIG9wdGlvbi4gR290dGEgZmluZCB0aGF0IGRlZmluaXRpb24hIE1heWJlIGBuZXQvY29yZS9LY29uZmlnYCBpcyB0aGUgYmVzdCBiZXQgdG8gc3RhcnQgd2l0aDsgdGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSBmb3VuZGF0aW9uYWwgc3R1ZmYgcmVzaWRlcy4gTGV0JiMzOTtzIHNlZSBpZiB0aGF0IGZpbGUgY29udGFpbnMgdGhlIHByZWNpc2UgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBBR0VfUE9PTFxcYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz00ODc9Y29uZmlnIE5FVF9ERVZMSU5LXG4tLVxubmV0L0tjb25maWctNDkwLVxubmV0L0tjb25maWc6NDkxOmNvbmZpZyBQQUdFX1BPT0xcbm5ldC9LY29uZmlnLTQ5Mi1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyNzgKCQkJCQkJCW91dHB1dDogMTc3CgkJCQkJCQl0aG91Z2h0czogMzQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgQ2FuZGlkYXRlIEFzc2Vzc21lbnQ6IFRDUCBaZXJvLUNvcHkgYW5kIERldm1lbSBJbnRlZ3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3IgZnV6emluZy4gRmlyc3QsIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGRlcGVuZGVuY2llcy4gIGBORVRfREVWTUVNYCBpcyBjb250aW5nZW50IG9uIGVpdGhlciBgRE1BX1NIQVJFRF9CVUZGRVJgIGFuZCBgUEFHRV9QT09MYCBiZWluZyBlbmFibGVkLCBvciBqdXN0IGBORVRfREVWTUVNYCBkaXJlY3RseSwgYW5kIHdlICpkZWZpbml0ZWx5KiBuZWVkIGBJTkVUYCBmb3IgYHRjcC5jYC4gIFNvLCBteSBjb25maWcgbGlzdCBpczogYElORVRgLCBgTkVUX0RFVk1FTWAsIGBETUFfU0hBUkVEX0JVRkZFUmAsIGFuZCBgUEFHRV9QT09MYC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUuCgpOb3csIHRoZSBpbXBvcnRhbnQgc3ltYm9scyBoZXJlLCB0aGUgb25lcyBJIG5lZWQgdG8gcmVhbGx5IHVuZGVyc3RhbmQsIGFyZSBgdGNwX3NlbmRtc2dfbG9ja2VkYCwgYHRjcF9zZW5kbXNnYCwgYW5kIGBuZXRfZGV2bWVtX2dldF9iaW5kaW5nYC4KCklzIHRoaXMgYWN0dWFsbHkgd29ydGggdGhlIGVmZm9ydD8gIEFic29sdXRlbHkuIFRoaXMgcGF0Y2ggZnVuZGFtZW50YWxseSBhbHRlcnMgZXhlY3V0YWJsZSBsb2dpYyB3aXRoaW4gYHRjcF9zZW5kbXNnX2xvY2tlZGAsIHJpZ2h0IGluIHRoZSBoZWFydCBvZiB0aGUgVENQIG5ldHdvcmtpbmcgc3Vic3lzdGVtLiBJdCYjMzk7cyBtb2RpZnlpbmcgdGhlIHZhbGlkYXRpb24gY3JpdGVyaWEgZm9yIHplcm8tY29weSBhbmQgZGV2bWVtIGRtYWJ1ZiB0cmFuc21pc3Npb25zIHZpYSBUQ1AmIzM5O3MgYHNlbmRtc2dgIGZ1bmN0aW9uLiBJdCYjMzk7cyBhZGRpbmcgdGlnaHRlciwgbW9yZSBjb3JyZWN0IGNoZWNrcyBvbiB0aGUgemVyb2NvcHkgYW5kIGRldm1lbSBiaW5kaW5nLiBUaGUgY3J1Y2lhbCBwYXJ0PyAgVGhpcyBpcyByZWFjaGFibGUgZGlyZWN0bHkgZnJvbSB1c2VyLXNwYWNlIFRDUCBzb2NrZXRzIHVzaW5nIGJvdGggYE1TR19aRVJPQ09QWWAgKmFuZCogYFNDTV9ERVZNRU1fRE1BQlVGYCBjbXNncy4gVGhhdCBtYWtlcyBpdCBhIHByaW1lIHRhcmdldC4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIGRvdWJsZS1jaGVjayB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZzoKMS4gIGBXb3J0aEZ1enppbmdgOiBUcnVlLgoyLiAgYEZvY3VzU3ltYm9sc2A6IGBbJiMzNDt0Y3Bfc2VuZG1zZ19sb2NrZWQmIzM0OywgJiMzNDt0Y3Bfc2VuZG1zZyYjMzQ7LCAmIzM0O25ldF9kZXZtZW1fZ2V0X2JpbmRpbmcmIzM0O11gCjMuICBgRW5hYmxlQ29uZmlnc2A6IGBbJiMzNDtJTkVUJiMzNDssICYjMzQ7TkVUX0RFVk1FTSYjMzQ7LCAmIzM0O0RNQV9TSEFSRURfQlVGRkVSJiMzNDssICYjMzQ7UEFHRV9QT09MJiMzNDtdYAo0LiAgYFJlYXNvbmluZ2A6IFRoaXMgY2hhbmdlcyBjcml0aWNhbCBUQ1AgbG9naWMgZm9yIHplcm8tY29weSBhbmQgZGV2bWVtIGludGVyYWN0aW9ucy4gSXQmIzM5O3MgcmVhY2hhYmxlIHZpYSBjb21tb24gdXNlci1zcGFjZSBzb2NrZXQgY2FsbHMuIEl0IG1ha2VzIGEgcGVyZmVjdCBmdXp6aW5nIGNhbmRpZGF0ZS4KCk9rYXksIEkmIzM5O20gcmVhZHkgdG8gcHJvY2VlZC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O05FVF9ERVZNRU0mIzM0OywKICAgICYjMzQ7RE1BX1NIQVJFRF9CVUZGRVImIzM0OywKICAgICYjMzQ7UEFHRV9QT09MJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX3NlbmRtc2dfbG9ja2VkJiMzNDssCiAgICAmIzM0O3RjcF9zZW5kbXNnJiMzNDssCiAgICAmIzM0O25ldF9kZXZtZW1fZ2V0X2JpbmRpbmcmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdmFsaWRhdGlvbiBsb2dpYyBpbiB0Y3Bfc2VuZG1zZ19sb2NrZWQoKSB3aGVuIHByb2Nlc3NpbmcgVENQIHplcm8tY29weSBtZXNzYWdlcyB3aXRoIGRldmljZSBtZW1vcnkgZG1hYnVmIElEcyAoU0NNX0RFVk1FTV9ETUFCVUYpLiBJdCBlbnN1cmVzIHRoYXQgdHJhbnNtaXNzaW9ucyB3aXRoIGRtYWJ1Zl9pZCBmYWlsIHdpdGggLUVJTlZBTCB1bmxlc3MgemVyb2NvcHkgaXMgYWN0dWFsbHkgZW5hYmxlZCAoemMgPT0gTVNHX1pFUk9DT1BZKSBhbmQgYSB2YWxpZCBkZXZtZW0gYmluZGluZyBleGlzdHMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUgVENQIHNvY2tldCB0cmFuc21pdCBwYXRocyB0aGF0IGNhbiBiZSB0ZXN0ZWQgdXNpbmcgc3RhbmRhcmQgc29ja2V0IHN5c2NhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O05FVF9ERVZNRU0mIzM0OywKICAgICYjMzQ7RE1BX1NIQVJFRF9CVUZGRVImIzM0OywKICAgICYjMzQ7UEFHRV9QT09MJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX3NlbmRtc2dfbG9ja2VkJiMzNDssCiAgICAmIzM0O3RjcF9zZW5kbXNnJiMzNDssCiAgICAmIzM0O25ldF9kZXZtZW1fZ2V0X2JpbmRpbmcmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdmFsaWRhdGlvbiBsb2dpYyBpbiB0Y3Bfc2VuZG1zZ19sb2NrZWQoKSB3aGVuIHByb2Nlc3NpbmcgVENQIHplcm8tY29weSBtZXNzYWdlcyB3aXRoIGRldmljZSBtZW1vcnkgZG1hYnVmIElEcyAoU0NNX0RFVk1FTV9ETUFCVUYpLiBJdCBlbnN1cmVzIHRoYXQgdHJhbnNtaXNzaW9ucyB3aXRoIGRtYWJ1Zl9pZCBmYWlsIHdpdGggLUVJTlZBTCB1bmxlc3MgemVyb2NvcHkgaXMgYWN0dWFsbHkgZW5hYmxlZCAoemMgPT0gTVNHX1pFUk9DT1BZKSBhbmQgYSB2YWxpZCBkZXZtZW0gYmluZGluZyBleGlzdHMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUgVENQIHNvY2tldCB0cmFuc21pdCBwYXRocyB0aGF0IGNhbiBiZSB0ZXN0ZWQgdXNpbmcgc3RhbmRhcmQgc29ja2V0IHN5c2NhbGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDowODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjA4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdGlnaHRlbnMgZXJyb3IgdmFsaWRhdGlvbiBpbiBgdGNwX3NlbmRtc2dfbG9ja2VkKClgIHdoZW4gYHNvY2tjLmRtYWJ1Zl9pZGAgaXMgc3VwcGxpZWQsIGVuc3VyaW5nIHRoYXQgZGV2bWVtIHRyYW5zbWlzc2lvbiBpcyBvbmx5IHBlcm1pdHRlZCB3aGVuIHplcm8tY29weSBpcyBhY3RpdmUgKGB6YyA9PSBNU0dfWkVST0NPUFlgKSBhbmQgYSB2YWxpZCBkZXZtZW0gYmluZGluZyBleGlzdHMgKGBiaW5kaW5nICE9IE5VTExgKS4gQWxsIHZhcmlhYmxlcyBldmFsdWF0ZWQgaW4gdGhpcyBjb25kaXRpb24gKGBzb2NrY19lcnJgLCBgc29ja2NgLCBgemNgLCBhbmQgYGJpbmRpbmdgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZXMuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBtZW1vcnkgY29weWluZyBsb2dpYyBpbiBhIG1hbm5lciB0aGF0IGNvdWxkIGNhdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBpbnZhbGlkIHBvaW50ZXJzIG9yIHN0YXRlIGludmFyaWFudHMgYXJlIGFkZHJlc3NhYmxlIGJ5IHN0YW5kYXJkIGRldGVjdG9ycyAvIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwYjJmMjJjNzI2OTYwM2Y4MzY1ZTE2ZDQyYTI5NGYwZTg2YWIzMTFhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgNiAwMDowNzo0NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmMKaW5kZXggYjQyMzdkMGU5OTRkNi4uMTBmNTgyODFiZTE3YiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwLmMKQEAgLTExNjksOCAmIzQzOzExNjksNyBAQCBpbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSkKIAkJCXpjID0gTVNHX1NQTElDRV9QQUdFUzsKIAl9CiAKLQlpZiAoIXNvY2tjX2VyciAmYW1wOyZhbXA7IHNvY2tjLmRtYWJ1Zl9pZCAmYW1wOyZhbXA7Ci0JICAgICghKGZsYWdzICZhbXA7IE1TR19aRVJPQ09QWSkgfHwgIXNvY2tfZmxhZyhzaywgU09DS19aRVJPQ09QWSkpKSB7CiYjNDM7CWlmICghc29ja2NfZXJyICZhbXA7JmFtcDsgc29ja2MuZG1hYnVmX2lkICZhbXA7JmFtcDsgKHpjICE9IE1TR19aRVJPQ09QWSB8fCAhYmluZGluZykpIHsKIAkJZXJyID0gLUVJTlZBTDsKIAkJZ290byBvdXRfZXJyOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIHRoZSBDb2RlOiBUQ1AgSW1wbGVtZW50YXRpb24gRGVlcCBEaXZlKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHdvcmsuIFRoaXMgbmV3IHBhdGNoIG5lZWRzIGEgdGhvcm91Z2ggcmV2aWV3LiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB0aGUgY29udGV4dC4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIGNvZGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgYG5ldC9pcHY0L3RjcC5jYCBmaWxlLiBHaXZlbiB0aGUgbGluZSBudW1iZXIgcHJvdmlkZWQsIGFyb3VuZCBsaW5lIDExNjksIEkmIzM5O2xsIHByb2JhYmx5IGJlIGFibGUgdG8gZGV0ZXJtaW5lIHdoYXQgaXMgYmVpbmcgY2hhbmdlZC4KCkkgbmVlZCB0byBxdWlja2x5IGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHNvIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB3aWxsIGJlIHRoZSBiZXN0IHRvb2wgZm9yIHRoaXM7IGl0JiMzOTtzIHRoZSBmYXN0ZXN0IHdheSB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExNDA6XHRcdGlmICgoZmxhZ3MgXHUwMDI2IE1TR19aRVJPQ09QWSkgXHUwMDI2XHUwMDI2IHNpemUpIHtcbjExNDE6XHRcdFx0aWYgKG1zZy1cdTAwM2Vtc2dfdWJ1Zikge1xuMTE0MjpcdFx0XHRcdHVhcmcgPSBtc2ctXHUwMDNlbXNnX3VidWY7XG4xMTQzOlx0XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3JvdXRlX2NhcHMgXHUwMDI2IE5FVElGX0ZfU0cpXG4xMTQ0Olx0XHRcdFx0XHR6YyA9IE1TR19aRVJPQ09QWTtcbjExNDU6XHRcdFx0fSBlbHNlIGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfWkVST0NPUFkpKSB7XG4xMTQ2Olx0XHRcdFx0c2tiID0gdGNwX3dyaXRlX3F1ZXVlX3RhaWwoc2spO1xuMTE0NzpcdFx0XHRcdHVhcmcgPSBtc2dfemVyb2NvcHlfcmVhbGxvYyhzaywgc2l6ZSwgc2tiX3pjb3B5KHNrYiksXG4xMTQ4Olx0XHRcdFx0XHRcdFx0ICAgICFzb2NrY19lcnIgXHUwMDI2XHUwMDI2IHNvY2tjLmRtYWJ1Zl9pZCk7XG4xMTQ5Olx0XHRcdFx0aWYgKCF1YXJnKSB7XG4xMTUwOlx0XHRcdFx0XHRlcnIgPSAtRU5PQlVGUztcbjExNTE6XHRcdFx0XHRcdGdvdG8gb3V0X2VycjtcbjExNTI6XHRcdFx0XHR9XG4xMTUzOlx0XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3JvdXRlX2NhcHMgXHUwMDI2IE5FVElGX0ZfU0cpXG4xMTU0Olx0XHRcdFx0XHR6YyA9IE1TR19aRVJPQ09QWTtcbjExNTU6XHRcdFx0XHRlbHNlXG4xMTU2Olx0XHRcdFx0XHR1YXJnX3RvX21zZ3pjKHVhcmcpLVx1MDAzZXplcm9jb3B5ID0gMDtcbjExNTc6XHRcbjExNTg6XHRcdFx0XHRpZiAoIXNvY2tjX2VyciBcdTAwMjZcdTAwMjYgc29ja2MuZG1hYnVmX2lkKSB7XG4xMTU5Olx0XHRcdFx0XHRiaW5kaW5nID0gbmV0X2Rldm1lbV9nZXRfYmluZGluZyhzaywgc29ja2MuZG1hYnVmX2lkKTtcbjExNjA6XHRcdFx0XHRcdGlmIChJU19FUlIoYmluZGluZykpIHtcbjExNjE6XHRcdFx0XHRcdFx0ZXJyID0gUFRSX0VSUihiaW5kaW5nKTtcbjExNjI6XHRcdFx0XHRcdFx0YmluZGluZyA9IE5VTEw7XG4xMTYzOlx0XHRcdFx0XHRcdGdvdG8gb3V0X2VycjtcbjExNjQ6XHRcdFx0XHRcdH1cbjExNjU6XHRcdFx0XHR9XG4xMTY2Olx0XHRcdH1cbjExNjc6XHRcdH0gZWxzZSBpZiAodW5saWtlbHkobXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX1NQTElDRV9QQUdFUykgXHUwMDI2XHUwMDI2IHNpemUpIHtcbjExNjg6XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3JvdXRlX2NhcHMgXHUwMDI2IE5FVElGX0ZfU0cpXG4xMTY5Olx0XHRcdFx0emMgPSBNU0dfU1BMSUNFX1BBR0VTO1xuMTE3MDpcdFx0fVxuMTE3MTpcdFxuMTE3MjpcdFx0aWYgKCFzb2NrY19lcnIgXHUwMDI2XHUwMDI2IHNvY2tjLmRtYWJ1Zl9pZCBcdTAwMjZcdTAwMjYgKHpjICE9IE1TR19aRVJPQ09QWSB8fCAhYmluZGluZykpIHtcbjExNzM6XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjExNzQ6XHRcdFx0Z290byBvdXRfZXJyO1xuMTE3NTpcdFx0fVxuMTE3NjpcdFxuMTE3NzpcdFx0aWYgKHVubGlrZWx5KGZsYWdzIFx1MDAyNiBNU0dfRkFTVE9QRU4gfHxcbjExNzg6XHRcdFx0ICAgICBpbmV0X3Rlc3RfYml0KERFRkVSX0NPTk5FQ1QsIHNrKSkgXHUwMDI2XHUwMDI2XG4xMTc5Olx0XHQgICAgIXRwLVx1MDAzZXJlcGFpcikge1xuMTE4MDpcdFx0XHRlcnIgPSB0Y3Bfc2VuZG1zZ19mYXN0b3BlbihzaywgbXNnLCBcdTAwMjZjb3BpZWRfc3luLCBzaXplLCB1YXJnKTtcbjExODE6XHRcdFx0aWYgKGVyciA9PSAtRUlOUFJPR1JFU1MgXHUwMDI2XHUwMDI2IGNvcGllZF9zeW4gXHUwMDNlIDApXG4xMTgyOlx0XHRcdFx0Z290byBvdXQ7XG4xMTgzOlx0XHRcdGVsc2UgaWYgKGVycilcbjExODQ6XHRcdFx0XHRnb3RvIG91dF9lcnI7XG4xMTg1Olx0XHR9XG4xMTg2Olx0XG4xMTg3Olx0XHR0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIGZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xuMTE4ODpcdFxuMTE4OTpcdFx0dGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spOyAgLyogaXMgc2VuZGluZyBhcHBsaWNhdGlvbi1saW1pdGVkPyAqL1xuMTE5MDpcdFxuMTE5MTpcdFx0LyogV2FpdCBmb3IgYSBjb25uZWN0aW9uIHRvIGZpbmlzaC4gT25lIGV4Y2VwdGlvbiBpcyBUQ1AgRmFzdCBPcGVuXG4xMTkyOlx0XHQgKiAocGFzc2l2ZSBzaWRlKSB3aGVyZSBkYXRhIGlzIGFsbG93ZWQgdG8gYmUgc2VudCBiZWZvcmUgYSBjb25uZWN0aW9uXG4xMTkzOlx0XHQgKiBpcyBmdWxseSBlc3RhYmxpc2hlZC5cbjExOTQ6XHRcdCAqL1xuMTE5NTpcdFx0aWYgKCgoMSBcdTAwM2NcdTAwM2Mgc2stXHUwMDNlc2tfc3RhdGUpIFx1MDAyNiB+KFRDUEZfRVNUQUJMSVNIRUQgfCBUQ1BGX0NMT1NFX1dBSVQpKSBcdTAwMjZcdTAwMjZcbjExOTY6XHRcdCAgICAhdGNwX3Bhc3NpdmVfZmFzdG9wZW4oc2spKSB7XG4xMTk3Olx0XHRcdGVyciA9IHNrX3N0cmVhbV93YWl0X2Nvbm5lY3Qoc2ssIFx1MDAyNnRpbWVvKTtcbjExOTg6XHRcdFx0aWYgKGVyciAhPSAwKVxuMTE5OTpcdFx0XHRcdGdvdG8gZG9fZXJyb3I7XG4xMjAwOlx0XHR9XG4xMjAxOlx0XG4xMjAyOlx0XHRpZiAodW5saWtlbHkodHAtXHUwMDNlcmVwYWlyKSkge1xuMTIwMzpcdFx0XHRpZiAodHAtXHUwMDNlcmVwYWlyX3F1ZXVlID09IFRDUF9SRUNWX1FVRVVFKSB7XG4xMjA0Olx0XHRcdFx0Y29waWVkID0gdGNwX3NlbmRfcmN2cShzaywgbXNnLCBzaXplKTtcbjEyMDU6XHRcdFx0XHRnb3RvIG91dF9ub3B1c2g7XG4xMjA2Olx0XHRcdH1cbjEyMDc6XHRcbjEyMDg6XHRcdFx0ZXJyID0gLUVJTlZBTDtcbjEyMDk6XHRcdFx0aWYgKHRwLVx1MDAzZXJlcGFpcl9xdWV1ZSA9PSBUQ1BfTk9fUVVFVUUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MjEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgYHRjcF9zZW5kbXNnX2xvY2tlZGAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgKmJlZm9yZSogbGluZSAxMTQwIGluIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLiBUaGF0IGZ1bmN0aW9uIGlzIGNyaXRpY2FsLCBlc3BlY2lhbGx5IHdoZW4gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgc2VuZGluZyBkYXRhIG92ZXIgVENQLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHByZS1jb25kaXRpb25zIGFyZSBlc3RhYmxpc2hlZCwgd2hhdCYjMzk7cyBiZWluZyBpbml0aWFsaXplZCwgYW5kIHdoYXQgZGVjaXNpb25zIGFyZSBiZWluZyBtYWRlIHRoYXQgd2lsbCBpbmZsdWVuY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIGxlYWRpbmcgdXAgdG8gdGhhdCBwb2ludC4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgY29udHJvbCBmbG93LCBsb29rIGF0IHZhcmlhYmxlIGFzc2lnbm1lbnRzLCBhbmQgY29uc2lkZXIgYW55IHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcywgcGFydGljdWxhcmx5IHRoZSBgc29ja2Agc3RydWN0dXJlLCB0aGUgYHRjcF9zb2NrYCBzdHJ1Y3R1cmUsIGFuZCBhbnkgcmVsYXRlZCBxdWV1ZXMuIElzIHRoaXMgaGFwcGVuaW5nIGR1cmluZyBhIHJlZ3VsYXIgc2VuZCwgb3IgaXMgaXQgcmVsYXRlZCB0byBzb21ldGhpbmcgbGlrZSB1cmdlbnQgZGF0YSwgb3IgYSBzb2NrZXQgc2h1dGRvd24/IEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhlIGNhbGxzIHRoYXQgbGVhZCBpbnRvIHRoaXMgZnVuY3Rpb24gZnJvbSB0aGUgdXBwZXIgbGF5ZXJzIHRvIGdyYXNwIHRoZSBjb250ZXh0LiBXaGF0IGxlZCB1cyBoZXJlPyBXaGF0IGV2ZW50cyB0cmlnZ2VyZWQgdGhpcyBjYWxsPyBUaGlzIGlzIGdvaW5nIHRvIGJlIGFib3V0IHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBsZXRlIHN0YXRlIGJlZm9yZSB0aGF0IGxpbmUsIHNvIEkgY2FuIHN0YXJ0IHRvIGluZmVyIHdoYXQgY2hhbmdlcyBhcmUgdGFraW5nIHBsYWNlLCBhbmQgd2h5LiBJJiMzOTtsbCBuZWVkIHRvIGNvcnJlbGF0ZSB0aGUgdmFyaWFibGVzIGF0IGxpbmUgMTE0MCB0byB0aGVpciB2YWx1ZXMgYXQgdGhlIGVudHJ5IHRvIHRoZSBmdW5jdGlvbiwgYW5kIGxvb2sgZm9yIGFueSBjbHVlcyBhYm91dCB0aGUgY29uZGl0aW9ucy4gRmluYWxseSwgYWZ0ZXIgZG9pbmcgdGhpcyBwcmVsaW1pbmFyeSBpbnZlc3RpZ2F0aW9uLCBJJiMzOTtsbCBiZSBpbiBhIGJldHRlciBwb3NpdGlvbiB0byBzZWUgdGhlIGJyb2FkZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTEwMDpcdHtcbjExMDE6XHRcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xuMTEwMjpcdFxuMTEwMzpcdFx0aWYgKC8qIFdlIGhhdmUgbGVzcyB0aGFuIG9uZSBwYWNrZXQgdG8gc2VuZC4gKi9cbjExMDQ6XHRcdCAgICB0cC1cdTAwM2V3cml0ZV9zZXEgLSB0cC1cdTAwM2VzbmRfbnh0IFx1MDAzYyB0cC1cdTAwM2Vtc3NfY2FjaGUgXHUwMDI2XHUwMDI2XG4xMTA1Olx0XHQgICAgLyogTm90aGluZyBpbiBzZW5kaW5nIGhvc3QmIzM5O3MgcWRpc2MgcXVldWVzIG9yIE5JQyB0eCBxdWV1ZS4gKi9cbjExMDY6XHRcdCAgICBza193bWVtX2FsbG9jX2dldChzaykgXHUwMDNjIFNLQl9UUlVFU0laRSgxKSBcdTAwMjZcdTAwMjZcbjExMDc6XHRcdCAgICAvKiBXZSBhcmUgbm90IGxpbWl0ZWQgYnkgQ1dORC4gKi9cbjExMDg6XHRcdCAgICB0Y3BfcGFja2V0c19pbl9mbGlnaHQodHApIFx1MDAzYyB0Y3Bfc25kX2N3bmQodHApIFx1MDAyNlx1MDAyNlxuMTEwOTpcdFx0ICAgIC8qIEFsbCBsb3N0IHBhY2tldHMgaGF2ZSBiZWVuIHJldHJhbnNtaXR0ZWQuICovXG4xMTEwOlx0XHQgICAgdHAtXHUwMDNlbG9zdF9vdXQgXHUwMDNjPSB0cC1cdTAwM2VyZXRyYW5zX291dClcbjExMTE6XHRcdFx0dHAtXHUwMDNlYXBwX2xpbWl0ZWQgPVxuMTExMjpcdFx0XHRcdCh0cC1cdTAwM2VkZWxpdmVyZWQgJiM0MzsgdGNwX3BhY2tldHNfaW5fZmxpZ2h0KHRwKSkgPyA6IDE7XG4xMTEzOlx0fVxuMTExNDpcdEVYUE9SVF9TWU1CT0xfR1BMKHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKTtcbjExMTU6XHRcbjExMTY6XHRpbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbjExMTc6XHR7XG4xMTE4Olx0XHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyA9IE5VTEw7XG4xMTE5Olx0XHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbjExMjA6XHRcdHN0cnVjdCB1YnVmX2luZm8gKnVhcmcgPSBOVUxMO1xuMTEyMTpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbjExMjI6XHRcdHN0cnVjdCBzb2NrY21fY29va2llIHNvY2tjO1xuMTEyMzpcdFx0aW50IGZsYWdzLCBlcnIsIGNvcGllZCA9IDA7XG4xMTI0Olx0XHRpbnQgbXNzX25vdyA9IDAsIHNpemVfZ29hbCwgY29waWVkX3N5biA9IDA7XG4xMTI1Olx0XHRpbnQgcHJvY2Vzc19iYWNrbG9nID0gMDtcbjExMjY6XHRcdGludCBzb2NrY19lcnIgPSAwO1xuMTEyNzpcdFx0aW50IHpjID0gMDtcbjExMjg6XHRcdGxvbmcgdGltZW87XG4xMTI5Olx0XG4xMTMwOlx0XHRmbGFncyA9IG1zZy1cdTAwM2Vtc2dfZmxhZ3M7XG4xMTMxOlx0XG4xMTMyOlx0XHRzb2NrYyA9IChzdHJ1Y3Qgc29ja2NtX2Nvb2tpZSl7IC50c2ZsYWdzID0gUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3RzZmxhZ3MpIH07XG4xMTMzOlx0XHRpZiAobXNnLVx1MDAzZW1zZ19jb250cm9sbGVuKSB7XG4xMTM0Olx0XHRcdHNvY2tjX2VyciA9IHNvY2tfY21zZ19zZW5kKHNrLCBtc2csIFx1MDAyNnNvY2tjKTtcbjExMzU6XHRcdFx0LyogRG9uJiMzOTt0IHJldHVybiBlcnJvciB1bnRpbCBNU0dfRkFTVE9QRU4gaGFzIGJlZW4gcHJvY2Vzc2VkO1xuMTEzNjpcdFx0XHQgKiB0aGF0IG1heSBzdWNjZWVkIGV2ZW4gaWYgdGhlIGNtc2cgaXMgaW52YWxpZC5cbjExMzc6XHRcdFx0ICovXG4xMTM4Olx0XHR9XG4xMTM5Olx0XG4xMTQwOlx0XHRpZiAoKGZsYWdzIFx1MDAyNiBNU0dfWkVST0NPUFkpIFx1MDAyNlx1MDAyNiBzaXplKSB7XG4xMTQxOlx0XHRcdGlmIChtc2ctXHUwMDNlbXNnX3VidWYpIHtcbjExNDI6XHRcdFx0XHR1YXJnID0gbXNnLVx1MDAzZW1zZ191YnVmO1xuMTE0MzpcdFx0XHRcdGlmIChzay1cdTAwM2Vza19yb3V0ZV9jYXBzIFx1MDAyNiBORVRJRl9GX1NHKVxuMTE0NDpcdFx0XHRcdFx0emMgPSBNU0dfWkVST0NPUFk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2ODIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIGRlbHZlIGludG8gdGhlIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGNvZGU6CgoqKkRpdmluZyBEZWVwIGludG8gYHRjcF9zZW5kbXNnX2xvY2tlZGAgYW5kIGBiaW5kaW5nYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZm9jdXNpbmcgb24gYHRjcF9zZW5kbXNnX2xvY2tlZGAgbm93LiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IHdoZXJlLCB3aXRoaW4gdGhpcyBmdW5jdGlvbiwgZG8gd2UgYWN0dWFsbHkgKnVzZSogYGJpbmRpbmdgPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNvbmNlcHQgb2YgJiMzNDtiaW5kaW5nJiMzNDsg4oCTIHRoZSBhc3NvY2lhdGlvbiBvZiBhIHNvY2tldCB3aXRoIGEgc3BlY2lmaWMgbG9jYWwgYWRkcmVzcyBhbmQgcG9ydCDigJMgaXMgaW50ZXJ3b3ZlbiBpbnRvIHRoaXMgY3JpdGljYWwgc2VuZCBwYXRoLiBJcyBpdCB1c2VkIGZvciBhZGRyZXNzIHNlbGVjdGlvbiwgcGVyaGFwcz8gT3IgbWF5YmUgZm9yIGVuZm9yY2luZyBzcGVjaWZpYyBzb2NrZXQgb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBkZXN0aW5hdGlvbj8gSSBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZSB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3Qgb24gdGhlIHNlbmQgb3BlcmF0aW9uLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIGRpcmVjdCByZWZlcmVuY2VzIHRvIHRoZSBgYmluZGluZ2AgdmFyaWFibGUgb3Igc3RydWN0dXJlLiBJIHN1c3BlY3QgaXRzIGluZmx1ZW5jZSB3aWxsIGJlIHN1YnRsZSBpbiBtYW55IGNhc2VzLCBzbyBhIGNvbXByZWhlbnNpdmUgc2VhcmNoIGlzIGluIG9yZGVyLiBJ4oCZbSB0aGlua2luZyBhYm91dCBzY2VuYXJpb3MgaW52b2x2aW5nIG11bHRpY2FzdCwgYWRkcmVzcyBmYW1pbHkgZGlmZmVyZW5jZXMsIG9yIGFueSB0aW1lIHdlIG5lZWQgdG8gYXNzb2NpYXRlIHRoZSBvdXRnb2luZyBkYXRhIHdpdGggdGhlIGxvY2FsIGVuZHBvaW50LiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjEwOlx0XHRcdFx0Z290byBvdXRfZXJyO1xuMTIxMTpcdFxuMTIxMjpcdFx0XHQvKiAmIzM5O2NvbW1vbiYjMzk7IHNlbmRpbmcgdG8gc2VuZHEgKi9cbjEyMTM6XHRcdH1cbjEyMTQ6XHRcbjEyMTU6XHRcdGlmIChzb2NrY19lcnIpIHtcbjEyMTY6XHRcdFx0ZXJyID0gc29ja2NfZXJyO1xuMTIxNzpcdFx0XHRnb3RvIG91dF9lcnI7XG4xMjE4Olx0XHR9XG4xMjE5Olx0XG4xMjIwOlx0XHQvKiBUaGlzIHNob3VsZCBiZSBpbiBwb2xsICovXG4xMjIxOlx0XHRza19jbGVhcl9iaXQoU09DS1dRX0FTWU5DX05PU1BBQ0UsIHNrKTtcbjEyMjI6XHRcbjEyMjM6XHRcdC8qIE9rIGNvbW1lbmNlIHNlbmRpbmcuICovXG4xMjI0Olx0XHRjb3BpZWQgPSAwO1xuMTIyNTpcdFxuMTIyNjpcdHJlc3RhcnQ6XG4xMjI3Olx0XHRtc3Nfbm93ID0gdGNwX3NlbmRfbXNzKHNrLCBcdTAwMjZzaXplX2dvYWwsIGZsYWdzKTtcbjEyMjg6XHRcbjEyMjk6XHRcdGVyciA9IC1FUElQRTtcbjEyMzA6XHRcdGlmIChzay1cdTAwM2Vza19lcnIgfHwgKHNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNiBTRU5EX1NIVVRET1dOKSlcbjEyMzE6XHRcdFx0Z290byBkb19lcnJvcjtcbjEyMzI6XHRcbjEyMzM6XHRcdHdoaWxlIChtc2dfZGF0YV9sZWZ0KG1zZykpIHtcbjEyMzQ6XHRcdFx0aW50IGNvcHkgPSAwO1xuMTIzNTpcdFxuMTIzNjpcdFx0XHRza2IgPSB0Y3Bfd3JpdGVfcXVldWVfdGFpbChzayk7XG4xMjM3Olx0XHRcdGlmIChza2IpXG4xMjM4Olx0XHRcdFx0Y29weSA9IHNpemVfZ29hbCAtIHNrYi1cdTAwM2VsZW47XG4xMjM5Olx0XG4xMjQwOlx0XHRcdHRyYWNlX3RjcF9zZW5kbXNnX2xvY2tlZChzaywgbXNnLCBza2IsIHNpemVfZ29hbCk7XG4xMjQxOlx0XG4xMjQyOlx0XHRcdGlmIChjb3B5IFx1MDAzYz0gMCB8fCAhdGNwX3NrYl9jYW5fY29sbGFwc2VfdG8oc2tiKSB8fFxuMTI0MzpcdFx0XHQgICAgdW5saWtlbHkoc2tiX2ZyYWdzX3JlYWRhYmxlKHNrYikgIT0gIWJpbmRpbmcpKSB7XG4xMjQ0Olx0XHRcdFx0Ym9vbCBmaXJzdF9za2I7XG4xMjQ1Olx0XG4xMjQ2Olx0bmV3X3NlZ21lbnQ6XG4xMjQ3Olx0XHRcdFx0aWYgKCFza19zdHJlYW1fbWVtb3J5X2ZyZWUoc2spKVxuMTI0ODpcdFx0XHRcdFx0Z290byB3YWl0X2Zvcl9zcGFjZTtcbjEyNDk6XHRcbjEyNTA6XHRcdFx0XHRpZiAodW5saWtlbHkocHJvY2Vzc19iYWNrbG9nIFx1MDAzZT0gMTYpKSB7XG4xMjUxOlx0XHRcdFx0XHRwcm9jZXNzX2JhY2tsb2cgPSAwO1xuMTI1MjpcdFx0XHRcdFx0aWYgKHNrX2ZsdXNoX2JhY2tsb2coc2spKVxuMTI1MzpcdFx0XHRcdFx0XHRnb3RvIHJlc3RhcnQ7XG4xMjU0Olx0XHRcdFx0fVxuMTI1NTpcdFx0XHRcdGZpcnN0X3NrYiA9IHRjcF9ydHhfYW5kX3dyaXRlX3F1ZXVlc19lbXB0eShzayk7XG4xMjU2Olx0XHRcdFx0c2tiID0gdGNwX3N0cmVhbV9hbGxvY19za2Ioc2ssIHNrLVx1MDAzZXNrX2FsbG9jYXRpb24sXG4xMjU3Olx0XHRcdFx0XHRcdFx0ICAgZmlyc3Rfc2tiKTtcbjEyNTg6XHRcdFx0XHRpZiAoIXNrYilcbjEyNTk6XHRcdFx0XHRcdGdvdG8gd2FpdF9mb3Jfc3BhY2U7XG4xMjYwOlx0XG4xMjYxOlx0XHRcdFx0cHJvY2Vzc19iYWNrbG9nJiM0MzsmIzQzOztcbjEyNjI6XHRcbjEyNjM6XHQjaWZkZWYgQ09ORklHX1NLQl9ERUNSWVBURURcbjEyNjQ6XHRcdFx0XHRza2ItXHUwMDNlZGVjcnlwdGVkID0gISEoZmxhZ3MgXHUwMDI2IE1TR19TRU5EUEFHRV9ERUNSWVBURUQpO1xuMTI2NTpcdCNlbmRpZlxuMTI2NjpcdFx0XHRcdHRjcF9za2JfZW50YWlsKHNrLCBza2IpO1xuMTI2NzpcdFx0XHRcdGNvcHkgPSBzaXplX2dvYWw7XG4xMjY4Olx0XG4xMjY5Olx0XHRcdFx0LyogQWxsIHBhY2tldHMgYXJlIHJlc3RvcmVkIGFzIGlmIHRoZXkgaGF2ZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODI3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbm5lciBtb25vbG9ndWU6CgoqKkRpdmluZyBEZWVwZXIgaW50byBgdGNwX3NlbmRtc2dfbG9ja2VkYCoqCgpBbHJpZ2h0LCBzbyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBmbG93IHdpdGhpbiBgdGNwX3NlbmRtc2dfbG9ja2VkYCwgYW5kIHNwZWNpZmljYWxseSwgdW5kZXJzdGFuZCB0aGUgcGF0aCBsZWFkaW5nIGFsbCB0aGUgd2F5IGRvd24gdG8gYG91dF9lcnJgLiBJJiMzOTttIGFscmVhZHkgcXVpdGUgZmFtaWxpYXIgd2l0aCB0aGUgb3ZlcmFsbCBUQ1Agc2VuZGluZyBwcm9jZXNzLCBzbyB0aGlzIGV4ZXJjaXNlIHdpbGwgYmUgYWJvdXQgcGlucG9pbnRpbmcgdGhlIHNwZWNpZmljIGVycm9yIGNvbmRpdGlvbnMgdGhhdCBjb3VsZCB0cmlnZ2VyIHRoYXQgcGFydGljdWxhciBwYXRoLiBJIHdhbnQgdG8gc2VlIHdoaWNoIHN1YnRsZSBkZXRhaWxzIGFyZSByZWxldmFudC4KCkkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGRpZmZlcmVudCBmYWlsdXJlIHBvaW50czogYXJlIHdlIHRhbGtpbmcgYWJvdXQgcmVzb3VyY2UgZXhoYXVzdGlvbiAobWVtb3J5LCBzb2NrZXQgYnVmZmVycyksIHByb3RvY29sIHZpb2xhdGlvbnMsIGNvbmdlc3Rpb24gY29udHJvbCBpc3N1ZXMsIG9yIHBlcmhhcHMgcHJvYmxlbXMgcmVsYXRlZCB0byB0aGUgdW5kZXJseWluZyBuZXR3b3JrIGludGVyZmFjZT8gVGhlIG51YW5jZXMgYXJlIGFsd2F5cyB0aGUgZGV2aWwgaW4gdGhlIGRldGFpbHMsIGFuZCBJIHdhbnQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGVkZ2UgY2FzZXMuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgYW55IG9mIHRoZSBjaGVja3Mgb3IgbWFuaXB1bGF0aW9ucyBwZXJmb3JtZWQgcHJpb3IgdG8gdGhlIGVycm9yIHBhdGggYXJlIGF0eXBpY2FsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzcwOlx0XHRcdFx0c2tfbWVtX2NoYXJnZShzaywgY29weSk7XG4xMzcxOlx0XHRcdH1cbjEzNzI6XHRcbjEzNzM6XHRcdFx0aWYgKCFjb3BpZWQpXG4xMzc0Olx0XHRcdFx0VENQX1NLQl9DQihza2IpLVx1MDAzZXRjcF9mbGFncyBcdTAwMjY9IH5UQ1BIRFJfUFNIO1xuMTM3NTpcdFxuMTM3NjpcdFx0XHRXUklURV9PTkNFKHRwLVx1MDAzZXdyaXRlX3NlcSwgdHAtXHUwMDNld3JpdGVfc2VxICYjNDM7IGNvcHkpO1xuMTM3NzpcdFx0XHRUQ1BfU0tCX0NCKHNrYiktXHUwMDNlZW5kX3NlcSAmIzQzOz0gY29weTtcbjEzNzg6XHRcdFx0dGNwX3NrYl9wY291bnRfc2V0KHNrYiwgMCk7XG4xMzc5Olx0XG4xMzgwOlx0XHRcdGNvcGllZCAmIzQzOz0gY29weTtcbjEzODE6XHRcdFx0aWYgKCFtc2dfZGF0YV9sZWZ0KG1zZykpIHtcbjEzODI6XHRcdFx0XHRpZiAodW5saWtlbHkoZmxhZ3MgXHUwMDI2IE1TR19FT1IpKVxuMTM4MzpcdFx0XHRcdFx0VENQX1NLQl9DQihza2IpLVx1MDAzZWVvciA9IDE7XG4xMzg0Olx0XHRcdFx0Z290byBvdXQ7XG4xMzg1Olx0XHRcdH1cbjEzODY6XHRcbjEzODc6XHRcdFx0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIHNpemVfZ29hbCB8fCAoZmxhZ3MgXHUwMDI2IE1TR19PT0IpIHx8IHVubGlrZWx5KHRwLVx1MDAzZXJlcGFpcikpXG4xMzg4Olx0XHRcdFx0Y29udGludWU7XG4xMzg5Olx0XG4xMzkwOlx0XHRcdGlmIChmb3JjZWRfcHVzaCh0cCkpIHtcbjEzOTE6XHRcdFx0XHR0Y3BfbWFya19wdXNoKHRwLCBza2IpO1xuMTM5MjpcdFx0XHRcdF9fdGNwX3B1c2hfcGVuZGluZ19mcmFtZXMoc2ssIG1zc19ub3csIFRDUF9OQUdMRV9QVVNIKTtcbjEzOTM6XHRcdFx0fSBlbHNlIGlmIChza2IgPT0gdGNwX3NlbmRfaGVhZChzaykpXG4xMzk0Olx0XHRcdFx0dGNwX3B1c2hfb25lKHNrLCBtc3Nfbm93KTtcbjEzOTU6XHRcdFx0Y29udGludWU7XG4xMzk2Olx0XG4xMzk3Olx0d2FpdF9mb3Jfc3BhY2U6XG4xMzk4Olx0XHRcdHNldF9iaXQoU09DS19OT1NQQUNFLCBcdTAwMjZzay1cdTAwM2Vza19zb2NrZXQtXHUwMDNlZmxhZ3MpO1xuMTM5OTpcdFx0XHR0Y3BfcmVtb3ZlX2VtcHR5X3NrYihzayk7XG4xNDAwOlx0XHRcdGlmIChjb3BpZWQpXG4xNDAxOlx0XHRcdFx0dGNwX3B1c2goc2ssIGZsYWdzIFx1MDAyNiB+TVNHX01PUkUsIG1zc19ub3csXG4xNDAyOlx0XHRcdFx0XHQgVENQX05BR0xFX1BVU0gsIHNpemVfZ29hbCk7XG4xNDAzOlx0XG4xNDA0Olx0XHRcdGVyciA9IHNrX3N0cmVhbV93YWl0X21lbW9yeShzaywgXHUwMDI2dGltZW8pO1xuMTQwNTpcdFx0XHRpZiAoZXJyICE9IDApXG4xNDA2Olx0XHRcdFx0Z290byBkb19lcnJvcjtcbjE0MDc6XHRcbjE0MDg6XHRcdFx0bXNzX25vdyA9IHRjcF9zZW5kX21zcyhzaywgXHUwMDI2c2l6ZV9nb2FsLCBmbGFncyk7XG4xNDA5Olx0XHR9XG4xNDEwOlx0XG4xNDExOlx0b3V0OlxuMTQxMjpcdFx0aWYgKGNvcGllZCkge1xuMTQxMzpcdFx0XHR0Y3BfdHhfdGltZXN0YW1wKHNrLCBcdTAwMjZzb2NrYyk7XG4xNDE0Olx0XHRcdHRjcF9wdXNoKHNrLCBmbGFncywgbXNzX25vdywgdHAtXHUwMDNlbm9uYWdsZSwgc2l6ZV9nb2FsKTtcbjE0MTU6XHRcdH1cbjE0MTY6XHRvdXRfbm9wdXNoOlxuMTQxNzpcdFx0LyogbXNnLVx1MDAzZW1zZ191YnVmIGlzIHBpbm5lZCBieSB0aGUgY2FsbGVyIHNvIHdlIGRvbiYjMzk7dCB0YWtlIGV4dHJhIHJlZnMgKi9cbjE0MTg6XHRcdGlmICh1YXJnIFx1MDAyNlx1MDAyNiAhbXNnLVx1MDAzZW1zZ191YnVmKVxuMTQxOTpcdFx0XHRuZXRfemNvcHlfcHV0KHVhcmcpO1xuMTQyMDpcdFx0aWYgKGJpbmRpbmcpXG4xNDIxOlx0XHRcdG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmdfcHV0KGJpbmRpbmcpO1xuMTQyMjpcdFx0cmV0dXJuIGNvcGllZCAmIzQzOyBjb3BpZWRfc3luO1xuMTQyMzpcdFxuMTQyNDpcdGRvX2Vycm9yOlxuMTQyNTpcdFx0dGNwX3JlbW92ZV9lbXB0eV9za2Ioc2spO1xuMTQyNjpcdFxuMTQyNzpcdFx0aWYgKGNvcGllZCAmIzQzOyBjb3BpZWRfc3luKVxuMTQyODpcdFx0XHRnb3RvIG91dDtcbjE0Mjk6XHRvdXRfZXJyOlxuMTQzMDpcdFx0LyogbXNnLVx1MDAzZW1zZ191YnVmIGlzIHBpbm5lZCBieSB0aGUgY2FsbGVyIHNvIHdlIGRvbiYjMzk7dCB0YWtlIGV4dHJhIHJlZnMgKi9cbjE0MzE6XHRcdGlmICh1YXJnIFx1MDAyNlx1MDAyNiAhbXNnLVx1MDAzZW1zZ191YnVmKVxuMTQzMjpcdFx0XHRuZXRfemNvcHlfcHV0X2Fib3J0KHVhcmcsIHRydWUpO1xuMTQzMzpcdFx0ZXJyID0gc2tfc3RyZWFtX2Vycm9yKHNrLCBmbGFncywgZXJyKTtcbjE0MzQ6XHRcdC8qIG1ha2Ugc3VyZSB3ZSB3YWtlIGFueSBlcG9sbCBlZGdlIHRyaWdnZXIgd2FpdGVyICovXG4xNDM1Olx0XHRpZiAodW5saWtlbHkodGNwX3J0eF9hbmRfd3JpdGVfcXVldWVzX2VtcHR5KHNrKSBcdTAwMjZcdTAwMjYgZXJyID09IC1FQUdBSU4pKSB7XG4xNDM2Olx0XHRcdFJFQURfT05DRShzay1cdTAwM2Vza193cml0ZV9zcGFjZSkoc2spO1xuMTQzNzpcdFx0XHR0Y3BfY2hyb25vX3N0b3Aoc2ssIFRDUF9DSFJPTk9fU05EQlVGX0xJTUlURUQpO1xuMTQzODpcdFx0fVxuMTQzOTpcdFx0aWYgKGJpbmRpbmcpXG4xNDQwOlx0XHRcdG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmdfcHV0KGJpbmRpbmcpO1xuMTQ0MTpcdFxuMTQ0MjpcdFx0cmV0dXJuIGVycjtcbjE0NDM6XHR9XG4xNDQ0Olx0RVhQT1JUX1NZTUJPTF9HUEwodGNwX3NlbmRtc2dfbG9ja2VkKTtcbjE0NDU6XHRcbjE0NDY6XHRpbnQgdGNwX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuMTQ0NzpcdHtcbjE0NDg6XHRcdGludCByZXQ7XG4xNDQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDAwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNjcKCQkJCQkJCW91dHB1dDogMTk1CgkJCQkJCQl0aG91Z2h0czogMTEwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBUQ1AgU2VuZG1zZyBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBJJiMzOTttIGxvb2tpbmcgYXQgYSBjaGFuZ2UgaW4gYHRjcF9zZW5kbXNnX2xvY2tlZGAuIFRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIGNoZWNrIHRvIHNlZSBpZiBgZG1hYnVmX2lkYCB3YXMgc2V0IGluIGEgYHNvY2tjbV9jb29raWVgLCBidXQgdGhhdCBjaGVjayBoYWQgc29tZSBjb25kaXRpb25zIHdoZXJlIGl0IG1pZ2h0ICpub3QqIGJlIHRyaWdnZXJlZCBldmVuIGlmIHRoZSBgZG1hYnVmX2lkYCAqd2FzKiBzZXQuIFRoaXMgY291bGQgcG90ZW50aWFsbHkgbGVhZCB0byBwcm9ibGVtcyBkb3duc3RyZWFtIGJlY2F1c2UgdGhlIHN5c3RlbSBtaWdodCBhc3N1bWUgdGhlIGBkbWFidWZgIHdhcyBjb3JyZWN0bHkgYm91bmQsIHdoZW4gaXQgd2FzbiYjMzk7dC4KClRoZSBwcmV2aW91cyBjb2RlIHdhcyBlc3NlbnRpYWxseSBzYXlpbmcsICYjMzQ7SWYgdGhlcmUmIzM5O3MgYSBETUEgYnVmZmVyIElELCBhbmQgd2UgKmFyZW4mIzM5O3QqIHVzaW5nIHplcm8tY29weSAob3IgaXQmIzM5O3Mgbm90IGVuYWJsZWQgb24gdGhlIHNvY2tldCksIHRoZW4gZXJyb3Igb3V0LiYjMzQ7ICBCdXQgdGhlcmUgd2VyZSBjb3JuZXIgY2FzZXMuIFNwZWNpZmljYWxseSwgYHpjYCBtaWdodCAqbm90KiBiZSBzZXQgdG8gYE1TR19aRVJPQ09QWWAsIGFuZCBgYmluZGluZ2AgKHdoaWNoIEkgYXNzdW1lIGlzIGEgcG9pbnRlciB0byBzb21ldGhpbmcgY3J1Y2lhbCkgbWlnaHQgYmUgYE5VTExgLgoKVGhlIGZpeCBzdHJlbmd0aGVucyB0aGlzIHZhbGlkYXRpb246IGBpZiAoIXNvY2tjX2VyciAmYW1wOyZhbXA7IHNvY2tjLmRtYWJ1Zl9pZCAmYW1wOyZhbXA7ICh6YyAhPSBNU0dfWkVST0NPUFkgfHwgIWJpbmRpbmcpKWAuIE5vdyBpdCAqYWx3YXlzKiBjaGVja3M6IElmIGBkbWFidWZfaWRgIGlzIHNldCwgZWl0aGVyIGB6Y2AgKm11c3QqIGJlIGBNU0dfWkVST0NPUFlgIG9yIHRoZSBiaW5kaW5nIGlzIG5vdCBudWxsLiBUaGF0IGVuc3VyZXMgdGhhdCBpZiB6ZXJvLWNvcHkgaXMgdXNlZCBhbmQgYGRtYWJ1Zl9pZGAgaXMgcGFzc2VkLCB0aGUgYXNzb2NpYXRlZCBzdHJ1Y3R1cmUgKGBiaW5kaW5nYCkgaXMgdmFsaWQuCgpNeSBtYWluIGNvbmNlcm4gd2l0aCBhIHBhdGNoIGxpa2UgdGhpcyBpcyB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGNoYW5nZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgdGhvc2Ugcmlza3MsIG9yIGNhdXNlIHVuaW5pdGlhbGl6ZWQgdmFsdWVzIHRvIGJlIHJlYWQgaW4gc29tZSByZWFjaGFibGUgY29kZSBwYXRoLgoKTGV0JiMzOTtzIGxvb2sgYXQgdGhlIHZhcmlhYmxlcyBpbnZvbHZlZCBpbiB0aGUgY29uZGl0aW9uOgotICAgYHNvY2tjX2VycmA6IEluaXRpYWxpemVkIHRvIDAuIEdvb2QuCi0gICBgc29ja2NgOiBJbml0aWFsaXplZCBhdCBsaW5lIDExMzIgYW5kIGlzIHByb3Blcmx5IGluaXRpYWxpemVkLgotICAgYHNvY2tjLmRtYWJ1Zl9pZGA6IEluaXRpYWxpemVkIHRvIDAgdGhyb3VnaCBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24sIGFuZCBpdCBvbmx5IGdldHMgcG9wdWxhdGVkIGlmIGBtc2ctJmd0O21zZ19jb250cm9sbGVuYCBpcyBzZXQuCi0gICBgemNgOiBJbml0aWFsaXplZCB0byAwLiBHb29kLgotICAgYGJpbmRpbmdgOiBJbml0aWFsaXplZCB0byBgTlVMTGAuCgpPa2F5LCBldmVyeXRoaW5nIGlzIHByb3Blcmx5IGluaXRpYWxpemVkLiBUaGlzIGlzIHNpbXBseSBzdHJlbmd0aGVuaW5nIHZhbGlkYXRpb24gbG9naWMsIHdoaWNoIG1ha2VzIGl0IHNhZmUuIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnZvbHZlIGFueSBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSAoc28sIG5vIHJpc2tzIGZvciB1bmluaXRpYWxpemVkIGZpZWxkcyBpbiBkYXRhIHBhc3NlZCBhY3Jvc3MgdGhlIGtlcm5lbC91c2VyIGJvdW5kYXJ5KSwgYW5kIGl0JiMzOTtzIG5vdCBhIG1lbW9yeSBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uIGlzc3VlLgoKVGhpcyBpcyBhbGwgKmxvZ2ljKiB2YWxpZGF0aW9uLCByZWFsbHkgdGlnaHRlbmluZyBpbnB1dCB2YWxpZGF0aW9uIGZvciBkZXZtZW0gVENQIHplcm8tY29weSB0cmFuc21pc3Npb24uICBJJiMzOTttIG5vdCBzZWVpbmcgYW55IHNjZW5hcmlvcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSB3b3VsZCBiZSByZWFkIGFzIGEgcmVzdWx0IG9mICp0aGlzKiBwYXRjaC4gVGhlcmVmb3JlLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IEtNU0FOIGZ1enppbmcgaXMgdW5uZWNlc3NhcnkgaGVyZS4gVGhpcyBpcyBhIHNvbGlkLCBzYWZlIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDA6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdGlnaHRlbnMgZXJyb3IgdmFsaWRhdGlvbiBpbiBgdGNwX3NlbmRtc2dfbG9ja2VkKClgIHdoZW4gYHNvY2tjLmRtYWJ1Zl9pZGAgaXMgc3VwcGxpZWQsIGVuc3VyaW5nIHRoYXQgZGV2bWVtIHRyYW5zbWlzc2lvbiBpcyBvbmx5IHBlcm1pdHRlZCB3aGVuIHplcm8tY29weSBpcyBhY3RpdmUgKGB6YyA9PSBNU0dfWkVST0NPUFlgKSBhbmQgYSB2YWxpZCBkZXZtZW0gYmluZGluZyBleGlzdHMgKGBiaW5kaW5nICE9IE5VTExgKS4gQWxsIHZhcmlhYmxlcyBldmFsdWF0ZWQgaW4gdGhpcyBjb25kaXRpb24gKGBzb2NrY19lcnJgLCBgc29ja2NgLCBgemNgLCBhbmQgYGJpbmRpbmdgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZXMuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBtZW1vcnkgY29weWluZyBsb2dpYyBpbiBhIG1hbm5lciB0aGF0IGNvdWxkIGNhdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBpbnZhbGlkIHBvaW50ZXJzIG9yIHN0YXRlIGludmFyaWFudHMgYXJlIGFkZHJlc3NhYmxlIGJ5IHN0YW5kYXJkIGRldGVjdG9ycyAvIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB0aWdodGVucyBlcnJvciB2YWxpZGF0aW9uIGluIGB0Y3Bfc2VuZG1zZ19sb2NrZWQoKWAgd2hlbiBgc29ja2MuZG1hYnVmX2lkYCBpcyBzdXBwbGllZCwgZW5zdXJpbmcgdGhhdCBkZXZtZW0gdHJhbnNtaXNzaW9uIGlzIG9ubHkgcGVybWl0dGVkIHdoZW4gemVyby1jb3B5IGlzIGFjdGl2ZSAoYHpjID09IE1TR19aRVJPQ09QWWApIGFuZCBhIHZhbGlkIGRldm1lbSBiaW5kaW5nIGV4aXN0cyAoYGJpbmRpbmcgIT0gTlVMTGApLiBBbGwgdmFyaWFibGVzIGV2YWx1YXRlZCBpbiB0aGlzIGNvbmRpdGlvbiAoYHNvY2tjX2VycmAsIGBzb2NrY2AsIGB6Y2AsIGFuZCBgYmluZGluZ2ApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlcy4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBvciBwYWRkaW5nIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzIG9yIG1lbW9yeSBjb3B5aW5nIGxvZ2ljIGluIGEgbWFubmVyIHRoYXQgY291bGQgY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIGludmFsaWQgcG9pbnRlcnMgb3Igc3RhdGUgaW52YXJpYW50cyBhcmUgYWRkcmVzc2FibGUgYnkgc3RhbmRhcmQgZGV0ZWN0b3JzIC8gS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MDc6NDguNDM0NDA0MTE5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc2MTU3MDg4ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiTkVUX0RFVk1FTVwiLFxuICAgIFwiRE1BX1NIQVJFRF9CVUZGRVJcIixcbiAgICBcIlBBR0VfUE9PTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF9zZW5kbXNnX2xvY2tlZFwiLFxuICAgIFwidGNwX3NlbmRtc2dcIixcbiAgICBcIm5ldF9kZXZtZW1fZ2V0X2JpbmRpbmdcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHRpZ2h0ZW5zIGVycm9yIHZhbGlkYXRpb24gaW4gYHRjcF9zZW5kbXNnX2xvY2tlZCgpYCB3aGVuIGBzb2NrYy5kbWFidWZfaWRgIGlzIHN1cHBsaWVkLCBlbnN1cmluZyB0aGF0IGRldm1lbSB0cmFuc21pc3Npb24gaXMgb25seSBwZXJtaXR0ZWQgd2hlbiB6ZXJvLWNvcHkgaXMgYWN0aXZlIChgemMgPT0gTVNHX1pFUk9DT1BZYCkgYW5kIGEgdmFsaWQgZGV2bWVtIGJpbmRpbmcgZXhpc3RzIChgYmluZGluZyAhPSBOVUxMYCkuIEFsbCB2YXJpYWJsZXMgZXZhbHVhdGVkIGluIHRoaXMgY29uZGl0aW9uIChgc29ja2NfZXJyYCwgYHNvY2tjYCwgYHpjYCwgYW5kIGBiaW5kaW5nYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgc3RhY2sgdmFyaWFibGVzLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IG9yIHBhZGRpbmcgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBib3VuZHMgb3IgbWVtb3J5IGNvcHlpbmcgbG9naWMgaW4gYSBtYW5uZXIgdGhhdCBjb3VsZCBjYXVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gaW52YWxpZCBwb2ludGVycyBvciBzdGF0ZSBpbnZhcmlhbnRzIGFyZSBhZGRyZXNzYWJsZSBieSBzdGFuZGFyZCBkZXRlY3RvcnMgLyBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHZhbGlkYXRpb24gbG9naWMgaW4gdGNwX3NlbmRtc2dfbG9ja2VkKCkgd2hlbiBwcm9jZXNzaW5nIFRDUCB6ZXJvLWNvcHkgbWVzc2FnZXMgd2l0aCBkZXZpY2UgbWVtb3J5IGRtYWJ1ZiBJRHMgKFNDTV9ERVZNRU1fRE1BQlVGKS4gSXQgZW5zdXJlcyB0aGF0IHRyYW5zbWlzc2lvbnMgd2l0aCBkbWFidWZfaWQgZmFpbCB3aXRoIC1FSU5WQUwgdW5sZXNzIHplcm9jb3B5IGlzIGFjdHVhbGx5IGVuYWJsZWQgKHpjID09IE1TR19aRVJPQ09QWSkgYW5kIGEgdmFsaWQgZGV2bWVtIGJpbmRpbmcgZXhpc3RzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIFRDUCBzb2NrZXQgdHJhbnNtaXQgcGF0aHMgdGhhdCBjYW4gYmUgdGVzdGVkIHVzaW5nIHN0YW5kYXJkIHNvY2tldCBzeXNjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MDc6NDguNDM0NDExNzU5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzMxNTM4NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwYjJmMjJjNzI2OTYwM2Y4MzY1ZTE2ZDQyYTI5NGYwZTg2YWIzMTFhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gU2VwIDYgMDA6MDc6NDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuY1xcbmluZGV4IGI0MjM3ZDBlOTk0ZDYuLjEwZjU4MjgxYmUxN2IgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvdGNwLmNcXG4rKysgYi9uZXQvaXB2NC90Y3AuY1xcbkBAIC0xMTY5LDggKzExNjksNyBAQCBpbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG4gXFx0XFx0XFx0emMgPSBNU0dfU1BMSUNFX1BBR0VTO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoIXNvY2tjX2VyciBcXHUwMDI2XFx1MDAyNiBzb2NrYy5kbWFidWZfaWQgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgICghKGZsYWdzIFxcdTAwMjYgTVNHX1pFUk9DT1BZKSB8fCAhc29ja19mbGFnKHNrLCBTT0NLX1pFUk9DT1BZKSkpIHtcXG4rXFx0aWYgKCFzb2NrY19lcnIgXFx1MDAyNlxcdTAwMjYgc29ja2MuZG1hYnVmX2lkIFxcdTAwMjZcXHUwMDI2ICh6YyAhPSBNU0dfWkVST0NPUFkgfHwgIWJpbmRpbmcpKSB7XFxuIFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuIFxcdFxcdGdvdG8gb3V0X2VycjtcXG4gXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDowNzo0OC44MDgzOTc4ODFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjUxMDcxMDUzNDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIk5FVF9ERVZNRU1cIixcbiAgICBcIkRNQV9TSEFSRURfQlVGRkVSXCIsXG4gICAgXCJQQUdFX1BPT0xcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3Bfc2VuZG1zZ19sb2NrZWRcIixcbiAgICBcInRjcF9zZW5kbXNnXCIsXG4gICAgXCJuZXRfZGV2bWVtX2dldF9iaW5kaW5nXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdmFsaWRhdGlvbiBsb2dpYyBpbiB0Y3Bfc2VuZG1zZ19sb2NrZWQoKSB3aGVuIHByb2Nlc3NpbmcgVENQIHplcm8tY29weSBtZXNzYWdlcyB3aXRoIGRldmljZSBtZW1vcnkgZG1hYnVmIElEcyAoU0NNX0RFVk1FTV9ETUFCVUYpLiBJdCBlbnN1cmVzIHRoYXQgdHJhbnNtaXNzaW9ucyB3aXRoIGRtYWJ1Zl9pZCBmYWlsIHdpdGggLUVJTlZBTCB1bmxlc3MgemVyb2NvcHkgaXMgYWN0dWFsbHkgZW5hYmxlZCAoemMgPT0gTVNHX1pFUk9DT1BZKSBhbmQgYSB2YWxpZCBkZXZtZW0gYmluZGluZyBleGlzdHMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUgVENQIHNvY2tldCB0cmFuc21pdCBwYXRocyB0aGF0IGNhbiBiZSB0ZXN0ZWQgdXNpbmcgc3RhbmRhcmQgc29ja2V0IHN5c2NhbGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDBiMmYyMmM3MjY5NjAzZjgzNjVlMTZkNDJhMjk0ZjBlODZhYjMxMWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDAwOjA3OjQ3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuY1xuaW5kZXggYjQyMzdkMGU5OTRkNi4uMTBmNTgyODFiZTE3YiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcC5jXG4rKysgYi9uZXQvaXB2NC90Y3AuY1xuQEAgLTExNjksOCArMTE2OSw3IEBAIGludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuIFx0XHRcdHpjID0gTVNHX1NQTElDRV9QQUdFUztcbiBcdH1cbiBcbi1cdGlmICghc29ja2NfZXJyIFx1MDAyNlx1MDAyNiBzb2NrYy5kbWFidWZfaWQgXHUwMDI2XHUwMDI2XG4tXHQgICAgKCEoZmxhZ3MgXHUwMDI2IE1TR19aRVJPQ09QWSkgfHwgIXNvY2tfZmxhZyhzaywgU09DS19aRVJPQ09QWSkpKSB7XG4rXHRpZiAoIXNvY2tjX2VyciBcdTAwMjZcdTAwMjYgc29ja2MuZG1hYnVmX2lkIFx1MDAyNlx1MDAyNiAoemMgIT0gTVNHX1pFUk9DT1BZIHx8ICFiaW5kaW5nKSkge1xuIFx0XHRlcnIgPSAtRUlOVkFMO1xuIFx0XHRnb3RvIG91dF9lcnI7XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDowNzo0OC44MDg0MDAyMTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1OTU5MTIyMzA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbiwgcHJlc2VudGVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBUQ1AgQ29kZSoqXG5cbk9rYXksIHNvIHdlIGhhdmUgYSBwYXRjaCB0byByZXZpZXcsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIGBuZXQvaXB2NC90Y3AuY2AgZmlsZSBhbmQsIG1vcmUgcHJlY2lzZWx5LCB0aGUgYHRjcF9zZW5kbXNnX2xvY2tlZGAgZnVuY3Rpb24uIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHRoZSAqY29udGV4dCogc3Vycm91bmRpbmcgdGhpcyBjaGFuZ2UuIEknbSBnb2luZyB0byBsZXZlcmFnZSBteSBlc3RhYmxpc2hlZCB0b29sa2l0LiBJJ2xsIHJlYWNoIGZvciBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAsIGRlcGVuZGluZyBvbiBteSBwcmVmZXJlbmNlLCB0byB6ZXJvIGluIG9uIGBuZXQvaXB2NC90Y3AuY2AgYXJvdW5kIGxpbmUgMTE2OS4gVGhpcyBhcHByb2FjaCBnaXZlcyBtZSBhIHF1aWNrIHdpbmRvdyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBsZXR0aW5nIG1lIHVuZGVyc3RhbmQgdGhlIGltbWVkaWF0ZSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhlIHByb3Bvc2VkIGNoYW5nZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgKmJlZm9yZSogdGhhdCBsaW5lLCBhbmQgd2hhdCB0aGUgY29kZSBkb2VzICphZnRlciogdGhlIGxpbmUgaW4gdGhlIHJvdXRpbmUgYHRjcF9zZW5kbXNnX2xvY2tlZGAsIGJlY2F1c2UgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYWx3YXlzIHByb3ZpZGVzIHRoZSB2aXRhbCBjb250ZXh0IEkgbmVlZCB0byBwcm9wZXJseSBpbnRlcnByZXQgdGhlIG1vZGlmaWNhdGlvbi4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IHRvIHNlZSB0aGUgY29kZSwgYW5kIHVuZGVyc3RhbmQgdGhlIGludGVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkwNSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MDc6NTQuNzY3NTI0NTM2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2MzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExNDAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNDA6XFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IE1TR19aRVJPQ09QWSkgXFx1MDAyNlxcdTAwMjYgc2l6ZSkge1xcbjExNDE6XFx0XFx0XFx0aWYgKG1zZy1cXHUwMDNlbXNnX3VidWYpIHtcXG4xMTQyOlxcdFxcdFxcdFxcdHVhcmcgPSBtc2ctXFx1MDAzZW1zZ191YnVmO1xcbjExNDM6XFx0XFx0XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19yb3V0ZV9jYXBzIFxcdTAwMjYgTkVUSUZfRl9TRylcXG4xMTQ0OlxcdFxcdFxcdFxcdFxcdHpjID0gTVNHX1pFUk9DT1BZO1xcbjExNDU6XFx0XFx0XFx0fSBlbHNlIGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfWkVST0NPUFkpKSB7XFxuMTE0NjpcXHRcXHRcXHRcXHRza2IgPSB0Y3Bfd3JpdGVfcXVldWVfdGFpbChzayk7XFxuMTE0NzpcXHRcXHRcXHRcXHR1YXJnID0gbXNnX3plcm9jb3B5X3JlYWxsb2Moc2ssIHNpemUsIHNrYl96Y29weShza2IpLFxcbjExNDg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICFzb2NrY19lcnIgXFx1MDAyNlxcdTAwMjYgc29ja2MuZG1hYnVmX2lkKTtcXG4xMTQ5OlxcdFxcdFxcdFxcdGlmICghdWFyZykge1xcbjExNTA6XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVOT0JVRlM7XFxuMTE1MTpcXHRcXHRcXHRcXHRcXHRnb3RvIG91dF9lcnI7XFxuMTE1MjpcXHRcXHRcXHRcXHR9XFxuMTE1MzpcXHRcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3JvdXRlX2NhcHMgXFx1MDAyNiBORVRJRl9GX1NHKVxcbjExNTQ6XFx0XFx0XFx0XFx0XFx0emMgPSBNU0dfWkVST0NPUFk7XFxuMTE1NTpcXHRcXHRcXHRcXHRlbHNlXFxuMTE1NjpcXHRcXHRcXHRcXHRcXHR1YXJnX3RvX21zZ3pjKHVhcmcpLVxcdTAwM2V6ZXJvY29weSA9IDA7XFxuMTE1NzpcXHRcXG4xMTU4OlxcdFxcdFxcdFxcdGlmICghc29ja2NfZXJyIFxcdTAwMjZcXHUwMDI2IHNvY2tjLmRtYWJ1Zl9pZCkge1xcbjExNTk6XFx0XFx0XFx0XFx0XFx0YmluZGluZyA9IG5ldF9kZXZtZW1fZ2V0X2JpbmRpbmcoc2ssIHNvY2tjLmRtYWJ1Zl9pZCk7XFxuMTE2MDpcXHRcXHRcXHRcXHRcXHRpZiAoSVNfRVJSKGJpbmRpbmcpKSB7XFxuMTE2MTpcXHRcXHRcXHRcXHRcXHRcXHRlcnIgPSBQVFJfRVJSKGJpbmRpbmcpO1xcbjExNjI6XFx0XFx0XFx0XFx0XFx0XFx0YmluZGluZyA9IE5VTEw7XFxuMTE2MzpcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIG91dF9lcnI7XFxuMTE2NDpcXHRcXHRcXHRcXHRcXHR9XFxuMTE2NTpcXHRcXHRcXHRcXHR9XFxuMTE2NjpcXHRcXHRcXHR9XFxuMTE2NzpcXHRcXHR9IGVsc2UgaWYgKHVubGlrZWx5KG1zZy1cXHUwMDNlbXNnX2ZsYWdzIFxcdTAwMjYgTVNHX1NQTElDRV9QQUdFUykgXFx1MDAyNlxcdTAwMjYgc2l6ZSkge1xcbjExNjg6XFx0XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19yb3V0ZV9jYXBzIFxcdTAwMjYgTkVUSUZfRl9TRylcXG4xMTY5OlxcdFxcdFxcdFxcdHpjID0gTVNHX1NQTElDRV9QQUdFUztcXG4xMTcwOlxcdFxcdH1cXG4xMTcxOlxcdFxcbjExNzI6XFx0XFx0aWYgKCFzb2NrY19lcnIgXFx1MDAyNlxcdTAwMjYgc29ja2MuZG1hYnVmX2lkIFxcdTAwMjZcXHUwMDI2ICh6YyAhPSBNU0dfWkVST0NPUFkgfHwgIWJpbmRpbmcpKSB7XFxuMTE3MzpcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbjExNzQ6XFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbjExNzU6XFx0XFx0fVxcbjExNzY6XFx0XFxuMTE3NzpcXHRcXHRpZiAodW5saWtlbHkoZmxhZ3MgXFx1MDAyNiBNU0dfRkFTVE9QRU4gfHxcXG4xMTc4OlxcdFxcdFxcdCAgICAgaW5ldF90ZXN0X2JpdChERUZFUl9DT05ORUNULCBzaykpIFxcdTAwMjZcXHUwMDI2XFxuMTE3OTpcXHRcXHQgICAgIXRwLVxcdTAwM2VyZXBhaXIpIHtcXG4xMTgwOlxcdFxcdFxcdGVyciA9IHRjcF9zZW5kbXNnX2Zhc3RvcGVuKHNrLCBtc2csIFxcdTAwMjZjb3BpZWRfc3luLCBzaXplLCB1YXJnKTtcXG4xMTgxOlxcdFxcdFxcdGlmIChlcnIgPT0gLUVJTlBST0dSRVNTIFxcdTAwMjZcXHUwMDI2IGNvcGllZF9zeW4gXFx1MDAzZSAwKVxcbjExODI6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTE4MzpcXHRcXHRcXHRlbHNlIGlmIChlcnIpXFxuMTE4NDpcXHRcXHRcXHRcXHRnb3RvIG91dF9lcnI7XFxuMTE4NTpcXHRcXHR9XFxuMTE4NjpcXHRcXG4xMTg3OlxcdFxcdHRpbWVvID0gc29ja19zbmR0aW1lbyhzaywgZmxhZ3MgXFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xcbjExODg6XFx0XFxuMTE4OTpcXHRcXHR0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzayk7ICAvKiBpcyBzZW5kaW5nIGFwcGxpY2F0aW9uLWxpbWl0ZWQ/ICovXFxuMTE5MDpcXHRcXG4xMTkxOlxcdFxcdC8qIFdhaXQgZm9yIGEgY29ubmVjdGlvbiB0byBmaW5pc2guIE9uZSBleGNlcHRpb24gaXMgVENQIEZhc3QgT3BlblxcbjExOTI6XFx0XFx0ICogKHBhc3NpdmUgc2lkZSkgd2hlcmUgZGF0YSBpcyBhbGxvd2VkIHRvIGJlIHNlbnQgYmVmb3JlIGEgY29ubmVjdGlvblxcbjExOTM6XFx0XFx0ICogaXMgZnVsbHkgZXN0YWJsaXNoZWQuXFxuMTE5NDpcXHRcXHQgKi9cXG4xMTk1OlxcdFxcdGlmICgoKDEgXFx1MDAzY1xcdTAwM2Mgc2stXFx1MDAzZXNrX3N0YXRlKSBcXHUwMDI2IH4oVENQRl9FU1RBQkxJU0hFRCB8IFRDUEZfQ0xPU0VfV0FJVCkpIFxcdTAwMjZcXHUwMDI2XFxuMTE5NjpcXHRcXHQgICAgIXRjcF9wYXNzaXZlX2Zhc3RvcGVuKHNrKSkge1xcbjExOTc6XFx0XFx0XFx0ZXJyID0gc2tfc3RyZWFtX3dhaXRfY29ubmVjdChzaywgXFx1MDAyNnRpbWVvKTtcXG4xMTk4OlxcdFxcdFxcdGlmIChlcnIgIT0gMClcXG4xMTk5OlxcdFxcdFxcdFxcdGdvdG8gZG9fZXJyb3I7XFxuMTIwMDpcXHRcXHR9XFxuMTIwMTpcXHRcXG4xMjAyOlxcdFxcdGlmICh1bmxpa2VseSh0cC1cXHUwMDNlcmVwYWlyKSkge1xcbjEyMDM6XFx0XFx0XFx0aWYgKHRwLVxcdTAwM2VyZXBhaXJfcXVldWUgPT0gVENQX1JFQ1ZfUVVFVUUpIHtcXG4xMjA0OlxcdFxcdFxcdFxcdGNvcGllZCA9IHRjcF9zZW5kX3JjdnEoc2ssIG1zZywgc2l6ZSk7XFxuMTIwNTpcXHRcXHRcXHRcXHRnb3RvIG91dF9ub3B1c2g7XFxuMTIwNjpcXHRcXHRcXHR9XFxuMTIwNzpcXHRcXG4xMjA4OlxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuMTIwOTpcXHRcXHRcXHRpZiAodHAtXFx1MDAzZXJlcGFpcl9xdWV1ZSA9PSBUQ1BfTk9fUVVFVUUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjA3OjU0Ljc2NzcxMjcwNloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzOTQ5ODg3MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVENQIFNlbmQgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgYSBtb2RpZmljYXRpb24gdG8gYHRjcF9zZW5kbXNnX2xvY2tlZGAgaW4gYG5ldC9pcHY0L3RjcC5jYCwgd2hpY2ggaXMgYWx3YXlzIGludGVyZXN0aW5nLiBUaGUgY29yZSBjaGFuZ2UgZm9jdXNlcyBvbiB0aGlzIGNvbmRpdGlvbmFsIGJsb2NrOlxuXG5gYGBjXG4tXHRpZiAoIXNvY2tjX2VyciBcdTAwMjZcdTAwMjYgc29ja2MuZG1hYnVmX2lkIFx1MDAyNlx1MDAyNlxuLVx0ICAgICghKGZsYWdzIFx1MDAyNiBNU0dfWkVST0NPUFkpIHx8ICFzb2NrX2ZsYWcoc2ssIFNPQ0tfWkVST0NPUFkpKSkge1xuK1x0aWYgKCFzb2NrY19lcnIgXHUwMDI2XHUwMDI2IHNvY2tjLmRtYWJ1Zl9pZCBcdTAwMjZcdTAwMjYgKHpjICE9IE1TR19aRVJPQ09QWSB8fCAhYmluZGluZykpIHtcbiBcdFx0ZXJyID0gLUVJTlZBTDtcbiBcdFx0Z290byBvdXRfZXJyO1xuIFx0fVxuYGBgXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgYSB3b3J0aHdoaWxlIHRhcmdldCBmb3IgZnV6emluZy4gVGhpcyBjb2RlIGlzIGNsZWFybHkgaW4gdGhlIHBhdGggb2YgYHRjcF9zZW5kbXNnX2xvY2tlZGAsIHdoaWNoIGlzICp0aGUqIGNvcmUgZnVuY3Rpb24gZm9yIFRDUCBzb2NrZXQgc2VuZCBvcGVyYXRpb25zLiBJdCBoYW5kbGVzIGBNU0dfWkVST0NPUFlgIGFuZCwgY3J1Y2lhbGx5LCBpbnRlcmFjdHMgd2l0aCBgZG1hYnVmX2lkYCwgd2hpY2ggaXMgbGlrZWx5IHJlbGF0ZWQgdG8gYGRldm1lbWAgb3Igc2ltaWxhciBETUEgYnVmZmVyIG1lY2hhbmlzbXMuXG5cbmB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGlzIHJlYWNoZWQgdGhyb3VnaCBzdGFuZGFyZCBzb2NrZXQgc3lzY2FsbHMgbGlrZSBgc2VuZG1zZ2AsIGBzZW5kYCwgYW5kIGBzZW5kdG9gLiBTbywgaXQncyBwcmV0dHkgYWNjZXNzaWJsZS4gTXkgbmV4dCBzdGVwIGlzIHRvIGRldGVybWluZSBpZiBhbnkgY29uZmlndXJhdGlvbnMgZ2F0ZSB0aGlzIGZ1bmN0aW9uYWxpdHkuIEknbGwgbmVlZCB0byBpbnZlc3RpZ2F0ZSBgbmV0X2Rldm1lbV9nZXRfYmluZGluZ2AgYW5kIHRoZSBgc29ja2MuZG1hYnVmX2lkYCB0byB1bmRlcnN0YW5kIHRoZSBwcmVyZXF1aXNpdGVzIGZvciB0aGlzIGNvbmRpdGlvbiB0byBiZSB0cmlnZ2VyZWQuIEFueSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaGVyZSBjb3VsZCBuYXJyb3cgbXkgZm9jdXMgZm9yIGZ1enppbmcgb3IgaW5mbHVlbmNlIHRoZSB0eXBlIG9mIGlucHV0IEknbGwgbmVlZCB0byBjcmFmdCB0byBoaXQgdGhpcyBwb3RlbnRpYWxseSB2dWxuZXJhYmxlIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzOTcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDowNzo1OC4xNjI3MDM4ODhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA1MTMzMTE5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRfZGV2bWVtX2dldF9iaW5kaW5nXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldm1lbS5jPTM3OT12b2lkIG5ldF9kZXZtZW1fcHV0X25ldF9pb3Yoc3RydWN0IG5ldF9pb3YgKm5pb3YpXFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uYy0zODMtXFxubmV0L2NvcmUvZGV2bWVtLmM6Mzg0OnN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHN0cnVjdCBzb2NrICpzayxcXG5uZXQvY29yZS9kZXZtZW0uYy0zODUtXFx0XFx0XFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCBkbWFidWZfaWQpXFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uaD0xNTU9c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxcbm5ldC9jb3JlL2Rldm1lbS5oOjE1NjpuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGRtYWJ1Zl9pZCk7XFxubmV0L2NvcmUvZGV2bWVtLmgtMTU3LXN0cnVjdCBuZXRfaW92ICpcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5oPTIyOD1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcXG5uZXQvY29yZS9kZXZtZW0uaDoyMjk6bmV0X2Rldm1lbV9nZXRfYmluZGluZyhzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBkbWFidWZfaWQpXFxubmV0L2NvcmUvZGV2bWVtLmgtMjMwLXtcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTExMTY9aW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0xMTU4LVxcdFxcdFxcdGlmICghc29ja2NfZXJyIFxcdTAwMjZcXHUwMDI2IHNvY2tjLmRtYWJ1Zl9pZCkge1xcbm5ldC9pcHY0L3RjcC5jOjExNTk6XFx0XFx0XFx0XFx0YmluZGluZyA9IG5ldF9kZXZtZW1fZ2V0X2JpbmRpbmcoc2ssIHNvY2tjLmRtYWJ1Zl9pZCk7XFxubmV0L2lwdjQvdGNwLmMtMTE2MC1cXHRcXHRcXHRcXHRpZiAoSVNfRVJSKGJpbmRpbmcpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjA4OjAwLjIxNDA0MjA4MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwMDk1NDA0MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlOlxuXG4qKkludmVzdGlnYXRpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gaW4gYG5ldC9jb3JlL2Rldm1lbS5oYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbmNsdXNpb24gb3IgYmVoYXZpb3Igb2YgYG5ldC9jb3JlL2Rldm1lbS5oYC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGxvb2sgZm9yIGFueSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBvciBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBjb250cm9sIGl0cyBjb21waWxhdGlvbi4gSSB3YW50IHRvIHNlZSBpZiBpdCdzIGRlcGVuZGVudCBvbiBhIHNwZWNpZmljIGBDT05GSUdgIG9wdGlvbiwgb3IgaWYgdGhlcmUncyBhbnkgb3RoZXIgY29uZGl0aW9uYWwgbG9naWMgZGV0ZXJtaW5pbmcgd2hlbiB0aGlzIGhlYWRlciBnZXRzIHB1bGxlZCBpbi4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuLCBhbmQgaXTigJlzIGFsd2F5cyB0aGUgZmlyc3QgcGxhY2UgSSBzdGFydCB3aGVuIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIGNvbmZpZ3VyYXRpb24gb2YgYSBwaWVjZSBvZiBrZXJuZWwgY29kZSBsaWtlIHRoaXMuIEknbSBleHBlY3RpbmcgdG8gZmluZCBhIHR5cGljYWwgYCNpZmRlZmAsIGAjaWZuZGVmYCwgb3IgbWF5YmUgZXZlbiBzb21lIG1vcmUgY29tcGxleCBtYWNybyBjb25zdHJ1Y3RzLiBUaGUgZ29hbCBpcyB0byBmaWd1cmUgb3V0IHRoZSBzY2VuYXJpb3Mgd2hlcmUgYGRldm1lbS5oYCBpcyByZWxldmFudCwgYW5kIHBlcmhhcHMsIHdoeSBpdCBtaWdodCBiZSBleGNsdWRlZCBpbiBvdGhlcnMuIExldOKAmXMgZGl2ZSBpbiBhbmQgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ0OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjA4OjA0LjIyMzU4NDUwNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2Rldm1lbS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBEZXZpY2UgbWVtb3J5IFRDUCBzdXBwb3J0XFxuICAgNDpcXHQgKlxcbiAgIDU6XFx0ICogQXV0aG9yczpcXHRNaW5hIEFsbWFzcnkgXFx1MDAzY2FsbWFzcnltaW5hQGdvb2dsZS5jb21cXHUwMDNlXFxuICAgNjpcXHQgKlxcdFxcdFdpbGxlbSBkZSBCcnVpam4gXFx1MDAzY3dpbGxlbWJAZ29vZ2xlLmNvbVxcdTAwM2VcXG4gICA3OlxcdCAqXFx0XFx0S2FpeXVhbiBaaGFuZyBcXHUwMDNja2FpeXVhbnpAZ29vZ2xlLmNvbVxcdTAwM2VcXG4gICA4OlxcdCAqXFxuICAgOTpcXHQgKi9cXG4gIDEwOlxcdCNpZm5kZWYgX05FVF9ERVZNRU1fSFxcbiAgMTE6XFx0I2RlZmluZSBfTkVUX0RFVk1FTV9IXFxuICAxMjpcXHRcXG4gIDEzOlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0bWVtLmhcXHUwMDNlXFxuICAxNDpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGRldl9uZXRsaW5rLmhcXHUwMDNlXFxuICAxNTpcXHRcXG4gIDE2OlxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2s7XFxuICAxNzpcXHRcXG4gIDE4OlxcdHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nIHtcXG4gIDE5OlxcdFxcdHN0cnVjdCBkbWFfYnVmICpkbWFidWY7XFxuICAyMDpcXHRcXHRzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2htZW50O1xcbiAgMjE6XFx0XFx0c3RydWN0IHNnX3RhYmxlICpzZ3Q7XFxuICAyMjpcXHRcXHQvKiBQaHlzaWNhbCBOSUMgdGhhdCBkb2VzIHRoZSBhY3R1YWwgRE1BIGZvciB0aGlzIGJpbmRpbmcuICovXFxuICAyMzpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbiAgMjQ6XFx0XFx0LyogT3BhcXVlIGNvb2tpZSBpZGVudGlmeWluZyB0aGUgdmlydHVhbCBkZXZpY2UgKGUuZy4gbmV0a2l0KSB0aGUgdXNlclxcbiAgMjU6XFx0XFx0ICogY2FsbGVkIGJpbmQtdHggb24uIFVzZWQgb25seSBmb3IgcG9pbnRlciBjb21wYXJpc29uLiBOZXZlclxcbiAgMjY6XFx0XFx0ICogZGVyZWZlcmVuY2VkLlxcbiAgMjc6XFx0XFx0ICovXFxuICAyODpcXHRcXHR2b2lkICp2ZGV2O1xcbiAgMjk6XFx0XFx0c3RydWN0IGdlbl9wb29sICpjaHVua19wb29sO1xcbiAgMzA6XFx0XFx0LyogUHJvdGVjdCBkZXYgKi9cXG4gIDMxOlxcdFxcdHN0cnVjdCBtdXRleCBsb2NrO1xcbiAgMzI6XFx0XFxuICAzMzpcXHRcXHQvKiBUaGUgdXNlciBob2xkcyBhIHJlZiAodmlhIHRoZSBuZXRsaW5rIEFQSSkgZm9yIGFzIGxvbmcgYXMgdGhleSB3YW50XFxuICAzNDpcXHRcXHQgKiB0aGUgYmluZGluZyB0byByZW1haW4gYWxpdmUuIEVhY2ggcGFnZSBwb29sIHVzaW5nIHRoaXMgYmluZGluZyBob2xkc1xcbiAgMzU6XFx0XFx0ICogYSByZWYgdG8ga2VlcCB0aGUgYmluZGluZyBhbGl2ZS4gVGhlIHBhZ2VfcG9vbCBkb2VzIG5vdCByZWxlYXNlIHRoZVxcbiAgMzY6XFx0XFx0ICogcmVmIHVudGlsIGFsbCB0aGUgbmV0X2lvdnMgYWxsb2NhdGVkIGZyb20gdGhpcyBiaW5kaW5nIGFyZSByZWxlYXNlZFxcbiAgMzc6XFx0XFx0ICogYmFjayB0byB0aGUgcGFnZV9wb29sLlxcbiAgMzg6XFx0XFx0ICpcXG4gIDM5OlxcdFxcdCAqIFRoZSBiaW5kaW5nIHVuZG9zIGl0c2VsZiBhbmQgdW5tYXBzIHRoZSB1bmRlcmx5aW5nIGRtYWJ1ZiBvbmNlIGFsbFxcbiAgNDA6XFx0XFx0ICogdGhvc2UgcmVmcyBhcmUgZHJvcHBlZCBhbmQgdGhlIGJpbmRpbmcgaXMgbm8gbG9uZ2VyIGRlc2lyZWQgb3IgaW5cXG4gIDQxOlxcdFxcdCAqIHVzZS5cXG4gIDQyOlxcdFxcdCAqXFxuICA0MzpcXHRcXHQgKiBuZXRfZGV2bWVtX2dldF9uZXRfaW92KCkgb24gZG1hYnVmIG5ldF9pb3ZzIHdpbGwgaW5jcmVtZW50IHRoaXNcXG4gIDQ0OlxcdFxcdCAqIHJlZmVyZW5jZSwgbWFraW5nIHN1cmUgdGhhdCB0aGUgYmluZGluZyByZW1haW5zIGFsaXZlIHVudGlsIGFsbCB0aGVcXG4gIDQ1OlxcdFxcdCAqIG5ldF9pb3ZzIGFyZSBubyBsb25nZXIgdXNlZC4gbmV0X2lvdnMgYWxsb2NhdGVkIGZyb20gdGhpcyBiaW5kaW5nXFxuICA0NjpcXHRcXHQgKiB0aGF0IGFyZSBzdHVjayBpbiB0aGUgVFggcGF0aCBmb3IgYW55IHJlYXNvbiAoc3VjaCBhcyBhd2FpdGluZ1xcbiAgNDc6XFx0XFx0ICogcmV0cmFuc21pdHMpIGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIGJpbmRpbmcgdW50aWwgdGhlIHNrYiBob2xkaW5nXFxuICA0ODpcXHRcXHQgKiB0aGVtIGlzIGZyZWVkLlxcbiAgNDk6XFx0XFx0ICovXFxuICA1MDpcXHRcXHRzdHJ1Y3QgcGVyY3B1X3JlZiByZWY7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjA4OjA0LjIyMzY2MjM3NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NTI5OTg2MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gZGV2bWVtLmgncyBDb25kaXRpb25hbCBDb21waWxhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gYG5ldC9jb3JlL2Rldm1lbS5oYC4gSSdtIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBhbnkgYCNpZmRlZmAgZGlyZWN0aXZlcyBpbiB0aGlzIGZpbGUuIEknbSBndWVzc2luZyB0aGF0IEknbSBpbnRlcmVzdGVkIGluIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB2YXJpb3VzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHBhdGhzLCB3aGljaCBjYW4gYmUgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGRldmljZSBtZW1vcnkgaXMgaGFuZGxlZCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBkaWZmZXJlbnQgaGFyZHdhcmUgYXJjaGl0ZWN0dXJlcywgY29uZmlndXJhdGlvbnMsIG9yIGtlcm5lbCB2ZXJzaW9ucy4gVGhpcyBmaWxlIHNlZW1zIGNydWNpYWwgZm9yIGxvdy1sZXZlbCBkZXZpY2UgaW50ZXJhY3Rpb24sIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBzZWxlY3RpdmVseSBpbmNsdWRlZCBvciBleGNsdWRlZCBiYXNlZCBvbiBidWlsZC10aW1lIGRlZmluZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZnVuY3Rpb25hbGl0eSBpcyBjb25kaXRpb25hbCwgYW5kIHdoYXQgY29uZmlndXJhdGlvbnMgY2FuIGhhdmUgYSBiaWcgaW1wYWN0IG9uIGhvdyB0aGlzIHRoaW5nIHdvcmtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDY5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDowODowNi4xNzY2NjQ5OTZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2Rldm1lbS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0NSxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE0NTpcXHR9XFxuIDE0NjpcXHRcXG4gMTQ3OlxcdHZvaWQgbmV0X2Rldm1lbV9nZXRfbmV0X2lvdihzdHJ1Y3QgbmV0X2lvdiAqbmlvdik7XFxuIDE0ODpcXHR2b2lkIG5ldF9kZXZtZW1fcHV0X25ldF9pb3Yoc3RydWN0IG5ldF9pb3YgKm5pb3YpO1xcbiAxNDk6XFx0XFxuIDE1MDpcXHRzdHJ1Y3QgbmV0X2lvdiAqXFxuIDE1MTpcXHRuZXRfZGV2bWVtX2FsbG9jX2RtYWJ1ZihzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyk7XFxuIDE1MjpcXHR2b2lkIG5ldF9kZXZtZW1fZnJlZV9kbWFidWYoc3RydWN0IG5ldF9pb3YgKnBwaW92KTtcXG4gMTUzOlxcdFxcbiAxNTQ6XFx0XFxuIDE1NTpcXHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqXFxuIDE1NjpcXHRuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGRtYWJ1Zl9pZCk7XFxuIDE1NzpcXHRzdHJ1Y3QgbmV0X2lvdiAqXFxuIDE1ODpcXHRuZXRfZGV2bWVtX2dldF9uaW92X2F0KHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nLCBzaXplX3QgYWRkcixcXG4gMTU5OlxcdFxcdFxcdCAgICAgICBzaXplX3QgKm9mZiwgc2l6ZV90ICpzaXplKTtcXG4gMTYwOlxcdFxcbiAxNjE6XFx0I2Vsc2VcXG4gMTYyOlxcdHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nO1xcbiAxNjM6XFx0XFxuIDE2NDpcXHRzdGF0aWMgaW5saW5lIHZvaWRcXG4gMTY1OlxcdG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmdfcHV0KHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKVxcbiAxNjY6XFx0e1xcbiAxNjc6XFx0fVxcbiAxNjg6XFx0XFxuIDE2OTpcXHRzdGF0aWMgaW5saW5lIHZvaWQgbmV0X2Rldm1lbV9nZXRfbmV0X2lvdihzdHJ1Y3QgbmV0X2lvdiAqbmlvdilcXG4gMTcwOlxcdHtcXG4gMTcxOlxcdH1cXG4gMTcyOlxcdFxcbiAxNzM6XFx0c3RhdGljIGlubGluZSB2b2lkIG5ldF9kZXZtZW1fcHV0X25ldF9pb3Yoc3RydWN0IG5ldF9pb3YgKm5pb3YpXFxuIDE3NDpcXHR7XFxuIDE3NTpcXHR9XFxuIDE3NjpcXHRcXG4gMTc3OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxcbiAxNzg6XFx0bmV0X2Rldm1lbV9iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp2ZGV2LFxcbiAxNzk6XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkZXZpY2UgKmRtYV9kZXYsXFxuIDE4MDpcXHRcXHRcXHQgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLFxcbiAxODE6XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBkbWFidWZfZmQsXFxuIDE4MjpcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IG5pb3Zfc2hpZnQsXFxuIDE4MzpcXHRcXHRcXHQgICAgICAgc3RydWN0IG5ldGRldl9ubF9zb2NrICpwcml2LFxcbiAxODQ6XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4gMTg1OlxcdHtcXG4gMTg2OlxcdFxcdHJldHVybiBFUlJfUFRSKC1FT1BOT1RTVVBQKTtcXG4gMTg3OlxcdH1cXG4gMTg4OlxcdFxcbiAxODk6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqbmV0X2Rldm1lbV9sb29rdXBfZG1hYnVmKHUzMiBpZClcXG4gMTkwOlxcdHtcXG4gMTkxOlxcdFxcdHJldHVybiBOVUxMO1xcbiAxOTI6XFx0fVxcbiAxOTM6XFx0XFxuIDE5NDpcXHRzdGF0aWMgaW5saW5lIHZvaWRcXG4gMTk1OlxcdG5ldF9kZXZtZW1fdW5iaW5kX2RtYWJ1ZihzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZylcXG4gMTk2OlxcdHtcXG4gMTk3OlxcdH1cXG4gMTk4OlxcdFxcbiAxOTk6XFx0c3RhdGljIGlubGluZSBpbnRcXG4gMjAwOlxcdG5ldF9kZXZtZW1fYmluZF9kbWFidWZfdG9fcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHJ4cV9pZHgsXFxuIDIwMTpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyxcXG4gMjAyOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4gMjAzOlxcdFxcbiAyMDQ6XFx0e1xcbiAyMDU6XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiAyMDY6XFx0fVxcbiAyMDc6XFx0XFxuIDIwODpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfaW92ICpcXG4gMjA5OlxcdG5ldF9kZXZtZW1fYWxsb2NfZG1hYnVmKHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nKVxcbiAyMTA6XFx0e1xcbiAyMTE6XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDIxMjpcXHR9XFxuIDIxMzpcXHRcXG4gMjE0OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRfZGV2bWVtX2ZyZWVfZG1hYnVmKHN0cnVjdCBuZXRfaW92ICpwcGlvdilcXG4gMjE1OlxcdHtcXG4gMjE2OlxcdH1cXG4gMjE3OlxcdFxcbiAyMTg6XFx0c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG5ldF9pb3ZfdmlydHVhbF9hZGRyKGNvbnN0IHN0cnVjdCBuZXRfaW92ICpuaW92KVxcbiAyMTk6XFx0e1xcbiAyMjA6XFx0XFx0cmV0dXJuIDA7XFxuIDIyMTpcXHR9XFxuIDIyMjpcXHRcXG4gMjIzOlxcdHN0YXRpYyBpbmxpbmUgdTMyIG5ldF9kZXZtZW1faW92X2JpbmRpbmdfaWQoY29uc3Qgc3RydWN0IG5ldF9pb3YgKm5pb3YpXFxuIDIyNDpcXHR7XFxuIDIyNTpcXHRcXHRyZXR1cm4gMDtcXG4gMjI2OlxcdH1cXG4gMjI3OlxcdFxcbiAyMjg6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqXFxuIDIyOTpcXHRuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGRtYWJ1Zl9pZClcXG4gMjMwOlxcdHtcXG4gMjMxOlxcdFxcdHJldHVybiBFUlJfUFRSKC1FT1BOT1RTVVBQKTtcXG4gMjMyOlxcdH1cXG4gMjMzOlxcdFxcbiAyMzQ6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2lvdiAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjA4OjA2LjE3Njc3NTc3NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODk2MTM5ODU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBlbmFibGluZyBgZGV2bWVtYDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBDb25maWd1cmF0aW9uIGZvciBgZGV2bWVtYCoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0J3MgZW5hYmxpbmcgYGRldm1lbWAgaW4gdGhlIGBuZXQvY29yZS9kZXZtZW0uaGAgZmlsZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIGlmIGl0J3MgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiBhIGtlcm5lbCBjb25maWcgb3B0aW9uLiBJIGV4cGVjdCBpdCB0byBiZSBndWFyZGVkIGJ5IGEgYCNpZmRlZmAgb3Igc2ltaWxhciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLiBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHNwZWNpZmljIGNvbmZpZyBzeW1ib2wgdGhhdCBjb250cm9scyB3aGV0aGVyIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBpbmNsdWRlZCBkdXJpbmcgY29tcGlsYXRpb24uIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIG9uIGhvdyB0aGUgYGRldm1lbWAgZnVuY3Rpb25hbGl0eSBpcyBlbmFibGVkIGJhc2VkIG9uIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMTMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjA4OjA4LjA3MjkxOTE4MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZGV2bWVtLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTA6XFx0XFx0c3RydWN0IHBlcmNwdV9yZWYgcmVmO1xcbiAgNTE6XFx0XFxuICA1MjpcXHRcXHQvKiBUaGUgbGlzdCBvZiBiaW5kaW5ncyBjdXJyZW50bHkgYWN0aXZlLiBVc2VkIGZvciBuZXRsaW5rIHRvIG5vdGlmeSB1c1xcbiAgNTM6XFx0XFx0ICogb2YgdGhlIHVzZXIgZHJvcHBpbmcgdGhlIGJpbmQuXFxuICA1NDpcXHRcXHQgKi9cXG4gIDU1OlxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG4gIDU2OlxcdFxcbiAgNTc6XFx0XFx0LyogcnhxJ3MgdGhpcyBiaW5kaW5nIGlzIGFjdGl2ZSBvbi4gKi9cXG4gIDU4OlxcdFxcdHN0cnVjdCB4YXJyYXkgYm91bmRfcnhxcztcXG4gIDU5OlxcdFxcbiAgNjA6XFx0XFx0LyogSUQgb2YgdGhpcyBiaW5kaW5nLiBHbG9iYWxseSB1bmlxdWUgdG8gYWxsIGJpbmRpbmdzIGN1cnJlbnRseVxcbiAgNjE6XFx0XFx0ICogYWN0aXZlLlxcbiAgNjI6XFx0XFx0ICovXFxuICA2MzpcXHRcXHR1MzIgaWQ7XFxuICA2NDpcXHRcXG4gIDY1OlxcdFxcdC8qIERNQSBkaXJlY3Rpb24sIEZST01fREVWSUNFIGZvciBSeCBiaW5kaW5nLCBUT19ERVZJQ0UgZm9yIFR4LiAqL1xcbiAgNjY6XFx0XFx0ZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uO1xcbiAgNjc6XFx0XFxuICA2ODpcXHRcXHQvKiBBcnJheSBvZiBuZXRfaW92IHBvaW50ZXJzIGZvciB0aGlzIGJpbmRpbmcsIHNvcnRlZCBieSB2aXJ0dWFsXFxuICA2OTpcXHRcXHQgKiBhZGRyZXNzLiBUaGlzIGFycmF5IGlzIGNvbnZlbmllbnQgdG8gbWFwIHRoZSB2aXJ0dWFsIGFkZHJlc3NlcyB0b1xcbiAgNzA6XFx0XFx0ICogbmV0X2lvdnMgaW4gdGhlIFRYIHBhdGguXFxuICA3MTpcXHRcXHQgKi9cXG4gIDcyOlxcdFxcdHN0cnVjdCBuZXRfaW92ICoqdHhfdmVjO1xcbiAgNzM6XFx0XFxuICA3NDpcXHRcXHR1bnNpZ25lZCBpbnQgbmlvdl9zaGlmdDtcXG4gIDc1OlxcdFxcbiAgNzY6XFx0XFx0c3RydWN0IHdvcmtfc3RydWN0IHVuYmluZF93O1xcbiAgNzc6XFx0fTtcXG4gIDc4OlxcdFxcbiAgNzk6XFx0I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZNRU0pXFxuICA4MDpcXHQvKiBPd25lciBvZiB0aGUgZG1hLWJ1ZiBjaHVua3MgaW5zZXJ0ZWQgaW50byB0aGUgZ2VuIHBvb2wuIEVhY2ggc2NhdHRlcmxpc3RcXG4gIDgxOlxcdCAqIGVudHJ5IGZyb20gdGhlIGRtYWJ1ZiBpcyBpbnNlcnRlZCBpbnRvIHRoZSBnZW5wb29sIGFzIGEgY2h1bmssIGFuZCBuZWVkc1xcbiAgODI6XFx0ICogdGhpcyBvd25lciBzdHJ1Y3QgdG8ga2VlcCB0cmFjayBvZiBzb21lIG1ldGFkYXRhIG5lY2Vzc2FyeSB0byBjcmVhdGVcXG4gIDgzOlxcdCAqIGFsbG9jYXRpb25zIGZyb20gdGhpcyBjaHVuay5cXG4gIDg0OlxcdCAqL1xcbiAgODU6XFx0c3RydWN0IGRtYWJ1Zl9nZW5wb29sX2NodW5rX293bmVyIHtcXG4gIDg2OlxcdFxcdHN0cnVjdCBuZXRfaW92X2FyZWEgYXJlYTtcXG4gIDg3OlxcdFxcdHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpiaW5kaW5nO1xcbiAgODg6XFx0XFxuICA4OTpcXHRcXHQvKiBkbWFfYWRkciBvZiB0aGUgc3RhcnQgb2YgdGhlIGNodW5rLiAgKi9cXG4gIDkwOlxcdFxcdGRtYV9hZGRyX3QgYmFzZV9kbWFfYWRkcjtcXG4gIDkxOlxcdH07XFxuICA5MjpcXHRcXG4gIDkzOlxcdHZvaWQgX19uZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nX2ZyZWUoc3RydWN0IHdvcmtfc3RydWN0ICp3cSk7XFxuICA5NDpcXHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqXFxuICA5NTpcXHRuZXRfZGV2bWVtX2JpbmRfZG1hYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnZkZXYsXFxuICA5NjpcXHRcXHRcXHQgICAgICAgc3RydWN0IGRldmljZSAqZG1hX2RldixcXG4gIDk3OlxcdFxcdFxcdCAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sXFxuICA5ODpcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IGRtYWJ1Zl9mZCwgdW5zaWduZWQgaW50IG5pb3Zfc2hpZnQsXFxuICA5OTpcXHRcXHRcXHQgICAgICAgc3RydWN0IG5ldGRldl9ubF9zb2NrICpwcml2LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDowODowOC4wNzMwOTc0NTJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg1MzI0NDcwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKktjb25maWcgRGl2ZTogQSBRdWljayBEaWFnbm9zdGljIENoZWNrKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQncyB6ZXJvIGluIG9uIGBDT05GSUdfTkVUX0RFVk1FTWAuIEdpdmVuIG15IGV4cGVydGlzZSBpbiB0aGlzIGFyZWEsIGl0J3MgaW1tZWRpYXRlbHkganVtcGluZyBvdXQgYXMgYSBwb3RlbnRpYWwgcG9pbnQgb2YgaW50ZXJlc3QuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGl0cyBzdGF0dXMgd2l0aGluIHRoZSBLY29uZmlnIHN5c3RlbS4gVGhpcyBpc24ndCBqdXN0IGFib3V0IGZpbmRpbmcgaXRzIGN1cnJlbnQgc2V0dGluZzsgSSdtIGRpZ2dpbmcgZGVlcGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLCBpbXBsaWNhdGlvbnMsIGFuZCBwb3NzaWJsZSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBuZXR3b3JrIGNvbmZpZ3VyYXRpb25zLiBUaGlzICdjaGVjaycgaXMgbW9yZSB0aGFuIGEgc2ltcGxlIGBncmVwYCBvciBzZWFyY2g7IGl0J3MgYSBkaWFnbm9zdGljIHByb2JlIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgcmVkIGZsYWdzIG9yIGFyZWFzIGRlbWFuZGluZyBmdXJ0aGVyIGludmVzdGlnYXRpb24gd2l0aGluIHRoZSBicm9hZGVyIG5ldHdvcmsgc3RhY2suIEl0J3MgYSBmdW5kYW1lbnRhbCBzdGFydGluZyBwb2ludCBiZWZvcmUgdGFja2xpbmcgYW55dGhpbmcgbW9yZSBjb21wbGV4LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTI3LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDowODowOS45MjYzNDY1M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwMTU1MzAxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0RFVk1FTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz02Nj1jb25maWcgU0tCX0VYVEVOU0lPTlNcXG4tLVxcbm5ldC9LY29uZmlnLTY4LVxcbm5ldC9LY29uZmlnOjY5OmNvbmZpZyBORVRfREVWTUVNXFxubmV0L0tjb25maWctNzAtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDowODoxMS43Mjc5MDkwMDNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMxNTUyOTA1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgY29uZmlndXJhdGlvbiBpdGVtLCBhbmQgSSB3YW50IHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLiBUaGUgZG9jdW1lbnRhdGlvbiBpcyBwcm9iYWJseSBkZWNlbnQsIGJ1dCBsZXQncyBiZSBob25lc3QsIHRoZSB0cnVlIHNvdXJjZSBvZiB0cnV0aCBpcyBhbHdheXMgdGhlIEtjb25maWcgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBpdGVtIGluIGl0cyBuYXRpdmUgaGFiaXRhdC4gVGhhdCBtZWFucyBjcmFja2luZyBvcGVuIHRoZSBgbmV0L0tjb25maWdgIGZpbGUuIEknbSBob3BpbmcgaXQncyB3ZWxsLW9yZ2FuaXplZCwgd2l0aCBjbGVhciBkZXBlbmRlbmNpZXMsIGRlc2NyaXB0aW9ucywgYW5kIG1heWJlIGV2ZW4gc29tZSB1c2VmdWwgZGVmYXVsdHMgb3IgaGVscCB0ZXh0LiBJdCdzIHRoZSBvbmx5IHJlYWwgd2F5IHRvIGdldCBhIGNvbXBsZXRlbHkgcHJlY2lzZSB1bmRlcnN0YW5kaW5nLCByaWdodD8gVGhlIGRlZmFjdG8gZG9jdW1lbnRhdGlvbiBtaWdodCBiZSByaWdodCwgYnV0IHRoZSBLY29uZmlnIGZpbGUgd2lsbCByZXZlYWwgdGhlIHRydWUgaW50ZXJhY3Rpb25zIGFuZCBpbXBhY3RzLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QgaW4gdGhhdCBmaWxlLiBJIGV4cGVjdCB0byBwYXJzZSB0aGUgc3ltYm9sIGRlZmluaXRpb24sIGFueSBhc3NvY2lhdGVkIGRlcGVuZGVuY2llcyAobGlrZSBgZGVwZW5kcyBvbmAgb3IgYHNlbGVjdGApLCBhbmQgYW55IGhlbHAgdGV4dCBhc3NvY2lhdGVkIHdpdGggaXQuIEZyb20gdGhlcmUgSSBjYW4gaW5mZXIgYW55dGhpbmcgSSBuZWVkIHRvIGtub3cgYWJvdXQgdGhlIHN5bWJvbC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTIwMCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjA4OjE0LjA0MzQ0MTQzNloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2NTpcXHRcXG4gIDY2OlxcdGNvbmZpZyBTS0JfRVhURU5TSU9OU1xcbiAgNjc6XFx0XFx0Ym9vbFxcbiAgNjg6XFx0XFxuICA2OTpcXHRjb25maWcgTkVUX0RFVk1FTVxcbiAgNzA6XFx0XFx0ZGVmX2Jvb2wgeVxcbiAgNzE6XFx0XFx0c2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SXFxuICA3MjpcXHRcXHRkZXBlbmRzIG9uIERNQV9TSEFSRURfQlVGRkVSXFxuICA3MzpcXHRcXHRkZXBlbmRzIG9uIFBBR0VfUE9PTFxcbiAgNzQ6XFx0XFxuICA3NTpcXHRjb25maWcgTkVUX1NIQVBFUlxcbiAgNzY6XFx0XFx0Ym9vbFxcbiAgNzc6XFx0XFxuICA3ODpcXHRjb25maWcgTkVUX0NSQzMyQ1xcbiAgNzk6XFx0XFx0Ym9vbFxcbiAgODA6XFx0XFx0c2VsZWN0IENSQzMyXFxuICA4MTpcXHRcXG4gIDgyOlxcdG1lbnUgXFxcIk5ldHdvcmtpbmcgb3B0aW9uc1xcXCJcXG4gIDgzOlxcdFxcbiAgODQ6XFx0c291cmNlIFxcXCJuZXQvcGFja2V0L0tjb25maWdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjA4OjE0LjA0MzUxNTg2NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDg2NDY4OTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVENQIFplcm8tQ29weSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gSSBzZWUgdGhleSd2ZSBtb2RpZmllZCBgbmV0L2lwdjQvdGNwLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGZ1bmN0aW9uLiBUaGUgb3JpZ2luYWwgY29kZSBoYWQgYSBjb25kaXRpb25hbCBjaGVjayBpbnZvbHZpbmcgYHNvY2tjX2VycmAsIGBzb2NrYy5kbWFidWZfaWRgLCBgZmxhZ3MgXHUwMDI2IE1TR19aRVJPQ09QWWAsIGFuZCBgc29ja19mbGFnKHNrLCBTT0NLX1pFUk9DT1BZKWAuIFRoZSBuZXcgY29kZSByZXBsYWNlcyB0aGF0IHdpdGggYCh6YyAhPSBNU0dfWkVST0NPUFkgfHwgIWJpbmRpbmcpYC4gSG1tLCBzb3VuZHMgbGlrZSB0aGV5J3JlIHRpZ2h0ZW5pbmcgdXAgdGhlIHplcm8tY29weSBsb2dpYyB3aGVuIGBkZXZtZW1gIGNtc2cgKGRtYWJ1Zl9pZCkgaXMgdXNlZC5cblxuVGhpbmtpbmcgYWJvdXQgdGhlIGNvbnRleHQsIHRoaXMgaGFwcGVucyB3aGVuIHdlJ3JlIHNlbmRpbmcgZGF0YSBvdmVyIGEgVENQIHNvY2tldCB1c2luZyBgTVNHX1pFUk9DT1BZYCBhbmQgdGhpcyBgZGV2bWVtYCBmZWF0dXJlLiBJIHJlY2FsbCBgemNgIGlzIHNldCBpZiB0aGUgdW5kZXJseWluZyBuZXR3b3JrIGludGVyZmFjZSBzdXBwb3J0cyBzY2F0dGVyLWdhdGhlciwgdXNpbmcgYE5FVElGX0ZfU0dgLiBUaGUgb3JpZ2luYWwgY29kZSBzZWVtcyB0byBoYXZlIGhhZCBhIHBvdGVudGlhbCB3ZWFrbmVzcyDigJMgaXQgbWlnaHQgaGF2ZSBwcm9jZWVkZWQgaW4gc2l0dWF0aW9ucyB3aGVyZSBgemNgIHdhcyB6ZXJvIChtZWFuaW5nIG5vIHNjYXR0ZXItZ2F0aGVyIHN1cHBvcnQsIG9yIG90aGVyIGlzc3VlcyksICpvciogd2hlcmUgdGhlIGBiaW5kaW5nYCBwcm9jZXNzIGZhaWxlZCwgZXZlbiBpZiBgTVNHX1pFUk9DT1BZYCB3YXMgc2V0LiBOb3csIHRoZSBjaGVjayBpcyBtb3JlIHN0cmljdDsgZWl0aGVyIGB6Y2AgKm11c3QqIGJlIHNldCAqb3IqIGBiaW5kaW5nYCBtdXN0IHN1Y2NlZWQuIFRoYXQgbWFrZXMgc2Vuc2UsIGtlZXBzIHRoaW5ncyBjbGVhbmVyIGFuZCBzYWZlci5cblxuSXMgdGhpcyBzb21ldGhpbmcgdG8gc3BlbmQgbXkgdGltZSBvbiwgdG8gc2VlIGlmIGl0IGNhdXNlcyBpc3N1ZXM/IEFic29sdXRlbHkuIFRoaXMgaXMgaW4gdGhlIGNvcmUgVENQIHN0YWNrLCBpdCdzIHVzZXItY29udHJvbGxlZCB0aHJvdWdoIHNvY2tldCBjYWxscyB3aXRoIGNvbW1vbiBvcHRpb25zIHN1Y2ggYXMgYE1TR19aRVJPQ09QWWAgYW5kIGBkbWFidWZgLCBhbmQgaXQncyBkZWFsaW5nIHdpdGggZXJyb3IgaGFuZGxpbmcuIFRoaXMgaXMgY2xhc3NpYyBmdXp6aW5nIHRlcnJpdG9yeTogcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBzb2NrZXRzIGluIHRoZSB1c3VhbCBRRU1VIGVudmlyb25tZW50LlxuXG5Ob3csIGxldCdzIHRoaW5rIGFib3V0IGZvY3VzIHN5bWJvbHM6IGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGlzIHRoZSBtb2RpZmllZCBmdW5jdGlvbiwgZGVmaW5pdGVseSBuZWVkcyBhdHRlbnRpb24uIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbGVycyBvZiBgdGNwX3NlbmRtc2dfbG9ja2VkYCBhbmQgYW55IHJlbGF0ZWQgZGV2bWVtIHRyYW5zbWl0IGZ1bmN0aW9ucyB0byBlbnN1cmUgSSd2ZSBjb3ZlcmVkIGV2ZXJ5dGhpbmcuIFRpbWUgdG8gZ2V0IG15IGZ1enppbmcgdG9vbHMgcmVhZHkhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2NjQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDowODoxOC41Mjk5ODc2MzRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjgxMDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9zZW5kbXNnX2xvY2tlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvYWZfaW5ldC5jPTEwNjA9Y29uc3Qgc3RydWN0IHByb3RvX29wcyBpbmV0X3N0cmVhbV9vcHMgPSB7XFxuLS1cXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTA4NS1cXHQucmVhZF9za2JcXHQgICA9IHRjcF9yZWFkX3NrYixcXG5uZXQvaXB2NC9hZl9pbmV0LmM6MTA4NjpcXHQuc2VuZG1zZ19sb2NrZWQgICAgPSB0Y3Bfc2VuZG1zZ19sb2NrZWQsXFxubmV0L2lwdjQvYWZfaW5ldC5jLTEwODctXFx0LnBlZWtfbGVuXFx0ICAgPSB0Y3BfcGVla19sZW4sXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0xMTE0PUVYUE9SVF9TWU1CT0xfR1BMKHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKTtcXG5uZXQvaXB2NC90Y3AuYy0xMTE1LVxcbm5ldC9pcHY0L3RjcC5jOjExMTY6aW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxubmV0L2lwdjQvdGNwLmMtMTExNy17XFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0xMjM5LVxcbm5ldC9pcHY0L3RjcC5jOjEyNDA6XFx0XFx0dHJhY2VfdGNwX3NlbmRtc2dfbG9ja2VkKHNrLCBtc2csIHNrYiwgc2l6ZV9nb2FsKTtcXG5uZXQvaXB2NC90Y3AuYy0xMjQxLVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTQ0My19XFxubmV0L2lwdjQvdGNwLmM6MTQ0NDpFWFBPUlRfU1lNQk9MX0dQTCh0Y3Bfc2VuZG1zZ19sb2NrZWQpO1xcbm5ldC9pcHY0L3RjcC5jLTE0NDUtXFxubmV0L2lwdjQvdGNwLmM9MTQ0Nj1pbnQgdGNwX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTQ1MC1cXHRsb2NrX3NvY2soc2spO1xcbm5ldC9pcHY0L3RjcC5jOjE0NTE6XFx0cmV0ID0gdGNwX3NlbmRtc2dfbG9ja2VkKHNrLCBtc2csIHNpemUpO1xcbm5ldC9pcHY0L3RjcC5jLTE0NTItXFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYz05MT1zdGF0aWMgaW50IHRjcF9icGZfcHVzaChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGFwcGx5X2J5dGVzLFxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTEyMi1cXHRcXHRpb3ZfaXRlcl9idmVjKFxcdTAwMjZtc2doZHIubXNnX2l0ZXIsIElURVJfU09VUkNFLCBcXHUwMDI2YnZlYywgMSwgc2l6ZSk7XFxubmV0L2lwdjQvdGNwX2JwZi5jOjEyMzpcXHRcXHRyZXQgPSB0Y3Bfc2VuZG1zZ19sb2NrZWQoc2ssIFxcdTAwMjZtc2doZHIsIHNpemUpO1xcbm5ldC9pcHY0L3RjcF9icGYuYy0xMjQtXFx0XFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDowODoxOC41NzkyNzU2MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTI5NTg0NjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIFNjb3BlIG9mIHRoZSBUQ1AgU2VuZG1zZyBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIHRvIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLiBGaXJzdCwgSSBhbHdheXMgc3RhcnQgYnkgY2FzdGluZyBhIHdpZGVyIG5ldCwgbWFraW5nIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJIG5lZWQgdG8gc2VlIGlmIGFueSBvdGhlciBzeW1ib2xzIG9yIGZpbGVzIGFyZSBpbXBsaWNhdGVkIGJleW9uZCB0aGUgZGlyZWN0IG1vZGlmaWNhdGlvbiBpdHNlbGYuIEJ1dCBiYXNlZCBvbiB0aGUgZGlmZiwgaXQgbG9va3MgbGlrZSBpdCBpcyBqdXN0IHRoZSBvbmUgZnVuY3Rpb24gaW4gYG5ldC9pcHY0L3RjcC5jYCwgd2hpY2ggaXMgYSBnb29kIHNpZ24uXG5cbkFscmlnaHQsIG5vdyBsZXQncyB0aGluayBhYm91dCByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGZvciB0aGUgcHJlc2VuY2Ugb2YgYElORVRgLCBgTkVUX0RFVk1FTWAsIGBETUFfU0hBUkVEX0JVRkZFUmAsIGFuZCBgUEFHRV9QT09MYC4gVGhhdCBzZXQgdXN1YWxseSBoZWxwcyBuYXJyb3cgaXQgZG93bi4gSSdtIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRob3NlIGJlY2F1c2Ugb2YgdGhlIG5hdHVyZSBvZiB0aGUgZnVuY3Rpb24gSSdtIGxvb2tpbmcgYXQuXG5cbkZyb20gdGhlcmUsIEknbGwgYXNzZXNzIHdoZXRoZXIgYElORVRgIG9yIGBORVRfREVWTUVNYCBpcyB0aGUgcmVsZXZhbnQgc2V0dGluZyBoZXJlLiBgSU5FVGAgaXMgdGhlIGRlZmF1bHQgYW5kIHNob3VsZCBiZSBzdGFuZGFyZCwgYnV0IGBORVRfREVWTUVNYCBpcyBnb2luZyB0byBiZSByZWxldmFudCBpZiBpdCBoYXMgYmVlbiBzZXQgdXAgd2l0aCBgRE1BX1NIQVJFRF9CVUZGRVJgIGFuZCBgUEFHRV9QT09MYC4gU28gbGV0J3Mgc2VlIHdoaWNoIG9wdGlvbiB3ZSBhcmUgbG9va2luZyBhdC5cblxuTm93LCBJJ2xsIG5lZWQgdG8gZ28gZnVydGhlciBpbnRvIHRoZSBjb2RlLCBhbmQgZXhhbWluZSB0aGUgYHNvY2tjYCBzdHJ1Y3R1cmUgYW5kIGhvdyBpdCBlbmFibGVzIGBkZXZtZW1gIGFuZCBgZG1hYnVmX2lkYCwgaW4gY2FzZSBgTkVUX0RFVk1FTWAgaXMgaW4gcGxheS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyMTQsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MDg6MjEuNTA4ODYyMzg1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTY0OTI0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkbWFidWZfaWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9kZXZtZW0uYz0zODQ9c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKm5ldF9kZXZtZW1fZ2V0X2JpbmRpbmcoc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9jb3JlL2Rldm1lbS5jOjM4NTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IGRtYWJ1Zl9pZClcXG5uZXQvY29yZS9kZXZtZW0uYy0zODYte1xcbi0tXFxubmV0L2NvcmUvZGV2bWVtLmMtMzkxLVxcbm5ldC9jb3JlL2Rldm1lbS5jOjM5MjpcXHRiaW5kaW5nID0gbmV0X2Rldm1lbV9sb29rdXBfZG1hYnVmKGRtYWJ1Zl9pZCk7XFxubmV0L2NvcmUvZGV2bWVtLmMtMzkzLVxcdGlmICghYmluZGluZyB8fCAhYmluZGluZy1cXHUwMDNldHhfdmVjKSB7XFxuLS1cXG5uZXQvY29yZS9kZXZtZW0uaD0xNTU9c3RydWN0IG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmcgKlxcbm5ldC9jb3JlL2Rldm1lbS5oOjE1NjpuZXRfZGV2bWVtX2dldF9iaW5kaW5nKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGRtYWJ1Zl9pZCk7XFxubmV0L2NvcmUvZGV2bWVtLmgtMTU3LXN0cnVjdCBuZXRfaW92ICpcXG4tLVxcbm5ldC9jb3JlL2Rldm1lbS5oPTIyOD1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2bWVtX2RtYWJ1Zl9iaW5kaW5nICpcXG5uZXQvY29yZS9kZXZtZW0uaDoyMjk6bmV0X2Rldm1lbV9nZXRfYmluZGluZyhzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBkbWFidWZfaWQpXFxubmV0L2NvcmUvZGV2bWVtLmgtMjMwLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2suYz0zMDI2PWludCBfX3NvY2tfY21zZ19zZW5kKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGNtc2doZHIgKmNtc2csXFxuLS1cXG5uZXQvY29yZS9zb2NrLmMtMzExNS1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5uZXQvY29yZS9zb2NrLmM6MzExNjpcXHRcXHRzb2NrYy1cXHUwMDNlZG1hYnVmX2lkID0gKih1MzIgKilDTVNHX0RBVEEoY21zZyk7XFxubmV0L2NvcmUvc29jay5jLTMxMTctXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0xMTE2PWludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTE0Ny1cXHRcXHRcXHR1YXJnID0gbXNnX3plcm9jb3B5X3JlYWxsb2Moc2ssIHNpemUsIHNrYl96Y29weShza2IpLFxcbm5ldC9pcHY0L3RjcC5jOjExNDg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICFzb2NrY19lcnIgXFx1MDAyNlxcdTAwMjYgc29ja2MuZG1hYnVmX2lkKTtcXG5uZXQvaXB2NC90Y3AuYy0xMTQ5LVxcdFxcdFxcdGlmICghdWFyZykge1xcbi0tXFxubmV0L2lwdjQvdGNwLmMtMTE1Ny1cXG5uZXQvaXB2NC90Y3AuYzoxMTU4OlxcdFxcdFxcdGlmICghc29ja2NfZXJyIFxcdTAwMjZcXHUwMDI2IHNvY2tjLmRtYWJ1Zl9pZCkge1xcbm5ldC9pcHY0L3RjcC5jOjExNTk6XFx0XFx0XFx0XFx0YmluZGluZyA9IG5ldF9kZXZtZW1fZ2V0X2JpbmRpbmcoc2ssIHNvY2tjLmRtYWJ1Zl9pZCk7XFxubmV0L2lwdjQvdGNwLmMtMTE2MC1cXHRcXHRcXHRcXHRpZiAoSVNfRVJSKGJpbmRpbmcpKSB7XFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0xMTcxLVxcbm5ldC9pcHY0L3RjcC5jOjExNzI6XFx0aWYgKCFzb2NrY19lcnIgXFx1MDAyNlxcdTAwMjYgc29ja2MuZG1hYnVmX2lkIFxcdTAwMjZcXHUwMDI2ICh6YyAhPSBNU0dfWkVST0NPUFkgfHwgIWJpbmRpbmcpKSB7XFxubmV0L2lwdjQvdGNwLmMtMTE3My1cXHRcXHRlcnIgPSAtRUlOVkFMO1xcbi0tXFxubmV0L2lwdjQvdGNwLmM9MjQ5OT1zdGF0aWMgaW50IHRjcF9yZWN2bXNnX2RtYWJ1ZihzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yNTk4LVxcdFxcdFxcdFxcdGRtYWJ1Zl9jbXNnLmZyYWdfdG9rZW4gPSB0Y3BfeGFfcG9vbC50b2tlbnNbdGNwX3hhX3Bvb2wuaWR4XTtcXG5uZXQvaXB2NC90Y3AuYzoyNTk5OlxcdFxcdFxcdFxcdGRtYWJ1Zl9jbXNnLmRtYWJ1Zl9pZCA9IG5ldF9kZXZtZW1faW92X2JpbmRpbmdfaWQobmlvdik7XFxubmV0L2lwdjQvdGNwLmMtMjYwMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MDg6MjEuNTg0NTE4MTk5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0OTA3MDQ0MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIGBuZXQvY29yZS9zb2NrLmNgKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCB0aGUgcGFyc2luZyBvZiBgc29ja2MtXHUwMDNlZG1hYnVmX2lkYC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBgbmV0L2NvcmUvc29jay5jYCBmZWVscyBsaWtlIHRoZSBsaWtlbHkgcGxhY2Ugd2hlcmUgdGhpcyBpbnRlcmFjdGlvbiBpcyBoYW5kbGVkLiBMZXQncyBzZWUgaG93IHRoZXkncmUgcHVsbGluZyB0aGF0IHZhbHVlIGFwYXJ0IGFuZCB3aGF0IGl0cyBpbXBsaWNhdGlvbnMgYXJlLiBXZSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBoZXJlLCBzZWUgaWYgaXQncyBnb3QgYW55IHVuZXhwZWN0ZWQgYmVoYXZpb3JzLiBMZXQncyBzdGFydCBkaWdnaW5nIGluIHRoZXJlIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZC4gSSBleHBlY3QgdGhhdCB3aWxsIGJlIHdoZXJlIHRoZSBwYXJzaW5nLCBhbmQgcG90ZW50aWFsbHkgdmFsaWRhdGlvbiwgYXJlIGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2MTIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDowODoyNC4wNzUyMjQ5MTRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0ODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NvY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTA1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMTA1OlxcdFxcdFxcdGJyZWFrO1xcbjMxMDY6XFx0XFx0Y2FzZSBTT19QUklPUklUWTpcXG4zMTA3OlxcdFxcdFxcdGlmIChjbXNnLVxcdTAwM2VjbXNnX2xlbiAhPSBDTVNHX0xFTihzaXplb2YodTMyKSkpXFxuMzEwODpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zMTA5OlxcdFxcdFxcdGlmICghc2tfc2V0X3ByaW9fYWxsb3dlZChzaywgKih1MzIgKilDTVNHX0RBVEEoY21zZykpKVxcbjMxMTA6XFx0XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4zMTExOlxcdFxcdFxcdHNvY2tjLVxcdTAwM2Vwcmlvcml0eSA9ICoodTMyICopQ01TR19EQVRBKGNtc2cpO1xcbjMxMTI6XFx0XFx0XFx0YnJlYWs7XFxuMzExMzpcXHRcXHRjYXNlIFNDTV9ERVZNRU1fRE1BQlVGOlxcbjMxMTQ6XFx0XFx0XFx0aWYgKGNtc2ctXFx1MDAzZWNtc2dfbGVuICE9IENNU0dfTEVOKHNpemVvZih1MzIpKSlcXG4zMTE1OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjMxMTY6XFx0XFx0XFx0c29ja2MtXFx1MDAzZWRtYWJ1Zl9pZCA9ICoodTMyICopQ01TR19EQVRBKGNtc2cpO1xcbjMxMTc6XFx0XFx0XFx0YnJlYWs7XFxuMzExODpcXHRcXHRkZWZhdWx0OlxcbjMxMTk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMzEyMDpcXHRcXHR9XFxuMzEyMTpcXHRcXHRyZXR1cm4gMDtcXG4zMTIyOlxcdH1cXG4zMTIzOlxcdEVYUE9SVF9TWU1CT0woX19zb2NrX2Ntc2dfc2VuZCk7XFxuMzEyNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MDg6MjQuMDc1MzgxNTA0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0NzAwMzEzODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBETUEtQlVGIFVzYWdlIGluIFNvY2tldCBDb250cm9sIE1lc3NhZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgU0NNX0RFVk1FTV9ETUFCVUZgIHRoaW5nLCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIGJlaW5nIGhhbmRsZWQgdW5jb25kaXRpb25hbGx5IGluIGBfX3NvY2tfY21zZ19zZW5kYC4gVGhhdCdzIGEgYml0IG9mIGEgcmVkIGZsYWcgLSBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgZGlyZWN0IHBhcnNpbmcuICBUaGVuIEkgc2VlIHRoYXQgYENPTkZJR19ORVRfREVWTUVNYCBpcyBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgaWYgd2UgaGF2ZSBib3RoIGBETUFfU0hBUkVEX0JVRkZFUmAgYW5kIGBQQUdFX1BPT0xgIGRlZmluZWQuIEludGVyZXN0aW5nLlxuXG5NeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGRvZXMgYENPTkZJR19ORVRfREVWTUVNYCAqcmVseSogb24gdGhvc2UgdHdvLCBvciBpcyBpdCBqdXN0IGEgY29udmVuaWVudCBkZWZhdWx0PyAgSSBuZWVkIHRvIGNsYXJpZnkgdGhhdCBkZXBlbmRlbmN5LiAgVG8gbmFpbCB0aGlzIGRvd24sIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBkcml2ZXJzL2RtYS1idWYvS2NvbmZpZ2AgZmlsZSBhbmQgY29uZmlybSB0aGUgcmVsYXRpb25zaGlwIHdpdGggYERNQV9TSEFSRURfQlVGRkVSYC4gSSBiZXQgdGhlcmUncyBzb21lIHVzZWZ1bCBjb250ZXh0IGFib3V0IGBQQUdFX1BPT0xgIGluIHRoZXJlIGFzIHdlbGwuIFRpbWUgdG8gZGlnIGluIGFuZCBjbGFyaWZ5IHRoaXMgc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTUzLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MDg6MjYuNTQ1NDE1MDk1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjcxOTI2MjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBETUFfU0hBUkVEX0JVRkZFUlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jhc2UvS2NvbmZpZz0yMTM9c291cmNlIFxcXCJkcml2ZXJzL2Jhc2UvcmVnbWFwL0tjb25maWdcXFwiXFxuZHJpdmVycy9iYXNlL0tjb25maWctMjE0LVxcbmRyaXZlcnMvYmFzZS9LY29uZmlnOjIxNTpjb25maWcgRE1BX1NIQVJFRF9CVUZGRVJcXG5kcml2ZXJzL2Jhc2UvS2NvbmZpZy0yMTYtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDowODoyOC4yMTczNDU2MzhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMzOTc2NDA5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyB0aGUgRE1BX1NIQVJFRF9CVUZGRVIgRGVmaW5pdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiB3aXRoIHRoaXMgYERNQV9TSEFSRURfQlVGRkVSYCB0aGluZy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgc291cmNlIGNvZGUsIHNvIEknbGwgaGVhZCBvdmVyIHRvIHRoZSBgZHJpdmVycy9iYXNlL0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCDigJMgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgb2Z0ZW4gZGVmaW5lIGFuZCBleHBsYWluIHRoZXNlIGtpbmRzIG9mIHN5bWJvbHMsIGVzcGVjaWFsbHkgaWYgdGhleSdyZSBmdW5kYW1lbnRhbCB0byB0aGUgZHJpdmVyIG1vZGVsLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgYSBjb25kaXRpb25hbCBkZWZpbml0aW9uLCBwb3NzaWJseSB0aWVkIHRvIG90aGVyIGhhcmR3YXJlIGZlYXR1cmVzIG9yIHN5c3RlbSBjb25maWd1cmF0aW9ucy4gSSdtIGxvb2tpbmcgZm9yIHRoZSBkZXBlbmRlbmNpZXMsIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGl0LCBhbmQgYW55IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBvciBjb21tZW50cyB0aGF0IG1pZ2h0IHByb3ZpZGUgY29udGV4dC4gTGV0J3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZSByZXZlYWxzLi4uIGtub3dpbmcgdGhlIGtlcm5lbCwgSSB3b3VsZG4ndCBiZSBzdXJwcmlzZWQgdG8gZmluZCBzb21lIGhpZGRlbiBjb21wbGV4aXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTg3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MDg6MzAuNTU3MTExOTc5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jhc2UvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTMsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMTM6XFx0c291cmNlIFxcXCJkcml2ZXJzL2Jhc2UvcmVnbWFwL0tjb25maWdcXFwiXFxuIDIxNDpcXHRcXG4gMjE1OlxcdGNvbmZpZyBETUFfU0hBUkVEX0JVRkZFUlxcbiAyMTY6XFx0XFx0Ym9vbFxcbiAyMTc6XFx0XFx0ZGVmYXVsdCBuXFxuIDIxODpcXHRcXHRzZWxlY3QgSVJRX1dPUktcXG4gMjE5OlxcdFxcdGhlbHBcXG4gMjIwOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgZnJhbWV3b3JrIGZvciBidWZmZXItc2hhcmluZyBiZXR3ZWVuXFxuIDIyMTpcXHRcXHQgIG11bHRpcGxlIGRyaXZlcnMuIEEgYnVmZmVyIGlzIGFzc29jaWF0ZWQgd2l0aCBhIGZpbGUgdXNpbmcgZHJpdmVyXFxuIDIyMjpcXHRcXHQgIEFQSXMgZXh0ZW5zaW9uOyB0aGUgZmlsZSdzIGRlc2NyaXB0b3IgY2FuIHRoZW4gYmUgcGFzc2VkIG9uIHRvIG90aGVyXFxuIDIyMzpcXHRcXHQgIGRyaXZlci5cXG4gMjI0OlxcdFxcbiAyMjU6XFx0Y29uZmlnIEdFTkVSSUNfQVJDSF9UT1BPTE9HWVxcbiAyMjY6XFx0XFx0Ym9vbFxcbiAyMjc6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDowODozMC41NTcyMjI5NjlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEyMjQ5NzQ2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIE5ldHdvcmsgQnVmZmVyIE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIHdoZXJlIGV4YWN0bHkgaXMgYFBBR0VfUE9PTGAgZGVmaW5lZD8gVGhhdCdzIHRoZSBrZXkgdmFyaWFibGUgaGVyZSwgYW5kIEkgbmVlZCB0byB0cmFjayBkb3duIGl0cyBvcmlnaW4uIExldCBtZSBxdWlja2x5IGp1bXAgaW50byB0aGUga2VybmVsIHNvdXJjZSB0cmVlLi4uIEknbSBwcmV0dHkgc3VyZSBpdCdzIGhhbmdpbmcgb3V0IHNvbWV3aGVyZSBpbiB0aGUgYG5ldC9jb3JlL2AgZGlyZWN0b3J5LCBzcGVjaWZpY2FsbHkgd2l0aGluIGEgS2NvbmZpZyBmaWxlLiBPciBzb21ldGhpbmcgc2ltaWxhciwgb2J2aW91c2x5LiBJdCAqaGFzKiB0byBiZSBhIGNvbmZpZyBvcHRpb24uIEdvdHRhIGZpbmQgdGhhdCBkZWZpbml0aW9uISBNYXliZSBgbmV0L2NvcmUvS2NvbmZpZ2AgaXMgdGhlIGJlc3QgYmV0IHRvIHN0YXJ0IHdpdGg7IHRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBmb3VuZGF0aW9uYWwgc3R1ZmYgcmVzaWRlcy4gTGV0J3Mgc2VlIGlmIHRoYXQgZmlsZSBjb250YWlucyB0aGUgcHJlY2lzZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDAxMywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MDg6MzIuNjc5NzIzNzc3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjMzODgzMzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQQUdFX1BPT0xcXFxcYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz00ODc9Y29uZmlnIE5FVF9ERVZMSU5LXFxuLS1cXG5uZXQvS2NvbmZpZy00OTAtXFxubmV0L0tjb25maWc6NDkxOmNvbmZpZyBQQUdFX1BPT0xcXG5uZXQvS2NvbmZpZy00OTItXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDowODozNC45MTM2MTc2NDdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDg5MTUxMTk4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIENhbmRpZGF0ZSBBc3Nlc3NtZW50OiBUQ1AgWmVyby1Db3B5IGFuZCBEZXZtZW0gSW50ZWdyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIGZvciBmdXp6aW5nLiBGaXJzdCwgbGV0J3MgbmFpbCBkb3duIHRoZSBkZXBlbmRlbmNpZXMuICBgTkVUX0RFVk1FTWAgaXMgY29udGluZ2VudCBvbiBlaXRoZXIgYERNQV9TSEFSRURfQlVGRkVSYCBhbmQgYFBBR0VfUE9PTGAgYmVpbmcgZW5hYmxlZCwgb3IganVzdCBgTkVUX0RFVk1FTWAgZGlyZWN0bHksIGFuZCB3ZSAqZGVmaW5pdGVseSogbmVlZCBgSU5FVGAgZm9yIGB0Y3AuY2AuICBTbywgbXkgY29uZmlnIGxpc3QgaXM6IGBJTkVUYCwgYE5FVF9ERVZNRU1gLCBgRE1BX1NIQVJFRF9CVUZGRVJgLCBhbmQgYFBBR0VfUE9PTGAuIFRoYXQncyB0aGUgYmFzZWxpbmUuXG5cbk5vdywgdGhlIGltcG9ydGFudCBzeW1ib2xzIGhlcmUsIHRoZSBvbmVzIEkgbmVlZCB0byByZWFsbHkgdW5kZXJzdGFuZCwgYXJlIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLCBgdGNwX3NlbmRtc2dgLCBhbmQgYG5ldF9kZXZtZW1fZ2V0X2JpbmRpbmdgLlxuXG5JcyB0aGlzIGFjdHVhbGx5IHdvcnRoIHRoZSBlZmZvcnQ/ICBBYnNvbHV0ZWx5LiBUaGlzIHBhdGNoIGZ1bmRhbWVudGFsbHkgYWx0ZXJzIGV4ZWN1dGFibGUgbG9naWMgd2l0aGluIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLCByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhlIFRDUCBuZXR3b3JraW5nIHN1YnN5c3RlbS4gSXQncyBtb2RpZnlpbmcgdGhlIHZhbGlkYXRpb24gY3JpdGVyaWEgZm9yIHplcm8tY29weSBhbmQgZGV2bWVtIGRtYWJ1ZiB0cmFuc21pc3Npb25zIHZpYSBUQ1AncyBgc2VuZG1zZ2AgZnVuY3Rpb24uIEl0J3MgYWRkaW5nIHRpZ2h0ZXIsIG1vcmUgY29ycmVjdCBjaGVja3Mgb24gdGhlIHplcm9jb3B5IGFuZCBkZXZtZW0gYmluZGluZy4gVGhlIGNydWNpYWwgcGFydD8gIFRoaXMgaXMgcmVhY2hhYmxlIGRpcmVjdGx5IGZyb20gdXNlci1zcGFjZSBUQ1Agc29ja2V0cyB1c2luZyBib3RoIGBNU0dfWkVST0NPUFlgICphbmQqIGBTQ01fREVWTUVNX0RNQUJVRmAgY21zZ3MuIFRoYXQgbWFrZXMgaXQgYSBwcmltZSB0YXJnZXQuXG5cbkxldCdzIGRvIGEgcXVpY2sgZG91YmxlLWNoZWNrIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmc6XG4xLiAgYFdvcnRoRnV6emluZ2A6IFRydWUuXG4yLiAgYEZvY3VzU3ltYm9sc2A6IGBbXCJ0Y3Bfc2VuZG1zZ19sb2NrZWRcIiwgXCJ0Y3Bfc2VuZG1zZ1wiLCBcIm5ldF9kZXZtZW1fZ2V0X2JpbmRpbmdcIl1gXG4zLiAgYEVuYWJsZUNvbmZpZ3NgOiBgW1wiSU5FVFwiLCBcIk5FVF9ERVZNRU1cIiwgXCJETUFfU0hBUkVEX0JVRkZFUlwiLCBcIlBBR0VfUE9PTFwiXWBcbjQuICBgUmVhc29uaW5nYDogVGhpcyBjaGFuZ2VzIGNyaXRpY2FsIFRDUCBsb2dpYyBmb3IgemVyby1jb3B5IGFuZCBkZXZtZW0gaW50ZXJhY3Rpb25zLiBJdCdzIHJlYWNoYWJsZSB2aWEgY29tbW9uIHVzZXItc3BhY2Ugc29ja2V0IGNhbGxzLiBJdCBtYWtlcyBhIHBlcmZlY3QgZnV6emluZyBjYW5kaWRhdGUuXG5cbk9rYXksIEknbSByZWFkeSB0byBwcm9jZWVkLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyNzgsIk91dHB1dFRva2VucyI6MTc3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjA4OjM5LjgwNTEzMTQ0NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MzE2NDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJORVRfREVWTUVNXCIsXG4gICAgXCJETUFfU0hBUkVEX0JVRkZFUlwiLFxuICAgIFwiUEFHRV9QT09MXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX3NlbmRtc2dfbG9ja2VkXCIsXG4gICAgXCJ0Y3Bfc2VuZG1zZ1wiLFxuICAgIFwibmV0X2Rldm1lbV9nZXRfYmluZGluZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHZhbGlkYXRpb24gbG9naWMgaW4gdGNwX3NlbmRtc2dfbG9ja2VkKCkgd2hlbiBwcm9jZXNzaW5nIFRDUCB6ZXJvLWNvcHkgbWVzc2FnZXMgd2l0aCBkZXZpY2UgbWVtb3J5IGRtYWJ1ZiBJRHMgKFNDTV9ERVZNRU1fRE1BQlVGKS4gSXQgZW5zdXJlcyB0aGF0IHRyYW5zbWlzc2lvbnMgd2l0aCBkbWFidWZfaWQgZmFpbCB3aXRoIC1FSU5WQUwgdW5sZXNzIHplcm9jb3B5IGlzIGFjdHVhbGx5IGVuYWJsZWQgKHpjID09IE1TR19aRVJPQ09QWSkgYW5kIGEgdmFsaWQgZGV2bWVtIGJpbmRpbmcgZXhpc3RzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIFRDUCBzb2NrZXQgdHJhbnNtaXQgcGF0aHMgdGhhdCBjYW4gYmUgdGVzdGVkIHVzaW5nIHN0YW5kYXJkIHNvY2tldCBzeXNjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJORVRfREVWTUVNXCIsXG4gICAgXCJETUFfU0hBUkVEX0JVRkZFUlwiLFxuICAgIFwiUEFHRV9QT09MXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX3NlbmRtc2dfbG9ja2VkXCIsXG4gICAgXCJ0Y3Bfc2VuZG1zZ1wiLFxuICAgIFwibmV0X2Rldm1lbV9nZXRfYmluZGluZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHZhbGlkYXRpb24gbG9naWMgaW4gdGNwX3NlbmRtc2dfbG9ja2VkKCkgd2hlbiBwcm9jZXNzaW5nIFRDUCB6ZXJvLWNvcHkgbWVzc2FnZXMgd2l0aCBkZXZpY2UgbWVtb3J5IGRtYWJ1ZiBJRHMgKFNDTV9ERVZNRU1fRE1BQlVGKS4gSXQgZW5zdXJlcyB0aGF0IHRyYW5zbWlzc2lvbnMgd2l0aCBkbWFidWZfaWQgZmFpbCB3aXRoIC1FSU5WQUwgdW5sZXNzIHplcm9jb3B5IGlzIGFjdHVhbGx5IGVuYWJsZWQgKHpjID09IE1TR19aRVJPQ09QWSkgYW5kIGEgdmFsaWQgZGV2bWVtIGJpbmRpbmcgZXhpc3RzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIFRDUCBzb2NrZXQgdHJhbnNtaXQgcGF0aHMgdGhhdCBjYW4gYmUgdGVzdGVkIHVzaW5nIHN0YW5kYXJkIHNvY2tldCBzeXNjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MDg6MzkuODc5NDU1NDU5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjE3MDY0ODQ1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjA4OjM5Ljg3OTg5MjE2OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI2MTcwMjA3OTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB0aWdodGVucyBlcnJvciB2YWxpZGF0aW9uIGluIGB0Y3Bfc2VuZG1zZ19sb2NrZWQoKWAgd2hlbiBgc29ja2MuZG1hYnVmX2lkYCBpcyBzdXBwbGllZCwgZW5zdXJpbmcgdGhhdCBkZXZtZW0gdHJhbnNtaXNzaW9uIGlzIG9ubHkgcGVybWl0dGVkIHdoZW4gemVyby1jb3B5IGlzIGFjdGl2ZSAoYHpjID09IE1TR19aRVJPQ09QWWApIGFuZCBhIHZhbGlkIGRldm1lbSBiaW5kaW5nIGV4aXN0cyAoYGJpbmRpbmcgIT0gTlVMTGApLiBBbGwgdmFyaWFibGVzIGV2YWx1YXRlZCBpbiB0aGlzIGNvbmRpdGlvbiAoYHNvY2tjX2VycmAsIGBzb2NrY2AsIGB6Y2AsIGFuZCBgYmluZGluZ2ApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlcy4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBvciBwYWRkaW5nIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzIG9yIG1lbW9yeSBjb3B5aW5nIGxvZ2ljIGluIGEgbWFubmVyIHRoYXQgY291bGQgY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIGludmFsaWQgcG9pbnRlcnMgb3Igc3RhdGUgaW52YXJpYW50cyBhcmUgYWRkcmVzc2FibGUgYnkgc3RhbmRhcmQgZGV0ZWN0b3JzIC8gS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwYjJmMjJjNzI2OTYwM2Y4MzY1ZTE2ZDQyYTI5NGYwZTg2YWIzMTFhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAwMDowNzo0NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmNcbmluZGV4IGI0MjM3ZDBlOTk0ZDYuLjEwZjU4MjgxYmUxN2IgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3AuY1xuKysrIGIvbmV0L2lwdjQvdGNwLmNcbkBAIC0xMTY5LDggKzExNjksNyBAQCBpbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbiBcdFx0XHR6YyA9IE1TR19TUExJQ0VfUEFHRVM7XG4gXHR9XG4gXG4tXHRpZiAoIXNvY2tjX2VyciBcdTAwMjZcdTAwMjYgc29ja2MuZG1hYnVmX2lkIFx1MDAyNlx1MDAyNlxuLVx0ICAgICghKGZsYWdzIFx1MDAyNiBNU0dfWkVST0NPUFkpIHx8ICFzb2NrX2ZsYWcoc2ssIFNPQ0tfWkVST0NPUFkpKSkge1xuK1x0aWYgKCFzb2NrY19lcnIgXHUwMDI2XHUwMDI2IHNvY2tjLmRtYWJ1Zl9pZCBcdTAwMjZcdTAwMjYgKHpjICE9IE1TR19aRVJPQ09QWSB8fCAhYmluZGluZykpIHtcbiBcdFx0ZXJyID0gLUVJTlZBTDtcbiBcdFx0Z290byBvdXRfZXJyO1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MDg6MzkuODc5ODkzNTc5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNDMyMzMxMDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDb2RlOiBUQ1AgSW1wbGVtZW50YXRpb24gRGVlcCBEaXZlKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gd29yay4gVGhpcyBuZXcgcGF0Y2ggbmVlZHMgYSB0aG9yb3VnaCByZXZpZXcuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHRoZSBjb250ZXh0LiBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIHRoZSBjb2RlLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgYG5ldC9pcHY0L3RjcC5jYCBmaWxlLiBHaXZlbiB0aGUgbGluZSBudW1iZXIgcHJvdmlkZWQsIGFyb3VuZCBsaW5lIDExNjksIEknbGwgcHJvYmFibHkgYmUgYWJsZSB0byBkZXRlcm1pbmUgd2hhdCBpcyBiZWluZyBjaGFuZ2VkLlxuXG5JIG5lZWQgdG8gcXVpY2tseSBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLCBzbyBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgd2lsbCBiZSB0aGUgYmVzdCB0b29sIGZvciB0aGlzOyBpdCdzIHRoZSBmYXN0ZXN0IHdheSB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjA4OjUwLjMxMjIyNjkxM1oiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODczMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdGNwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE0MCxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE0MDpcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgTVNHX1pFUk9DT1BZKSBcXHUwMDI2XFx1MDAyNiBzaXplKSB7XFxuMTE0MTpcXHRcXHRcXHRpZiAobXNnLVxcdTAwM2Vtc2dfdWJ1Zikge1xcbjExNDI6XFx0XFx0XFx0XFx0dWFyZyA9IG1zZy1cXHUwMDNlbXNnX3VidWY7XFxuMTE0MzpcXHRcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3JvdXRlX2NhcHMgXFx1MDAyNiBORVRJRl9GX1NHKVxcbjExNDQ6XFx0XFx0XFx0XFx0XFx0emMgPSBNU0dfWkVST0NPUFk7XFxuMTE0NTpcXHRcXHRcXHR9IGVsc2UgaWYgKHNvY2tfZmxhZyhzaywgU09DS19aRVJPQ09QWSkpIHtcXG4xMTQ2OlxcdFxcdFxcdFxcdHNrYiA9IHRjcF93cml0ZV9xdWV1ZV90YWlsKHNrKTtcXG4xMTQ3OlxcdFxcdFxcdFxcdHVhcmcgPSBtc2dfemVyb2NvcHlfcmVhbGxvYyhzaywgc2l6ZSwgc2tiX3pjb3B5KHNrYiksXFxuMTE0ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIXNvY2tjX2VyciBcXHUwMDI2XFx1MDAyNiBzb2NrYy5kbWFidWZfaWQpO1xcbjExNDk6XFx0XFx0XFx0XFx0aWYgKCF1YXJnKSB7XFxuMTE1MDpcXHRcXHRcXHRcXHRcXHRlcnIgPSAtRU5PQlVGUztcXG4xMTUxOlxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4xMTUyOlxcdFxcdFxcdFxcdH1cXG4xMTUzOlxcdFxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfcm91dGVfY2FwcyBcXHUwMDI2IE5FVElGX0ZfU0cpXFxuMTE1NDpcXHRcXHRcXHRcXHRcXHR6YyA9IE1TR19aRVJPQ09QWTtcXG4xMTU1OlxcdFxcdFxcdFxcdGVsc2VcXG4xMTU2OlxcdFxcdFxcdFxcdFxcdHVhcmdfdG9fbXNnemModWFyZyktXFx1MDAzZXplcm9jb3B5ID0gMDtcXG4xMTU3OlxcdFxcbjExNTg6XFx0XFx0XFx0XFx0aWYgKCFzb2NrY19lcnIgXFx1MDAyNlxcdTAwMjYgc29ja2MuZG1hYnVmX2lkKSB7XFxuMTE1OTpcXHRcXHRcXHRcXHRcXHRiaW5kaW5nID0gbmV0X2Rldm1lbV9nZXRfYmluZGluZyhzaywgc29ja2MuZG1hYnVmX2lkKTtcXG4xMTYwOlxcdFxcdFxcdFxcdFxcdGlmIChJU19FUlIoYmluZGluZykpIHtcXG4xMTYxOlxcdFxcdFxcdFxcdFxcdFxcdGVyciA9IFBUUl9FUlIoYmluZGluZyk7XFxuMTE2MjpcXHRcXHRcXHRcXHRcXHRcXHRiaW5kaW5nID0gTlVMTDtcXG4xMTYzOlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4xMTY0OlxcdFxcdFxcdFxcdFxcdH1cXG4xMTY1OlxcdFxcdFxcdFxcdH1cXG4xMTY2OlxcdFxcdFxcdH1cXG4xMTY3OlxcdFxcdH0gZWxzZSBpZiAodW5saWtlbHkobXNnLVxcdTAwM2Vtc2dfZmxhZ3MgXFx1MDAyNiBNU0dfU1BMSUNFX1BBR0VTKSBcXHUwMDI2XFx1MDAyNiBzaXplKSB7XFxuMTE2ODpcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3JvdXRlX2NhcHMgXFx1MDAyNiBORVRJRl9GX1NHKVxcbjExNjk6XFx0XFx0XFx0XFx0emMgPSBNU0dfU1BMSUNFX1BBR0VTO1xcbjExNzA6XFx0XFx0fVxcbjExNzE6XFx0XFxuMTE3MjpcXHRcXHRpZiAoIXNvY2tjX2VyciBcXHUwMDI2XFx1MDAyNiBzb2NrYy5kbWFidWZfaWQgXFx1MDAyNlxcdTAwMjYgKHpjICE9IE1TR19aRVJPQ09QWSB8fCAhYmluZGluZykpIHtcXG4xMTczOlxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuMTE3NDpcXHRcXHRcXHRnb3RvIG91dF9lcnI7XFxuMTE3NTpcXHRcXHR9XFxuMTE3NjpcXHRcXG4xMTc3OlxcdFxcdGlmICh1bmxpa2VseShmbGFncyBcXHUwMDI2IE1TR19GQVNUT1BFTiB8fFxcbjExNzg6XFx0XFx0XFx0ICAgICBpbmV0X3Rlc3RfYml0KERFRkVSX0NPTk5FQ1QsIHNrKSkgXFx1MDAyNlxcdTAwMjZcXG4xMTc5OlxcdFxcdCAgICAhdHAtXFx1MDAzZXJlcGFpcikge1xcbjExODA6XFx0XFx0XFx0ZXJyID0gdGNwX3NlbmRtc2dfZmFzdG9wZW4oc2ssIG1zZywgXFx1MDAyNmNvcGllZF9zeW4sIHNpemUsIHVhcmcpO1xcbjExODE6XFx0XFx0XFx0aWYgKGVyciA9PSAtRUlOUFJPR1JFU1MgXFx1MDAyNlxcdTAwMjYgY29waWVkX3N5biBcXHUwMDNlIDApXFxuMTE4MjpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4xMTgzOlxcdFxcdFxcdGVsc2UgaWYgKGVycilcXG4xMTg0OlxcdFxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4xMTg1OlxcdFxcdH1cXG4xMTg2OlxcdFxcbjExODc6XFx0XFx0dGltZW8gPSBzb2NrX3NuZHRpbWVvKHNrLCBmbGFncyBcXHUwMDI2IE1TR19ET05UV0FJVCk7XFxuMTE4ODpcXHRcXG4xMTg5OlxcdFxcdHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKHNrKTsgIC8qIGlzIHNlbmRpbmcgYXBwbGljYXRpb24tbGltaXRlZD8gKi9cXG4xMTkwOlxcdFxcbjExOTE6XFx0XFx0LyogV2FpdCBmb3IgYSBjb25uZWN0aW9uIHRvIGZpbmlzaC4gT25lIGV4Y2VwdGlvbiBpcyBUQ1AgRmFzdCBPcGVuXFxuMTE5MjpcXHRcXHQgKiAocGFzc2l2ZSBzaWRlKSB3aGVyZSBkYXRhIGlzIGFsbG93ZWQgdG8gYmUgc2VudCBiZWZvcmUgYSBjb25uZWN0aW9uXFxuMTE5MzpcXHRcXHQgKiBpcyBmdWxseSBlc3RhYmxpc2hlZC5cXG4xMTk0OlxcdFxcdCAqL1xcbjExOTU6XFx0XFx0aWYgKCgoMSBcXHUwMDNjXFx1MDAzYyBzay1cXHUwMDNlc2tfc3RhdGUpIFxcdTAwMjYgfihUQ1BGX0VTVEFCTElTSEVEIHwgVENQRl9DTE9TRV9XQUlUKSkgXFx1MDAyNlxcdTAwMjZcXG4xMTk2OlxcdFxcdCAgICAhdGNwX3Bhc3NpdmVfZmFzdG9wZW4oc2spKSB7XFxuMTE5NzpcXHRcXHRcXHRlcnIgPSBza19zdHJlYW1fd2FpdF9jb25uZWN0KHNrLCBcXHUwMDI2dGltZW8pO1xcbjExOTg6XFx0XFx0XFx0aWYgKGVyciAhPSAwKVxcbjExOTk6XFx0XFx0XFx0XFx0Z290byBkb19lcnJvcjtcXG4xMjAwOlxcdFxcdH1cXG4xMjAxOlxcdFxcbjEyMDI6XFx0XFx0aWYgKHVubGlrZWx5KHRwLVxcdTAwM2VyZXBhaXIpKSB7XFxuMTIwMzpcXHRcXHRcXHRpZiAodHAtXFx1MDAzZXJlcGFpcl9xdWV1ZSA9PSBUQ1BfUkVDVl9RVUVVRSkge1xcbjEyMDQ6XFx0XFx0XFx0XFx0Y29waWVkID0gdGNwX3NlbmRfcmN2cShzaywgbXNnLCBzaXplKTtcXG4xMjA1OlxcdFxcdFxcdFxcdGdvdG8gb3V0X25vcHVzaDtcXG4xMjA2OlxcdFxcdFxcdH1cXG4xMjA3OlxcdFxcbjEyMDg6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4xMjA5OlxcdFxcdFxcdGlmICh0cC1cXHUwMDNlcmVwYWlyX3F1ZXVlID09IFRDUF9OT19RVUVVRSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MDg6NTAuMzEyNTE2MTkzWiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3NzU0MjUxOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyBgdGNwX3NlbmRtc2dfbG9ja2VkYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgKmJlZm9yZSogbGluZSAxMTQwIGluIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLiBUaGF0IGZ1bmN0aW9uIGlzIGNyaXRpY2FsLCBlc3BlY2lhbGx5IHdoZW4gd2UncmUgdGFsa2luZyBhYm91dCBzZW5kaW5nIGRhdGEgb3ZlciBUQ1AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgcHJlLWNvbmRpdGlvbnMgYXJlIGVzdGFibGlzaGVkLCB3aGF0J3MgYmVpbmcgaW5pdGlhbGl6ZWQsIGFuZCB3aGF0IGRlY2lzaW9ucyBhcmUgYmVpbmcgbWFkZSB0aGF0IHdpbGwgaW5mbHVlbmNlIHRoZSBleGVjdXRpb24gcGF0aCBsZWFkaW5nIHVwIHRvIHRoYXQgcG9pbnQuIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgY29udHJvbCBmbG93LCBsb29rIGF0IHZhcmlhYmxlIGFzc2lnbm1lbnRzLCBhbmQgY29uc2lkZXIgYW55IHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcywgcGFydGljdWxhcmx5IHRoZSBgc29ja2Agc3RydWN0dXJlLCB0aGUgYHRjcF9zb2NrYCBzdHJ1Y3R1cmUsIGFuZCBhbnkgcmVsYXRlZCBxdWV1ZXMuIElzIHRoaXMgaGFwcGVuaW5nIGR1cmluZyBhIHJlZ3VsYXIgc2VuZCwgb3IgaXMgaXQgcmVsYXRlZCB0byBzb21ldGhpbmcgbGlrZSB1cmdlbnQgZGF0YSwgb3IgYSBzb2NrZXQgc2h1dGRvd24/IEknbGwgcHJvYmFibHkgc3RhcnQgYnkgbG9va2luZyBhdCB0aGUgY2FsbHMgdGhhdCBsZWFkIGludG8gdGhpcyBmdW5jdGlvbiBmcm9tIHRoZSB1cHBlciBsYXllcnMgdG8gZ3Jhc3AgdGhlIGNvbnRleHQuIFdoYXQgbGVkIHVzIGhlcmU/IFdoYXQgZXZlbnRzIHRyaWdnZXJlZCB0aGlzIGNhbGw/IFRoaXMgaXMgZ29pbmcgdG8gYmUgYWJvdXQgdW5kZXJzdGFuZGluZyB0aGUgY29tcGxldGUgc3RhdGUgYmVmb3JlIHRoYXQgbGluZSwgc28gSSBjYW4gc3RhcnQgdG8gaW5mZXIgd2hhdCBjaGFuZ2VzIGFyZSB0YWtpbmcgcGxhY2UsIGFuZCB3aHkuIEknbGwgbmVlZCB0byBjb3JyZWxhdGUgdGhlIHZhcmlhYmxlcyBhdCBsaW5lIDExNDAgdG8gdGhlaXIgdmFsdWVzIGF0IHRoZSBlbnRyeSB0byB0aGUgZnVuY3Rpb24sIGFuZCBsb29rIGZvciBhbnkgY2x1ZXMgYWJvdXQgdGhlIGNvbmRpdGlvbnMuIEZpbmFsbHksIGFmdGVyIGRvaW5nIHRoaXMgcHJlbGltaW5hcnkgaW52ZXN0aWdhdGlvbiwgSSdsbCBiZSBpbiBhIGJldHRlciBwb3NpdGlvbiB0byBzZWUgdGhlIGJyb2FkZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUyMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MDg6NTMuMDg3OTQ0MTIxWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNzU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTAwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTAwOlxcdHtcXG4xMTAxOlxcdFxcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xcbjExMDI6XFx0XFxuMTEwMzpcXHRcXHRpZiAoLyogV2UgaGF2ZSBsZXNzIHRoYW4gb25lIHBhY2tldCB0byBzZW5kLiAqL1xcbjExMDQ6XFx0XFx0ICAgIHRwLVxcdTAwM2V3cml0ZV9zZXEgLSB0cC1cXHUwMDNlc25kX254dCBcXHUwMDNjIHRwLVxcdTAwM2Vtc3NfY2FjaGUgXFx1MDAyNlxcdTAwMjZcXG4xMTA1OlxcdFxcdCAgICAvKiBOb3RoaW5nIGluIHNlbmRpbmcgaG9zdCdzIHFkaXNjIHF1ZXVlcyBvciBOSUMgdHggcXVldWUuICovXFxuMTEwNjpcXHRcXHQgICAgc2tfd21lbV9hbGxvY19nZXQoc2spIFxcdTAwM2MgU0tCX1RSVUVTSVpFKDEpIFxcdTAwMjZcXHUwMDI2XFxuMTEwNzpcXHRcXHQgICAgLyogV2UgYXJlIG5vdCBsaW1pdGVkIGJ5IENXTkQuICovXFxuMTEwODpcXHRcXHQgICAgdGNwX3BhY2tldHNfaW5fZmxpZ2h0KHRwKSBcXHUwMDNjIHRjcF9zbmRfY3duZCh0cCkgXFx1MDAyNlxcdTAwMjZcXG4xMTA5OlxcdFxcdCAgICAvKiBBbGwgbG9zdCBwYWNrZXRzIGhhdmUgYmVlbiByZXRyYW5zbWl0dGVkLiAqL1xcbjExMTA6XFx0XFx0ICAgIHRwLVxcdTAwM2Vsb3N0X291dCBcXHUwMDNjPSB0cC1cXHUwMDNlcmV0cmFuc19vdXQpXFxuMTExMTpcXHRcXHRcXHR0cC1cXHUwMDNlYXBwX2xpbWl0ZWQgPVxcbjExMTI6XFx0XFx0XFx0XFx0KHRwLVxcdTAwM2VkZWxpdmVyZWQgKyB0Y3BfcGFja2V0c19pbl9mbGlnaHQodHApKSA/IDogMTtcXG4xMTEzOlxcdH1cXG4xMTE0OlxcdEVYUE9SVF9TWU1CT0xfR1BMKHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKTtcXG4xMTE1OlxcdFxcbjExMTY6XFx0aW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxuMTExNzpcXHR7XFxuMTExODpcXHRcXHRzdHJ1Y3QgbmV0X2Rldm1lbV9kbWFidWZfYmluZGluZyAqYmluZGluZyA9IE5VTEw7XFxuMTExOTpcXHRcXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcXG4xMTIwOlxcdFxcdHN0cnVjdCB1YnVmX2luZm8gKnVhcmcgPSBOVUxMO1xcbjExMjE6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4xMTIyOlxcdFxcdHN0cnVjdCBzb2NrY21fY29va2llIHNvY2tjO1xcbjExMjM6XFx0XFx0aW50IGZsYWdzLCBlcnIsIGNvcGllZCA9IDA7XFxuMTEyNDpcXHRcXHRpbnQgbXNzX25vdyA9IDAsIHNpemVfZ29hbCwgY29waWVkX3N5biA9IDA7XFxuMTEyNTpcXHRcXHRpbnQgcHJvY2Vzc19iYWNrbG9nID0gMDtcXG4xMTI2OlxcdFxcdGludCBzb2NrY19lcnIgPSAwO1xcbjExMjc6XFx0XFx0aW50IHpjID0gMDtcXG4xMTI4OlxcdFxcdGxvbmcgdGltZW87XFxuMTEyOTpcXHRcXG4xMTMwOlxcdFxcdGZsYWdzID0gbXNnLVxcdTAwM2Vtc2dfZmxhZ3M7XFxuMTEzMTpcXHRcXG4xMTMyOlxcdFxcdHNvY2tjID0gKHN0cnVjdCBzb2NrY21fY29va2llKXsgLnRzZmxhZ3MgPSBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX3RzZmxhZ3MpIH07XFxuMTEzMzpcXHRcXHRpZiAobXNnLVxcdTAwM2Vtc2dfY29udHJvbGxlbikge1xcbjExMzQ6XFx0XFx0XFx0c29ja2NfZXJyID0gc29ja19jbXNnX3NlbmQoc2ssIG1zZywgXFx1MDAyNnNvY2tjKTtcXG4xMTM1OlxcdFxcdFxcdC8qIERvbid0IHJldHVybiBlcnJvciB1bnRpbCBNU0dfRkFTVE9QRU4gaGFzIGJlZW4gcHJvY2Vzc2VkO1xcbjExMzY6XFx0XFx0XFx0ICogdGhhdCBtYXkgc3VjY2VlZCBldmVuIGlmIHRoZSBjbXNnIGlzIGludmFsaWQuXFxuMTEzNzpcXHRcXHRcXHQgKi9cXG4xMTM4OlxcdFxcdH1cXG4xMTM5OlxcdFxcbjExNDA6XFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IE1TR19aRVJPQ09QWSkgXFx1MDAyNlxcdTAwMjYgc2l6ZSkge1xcbjExNDE6XFx0XFx0XFx0aWYgKG1zZy1cXHUwMDNlbXNnX3VidWYpIHtcXG4xMTQyOlxcdFxcdFxcdFxcdHVhcmcgPSBtc2ctXFx1MDAzZW1zZ191YnVmO1xcbjExNDM6XFx0XFx0XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19yb3V0ZV9jYXBzIFxcdTAwMjYgTkVUSUZfRl9TRylcXG4xMTQ0OlxcdFxcdFxcdFxcdFxcdHpjID0gTVNHX1pFUk9DT1BZO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDowODo1My4wODgyNjQ1MzFaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ4OTMyMzI4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIEkgZGVsdmUgaW50byB0aGUgYHRjcF9zZW5kbXNnX2xvY2tlZGAgY29kZTpcblxuKipEaXZpbmcgRGVlcCBpbnRvIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGFuZCBgYmluZGluZ2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIGZvY3VzaW5nIG9uIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIG5vdy4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiB3aGVyZSwgd2l0aGluIHRoaXMgZnVuY3Rpb24sIGRvIHdlIGFjdHVhbGx5ICp1c2UqIGBiaW5kaW5nYD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjb25jZXB0IG9mIFwiYmluZGluZ1wiIOKAkyB0aGUgYXNzb2NpYXRpb24gb2YgYSBzb2NrZXQgd2l0aCBhIHNwZWNpZmljIGxvY2FsIGFkZHJlc3MgYW5kIHBvcnQg4oCTIGlzIGludGVyd292ZW4gaW50byB0aGlzIGNyaXRpY2FsIHNlbmQgcGF0aC4gSXMgaXQgdXNlZCBmb3IgYWRkcmVzcyBzZWxlY3Rpb24sIHBlcmhhcHM/IE9yIG1heWJlIGZvciBlbmZvcmNpbmcgc3BlY2lmaWMgc29ja2V0IG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgZGVzdGluYXRpb24/IEkgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2UgdG8gdW5kZXJzdGFuZCBpdHMgaW1wYWN0IG9uIHRoZSBzZW5kIG9wZXJhdGlvbi4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIGRpcmVjdCByZWZlcmVuY2VzIHRvIHRoZSBgYmluZGluZ2AgdmFyaWFibGUgb3Igc3RydWN0dXJlLiBJIHN1c3BlY3QgaXRzIGluZmx1ZW5jZSB3aWxsIGJlIHN1YnRsZSBpbiBtYW55IGNhc2VzLCBzbyBhIGNvbXByZWhlbnNpdmUgc2VhcmNoIGlzIGluIG9yZGVyLiBJ4oCZbSB0aGlua2luZyBhYm91dCBzY2VuYXJpb3MgaW52b2x2aW5nIG11bHRpY2FzdCwgYWRkcmVzcyBmYW1pbHkgZGlmZmVyZW5jZXMsIG9yIGFueSB0aW1lIHdlIG5lZWQgdG8gYXNzb2NpYXRlIHRoZSBvdXRnb2luZyBkYXRhIHdpdGggdGhlIGxvY2FsIGVuZHBvaW50LiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2ODIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjA4OjU1LjU3NzU5MDc0MloiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODQwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdGNwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIxMCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTIxMDpcXHRcXHRcXHRcXHRnb3RvIG91dF9lcnI7XFxuMTIxMTpcXHRcXG4xMjEyOlxcdFxcdFxcdC8qICdjb21tb24nIHNlbmRpbmcgdG8gc2VuZHEgKi9cXG4xMjEzOlxcdFxcdH1cXG4xMjE0OlxcdFxcbjEyMTU6XFx0XFx0aWYgKHNvY2tjX2Vycikge1xcbjEyMTY6XFx0XFx0XFx0ZXJyID0gc29ja2NfZXJyO1xcbjEyMTc6XFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbjEyMTg6XFx0XFx0fVxcbjEyMTk6XFx0XFxuMTIyMDpcXHRcXHQvKiBUaGlzIHNob3VsZCBiZSBpbiBwb2xsICovXFxuMTIyMTpcXHRcXHRza19jbGVhcl9iaXQoU09DS1dRX0FTWU5DX05PU1BBQ0UsIHNrKTtcXG4xMjIyOlxcdFxcbjEyMjM6XFx0XFx0LyogT2sgY29tbWVuY2Ugc2VuZGluZy4gKi9cXG4xMjI0OlxcdFxcdGNvcGllZCA9IDA7XFxuMTIyNTpcXHRcXG4xMjI2OlxcdHJlc3RhcnQ6XFxuMTIyNzpcXHRcXHRtc3Nfbm93ID0gdGNwX3NlbmRfbXNzKHNrLCBcXHUwMDI2c2l6ZV9nb2FsLCBmbGFncyk7XFxuMTIyODpcXHRcXG4xMjI5OlxcdFxcdGVyciA9IC1FUElQRTtcXG4xMjMwOlxcdFxcdGlmIChzay1cXHUwMDNlc2tfZXJyIHx8IChzay1cXHUwMDNlc2tfc2h1dGRvd24gXFx1MDAyNiBTRU5EX1NIVVRET1dOKSlcXG4xMjMxOlxcdFxcdFxcdGdvdG8gZG9fZXJyb3I7XFxuMTIzMjpcXHRcXG4xMjMzOlxcdFxcdHdoaWxlIChtc2dfZGF0YV9sZWZ0KG1zZykpIHtcXG4xMjM0OlxcdFxcdFxcdGludCBjb3B5ID0gMDtcXG4xMjM1OlxcdFxcbjEyMzY6XFx0XFx0XFx0c2tiID0gdGNwX3dyaXRlX3F1ZXVlX3RhaWwoc2spO1xcbjEyMzc6XFx0XFx0XFx0aWYgKHNrYilcXG4xMjM4OlxcdFxcdFxcdFxcdGNvcHkgPSBzaXplX2dvYWwgLSBza2ItXFx1MDAzZWxlbjtcXG4xMjM5OlxcdFxcbjEyNDA6XFx0XFx0XFx0dHJhY2VfdGNwX3NlbmRtc2dfbG9ja2VkKHNrLCBtc2csIHNrYiwgc2l6ZV9nb2FsKTtcXG4xMjQxOlxcdFxcbjEyNDI6XFx0XFx0XFx0aWYgKGNvcHkgXFx1MDAzYz0gMCB8fCAhdGNwX3NrYl9jYW5fY29sbGFwc2VfdG8oc2tiKSB8fFxcbjEyNDM6XFx0XFx0XFx0ICAgIHVubGlrZWx5KHNrYl9mcmFnc19yZWFkYWJsZShza2IpICE9ICFiaW5kaW5nKSkge1xcbjEyNDQ6XFx0XFx0XFx0XFx0Ym9vbCBmaXJzdF9za2I7XFxuMTI0NTpcXHRcXG4xMjQ2OlxcdG5ld19zZWdtZW50OlxcbjEyNDc6XFx0XFx0XFx0XFx0aWYgKCFza19zdHJlYW1fbWVtb3J5X2ZyZWUoc2spKVxcbjEyNDg6XFx0XFx0XFx0XFx0XFx0Z290byB3YWl0X2Zvcl9zcGFjZTtcXG4xMjQ5OlxcdFxcbjEyNTA6XFx0XFx0XFx0XFx0aWYgKHVubGlrZWx5KHByb2Nlc3NfYmFja2xvZyBcXHUwMDNlPSAxNikpIHtcXG4xMjUxOlxcdFxcdFxcdFxcdFxcdHByb2Nlc3NfYmFja2xvZyA9IDA7XFxuMTI1MjpcXHRcXHRcXHRcXHRcXHRpZiAoc2tfZmx1c2hfYmFja2xvZyhzaykpXFxuMTI1MzpcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIHJlc3RhcnQ7XFxuMTI1NDpcXHRcXHRcXHRcXHR9XFxuMTI1NTpcXHRcXHRcXHRcXHRmaXJzdF9za2IgPSB0Y3BfcnR4X2FuZF93cml0ZV9xdWV1ZXNfZW1wdHkoc2spO1xcbjEyNTY6XFx0XFx0XFx0XFx0c2tiID0gdGNwX3N0cmVhbV9hbGxvY19za2Ioc2ssIHNrLVxcdTAwM2Vza19hbGxvY2F0aW9uLFxcbjEyNTc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgZmlyc3Rfc2tiKTtcXG4xMjU4OlxcdFxcdFxcdFxcdGlmICghc2tiKVxcbjEyNTk6XFx0XFx0XFx0XFx0XFx0Z290byB3YWl0X2Zvcl9zcGFjZTtcXG4xMjYwOlxcdFxcbjEyNjE6XFx0XFx0XFx0XFx0cHJvY2Vzc19iYWNrbG9nKys7XFxuMTI2MjpcXHRcXG4xMjYzOlxcdCNpZmRlZiBDT05GSUdfU0tCX0RFQ1JZUFRFRFxcbjEyNjQ6XFx0XFx0XFx0XFx0c2tiLVxcdTAwM2VkZWNyeXB0ZWQgPSAhIShmbGFncyBcXHUwMDI2IE1TR19TRU5EUEFHRV9ERUNSWVBURUQpO1xcbjEyNjU6XFx0I2VuZGlmXFxuMTI2NjpcXHRcXHRcXHRcXHR0Y3Bfc2tiX2VudGFpbChzaywgc2tiKTtcXG4xMjY3OlxcdFxcdFxcdFxcdGNvcHkgPSBzaXplX2dvYWw7XFxuMTI2ODpcXHRcXG4xMjY5OlxcdFxcdFxcdFxcdC8qIEFsbCBwYWNrZXRzIGFyZSByZXN0b3JlZCBhcyBpZiB0aGV5IGhhdmVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MDg6NTUuNTc3ODc2MjkxWiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4OTUzNDUyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW5uZXIgbW9ub2xvZ3VlOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBgdGNwX3NlbmRtc2dfbG9ja2VkYCoqXG5cbkFscmlnaHQsIHNvIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIGZsb3cgd2l0aGluIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLCBhbmQgc3BlY2lmaWNhbGx5LCB1bmRlcnN0YW5kIHRoZSBwYXRoIGxlYWRpbmcgYWxsIHRoZSB3YXkgZG93biB0byBgb3V0X2VycmAuIEknbSBhbHJlYWR5IHF1aXRlIGZhbWlsaWFyIHdpdGggdGhlIG92ZXJhbGwgVENQIHNlbmRpbmcgcHJvY2Vzcywgc28gdGhpcyBleGVyY2lzZSB3aWxsIGJlIGFib3V0IHBpbnBvaW50aW5nIHRoZSBzcGVjaWZpYyBlcnJvciBjb25kaXRpb25zIHRoYXQgY291bGQgdHJpZ2dlciB0aGF0IHBhcnRpY3VsYXIgcGF0aC4gSSB3YW50IHRvIHNlZSB3aGljaCBzdWJ0bGUgZGV0YWlscyBhcmUgcmVsZXZhbnQuXG5cbkknbSB0aGlua2luZyBhYm91dCB0aGUgZGlmZmVyZW50IGZhaWx1cmUgcG9pbnRzOiBhcmUgd2UgdGFsa2luZyBhYm91dCByZXNvdXJjZSBleGhhdXN0aW9uIChtZW1vcnksIHNvY2tldCBidWZmZXJzKSwgcHJvdG9jb2wgdmlvbGF0aW9ucywgY29uZ2VzdGlvbiBjb250cm9sIGlzc3Vlcywgb3IgcGVyaGFwcyBwcm9ibGVtcyByZWxhdGVkIHRvIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgaW50ZXJmYWNlPyBUaGUgbnVhbmNlcyBhcmUgYWx3YXlzIHRoZSBkZXZpbCBpbiB0aGUgZGV0YWlscywgYW5kIEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZWRnZSBjYXNlcy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIGFueSBvZiB0aGUgY2hlY2tzIG9yIG1hbmlwdWxhdGlvbnMgcGVyZm9ybWVkIHByaW9yIHRvIHRoZSBlcnJvciBwYXRoIGFyZSBhdHlwaWNhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgyNywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDA6MDg6NTguNDczMjI0MTkxWiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwOTEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzcwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzcwOlxcdFxcdFxcdFxcdHNrX21lbV9jaGFyZ2Uoc2ssIGNvcHkpO1xcbjEzNzE6XFx0XFx0XFx0fVxcbjEzNzI6XFx0XFxuMTM3MzpcXHRcXHRcXHRpZiAoIWNvcGllZClcXG4xMzc0OlxcdFxcdFxcdFxcdFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNldGNwX2ZsYWdzIFxcdTAwMjY9IH5UQ1BIRFJfUFNIO1xcbjEzNzU6XFx0XFxuMTM3NjpcXHRcXHRcXHRXUklURV9PTkNFKHRwLVxcdTAwM2V3cml0ZV9zZXEsIHRwLVxcdTAwM2V3cml0ZV9zZXEgKyBjb3B5KTtcXG4xMzc3OlxcdFxcdFxcdFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNlZW5kX3NlcSArPSBjb3B5O1xcbjEzNzg6XFx0XFx0XFx0dGNwX3NrYl9wY291bnRfc2V0KHNrYiwgMCk7XFxuMTM3OTpcXHRcXG4xMzgwOlxcdFxcdFxcdGNvcGllZCArPSBjb3B5O1xcbjEzODE6XFx0XFx0XFx0aWYgKCFtc2dfZGF0YV9sZWZ0KG1zZykpIHtcXG4xMzgyOlxcdFxcdFxcdFxcdGlmICh1bmxpa2VseShmbGFncyBcXHUwMDI2IE1TR19FT1IpKVxcbjEzODM6XFx0XFx0XFx0XFx0XFx0VENQX1NLQl9DQihza2IpLVxcdTAwM2Vlb3IgPSAxO1xcbjEzODQ6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTM4NTpcXHRcXHRcXHR9XFxuMTM4NjpcXHRcXG4xMzg3OlxcdFxcdFxcdGlmIChza2ItXFx1MDAzZWxlbiBcXHUwMDNjIHNpemVfZ29hbCB8fCAoZmxhZ3MgXFx1MDAyNiBNU0dfT09CKSB8fCB1bmxpa2VseSh0cC1cXHUwMDNlcmVwYWlyKSlcXG4xMzg4OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjEzODk6XFx0XFxuMTM5MDpcXHRcXHRcXHRpZiAoZm9yY2VkX3B1c2godHApKSB7XFxuMTM5MTpcXHRcXHRcXHRcXHR0Y3BfbWFya19wdXNoKHRwLCBza2IpO1xcbjEzOTI6XFx0XFx0XFx0XFx0X190Y3BfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzaywgbXNzX25vdywgVENQX05BR0xFX1BVU0gpO1xcbjEzOTM6XFx0XFx0XFx0fSBlbHNlIGlmIChza2IgPT0gdGNwX3NlbmRfaGVhZChzaykpXFxuMTM5NDpcXHRcXHRcXHRcXHR0Y3BfcHVzaF9vbmUoc2ssIG1zc19ub3cpO1xcbjEzOTU6XFx0XFx0XFx0Y29udGludWU7XFxuMTM5NjpcXHRcXG4xMzk3OlxcdHdhaXRfZm9yX3NwYWNlOlxcbjEzOTg6XFx0XFx0XFx0c2V0X2JpdChTT0NLX05PU1BBQ0UsIFxcdTAwMjZzay1cXHUwMDNlc2tfc29ja2V0LVxcdTAwM2VmbGFncyk7XFxuMTM5OTpcXHRcXHRcXHR0Y3BfcmVtb3ZlX2VtcHR5X3NrYihzayk7XFxuMTQwMDpcXHRcXHRcXHRpZiAoY29waWVkKVxcbjE0MDE6XFx0XFx0XFx0XFx0dGNwX3B1c2goc2ssIGZsYWdzIFxcdTAwMjYgfk1TR19NT1JFLCBtc3Nfbm93LFxcbjE0MDI6XFx0XFx0XFx0XFx0XFx0IFRDUF9OQUdMRV9QVVNILCBzaXplX2dvYWwpO1xcbjE0MDM6XFx0XFxuMTQwNDpcXHRcXHRcXHRlcnIgPSBza19zdHJlYW1fd2FpdF9tZW1vcnkoc2ssIFxcdTAwMjZ0aW1lbyk7XFxuMTQwNTpcXHRcXHRcXHRpZiAoZXJyICE9IDApXFxuMTQwNjpcXHRcXHRcXHRcXHRnb3RvIGRvX2Vycm9yO1xcbjE0MDc6XFx0XFxuMTQwODpcXHRcXHRcXHRtc3Nfbm93ID0gdGNwX3NlbmRfbXNzKHNrLCBcXHUwMDI2c2l6ZV9nb2FsLCBmbGFncyk7XFxuMTQwOTpcXHRcXHR9XFxuMTQxMDpcXHRcXG4xNDExOlxcdG91dDpcXG4xNDEyOlxcdFxcdGlmIChjb3BpZWQpIHtcXG4xNDEzOlxcdFxcdFxcdHRjcF90eF90aW1lc3RhbXAoc2ssIFxcdTAwMjZzb2NrYyk7XFxuMTQxNDpcXHRcXHRcXHR0Y3BfcHVzaChzaywgZmxhZ3MsIG1zc19ub3csIHRwLVxcdTAwM2Vub25hZ2xlLCBzaXplX2dvYWwpO1xcbjE0MTU6XFx0XFx0fVxcbjE0MTY6XFx0b3V0X25vcHVzaDpcXG4xNDE3OlxcdFxcdC8qIG1zZy1cXHUwMDNlbXNnX3VidWYgaXMgcGlubmVkIGJ5IHRoZSBjYWxsZXIgc28gd2UgZG9uJ3QgdGFrZSBleHRyYSByZWZzICovXFxuMTQxODpcXHRcXHRpZiAodWFyZyBcXHUwMDI2XFx1MDAyNiAhbXNnLVxcdTAwM2Vtc2dfdWJ1ZilcXG4xNDE5OlxcdFxcdFxcdG5ldF96Y29weV9wdXQodWFyZyk7XFxuMTQyMDpcXHRcXHRpZiAoYmluZGluZylcXG4xNDIxOlxcdFxcdFxcdG5ldF9kZXZtZW1fZG1hYnVmX2JpbmRpbmdfcHV0KGJpbmRpbmcpO1xcbjE0MjI6XFx0XFx0cmV0dXJuIGNvcGllZCArIGNvcGllZF9zeW47XFxuMTQyMzpcXHRcXG4xNDI0OlxcdGRvX2Vycm9yOlxcbjE0MjU6XFx0XFx0dGNwX3JlbW92ZV9lbXB0eV9za2Ioc2spO1xcbjE0MjY6XFx0XFxuMTQyNzpcXHRcXHRpZiAoY29waWVkICsgY29waWVkX3N5bilcXG4xNDI4OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE0Mjk6XFx0b3V0X2VycjpcXG4xNDMwOlxcdFxcdC8qIG1zZy1cXHUwMDNlbXNnX3VidWYgaXMgcGlubmVkIGJ5IHRoZSBjYWxsZXIgc28gd2UgZG9uJ3QgdGFrZSBleHRyYSByZWZzICovXFxuMTQzMTpcXHRcXHRpZiAodWFyZyBcXHUwMDI2XFx1MDAyNiAhbXNnLVxcdTAwM2Vtc2dfdWJ1ZilcXG4xNDMyOlxcdFxcdFxcdG5ldF96Y29weV9wdXRfYWJvcnQodWFyZywgdHJ1ZSk7XFxuMTQzMzpcXHRcXHRlcnIgPSBza19zdHJlYW1fZXJyb3Ioc2ssIGZsYWdzLCBlcnIpO1xcbjE0MzQ6XFx0XFx0LyogbWFrZSBzdXJlIHdlIHdha2UgYW55IGVwb2xsIGVkZ2UgdHJpZ2dlciB3YWl0ZXIgKi9cXG4xNDM1OlxcdFxcdGlmICh1bmxpa2VseSh0Y3BfcnR4X2FuZF93cml0ZV9xdWV1ZXNfZW1wdHkoc2spIFxcdTAwMjZcXHUwMDI2IGVyciA9PSAtRUFHQUlOKSkge1xcbjE0MzY6XFx0XFx0XFx0UkVBRF9PTkNFKHNrLVxcdTAwM2Vza193cml0ZV9zcGFjZSkoc2spO1xcbjE0Mzc6XFx0XFx0XFx0dGNwX2Nocm9ub19zdG9wKHNrLCBUQ1BfQ0hST05PX1NOREJVRl9MSU1JVEVEKTtcXG4xNDM4OlxcdFxcdH1cXG4xNDM5OlxcdFxcdGlmIChiaW5kaW5nKVxcbjE0NDA6XFx0XFx0XFx0bmV0X2Rldm1lbV9kbWFidWZfYmluZGluZ19wdXQoYmluZGluZyk7XFxuMTQ0MTpcXHRcXG4xNDQyOlxcdFxcdHJldHVybiBlcnI7XFxuMTQ0MzpcXHR9XFxuMTQ0NDpcXHRFWFBPUlRfU1lNQk9MX0dQTCh0Y3Bfc2VuZG1zZ19sb2NrZWQpO1xcbjE0NDU6XFx0XFxuMTQ0NjpcXHRpbnQgdGNwX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbjE0NDc6XFx0e1xcbjE0NDg6XFx0XFx0aW50IHJldDtcXG4xNDQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwMDowODo1OC40NzM1NDAwNTFaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzU3NjU0MDczMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBUQ1AgU2VuZG1zZyBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gSSdtIGxvb2tpbmcgYXQgYSBjaGFuZ2UgaW4gYHRjcF9zZW5kbXNnX2xvY2tlZGAuIFRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIGNoZWNrIHRvIHNlZSBpZiBgZG1hYnVmX2lkYCB3YXMgc2V0IGluIGEgYHNvY2tjbV9jb29raWVgLCBidXQgdGhhdCBjaGVjayBoYWQgc29tZSBjb25kaXRpb25zIHdoZXJlIGl0IG1pZ2h0ICpub3QqIGJlIHRyaWdnZXJlZCBldmVuIGlmIHRoZSBgZG1hYnVmX2lkYCAqd2FzKiBzZXQuIFRoaXMgY291bGQgcG90ZW50aWFsbHkgbGVhZCB0byBwcm9ibGVtcyBkb3duc3RyZWFtIGJlY2F1c2UgdGhlIHN5c3RlbSBtaWdodCBhc3N1bWUgdGhlIGBkbWFidWZgIHdhcyBjb3JyZWN0bHkgYm91bmQsIHdoZW4gaXQgd2Fzbid0LlxuXG5UaGUgcHJldmlvdXMgY29kZSB3YXMgZXNzZW50aWFsbHkgc2F5aW5nLCBcIklmIHRoZXJlJ3MgYSBETUEgYnVmZmVyIElELCBhbmQgd2UgKmFyZW4ndCogdXNpbmcgemVyby1jb3B5IChvciBpdCdzIG5vdCBlbmFibGVkIG9uIHRoZSBzb2NrZXQpLCB0aGVuIGVycm9yIG91dC5cIiAgQnV0IHRoZXJlIHdlcmUgY29ybmVyIGNhc2VzLiBTcGVjaWZpY2FsbHksIGB6Y2AgbWlnaHQgKm5vdCogYmUgc2V0IHRvIGBNU0dfWkVST0NPUFlgLCBhbmQgYGJpbmRpbmdgICh3aGljaCBJIGFzc3VtZSBpcyBhIHBvaW50ZXIgdG8gc29tZXRoaW5nIGNydWNpYWwpIG1pZ2h0IGJlIGBOVUxMYC5cblxuVGhlIGZpeCBzdHJlbmd0aGVucyB0aGlzIHZhbGlkYXRpb246IGBpZiAoIXNvY2tjX2VyciBcdTAwMjZcdTAwMjYgc29ja2MuZG1hYnVmX2lkIFx1MDAyNlx1MDAyNiAoemMgIT0gTVNHX1pFUk9DT1BZIHx8ICFiaW5kaW5nKSlgLiBOb3cgaXQgKmFsd2F5cyogY2hlY2tzOiBJZiBgZG1hYnVmX2lkYCBpcyBzZXQsIGVpdGhlciBgemNgICptdXN0KiBiZSBgTVNHX1pFUk9DT1BZYCBvciB0aGUgYmluZGluZyBpcyBub3QgbnVsbC4gVGhhdCBlbnN1cmVzIHRoYXQgaWYgemVyby1jb3B5IGlzIHVzZWQgYW5kIGBkbWFidWZfaWRgIGlzIHBhc3NlZCwgdGhlIGFzc29jaWF0ZWQgc3RydWN0dXJlIChgYmluZGluZ2ApIGlzIHZhbGlkLlxuXG5NeSBtYWluIGNvbmNlcm4gd2l0aCBhIHBhdGNoIGxpa2UgdGhpcyBpcyB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGNoYW5nZSBkb2Vzbid0IGludHJvZHVjZSB0aG9zZSByaXNrcywgb3IgY2F1c2UgdW5pbml0aWFsaXplZCB2YWx1ZXMgdG8gYmUgcmVhZCBpbiBzb21lIHJlYWNoYWJsZSBjb2RlIHBhdGguXG5cbkxldCdzIGxvb2sgYXQgdGhlIHZhcmlhYmxlcyBpbnZvbHZlZCBpbiB0aGUgY29uZGl0aW9uOlxuLSAgIGBzb2NrY19lcnJgOiBJbml0aWFsaXplZCB0byAwLiBHb29kLlxuLSAgIGBzb2NrY2A6IEluaXRpYWxpemVkIGF0IGxpbmUgMTEzMiBhbmQgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQuXG4tICAgYHNvY2tjLmRtYWJ1Zl9pZGA6IEluaXRpYWxpemVkIHRvIDAgdGhyb3VnaCBzdHJ1Y3QgaW5pdGlhbGl6YXRpb24sIGFuZCBpdCBvbmx5IGdldHMgcG9wdWxhdGVkIGlmIGBtc2ctXHUwMDNlbXNnX2NvbnRyb2xsZW5gIGlzIHNldC5cbi0gICBgemNgOiBJbml0aWFsaXplZCB0byAwLiBHb29kLlxuLSAgIGBiaW5kaW5nYDogSW5pdGlhbGl6ZWQgdG8gYE5VTExgLlxuXG5Pa2F5LCBldmVyeXRoaW5nIGlzIHByb3Blcmx5IGluaXRpYWxpemVkLiBUaGlzIGlzIHNpbXBseSBzdHJlbmd0aGVuaW5nIHZhbGlkYXRpb24gbG9naWMsIHdoaWNoIG1ha2VzIGl0IHNhZmUuIFRoZSBwYXRjaCBkb2Vzbid0IGludm9sdmUgYW55IGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlIChzbywgbm8gcmlza3MgZm9yIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGluIGRhdGEgcGFzc2VkIGFjcm9zcyB0aGUga2VybmVsL3VzZXIgYm91bmRhcnkpLCBhbmQgaXQncyBub3QgYSBtZW1vcnkgYWxsb2NhdGlvbi9pbml0aWFsaXphdGlvbiBpc3N1ZS5cblxuVGhpcyBpcyBhbGwgKmxvZ2ljKiB2YWxpZGF0aW9uLCByZWFsbHkgdGlnaHRlbmluZyBpbnB1dCB2YWxpZGF0aW9uIGZvciBkZXZtZW0gVENQIHplcm8tY29weSB0cmFuc21pc3Npb24uICBJJ20gbm90IHNlZWluZyBhbnkgc2NlbmFyaW9zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdvdWxkIGJlIHJlYWQgYXMgYSByZXN1bHQgb2YgKnRoaXMqIHBhdGNoLiBUaGVyZWZvcmUsIEknbSBjb25maWRlbnQgdGhhdCBLTVNBTiBmdXp6aW5nIGlzIHVubmVjZXNzYXJ5IGhlcmUuIFRoaXMgaXMgYSBzb2xpZCwgc2FmZSBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNjcsIk91dHB1dFRva2VucyI6MTk1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEwMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDAwOjA5OjA2LjA1MDA4Mjk5M1oiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdGlnaHRlbnMgZXJyb3IgdmFsaWRhdGlvbiBpbiBgdGNwX3NlbmRtc2dfbG9ja2VkKClgIHdoZW4gYHNvY2tjLmRtYWJ1Zl9pZGAgaXMgc3VwcGxpZWQsIGVuc3VyaW5nIHRoYXQgZGV2bWVtIHRyYW5zbWlzc2lvbiBpcyBvbmx5IHBlcm1pdHRlZCB3aGVuIHplcm8tY29weSBpcyBhY3RpdmUgKGB6YyA9PSBNU0dfWkVST0NPUFlgKSBhbmQgYSB2YWxpZCBkZXZtZW0gYmluZGluZyBleGlzdHMgKGBiaW5kaW5nICE9IE5VTExgKS4gQWxsIHZhcmlhYmxlcyBldmFsdWF0ZWQgaW4gdGhpcyBjb25kaXRpb24gKGBzb2NrY19lcnJgLCBgc29ja2NgLCBgemNgLCBhbmQgYGJpbmRpbmdgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZXMuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBtZW1vcnkgY29weWluZyBsb2dpYyBpbiBhIG1hbm5lciB0aGF0IGNvdWxkIGNhdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBpbnZhbGlkIHBvaW50ZXJzIG9yIHN0YXRlIGludmFyaWFudHMgYXJlIGFkZHJlc3NhYmxlIGJ5IHN0YW5kYXJkIGRldGVjdG9ycyAvIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdGlnaHRlbnMgZXJyb3IgdmFsaWRhdGlvbiBpbiBgdGNwX3NlbmRtc2dfbG9ja2VkKClgIHdoZW4gYHNvY2tjLmRtYWJ1Zl9pZGAgaXMgc3VwcGxpZWQsIGVuc3VyaW5nIHRoYXQgZGV2bWVtIHRyYW5zbWlzc2lvbiBpcyBvbmx5IHBlcm1pdHRlZCB3aGVuIHplcm8tY29weSBpcyBhY3RpdmUgKGB6YyA9PSBNU0dfWkVST0NPUFlgKSBhbmQgYSB2YWxpZCBkZXZtZW0gYmluZGluZyBleGlzdHMgKGBiaW5kaW5nICE9IE5VTExgKS4gQWxsIHZhcmlhYmxlcyBldmFsdWF0ZWQgaW4gdGhpcyBjb25kaXRpb24gKGBzb2NrY19lcnJgLCBgc29ja2NgLCBgemNgLCBhbmQgYGJpbmRpbmdgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZXMuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3IgcGFkZGluZyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBtZW1vcnkgY29weWluZyBsb2dpYyBpbiBhIG1hbm5lciB0aGF0IGNvdWxkIGNhdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBpbnZhbGlkIHBvaW50ZXJzIG9yIHN0YXRlIGludmFyaWFudHMgYXJlIGFkZHJlc3NhYmxlIGJ5IHN0YW5kYXJkIGRldGVjdG9ycyAvIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowgbz7c[1] Phase: Succeeded StartedAt: 2026-09-06 00:09:17 +0000 UTC FinishedAt: 2026-09-06 00:09:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgbz7c[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-06 00:09:17 +0000 UTC FinishedAt: 2026-09-06 00:09:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgbz7c[2] Phase: Succeeded StartedAt: 2026-09-06 00:09:17 +0000 UTC FinishedAt: 2026-09-06 03:52:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgbz7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_sendmsg_locked","tcp_sendmsg","net_devmem_get_binding"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"f0e780a4-70c5-478e-b5ab-801e596a21a0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-06 00:09:17 +0000 UTC FinishedAt: 2026-09-06 03:52:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_sendmsg_locked","tcp_sendmsg","net_devmem_get_binding"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"f0e780a4-70c5-478e-b5ab-801e596a21a0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowgbz7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_sendmsg_locked","tcp_sendmsg","net_devmem_get_binding"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"f0e780a4-70c5-478e-b5ab-801e596a21a0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-06 00:09:17 +0000 UTC FinishedAt: 2026-09-06 00:09:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgbz7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_sendmsg_locked","tcp_sendmsg","net_devmem_get_binding"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"f0e780a4-70c5-478e-b5ab-801e596a21a0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-06 00:09:17 +0000 UTC FinishedAt: 2026-09-06 00:09:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowgbz7c/series-workflowgbz7c-convert-artifact-376325417/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgbz7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_sendmsg_locked","tcp_sendmsg","net_devmem_get_binding"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"f0e780a4-70c5-478e-b5ab-801e596a21a0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-06 00:09:27 +0000 UTC FinishedAt: 2026-09-06 00:25:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgbz7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_sendmsg_locked","tcp_sendmsg","net_devmem_get_binding"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"f0e780a4-70c5-478e-b5ab-801e596a21a0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-06 00:09:27 +0000 UTC FinishedAt: 2026-09-06 00:25:39 +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:*3c202369-3c1a-47cc-a7c6-2780315fbe21,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-workflowgbz7c/series-workflowgbz7c-convert-artifact-376325417/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": "a0898b47-564a-47b1-a46e-1d8c55195a8c", "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-workflowgbz7c/series-workflowgbz7c-build-action-258256263/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgbz7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_sendmsg_locked","tcp_sendmsg","net_devmem_get_binding"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"f0e780a4-70c5-478e-b5ab-801e596a21a0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-06 00:09:27 +0000 UTC FinishedAt: 2026-09-06 00:25:29 +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:*3c202369-3c1a-47cc-a7c6-2780315fbe21,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-workflowgbz7c/series-workflowgbz7c-convert-artifact-376325417/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": "a0898b47-564a-47b1-a46e-1d8c55195a8c", "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-workflowgbz7c/series-workflowgbz7c-build-action-258256263/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgbz7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_sendmsg_locked","tcp_sendmsg","net_devmem_get_binding"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"f0e780a4-70c5-478e-b5ab-801e596a21a0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-06 00:25:39 +0000 UTC FinishedAt: 2026-09-06 00:25:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgbz7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_sendmsg_locked","tcp_sendmsg","net_devmem_get_binding"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"f0e780a4-70c5-478e-b5ab-801e596a21a0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-06 00:25:39 +0000 UTC FinishedAt: 2026-09-06 00:25:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgbz7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_sendmsg_locked","tcp_sendmsg","net_devmem_get_binding"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"f0e780a4-70c5-478e-b5ab-801e596a21a0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-06 00:25:39 +0000 UTC FinishedAt: 2026-09-06 00:25:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgbz7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_sendmsg_locked","tcp_sendmsg","net_devmem_get_binding"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"f0e780a4-70c5-478e-b5ab-801e596a21a0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-06 00:25:39 +0000 UTC FinishedAt: 2026-09-06 00:25:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"f0e780a4-70c5-478e-b5ab-801e596a21a0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowgbz7c/series-workflowgbz7c-convert-artifact-163624636/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgbz7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_sendmsg_locked","tcp_sendmsg","net_devmem_get_binding"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"f0e780a4-70c5-478e-b5ab-801e596a21a0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-06 00:25:49 +0000 UTC FinishedAt: 2026-09-06 00:27:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgbz7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_sendmsg_locked","tcp_sendmsg","net_devmem_get_binding"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"f0e780a4-70c5-478e-b5ab-801e596a21a0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-06 00:25:49 +0000 UTC FinishedAt: 2026-09-06 00:27:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a0898b47-564a-47b1-a46e-1d8c55195a8c,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-workflowgbz7c/series-workflowgbz7c-build-action-258256263/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-workflowgbz7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_sendmsg_locked","tcp_sendmsg","net_devmem_get_binding"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"f0e780a4-70c5-478e-b5ab-801e596a21a0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-06 00:27:30 +0000 UTC FinishedAt: 2026-09-06 00:27:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgbz7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_sendmsg_locked","tcp_sendmsg","net_devmem_get_binding"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"f0e780a4-70c5-478e-b5ab-801e596a21a0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-06 00:27:30 +0000 UTC FinishedAt: 2026-09-06 00:27:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgbz7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_sendmsg_locked","tcp_sendmsg","net_devmem_get_binding"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"f0e780a4-70c5-478e-b5ab-801e596a21a0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-06 00:27:30 +0000 UTC FinishedAt: 2026-09-06 00:47:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgbz7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_sendmsg_locked","tcp_sendmsg","net_devmem_get_binding"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"f0e780a4-70c5-478e-b5ab-801e596a21a0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-06 00:27:30 +0000 UTC FinishedAt: 2026-09-06 00:47:25 +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:*3c202369-3c1a-47cc-a7c6-2780315fbe21,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-workflowgbz7c/series-workflowgbz7c-convert-artifact-163624636/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": "704c4e15-3194-420f-8233-2b480611ca17", "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-workflowgbz7c/series-workflowgbz7c-build-action-3652485400/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgbz7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_sendmsg_locked","tcp_sendmsg","net_devmem_get_binding"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"f0e780a4-70c5-478e-b5ab-801e596a21a0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-06 00:27:30 +0000 UTC FinishedAt: 2026-09-06 00:47:15 +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:*3c202369-3c1a-47cc-a7c6-2780315fbe21,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-workflowgbz7c/series-workflowgbz7c-convert-artifact-163624636/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": "704c4e15-3194-420f-8233-2b480611ca17", "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-workflowgbz7c/series-workflowgbz7c-build-action-3652485400/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgbz7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_sendmsg_locked","tcp_sendmsg","net_devmem_get_binding"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"f0e780a4-70c5-478e-b5ab-801e596a21a0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-06 00:47:25 +0000 UTC FinishedAt: 2026-09-06 00:47:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgbz7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_sendmsg_locked","tcp_sendmsg","net_devmem_get_binding"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"f0e780a4-70c5-478e-b5ab-801e596a21a0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-06 00:47:25 +0000 UTC FinishedAt: 2026-09-06 00:47:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgbz7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_sendmsg_locked","tcp_sendmsg","net_devmem_get_binding"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"f0e780a4-70c5-478e-b5ab-801e596a21a0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-06 00:47:25 +0000 UTC FinishedAt: 2026-09-06 00:49:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgbz7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_sendmsg_locked","tcp_sendmsg","net_devmem_get_binding"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"f0e780a4-70c5-478e-b5ab-801e596a21a0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-06 00:47:25 +0000 UTC FinishedAt: 2026-09-06 00:49:33 +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:*704c4e15-3194-420f-8233-2b480611ca17,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-workflowgbz7c/series-workflowgbz7c-build-action-3652485400/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-workflowgbz7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_sendmsg_locked","tcp_sendmsg","net_devmem_get_binding"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"f0e780a4-70c5-478e-b5ab-801e596a21a0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-06 00:49:43 +0000 UTC FinishedAt: 2026-09-06 03:52:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgbz7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_sendmsg_locked","tcp_sendmsg","net_devmem_get_binding"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"f0e780a4-70c5-478e-b5ab-801e596a21a0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-06 00:49:43 +0000 UTC FinishedAt: 2026-09-06 03:52:33 +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":["tcp_sendmsg_locked","tcp_sendmsg","net_devmem_get_binding"],"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:*a0898b47-564a-47b1-a46e-1d8c55195a8c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*704c4e15-3194-420f-8233-2b480611ca17,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-workflowgbz7c/series-workflowgbz7c-build-action-258256263/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-workflowgbz7c/series-workflowgbz7c-build-action-3652485400/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowgbz7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_sendmsg_locked","tcp_sendmsg","net_devmem_get_binding"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"f0e780a4-70c5-478e-b5ab-801e596a21a0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-06 00:49:43 +0000 UTC FinishedAt: 2026-09-06 00:49:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgbz7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_sendmsg_locked","tcp_sendmsg","net_devmem_get_binding"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"f0e780a4-70c5-478e-b5ab-801e596a21a0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-06 00:49:43 +0000 UTC FinishedAt: 2026-09-06 00:49:48 +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":["tcp_sendmsg_locked","tcp_sendmsg","net_devmem_get_binding"],"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-workflowgbz7c/series-workflowgbz7c-convert-artifact-2230939013/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgbz7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_sendmsg_locked","tcp_sendmsg","net_devmem_get_binding"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"f0e780a4-70c5-478e-b5ab-801e596a21a0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-06 00:49:43 +0000 UTC FinishedAt: 2026-09-06 00:49:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgbz7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_sendmsg_locked","tcp_sendmsg","net_devmem_get_binding"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"f0e780a4-70c5-478e-b5ab-801e596a21a0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-06 00:49:43 +0000 UTC FinishedAt: 2026-09-06 00:49:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgbz7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_sendmsg_locked","tcp_sendmsg","net_devmem_get_binding"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"f0e780a4-70c5-478e-b5ab-801e596a21a0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-06 00:49:43 +0000 UTC FinishedAt: 2026-09-06 00:49:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgbz7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_sendmsg_locked","tcp_sendmsg","net_devmem_get_binding"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"f0e780a4-70c5-478e-b5ab-801e596a21a0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-06 00:49:53 +0000 UTC FinishedAt: 2026-09-06 03:52:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgbz7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_sendmsg_locked","tcp_sendmsg","net_devmem_get_binding"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8ab1afb2eb246ab15b301cd255b5943d208a93c1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","NET_DEVMEM","DMA_SHARED_BUFFER","PAGE_POOL"],"series_id":"f0e780a4-70c5-478e-b5ab-801e596a21a0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-06 00:49:53 +0000 UTC FinishedAt: 2026-09-06 03:52:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a0898b47-564a-47b1-a46e-1d8c55195a8c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*704c4e15-3194-420f-8233-2b480611ca17,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-workflowgbz7c/series-workflowgbz7c-build-action-258256263/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-workflowgbz7c/series-workflowgbz7c-build-action-3652485400/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-workflowgbz7c/series-workflowgbz7c-convert-artifact-2230939013/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,}