Name: series-workflowpn2zs Phase: Running StartedAt: 2026-07-10 04:14:27 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn2zs[0] Phase: Running StartedAt: 2026-07-10 04:14:27 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn2zs[0].run-triage Phase: Running StartedAt: 2026-07-10 04:14:27 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpn2zs[0].run-triage(0) Phase: Running StartedAt: 2026-07-10 04:14:27 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "36ffa86c42f91c8a57071e024afc4ffb51a8958f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT_KASAN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "36ffa86c42f91c8a57071e024afc4ffb51a8958f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT_KASAN" ], "series_id": "9d9edeae-a586-4cc9-9533-36aa44df3782" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "emit_kasan_check", "emit_st", "emit_atomic_ld_st", "adjust_insn_aux_data", "bpf_patch_insn_data", "mark_non_stack_access", "is_mem_insn" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA0OjMyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVRfS0FTQU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlbWl0X2thc2FuX2NoZWNrJiMzNDssCiAgICAmIzM0O2VtaXRfc3QmIzM0OywKICAgICYjMzQ7ZW1pdF9hdG9taWNfbGRfc3QmIzM0OywKICAgICYjMzQ7YWRqdXN0X2luc25fYXV4X2RhdGEmIzM0OywKICAgICYjMzQ7YnBmX3BhdGNoX2luc25fZGF0YSYjMzQ7LAogICAgJiMzNDttYXJrX25vbl9zdGFja19hY2Nlc3MmIzM0OywKICAgICYjMzQ7aXNfbWVtX2luc24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBLQVNBTiBzdXBwb3J0IGZvciB0aGUgQlBGIEpJVCBjb21waWxlciBvbiB4ODYuIEl0IG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gdHJhY2sgbm9uLXN0YWNrIG1lbW9yeSBhY2Nlc3NlcyBhbmQgdXBkYXRlcyB0aGUgeDg2IEpJVCBjb21waWxlciB0byBlbWl0IEtBU0FOIGNoZWNrcyBmb3IgdGhlc2UgYWNjZXNzZXMuIFRoaXMgaW50cm9kdWNlcyBuZXcgY29yZSBsb2dpYyBpbiB0aGUgSklUIGNvbXBpbGVyIGFuZCB2ZXJpZmllciwgd2hpY2ggc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDQ6MzI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1NWZmZGZkNWM1YTA5YTQwZjIyMzc1NmNmYjhiY2U5OWUyMDIwYWU0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMTAgMDQ6MzI6MTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWdcbmluZGV4IGJkYWQ5MGYyMTBlNGJmLi43MDVhOWFiODVmM2E5NSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L0tjb25maWdcbkBAIC0yMzMsNiAmIzQzOzIzMyw3IEBAIGNvbmZpZyBYODZcbiBcdHNlbGVjdCBIQVZFX1NBTVBMRV9GVFJBQ0VfRElSRUNUXHRpZiBYODZfNjRcbiBcdHNlbGVjdCBIQVZFX1NBTVBMRV9GVFJBQ0VfRElSRUNUX01VTFRJXHRpZiBYODZfNjRcbiBcdHNlbGVjdCBIQVZFX0VCUEZfSklUXG4mIzQzO1x0c2VsZWN0IEhBVkVfRUJQRl9KSVRfS0FTQU5cdFx0aWYgWDg2XzY0XG4gXHRzZWxlY3QgSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTU1xuIFx0c2VsZWN0IEhBVkVfRUlTQVx0XHRcdGlmIFg4Nl8zMlxuIFx0c2VsZWN0IEhBVkVfRVhJVF9USFJFQURcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbmluZGV4IGRlNzUxNWVhMWJlYWU4Li45ZGJlM2E1MjQ0NGUzYyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG5AQCAtMjEsNiAmIzQzOzIxLDE3IEBAXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3Vud2luZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2NmaS5oXHUwMDNlXG4gXG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfSklUX0tBU0FOKVxuJiM0Mzt2b2lkIF9fYXNhbl9sb2FkMSh2b2lkICpwKTtcbiYjNDM7dm9pZCBfX2FzYW5fc3RvcmUxKHZvaWQgKnApO1xuJiM0Mzt2b2lkIF9fYXNhbl9sb2FkMih2b2lkICpwKTtcbiYjNDM7dm9pZCBfX2FzYW5fc3RvcmUyKHZvaWQgKnApO1xuJiM0Mzt2b2lkIF9fYXNhbl9sb2FkNCh2b2lkICpwKTtcbiYjNDM7dm9pZCBfX2FzYW5fc3RvcmU0KHZvaWQgKnApO1xuJiM0Mzt2b2lkIF9fYXNhbl9sb2FkOCh2b2lkICpwKTtcbiYjNDM7dm9pZCBfX2FzYW5fc3RvcmU4KHZvaWQgKnApO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gc3RhdGljIGJvb2wgYWxsX2NhbGxlZV9yZWdzX3VzZWRbNF0gPSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZX07XG4gXG4gc3RhdGljIHU4ICplbWl0X2NvZGUodTggKnB0ciwgdTMyIGJ5dGVzLCB1bnNpZ25lZCBpbnQgbGVuKVxuQEAgLTExMTAsNiAmIzQzOzExMjEsOTAgQEAgc3RhdGljIHZvaWQgbWF5YmVfZW1pdF8xbW9kKHU4ICoqcHByb2csIHUzMiByZWcsIGJvb2wgaXM2NClcbiBcdCpwcHJvZyA9IHByb2c7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGVtaXRfa2FzYW5fY2hlY2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTggKipwcHJvZyxcbiYjNDM7XHRcdFx0ICAgIHUzMiBhZGRyX3JlZywgc3RydWN0IGJwZl9pbnNuICppbnNuLCB1OCAqaXAsXG4mIzQzO1x0XHRcdCAgICBib29sIGlzX3dyaXRlLCBib29sIGFjY2Vzc2VzX3N0YWNrX29ubHkpXG4mIzQzO3tcbiYjNDM7I2lmZGVmIENPTkZJR19CUEZfSklUX0tBU0FOXG4mIzQzO1x0dTMyIGJwZl9zaXplID0gQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKTtcbiYjNDM7XHRzMzIgb2ZmID0gaW5zbi1cdTAwM2VvZmY7XG4mIzQzO1x0dTggKnByb2cgPSAqcHByb2c7XG4mIzQzO1x0dm9pZCAqa2FzYW5fZnVuYztcbiYjNDM7XG4mIzQzO1x0aWYgKCFlbnYpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKGFjY2Vzc2VzX3N0YWNrX29ubHkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0LyogRGVyaXZlIEtBU0FOIGNoZWNrIGZ1bmN0aW9uIGZyb20gYWNjZXNzIHR5cGUgYW5kIHNpemUgKi9cbiYjNDM7XHRzd2l0Y2ggKGJwZl9zaXplKSB7XG4mIzQzO1x0Y2FzZSBCUEZfQjpcbiYjNDM7XHRcdGthc2FuX2Z1bmMgPSBpc193cml0ZSA/IF9fYXNhbl9zdG9yZTEgOiBfX2FzYW5fbG9hZDE7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEJQRl9IOlxuJiM0MztcdFx0a2FzYW5fZnVuYyA9IGlzX3dyaXRlID8gX19hc2FuX3N0b3JlMiA6IF9fYXNhbl9sb2FkMjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQlBGX1c6XG4mIzQzO1x0XHRrYXNhbl9mdW5jID0gaXNfd3JpdGUgPyBfX2FzYW5fc3RvcmU0IDogX19hc2FuX2xvYWQ0O1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfRFc6XG4mIzQzO1x0XHRrYXNhbl9mdW5jID0gaXNfd3JpdGUgPyBfX2FzYW5fc3RvcmU4IDogX19hc2FuX2xvYWQ4O1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogU2F2ZSByYXggKi9cbiYjNDM7XHRFTUlUMSgweDUwKTtcbiYjNDM7XHQvKiBTYXZlIHJjeCAqL1xuJiM0MztcdEVNSVQxKDB4NTEpO1xuJiM0MztcdC8qIFNhdmUgcmR4ICovXG4mIzQzO1x0RU1JVDEoMHg1Mik7XG4mIzQzO1x0LyogU2F2ZSByc2kgKi9cbiYjNDM7XHRFTUlUMSgweDU2KTtcbiYjNDM7XHQvKiBTYXZlIHJkaSAqL1xuJiM0MztcdEVNSVQxKDB4NTcpO1xuJiM0MztcdC8qIFNhdmUgcjggKi9cbiYjNDM7XHRFTUlUMigweDQxLCAweDUwKTtcbiYjNDM7XHQvKiBTYXZlIHI5ICovXG4mIzQzO1x0RU1JVDIoMHg0MSwgMHg1MSk7XG4mIzQzO1xuJiM0MztcdC8qIG1vdiByZGksIGFkZHJfcmVnICovXG4mIzQzO1x0RU1JVF9tb3YoQlBGX1JFR18xLCBhZGRyX3JlZyk7XG4mIzQzO1xuJiM0MztcdC8qIGFkZCByZGksIG9mZiAoaWYgb2Zmc2V0IGlzIG5vbi16ZXJvKSAqL1xuJiM0MztcdGlmIChvZmYpIHtcbiYjNDM7XHRcdGlmIChpc19pbW04KG9mZikpIHtcbiYjNDM7XHRcdFx0LyogYWRkIHJkaSwgaW1tOCAqL1xuJiM0MztcdFx0XHRFTUlUNCgweDQ4LCAweDgzLCAweEM3LCAodTgpb2ZmKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdC8qIGFkZCByZGksIGltbTMyICovXG4mIzQzO1x0XHRcdEVNSVQzX29mZjMyKDB4NDgsIDB4ODEsIDB4QzcsIG9mZik7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBBZGp1c3QgaXAgdG8gYWNjb3VudCBmb3IgdGhlIGluc3RydW1lbnRhdGlvbiBnZW5lcmF0ZWQgc28gZmFyICovXG4mIzQzO1x0aXAgJiM0Mzs9IChwcm9nIC0gKnBwcm9nKTtcbiYjNDM7XHQvKiBXZSBlbWl0IGEgY2FsbCwgc28gdXBkYXRlIGNhbGwgZGVwdGggY291bnRpbmcgKi9cbiYjNDM7XHRpcCAmIzQzOz0geDg2X2NhbGxfZGVwdGhfZW1pdF9hY2NvdW50aW5nKFx1MDAyNnByb2csIGthc2FuX2Z1bmMsIGlwKTtcbiYjNDM7XHQvKiBjYWxsIGthc2FuX2Z1bmMgKi9cbiYjNDM7XHRpZiAoZW1pdF9jYWxsKFx1MDAyNnByb2csIGthc2FuX2Z1bmMsIGlwKSlcbiYjNDM7XHRcdHJldHVybiAtRVJBTkdFO1xuJiM0MztcbiYjNDM7XHRFTUlUMigweDQxLCAweDU5KTtcbiYjNDM7XHRFTUlUMigweDQxLCAweDU4KTtcbiYjNDM7XHRFTUlUMSgweDVGKTtcbiYjNDM7XHRFTUlUMSgweDVFKTtcbiYjNDM7XHRFTUlUMSgweDVBKTtcbiYjNDM7XHRFTUlUMSgweDU5KTtcbiYjNDM7XHRFTUlUMSgweDU4KTtcbiYjNDM7XG4mIzQzO1x0KnBwcm9nID0gcHJvZztcbiYjNDM7I2VuZGlmIC8qIENPTkZJR19CUEZfSklUX0tBU0FOICovXG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gLyogTERYOiBkc3RfcmVnID0gKih1OCopKHNyY19yZWcgJiM0Mzsgb2ZmKSAqL1xuIHN0YXRpYyB2b2lkIGVtaXRfbGR4KHU4ICoqcHByb2csIHUzMiBzaXplLCB1MzIgZHN0X3JlZywgdTMyIHNyY19yZWcsIGludCBvZmYpXG4ge1xuQEAgLTEzMTUsNiAmIzQzOzE0MTAsNjQgQEAgc3RhdGljIHZvaWQgZW1pdF9zdF9pbmRleCh1OCAqKnBwcm9nLCB1MzIgc2l6ZSwgdTMyIGRzdF9yZWcsIHUzMiBpbmRleF9yZWcsIGludFxuIFx0KnBwcm9nID0gcHJvZztcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGVtaXRfc3QodTggKipwcHJvZywgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpbnQgZHN0X3JlZyxcbiYjNDM7XHRcdCAgICBzMzIgb3V0Z29pbmdfYXJnX2Jhc2UsIHUxNiBvdXRnb2luZ19yc3ApXG4mIzQzO3tcbiYjNDM7XHRzMzIgaW1tMzIgPSBpbnNuLVx1MDAzZWltbTtcbiYjNDM7XHR1OCAqcHJvZyA9ICpwcHJvZztcbiYjNDM7XHRzMzIgaW5zbl9vZmY7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSkge1xuJiM0MztcdGNhc2UgQlBGX0I6XG4mIzQzO1x0XHRpZiAoaXNfZXJlZyhkc3RfcmVnKSlcbiYjNDM7XHRcdFx0RU1JVDIoMHg0MSwgMHhDNik7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdEVNSVQxKDB4QzYpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBCUEZfSDpcbiYjNDM7XHRcdGlmIChpc19lcmVnKGRzdF9yZWcpKVxuJiM0MztcdFx0XHRFTUlUMygweDY2LCAweDQxLCAweEM3KTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0RU1JVDIoMHg2NiwgMHhDNyk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEJQRl9XOlxuJiM0MztcdFx0aWYgKGlzX2VyZWcoZHN0X3JlZykpXG4mIzQzO1x0XHRcdEVNSVQyKDB4NDEsIDB4QzcpO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRFTUlUMSgweEM3KTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQlBGX0RXOlxuJiM0MztcdFx0aWYgKGRzdF9yZWcgPT0gQlBGX1JFR19QQVJBTVMgXHUwMDI2XHUwMDI2IGluc24tXHUwMDNlb2ZmID09IC04KSB7XG4mIzQzO1x0XHRcdC8qIEFyZyA2OiBzdG9yZSBpbW1lZGlhdGUgaW4gcjkgcmVnaXN0ZXIgKi9cbiYjNDM7XHRcdFx0ZW1pdF9tb3ZfaW1tNjQoXHUwMDI2cHJvZywgWDg2X1JFR19SOSwgaW1tMzIgXHUwMDNlXHUwMDNlIDMxLFxuJiM0MztcdFx0XHRcdCAgICAgICAodTMyKWltbTMyKTtcbiYjNDM7XHRcdFx0KnBwcm9nID0gcHJvZztcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0RU1JVDIoYWRkXzFtb2QoMHg0OCwgZHN0X3JlZyksIDB4QzcpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpbnNuX29mZiA9IGluc24tXHUwMDNlb2ZmO1xuJiM0MztcdGlmIChkc3RfcmVnID09IEJQRl9SRUdfUEFSQU1TKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogQXJncyA3JiM0Mzs6IHJldmVyc2UgQlBGIG5lZ2F0aXZlIG9mZnNldHMgdG9cbiYjNDM7XHRcdCAqIHg4NiBwb3NpdGl2ZSByc3Agb2Zmc2V0cy5cbiYjNDM7XHRcdCAqIEJQRiBvZmY9LTE2IOKGkiBbcnNwJiM0MzswXSwgb2ZmPS0yNCDihpIgW3JzcCYjNDM7OF0sIC4uLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpbnNuX29mZiA9IG91dGdvaW5nX2FyZ19iYXNlIC0gb3V0Z29pbmdfcnNwIC1cbiYjNDM7XHRcdFx0aW5zbl9vZmYgLSAxNjtcbiYjNDM7XHRcdGRzdF9yZWcgPSBCUEZfUkVHX0ZQO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoaXNfaW1tOChpbnNuX29mZikpXG4mIzQzO1x0XHRFTUlUMihhZGRfMXJlZygweDQwLCBkc3RfcmVnKSwgaW5zbl9vZmYpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdEVNSVQxX29mZjMyKGFkZF8xcmVnKDB4ODAsIGRzdF9yZWcpLCBpbnNuX29mZik7XG4mIzQzO1xuJiM0MztcdEVNSVQoaW1tMzIsIGJwZl9zaXplX3RvX3g4Nl9ieXRlcyhCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpKSk7XG4mIzQzO1x0KnBwcm9nID0gcHJvZztcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBlbWl0X3N0X3IxMih1OCAqKnBwcm9nLCB1MzIgc2l6ZSwgdTMyIGRzdF9yZWcsIGludCBvZmYsIGludCBpbW0pXG4ge1xuIFx0ZW1pdF9zdF9pbmRleChwcHJvZywgc2l6ZSwgZHN0X3JlZywgWDg2X1JFR19SMTIsIG9mZiwgaW1tKTtcbkBAIC0xNDIzLDE3ICYjNDM7MTU3NiwzMSBAQCBzdGF0aWMgaW50IGVtaXRfYXRvbWljX3Jtd19pbmRleCh1OCAqKnBwcm9nLCB1MzIgYXRvbWljX29wLCB1MzIgc2l6ZSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IGVtaXRfYXRvbWljX2xkX3N0KHU4ICoqcHByb2csIHUzMiBhdG9taWNfb3AsIHUzMiBkc3RfcmVnLFxuLVx0XHRcdCAgICAgdTMyIHNyY19yZWcsIHMxNiBvZmYsIHU4IGJwZl9zaXplKVxuJiM0MztzdGF0aWMgaW50IGVtaXRfYXRvbWljX2xkX3N0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHU4ICoqcHByb2csXG4mIzQzO1x0XHRcdCAgICAgc3RydWN0IGJwZl9pbnNuICppbnNuLCB1OCAqaXAsIHUzMiBkc3RfcmVnLFxuJiM0MztcdFx0XHQgICAgIHUzMiBzcmNfcmVnLCBib29sIGFjY2Vzc2VzX3N0YWNrX29ubHkpXG4ge1xuJiM0MztcdHUzMiBhdG9taWNfb3AgPSBpbnNuLVx1MDAzZWltbTtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiBcdHN3aXRjaCAoYXRvbWljX29wKSB7XG4gXHRjYXNlIEJQRl9MT0FEX0FDUTpcbiYjNDM7XHRcdGVyciA9IGVtaXRfa2FzYW5fY2hlY2soZW52LCBwcHJvZywgc3JjX3JlZywgaW5zbiwgaXAsIGZhbHNlLFxuJiM0MztcdFx0XHRcdCAgICAgICBhY2Nlc3Nlc19zdGFja19vbmx5KTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4gXHRcdC8qIGRzdF9yZWcgPSBzbXBfbG9hZF9hY3F1aXJlKHNyY19yZWcgJiM0Mzsgb2ZmMTYpICovXG4tXHRcdGVtaXRfbGR4KHBwcm9nLCBicGZfc2l6ZSwgZHN0X3JlZywgc3JjX3JlZywgb2ZmKTtcbiYjNDM7XHRcdGVtaXRfbGR4KHBwcm9nLCBCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpLCBkc3RfcmVnLCBzcmNfcmVnLFxuJiM0MztcdFx0XHQgaW5zbi1cdTAwM2VvZmYpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgQlBGX1NUT1JFX1JFTDpcbiYjNDM7XHRcdGVyciA9IGVtaXRfa2FzYW5fY2hlY2soZW52LCBwcHJvZywgZHN0X3JlZywgaW5zbiwgaXAsIHRydWUsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGFjY2Vzc2VzX3N0YWNrX29ubHkpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0Lyogc21wX3N0b3JlX3JlbGVhc2UoZHN0X3JlZyAmIzQzOyBvZmYxNiwgc3JjX3JlZykgKi9cbi1cdFx0ZW1pdF9zdHgocHByb2csIGJwZl9zaXplLCBkc3RfcmVnLCBzcmNfcmVnLCBvZmYpO1xuJiM0MztcdFx0ZW1pdF9zdHgocHByb2csIEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSksIGRzdF9yZWcsIHNyY19yZWcsXG4mIzQzO1x0XHRcdCBpbnNuLVx1MDAzZW9mZik7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cHJfZXJyKFwmIzM0O2JwZl9qaXQ6IHVua25vd24gYXRvbWljIGxvYWQvc3RvcmUgb3Bjb2RlICUwMnhcXG5cJiMzNDssXG5AQCAtMTgxMSwxMCAmIzQzOzE5NzgsMTIgQEAgc3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICpcbiBcdFx0Y29uc3QgczMyIGltbTMyID0gaW5zbi1cdTAwM2VpbW07XG4gXHRcdHUzMiBkc3RfcmVnID0gaW5zbi1cdTAwM2Vkc3RfcmVnO1xuIFx0XHR1MzIgc3JjX3JlZyA9IGluc24tXHUwMDNlc3JjX3JlZztcbiYjNDM7XHRcdGJvb2wgYWNjZXNzZXNfc3RhY2tfb25seTtcbiBcdFx0dTggYjIgPSAwLCBiMyA9IDA7XG4gXHRcdHU4ICpzdGFydF9vZl9sZHg7XG4gXHRcdHM2NCBqbXBfb2Zmc2V0O1xuIFx0XHRzMzIgaW5zbl9vZmY7XG4mIzQzO1x0XHRpbnQgaW5zbl9pZHg7XG4gXHRcdHU4IGptcF9jb25kO1xuIFx0XHR1OCAqZnVuYztcbiBcdFx0aW50IG5vcHM7XG5AQCAtMTgzMSw2ICYjNDM7MjAwMCwxMCBAQCBzdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKlxuIFx0XHRcdEVNSVRfRU5EQlIoKTtcbiBcbiBcdFx0aXAgPSBpbWFnZSAmIzQzOyBhZGRyc1tpIC0gMV0gJiM0MzsgKHByb2cgLSB0ZW1wKTtcbiYjNDM7XHRcdGluc25faWR4ID0gaSAtIDEgJiM0MzsgYnBmX3Byb2ctXHUwMDNlYXV4LVx1MDAzZXN1YnByb2dfc3RhcnQ7XG4mIzQzO1x0XHRhY2Nlc3Nlc19zdGFja19vbmx5ID1cbiYjNDM7XHRcdFx0ZW52ID8gIWVudi1cdTAwM2VpbnNuX2F1eF9kYXRhW2luc25faWR4XS5ub25fc3RhY2tfYWNjZXNzIDpcbiYjNDM7XHRcdFx0ICAgICAgZmFsc2U7XG4gXG4gXHRcdHN3aXRjaCAoaW5zbi1cdTAwM2Vjb2RlKSB7XG4gXHRcdFx0LyogQUxVICovXG5AQCAtMjIwNyw0OSAmIzQzOzIzODAsMTcgQEAgc3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICpcbiBcdFx0XHRFTUlUX0xGRU5DRSgpO1xuIFx0XHRcdGJyZWFrO1xuIFxuLVx0XHRcdC8qIFNUOiAqKHU4KikoZHN0X3JlZyAmIzQzOyBvZmYpID0gaW1tICovXG4gXHRcdGNhc2UgQlBGX1NUIHwgQlBGX01FTSB8IEJQRl9COlxuLVx0XHRcdGlmIChpc19lcmVnKGRzdF9yZWcpKVxuLVx0XHRcdFx0RU1JVDIoMHg0MSwgMHhDNik7XG4tXHRcdFx0ZWxzZVxuLVx0XHRcdFx0RU1JVDEoMHhDNik7XG4tXHRcdFx0Z290byBzdDtcbiBcdFx0Y2FzZSBCUEZfU1QgfCBCUEZfTUVNIHwgQlBGX0g6XG4tXHRcdFx0aWYgKGlzX2VyZWcoZHN0X3JlZykpXG4tXHRcdFx0XHRFTUlUMygweDY2LCAweDQxLCAweEM3KTtcbi1cdFx0XHRlbHNlXG4tXHRcdFx0XHRFTUlUMigweDY2LCAweEM3KTtcbi1cdFx0XHRnb3RvIHN0O1xuIFx0XHRjYXNlIEJQRl9TVCB8IEJQRl9NRU0gfCBCUEZfVzpcbi1cdFx0XHRpZiAoaXNfZXJlZyhkc3RfcmVnKSlcbi1cdFx0XHRcdEVNSVQyKDB4NDEsIDB4QzcpO1xuLVx0XHRcdGVsc2Vcbi1cdFx0XHRcdEVNSVQxKDB4QzcpO1xuLVx0XHRcdGdvdG8gc3Q7XG4gXHRcdGNhc2UgQlBGX1NUIHwgQlBGX01FTSB8IEJQRl9EVzpcbi1cdFx0XHRpZiAoZHN0X3JlZyA9PSBCUEZfUkVHX1BBUkFNUyBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VvZmYgPT0gLTgpIHtcbi1cdFx0XHRcdC8qIEFyZyA2OiBzdG9yZSBpbW1lZGlhdGUgaW4gcjkgcmVnaXN0ZXIgKi9cbi1cdFx0XHRcdGVtaXRfbW92X2ltbTY0KFx1MDAyNnByb2csIFg4Nl9SRUdfUjksIGltbTMyIFx1MDAzZVx1MDAzZSAzMSwgKHUzMilpbW0zMik7XG4tXHRcdFx0XHRicmVhaztcbi1cdFx0XHR9XG4tXHRcdFx0RU1JVDIoYWRkXzFtb2QoMHg0OCwgZHN0X3JlZyksIDB4QzcpO1xuLVxuLXN0Olx0XHRcdGluc25fb2ZmID0gaW5zbi1cdTAwM2VvZmY7XG4tXHRcdFx0aWYgKGRzdF9yZWcgPT0gQlBGX1JFR19QQVJBTVMpIHtcbi1cdFx0XHRcdC8qXG4tXHRcdFx0XHQgKiBBcmdzIDcmIzQzOzogcmV2ZXJzZSBCUEYgbmVnYXRpdmUgb2Zmc2V0cyB0b1xuLVx0XHRcdFx0ICogeDg2IHBvc2l0aXZlIHJzcCBvZmZzZXRzLlxuLVx0XHRcdFx0ICogQlBGIG9mZj0tMTYg4oaSIFtyc3AmIzQzOzBdLCBvZmY9LTI0IOKGkiBbcnNwJiM0Mzs4XSwgLi4uXG4tXHRcdFx0XHQgKi9cbi1cdFx0XHRcdGluc25fb2ZmID0gb3V0Z29pbmdfYXJnX2Jhc2UgLSBvdXRnb2luZ19yc3AgLSBpbnNuX29mZiAtIDE2O1xuLVx0XHRcdFx0ZHN0X3JlZyA9IEJQRl9SRUdfRlA7XG4tXHRcdFx0fVxuLVx0XHRcdGlmIChpc19pbW04KGluc25fb2ZmKSlcbi1cdFx0XHRcdEVNSVQyKGFkZF8xcmVnKDB4NDAsIGRzdF9yZWcpLCBpbnNuX29mZik7XG4tXHRcdFx0ZWxzZVxuLVx0XHRcdFx0RU1JVDFfb2ZmMzIoYWRkXzFyZWcoMHg4MCwgZHN0X3JlZyksIGluc25fb2ZmKTtcbiYjNDM7XHRcdFx0ZXJyID0gZW1pdF9rYXNhbl9jaGVjayhlbnYsIFx1MDAyNnByb2csIGRzdF9yZWcsIGluc24sIGlwLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHRydWUsIGFjY2Vzc2VzX3N0YWNrX29ubHkpO1xuJiM0MztcdFx0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRcdHJldHVybiBlcnI7XG4gXG4tXHRcdFx0RU1JVChpbW0zMiwgYnBmX3NpemVfdG9feDg2X2J5dGVzKEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSkpKTtcbiYjNDM7XHRcdFx0ZW1pdF9zdChcdTAwMjZwcm9nLCBpbnNuLCBkc3RfcmVnLCBvdXRnb2luZ19hcmdfYmFzZSxcbiYjNDM7XHRcdFx0XHRvdXRnb2luZ19yc3ApO1xuIFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRcdC8qIFNUWDogKih1OCopKGRzdF9yZWcgJiM0Mzsgb2ZmKSA9IHNyY19yZWcgKi9cbkBAIC0yMjY3LDYgJiM0MzsyNDA4LDEwIEBAIHN0Olx0XHRcdGluc25fb2ZmID0gaW5zbi1cdTAwM2VvZmY7XG4gXHRcdFx0XHRpbnNuX29mZiA9IG91dGdvaW5nX2FyZ19iYXNlIC0gb3V0Z29pbmdfcnNwIC0gaW5zbl9vZmYgLSAxNjtcbiBcdFx0XHRcdGRzdF9yZWcgPSBCUEZfUkVHX0ZQO1xuIFx0XHRcdH1cbiYjNDM7XHRcdFx0ZXJyID0gZW1pdF9rYXNhbl9jaGVjayhlbnYsIFx1MDAyNnByb2csIGRzdF9yZWcsIGluc24sIGlwLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHRydWUsIGFjY2Vzc2VzX3N0YWNrX29ubHkpO1xuJiM0MztcdFx0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdFx0ZW1pdF9zdHgoXHUwMDI2cHJvZywgQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSwgZHN0X3JlZywgc3JjX3JlZywgaW5zbl9vZmYpO1xuIFx0XHRcdGJyZWFrO1xuIFxuQEAgLTI0MjgsNiAmIzQzOzI1NzMsMTIgQEAgc3Q6XHRcdFx0aW5zbl9vZmYgPSBpbnNuLVx1MDAzZW9mZjtcbiBcdFx0XHRcdC8qIHBvcHVsYXRlIGptcF9vZmZzZXQgZm9yIEpBRSBhYm92ZSB0byBqdW1wIHRvIHN0YXJ0X29mX2xkeCAqL1xuIFx0XHRcdFx0c3RhcnRfb2ZfbGR4ID0gcHJvZztcbiBcdFx0XHRcdGVuZF9vZl9qbXBbLTFdID0gc3RhcnRfb2ZfbGR4IC0gZW5kX29mX2ptcDtcbiYjNDM7XHRcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0XHRlcnIgPSBlbWl0X2thc2FuX2NoZWNrKGVudiwgXHUwMDI2cHJvZywgc3JjX3JlZyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIGluc24sIGlwLCBmYWxzZSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIGFjY2Vzc2VzX3N0YWNrX29ubHkpO1xuJiM0MztcdFx0XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHRcdH1cbiBcdFx0XHRpZiAoQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNU1ggfHxcbiBcdFx0XHQgICAgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfTUVNU1gpXG5AQCAtMjQ4OSwxNSAmIzQzOzI2NDAsMTYgQEAgc3Q6XHRcdFx0aW5zbl9vZmYgPSBpbnNuLVx1MDAzZW9mZjtcbiBcdFx0XHR9XG4gXHRcdFx0ZmFsbHRocm91Z2g7XG4gXHRcdGNhc2UgQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfVzpcbi1cdFx0Y2FzZSBCUEZfU1RYIHwgQlBGX0FUT01JQyB8IEJQRl9EVzpcbi1cdFx0XHRpZiAoaW5zbi1cdTAwM2VpbW0gPT0gKEJQRl9BTkQgfCBCUEZfRkVUQ0gpIHx8XG4tXHRcdFx0ICAgIGluc24tXHUwMDNlaW1tID09IChCUEZfT1IgfCBCUEZfRkVUQ0gpIHx8XG4tXHRcdFx0ICAgIGluc24tXHUwMDNlaW1tID09IChCUEZfWE9SIHwgQlBGX0ZFVENIKSkge1xuLVx0XHRcdFx0Ym9vbCBpczY0ID0gQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfRFc7XG4tXHRcdFx0XHR1MzIgcmVhbF9zcmNfcmVnID0gc3JjX3JlZztcbi1cdFx0XHRcdHUzMiByZWFsX2RzdF9yZWcgPSBkc3RfcmVnO1xuLVx0XHRcdFx0dTggKmJyYW5jaF90YXJnZXQ7XG4tXG4mIzQzO1x0XHRjYXNlIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX0RXOiB7XG4mIzQzO1x0XHRcdGJvb2wgaXM2NCA9IEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0RXO1xuJiM0MztcdFx0XHR1MzIgcmVhbF9zcmNfcmVnID0gc3JjX3JlZztcbiYjNDM7XHRcdFx0dTMyIHJlYWxfZHN0X3JlZyA9IGRzdF9yZWc7XG4mIzQzO1x0XHRcdHU4ICpicmFuY2hfdGFyZ2V0O1xuJiM0MztcdFx0XHRib29sIGlzX2F0b21pY19mZXRjaCA9XG4mIzQzO1x0XHRcdFx0KGluc24tXHUwMDNlaW1tID09IChCUEZfQU5EIHwgQlBGX0ZFVENIKSB8fFxuJiM0MztcdFx0XHRcdCBpbnNuLVx1MDAzZWltbSA9PSAoQlBGX09SIHwgQlBGX0ZFVENIKSB8fFxuJiM0MztcdFx0XHRcdCBpbnNuLVx1MDAzZWltbSA9PSAoQlBGX1hPUiB8IEJQRl9GRVRDSCkpO1xuJiM0MztcdFx0XHRpZiAoaXNfYXRvbWljX2ZldGNoKSB7XG4gXHRcdFx0XHQvKlxuIFx0XHRcdFx0ICogQ2FuJiMzOTt0IGJlIGltcGxlbWVudGVkIHdpdGggYSBzaW5nbGUgeDg2IGluc24uXG4gXHRcdFx0XHQgKiBOZWVkIHRvIGRvIGEgQ01QWENIRyBsb29wLlxuQEAgLTI1MTAsNyAmIzQzOzI2NjIsMTcgQEAgc3Q6XHRcdFx0aW5zbl9vZmYgPSBpbnNuLVx1MDAzZW9mZjtcbiBcdFx0XHRcdGlmIChkc3RfcmVnID09IEJQRl9SRUdfMClcbiBcdFx0XHRcdFx0cmVhbF9kc3RfcmVnID0gQlBGX1JFR19BWDtcbiBcbiYjNDM7XHRcdFx0XHRpcCAmIzQzOz0gMztcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRpZiAoIWJwZl9hdG9taWNfaXNfbG9hZF9zdG9yZShpbnNuKSkge1xuJiM0MztcdFx0XHRcdGVyciA9IGVtaXRfa2FzYW5fY2hlY2soZW52LCBcdTAwMjZwcm9nLCByZWFsX2RzdF9yZWcsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBpbnNuLCBpcCwgdHJ1ZSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIGFjY2Vzc2VzX3N0YWNrX29ubHkpO1xuJiM0MztcdFx0XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHRcdFx0YnJhbmNoX3RhcmdldCA9IHByb2c7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0aWYgKGlzX2F0b21pY19mZXRjaCkge1xuIFx0XHRcdFx0LyogTG9hZCBvbGQgdmFsdWUgKi9cbiBcdFx0XHRcdGVtaXRfbGR4KFx1MDAyNnByb2csIEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSksXG4gXHRcdFx0XHRcdCBCUEZfUkVHXzAsIHJlYWxfZHN0X3JlZywgaW5zbi1cdTAwM2VvZmYpO1xuQEAgLTI1NDIsMTUgJiM0MzsyNzA0LDE2IEBAIHN0Olx0XHRcdGluc25fb2ZmID0gaW5zbi1cdTAwM2VvZmY7XG4gXHRcdFx0fVxuIFxuIFx0XHRcdGlmIChicGZfYXRvbWljX2lzX2xvYWRfc3RvcmUoaW5zbikpXG4tXHRcdFx0XHRlcnIgPSBlbWl0X2F0b21pY19sZF9zdChcdTAwMjZwcm9nLCBpbnNuLVx1MDAzZWltbSwgZHN0X3JlZywgc3JjX3JlZyxcbi1cdFx0XHRcdFx0XHRcdGluc24tXHUwMDNlb2ZmLCBCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpKTtcbiYjNDM7XHRcdFx0XHRlcnIgPSBlbWl0X2F0b21pY19sZF9zdChlbnYsIFx1MDAyNnByb2csIGluc24sIGlwLFxuJiM0MztcdFx0XHRcdFx0XHRcdGRzdF9yZWcsIHNyY19yZWcsXG4mIzQzO1x0XHRcdFx0XHRcdFx0YWNjZXNzZXNfc3RhY2tfb25seSk7XG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0ZXJyID0gZW1pdF9hdG9taWNfcm13KFx1MDAyNnByb2csIGluc24tXHUwMDNlaW1tLCBkc3RfcmVnLCBzcmNfcmVnLFxuIFx0XHRcdFx0XHRcdCAgICAgIGluc24tXHUwMDNlb2ZmLCBCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpKTtcbiBcdFx0XHRpZiAoZXJyKVxuIFx0XHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0XHRicmVhaztcbi1cbiYjNDM7XHRcdH1cbiBcdFx0Y2FzZSBCUEZfU1RYIHwgQlBGX1BST0JFX0FUT01JQyB8IEJQRl9COlxuIFx0XHRjYXNlIEJQRl9TVFggfCBCUEZfUFJPQkVfQVRPTUlDIHwgQlBGX0g6XG4gXHRcdFx0aWYgKCFicGZfYXRvbWljX2lzX2xvYWRfc3RvcmUoaW5zbikpIHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuaW5kZXggMzE3ZTk5YjlhY2MwYTQuLmFiZTg0NTljYzcwMTIyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuQEAgLTcyMyw2ICYjNDM7NzIzLDggQEAgc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhIHtcbiBcdHUxNiBjb25zdF9yZWdfbWFwX21hc2s7XG4gXHR1MTYgY29uc3RfcmVnX3N1YnByb2dfbWFzaztcbiBcdHUzMiBjb25zdF9yZWdfdmFsc1sxMF07XG4mIzQzO1x0LyogaW5zdHJ1Y3Rpb24gY2FuIGFjY2VzcyBub24tc3RhY2sgbWVtb3J5ICovXG4mIzQzO1x0Ym9vbCBub25fc3RhY2tfYWNjZXNzO1xuIH07XG4gXG4gI2RlZmluZSBNQVhfVVNFRF9NQVBTIDY0IC8qIG1heCBudW1iZXIgb2YgbWFwcyBhY2Nlc3NlZCBieSBvbmUgZUJQRiBwcm9ncmFtICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbmluZGV4IDE0YWNiMjQ1NTc0NmZjLi4xZWJjZDI0N2VmNGUzZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbkBAIC0xMjEwLDEzICYjNDM7MTIxMCwxNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX3NpbmdsZShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBvZmYsXG4gXG4gI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuIHN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLFxuLVx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCB1MzIgbGVuKTtcbiYjNDM7XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4sXG4mIzQzO1x0XHRcdFx0ICAgICBzMzIgaW5zbl9vZmZfaW5fcGF0Y2gpO1xuIHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqYnBmX2R1cF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xuIHZvaWQgYnBmX3Jlc3RvcmVfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKm9yaWdfaW5zbl9hdXgpO1xuICNlbHNlXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZixcbi1cdFx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCB1MzIgbGVuKVxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuJiM0MztcdFx0XHRcdFx0XHQgICB1MzIgb2ZmLFxuJiM0MztcdFx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLFxuJiM0MztcdFx0XHRcdFx0XHQgICB1MzIgbGVuLFxuJiM0MztcdFx0XHRcdFx0XHQgICBzMzIgaW5zbl9vZmZfaW5fcGF0Y2gpXG4ge1xuIFx0cmV0dXJuIEVSUl9QVFIoLUVOT1RTVVBQKTtcbiB9XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9LY29uZmlnIGIva2VybmVsL2JwZi9LY29uZmlnXG5pbmRleCBlYjNkZTM1NzM0ZjA5Mi4uZTFmMzg1MGQyZjVhMDcgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvS2NvbmZpZ1xuQEAgLTE3LDYgJiM0MzsxNywxMCBAQCBjb25maWcgSEFWRV9DQlBGX0pJVFxuIGNvbmZpZyBIQVZFX0VCUEZfSklUXG4gXHRib29sXG4gXG4mIzQzOyMgS0FTQU4gc3VwcG9ydCBmb3IgSklUIGNvbXBpbGVyXG4mIzQzO2NvbmZpZyBIQVZFX0VCUEZfSklUX0tBU0FOXG4mIzQzO1x0Ym9vbFxuJiM0MztcbiAjIFVzZWQgYnkgYXJjaHMgdG8gdGVsbCB0aGF0IHRoZXkgd2FudCB0aGUgQlBGIEpJVCBjb21waWxlciBlbmFibGVkIGJ5XG4gIyBkZWZhdWx0IGZvciBrZXJuZWxzIHRoYXQgd2VyZSBjb21waWxlZCB3aXRoIEJQRiBKSVQgc3VwcG9ydC5cbiBjb25maWcgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVFxuQEAgLTEwMSw0ICYjNDM7MTA1LDE3IEBAIGNvbmZpZyBCUEZfTFNNXG4gXG4gXHQgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIE4uXG4gXG4mIzQzO2NvbmZpZyBCUEZfSklUX0tBU0FOXG4mIzQzO1x0Ym9vbFxuJiM0MztcdGRlcGVuZHMgb24gSEFWRV9FQlBGX0pJVF9LQVNBTlxuJiM0MztcdGRlcGVuZHMgb24gS0FTQU5fR0VORVJJQ1xuJiM0MztcdGRlcGVuZHMgb24gS0FTQU5fVk1BTExPQ1xuJiM0MztcdGRlcGVuZHMgb24gQlBGX0pJVFxuJiM0MztcdGRlZmF1bHQgeSBpZiBLQVNBTlxuJiM0MztcdGhlbHBcbiYjNDM7XHQgIE1ha2VzIEpJVCBjb21waWxlciBpbnNlcnQgZ2VuZXJpYyBvdXRsaW5lIEtBU0FOIGNoZWNrcyBpbiBCUEZcbiYjNDM7XHQgIHByb2dyYW1zIHdoZW4gdGhleSBhcmUgaW5zZXJ0ZWQgaW4gdGhlIGtlcm5lbC4gVGhpcyBmZWF0dXJlIGlzXG4mIzQzO1x0ICBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgaWYgdGhlIG5lZWRlZCBzZXQgb2YgS0FTQU4gYW5kIEJQRlxuJiM0MztcdCAgY29uZmlndXJhdGlvbiBvcHRpb25zIGlzIGVuYWJsZWQuXG4mIzQzO1xuIGVuZG1lbnUgIyBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jb3JlLmMgYi9rZXJuZWwvYnBmL2NvcmUuY1xuaW5kZXggNDdmZTA0N2FkMzBiODguLmNmZjAwMzVmNDAxYTljIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvY29yZS5jXG5AQCAtMTU5OSw3ICYjNDM7MTU5OSw3IEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChlbnYpXG4tXHRcdFx0dG1wID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGksIGluc25fYnVmZiwgcmV3cml0dGVuKTtcbiYjNDM7XHRcdFx0dG1wID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGksIGluc25fYnVmZiwgcmV3cml0dGVuLCByZXdyaXR0ZW4gLSAxKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdHRtcCA9IGJwZl9wYXRjaF9pbnNuX3NpbmdsZShjbG9uZSwgaSwgaW5zbl9idWZmLCByZXdyaXR0ZW4pO1xuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXG5pbmRleCBkM2JlOTcyNzE0YjIyYy4uMGVkYTU1MTJiYWVjZWIgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2ZpeHVwcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXG5AQCAtMTUyLDEyICYjNDM7MTUyLDI1IEBAIHN0YXRpYyBpbnQgZ2V0X2NhbGxlZV9zdGFja19kZXB0aChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIH1cbiAjZW5kaWZcbiBcbiYjNDM7c3RhdGljIGJvb2wgaXNfbWVtX2luc24oc3RydWN0IGJwZl9pbnNuICppbnNuKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKEJQRl9DTEFTUyhpbnNuLVx1MDAzZWNvZGUpICE9IEJQRl9TVCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1NUWCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX0xEWClcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9NRU0gfHxcbiYjNDM7XHRcdEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX01FTVNYIHx8XG4mIzQzO1x0XHRCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BVE9NSUMpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qIHNpbmdsZSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VpbnNuaVtvZmZdIGluc3RydWN0aW9uIHdhcyByZXBsYWNlZCB3aXRoIHRoZSByYW5nZVxuICAqIGluc25pW29mZiwgb2ZmICYjNDM7IGNudCkuICBBZGp1c3QgY29ycmVzcG9uZGluZyBpbnNuX2F1eF9kYXRhIGJ5IGNvcHlpbmdcbiAgKiBbMCwgb2ZmKSBhbmQgW29mZiwgZW5kKSB0byBuZXcgbG9jYXRpb25zLCBzbyB0aGUgcGF0Y2hlZCByYW5nZSBzdGF5cyB6ZXJvXG4gICovXG4gc3RhdGljIHZvaWQgYWRqdXN0X2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi1cdFx0XHRcdCBzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nLCB1MzIgb2ZmLCB1MzIgY250KVxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nLCB1MzIgb2ZmLCB1MzIgY250LFxuJiM0MztcdFx0XHRcdCBzMzIgaW5zbl9vZmZfaW5fcGF0Y2gpXG4ge1xuIFx0c3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpkYXRhID0gZW52LVx1MDAzZWluc25fYXV4X2RhdGE7XG4gXHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBuZXdfcHJvZy1cdTAwM2VpbnNuc2k7XG5AQCAtMTcxLDggJiM0MzsxODQsMTQgQEAgc3RhdGljIHZvaWQgYWRqdXN0X2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdCAqL1xuIFx0ZGF0YVtvZmZdLnpleHRfZHN0ID0gaW5zbl9oYXNfZGVmMzIoaW5zbiAmIzQzOyBvZmYgJiM0MzsgY250IC0gMSk7XG4gXG4tXHRpZiAoY250ID09IDEpXG4mIzQzO1x0aWYgKGNudCA9PSAxKSB7XG4mIzQzO1x0XHQvKiBBIG5vbi1tZW1vcnkgYWNjZXNzaW5nIGluc24gY291bGQgaGF2ZSBiZWVuIHJlcGxhY2VkIGJ5IGFcbiYjNDM7XHRcdCAqIG1lbW9yeSBhY2Nlc3NpbmcgaW5zbiwgc3lzdGVtYXRpY2FsbHkgbWFyayBpdCBmb3Igbm9uLXN0YWNrXG4mIzQzO1x0XHQgKiBhY2Nlc3NcbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0ZGF0YVtvZmZdLm5vbl9zdGFja19hY2Nlc3MgPSBpc19tZW1faW5zbihpbnNuICYjNDM7IG9mZik7XG4gXHRcdHJldHVybjtcbiYjNDM7XHR9XG4gXHRwcm9nX2xlbiA9IG5ld19wcm9nLVx1MDAzZWxlbjtcbiBcbiBcdG1lbW1vdmUoZGF0YSAmIzQzOyBvZmYgJiM0MzsgY250IC0gMSwgZGF0YSAmIzQzOyBvZmYsXG5AQCAtMTgyLDcgJiM0MzsyMDEsMTkgQEAgc3RhdGljIHZvaWQgYWRqdXN0X2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdFx0LyogRXhwYW5kIGluc25pW29mZl0mIzM5O3Mgc2VlbiBjb3VudCB0byB0aGUgcGF0Y2hlZCByYW5nZS4gKi9cbiBcdFx0ZGF0YVtpXS5zZWVuID0gb2xkX3NlZW47XG4gXHRcdGRhdGFbaV0uemV4dF9kc3QgPSBpbnNuX2hhc19kZWYzMihpbnNuICYjNDM7IGkpO1xuJiM0MztcdFx0aWYgKGkgPT0gb2ZmICYjNDM7IGluc25fb2ZmX2luX3BhdGNoKSB7XG4mIzQzO1x0XHRcdGRhdGFbaV0ubm9uX3N0YWNrX2FjY2VzcyA9IGRhdGFbb2ZmICYjNDM7IGNudCAtIDFdLm5vbl9zdGFja19hY2Nlc3M7XG4mIzQzO1x0XHRcdGRhdGFbb2ZmICYjNDM7IGNudCAtIDFdLm5vbl9zdGFja19hY2Nlc3MgPSBmYWxzZTtcbiYjNDM7XHRcdH0gZWxzZSBpZiAoaXNfbWVtX2luc24oaW5zbiAmIzQzOyBpKSkge1xuJiM0MztcdFx0XHRkYXRhW2ldLm5vbl9zdGFja19hY2Nlc3MgPSB0cnVlO1xuJiM0MztcdFx0fVxuIFx0fVxuJiM0MztcdC8qXG4mIzQzO1x0ICogTGFzdCBzbG90IGluc3RydWN0aW9uIGNvdWxkIGJlIGEgbmV3bHkgZ2VuZXJhdGVkXG4mIzQzO1x0ICogQlBGX1NUL0JQRl9MRFgvQlBGX1NUWFxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChpc19tZW1faW5zbihpbnNuICYjNDM7IG9mZiAmIzQzOyBjbnQgLSAxKSBcdTAwMjZcdTAwMjYgaW5zbl9vZmZfaW5fcGF0Y2ggIT0gY250IC0gMSlcbiYjNDM7XHRcdGRhdGFbb2ZmICYjNDM7IGNudCAtIDFdLm5vbl9zdGFja19hY2Nlc3MgPSB0cnVlO1xuIFxuIFx0LypcbiBcdCAqIFRoZSBpbmRpcmVjdF90YXJnZXQgZmxhZyBvZiB0aGUgb3JpZ2luYWwgaW5zdHJ1Y3Rpb24gd2FzIG1vdmVkIHRvIHRoZSBsYXN0IG9mIHRoZVxuQEAgLTI0NSw3ICYjNDM7Mjc2LDggQEAgc3RhdGljIHZvaWQgYWRqdXN0X3Bva2VfZGVzY3Moc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgb2ZmLCB1MzIgbGVuKVxuIH1cbiBcbiBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZixcbi1cdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgdTMyIGxlbilcbiYjNDM7XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4sXG4mIzQzO1x0XHRcdFx0ICAgICBzMzIgaW5zbl9vZmZfaW5fcGF0Y2gpXG4ge1xuIFx0c3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZztcbiBcdHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqbmV3X2RhdGEgPSBOVUxMO1xuQEAgLTI2OSw3ICYjNDM7MzAxLDcgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsXG4gXHRcdFx0XHRlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YVtvZmZdLm9yaWdfaWR4KTtcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4tXHRhZGp1c3RfaW5zbl9hdXhfZGF0YShlbnYsIG5ld19wcm9nLCBvZmYsIGxlbik7XG4mIzQzO1x0YWRqdXN0X2luc25fYXV4X2RhdGEoZW52LCBuZXdfcHJvZywgb2ZmLCBsZW4sIGluc25fb2ZmX2luX3BhdGNoKTtcbiBcdGFkanVzdF9zdWJwcm9nX3N0YXJ0cyhlbnYsIG9mZiwgbGVuKTtcbiBcdGFkanVzdF9pbnNuX2FycmF5cyhlbnYsIG9mZiwgbGVuKTtcbiBcdGFkanVzdF9wb2tlX2Rlc2NzKG5ld19wcm9nLCBvZmYsIGxlbik7XG5AQCAtNjY4LDcgJiM0Mzs3MDAsNyBAQCBpbnQgYnBmX29wdF9zdWJyZWdfemV4dF9sbzMyX3JuZF9oaTMyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdHBhdGNoID0gemV4dF9wYXRjaDtcbiBcdFx0cGF0Y2hfbGVuID0gMjtcbiBhcHBseV9wYXRjaF9idWZmZXI6XG4tXHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGFkal9pZHgsIHBhdGNoLCBwYXRjaF9sZW4pO1xuJiM0MztcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgYWRqX2lkeCwgcGF0Y2gsIHBhdGNoX2xlbiwgMCk7XG4gXHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRcdGVudi1cdTAwM2Vwcm9nID0gbmV3X3Byb2c7XG5AQCAtNzEzLDcgJiM0Mzs3NDUsNyBAQCBpbnQgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0aW5zbl9idWZbY250JiM0MzsmIzQzO10gPSBCUEZfU1RYX01FTShCUEZfRFcsIEJQRl9SRUdfRlAsIEJQRl9SRUdfMSxcbiBcdFx0XHRcdFx0XHQgICAgICAtc3VicHJvZ3NbMF0uc3RhY2tfZGVwdGgpO1xuIFx0XHRcdGluc25fYnVmW2NudCYjNDM7JiM0MztdID0gZW52LVx1MDAzZXByb2ctXHUwMDNlaW5zbnNpWzBdO1xuLVx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIDAsIGluc25fYnVmLCBjbnQpO1xuJiM0MztcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCAwLCBpbnNuX2J1ZiwgY250LCAxKTtcbiBcdFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRcdFx0ZW52LVx1MDAzZXByb2cgPSBuZXdfcHJvZztcbkBAIC03MzYsNyAmIzQzOzc2OCw4IEBAIGludCBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHR2ZXJpZmllcl9idWcoZW52LCBcJiMzNDtwcm9sb2d1ZSBpcyB0b28gbG9uZ1wmIzM0Oyk7XG4gXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHRcdH0gZWxzZSBpZiAoY250KSB7XG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgMCwgaW5zbl9idWYsIGNudCk7XG4mIzQzO1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIDAsIGluc25fYnVmLCBjbnQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBjbnQgLSAxKTtcbiBcdFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtNzY4LDcgJiM0Mzs4MDEsOCBAQCBpbnQgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0KnBhdGNoJiM0MzsmIzQzOyA9IEJQRl9TVF9OT1NQRUMoKTtcbiBcdFx0XHQqcGF0Y2gmIzQzOyYjNDM7ID0gKmluc247XG4gXHRcdFx0Y250ID0gcGF0Y2ggLSBpbnNuX2J1Zjtcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbiYjNDM7XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBjbnQsIGNudCAtIDEpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC04NDEsNyAmIzQzOzg3NSw4IEBAIGludCBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHQqcGF0Y2gmIzQzOyYjNDM7ID0gKmluc247XG4gXHRcdFx0KnBhdGNoJiM0MzsmIzQzOyA9IEJQRl9TVF9OT1NQRUMoKTtcbiBcdFx0XHRjbnQgPSBwYXRjaCAtIGluc25fYnVmO1xuLVx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuJiM0MztcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIGNudCwgMCk7XG4gXHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTk3MSw3ICYjNDM7MTAwNiw4IEBAIGludCBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRcdFx0XHQgICAgICAgc2l6ZSAqIDgsIDApO1xuIFxuIHBhdGNoX2luc25fYnVmOlxuLVx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbiYjNDM7XHRcdG5ld19wcm9nID1cbiYjNDM7XHRcdFx0YnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQsIC0xKTtcbiBcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0xNDYzLDcgJiM0MzsxNDk5LDcgQEAgc3RhdGljIGludCBhZGRfaGlkZGVuX3N1YnByb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICpwYXRcbiBcdCAqIG9uZXMgZm9yIHRoZSBoaWRkZW4gc3VicHJvZy4gSGVuY2UgYWxsIG9mIHRoZSBhZGp1c3RtZW50IG9wZXJhdGlvbnNcbiBcdCAqIGluIGJwZl9wYXRjaF9pbnNuX2RhdGEgYXJlIG5vLW9wcy5cbiBcdCAqL1xuLVx0cHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBlbnYtXHUwMDNlcHJvZy1cdTAwM2VsZW4gLSAxLCBwYXRjaCwgbGVuKTtcbiYjNDM7XHRwcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGVudi1cdTAwM2Vwcm9nLVx1MDAzZWxlbiAtIDEsIHBhdGNoLCBsZW4sIDApO1xuIFx0aWYgKCFwcm9nKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdGVudi1cdTAwM2Vwcm9nID0gcHJvZztcbkBAIC0xNTQ4LDcgJiM0MzsxNTg0LDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFxuIFx0XHRcdGNudCA9IHBhdGNoIC0gaW5zbl9idWY7XG4gXG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG4mIzQzO1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgY250LCAwKTtcbiBcdFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMTU2OCw2ICYjNDM7MTYwNSw3IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRib29sIGlzX3NkaXYgPSBpc2RpdiBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VvZmYgPT0gMTtcbiBcdFx0XHRib29sIGlzX3Ntb2QgPSAhaXNkaXYgXHUwMDI2XHUwMDI2IGluc24tXHUwMDNlb2ZmID09IDE7XG4gXHRcdFx0c3RydWN0IGJwZl9pbnNuICpwYXRjaCA9IGluc25fYnVmO1xuJiM0MztcdFx0XHRzMzIgaW5zbl9vZmZfaW5fcGF0Y2g7XG4gXG4gXHRcdFx0aWYgKGlzX3NkaXYpIHtcbiBcdFx0XHRcdC8qIFtSLFddeCBzZGl2IDAgLVx1MDAzZSAwXG5AQCAtMTU5NCw2ICYjNDM7MTYzMiw3IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRcdCpwYXRjaCYjNDM7JiM0MzsgPSBCUEZfSk1QX0lNTShCUEZfSkEsIDAsIDAsIDEpO1xuIFx0XHRcdFx0KnBhdGNoJiM0MzsmIzQzOyA9ICppbnNuO1xuIFx0XHRcdFx0Y250ID0gcGF0Y2ggLSBpbnNuX2J1ZjtcbiYjNDM7XHRcdFx0XHRpbnNuX29mZl9pbl9wYXRjaCA9IGNudCAtIDE7XG4gXHRcdFx0fSBlbHNlIGlmIChpc19zbW9kKSB7XG4gXHRcdFx0XHQvKiBbUixXXXggbW9kIDAgLVx1MDAzZSBbUixXXXggKi9cbiBcdFx0XHRcdC8qIFtSLFddeCBtb2QgLTEgLVx1MDAzZSAwICovXG5AQCAtMTYxMCw2ICYjNDM7MTY0OSw3IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRcdCpwYXRjaCYjNDM7JiM0MzsgPSBCUEZfTU9WMzJfSU1NKGluc24tXHUwMDNlZHN0X3JlZywgMCk7XG4gXHRcdFx0XHQqcGF0Y2gmIzQzOyYjNDM7ID0gQlBGX0pNUF9JTU0oQlBGX0pBLCAwLCAwLCAxKTtcbiBcdFx0XHRcdCpwYXRjaCYjNDM7JiM0MzsgPSAqaW5zbjtcbiYjNDM7XHRcdFx0XHRpbnNuX29mZl9pbl9wYXRjaCA9IHBhdGNoIC0gaW5zbl9idWYgLSAxO1xuIFxuIFx0XHRcdFx0aWYgKCFpczY0KSB7XG4gXHRcdFx0XHRcdCpwYXRjaCYjNDM7JiM0MzsgPSBCUEZfSk1QX0lNTShCUEZfSkEsIDAsIDAsIDEpO1xuQEAgLTE2MjUsMTIgJiM0MzsxNjY1LDE0IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRcdCpwYXRjaCYjNDM7JiM0MzsgPSBCUEZfSk1QX0lNTShCUEZfSkEsIDAsIDAsIDEpO1xuIFx0XHRcdFx0KnBhdGNoJiM0MzsmIzQzOyA9ICppbnNuO1xuIFx0XHRcdFx0Y250ID0gcGF0Y2ggLSBpbnNuX2J1ZjtcbiYjNDM7XHRcdFx0XHRpbnNuX29mZl9pbl9wYXRjaCA9IGNudCAtIDE7XG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdC8qIFtSLFddeCBtb2QgMCAtXHUwMDNlIFtSLFddeCAqL1xuIFx0XHRcdFx0KnBhdGNoJiM0MzsmIzQzOyA9IEJQRl9SQVdfSU5TTigoaXM2NCA/IEJQRl9KTVAgOiBCUEZfSk1QMzIpIHxcbiBcdFx0XHRcdFx0XHRcdEJQRl9KRVEgfCBCUEZfSywgaW5zbi1cdTAwM2VzcmNfcmVnLFxuIFx0XHRcdFx0XHRcdFx0MCwgMSAmIzQzOyAoaXM2NCA/IDAgOiAxKSwgMCk7XG4gXHRcdFx0XHQqcGF0Y2gmIzQzOyYjNDM7ID0gKmluc247XG4mIzQzO1x0XHRcdFx0aW5zbl9vZmZfaW5fcGF0Y2ggPSBwYXRjaCAtIGluc25fYnVmIC0gMTtcbiBcbiBcdFx0XHRcdGlmICghaXM2NCkge1xuIFx0XHRcdFx0XHQqcGF0Y2gmIzQzOyYjNDM7ID0gQlBGX0pNUF9JTU0oQlBGX0pBLCAwLCAwLCAxKTtcbkBAIC0xNjM5LDcgJiM0MzsxNjgxLDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdFx0Y250ID0gcGF0Y2ggLSBpbnNuX2J1ZjtcbiBcdFx0XHR9XG4gXG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG4mIzQzO1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgY250LCBpbnNuX29mZl9pbl9wYXRjaCk7XG4gXHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTE2NTUsNiAmIzQzOzE2OTgsNyBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdCAgICAgQlBGX01PREUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfUFJPQkVfTUVNU1gpKSB7XG4gXHRcdFx0c3RydWN0IGJwZl9pbnNuICpwYXRjaCA9IGluc25fYnVmO1xuIFx0XHRcdHU2NCB1YWRkcmVzc19saW1pdCA9IGJwZl9hcmNoX3VhZGRyZXNzX2xpbWl0KCk7XG4mIzQzO1x0XHRcdHMzMiBpbnNuX29mZl9pbl9wYXRjaDtcbiBcbiBcdFx0XHRpZiAoIXVhZGRyZXNzX2xpbWl0KVxuIFx0XHRcdFx0Z290byBuZXh0X2luc247XG5AQCAtMTY2NSwxMSAmIzQzOzE3MDksMTMgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdCpwYXRjaCYjNDM7JiM0MzsgPSBCUEZfQUxVNjRfSU1NKEJQRl9SU0gsIEJQRl9SRUdfQVgsIDMyKTtcbiBcdFx0XHQqcGF0Y2gmIzQzOyYjNDM7ID0gQlBGX0pNUF9JTU0oQlBGX0pMRSwgQlBGX1JFR19BWCwgdWFkZHJlc3NfbGltaXQgXHUwMDNlXHUwMDNlIDMyLCAyKTtcbiBcdFx0XHQqcGF0Y2gmIzQzOyYjNDM7ID0gKmluc247XG4mIzQzO1x0XHRcdGluc25fb2ZmX2luX3BhdGNoID0gcGF0Y2ggLSBpbnNuX2J1ZiAtIDE7XG4gXHRcdFx0KnBhdGNoJiM0MzsmIzQzOyA9IEJQRl9KTVBfSU1NKEJQRl9KQSwgMCwgMCwgMSk7XG4gXHRcdFx0KnBhdGNoJiM0MzsmIzQzOyA9IEJQRl9NT1Y2NF9JTU0oaW5zbi1cdTAwM2Vkc3RfcmVnLCAwKTtcbiBcbiBcdFx0XHRjbnQgPSBwYXRjaCAtIGluc25fYnVmO1xuLVx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuJiM0MztcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIGNudCwgaW5zbl9vZmZfaW5fcGF0Y2gpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0xNjg5LDcgJiM0MzsxNzM1LDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHRcdFx0fVxuIFxuLVx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuJiM0MztcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIGNudCwgMCk7XG4gXHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTE3NDIsNyAmIzQzOzE3ODksOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0XHQqcGF0Y2gmIzQzOyYjNDM7ID0gQlBGX0FMVTY0X0lNTShCUEZfTVVMLCBvZmZfcmVnLCAtMSk7XG4gXHRcdFx0Y250ID0gcGF0Y2ggLSBpbnNuX2J1ZjtcbiBcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbiYjNDM7XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBjbnQsIGNudCAtIDEpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0xNzg3LDcgJiM0MzsxODM1LDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdGluc25fYnVmWzZdID0gQlBGX1NUWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzEwLCBCUEZfUkVHX0FYLCBzdGFja19vZmZfY250KTtcbiBcdFx0XHRjbnQgPSA3O1xuIFxuLVx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuJiM0MztcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIGNudCwgMyk7XG4gXHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTE4MDgsNyAmIzQzOzE4NTcsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0aW5zbl9idWZbM10gPSBCUEZfU1RYX01FTShCUEZfRFcsIEJQRl9SRUdfMTAsIEJQRl9SRUdfQVgsIHN0YWNrX29mZik7XG4gXHRcdFx0Y250ID0gNDtcbiBcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbiYjNDM7XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBjbnQsIDIpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0xODI5LDcgJiM0MzsxODc5LDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdGlmIChjbnQgPT0gMClcbiBcdFx0XHRcdGdvdG8gbmV4dF9pbnNuO1xuIFxuLVx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuJiM0MztcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIGNudCwgY250IC0gMSk7XG4gXHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTE5MTYsNyAmIzQzOzE5NjcsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0XHRcdFx0XHRcdCBtYXApLVx1MDAzZWluZGV4X21hc2spO1xuIFx0XHRcdGluc25fYnVmWzJdID0gKmluc247XG4gXHRcdFx0Y250ID0gMztcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbiYjNDM7XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBjbnQsIGNudCAtIDEpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0xOTQ5LDcgJiM0MzsyMDAxLDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdGluc25fYnVmWzJdID0gKmluc247XG4gXHRcdFx0Y250ID0gMztcbiBcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbiYjNDM7XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBjbnQsIGNudCAtIDEpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0xOTY4LDcgJiM0MzsyMDIxLDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdGluc25fYnVmWzFdID0gKmluc247XG4gXHRcdFx0Y250ID0gMjtcbiBcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbiYjNDM7XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBjbnQsIGNudCAtIDEpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0yMDA4LDggJiM0MzsyMDYyLDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdFx0XHRcdH1cbiBcbi1cdFx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsXG4tXHRcdFx0XHRcdFx0XHQgICAgICAgaW5zbl9idWYsIGNudCk7XG4mIzQzO1x0XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKFxuJiM0MztcdFx0XHRcdFx0ZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250LCAtMSk7XG4gXHRcdFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0yMDkyLDcgJiM0MzsyMTQ2LDcgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdGNudCA9IDM7XG4gXG4gXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG4tXHRcdFx0XHRcdFx0ICAgICAgIGNudCk7XG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBjbnQsIC0xKTtcbiBcdFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMjEyMCw3ICYjNDM7MjE3NCw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRpbnNuX2J1ZlswXSA9IEJQRl9BTFUzMl9SRUcoQlBGX1hPUiwgQlBGX1JFR18wLCBCUEZfUkVHXzApO1xuIFx0XHRcdGNudCA9IDE7XG4gI2VuZGlmXG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG4mIzQzO1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgY250LCAtMSk7XG4gXHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTIxMzgsNyAmIzQzOzIxOTMsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0aW5zbl9idWZbMl0gPSBCUEZfTERYX01FTShCUEZfRFcsIEJQRl9SRUdfMCwgQlBGX1JFR18wLCAwKTtcbiBcdFx0XHRjbnQgPSAzO1xuIFxuLVx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuJiM0MztcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIGNudCwgLTEpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0yMTcyLDcgJiM0MzsyMjI4LDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdGluc25fYnVmW2NudCYjNDM7JiM0MztdID0gQlBGX0pNUF9BKDEpO1xuIFx0XHRcdGluc25fYnVmW2NudCYjNDM7JiM0MztdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIC1FSU5WQUwpO1xuIFxuLVx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuJiM0MztcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgIGNudCwgLTEpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0yMjA0LDcgJiM0MzsyMjYxLDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdFx0Y250ID0gMTtcbiBcdFx0XHR9XG4gXG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG4mIzQzO1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgY250LCAtMSk7XG4gXHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTIyMzAsNyAmIzQzOzIyODgsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0XHRjbnQgPSAyO1xuIFx0XHRcdH1cbiBcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbiYjNDM7XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBjbnQsIC0xKTtcbiBcdFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMjI0Niw3ICYjNDM7MjMwNSw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHQvKiBMb2FkIElQIGFkZHJlc3MgZnJvbSBjdHggLSAxNiAqL1xuIFx0XHRcdGluc25fYnVmWzBdID0gQlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfMSwgLTE2KTtcbiBcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgMSk7XG4mIzQzO1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgMSwgLTEpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0yMzAxLDcgJiM0MzsyMzYxLDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdGluc25fYnVmWzEwXSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAtRU5PRU5UKTtcbiBcdFx0XHRjbnQgPSAxMTtcbiBcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbiYjNDM7XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBjbnQsIC0xKTtcbiBcdFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMjMxOSw3ICYjNDM7MjM4MCw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRpbnNuX2J1ZlsxXSA9IEJQRl9BVE9NSUNfT1AoQlBGX0RXLCBCUEZfWENIRywgQlBGX1JFR18xLCBCUEZfUkVHXzAsIDApO1xuIFx0XHRcdGNudCA9IDI7XG4gXG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG4mIzQzO1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgY250LCAtMSk7XG4gXHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTIzODcsNyAmIzQzOzI0NDksNyBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdC8qIENvcHkgZmlyc3QgYWN0dWFsIGluc24gdG8gcHJlc2VydmUgaXQgKi9cbiBcdFx0aW5zbl9idWZbY250JiM0MzsmIzQzO10gPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VpbnNuc2lbc3VicHJvZ19zdGFydF07XG4gXG4tXHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIHN1YnByb2dfc3RhcnQsIGluc25fYnVmLCBjbnQpO1xuJiM0MztcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgc3VicHJvZ19zdGFydCwgaW5zbl9idWYsIGNudCwgY250IC0gMSk7XG4gXHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRcdGVudi1cdTAwM2Vwcm9nID0gcHJvZyA9IG5ld19wcm9nO1xuQEAgLTI0ODYsNyAmIzQzOzI1NDgsNyBAQCBzdGF0aWMgc3RydWN0IGJwZl9wcm9nICppbmxpbmVfYnBmX2xvb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdGluc25fYnVmW2NudCYjNDM7JiM0MztdID0gQlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzgsIEJQRl9SRUdfMTAsIHI4X29mZnNldCk7XG4gXG4gXHQqdG90YWxfY250ID0gY250O1xuLVx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgcG9zaXRpb24sIGluc25fYnVmLCBjbnQpO1xuJiM0MztcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIHBvc2l0aW9uLCBpbnNuX2J1ZiwgY250LCAtMSk7XG4gXHRpZiAoIW5ld19wcm9nKVxuIFx0XHRyZXR1cm4gbmV3X3Byb2c7XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCAyMzM0NzJhODcxYmU1Ny4uYmMzYjQ3NzEzOTZhOWYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTMyMDcsNiAmIzQzOzMyMDcsMTEgQEAgc3RhdGljIHZvaWQgbWFya19pbmRpcmVjdF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkeClcbiBcdGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhW2lkeF0uaW5kaXJlY3RfdGFyZ2V0ID0gdHJ1ZTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIG1hcmtfbm9uX3N0YWNrX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWR4KVxuJiM0Mzt7XG4mIzQzO1x0ZW52LVx1MDAzZWluc25fYXV4X2RhdGFbaWR4XS5ub25fc3RhY2tfYWNjZXNzID0gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiAjZGVmaW5lIExSX0ZSQU1FTk9fQklUU1x0NFxuICNkZWZpbmUgTFJfU1BJX0JJVFNcdDZcbiAjZGVmaW5lIExSX0VOVFJZX0JJVFNcdChMUl9TUElfQklUUyAmIzQzOyBMUl9GUkFNRU5PX0JJVFMgJiM0MzsgMSlcbkBAIC02NDAwLDYgJiM0Mzs2NDA1LDEwIEBAIHN0YXRpYyBpbnQgY2hlY2tfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsIHN0cnVjdCBiXG4gXHRcdGVsc2VcbiBcdFx0XHRjb2VyY2VfcmVnX3RvX3NpemVfc3goXHUwMDI2cmVnc1t2YWx1ZV9yZWdub10sIHNpemUpO1xuIFx0fVxuJiM0MztcbiYjNDM7XHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgcmVnLVx1MDAzZXR5cGUgIT0gUFRSX1RPX1NUQUNLKVxuJiM0MztcdFx0bWFya19ub25fc3RhY2tfYWNjZXNzKGVudiwgaW5zbl9pZHgpO1xuJiM0MztcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pbnNuX2FycmF5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaW5zbl9hcnJheS5jXG5pbmRleCAwMjIyYTlhNWQwNzYxNC4uODE1ZjNlMDQ1NDBmZmMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaW5zbl9hcnJheS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaW5zbl9hcnJheS5jXG5AQCAtMjI3LDQyICYjNDM7MjI3LDYgQEAgc3RhdGljIHZvaWQgY2hlY2tfaW5jb3JyZWN0X2luZGV4KHZvaWQpXG4gXHRjaGVja19taWRfaW5zbl9pbmRleCgpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHNldF9icGZfaml0X2hhcmRlbihjaGFyICpsZXZlbClcbi17XG4tXHRjaGFyIG9sZF9sZXZlbDtcbi1cdGludCBlcnIgPSAtMTtcbi1cdGludCBmZCA9IC0xO1xuLVxuLVx0ZmQgPSBvcGVuKFwmIzM0Oy9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2hhcmRlblwmIzM0OywgT19SRFdSIHwgT19OT05CTE9DSyk7XG4tXHRpZiAoZmQgXHUwMDNjIDApIHtcbi1cdFx0QVNTRVJUX0ZBSUwoXCYjMzQ7b3BlbiAuLi4vYnBmX2ppdF9oYXJkZW4gcmV0dXJuZWQgJWQgKGVycm5vPSVkKVwmIzM0OywgZmQsIGVycm5vKTtcbi1cdFx0cmV0dXJuIC0xO1xuLVx0fVxuLVxuLVx0ZXJyID0gcmVhZChmZCwgXHUwMDI2b2xkX2xldmVsLCAxKTtcbi1cdGlmIChlcnIgIT0gMSkge1xuLVx0XHRBU1NFUlRfRkFJTChcJiMzNDtyZWFkIGZyb20gLi4uL2JwZl9qaXRfaGFyZGVuIHJldHVybmVkICVkIChlcnJubz0lZClcJiMzNDssIGVyciwgZXJybm8pO1xuLVx0XHRlcnIgPSAtMTtcbi1cdFx0Z290byBlbmQ7XG4tXHR9XG4tXG4tXHRsc2VlayhmZCwgMCwgU0VFS19TRVQpO1xuLVxuLVx0ZXJyID0gd3JpdGUoZmQsIGxldmVsLCAxKTtcbi1cdGlmIChlcnIgIT0gMSkge1xuLVx0XHRBU1NFUlRfRkFJTChcJiMzNDt3cml0ZSB0byAuLi4vYnBmX2ppdF9oYXJkZW4gcmV0dXJuZWQgJWQgKGVycm5vPSVkKVwmIzM0OywgZXJyLCBlcnJubyk7XG4tXHRcdGVyciA9IC0xO1xuLVx0XHRnb3RvIGVuZDtcbi1cdH1cbi1cbi1cdGVyciA9IDA7XG4tXHQqbGV2ZWwgPSBvbGRfbGV2ZWw7XG4tZW5kOlxuLVx0aWYgKGZkIFx1MDAzZT0gMClcbi1cdFx0Y2xvc2UoZmQpO1xuLVx0cmV0dXJuIGVycjtcbi19XG4tXG4gc3RhdGljIHZvaWQgY2hlY2tfYmxpbmRuZXNzKHZvaWQpXG4ge1xuIFx0c3RydWN0IGJwZl9pbnNuIGluc25zW10gPSB7XG5AQCAtMjcyLDcgJiM0MzsyMzYsNyBAQCBzdGF0aWMgdm9pZCBjaGVja19ibGluZG5lc3Modm9pZClcbiBcdFx0QlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDEpLFxuIFx0XHRCUEZfRVhJVF9JTlNOKCksXG4gXHR9O1xuLVx0aW50IHByb2dfZmQgPSAtMSwgbWFwX2ZkO1xuJiM0MztcdGludCBwcm9nX2ZkID0gLTEsIG1hcF9mZCwgcmV0O1xuIFx0c3RydWN0IGJwZl9pbnNuX2FycmF5X3ZhbHVlIHZhbCA9IHt9O1xuIFx0Y2hhciBicGZfaml0X2hhcmRlbiA9ICYjMzk7QCYjMzk7OyAvKiBub24tZXhpenN0aW5nIHZhbHVlICovXG4gXHRpbnQgaTtcbkBAIC0yOTEsNyAmIzQzOzI1NSw4IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2JsaW5kbmVzcyh2b2lkKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG4gXHRicGZfaml0X2hhcmRlbiA9ICYjMzk7MiYjMzk7O1xuLVx0aWYgKHNldF9icGZfaml0X2hhcmRlbihcdTAwMjZicGZfaml0X2hhcmRlbikpIHtcbiYjNDM7XHRyZXQgPSBzZXRfYnBmX2ppdF9oYXJkZW4oXHUwMDI2YnBmX2ppdF9oYXJkZW4pO1xuJiM0MztcdGlmICghQVNTRVJUX09LKHJldCwgXCYjMzQ7c2V0IGJwZl9qaXRfaGFyZGVuXCYjMzQ7KSkge1xuIFx0XHRicGZfaml0X2hhcmRlbiA9ICYjMzk7QCYjMzk7OyAvKiBvcGVuLCByZWFkIG9yIHdyaXRlIGZhaWxlZCA9XHUwMDNlIG5vIHdyaXRlIHdhcyBkb25lICovXG4gXHRcdGdvdG8gY2xlYW51cDtcbiBcdH1cbkBAIC0zMTMsNyAmIzQzOzI3OCw4IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2JsaW5kbmVzcyh2b2lkKVxuIGNsZWFudXA6XG4gXHQvKiByZXN0b3JlIHRoZSBvbGQgb25lICovXG4gXHRpZiAoYnBmX2ppdF9oYXJkZW4gIT0gJiMzOTtAJiMzOTspXG4tXHRcdHNldF9icGZfaml0X2hhcmRlbihcdTAwMjZicGZfaml0X2hhcmRlbik7XG4mIzQzO1x0XHRBU1NFUlRfT0soc2V0X2JwZl9qaXRfaGFyZGVuKFx1MDAyNmJwZl9qaXRfaGFyZGVuKSxcbiYjNDM7XHRcdFx0ICBcJiMzNDtyZXN0b3JlIGhhcmRlbmluZyBjb25maWd1cmF0aW9uXCYjMzQ7KTtcbiBcbiBcdGNsb3NlKHByb2dfZmQpO1xuIFx0Y2xvc2UobWFwX2ZkKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rYXNhbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva2FzYW4uY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yYmM1NDVlOTYyNTk1ZVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva2FzYW4uY1xuQEAgLTAsMCAmIzQzOzEsNDMwIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIEJTRC0zLUNsYXVzZVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVGVzdHMgdmFsaWRhdGluZyB0aGF0IEtBU0FOIHJlcG9ydHMgYXJlIHByb3Blcmx5IGluc3RydW1lbnRlZCBhbmRcbiYjNDM7ICogZ2VuZXJhdGVkIG9uIGEgd2lkZSB2YXJpZXR5IG9mIGluc3RydWN0aW9ucy4gVGhlIHJ1bm5pbmcga2VybmVsIG5lZWRzXG4mIzQzOyAqIGthc2FuX211bHRpX3Nob3QgdG8gcnVuIG11bHRpcGxlIGthc2FuLWdlbmVyYXRpbmcgc3VidGVzdHMgYXQgb25jZVxuJiM0MzsgKi9cbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9ldGhlci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N1bnByaXZfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2thc2FuLnNrZWwuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtrYXNhbl9oYXJkZW4uc2tlbC5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFNVQlRFU1RfTkFNRV9NQVhfTEVOXHQxMjhcbiYjNDM7I2RlZmluZSBQUk9HX05BTUVfTUFYX0xFTlx0MTI4XG4mIzQzO1xuJiM0MzsjZGVmaW5lIE1BWF9MT0dfU0laRVx0XHQoOCAqIDEwMjQpXG4mIzQzOyNkZWZpbmUgUkVBRF9DSFVOS19TSVpFXHRcdDI1NlxuJiM0MztcbiYjNDM7I2RlZmluZSBLQVNBTl9QQVRURVJOX1NMQUJfVUFGIFwmIzM0O0JVRzogS0FTQU46IHNsYWItdXNlLWFmdGVyLWZyZWUgXCYjMzQ7IFxcXG4mIzQzO1x0XCYjMzQ7aW4gYnBmX3Byb2dfJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhfJXNcJiMzNDtcbiYjNDM7I2RlZmluZSBLQVNBTl9QQVRURVJOX1JFUE9SVCBcJiMzNDslcyBvZiBzaXplICVkIGF0IGFkZHJcJiMzNDtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjaGFyIGtsb2dfYnVmZmVyW01BWF9MT0dfU0laRV07XG4mIzQzO3N0YXRpYyBjaGFyIHJlY29yZFtNQVhfTE9HX1NJWkVdO1xuJiM0MztcbiYjNDM7c3RydWN0IHRlc3Rfc3BlYyB7XG4mIzQzO1x0Y2hhciAqcHJvZ190eXBlO1xuJiM0MztcdGJvb2wgaXNfd3JpdGU7XG4mIzQzO1x0Ym9vbCBvbmx5XzMyX29yXzY0O1xuJiM0MztcdGJvb2wgbmVlZHNfbG9hZF9hY3Ffc3RvcmVfcmVsO1xuJiM0MztcdGJvb2wgc2tpcF9tdWx0aV9zaXplX3Rlc3Rpbmc7XG4mIzQzO1x0Ym9vbCBza2lwX29uX3N0YWNrX3Rlc3Rpbmc7XG4mIzQzO1x0aW50IHJ1bl9zaXplO1xuJiM0MztcdGJvb2wgZXhwZWN0X25vX3JlcG9ydDtcbiYjNDM7XHRib29sIHJuZF9oaTMyO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IGthc2FuX3dyaXRlX3ZhbCB7XG4mIzQzO1x0X191OCBkYXRhXzE7XG4mIzQzO1x0X191MTYgZGF0YV8yO1xuJiM0MztcdF9fdTMyIGRhdGFfNDtcbiYjNDM7XHRfX3U2NCBkYXRhXzg7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgdGVzdF9jdHgge1xuJiM0MztcdF9fdTggIHByb2dfdGFnW0JQRl9UQUdfU0laRV07XG4mIzQzO1x0c3RydWN0IGJwZl9vYmplY3QgKm9iajtcbiYjNDM7XHRpbnQgKmFjY2Vzc19zaXplO1xuJiM0MztcdGJvb2wgc2tpcF9sb2FkX2FjcV9zdG9yZV9yZWw7XG4mIzQzO1x0c3RydWN0IGJwZl9wcm9ncmFtICpwcm9nO1xuJiM0MztcdGNoYXIgcHJvZ19uYW1lW1NVQlRFU1RfTkFNRV9NQVhfTEVOXTtcbiYjNDM7XHRpbnQga2xvZ19mZDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3Blbl9rZXJuZWxfbG9ncyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkO1xuJiM0MztcbiYjNDM7XHRmZCA9IG9wZW4oXCYjMzQ7L2Rldi9rbXNnXCYjMzQ7LCBPX1JET05MWSB8IE9fTk9OQkxPQ0spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHNraXBfa2VybmVsX2xvZ3MoaW50IGZkKVxuJiM0Mzt7XG4mIzQzO1x0bHNlZWsoZmQsIDAsIFNFRUtfRU5EKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByZWFkX2tlcm5lbF9sb2dzKGludCBmZCwgY2hhciAqYnVmLCBzaXplX3QgbWF4X2xlbilcbiYjNDM7e1xuJiM0MztcdHNpemVfdCB0b3RhbCA9IDA7XG4mIzQzO1x0c3NpemVfdCBuO1xuJiM0MztcbiYjNDM7XHRidWZbMF0gPSAmIzM5O1xcMCYjMzk7O1xuJiM0MztcdHdoaWxlICgxKSB7XG4mIzQzO1x0XHRjaGFyICptc2csICplb2w7XG4mIzQzO1x0XHRzaXplX3QgbGVuO1xuJiM0MztcbiYjNDM7XHRcdG4gPSByZWFkKGZkLCByZWNvcmQsIHNpemVvZihyZWNvcmQpIC0gMSk7XG4mIzQzO1x0XHRpZiAobiBcdTAwM2MgMCkge1xuJiM0MztcdFx0XHRpZiAoZXJybm8gPT0gRUFHQUlOKVxuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHRyZXR1cm4gbjtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJlY29yZFtuXSA9ICYjMzk7XFwwJiMzOTs7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEVhY2gga21zZyByZWNvcmQgc3RhcnRzIHdpdGggc29tZSBtZXRhZGF0YSwgc2VwYXJhdGVkXG4mIzQzO1x0XHQgKiBmcm9tIHRoZSBhY3R1YWwgY29udGVudCBieSBhIHNlbWktY29sb25cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0bXNnID0gc3RyY2hyKHJlY29yZCwgJiMzOTs7JiMzOTspO1xuJiM0MztcdFx0aWYgKCFtc2cpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0bXNnJiM0MzsmIzQzOztcbiYjNDM7XHRcdGVvbCA9IHN0cmNocihtc2csICYjMzk7XFxuJiMzOTspO1xuJiM0MztcdFx0aWYgKGVvbClcbiYjNDM7XHRcdFx0KmVvbCA9ICYjMzk7XFwwJiMzOTs7XG4mIzQzO1xuJiM0MztcdFx0bGVuID0gc3RybGVuKG1zZyk7XG4mIzQzO1x0XHRpZiAodG90YWwgJiM0MzsgbGVuICYjNDM7IDIgXHUwMDNlIG1heF9sZW4pXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0bWVtY3B5KGJ1ZiAmIzQzOyB0b3RhbCwgbXNnLCBsZW4pO1xuJiM0MztcdFx0dG90YWwgJiM0Mzs9IGxlbjtcbiYjNDM7XHRcdGJ1Zlt0b3RhbCYjNDM7JiM0MztdID0gJiMzOTtcXG4mIzM5OztcbiYjNDM7XHRcdGJ1Zlt0b3RhbF0gPSAmIzM5O1xcMCYjMzk7O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRvdGFsO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGNoZWNrX2thc2FuX3JlcG9ydF9pbl9rZXJuZWxfbG9ncyhjaGFyICpidWYsIHN0cnVjdCB0ZXN0X2N0eCAqY3R4LFxuJiM0MztcdFx0XHRcdFx0ICAgICBib29sIGlzX3dyaXRlLCBpbnQgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdGNoYXIgYWNjZXNzX2xvZ1tSRUFEX0NIVU5LX1NJWkVdO1xuJiM0MztcdGNoYXIgKmthc2FuX3JlcG9ydF9zdGFydDtcbiYjNDM7XHRpbnQgbnNpemU7XG4mIzQzO1xuJiM0MztcdG5zaXplID0gc25wcmludGYoYWNjZXNzX2xvZywgUkVBRF9DSFVOS19TSVpFLCBLQVNBTl9QQVRURVJOX1NMQUJfVUFGLFxuJiM0MztcdFx0XHQgY3R4LVx1MDAzZXByb2dfdGFnWzBdLCBjdHgtXHUwMDNlcHJvZ190YWdbMV0sIGN0eC1cdTAwM2Vwcm9nX3RhZ1syXSxcbiYjNDM7XHRcdFx0IGN0eC1cdTAwM2Vwcm9nX3RhZ1szXSwgY3R4LVx1MDAzZXByb2dfdGFnWzRdLCBjdHgtXHUwMDNlcHJvZ190YWdbNV0sXG4mIzQzO1x0XHRcdCBjdHgtXHUwMDNlcHJvZ190YWdbNl0sIGN0eC1cdTAwM2Vwcm9nX3RhZ1s3XSwgY3R4LVx1MDAzZXByb2dfbmFtZSk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UobnNpemUsIDAsIFwmIzM0O2Zvcm1hdCBrYXNhbiBhY2Nlc3MgaGVhZGVyIGxpbmVcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuIG5zaXplO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogU2VhcmNoZWQga2FzYW4gcmVwb3J0IGlzIHZhbGlkIGlmXG4mIzQzO1x0ICogLSBpdCBjb250YWlucyB0aGUgZXhwZWN0ZWQga2FzYW4gcGF0dGVyblxuJiM0MztcdCAqIC0gdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBmYXVsdHkgYWNjZXNzIGlzIGZvdW5kIHNvbWV3aGVyZVxuJiM0MztcdCAqICAgYWZ0ZXIgdGhlIGhlYWRlciAobm90IG5lY2Vzc2FyaWx5IG9uIHRoZSB2ZXJ5IG5leHQgbGluZSxcbiYjNDM7XHQgKiAgIGJlY2F1c2Ugb3RoZXIga2VybmVsIG1lc3NhZ2VzIG1heSBpbnRlcmxlYXZlKVxuJiM0MztcdCAqIC0gZmF1bHR5IGFjY2VzcyBwcm9wZXJ0aWVzIG1hdGNoIHRoZSB0ZXN0ZWQgdHlwZSBhbmQgc2l6ZVxuJiM0MztcdCAqL1xuJiM0MztcdGthc2FuX3JlcG9ydF9zdGFydCA9IHN0cnN0cihidWYsIGFjY2Vzc19sb2cpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWthc2FuX3JlcG9ydF9zdGFydClcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcbiYjNDM7XHRuc2l6ZSA9IHNucHJpbnRmKGFjY2Vzc19sb2csIFJFQURfQ0hVTktfU0laRSwgS0FTQU5fUEFUVEVSTl9SRVBPUlQsXG4mIzQzO1x0XHRcdCBpc193cml0ZSA/IFwmIzM0O1dyaXRlXCYjMzQ7IDogXCYjMzQ7UmVhZFwmIzM0Oywgc2l6ZSk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UobnNpemUsIDAsIFwmIzM0O2Zvcm1hdCBrYXNhbiBhY2Nlc3MgcmVwb3J0IGxpbmVcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuIG5zaXplO1xuJiM0MztcbiYjNDM7XHRpZiAoIXN0cnN0cihrYXNhbl9yZXBvcnRfc3RhcnQsIGFjY2Vzc19sb2cpKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBleGVjX3N1YnRlc3Qoc3RydWN0IHRlc3RfY3R4ICpjdHgsIHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsXG4mIzQzO1x0XHRcdCBpbnQgYWNjZXNzX3NpemUsIGJvb2wgb25fc3RhY2spXG4mIzQzO3tcbiYjNDM7XHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgdG9wdHMpO1xuJiM0MztcdHN0cnVjdCBicGZfcHJvZ19pbmZvIGluZm87XG4mIzQzO1x0dWludDhfdCBidWZbRVRIX0hMRU5dID0gezB9O1xuJiM0MztcdGludCByZXQsIHByb2dfZmQ7XG4mIzQzO1x0X191MzIgaW5mb19sZW47XG4mIzQzO1xuJiM0MztcdGN0eC1cdTAwM2Vwcm9nID0gYnBmX29iamVjdF9fZmluZF9wcm9ncmFtX2J5X25hbWUoY3R4LVx1MDAzZW9iaixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBjdHgtXHUwMDNlcHJvZ19uYW1lKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoY3R4LVx1MDAzZXByb2csIFwmIzM0O2ZpbmQgdGVzdCBwcm9nXCYjMzQ7KSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aW5mb19sZW4gPSBzaXplb2YoaW5mbyk7XG4mIzQzO1x0bWVtc2V0KFx1MDAyNmluZm8sIDAsIGluZm9fbGVuKTtcbiYjNDM7XHRwcm9nX2ZkID0gYnBmX3Byb2dyYW1fX2ZkKGN0eC1cdTAwM2Vwcm9nKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19GRChwcm9nX2ZkLCBcJiMzNDtnZXQgcHJvZyBmZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0cmV0ID0gYnBmX3Byb2dfZ2V0X2luZm9fYnlfZmQocHJvZ19mZCwgXHUwMDI2aW5mbywgXHUwMDI2aW5mb19sZW4pO1xuJiM0MztcdGlmICghQVNTRVJUX09LKHJldCwgXCYjMzQ7ZmV0Y2ggbG9hZGVkIHByb2dyYW0gaW5mb1wmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0bWVtY3B5KGN0eC1cdTAwM2Vwcm9nX3RhZywgaW5mby50YWcsIEJQRl9UQUdfU0laRSk7XG4mIzQzO1xuJiM0MztcdHNraXBfa2VybmVsX2xvZ3MoY3R4LVx1MDAzZWtsb2dfZmQpO1xuJiM0MztcbiYjNDM7XHR0b3B0cy5zeiA9IHNpemVvZihzdHJ1Y3QgYnBmX3Rlc3RfcnVuX29wdHMpO1xuJiM0MztcdHRvcHRzLmRhdGFfc2l6ZV9pbiA9IEVUSF9ITEVOO1xuJiM0MztcdHRvcHRzLmRhdGFfaW4gPSBidWY7XG4mIzQzO1x0aWYgKGN0eC1cdTAwM2VhY2Nlc3Nfc2l6ZSlcbiYjNDM7XHRcdCpjdHgtXHUwMDNlYWNjZXNzX3NpemUgPSBhY2Nlc3Nfc2l6ZTtcbiYjNDM7XHRyZXQgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChjdHgtXHUwMDNlcHJvZyksXG4mIzQzO1x0XHRcdFx0ICAgICBcdTAwMjZ0b3B0cyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0socmV0LCBcJiMzNDtydW4gcHJvZ1wmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlYWRfa2VybmVsX2xvZ3MoY3R4LVx1MDAzZWtsb2dfZmQsIGtsb2dfYnVmZmVyLCBNQVhfTE9HX1NJWkUpO1xuJiM0MztcdGlmICghQVNTRVJUX0dFKHJldCwgMCwgXCYjMzQ7cmVhZCBrZXJuZWwgbG9nc1wmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHJldCA9IGNoZWNrX2thc2FuX3JlcG9ydF9pbl9rZXJuZWxfbG9ncyhrbG9nX2J1ZmZlciwgY3R4LFxuJiM0MztcdFx0XHRcdFx0XHR0ZXN0LVx1MDAzZWlzX3dyaXRlLCBhY2Nlc3Nfc2l6ZSk7XG4mIzQzO1x0aWYgKG9uX3N0YWNrIHx8IHRlc3QtXHUwMDNlZXhwZWN0X25vX3JlcG9ydClcbiYjNDM7XHRcdEFTU0VSVF9ORVEocmV0LCAwLCBcJiMzNDtubyByZXBvcnQgc2hvdWxkIGJlIGdlbmVyYXRlZFwmIzM0Oyk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0QVNTRVJUX09LKHJldCwgXCYjMzQ7cmVwb3J0IHNob3VsZCBiZSBnZW5lcmF0ZWRcJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydW5fc3VidGVzdF93aXRoX3NpemVfYW5kX2xvY2F0aW9uKHN0cnVjdCB0ZXN0X2N0eCAqY3R4LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgaW50IGFjY2Vzc19zaXplLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIGJvb2wgb25fc3RhY2spXG4mIzQzO3tcbiYjNDM7XHRjaGFyIHN1YnRlc3RfbmFtZVtTVUJURVNUX05BTUVfTUFYX0xFTl07XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0LVx1MDAzZXNraXBfbXVsdGlfc2l6ZV90ZXN0aW5nKSB7XG4mIzQzO1x0XHRzbnByaW50ZihzdWJ0ZXN0X25hbWUsIFNVQlRFU1RfTkFNRV9NQVhfTEVOLCBcJiMzNDslc1wmIzM0OyxcbiYjNDM7XHRcdFx0IHRlc3QtXHUwMDNlcHJvZ190eXBlKTtcbiYjNDM7XHRcdHN0cm5jcHkoY3R4LVx1MDAzZXByb2dfbmFtZSwgdGVzdC1cdTAwM2Vwcm9nX3R5cGUsIFBST0dfTkFNRV9NQVhfTEVOKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0c25wcmludGYoc3VidGVzdF9uYW1lLCBTVUJURVNUX05BTUVfTUFYX0xFTiwgXCYjMzQ7JXNfJWRfJXNcJiMzNDssXG4mIzQzO1x0XHRcdCB0ZXN0LVx1MDAzZXByb2dfdHlwZSwgYWNjZXNzX3NpemUsXG4mIzQzO1x0XHRcdCBvbl9zdGFjayA/IFwmIzM0O29uX3N0YWNrXCYjMzQ7IDogXCYjMzQ7bm90X29uX3N0YWNrXCYjMzQ7KTtcbiYjNDM7XHRcdHNucHJpbnRmKGN0eC1cdTAwM2Vwcm9nX25hbWUsIFBST0dfTkFNRV9NQVhfTEVOLCBcJiMzNDslc18lc1wmIzM0OyxcbiYjNDM7XHRcdFx0IHRlc3QtXHUwMDNlcHJvZ190eXBlLFxuJiM0MztcdFx0XHQgb25fc3RhY2sgPyBcJiMzNDtvbl9zdGFja1wmIzM0OyA6IFwmIzM0O25vdF9vbl9zdGFja1wmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXRlc3RfX3N0YXJ0X3N1YnRlc3Qoc3VidGVzdF9uYW1lKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3QtXHUwMDNlbmVlZHNfbG9hZF9hY3Ffc3RvcmVfcmVsIFx1MDAyNlx1MDAyNiBjdHgtXHUwMDNlc2tpcF9sb2FkX2FjcV9zdG9yZV9yZWwpIHtcbiYjNDM7XHRcdHRlc3RfX3NraXAoKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGV4ZWNfc3VidGVzdChjdHgsIHRlc3QsIGFjY2Vzc19zaXplLCBvbl9zdGFjayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ1bl9zdWJ0ZXN0X3dpdGhfc2l6ZShzdHJ1Y3QgdGVzdF9jdHggKmN0eCwgc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCxcbiYjNDM7XHRcdFx0XHQgIGludCBzaXplKVxuJiM0Mzt7XG4mIzQzO1x0cnVuX3N1YnRlc3Rfd2l0aF9zaXplX2FuZF9sb2NhdGlvbihjdHgsIHRlc3QsIHNpemUsIGZhbHNlKTtcbiYjNDM7XHRpZiAoIXRlc3QtXHUwMDNlc2tpcF9vbl9zdGFja190ZXN0aW5nKVxuJiM0MztcdFx0cnVuX3N1YnRlc3Rfd2l0aF9zaXplX2FuZF9sb2NhdGlvbihjdHgsIHRlc3QsIHNpemUsIHRydWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydW5fc3VidGVzdChzdHJ1Y3QgdGVzdF9jdHggKmN0eCwgc3RydWN0IHRlc3Rfc3BlYyAqdGVzdClcbiYjNDM7e1xuJiM0MztcdGlmICh0ZXN0LVx1MDAzZXNraXBfbXVsdGlfc2l6ZV90ZXN0aW5nKSB7XG4mIzQzO1x0XHRydW5fc3VidGVzdF93aXRoX3NpemUoY3R4LCB0ZXN0LCB0ZXN0LVx1MDAzZXJ1bl9zaXplKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghdGVzdC1cdTAwM2Vvbmx5XzMyX29yXzY0KSB7XG4mIzQzO1x0XHRydW5fc3VidGVzdF93aXRoX3NpemUoY3R4LCB0ZXN0LCAxKTtcbiYjNDM7XHRcdHJ1bl9zdWJ0ZXN0X3dpdGhfc2l6ZShjdHgsIHRlc3QsIDIpO1xuJiM0MztcdH1cbiYjNDM7XHRydW5fc3VidGVzdF93aXRoX3NpemUoY3R4LCB0ZXN0LCA0KTtcbiYjNDM7XHRydW5fc3VidGVzdF93aXRoX3NpemUoY3R4LCB0ZXN0LCA4KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnVuX2JsaW5kaW5nX3N1YnRlc3Qodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0ZXN0X3NwZWMgYmxpbmRpbmdfc3BlYyA9IHtcbiYjNDM7XHRcdC5wcm9nX3R5cGUgPSBcJiMzNDtzdF9ibGluZGVkXCYjMzQ7LFxuJiM0MztcdFx0LmlzX3dyaXRlID0gdHJ1ZSxcbiYjNDM7XHR9O1xuJiM0MztcdGNoYXIgYnBmX2ppdF9oYXJkZW4gPSAmIzM5OzImIzM5OztcbiYjNDM7XHRzdHJ1Y3Qga2FzYW5faGFyZGVuICpza2VsO1xuJiM0MztcdHN0cnVjdCB0ZXN0X2N0eCAqY3R4O1xuJiM0MztcbiYjNDM7XHRpZiAoIXRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7c3RfYmxpbmRlZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGN0eCA9IGNhbGxvYygxLCBzaXplb2YoKmN0eCkpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihjdHgsIFwmIzM0O2FsbG9jIGJsaW5kaW5nIGN0eFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0Y3R4LVx1MDAzZWtsb2dfZmQgPSAtMTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNldF9icGZfaml0X2hhcmRlbihcdTAwMjZicGZfaml0X2hhcmRlbikpXG4mIzQzO1x0XHRnb3RvIGZyZWVfY3R4O1xuJiM0MztcbiYjNDM7XHRza2VsID0ga2FzYW5faGFyZGVuX19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O29wZW4gYW5kIGxvYWQgYmxpbmRlZCBwcm9nXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0Y3R4LVx1MDAzZWtsb2dfZmQgPSBvcGVuX2tlcm5lbF9sb2dzKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfRkQoY3R4LVx1MDAzZWtsb2dfZmQsIFwmIzM0O29wZW4ga2VybmVsIGxvZ3NcJiMzNDspKVxuJiM0MztcdFx0Z290byBkZXN0cm95O1xuJiM0MztcbiYjNDM7XHRjdHgtXHUwMDNlb2JqID0gc2tlbC1cdTAwM2VvYmo7XG4mIzQzO1x0c3RybmNweShjdHgtXHUwMDNlcHJvZ19uYW1lLCBcJiMzNDtzdF9ibGluZGVkXCYjMzQ7LCBQUk9HX05BTUVfTUFYX0xFTik7XG4mIzQzO1xuJiM0MztcdGV4ZWNfc3VidGVzdChjdHgsIFx1MDAyNmJsaW5kaW5nX3NwZWMsIDEsIGZhbHNlKTtcbiYjNDM7XG4mIzQzO2Rlc3Ryb3k6XG4mIzQzO1x0Y2xvc2UoY3R4LVx1MDAzZWtsb2dfZmQpO1xuJiM0MztcdGthc2FuX2hhcmRlbl9fZGVzdHJveShza2VsKTtcbiYjNDM7cmVzdG9yZTpcbiYjNDM7XHRzZXRfYnBmX2ppdF9oYXJkZW4oXHUwMDI2YnBmX2ppdF9oYXJkZW4pO1xuJiM0MztmcmVlX2N0eDpcbiYjNDM7XHRmcmVlKGN0eCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgdGVzdF9zcGVjIHRlc3RzW10gPSB7XG4mIzQzO1x0e1xuJiM0MztcdFx0LnByb2dfdHlwZSA9IFwmIzM0O3N0XCYjMzQ7LFxuJiM0MztcdFx0LmlzX3dyaXRlID0gdHJ1ZVxuJiM0MztcdH0sXG4mIzQzO1x0e1xuJiM0MztcdFx0LnByb2dfdHlwZSA9IFwmIzM0O3N0eFwmIzM0OyxcbiYjNDM7XHRcdC5pc193cml0ZSA9IHRydWVcbiYjNDM7XHR9LFxuJiM0MztcdHtcbiYjNDM7XHRcdC5wcm9nX3R5cGUgPSBcJiMzNDtsZHhcJiMzNDssXG4mIzQzO1x0XHQuaXNfd3JpdGUgPSBmYWxzZVxuJiM0MztcdH0sXG4mIzQzO1x0e1xuJiM0MztcdFx0LnByb2dfdHlwZSA9IFwmIzM0O3NpbXBsZV9hdG9taWNcJiMzNDssXG4mIzQzO1x0XHQuaXNfd3JpdGUgPSB0cnVlLFxuJiM0MztcdFx0Lm9ubHlfMzJfb3JfNjQgPSB0cnVlXG4mIzQzO1x0fSxcbiYjNDM7XHR7XG4mIzQzO1x0XHQucHJvZ190eXBlID0gXCYjMzQ7bG9hZF9hY3F1aXJlXCYjMzQ7LFxuJiM0MztcdFx0LmlzX3dyaXRlID0gZmFsc2UsXG4mIzQzO1x0XHQubmVlZHNfbG9hZF9hY3Ffc3RvcmVfcmVsID0gdHJ1ZVxuJiM0MztcdH0sXG4mIzQzO1x0e1xuJiM0MztcdFx0LnByb2dfdHlwZSA9IFwmIzM0O3N0b3JlX3JlbGVhc2VcJiMzNDssXG4mIzQzO1x0XHQuaXNfd3JpdGUgPSB0cnVlLFxuJiM0MztcdFx0Lm5lZWRzX2xvYWRfYWNxX3N0b3JlX3JlbCA9IHRydWVcbiYjNDM7XHR9LFxuJiM0MztcdHtcbiYjNDM7XHRcdC5wcm9nX3R5cGUgPSBcJiMzNDtsZHhfcGF0Y2hlZFwmIzM0OyxcbiYjNDM7XHRcdC5pc193cml0ZSA9IGZhbHNlLFxuJiM0MztcdFx0LnNraXBfbXVsdGlfc2l6ZV90ZXN0aW5nID0gdHJ1ZSxcbiYjNDM7XHRcdC5za2lwX29uX3N0YWNrX3Rlc3RpbmcgPSB0cnVlLFxuJiM0MztcdFx0LnJ1bl9zaXplID0gNCxcbiYjNDM7XHRcdC5ybmRfaGkzMiA9IHRydWVcbiYjNDM7XHR9LFxuJiM0MztcdHtcbiYjNDM7XHRcdC5wcm9nX3R5cGUgPSBcJiMzNDtsZHhfcGF0Y2hlZF9vbl9zdGFja1wmIzM0OyxcbiYjNDM7XHRcdC5pc193cml0ZSA9IGZhbHNlLFxuJiM0MztcdFx0LnNraXBfbXVsdGlfc2l6ZV90ZXN0aW5nID0gdHJ1ZSxcbiYjNDM7XHRcdC5za2lwX29uX3N0YWNrX3Rlc3RpbmcgPSB0cnVlLFxuJiM0MztcdFx0LnJ1bl9zaXplID0gNCxcbiYjNDM7XHRcdC5leHBlY3Rfbm9fcmVwb3J0ID0gdHJ1ZSxcbiYjNDM7XHRcdC5ybmRfaGkzMiA9IHRydWVcbiYjNDM7XHR9LFxuJiM0MztcdHtcbiYjNDM7XHRcdC5wcm9nX3R5cGUgPSBcJiMzNDt2ZXJpZmllcl9wYXRoc19zdGFja19hbmRfbm9uX3N0YWNrXCYjMzQ7LFxuJiM0MztcdFx0LmlzX3dyaXRlID0gdHJ1ZSxcbiYjNDM7XHRcdC5za2lwX211bHRpX3NpemVfdGVzdGluZyA9IHRydWUsXG4mIzQzO1x0XHQuc2tpcF9vbl9zdGFja190ZXN0aW5nID0gdHJ1ZSxcbiYjNDM7XHRcdC5ydW5fc2l6ZSA9IDFcbiYjNDM7XHR9XG4mIzQzO307XG4mIzQzO1xuJiM0Mzt2b2lkIHRlc3Rfa2FzYW4odm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrYXNhbl93cml0ZV92YWwgdmFsO1xuJiM0MztcdHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3Q7XG4mIzQzO1x0c3RydWN0IHRlc3RfY3R4ICpjdHg7XG4mIzQzO1x0c3RydWN0IGthc2FuICpza2VsO1xuJiM0MztcdF9fdTMyIGtleSA9IDA7XG4mIzQzO1x0aW50IGksIHJldDtcbiYjNDM7XG4mIzQzO1x0Y3R4ID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgdGVzdF9jdHgpKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoY3R4LCBcJiMzNDthbGxvYyB0ZXN0IGN0eFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmICghaXNfaml0X2VuYWJsZWQoKSB8fCAhZ2V0X2thc2FuX2ppdF9lbmFibGVkKCkgfHxcbiYjNDM7XHQgICAgIWdldF9rYXNhbl9tdWx0aV9zaG90X2VuYWJsZWQoKSkge1xuJiM0MztcdFx0dGVzdF9fc2tpcCgpO1xuJiM0MztcdFx0Z290byBlbmQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRza2VsID0ga2FzYW5fX29wZW4oKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7b3BlbiBwcm9nXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZW5kO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHRlc3RzKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZztcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXRlc3RzW2ldLnJuZF9oaTMyKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRwcm9nID0gYnBmX29iamVjdF9fZmluZF9wcm9ncmFtX2J5X25hbWUoc2tlbC1cdTAwM2VvYmosXG4mIzQzO1x0XHRcdFx0XHRcdFx0dGVzdHNbaV0ucHJvZ190eXBlKTtcbiYjNDM7XHRcdGlmICghQVNTRVJUX09LX1BUUihwcm9nLCBcJiMzNDtmaW5kIHJuZF9oaTMyIHByb2dcJiMzNDspKVxuJiM0MztcdFx0XHRnb3RvIGRlc3Ryb3k7XG4mIzQzO1x0XHRicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKHByb2csIEJQRl9GX1RFU1RfUk5EX0hJMzIpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soa2FzYW5fX2xvYWQoc2tlbCksIFwmIzM0O2xvYWQgcHJvZ1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGRlc3Ryb3k7XG4mIzQzO1xuJiM0MztcdGN0eC1cdTAwM2VvYmogPSBza2VsLVx1MDAzZW9iajtcbiYjNDM7XHRjdHgtXHUwMDNlYWNjZXNzX3NpemUgPSBcdTAwMjZza2VsLVx1MDAzZWJzcy1cdTAwM2VhY2Nlc3Nfc2l6ZTtcbiYjNDM7XHRjdHgtXHUwMDNlc2tpcF9sb2FkX2FjcV9zdG9yZV9yZWwgPSBza2VsLVx1MDAzZWRhdGEtXHUwMDNlc2tpcF9sb2FkX2FjcV9zdG9yZV9yZWxfdGVzdHM7XG4mIzQzO1xuJiM0MztcdGN0eC1cdTAwM2VrbG9nX2ZkID0gb3Blbl9rZXJuZWxfbG9ncygpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX0ZEKGN0eC1cdTAwM2VrbG9nX2ZkLCBcJiMzNDtvcGVuIGtlcm5lbCBsb2dzXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZGVzdHJveTtcbiYjNDM7XG4mIzQzO1x0LyogRmlsbCBtYXAgd2l0aCByZWNvZ25pemFibGUgdmFsdWVzICovXG4mIzQzO1x0cmV0ID0gYnBmX21hcF9fbG9va3VwX2VsZW0oc2tlbC1cdTAwM2VtYXBzLnRlc3RfbWFwLCBcdTAwMjZrZXksIHNpemVvZihrZXkpLFxuJiM0MztcdFx0XHRcdCAgIFx1MDAyNnZhbCwgc2l6ZW9mKHZhbCksIDApO1xuJiM0MztcdGlmICghQVNTRVJUX09LKHJldCwgXCYjMzQ7Z2V0IG1hcFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGNsb3NlO1xuJiM0MztcdHZhbC5kYXRhXzEgPSAweEFBO1xuJiM0MztcdHZhbC5kYXRhXzIgPSAweEJCQkI7XG4mIzQzO1x0dmFsLmRhdGFfNCA9IDB4Q0NDQ0NDQ0M7XG4mIzQzO1x0dmFsLmRhdGFfOCA9IDB4RERERERERERERERERERERDtcbiYjNDM7XHRyZXQgPSBicGZfbWFwX191cGRhdGVfZWxlbShza2VsLVx1MDAzZW1hcHMudGVzdF9tYXAsIFx1MDAyNmtleSwgc2l6ZW9mKGtleSksXG4mIzQzO1x0XHRcdFx0ICAgXHUwMDI2dmFsLCBzaXplb2YodmFsKSwgMCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0socmV0LCBcJiMzNDtzZXQgbWFwXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gY2xvc2U7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUodGVzdHMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dGVzdCA9IFx1MDAyNnRlc3RzW2ldO1xuJiM0MztcdFx0cnVuX3N1YnRlc3QoY3R4LCB0ZXN0KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQmxpbmRpbmcgc3VidGVzdCBpcyBoYW5kbGVkIGRpZmZlcmVudGx5IGFzIGl0IG5lZWRzIHRoZVxuJiM0MztcdCAqIGNvcnJlc3BvbmRpbmcgcHJvZ3JhbSB0byBiZSBsb2FkZWQgd2l0aCBicGZfaml0X2hhcmRlbiByYWlzZWRcbiYjNDM7XHQgKi9cbiYjNDM7XHRydW5fYmxpbmRpbmdfc3VidGVzdCgpO1xuJiM0MztcbiYjNDM7Y2xvc2U6XG4mIzQzO1x0Y2xvc2UoY3R4LVx1MDAzZWtsb2dfZmQpO1xuJiM0MztkZXN0cm95OlxuJiM0MztcdGthc2FuX19kZXN0cm95KHNrZWwpO1xuJiM0MztlbmQ6XG4mIzQzO1x0ZnJlZShjdHgpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2thc2FuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva2FzYW4uY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi44MmRkY2UzMDU5YWVlMVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2thc2FuLmNcbkBAIC0wLDAgJiM0MzsxLDM5NCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBCU0QtMy1DbGF1c2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl9taXNjLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkYm9vbC5oXHUwMDNlXG4mIzQzO1xuJiM0MztleHRlcm4gdm9pZCBicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZvaWQgKm1lbSwgX191MzIgbWVtX19zeikgX19rc3ltO1xuJiM0MztleHRlcm4gdm9pZCBicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odm9pZCAqbWVtLCBfX3UzMiBtZW1fX3N6KSBfX2tzeW07XG4mIzQzO1xuJiM0MztpbnQgYWNjZXNzX3NpemU7XG4mIzQzO1xuJiM0MztzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsIHtcbiYjNDM7XHRfX3U4IGRhdGFfMTtcbiYjNDM7XHRfX3UxNiBkYXRhXzI7XG4mIzQzO1x0X191MzIgZGF0YV80O1xuJiM0MztcdF9fdTY0IGRhdGFfODtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCB7XG4mIzQzO1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4mIzQzO1x0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbiYjNDM7XHRfX3R5cGUoa2V5LCBfX3UzMik7XG4mIzQzO1x0X190eXBlKHZhbHVlLCBzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKTtcbiYjNDM7fSB0ZXN0X21hcCBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3RjeC9pbmdyZXNzXCYjMzQ7KVxuJiM0MztpbnQgc3Rfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCB2YWw7XG4mIzQzO1xuJiM0MztcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24oXHUwMDI2dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuJiM0MztcdHN3aXRjaCAoYWNjZXNzX3NpemUpIHtcbiYjNDM7XHRjYXNlIDE6XG4mIzQzO1x0XHR2YWwuZGF0YV8xID0gMHhBQTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgMjpcbiYjNDM7XHRcdHZhbC5kYXRhXzIgPSAweEFBO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSA0OlxuJiM0MztcdFx0dmFsLmRhdGFfNCA9IDB4QUE7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIDg6XG4mIzQzO1x0XHR2YWwuZGF0YV84ID0gMHhBQTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24oXHUwMDI2dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7dGN4L2luZ3Jlc3NcJiMzNDspXG4mIzQzO2ludCBzdF9ub3Rfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCAqdmFsO1xuJiM0MztcdF9fdTMyIGtleSA9IDA7XG4mIzQzO1xuJiM0MztcdHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2dGVzdF9tYXAsIFx1MDAyNmtleSk7XG4mIzQzO1x0aWYgKCF2YWwpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0YnBmX2tmdW5jX2thc2FuX3BvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4mIzQzO1x0c3dpdGNoIChhY2Nlc3Nfc2l6ZSkge1xuJiM0MztcdGNhc2UgMTpcbiYjNDM7XHRcdHZhbC1cdTAwM2VkYXRhXzEgPSAweEFBO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSAyOlxuJiM0MztcdFx0dmFsLVx1MDAzZWRhdGFfMiA9IDB4QUE7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIDQ6XG4mIzQzO1x0XHR2YWwtXHUwMDNlZGF0YV80ID0gMHhBQTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgODpcbiYjNDM7XHRcdHZhbC1cdTAwM2VkYXRhXzggPSAweEFBO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDt0Y3gvaW5ncmVzc1wmIzM0OylcbiYjNDM7aW50IHN0eF9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsIHZhbDtcbiYjNDM7XG4mIzQzO1x0YnBmX2tmdW5jX2thc2FuX3BvaXNvbihcdTAwMjZ2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4mIzQzO1x0c3dpdGNoIChhY2Nlc3Nfc2l6ZSkge1xuJiM0MztcdGNhc2UgMTpcbiYjNDM7XHRcdHZhbC5kYXRhXzEgPSBhY2Nlc3Nfc2l6ZTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgMjpcbiYjNDM7XHRcdHZhbC5kYXRhXzIgPSBhY2Nlc3Nfc2l6ZTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgNDpcbiYjNDM7XHRcdHZhbC5kYXRhXzQgPSBhY2Nlc3Nfc2l6ZTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgODpcbiYjNDM7XHRcdHZhbC5kYXRhXzggPSBhY2Nlc3Nfc2l6ZTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24oXHUwMDI2dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7dGN4L2luZ3Jlc3NcJiMzNDspXG4mIzQzO2ludCBzdHhfbm90X29uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrYXNhbl93cml0ZV92YWwgKnZhbDtcbiYjNDM7XHRfX3UzMiBrZXkgPSAwO1xuJiM0MztcbiYjNDM7XHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnRlc3RfbWFwLCBcdTAwMjZrZXkpO1xuJiM0MztcdGlmICghdmFsKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuJiM0MztcdHN3aXRjaCAoYWNjZXNzX3NpemUpIHtcbiYjNDM7XHRjYXNlIDE6XG4mIzQzO1x0XHR2YWwtXHUwMDNlZGF0YV8xID0gYWNjZXNzX3NpemU7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIDI6XG4mIzQzO1x0XHR2YWwtXHUwMDNlZGF0YV8yID0gYWNjZXNzX3NpemU7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIDQ6XG4mIzQzO1x0XHR2YWwtXHUwMDNlZGF0YV80ID0gYWNjZXNzX3NpemU7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIDg6XG4mIzQzO1x0XHR2YWwtXHUwMDNlZGF0YV84ID0gYWNjZXNzX3NpemU7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0YnBmX2tmdW5jX2thc2FuX3VucG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3RjeC9pbmdyZXNzXCYjMzQ7KVxuJiM0MztpbnQgbGR4X29uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrYXNhbl93cml0ZV92YWwgdmFsO1xuJiM0MztcbiYjNDM7XHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKFx1MDAyNnZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbiYjNDM7XHRzd2l0Y2ggKGFjY2Vzc19zaXplKSB7XG4mIzQzO1x0Y2FzZSAxOlxuJiM0MztcdFx0X19zaW5rKHZhbC5kYXRhXzEpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSAyOlxuJiM0MztcdFx0X19zaW5rKHZhbC5kYXRhXzIpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSA0OlxuJiM0MztcdFx0X19zaW5rKHZhbC5kYXRhXzQpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSA4OlxuJiM0MztcdFx0X19zaW5rKHZhbC5kYXRhXzgpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbihcdTAwMjZ2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDt0Y3gvaW5ncmVzc1wmIzM0OylcbiYjNDM7aW50IGxkeF9ub3Rfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCAqdmFsO1xuJiM0MztcdF9fdTMyIGtleSA9IDA7XG4mIzQzO1xuJiM0MztcdHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2dGVzdF9tYXAsIFx1MDAyNmtleSk7XG4mIzQzO1x0aWYgKCF2YWwpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0YnBmX2tmdW5jX2thc2FuX3BvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4mIzQzO1x0c3dpdGNoIChhY2Nlc3Nfc2l6ZSkge1xuJiM0MztcdGNhc2UgMTpcbiYjNDM7XHRcdF9fc2luayh2YWwtXHUwMDNlZGF0YV8xKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgMjpcbiYjNDM7XHRcdF9fc2luayh2YWwtXHUwMDNlZGF0YV8yKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgNDpcbiYjNDM7XHRcdF9fc2luayh2YWwtXHUwMDNlZGF0YV80KTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgODpcbiYjNDM7XHRcdF9fc2luayh2YWwtXHUwMDNlZGF0YV84KTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7dGN4L2luZ3Jlc3NcJiMzNDspXG4mIzQzO2ludCBsZHhfcGF0Y2hlZChzdHJ1Y3QgX19za19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsICp2YWw7XG4mIzQzO1x0X191MzIga2V5ID0gMDtcbiYjNDM7XG4mIzQzO1x0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZ0ZXN0X21hcCwgXHUwMDI2a2V5KTtcbiYjNDM7XHRpZiAoIXZhbClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbiYjNDM7XHRfX3NpbmsodmFsLVx1MDAzZWRhdGFfNCk7XG4mIzQzO1x0YnBmX2tmdW5jX2thc2FuX3VucG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDt0Y3gvaW5ncmVzc1wmIzM0OylcbiYjNDM7aW50IGxkeF9wYXRjaGVkX29uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrYXNhbl93cml0ZV92YWwgdmFsO1xuJiM0MztcbiYjNDM7XHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKFx1MDAyNnZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbiYjNDM7XHRfX3NpbmsodmFsLmRhdGFfNCk7XG4mIzQzO1x0YnBmX2tmdW5jX2thc2FuX3VucG9pc29uKFx1MDAyNnZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDt0Y3gvaW5ncmVzc1wmIzM0OylcbiYjNDM7aW50IHNpbXBsZV9hdG9taWNfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCB2YWw7XG4mIzQzO1xuJiM0MztcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24oXHUwMDI2dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuJiM0MztcdHN3aXRjaCAoYWNjZXNzX3NpemUpIHtcbiYjNDM7XHRjYXNlIDQ6XG4mIzQzO1x0XHRfX3N5bmNfZmV0Y2hfYW5kX2FkZChcdTAwMjZ2YWwuZGF0YV80LCA0KTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgODpcbiYjNDM7XHRcdF9fc3luY19mZXRjaF9hbmRfYWRkKFx1MDAyNnZhbC5kYXRhXzgsIDgpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbihcdTAwMjZ2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDt0Y3gvaW5ncmVzc1wmIzM0OylcbiYjNDM7aW50IHNpbXBsZV9hdG9taWNfbm90X29uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrYXNhbl93cml0ZV92YWwgKnZhbDtcbiYjNDM7XHRfX3UzMiBrZXkgPSAwO1xuJiM0MztcbiYjNDM7XHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnRlc3RfbWFwLCBcdTAwMjZrZXkpO1xuJiM0MztcdGlmICghdmFsKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuJiM0MztcdHN3aXRjaCAoYWNjZXNzX3NpemUpIHtcbiYjNDM7XHRjYXNlIDQ6XG4mIzQzO1x0XHRfX3N5bmNfZmV0Y2hfYW5kX2FkZChcdTAwMjZ2YWwtXHUwMDNlZGF0YV80LCA0KTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgODpcbiYjNDM7XHRcdF9fc3luY19mZXRjaF9hbmRfYWRkKFx1MDAyNnZhbC1cdTAwM2VkYXRhXzgsIDgpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNpZmRlZiBfX0JQRl9GRUFUVVJFX0xPQURfQUNRX1NUT1JFX1JFTFxuJiM0Mztib29sIHNraXBfbG9hZF9hY3Ffc3RvcmVfcmVsX3Rlc3RzIFNFQyhcJiMzNDsuZGF0YVwmIzM0OykgPSAwO1xuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3RjeC9pbmdyZXNzXCYjMzQ7KVxuJiM0MztpbnQgbG9hZF9hY3F1aXJlX29uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrYXNhbl93cml0ZV92YWwgdmFsO1xuJiM0MztcbiYjNDM7XHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKFx1MDAyNnZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbiYjNDM7XHRzd2l0Y2ggKGFjY2Vzc19zaXplKSB7XG4mIzQzO1x0Y2FzZSAxOlxuJiM0MztcdFx0X19hdG9taWNfbG9hZF9uKFx1MDAyNnZhbC5kYXRhXzEsIF9fQVRPTUlDX0FDUVVJUkUpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSAyOlxuJiM0MztcdFx0X19hdG9taWNfbG9hZF9uKFx1MDAyNnZhbC5kYXRhXzIsIF9fQVRPTUlDX0FDUVVJUkUpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSA0OlxuJiM0MztcdFx0X19hdG9taWNfbG9hZF9uKFx1MDAyNnZhbC5kYXRhXzQsIF9fQVRPTUlDX0FDUVVJUkUpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSA4OlxuJiM0MztcdFx0X19hdG9taWNfbG9hZF9uKFx1MDAyNnZhbC5kYXRhXzgsIF9fQVRPTUlDX0FDUVVJUkUpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbihcdTAwMjZ2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDt0Y3gvaW5ncmVzc1wmIzM0OylcbiYjNDM7aW50IGxvYWRfYWNxdWlyZV9ub3Rfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCAqdmFsO1xuJiM0MztcdF9fdTMyIGtleSA9IDA7XG4mIzQzO1xuJiM0MztcdHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2dGVzdF9tYXAsIFx1MDAyNmtleSk7XG4mIzQzO1x0aWYgKCF2YWwpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0YnBmX2tmdW5jX2thc2FuX3BvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4mIzQzO1x0c3dpdGNoIChhY2Nlc3Nfc2l6ZSkge1xuJiM0MztcdGNhc2UgMTpcbiYjNDM7XHRcdF9fYXRvbWljX2xvYWRfbihcdTAwMjZ2YWwtXHUwMDNlZGF0YV8xLCBfX0FUT01JQ19BQ1FVSVJFKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgMjpcbiYjNDM7XHRcdF9fYXRvbWljX2xvYWRfbihcdTAwMjZ2YWwtXHUwMDNlZGF0YV8yLCBfX0FUT01JQ19BQ1FVSVJFKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgNDpcbiYjNDM7XHRcdF9fYXRvbWljX2xvYWRfbihcdTAwMjZ2YWwtXHUwMDNlZGF0YV80LCBfX0FUT01JQ19BQ1FVSVJFKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgODpcbiYjNDM7XHRcdF9fYXRvbWljX2xvYWRfbihcdTAwMjZ2YWwtXHUwMDNlZGF0YV84LCBfX0FUT01JQ19BQ1FVSVJFKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7dGN4L2luZ3Jlc3NcJiMzNDspXG4mIzQzO2ludCBzdG9yZV9yZWxlYXNlX29uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrYXNhbl93cml0ZV92YWwgdmFsO1xuJiM0MztcbiYjNDM7XHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKFx1MDAyNnZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbiYjNDM7XHRzd2l0Y2ggKGFjY2Vzc19zaXplKSB7XG4mIzQzO1x0Y2FzZSAxOlxuJiM0MztcdFx0X19hdG9taWNfc3RvcmVfbihcdTAwMjZ2YWwuZGF0YV8xLCAweEFBLCBfX0FUT01JQ19SRUxFQVNFKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgMjpcbiYjNDM7XHRcdF9fYXRvbWljX3N0b3JlX24oXHUwMDI2dmFsLmRhdGFfMiwgMHhCQkJCLCBfX0FUT01JQ19SRUxFQVNFKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgNDpcbiYjNDM7XHRcdF9fYXRvbWljX3N0b3JlX24oXHUwMDI2dmFsLmRhdGFfNCwgMHhDQ0NDQ0NDQywgX19BVE9NSUNfUkVMRUFTRSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIDg6XG4mIzQzO1x0XHRfX2F0b21pY19zdG9yZV9uKFx1MDAyNnZhbC5kYXRhXzgsIDB4RERERERERERERERERERERCxcbiYjNDM7XHRcdFx0XHQgX19BVE9NSUNfUkVMRUFTRSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0YnBmX2tmdW5jX2thc2FuX3VucG9pc29uKFx1MDAyNnZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3RjeC9pbmdyZXNzXCYjMzQ7KVxuJiM0MztpbnQgc3RvcmVfcmVsZWFzZV9ub3Rfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCAqdmFsO1xuJiM0MztcdF9fdTMyIGtleSA9IDA7XG4mIzQzO1xuJiM0MztcdHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2dGVzdF9tYXAsIFx1MDAyNmtleSk7XG4mIzQzO1x0aWYgKCF2YWwpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0YnBmX2tmdW5jX2thc2FuX3BvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4mIzQzO1x0c3dpdGNoIChhY2Nlc3Nfc2l6ZSkge1xuJiM0MztcdGNhc2UgMTpcbiYjNDM7XHRcdF9fYXRvbWljX3N0b3JlX24oXHUwMDI2dmFsLVx1MDAzZWRhdGFfMSwgMHhBQSwgX19BVE9NSUNfUkVMRUFTRSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIDI6XG4mIzQzO1x0XHRfX2F0b21pY19zdG9yZV9uKFx1MDAyNnZhbC1cdTAwM2VkYXRhXzIsIDB4QkJCQiwgX19BVE9NSUNfUkVMRUFTRSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIDQ6XG4mIzQzO1x0XHRfX2F0b21pY19zdG9yZV9uKFx1MDAyNnZhbC1cdTAwM2VkYXRhXzQsIDB4Q0NDQ0NDQ0MsIF9fQVRPTUlDX1JFTEVBU0UpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSA4OlxuJiM0MztcdFx0X19hdG9taWNfc3RvcmVfbihcdTAwMjZ2YWwtXHUwMDNlZGF0YV84LCAweEREREREREREREREREREREQsXG4mIzQzO1x0XHRcdFx0IF9fQVRPTUlDX1JFTEVBU0UpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7I2Vsc2VcbiYjNDM7Ym9vbCBza2lwX2xvYWRfYWNxX3N0b3JlX3JlbF90ZXN0cyBTRUMoXCYjMzQ7LmRhdGFcJiMzNDspID0gMTtcbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7dGN4L2luZ3Jlc3NcJiMzNDspXG4mIzQzO2ludCB2ZXJpZmllcl9wYXRoc19zdGFja19hbmRfbm9uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrYXNhbl93cml0ZV92YWwgc3RhY2tfdmFsID0ge307XG4mIzQzO1x0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCAqdmFsO1xuJiM0MztcdHZvaWQgKnB0cjtcbiYjNDM7XHRfX3UzMiBrZXkgPSAwO1xuJiM0MztcbiYjNDM7XHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnRlc3RfbWFwLCBcdTAwMjZrZXkpO1xuJiM0MztcdGlmICghdmFsKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChhY2Nlc3Nfc2l6ZSlcbiYjNDM7XHRcdHB0ciA9IHZhbDtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRwdHIgPSBcdTAwMjZzdGFja192YWw7XG4mIzQzO1xuJiM0MztcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24odmFsLCBzaXplb2YoKnZhbCkpO1xuJiM0MztcdCooX191OCAqKXB0ciA9IDB4QUE7XG4mIzQzO1x0YnBmX2tmdW5jX2thc2FuX3VucG9pc29uKHZhbCwgc2l6ZW9mKCp2YWwpKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y2hhciBMSUNFTlNFW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rYXNhbl9oYXJkZW4uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rYXNhbl9oYXJkZW4uY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi44MDhkN2RhNjQ0MjE2MlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2thc2FuX2hhcmRlbi5jXG5AQCAtMCwwICYjNDM7MSw0MSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBCU0QtMy1DbGF1c2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4mIzQzO1xuJiM0MztleHRlcm4gdm9pZCBicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZvaWQgKm1lbSwgX191MzIgbWVtX19zeikgX19rc3ltO1xuJiM0MztleHRlcm4gdm9pZCBicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odm9pZCAqbWVtLCBfX3UzMiBtZW1fX3N6KSBfX2tzeW07XG4mIzQzO1xuJiM0MztzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsIHtcbiYjNDM7XHRfX3U4IGRhdGFfMTtcbiYjNDM7XHRfX3UxNiBkYXRhXzI7XG4mIzQzO1x0X191MzIgZGF0YV80O1xuJiM0MztcdF9fdTY0IGRhdGFfODtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCB7XG4mIzQzO1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4mIzQzO1x0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbiYjNDM7XHRfX3R5cGUoa2V5LCBfX3UzMik7XG4mIzQzO1x0X190eXBlKHZhbHVlLCBzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKTtcbiYjNDM7fSB0ZXN0X21hcCBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3RjeC9pbmdyZXNzXCYjMzQ7KVxuJiM0MztpbnQgc3RfYmxpbmRlZChzdHJ1Y3QgX19za19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsICp2YWw7XG4mIzQzO1x0X191MzIga2V5ID0gMDtcbiYjNDM7XG4mIzQzO1x0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZ0ZXN0X21hcCwgXHUwMDI2a2V5KTtcbiYjNDM7XHRpZiAoIXZhbClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbiYjNDM7XHR2YWwtXHUwMDNlZGF0YV8xID0gMHhBQTtcbiYjNDM7XHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y2hhciBMSUNFTlNFW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXG5pbmRleCAzMGYxY2QyMzA5M2NiZS4uNWQ2YTgzNGY3ZDc1NzUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXG5AQCAtMjcxLDYgJiM0MzsyNzEsMjYgQEAgX19icGZfa2Z1bmMgdm9pZCBicGZfa2Z1bmNfcHV0X2RlZmF1bHRfdHJ1c3RlZF9wdHJfdGVzdChzdHJ1Y3QgcHJvZ190ZXN0X21lbWJlclxuIFx0ICovXG4gfVxuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0JQRl9KSVRfS0FTQU5cbiYjNDM7XG4mIzQzO2V4dGVybiB2b2lkIGthc2FuX3BvaXNvbihjb25zdCB2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSwgdTggdmFsdWUsIGJvb2wgaW5pdCk7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEtBU0FOX1NMQUJfRlJFRSAweEZCXG4mIzQzO1xuJiM0MztfX2JwZl9rZnVuYyB2b2lkIGJwZl9rZnVuY19rYXNhbl9wb2lzb24odm9pZCAqbWVtLCB1MzIgbWVtX19zeilcbiYjNDM7e1xuJiM0MztcdGthc2FuX3BvaXNvbihtZW0sIG1lbV9fc3osIEtBU0FOX1NMQUJfRlJFRSwgZmFsc2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztfX2JwZl9rZnVuYyB2b2lkIGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2b2lkICptZW0sIHUzMiBtZW1fX3N6KVxuJiM0Mzt7XG4mIzQzO1x0a2FzYW5fcG9pc29uKG1lbSwgbWVtX19zeiwgMHgwMCwgZmFsc2UpO1xuJiM0Mzt9XG4mIzQzOyNlbHNlXG4mIzQzO19fYnBmX2tmdW5jIHZvaWQgYnBmX2tmdW5jX2thc2FuX3BvaXNvbih2b2lkICptZW0sIHUzMiBtZW1fX3N6KSB7IH1cbiYjNDM7X19icGZfa2Z1bmMgdm9pZCBicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odm9pZCAqbWVtLCB1MzIgbWVtX19zeikgeyB9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBfX2JwZl9rZnVuYyBzdHJ1Y3QgYnBmX3Rlc3Rtb2RfY3R4ICpcbiBicGZfdGVzdG1vZF9jdHhfY3JlYXRlKGludCAqZXJyKVxuIHtcbkBAIC03NDAsNiAmIzQzOzc2MCw4IEBAIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF8xKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF8yKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfZ2V0X2RlZmF1bHRfdHJ1c3RlZF9wdHJfdGVzdCk7XG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19wdXRfZGVmYXVsdF90cnVzdGVkX3B0cl90ZXN0KTtcbiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19rYXNhbl9wb2lzb24pXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24pXG4gQlRGX0tGVU5DU19FTkQoYnBmX3Rlc3Rtb2RfY29tbW9uX2tmdW5jX2lkcylcbiBcbiBCVEZfSURfTElTVChicGZfdGVzdG1vZF9kdG9yX2lkcylcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmNcbmluZGV4IGM5NzBlNzc5M2RmY2JjLi43MzdmNjY4YjM1ZTIzYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5jXG5AQCAtNTE5LDYgJiM0Mzs1MTksMzggQEAgYm9vbCBpc19qaXRfZW5hYmxlZCh2b2lkKVxuIFx0cmV0dXJuIGVuYWJsZWQ7XG4gfVxuIFxuJiM0MztpbnQgc2V0X2JwZl9qaXRfaGFyZGVuKGNoYXIgKmxldmVsKVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBvbGRfbGV2ZWw7XG4mIzQzO1x0aW50IGVyciA9IC0xO1xuJiM0MztcdGludCBmZCA9IC0xO1xuJiM0MztcbiYjNDM7XHRmZCA9IG9wZW4oXCYjMzQ7L3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfaGFyZGVuXCYjMzQ7LCBPX1JEV1IgfCBPX05PTkJMT0NLKTtcbiYjNDM7XHRpZiAoZmQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1xuJiM0MztcdGVyciA9IHJlYWQoZmQsIFx1MDAyNm9sZF9sZXZlbCwgMSk7XG4mIzQzO1x0aWYgKGVyciAhPSAxKSB7XG4mIzQzO1x0XHRlcnIgPSAtMTtcbiYjNDM7XHRcdGdvdG8gZW5kO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bHNlZWsoZmQsIDAsIFNFRUtfU0VUKTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gd3JpdGUoZmQsIGxldmVsLCAxKTtcbiYjNDM7XHRpZiAoZXJyICE9IDEpIHtcbiYjNDM7XHRcdGVyciA9IC0xO1xuJiM0MztcdFx0Z290byBlbmQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcnIgPSAwO1xuJiM0MztcdCpsZXZlbCA9IG9sZF9sZXZlbDtcbiYjNDM7ZW5kOlxuJiM0MztcdGlmIChmZCBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZShmZCk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiBpbnQgc3RhY2tfbXByb3RlY3Qodm9pZClcbiB7XG4gXHR2b2lkICpidWY7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5oXG5pbmRleCAyZWRjNmZiN2ZjNTIxMi4uZTAwNjQyYWZlODZmNDAgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuaFxuQEAgLTU5LDYgJiM0Mzs1OSw3IEBAIHN0cnVjdCBicGZfaW5zbjtcbiBpbnQgZ2V0X3hsYXRlZF9wcm9ncmFtKGludCBmZF9wcm9nLCBzdHJ1Y3QgYnBmX2luc24gKipidWYsIF9fdTMyICpjbnQpO1xuIGludCB0ZXN0aW5nX3Byb2dfZmxhZ3Modm9pZCk7XG4gYm9vbCBpc19qaXRfZW5hYmxlZCh2b2lkKTtcbiYjNDM7aW50IHNldF9icGZfaml0X2hhcmRlbihjaGFyICpsZXZlbCk7XG4gaW50IHN0YWNrX21wcm90ZWN0KHZvaWQpO1xuIFxuICNlbmRpZiAvKiBfX1RFU1RJTkdfSEVMUEVSU19IICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3VucHJpdl9oZWxwZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdW5wcml2X2hlbHBlcnMuY1xuaW5kZXggZjk5N2Q3ZWM4ZmQwODYuLjk1YmU4MzkzNzg4Mzc2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3VucHJpdl9oZWxwZXJzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi91bnByaXZfaGVscGVycy5jXG5AQCAtMTQyLDMgJiM0MzsxNDIsMTMgQEAgYm9vbCBnZXRfdW5wcml2X2Rpc2FibGVkKHZvaWQpXG4gXHR9XG4gXHRyZXR1cm4gbWl0aWdhdGlvbnNfb2ZmO1xuIH1cbiYjNDM7XG4mIzQzO2Jvb2wgZ2V0X2thc2FuX2ppdF9lbmFibGVkKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gY29uZmlnX2NvbnRhaW5zKFwmIzM0O0NPTkZJR19CUEZfSklUX0tBU0FOPXlcJiMzNDspID09IDE7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2Jvb2wgZ2V0X2thc2FuX211bHRpX3Nob3RfZW5hYmxlZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGNtZGxpbmVfY29udGFpbnMoXCYjMzQ7a2FzYW5fbXVsdGlfc2hvdFwmIzM0Oyk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdW5wcml2X2hlbHBlcnMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi91bnByaXZfaGVscGVycy5oXG5pbmRleCAxNTFmNjczMjk2NjUyMi4uYTdjZWI1MTU3N2NkYzMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdW5wcml2X2hlbHBlcnMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3VucHJpdl9oZWxwZXJzLmhcbkBAIC01LDMgJiM0Mzs1LDUgQEBcbiAjZGVmaW5lIFVOUFJJVl9TWVNDVEwgXCYjMzQ7a2VybmVsL3VucHJpdmlsZWdlZF9icGZfZGlzYWJsZWRcJiMzNDtcbiBcbiBib29sIGdldF91bnByaXZfZGlzYWJsZWQodm9pZCk7XG4mIzQzO2Jvb2wgZ2V0X2thc2FuX2ppdF9lbmFibGVkKHZvaWQpO1xuJiM0Mztib29sIGdldF9rYXNhbl9tdWx0aV9zaG90X2VuYWJsZWQodm9pZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDQ6MzI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0pJVF9LQVNBTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2VtaXRfa2FzYW5fY2hlY2smIzM0OywKICAgICYjMzQ7ZW1pdF9zdCYjMzQ7LAogICAgJiMzNDtlbWl0X2F0b21pY19sZF9zdCYjMzQ7LAogICAgJiMzNDthZGp1c3RfaW5zbl9hdXhfZGF0YSYjMzQ7LAogICAgJiMzNDticGZfcGF0Y2hfaW5zbl9kYXRhJiMzNDssCiAgICAmIzM0O21hcmtfbm9uX3N0YWNrX2FjY2VzcyYjMzQ7LAogICAgJiMzNDtpc19tZW1faW5zbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIEtBU0FOIHN1cHBvcnQgZm9yIHRoZSBCUEYgSklUIGNvbXBpbGVyIG9uIHg4Ni4gSXQgbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byB0cmFjayBub24tc3RhY2sgbWVtb3J5IGFjY2Vzc2VzIGFuZCB1cGRhdGVzIHRoZSB4ODYgSklUIGNvbXBpbGVyIHRvIGVtaXQgS0FTQU4gY2hlY2tzIGZvciB0aGVzZSBhY2Nlc3Nlcy4gVGhpcyBpbnRyb2R1Y2VzIG5ldyBjb3JlIGxvZ2ljIGluIHRoZSBKSVQgY29tcGlsZXIgYW5kIHZlcmlmaWVyLCB3aGljaCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0bmVzcyBhbmQgcHJldmVudCByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTVmZmRmZDVjNWEwOWE0MGYyMjM3NTZjZmI4YmNlOTllMjAyMGFlNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDEwIDA0OjMyOjE4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWcKaW5kZXggYmRhZDkwZjIxMGU0YmYuLjcwNWE5YWI4NWYzYTk1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L0tjb25maWcKQEAgLTIzMyw2ICYjNDM7MjMzLDcgQEAgY29uZmlnIFg4NgogCXNlbGVjdCBIQVZFX1NBTVBMRV9GVFJBQ0VfRElSRUNUCWlmIFg4Nl82NAogCXNlbGVjdCBIQVZFX1NBTVBMRV9GVFJBQ0VfRElSRUNUX01VTFRJCWlmIFg4Nl82NAogCXNlbGVjdCBIQVZFX0VCUEZfSklUCiYjNDM7CXNlbGVjdCBIQVZFX0VCUEZfSklUX0tBU0FOCQlpZiBYODZfNjQKIAlzZWxlY3QgSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUwogCXNlbGVjdCBIQVZFX0VJU0EJCQlpZiBYODZfMzIKIAlzZWxlY3QgSEFWRV9FWElUX1RIUkVBRApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jCmluZGV4IGRlNzUxNWVhMWJlYWU4Li45ZGJlM2E1MjQ0NGUzYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYwpAQCAtMjEsNiAmIzQzOzIxLDE3IEBACiAjaW5jbHVkZSAmbHQ7YXNtL3Vud2luZC5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9jZmkuaCZndDsKIAomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfSklUX0tBU0FOKQomIzQzO3ZvaWQgX19hc2FuX2xvYWQxKHZvaWQgKnApOwomIzQzO3ZvaWQgX19hc2FuX3N0b3JlMSh2b2lkICpwKTsKJiM0Mzt2b2lkIF9fYXNhbl9sb2FkMih2b2lkICpwKTsKJiM0Mzt2b2lkIF9fYXNhbl9zdG9yZTIodm9pZCAqcCk7CiYjNDM7dm9pZCBfX2FzYW5fbG9hZDQodm9pZCAqcCk7CiYjNDM7dm9pZCBfX2FzYW5fc3RvcmU0KHZvaWQgKnApOwomIzQzO3ZvaWQgX19hc2FuX2xvYWQ4KHZvaWQgKnApOwomIzQzO3ZvaWQgX19hc2FuX3N0b3JlOCh2b2lkICpwKTsKJiM0MzsjZW5kaWYKJiM0MzsKIHN0YXRpYyBib29sIGFsbF9jYWxsZWVfcmVnc191c2VkWzRdID0ge3RydWUsIHRydWUsIHRydWUsIHRydWV9OwogCiBzdGF0aWMgdTggKmVtaXRfY29kZSh1OCAqcHRyLCB1MzIgYnl0ZXMsIHVuc2lnbmVkIGludCBsZW4pCkBAIC0xMTEwLDYgJiM0MzsxMTIxLDkwIEBAIHN0YXRpYyB2b2lkIG1heWJlX2VtaXRfMW1vZCh1OCAqKnBwcm9nLCB1MzIgcmVnLCBib29sIGlzNjQpCiAJKnBwcm9nID0gcHJvZzsKIH0KIAomIzQzO3N0YXRpYyBpbnQgZW1pdF9rYXNhbl9jaGVjayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1OCAqKnBwcm9nLAomIzQzOwkJCSAgICB1MzIgYWRkcl9yZWcsIHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgdTggKmlwLAomIzQzOwkJCSAgICBib29sIGlzX3dyaXRlLCBib29sIGFjY2Vzc2VzX3N0YWNrX29ubHkpCiYjNDM7ewomIzQzOyNpZmRlZiBDT05GSUdfQlBGX0pJVF9LQVNBTgomIzQzOwl1MzIgYnBmX3NpemUgPSBCUEZfU0laRShpbnNuLSZndDtjb2RlKTsKJiM0MzsJczMyIG9mZiA9IGluc24tJmd0O29mZjsKJiM0MzsJdTggKnByb2cgPSAqcHByb2c7CiYjNDM7CXZvaWQgKmthc2FuX2Z1bmM7CiYjNDM7CiYjNDM7CWlmICghZW52KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChhY2Nlc3Nlc19zdGFja19vbmx5KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qIERlcml2ZSBLQVNBTiBjaGVjayBmdW5jdGlvbiBmcm9tIGFjY2VzcyB0eXBlIGFuZCBzaXplICovCiYjNDM7CXN3aXRjaCAoYnBmX3NpemUpIHsKJiM0MzsJY2FzZSBCUEZfQjoKJiM0MzsJCWthc2FuX2Z1bmMgPSBpc193cml0ZSA/IF9fYXNhbl9zdG9yZTEgOiBfX2FzYW5fbG9hZDE7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBCUEZfSDoKJiM0MzsJCWthc2FuX2Z1bmMgPSBpc193cml0ZSA/IF9fYXNhbl9zdG9yZTIgOiBfX2FzYW5fbG9hZDI7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBCUEZfVzoKJiM0MzsJCWthc2FuX2Z1bmMgPSBpc193cml0ZSA/IF9fYXNhbl9zdG9yZTQgOiBfX2FzYW5fbG9hZDQ7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBCUEZfRFc6CiYjNDM7CQlrYXNhbl9mdW5jID0gaXNfd3JpdGUgPyBfX2FzYW5fc3RvcmU4IDogX19hc2FuX2xvYWQ4OwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBTYXZlIHJheCAqLwomIzQzOwlFTUlUMSgweDUwKTsKJiM0MzsJLyogU2F2ZSByY3ggKi8KJiM0MzsJRU1JVDEoMHg1MSk7CiYjNDM7CS8qIFNhdmUgcmR4ICovCiYjNDM7CUVNSVQxKDB4NTIpOwomIzQzOwkvKiBTYXZlIHJzaSAqLwomIzQzOwlFTUlUMSgweDU2KTsKJiM0MzsJLyogU2F2ZSByZGkgKi8KJiM0MzsJRU1JVDEoMHg1Nyk7CiYjNDM7CS8qIFNhdmUgcjggKi8KJiM0MzsJRU1JVDIoMHg0MSwgMHg1MCk7CiYjNDM7CS8qIFNhdmUgcjkgKi8KJiM0MzsJRU1JVDIoMHg0MSwgMHg1MSk7CiYjNDM7CiYjNDM7CS8qIG1vdiByZGksIGFkZHJfcmVnICovCiYjNDM7CUVNSVRfbW92KEJQRl9SRUdfMSwgYWRkcl9yZWcpOwomIzQzOwomIzQzOwkvKiBhZGQgcmRpLCBvZmYgKGlmIG9mZnNldCBpcyBub24temVybykgKi8KJiM0MzsJaWYgKG9mZikgewomIzQzOwkJaWYgKGlzX2ltbTgob2ZmKSkgewomIzQzOwkJCS8qIGFkZCByZGksIGltbTggKi8KJiM0MzsJCQlFTUlUNCgweDQ4LCAweDgzLCAweEM3LCAodTgpb2ZmKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJLyogYWRkIHJkaSwgaW1tMzIgKi8KJiM0MzsJCQlFTUlUM19vZmYzMigweDQ4LCAweDgxLCAweEM3LCBvZmYpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEFkanVzdCBpcCB0byBhY2NvdW50IGZvciB0aGUgaW5zdHJ1bWVudGF0aW9uIGdlbmVyYXRlZCBzbyBmYXIgKi8KJiM0MzsJaXAgJiM0Mzs9IChwcm9nIC0gKnBwcm9nKTsKJiM0MzsJLyogV2UgZW1pdCBhIGNhbGwsIHNvIHVwZGF0ZSBjYWxsIGRlcHRoIGNvdW50aW5nICovCiYjNDM7CWlwICYjNDM7PSB4ODZfY2FsbF9kZXB0aF9lbWl0X2FjY291bnRpbmcoJmFtcDtwcm9nLCBrYXNhbl9mdW5jLCBpcCk7CiYjNDM7CS8qIGNhbGwga2FzYW5fZnVuYyAqLwomIzQzOwlpZiAoZW1pdF9jYWxsKCZhbXA7cHJvZywga2FzYW5fZnVuYywgaXApKQomIzQzOwkJcmV0dXJuIC1FUkFOR0U7CiYjNDM7CiYjNDM7CUVNSVQyKDB4NDEsIDB4NTkpOwomIzQzOwlFTUlUMigweDQxLCAweDU4KTsKJiM0MzsJRU1JVDEoMHg1Rik7CiYjNDM7CUVNSVQxKDB4NUUpOwomIzQzOwlFTUlUMSgweDVBKTsKJiM0MzsJRU1JVDEoMHg1OSk7CiYjNDM7CUVNSVQxKDB4NTgpOwomIzQzOwomIzQzOwkqcHByb2cgPSBwcm9nOwomIzQzOyNlbmRpZiAvKiBDT05GSUdfQlBGX0pJVF9LQVNBTiAqLwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAvKiBMRFg6IGRzdF9yZWcgPSAqKHU4Kikoc3JjX3JlZyAmIzQzOyBvZmYpICovCiBzdGF0aWMgdm9pZCBlbWl0X2xkeCh1OCAqKnBwcm9nLCB1MzIgc2l6ZSwgdTMyIGRzdF9yZWcsIHUzMiBzcmNfcmVnLCBpbnQgb2ZmKQogewpAQCAtMTMxNSw2ICYjNDM7MTQxMCw2NCBAQCBzdGF0aWMgdm9pZCBlbWl0X3N0X2luZGV4KHU4ICoqcHByb2csIHUzMiBzaXplLCB1MzIgZHN0X3JlZywgdTMyIGluZGV4X3JlZywgaW50CiAJKnBwcm9nID0gcHJvZzsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGVtaXRfc3QodTggKipwcHJvZywgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpbnQgZHN0X3JlZywKJiM0MzsJCSAgICBzMzIgb3V0Z29pbmdfYXJnX2Jhc2UsIHUxNiBvdXRnb2luZ19yc3ApCiYjNDM7ewomIzQzOwlzMzIgaW1tMzIgPSBpbnNuLSZndDtpbW07CiYjNDM7CXU4ICpwcm9nID0gKnBwcm9nOwomIzQzOwlzMzIgaW5zbl9vZmY7CiYjNDM7CiYjNDM7CXN3aXRjaCAoQlBGX1NJWkUoaW5zbi0mZ3Q7Y29kZSkpIHsKJiM0MzsJY2FzZSBCUEZfQjoKJiM0MzsJCWlmIChpc19lcmVnKGRzdF9yZWcpKQomIzQzOwkJCUVNSVQyKDB4NDEsIDB4QzYpOwomIzQzOwkJZWxzZQomIzQzOwkJCUVNSVQxKDB4QzYpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQlBGX0g6CiYjNDM7CQlpZiAoaXNfZXJlZyhkc3RfcmVnKSkKJiM0MzsJCQlFTUlUMygweDY2LCAweDQxLCAweEM3KTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlFTUlUMigweDY2LCAweEM3KTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEJQRl9XOgomIzQzOwkJaWYgKGlzX2VyZWcoZHN0X3JlZykpCiYjNDM7CQkJRU1JVDIoMHg0MSwgMHhDNyk7CiYjNDM7CQllbHNlCiYjNDM7CQkJRU1JVDEoMHhDNyk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBCUEZfRFc6CiYjNDM7CQlpZiAoZHN0X3JlZyA9PSBCUEZfUkVHX1BBUkFNUyAmYW1wOyZhbXA7IGluc24tJmd0O29mZiA9PSAtOCkgewomIzQzOwkJCS8qIEFyZyA2OiBzdG9yZSBpbW1lZGlhdGUgaW4gcjkgcmVnaXN0ZXIgKi8KJiM0MzsJCQllbWl0X21vdl9pbW02NCgmYW1wO3Byb2csIFg4Nl9SRUdfUjksIGltbTMyICZndDsmZ3Q7IDMxLAomIzQzOwkJCQkgICAgICAgKHUzMilpbW0zMik7CiYjNDM7CQkJKnBwcm9nID0gcHJvZzsKJiM0MzsJCQlyZXR1cm47CiYjNDM7CQl9CiYjNDM7CQlFTUlUMihhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKSwgMHhDNyk7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlpbnNuX29mZiA9IGluc24tJmd0O29mZjsKJiM0MzsJaWYgKGRzdF9yZWcgPT0gQlBGX1JFR19QQVJBTVMpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBBcmdzIDcmIzQzOzogcmV2ZXJzZSBCUEYgbmVnYXRpdmUgb2Zmc2V0cyB0bwomIzQzOwkJICogeDg2IHBvc2l0aXZlIHJzcCBvZmZzZXRzLgomIzQzOwkJICogQlBGIG9mZj0tMTYg4oaSIFtyc3AmIzQzOzBdLCBvZmY9LTI0IOKGkiBbcnNwJiM0Mzs4XSwgLi4uCiYjNDM7CQkgKi8KJiM0MzsJCWluc25fb2ZmID0gb3V0Z29pbmdfYXJnX2Jhc2UgLSBvdXRnb2luZ19yc3AgLQomIzQzOwkJCWluc25fb2ZmIC0gMTY7CiYjNDM7CQlkc3RfcmVnID0gQlBGX1JFR19GUDsKJiM0MzsJfQomIzQzOwlpZiAoaXNfaW1tOChpbnNuX29mZikpCiYjNDM7CQlFTUlUMihhZGRfMXJlZygweDQwLCBkc3RfcmVnKSwgaW5zbl9vZmYpOwomIzQzOwllbHNlCiYjNDM7CQlFTUlUMV9vZmYzMihhZGRfMXJlZygweDgwLCBkc3RfcmVnKSwgaW5zbl9vZmYpOwomIzQzOwomIzQzOwlFTUlUKGltbTMyLCBicGZfc2l6ZV90b194ODZfYnl0ZXMoQlBGX1NJWkUoaW5zbi0mZ3Q7Y29kZSkpKTsKJiM0MzsJKnBwcm9nID0gcHJvZzsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBlbWl0X3N0X3IxMih1OCAqKnBwcm9nLCB1MzIgc2l6ZSwgdTMyIGRzdF9yZWcsIGludCBvZmYsIGludCBpbW0pCiB7CiAJZW1pdF9zdF9pbmRleChwcHJvZywgc2l6ZSwgZHN0X3JlZywgWDg2X1JFR19SMTIsIG9mZiwgaW1tKTsKQEAgLTE0MjMsMTcgJiM0MzsxNTc2LDMxIEBAIHN0YXRpYyBpbnQgZW1pdF9hdG9taWNfcm13X2luZGV4KHU4ICoqcHByb2csIHUzMiBhdG9taWNfb3AsIHUzMiBzaXplLAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGVtaXRfYXRvbWljX2xkX3N0KHU4ICoqcHByb2csIHUzMiBhdG9taWNfb3AsIHUzMiBkc3RfcmVnLAotCQkJICAgICB1MzIgc3JjX3JlZywgczE2IG9mZiwgdTggYnBmX3NpemUpCiYjNDM7c3RhdGljIGludCBlbWl0X2F0b21pY19sZF9zdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1OCAqKnBwcm9nLAomIzQzOwkJCSAgICAgc3RydWN0IGJwZl9pbnNuICppbnNuLCB1OCAqaXAsIHUzMiBkc3RfcmVnLAomIzQzOwkJCSAgICAgdTMyIHNyY19yZWcsIGJvb2wgYWNjZXNzZXNfc3RhY2tfb25seSkKIHsKJiM0MzsJdTMyIGF0b21pY19vcCA9IGluc24tJmd0O2ltbTsKJiM0MzsJaW50IGVycjsKJiM0MzsKIAlzd2l0Y2ggKGF0b21pY19vcCkgewogCWNhc2UgQlBGX0xPQURfQUNROgomIzQzOwkJZXJyID0gZW1pdF9rYXNhbl9jaGVjayhlbnYsIHBwcm9nLCBzcmNfcmVnLCBpbnNuLCBpcCwgZmFsc2UsCiYjNDM7CQkJCSAgICAgICBhY2Nlc3Nlc19zdGFja19vbmx5KTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKIAkJLyogZHN0X3JlZyA9IHNtcF9sb2FkX2FjcXVpcmUoc3JjX3JlZyAmIzQzOyBvZmYxNikgKi8KLQkJZW1pdF9sZHgocHByb2csIGJwZl9zaXplLCBkc3RfcmVnLCBzcmNfcmVnLCBvZmYpOwomIzQzOwkJZW1pdF9sZHgocHByb2csIEJQRl9TSVpFKGluc24tJmd0O2NvZGUpLCBkc3RfcmVnLCBzcmNfcmVnLAomIzQzOwkJCSBpbnNuLSZndDtvZmYpOwogCQlicmVhazsKIAljYXNlIEJQRl9TVE9SRV9SRUw6CiYjNDM7CQllcnIgPSBlbWl0X2thc2FuX2NoZWNrKGVudiwgcHByb2csIGRzdF9yZWcsIGluc24sIGlwLCB0cnVlLAomIzQzOwkJCQkgICAgICAgYWNjZXNzZXNfc3RhY2tfb25seSk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiAJCS8qIHNtcF9zdG9yZV9yZWxlYXNlKGRzdF9yZWcgJiM0Mzsgb2ZmMTYsIHNyY19yZWcpICovCi0JCWVtaXRfc3R4KHBwcm9nLCBicGZfc2l6ZSwgZHN0X3JlZywgc3JjX3JlZywgb2ZmKTsKJiM0MzsJCWVtaXRfc3R4KHBwcm9nLCBCUEZfU0laRShpbnNuLSZndDtjb2RlKSwgZHN0X3JlZywgc3JjX3JlZywKJiM0MzsJCQkgaW5zbi0mZ3Q7b2ZmKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJfZXJyKCYjMzQ7YnBmX2ppdDogdW5rbm93biBhdG9taWMgbG9hZC9zdG9yZSBvcGNvZGUgJTAyeFxuJiMzNDssCkBAIC0xODExLDEwICYjNDM7MTk3OCwxMiBAQCBzdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKgogCQljb25zdCBzMzIgaW1tMzIgPSBpbnNuLSZndDtpbW07CiAJCXUzMiBkc3RfcmVnID0gaW5zbi0mZ3Q7ZHN0X3JlZzsKIAkJdTMyIHNyY19yZWcgPSBpbnNuLSZndDtzcmNfcmVnOwomIzQzOwkJYm9vbCBhY2Nlc3Nlc19zdGFja19vbmx5OwogCQl1OCBiMiA9IDAsIGIzID0gMDsKIAkJdTggKnN0YXJ0X29mX2xkeDsKIAkJczY0IGptcF9vZmZzZXQ7CiAJCXMzMiBpbnNuX29mZjsKJiM0MzsJCWludCBpbnNuX2lkeDsKIAkJdTggam1wX2NvbmQ7CiAJCXU4ICpmdW5jOwogCQlpbnQgbm9wczsKQEAgLTE4MzEsNiAmIzQzOzIwMDAsMTAgQEAgc3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICoKIAkJCUVNSVRfRU5EQlIoKTsKIAogCQlpcCA9IGltYWdlICYjNDM7IGFkZHJzW2kgLSAxXSAmIzQzOyAocHJvZyAtIHRlbXApOwomIzQzOwkJaW5zbl9pZHggPSBpIC0gMSAmIzQzOyBicGZfcHJvZy0mZ3Q7YXV4LSZndDtzdWJwcm9nX3N0YXJ0OwomIzQzOwkJYWNjZXNzZXNfc3RhY2tfb25seSA9CiYjNDM7CQkJZW52ID8gIWVudi0mZ3Q7aW5zbl9hdXhfZGF0YVtpbnNuX2lkeF0ubm9uX3N0YWNrX2FjY2VzcyA6CiYjNDM7CQkJICAgICAgZmFsc2U7CiAKIAkJc3dpdGNoIChpbnNuLSZndDtjb2RlKSB7CiAJCQkvKiBBTFUgKi8KQEAgLTIyMDcsNDkgJiM0MzsyMzgwLDE3IEBAIHN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqCiAJCQlFTUlUX0xGRU5DRSgpOwogCQkJYnJlYWs7CiAKLQkJCS8qIFNUOiAqKHU4KikoZHN0X3JlZyAmIzQzOyBvZmYpID0gaW1tICovCiAJCWNhc2UgQlBGX1NUIHwgQlBGX01FTSB8IEJQRl9COgotCQkJaWYgKGlzX2VyZWcoZHN0X3JlZykpCi0JCQkJRU1JVDIoMHg0MSwgMHhDNik7Ci0JCQllbHNlCi0JCQkJRU1JVDEoMHhDNik7Ci0JCQlnb3RvIHN0OwogCQljYXNlIEJQRl9TVCB8IEJQRl9NRU0gfCBCUEZfSDoKLQkJCWlmIChpc19lcmVnKGRzdF9yZWcpKQotCQkJCUVNSVQzKDB4NjYsIDB4NDEsIDB4QzcpOwotCQkJZWxzZQotCQkJCUVNSVQyKDB4NjYsIDB4QzcpOwotCQkJZ290byBzdDsKIAkJY2FzZSBCUEZfU1QgfCBCUEZfTUVNIHwgQlBGX1c6Ci0JCQlpZiAoaXNfZXJlZyhkc3RfcmVnKSkKLQkJCQlFTUlUMigweDQxLCAweEM3KTsKLQkJCWVsc2UKLQkJCQlFTUlUMSgweEM3KTsKLQkJCWdvdG8gc3Q7CiAJCWNhc2UgQlBGX1NUIHwgQlBGX01FTSB8IEJQRl9EVzoKLQkJCWlmIChkc3RfcmVnID09IEJQRl9SRUdfUEFSQU1TICZhbXA7JmFtcDsgaW5zbi0mZ3Q7b2ZmID09IC04KSB7Ci0JCQkJLyogQXJnIDY6IHN0b3JlIGltbWVkaWF0ZSBpbiByOSByZWdpc3RlciAqLwotCQkJCWVtaXRfbW92X2ltbTY0KCZhbXA7cHJvZywgWDg2X1JFR19SOSwgaW1tMzIgJmd0OyZndDsgMzEsICh1MzIpaW1tMzIpOwotCQkJCWJyZWFrOwotCQkJfQotCQkJRU1JVDIoYWRkXzFtb2QoMHg0OCwgZHN0X3JlZyksIDB4QzcpOwotCi1zdDoJCQlpbnNuX29mZiA9IGluc24tJmd0O29mZjsKLQkJCWlmIChkc3RfcmVnID09IEJQRl9SRUdfUEFSQU1TKSB7Ci0JCQkJLyoKLQkJCQkgKiBBcmdzIDcmIzQzOzogcmV2ZXJzZSBCUEYgbmVnYXRpdmUgb2Zmc2V0cyB0bwotCQkJCSAqIHg4NiBwb3NpdGl2ZSByc3Agb2Zmc2V0cy4KLQkJCQkgKiBCUEYgb2ZmPS0xNiDihpIgW3JzcCYjNDM7MF0sIG9mZj0tMjQg4oaSIFtyc3AmIzQzOzhdLCAuLi4KLQkJCQkgKi8KLQkJCQlpbnNuX29mZiA9IG91dGdvaW5nX2FyZ19iYXNlIC0gb3V0Z29pbmdfcnNwIC0gaW5zbl9vZmYgLSAxNjsKLQkJCQlkc3RfcmVnID0gQlBGX1JFR19GUDsKLQkJCX0KLQkJCWlmIChpc19pbW04KGluc25fb2ZmKSkKLQkJCQlFTUlUMihhZGRfMXJlZygweDQwLCBkc3RfcmVnKSwgaW5zbl9vZmYpOwotCQkJZWxzZQotCQkJCUVNSVQxX29mZjMyKGFkZF8xcmVnKDB4ODAsIGRzdF9yZWcpLCBpbnNuX29mZik7CiYjNDM7CQkJZXJyID0gZW1pdF9rYXNhbl9jaGVjayhlbnYsICZhbXA7cHJvZywgZHN0X3JlZywgaW5zbiwgaXAsCiYjNDM7CQkJCQkgICAgICAgdHJ1ZSwgYWNjZXNzZXNfc3RhY2tfb25seSk7CiYjNDM7CQkJaWYgKGVycikKJiM0MzsJCQkJcmV0dXJuIGVycjsKIAotCQkJRU1JVChpbW0zMiwgYnBmX3NpemVfdG9feDg2X2J5dGVzKEJQRl9TSVpFKGluc24tJmd0O2NvZGUpKSk7CiYjNDM7CQkJZW1pdF9zdCgmYW1wO3Byb2csIGluc24sIGRzdF9yZWcsIG91dGdvaW5nX2FyZ19iYXNlLAomIzQzOwkJCQlvdXRnb2luZ19yc3ApOwogCQkJYnJlYWs7CiAKIAkJCS8qIFNUWDogKih1OCopKGRzdF9yZWcgJiM0Mzsgb2ZmKSA9IHNyY19yZWcgKi8KQEAgLTIyNjcsNiAmIzQzOzI0MDgsMTAgQEAgc3Q6CQkJaW5zbl9vZmYgPSBpbnNuLSZndDtvZmY7CiAJCQkJaW5zbl9vZmYgPSBvdXRnb2luZ19hcmdfYmFzZSAtIG91dGdvaW5nX3JzcCAtIGluc25fb2ZmIC0gMTY7CiAJCQkJZHN0X3JlZyA9IEJQRl9SRUdfRlA7CiAJCQl9CiYjNDM7CQkJZXJyID0gZW1pdF9rYXNhbl9jaGVjayhlbnYsICZhbXA7cHJvZywgZHN0X3JlZywgaW5zbiwgaXAsCiYjNDM7CQkJCQkgICAgICAgdHJ1ZSwgYWNjZXNzZXNfc3RhY2tfb25seSk7CiYjNDM7CQkJaWYgKGVycikKJiM0MzsJCQkJcmV0dXJuIGVycjsKIAkJCWVtaXRfc3R4KCZhbXA7cHJvZywgQlBGX1NJWkUoaW5zbi0mZ3Q7Y29kZSksIGRzdF9yZWcsIHNyY19yZWcsIGluc25fb2ZmKTsKIAkJCWJyZWFrOwogCkBAIC0yNDI4LDYgJiM0MzsyNTczLDEyIEBAIHN0OgkJCWluc25fb2ZmID0gaW5zbi0mZ3Q7b2ZmOwogCQkJCS8qIHBvcHVsYXRlIGptcF9vZmZzZXQgZm9yIEpBRSBhYm92ZSB0byBqdW1wIHRvIHN0YXJ0X29mX2xkeCAqLwogCQkJCXN0YXJ0X29mX2xkeCA9IHByb2c7CiAJCQkJZW5kX29mX2ptcFstMV0gPSBzdGFydF9vZl9sZHggLSBlbmRfb2Zfam1wOwomIzQzOwkJCX0gZWxzZSB7CiYjNDM7CQkJCWVyciA9IGVtaXRfa2FzYW5fY2hlY2soZW52LCAmYW1wO3Byb2csIHNyY19yZWcsCiYjNDM7CQkJCQkJICAgICAgIGluc24sIGlwLCBmYWxzZSwKJiM0MzsJCQkJCQkgICAgICAgYWNjZXNzZXNfc3RhY2tfb25seSk7CiYjNDM7CQkJCWlmIChlcnIpCiYjNDM7CQkJCQlyZXR1cm4gZXJyOwogCQkJfQogCQkJaWYgKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9QUk9CRV9NRU1TWCB8fAogCQkJICAgIEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9NRU1TWCkKQEAgLTI0ODksMTUgJiM0MzsyNjQwLDE2IEBAIHN0OgkJCWluc25fb2ZmID0gaW5zbi0mZ3Q7b2ZmOwogCQkJfQogCQkJZmFsbHRocm91Z2g7CiAJCWNhc2UgQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfVzoKLQkJY2FzZSBCUEZfU1RYIHwgQlBGX0FUT01JQyB8IEJQRl9EVzoKLQkJCWlmIChpbnNuLSZndDtpbW0gPT0gKEJQRl9BTkQgfCBCUEZfRkVUQ0gpIHx8Ci0JCQkgICAgaW5zbi0mZ3Q7aW1tID09IChCUEZfT1IgfCBCUEZfRkVUQ0gpIHx8Ci0JCQkgICAgaW5zbi0mZ3Q7aW1tID09IChCUEZfWE9SIHwgQlBGX0ZFVENIKSkgewotCQkJCWJvb2wgaXM2NCA9IEJQRl9TSVpFKGluc24tJmd0O2NvZGUpID09IEJQRl9EVzsKLQkJCQl1MzIgcmVhbF9zcmNfcmVnID0gc3JjX3JlZzsKLQkJCQl1MzIgcmVhbF9kc3RfcmVnID0gZHN0X3JlZzsKLQkJCQl1OCAqYnJhbmNoX3RhcmdldDsKLQomIzQzOwkJY2FzZSBCUEZfU1RYIHwgQlBGX0FUT01JQyB8IEJQRl9EVzogewomIzQzOwkJCWJvb2wgaXM2NCA9IEJQRl9TSVpFKGluc24tJmd0O2NvZGUpID09IEJQRl9EVzsKJiM0MzsJCQl1MzIgcmVhbF9zcmNfcmVnID0gc3JjX3JlZzsKJiM0MzsJCQl1MzIgcmVhbF9kc3RfcmVnID0gZHN0X3JlZzsKJiM0MzsJCQl1OCAqYnJhbmNoX3RhcmdldDsKJiM0MzsJCQlib29sIGlzX2F0b21pY19mZXRjaCA9CiYjNDM7CQkJCShpbnNuLSZndDtpbW0gPT0gKEJQRl9BTkQgfCBCUEZfRkVUQ0gpIHx8CiYjNDM7CQkJCSBpbnNuLSZndDtpbW0gPT0gKEJQRl9PUiB8IEJQRl9GRVRDSCkgfHwKJiM0MzsJCQkJIGluc24tJmd0O2ltbSA9PSAoQlBGX1hPUiB8IEJQRl9GRVRDSCkpOwomIzQzOwkJCWlmIChpc19hdG9taWNfZmV0Y2gpIHsKIAkJCQkvKgogCQkJCSAqIENhbiYjMzk7dCBiZSBpbXBsZW1lbnRlZCB3aXRoIGEgc2luZ2xlIHg4NiBpbnNuLgogCQkJCSAqIE5lZWQgdG8gZG8gYSBDTVBYQ0hHIGxvb3AuCkBAIC0yNTEwLDcgJiM0MzsyNjYyLDE3IEBAIHN0OgkJCWluc25fb2ZmID0gaW5zbi0mZ3Q7b2ZmOwogCQkJCWlmIChkc3RfcmVnID09IEJQRl9SRUdfMCkKIAkJCQkJcmVhbF9kc3RfcmVnID0gQlBGX1JFR19BWDsKIAomIzQzOwkJCQlpcCAmIzQzOz0gMzsKJiM0MzsJCQl9CiYjNDM7CQkJaWYgKCFicGZfYXRvbWljX2lzX2xvYWRfc3RvcmUoaW5zbikpIHsKJiM0MzsJCQkJZXJyID0gZW1pdF9rYXNhbl9jaGVjayhlbnYsICZhbXA7cHJvZywgcmVhbF9kc3RfcmVnLAomIzQzOwkJCQkJCSAgICAgICBpbnNuLCBpcCwgdHJ1ZSwKJiM0MzsJCQkJCQkgICAgICAgYWNjZXNzZXNfc3RhY2tfb25seSk7CiYjNDM7CQkJCWlmIChlcnIpCiYjNDM7CQkJCQlyZXR1cm4gZXJyOwogCQkJCWJyYW5jaF90YXJnZXQgPSBwcm9nOwomIzQzOwkJCX0KJiM0MzsJCQlpZiAoaXNfYXRvbWljX2ZldGNoKSB7CiAJCQkJLyogTG9hZCBvbGQgdmFsdWUgKi8KIAkJCQllbWl0X2xkeCgmYW1wO3Byb2csIEJQRl9TSVpFKGluc24tJmd0O2NvZGUpLAogCQkJCQkgQlBGX1JFR18wLCByZWFsX2RzdF9yZWcsIGluc24tJmd0O29mZik7CkBAIC0yNTQyLDE1ICYjNDM7MjcwNCwxNiBAQCBzdDoJCQlpbnNuX29mZiA9IGluc24tJmd0O29mZjsKIAkJCX0KIAogCQkJaWYgKGJwZl9hdG9taWNfaXNfbG9hZF9zdG9yZShpbnNuKSkKLQkJCQllcnIgPSBlbWl0X2F0b21pY19sZF9zdCgmYW1wO3Byb2csIGluc24tJmd0O2ltbSwgZHN0X3JlZywgc3JjX3JlZywKLQkJCQkJCQlpbnNuLSZndDtvZmYsIEJQRl9TSVpFKGluc24tJmd0O2NvZGUpKTsKJiM0MzsJCQkJZXJyID0gZW1pdF9hdG9taWNfbGRfc3QoZW52LCAmYW1wO3Byb2csIGluc24sIGlwLAomIzQzOwkJCQkJCQlkc3RfcmVnLCBzcmNfcmVnLAomIzQzOwkJCQkJCQlhY2Nlc3Nlc19zdGFja19vbmx5KTsKIAkJCWVsc2UKIAkJCQllcnIgPSBlbWl0X2F0b21pY19ybXcoJmFtcDtwcm9nLCBpbnNuLSZndDtpbW0sIGRzdF9yZWcsIHNyY19yZWcsCiAJCQkJCQkgICAgICBpbnNuLSZndDtvZmYsIEJQRl9TSVpFKGluc24tJmd0O2NvZGUpKTsKIAkJCWlmIChlcnIpCiAJCQkJcmV0dXJuIGVycjsKIAkJCWJyZWFrOwotCiYjNDM7CQl9CiAJCWNhc2UgQlBGX1NUWCB8IEJQRl9QUk9CRV9BVE9NSUMgfCBCUEZfQjoKIAkJY2FzZSBCUEZfU1RYIHwgQlBGX1BST0JFX0FUT01JQyB8IEJQRl9IOgogCQkJaWYgKCFicGZfYXRvbWljX2lzX2xvYWRfc3RvcmUoaW5zbikpIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oCmluZGV4IDMxN2U5OWI5YWNjMGE0Li5hYmU4NDU5Y2M3MDEyMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oCkBAIC03MjMsNiAmIzQzOzcyMyw4IEBAIHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSB7CiAJdTE2IGNvbnN0X3JlZ19tYXBfbWFzazsKIAl1MTYgY29uc3RfcmVnX3N1YnByb2dfbWFzazsKIAl1MzIgY29uc3RfcmVnX3ZhbHNbMTBdOwomIzQzOwkvKiBpbnN0cnVjdGlvbiBjYW4gYWNjZXNzIG5vbi1zdGFjayBtZW1vcnkgKi8KJiM0MzsJYm9vbCBub25fc3RhY2tfYWNjZXNzOwogfTsKIAogI2RlZmluZSBNQVhfVVNFRF9NQVBTIDY0IC8qIG1heCBudW1iZXIgb2YgbWFwcyBhY2Nlc3NlZCBieSBvbmUgZUJQRiBwcm9ncmFtICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oIGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaAppbmRleCAxNGFjYjI0NTU3NDZmYy4uMWViY2QyNDdlZjRlM2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaApAQCAtMTIxMCwxMyAmIzQzOzEyMTAsMTcgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9zaW5nbGUoc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgb2ZmLAogCiAjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMCiBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZiwKLQkJCQkgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4pOwomIzQzOwkJCQkgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4sCiYjNDM7CQkJCSAgICAgczMyIGluc25fb2ZmX2luX3BhdGNoKTsKIHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqYnBmX2R1cF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpOwogdm9pZCBicGZfcmVzdG9yZV9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCQkgICAgICAgc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpvcmlnX2luc25fYXV4KTsKICNlbHNlCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLAotCQkJCQkJICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgdTMyIGxlbikKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAomIzQzOwkJCQkJCSAgIHUzMiBvZmYsCiYjNDM7CQkJCQkJICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwKJiM0MzsJCQkJCQkgICB1MzIgbGVuLAomIzQzOwkJCQkJCSAgIHMzMiBpbnNuX29mZl9pbl9wYXRjaCkKIHsKIAlyZXR1cm4gRVJSX1BUUigtRU5PVFNVUFApOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9LY29uZmlnIGIva2VybmVsL2JwZi9LY29uZmlnCmluZGV4IGViM2RlMzU3MzRmMDkyLi5lMWYzODUwZDJmNWEwNyAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvS2NvbmZpZwpAQCAtMTcsNiAmIzQzOzE3LDEwIEBAIGNvbmZpZyBIQVZFX0NCUEZfSklUCiBjb25maWcgSEFWRV9FQlBGX0pJVAogCWJvb2wKIAomIzQzOyMgS0FTQU4gc3VwcG9ydCBmb3IgSklUIGNvbXBpbGVyCiYjNDM7Y29uZmlnIEhBVkVfRUJQRl9KSVRfS0FTQU4KJiM0MzsJYm9vbAomIzQzOwogIyBVc2VkIGJ5IGFyY2hzIHRvIHRlbGwgdGhhdCB0aGV5IHdhbnQgdGhlIEJQRiBKSVQgY29tcGlsZXIgZW5hYmxlZCBieQogIyBkZWZhdWx0IGZvciBrZXJuZWxzIHRoYXQgd2VyZSBjb21waWxlZCB3aXRoIEJQRiBKSVQgc3VwcG9ydC4KIGNvbmZpZyBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUCkBAIC0xMDEsNCAmIzQzOzEwNSwxNyBAQCBjb25maWcgQlBGX0xTTQogCiAJICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBOLgogCiYjNDM7Y29uZmlnIEJQRl9KSVRfS0FTQU4KJiM0MzsJYm9vbAomIzQzOwlkZXBlbmRzIG9uIEhBVkVfRUJQRl9KSVRfS0FTQU4KJiM0MzsJZGVwZW5kcyBvbiBLQVNBTl9HRU5FUklDCiYjNDM7CWRlcGVuZHMgb24gS0FTQU5fVk1BTExPQwomIzQzOwlkZXBlbmRzIG9uIEJQRl9KSVQKJiM0MzsJZGVmYXVsdCB5IGlmIEtBU0FOCiYjNDM7CWhlbHAKJiM0MzsJICBNYWtlcyBKSVQgY29tcGlsZXIgaW5zZXJ0IGdlbmVyaWMgb3V0bGluZSBLQVNBTiBjaGVja3MgaW4gQlBGCiYjNDM7CSAgcHJvZ3JhbXMgd2hlbiB0aGV5IGFyZSBpbnNlcnRlZCBpbiB0aGUga2VybmVsLiBUaGlzIGZlYXR1cmUgaXMKJiM0MzsJICBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgaWYgdGhlIG5lZWRlZCBzZXQgb2YgS0FTQU4gYW5kIEJQRgomIzQzOwkgIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpcyBlbmFibGVkLgomIzQzOwogZW5kbWVudSAjICYjMzQ7QlBGIHN1YnN5c3RlbSYjMzQ7CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NvcmUuYyBiL2tlcm5lbC9icGYvY29yZS5jCmluZGV4IDQ3ZmUwNDdhZDMwYjg4Li5jZmYwMDM1ZjQwMWE5YyAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9jb3JlLmMKQEAgLTE1OTksNyAmIzQzOzE1OTksNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9qaXRfYmxpbmRfY29uc3RhbnRzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicAogCQkJY29udGludWU7CiAKIAkJaWYgKGVudikKLQkJCXRtcCA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpLCBpbnNuX2J1ZmYsIHJld3JpdHRlbik7CiYjNDM7CQkJdG1wID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGksIGluc25fYnVmZiwgcmV3cml0dGVuLCByZXdyaXR0ZW4gLSAxKTsKIAkJZWxzZQogCQkJdG1wID0gYnBmX3BhdGNoX2luc25fc2luZ2xlKGNsb25lLCBpLCBpbnNuX2J1ZmYsIHJld3JpdHRlbik7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jCmluZGV4IGQzYmU5NzI3MTRiMjJjLi4wZWRhNTUxMmJhZWNlYiAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9maXh1cHMuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jCkBAIC0xNTIsMTIgJiM0MzsxNTIsMjUgQEAgc3RhdGljIGludCBnZXRfY2FsbGVlX3N0YWNrX2RlcHRoKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiB9CiAjZW5kaWYKIAomIzQzO3N0YXRpYyBib29sIGlzX21lbV9pbnNuKHN0cnVjdCBicGZfaW5zbiAqaW5zbikKJiM0Mzt7CiYjNDM7CWlmIChCUEZfQ0xBU1MoaW5zbi0mZ3Q7Y29kZSkgIT0gQlBGX1NUICZhbXA7JmFtcDsKJiM0MzsJICAgIEJQRl9DTEFTUyhpbnNuLSZndDtjb2RlKSAhPSBCUEZfU1RYICZhbXA7JmFtcDsKJiM0MzsJICAgIEJQRl9DTEFTUyhpbnNuLSZndDtjb2RlKSAhPSBCUEZfTERYKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gKEJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9NRU0gfHwKJiM0MzsJCUJQRl9NT0RFKGluc24tJmd0O2NvZGUpID09IEJQRl9NRU1TWCB8fAomIzQzOwkJQlBGX01PREUoaW5zbi0mZ3Q7Y29kZSkgPT0gQlBGX0FUT01JQyk7CiYjNDM7fQomIzQzOwogLyogc2luZ2xlIGVudi0mZ3Q7cHJvZy0mZ3Q7aW5zbmlbb2ZmXSBpbnN0cnVjdGlvbiB3YXMgcmVwbGFjZWQgd2l0aCB0aGUgcmFuZ2UKICAqIGluc25pW29mZiwgb2ZmICYjNDM7IGNudCkuICBBZGp1c3QgY29ycmVzcG9uZGluZyBpbnNuX2F1eF9kYXRhIGJ5IGNvcHlpbmcKICAqIFswLCBvZmYpIGFuZCBbb2ZmLCBlbmQpIHRvIG5ldyBsb2NhdGlvbnMsIHNvIHRoZSBwYXRjaGVkIHJhbmdlIHN0YXlzIHplcm8KICAqLwogc3RhdGljIHZvaWQgYWRqdXN0X2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKLQkJCQkgc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZywgdTMyIG9mZiwgdTMyIGNudCkKJiM0MzsJCQkJIHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2csIHUzMiBvZmYsIHUzMiBjbnQsCiYjNDM7CQkJCSBzMzIgaW5zbl9vZmZfaW5fcGF0Y2gpCiB7CiAJc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpkYXRhID0gZW52LSZndDtpbnNuX2F1eF9kYXRhOwogCXN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IG5ld19wcm9nLSZndDtpbnNuc2k7CkBAIC0xNzEsOCAmIzQzOzE4NCwxNCBAQCBzdGF0aWMgdm9pZCBhZGp1c3RfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCSAqLwogCWRhdGFbb2ZmXS56ZXh0X2RzdCA9IGluc25faGFzX2RlZjMyKGluc24gJiM0Mzsgb2ZmICYjNDM7IGNudCAtIDEpOwogCi0JaWYgKGNudCA9PSAxKQomIzQzOwlpZiAoY250ID09IDEpIHsKJiM0MzsJCS8qIEEgbm9uLW1lbW9yeSBhY2Nlc3NpbmcgaW5zbiBjb3VsZCBoYXZlIGJlZW4gcmVwbGFjZWQgYnkgYQomIzQzOwkJICogbWVtb3J5IGFjY2Vzc2luZyBpbnNuLCBzeXN0ZW1hdGljYWxseSBtYXJrIGl0IGZvciBub24tc3RhY2sKJiM0MzsJCSAqIGFjY2VzcwomIzQzOwkJICovCiYjNDM7CQlkYXRhW29mZl0ubm9uX3N0YWNrX2FjY2VzcyA9IGlzX21lbV9pbnNuKGluc24gJiM0Mzsgb2ZmKTsKIAkJcmV0dXJuOwomIzQzOwl9CiAJcHJvZ19sZW4gPSBuZXdfcHJvZy0mZ3Q7bGVuOwogCiAJbWVtbW92ZShkYXRhICYjNDM7IG9mZiAmIzQzOyBjbnQgLSAxLCBkYXRhICYjNDM7IG9mZiwKQEAgLTE4Miw3ICYjNDM7MjAxLDE5IEBAIHN0YXRpYyB2b2lkIGFkanVzdF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCS8qIEV4cGFuZCBpbnNuaVtvZmZdJiMzOTtzIHNlZW4gY291bnQgdG8gdGhlIHBhdGNoZWQgcmFuZ2UuICovCiAJCWRhdGFbaV0uc2VlbiA9IG9sZF9zZWVuOwogCQlkYXRhW2ldLnpleHRfZHN0ID0gaW5zbl9oYXNfZGVmMzIoaW5zbiAmIzQzOyBpKTsKJiM0MzsJCWlmIChpID09IG9mZiAmIzQzOyBpbnNuX29mZl9pbl9wYXRjaCkgewomIzQzOwkJCWRhdGFbaV0ubm9uX3N0YWNrX2FjY2VzcyA9IGRhdGFbb2ZmICYjNDM7IGNudCAtIDFdLm5vbl9zdGFja19hY2Nlc3M7CiYjNDM7CQkJZGF0YVtvZmYgJiM0MzsgY250IC0gMV0ubm9uX3N0YWNrX2FjY2VzcyA9IGZhbHNlOwomIzQzOwkJfSBlbHNlIGlmIChpc19tZW1faW5zbihpbnNuICYjNDM7IGkpKSB7CiYjNDM7CQkJZGF0YVtpXS5ub25fc3RhY2tfYWNjZXNzID0gdHJ1ZTsKJiM0MzsJCX0KIAl9CiYjNDM7CS8qCiYjNDM7CSAqIExhc3Qgc2xvdCBpbnN0cnVjdGlvbiBjb3VsZCBiZSBhIG5ld2x5IGdlbmVyYXRlZAomIzQzOwkgKiBCUEZfU1QvQlBGX0xEWC9CUEZfU1RYCiYjNDM7CSAqLwomIzQzOwlpZiAoaXNfbWVtX2luc24oaW5zbiAmIzQzOyBvZmYgJiM0MzsgY250IC0gMSkgJmFtcDsmYW1wOyBpbnNuX29mZl9pbl9wYXRjaCAhPSBjbnQgLSAxKQomIzQzOwkJZGF0YVtvZmYgJiM0MzsgY250IC0gMV0ubm9uX3N0YWNrX2FjY2VzcyA9IHRydWU7CiAKIAkvKgogCSAqIFRoZSBpbmRpcmVjdF90YXJnZXQgZmxhZyBvZiB0aGUgb3JpZ2luYWwgaW5zdHJ1Y3Rpb24gd2FzIG1vdmVkIHRvIHRoZSBsYXN0IG9mIHRoZQpAQCAtMjQ1LDcgJiM0MzsyNzYsOCBAQCBzdGF0aWMgdm9pZCBhZGp1c3RfcG9rZV9kZXNjcyhzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBvZmYsIHUzMiBsZW4pCiB9CiAKIHN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLAotCQkJCSAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgdTMyIGxlbikKJiM0MzsJCQkJICAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCB1MzIgbGVuLAomIzQzOwkJCQkgICAgIHMzMiBpbnNuX29mZl9pbl9wYXRjaCkKIHsKIAlzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nOwogCXN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqbmV3X2RhdGEgPSBOVUxMOwpAQCAtMjY5LDcgJiM0MzszMDEsNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZiwKIAkJCQllbnYtJmd0O2luc25fYXV4X2RhdGFbb2ZmXS5vcmlnX2lkeCk7CiAJCXJldHVybiBOVUxMOwogCX0KLQlhZGp1c3RfaW5zbl9hdXhfZGF0YShlbnYsIG5ld19wcm9nLCBvZmYsIGxlbik7CiYjNDM7CWFkanVzdF9pbnNuX2F1eF9kYXRhKGVudiwgbmV3X3Byb2csIG9mZiwgbGVuLCBpbnNuX29mZl9pbl9wYXRjaCk7CiAJYWRqdXN0X3N1YnByb2dfc3RhcnRzKGVudiwgb2ZmLCBsZW4pOwogCWFkanVzdF9pbnNuX2FycmF5cyhlbnYsIG9mZiwgbGVuKTsKIAlhZGp1c3RfcG9rZV9kZXNjcyhuZXdfcHJvZywgb2ZmLCBsZW4pOwpAQCAtNjY4LDcgJiM0Mzs3MDAsNyBAQCBpbnQgYnBmX29wdF9zdWJyZWdfemV4dF9sbzMyX3JuZF9oaTMyKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJCXBhdGNoID0gemV4dF9wYXRjaDsKIAkJcGF0Y2hfbGVuID0gMjsKIGFwcGx5X3BhdGNoX2J1ZmZlcjoKLQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgYWRqX2lkeCwgcGF0Y2gsIHBhdGNoX2xlbik7CiYjNDM7CQluZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBhZGpfaWR4LCBwYXRjaCwgcGF0Y2hfbGVuLCAwKTsKIAkJaWYgKCFuZXdfcHJvZykKIAkJCXJldHVybiAtRU5PTUVNOwogCQllbnYtJmd0O3Byb2cgPSBuZXdfcHJvZzsKQEAgLTcxMyw3ICYjNDM7NzQ1LDcgQEAgaW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQkJaW5zbl9idWZbY250JiM0MzsmIzQzO10gPSBCUEZfU1RYX01FTShCUEZfRFcsIEJQRl9SRUdfRlAsIEJQRl9SRUdfMSwKIAkJCQkJCSAgICAgIC1zdWJwcm9nc1swXS5zdGFja19kZXB0aCk7CiAJCQlpbnNuX2J1ZltjbnQmIzQzOyYjNDM7XSA9IGVudi0mZ3Q7cHJvZy0mZ3Q7aW5zbnNpWzBdOwotCQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgMCwgaW5zbl9idWYsIGNudCk7CiYjNDM7CQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgMCwgaW5zbl9idWYsIGNudCwgMSk7CiAJCQlpZiAoIW5ld19wcm9nKQogCQkJCXJldHVybiAtRU5PTUVNOwogCQkJZW52LSZndDtwcm9nID0gbmV3X3Byb2c7CkBAIC03MzYsNyAmIzQzOzc2OCw4IEBAIGludCBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAkJCXZlcmlmaWVyX2J1ZyhlbnYsICYjMzQ7cHJvbG9ndWUgaXMgdG9vIGxvbmcmIzM0Oyk7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfSBlbHNlIGlmIChjbnQpIHsKLQkJCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIDAsIGluc25fYnVmLCBjbnQpOwomIzQzOwkJCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIDAsIGluc25fYnVmLCBjbnQsCiYjNDM7CQkJCQkJICAgICAgIGNudCAtIDEpOwogCQkJaWYgKCFuZXdfcHJvZykKIAkJCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtNzY4LDcgJiM0Mzs4MDEsOCBAQCBpbnQgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCQkqcGF0Y2gmIzQzOyYjNDM7ID0gQlBGX1NUX05PU1BFQygpOwogCQkJKnBhdGNoJiM0MzsmIzQzOyA9ICppbnNuOwogCQkJY250ID0gcGF0Y2ggLSBpbnNuX2J1ZjsKLQkJCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpOwomIzQzOwkJCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLAomIzQzOwkJCQkJCSAgICAgICBjbnQsIGNudCAtIDEpOwogCQkJaWYgKCFuZXdfcHJvZykKIAkJCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtODQxLDcgJiM0Mzs4NzUsOCBAQCBpbnQgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCQkqcGF0Y2gmIzQzOyYjNDM7ID0gKmluc247CiAJCQkqcGF0Y2gmIzQzOyYjNDM7ID0gQlBGX1NUX05PU1BFQygpOwogCQkJY250ID0gcGF0Y2ggLSBpbnNuX2J1ZjsKLQkJCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpOwomIzQzOwkJCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLAomIzQzOwkJCQkJCSAgICAgICBjbnQsIDApOwogCQkJaWYgKCFuZXdfcHJvZykKIAkJCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtOTcxLDcgJiM0MzsxMDA2LDggQEAgaW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQkJCQkJICAgICAgIHNpemUgKiA4LCAwKTsKIAogcGF0Y2hfaW5zbl9idWY6Ci0JCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpOwomIzQzOwkJbmV3X3Byb2cgPQomIzQzOwkJCWJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250LCAtMSk7CiAJCWlmICghbmV3X3Byb2cpCiAJCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTQ2Myw3ICYjNDM7MTQ5OSw3IEBAIHN0YXRpYyBpbnQgYWRkX2hpZGRlbl9zdWJwcm9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqcGF0CiAJICogb25lcyBmb3IgdGhlIGhpZGRlbiBzdWJwcm9nLiBIZW5jZSBhbGwgb2YgdGhlIGFkanVzdG1lbnQgb3BlcmF0aW9ucwogCSAqIGluIGJwZl9wYXRjaF9pbnNuX2RhdGEgYXJlIG5vLW9wcy4KIAkgKi8KLQlwcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGVudi0mZ3Q7cHJvZy0mZ3Q7bGVuIC0gMSwgcGF0Y2gsIGxlbik7CiYjNDM7CXByb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgZW52LSZndDtwcm9nLSZndDtsZW4gLSAxLCBwYXRjaCwgbGVuLCAwKTsKIAlpZiAoIXByb2cpCiAJCXJldHVybiAtRU5PTUVNOwogCWVudi0mZ3Q7cHJvZyA9IHByb2c7CkBAIC0xNTQ4LDcgJiM0MzsxNTg0LDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCiAJCQljbnQgPSBwYXRjaCAtIGluc25fYnVmOwogCi0JCQluZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250KTsKJiM0MzsJCQluZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwKJiM0MzsJCQkJCQkgICAgICAgY250LCAwKTsKIAkJCWlmICghbmV3X3Byb2cpCiAJCQkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTE1NjgsNiAmIzQzOzE2MDUsNyBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCQlib29sIGlzX3NkaXYgPSBpc2RpdiAmYW1wOyZhbXA7IGluc24tJmd0O29mZiA9PSAxOwogCQkJYm9vbCBpc19zbW9kID0gIWlzZGl2ICZhbXA7JmFtcDsgaW5zbi0mZ3Q7b2ZmID09IDE7CiAJCQlzdHJ1Y3QgYnBmX2luc24gKnBhdGNoID0gaW5zbl9idWY7CiYjNDM7CQkJczMyIGluc25fb2ZmX2luX3BhdGNoOwogCiAJCQlpZiAoaXNfc2RpdikgewogCQkJCS8qIFtSLFddeCBzZGl2IDAgLSZndDsgMApAQCAtMTU5NCw2ICYjNDM7MTYzMiw3IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAkJCQkqcGF0Y2gmIzQzOyYjNDM7ID0gQlBGX0pNUF9JTU0oQlBGX0pBLCAwLCAwLCAxKTsKIAkJCQkqcGF0Y2gmIzQzOyYjNDM7ID0gKmluc247CiAJCQkJY250ID0gcGF0Y2ggLSBpbnNuX2J1ZjsKJiM0MzsJCQkJaW5zbl9vZmZfaW5fcGF0Y2ggPSBjbnQgLSAxOwogCQkJfSBlbHNlIGlmIChpc19zbW9kKSB7CiAJCQkJLyogW1IsV114IG1vZCAwIC0mZ3Q7IFtSLFddeCAqLwogCQkJCS8qIFtSLFddeCBtb2QgLTEgLSZndDsgMCAqLwpAQCAtMTYxMCw2ICYjNDM7MTY0OSw3IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAkJCQkqcGF0Y2gmIzQzOyYjNDM7ID0gQlBGX01PVjMyX0lNTShpbnNuLSZndDtkc3RfcmVnLCAwKTsKIAkJCQkqcGF0Y2gmIzQzOyYjNDM7ID0gQlBGX0pNUF9JTU0oQlBGX0pBLCAwLCAwLCAxKTsKIAkJCQkqcGF0Y2gmIzQzOyYjNDM7ID0gKmluc247CiYjNDM7CQkJCWluc25fb2ZmX2luX3BhdGNoID0gcGF0Y2ggLSBpbnNuX2J1ZiAtIDE7CiAKIAkJCQlpZiAoIWlzNjQpIHsKIAkJCQkJKnBhdGNoJiM0MzsmIzQzOyA9IEJQRl9KTVBfSU1NKEJQRl9KQSwgMCwgMCwgMSk7CkBAIC0xNjI1LDEyICYjNDM7MTY2NSwxNCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCQkJKnBhdGNoJiM0MzsmIzQzOyA9IEJQRl9KTVBfSU1NKEJQRl9KQSwgMCwgMCwgMSk7CiAJCQkJKnBhdGNoJiM0MzsmIzQzOyA9ICppbnNuOwogCQkJCWNudCA9IHBhdGNoIC0gaW5zbl9idWY7CiYjNDM7CQkJCWluc25fb2ZmX2luX3BhdGNoID0gY250IC0gMTsKIAkJCX0gZWxzZSB7CiAJCQkJLyogW1IsV114IG1vZCAwIC0mZ3Q7IFtSLFddeCAqLwogCQkJCSpwYXRjaCYjNDM7JiM0MzsgPSBCUEZfUkFXX0lOU04oKGlzNjQgPyBCUEZfSk1QIDogQlBGX0pNUDMyKSB8CiAJCQkJCQkJQlBGX0pFUSB8IEJQRl9LLCBpbnNuLSZndDtzcmNfcmVnLAogCQkJCQkJCTAsIDEgJiM0MzsgKGlzNjQgPyAwIDogMSksIDApOwogCQkJCSpwYXRjaCYjNDM7JiM0MzsgPSAqaW5zbjsKJiM0MzsJCQkJaW5zbl9vZmZfaW5fcGF0Y2ggPSBwYXRjaCAtIGluc25fYnVmIC0gMTsKIAogCQkJCWlmICghaXM2NCkgewogCQkJCQkqcGF0Y2gmIzQzOyYjNDM7ID0gQlBGX0pNUF9JTU0oQlBGX0pBLCAwLCAwLCAxKTsKQEAgLTE2MzksNyAmIzQzOzE2ODEsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCQkJY250ID0gcGF0Y2ggLSBpbnNuX2J1ZjsKIAkJCX0KIAotCQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7CiYjNDM7CQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsCiYjNDM7CQkJCQkJICAgICAgIGNudCwgaW5zbl9vZmZfaW5fcGF0Y2gpOwogCQkJaWYgKCFuZXdfcHJvZykKIAkJCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTY1NSw2ICYjNDM7MTY5OCw3IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAkJICAgICBCUEZfTU9ERShpbnNuLSZndDtjb2RlKSA9PSBCUEZfUFJPQkVfTUVNU1gpKSB7CiAJCQlzdHJ1Y3QgYnBmX2luc24gKnBhdGNoID0gaW5zbl9idWY7CiAJCQl1NjQgdWFkZHJlc3NfbGltaXQgPSBicGZfYXJjaF91YWRkcmVzc19saW1pdCgpOwomIzQzOwkJCXMzMiBpbnNuX29mZl9pbl9wYXRjaDsKIAogCQkJaWYgKCF1YWRkcmVzc19saW1pdCkKIAkJCQlnb3RvIG5leHRfaW5zbjsKQEAgLTE2NjUsMTEgJiM0MzsxNzA5LDEzIEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAkJCSpwYXRjaCYjNDM7JiM0MzsgPSBCUEZfQUxVNjRfSU1NKEJQRl9SU0gsIEJQRl9SRUdfQVgsIDMyKTsKIAkJCSpwYXRjaCYjNDM7JiM0MzsgPSBCUEZfSk1QX0lNTShCUEZfSkxFLCBCUEZfUkVHX0FYLCB1YWRkcmVzc19saW1pdCAmZ3Q7Jmd0OyAzMiwgMik7CiAJCQkqcGF0Y2gmIzQzOyYjNDM7ID0gKmluc247CiYjNDM7CQkJaW5zbl9vZmZfaW5fcGF0Y2ggPSBwYXRjaCAtIGluc25fYnVmIC0gMTsKIAkJCSpwYXRjaCYjNDM7JiM0MzsgPSBCUEZfSk1QX0lNTShCUEZfSkEsIDAsIDAsIDEpOwogCQkJKnBhdGNoJiM0MzsmIzQzOyA9IEJQRl9NT1Y2NF9JTU0oaW5zbi0mZ3Q7ZHN0X3JlZywgMCk7CiAKIAkJCWNudCA9IHBhdGNoIC0gaW5zbl9idWY7Ci0JCQluZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250KTsKJiM0MzsJCQluZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwKJiM0MzsJCQkJCQkgICAgICAgY250LCBpbnNuX29mZl9pbl9wYXRjaCk7CiAJCQlpZiAoIW5ld19wcm9nKQogCQkJCXJldHVybiAtRU5PTUVNOwogCkBAIC0xNjg5LDcgJiM0MzsxNzM1LDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQkJCXJldHVybiAtRUZBVUxUOwogCQkJfQogCi0JCQluZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250KTsKJiM0MzsJCQluZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwKJiM0MzsJCQkJCQkgICAgICAgY250LCAwKTsKIAkJCWlmICghbmV3X3Byb2cpCiAJCQkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTE3NDIsNyAmIzQzOzE3ODksOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCQkJKnBhdGNoJiM0MzsmIzQzOyA9IEJQRl9BTFU2NF9JTU0oQlBGX01VTCwgb2ZmX3JlZywgLTEpOwogCQkJY250ID0gcGF0Y2ggLSBpbnNuX2J1ZjsKIAotCQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7CiYjNDM7CQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsCiYjNDM7CQkJCQkJICAgICAgIGNudCwgY250IC0gMSk7CiAJCQlpZiAoIW5ld19wcm9nKQogCQkJCXJldHVybiAtRU5PTUVNOwogCkBAIC0xNzg3LDcgJiM0MzsxODM1LDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQkJaW5zbl9idWZbNl0gPSBCUEZfU1RYX01FTShCUEZfRFcsIEJQRl9SRUdfMTAsIEJQRl9SRUdfQVgsIHN0YWNrX29mZl9jbnQpOwogCQkJY250ID0gNzsKIAotCQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7CiYjNDM7CQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsCiYjNDM7CQkJCQkJICAgICAgIGNudCwgMyk7CiAJCQlpZiAoIW5ld19wcm9nKQogCQkJCXJldHVybiAtRU5PTUVNOwogCkBAIC0xODA4LDcgJiM0MzsxODU3LDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQkJaW5zbl9idWZbM10gPSBCUEZfU1RYX01FTShCUEZfRFcsIEJQRl9SRUdfMTAsIEJQRl9SRUdfQVgsIHN0YWNrX29mZik7CiAJCQljbnQgPSA0OwogCi0JCQluZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250KTsKJiM0MzsJCQluZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwKJiM0MzsJCQkJCQkgICAgICAgY250LCAyKTsKIAkJCWlmICghbmV3X3Byb2cpCiAJCQkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTE4MjksNyAmIzQzOzE4NzksOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCQlpZiAoY250ID09IDApCiAJCQkJZ290byBuZXh0X2luc247CiAKLQkJCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpOwomIzQzOwkJCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLAomIzQzOwkJCQkJCSAgICAgICBjbnQsIGNudCAtIDEpOwogCQkJaWYgKCFuZXdfcHJvZykKIAkJCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTkxNiw3ICYjNDM7MTk2Nyw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAkJCQkJCQkJIG1hcCktJmd0O2luZGV4X21hc2spOwogCQkJaW5zbl9idWZbMl0gPSAqaW5zbjsKIAkJCWNudCA9IDM7Ci0JCQluZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250KTsKJiM0MzsJCQluZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwKJiM0MzsJCQkJCQkgICAgICAgY250LCBjbnQgLSAxKTsKIAkJCWlmICghbmV3X3Byb2cpCiAJCQkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTE5NDksNyAmIzQzOzIwMDEsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCQlpbnNuX2J1ZlsyXSA9ICppbnNuOwogCQkJY250ID0gMzsKIAotCQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7CiYjNDM7CQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsCiYjNDM7CQkJCQkJICAgICAgIGNudCwgY250IC0gMSk7CiAJCQlpZiAoIW5ld19wcm9nKQogCQkJCXJldHVybiAtRU5PTUVNOwogCkBAIC0xOTY4LDcgJiM0MzsyMDIxLDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQkJaW5zbl9idWZbMV0gPSAqaW5zbjsKIAkJCWNudCA9IDI7CiAKLQkJCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpOwomIzQzOwkJCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLAomIzQzOwkJCQkJCSAgICAgICBjbnQsIGNudCAtIDEpOwogCQkJaWYgKCFuZXdfcHJvZykKIAkJCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMjAwOCw4ICYjNDM7MjA2Miw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAkJCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCQkJfQogCi0JCQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwKLQkJCQkJCQkgICAgICAgaW5zbl9idWYsIGNudCk7CiYjNDM7CQkJCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YSgKJiM0MzsJCQkJCWVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCwgLTEpOwogCQkJCWlmICghbmV3X3Byb2cpCiAJCQkJCXJldHVybiAtRU5PTUVNOwogCkBAIC0yMDkyLDcgJiM0MzsyMTQ2LDcgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQkJY250ID0gMzsKIAogCQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsCi0JCQkJCQkgICAgICAgY250KTsKJiM0MzsJCQkJCQkgICAgICAgY250LCAtMSk7CiAJCQlpZiAoIW5ld19wcm9nKQogCQkJCXJldHVybiAtRU5PTUVNOwogCkBAIC0yMTIwLDcgJiM0MzsyMTc0LDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQkJaW5zbl9idWZbMF0gPSBCUEZfQUxVMzJfUkVHKEJQRl9YT1IsIEJQRl9SRUdfMCwgQlBGX1JFR18wKTsKIAkJCWNudCA9IDE7CiAjZW5kaWYKLQkJCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpOwomIzQzOwkJCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLAomIzQzOwkJCQkJCSAgICAgICBjbnQsIC0xKTsKIAkJCWlmICghbmV3X3Byb2cpCiAJCQkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTIxMzgsNyAmIzQzOzIxOTMsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCQlpbnNuX2J1ZlsyXSA9IEJQRl9MRFhfTUVNKEJQRl9EVywgQlBGX1JFR18wLCBCUEZfUkVHXzAsIDApOwogCQkJY250ID0gMzsKIAotCQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7CiYjNDM7CQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsCiYjNDM7CQkJCQkJICAgICAgIGNudCwgLTEpOwogCQkJaWYgKCFuZXdfcHJvZykKIAkJCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMjE3Miw3ICYjNDM7MjIyOCw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAkJCWluc25fYnVmW2NudCYjNDM7JiM0MztdID0gQlBGX0pNUF9BKDEpOwogCQkJaW5zbl9idWZbY250JiM0MzsmIzQzO10gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgLUVJTlZBTCk7CiAKLQkJCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpOwomIzQzOwkJCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLAomIzQzOwkJCQkJCSAgICAgICBjbnQsIC0xKTsKIAkJCWlmICghbmV3X3Byb2cpCiAJCQkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTIyMDQsNyAmIzQzOzIyNjEsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCQkJY250ID0gMTsKIAkJCX0KIAotCQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7CiYjNDM7CQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsCiYjNDM7CQkJCQkJICAgICAgIGNudCwgLTEpOwogCQkJaWYgKCFuZXdfcHJvZykKIAkJCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMjIzMCw3ICYjNDM7MjI4OCw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAkJCQljbnQgPSAyOwogCQkJfQogCi0JCQluZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250KTsKJiM0MzsJCQluZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwKJiM0MzsJCQkJCQkgICAgICAgY250LCAtMSk7CiAJCQlpZiAoIW5ld19wcm9nKQogCQkJCXJldHVybiAtRU5PTUVNOwogCkBAIC0yMjQ2LDcgJiM0MzsyMzA1LDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQkJLyogTG9hZCBJUCBhZGRyZXNzIGZyb20gY3R4IC0gMTYgKi8KIAkJCWluc25fYnVmWzBdID0gQlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfMSwgLTE2KTsKIAotCQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIDEpOwomIzQzOwkJCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLAomIzQzOwkJCQkJCSAgICAgICAxLCAtMSk7CiAJCQlpZiAoIW5ld19wcm9nKQogCQkJCXJldHVybiAtRU5PTUVNOwogCkBAIC0yMzAxLDcgJiM0MzsyMzYxLDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQogCQkJaW5zbl9idWZbMTBdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIC1FTk9FTlQpOwogCQkJY250ID0gMTE7CiAKLQkJCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLCBjbnQpOwomIzQzOwkJCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLAomIzQzOwkJCQkJCSAgICAgICBjbnQsIC0xKTsKIAkJCWlmICghbmV3X3Byb2cpCiAJCQkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTIzMTksNyAmIzQzOzIzODAsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpCiAJCQlpbnNuX2J1ZlsxXSA9IEJQRl9BVE9NSUNfT1AoQlBGX0RXLCBCUEZfWENIRywgQlBGX1JFR18xLCBCUEZfUkVHXzAsIDApOwogCQkJY250ID0gMjsKIAotCQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCk7CiYjNDM7CQkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsCiYjNDM7CQkJCQkJICAgICAgIGNudCwgLTEpOwogCQkJaWYgKCFuZXdfcHJvZykKIAkJCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMjM4Nyw3ICYjNDM7MjQ0OSw3IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudikKIAkJLyogQ29weSBmaXJzdCBhY3R1YWwgaW5zbiB0byBwcmVzZXJ2ZSBpdCAqLwogCQlpbnNuX2J1ZltjbnQmIzQzOyYjNDM7XSA9IGVudi0mZ3Q7cHJvZy0mZ3Q7aW5zbnNpW3N1YnByb2dfc3RhcnRdOwogCi0JCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIHN1YnByb2dfc3RhcnQsIGluc25fYnVmLCBjbnQpOwomIzQzOwkJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgc3VicHJvZ19zdGFydCwgaW5zbl9idWYsIGNudCwgY250IC0gMSk7CiAJCWlmICghbmV3X3Byb2cpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJZW52LSZndDtwcm9nID0gcHJvZyA9IG5ld19wcm9nOwpAQCAtMjQ4Niw3ICYjNDM7MjU0OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX3Byb2cgKmlubGluZV9icGZfbG9vcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCWluc25fYnVmW2NudCYjNDM7JiM0MztdID0gQlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzgsIEJQRl9SRUdfMTAsIHI4X29mZnNldCk7CiAKIAkqdG90YWxfY250ID0gY250OwotCW5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIHBvc2l0aW9uLCBpbnNuX2J1ZiwgY250KTsKJiM0MzsJbmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgcG9zaXRpb24sIGluc25fYnVmLCBjbnQsIC0xKTsKIAlpZiAoIW5ld19wcm9nKQogCQlyZXR1cm4gbmV3X3Byb2c7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCAyMzM0NzJhODcxYmU1Ny4uYmMzYjQ3NzEzOTZhOWYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKQEAgLTMyMDcsNiAmIzQzOzMyMDcsMTEgQEAgc3RhdGljIHZvaWQgbWFya19pbmRpcmVjdF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkeCkKIAllbnYtJmd0O2luc25fYXV4X2RhdGFbaWR4XS5pbmRpcmVjdF90YXJnZXQgPSB0cnVlOwogfQogCiYjNDM7c3RhdGljIHZvaWQgbWFya19ub25fc3RhY2tfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpZHgpCiYjNDM7ewomIzQzOwllbnYtJmd0O2luc25fYXV4X2RhdGFbaWR4XS5ub25fc3RhY2tfYWNjZXNzID0gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiAjZGVmaW5lIExSX0ZSQU1FTk9fQklUUwk0CiAjZGVmaW5lIExSX1NQSV9CSVRTCTYKICNkZWZpbmUgTFJfRU5UUllfQklUUwkoTFJfU1BJX0JJVFMgJiM0MzsgTFJfRlJBTUVOT19CSVRTICYjNDM7IDEpCkBAIC02NDAwLDYgJiM0Mzs2NDA1LDEwIEBAIHN0YXRpYyBpbnQgY2hlY2tfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsIHN0cnVjdCBiCiAJCWVsc2UKIAkJCWNvZXJjZV9yZWdfdG9fc2l6ZV9zeCgmYW1wO3JlZ3NbdmFsdWVfcmVnbm9dLCBzaXplKTsKIAl9CiYjNDM7CiYjNDM7CWlmICghZXJyICZhbXA7JmFtcDsgcmVnLSZndDt0eXBlICE9IFBUUl9UT19TVEFDSykKJiM0MzsJCW1hcmtfbm9uX3N0YWNrX2FjY2VzcyhlbnYsIGluc25faWR4KTsKJiM0MzsKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaW5zbl9hcnJheS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2luc25fYXJyYXkuYwppbmRleCAwMjIyYTlhNWQwNzYxNC4uODE1ZjNlMDQ1NDBmZmMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pbnNuX2FycmF5LmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2luc25fYXJyYXkuYwpAQCAtMjI3LDQyICYjNDM7MjI3LDYgQEAgc3RhdGljIHZvaWQgY2hlY2tfaW5jb3JyZWN0X2luZGV4KHZvaWQpCiAJY2hlY2tfbWlkX2luc25faW5kZXgoKTsKIH0KIAotc3RhdGljIGludCBzZXRfYnBmX2ppdF9oYXJkZW4oY2hhciAqbGV2ZWwpCi17Ci0JY2hhciBvbGRfbGV2ZWw7Ci0JaW50IGVyciA9IC0xOwotCWludCBmZCA9IC0xOwotCi0JZmQgPSBvcGVuKCYjMzQ7L3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfaGFyZGVuJiMzNDssIE9fUkRXUiB8IE9fTk9OQkxPQ0spOwotCWlmIChmZCAmbHQ7IDApIHsKLQkJQVNTRVJUX0ZBSUwoJiMzNDtvcGVuIC4uLi9icGZfaml0X2hhcmRlbiByZXR1cm5lZCAlZCAoZXJybm89JWQpJiMzNDssIGZkLCBlcnJubyk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQllcnIgPSByZWFkKGZkLCAmYW1wO29sZF9sZXZlbCwgMSk7Ci0JaWYgKGVyciAhPSAxKSB7Ci0JCUFTU0VSVF9GQUlMKCYjMzQ7cmVhZCBmcm9tIC4uLi9icGZfaml0X2hhcmRlbiByZXR1cm5lZCAlZCAoZXJybm89JWQpJiMzNDssIGVyciwgZXJybm8pOwotCQllcnIgPSAtMTsKLQkJZ290byBlbmQ7Ci0JfQotCi0JbHNlZWsoZmQsIDAsIFNFRUtfU0VUKTsKLQotCWVyciA9IHdyaXRlKGZkLCBsZXZlbCwgMSk7Ci0JaWYgKGVyciAhPSAxKSB7Ci0JCUFTU0VSVF9GQUlMKCYjMzQ7d3JpdGUgdG8gLi4uL2JwZl9qaXRfaGFyZGVuIHJldHVybmVkICVkIChlcnJubz0lZCkmIzM0OywgZXJyLCBlcnJubyk7Ci0JCWVyciA9IC0xOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQllcnIgPSAwOwotCSpsZXZlbCA9IG9sZF9sZXZlbDsKLWVuZDoKLQlpZiAoZmQgJmd0Oz0gMCkKLQkJY2xvc2UoZmQpOwotCXJldHVybiBlcnI7Ci19Ci0KIHN0YXRpYyB2b2lkIGNoZWNrX2JsaW5kbmVzcyh2b2lkKQogewogCXN0cnVjdCBicGZfaW5zbiBpbnNuc1tdID0gewpAQCAtMjcyLDcgJiM0MzsyMzYsNyBAQCBzdGF0aWMgdm9pZCBjaGVja19ibGluZG5lc3Modm9pZCkKIAkJQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDEpLAogCQlCUEZfRVhJVF9JTlNOKCksCiAJfTsKLQlpbnQgcHJvZ19mZCA9IC0xLCBtYXBfZmQ7CiYjNDM7CWludCBwcm9nX2ZkID0gLTEsIG1hcF9mZCwgcmV0OwogCXN0cnVjdCBicGZfaW5zbl9hcnJheV92YWx1ZSB2YWwgPSB7fTsKIAljaGFyIGJwZl9qaXRfaGFyZGVuID0gJiMzOTtAJiMzOTs7IC8qIG5vbi1leGl6c3RpbmcgdmFsdWUgKi8KIAlpbnQgaTsKQEAgLTI5MSw3ICYjNDM7MjU1LDggQEAgc3RhdGljIHZvaWQgY2hlY2tfYmxpbmRuZXNzKHZvaWQpCiAJCWdvdG8gY2xlYW51cDsKIAogCWJwZl9qaXRfaGFyZGVuID0gJiMzOTsyJiMzOTs7Ci0JaWYgKHNldF9icGZfaml0X2hhcmRlbigmYW1wO2JwZl9qaXRfaGFyZGVuKSkgewomIzQzOwlyZXQgPSBzZXRfYnBmX2ppdF9oYXJkZW4oJmFtcDticGZfaml0X2hhcmRlbik7CiYjNDM7CWlmICghQVNTRVJUX09LKHJldCwgJiMzNDtzZXQgYnBmX2ppdF9oYXJkZW4mIzM0OykpIHsKIAkJYnBmX2ppdF9oYXJkZW4gPSAmIzM5O0AmIzM5OzsgLyogb3BlbiwgcmVhZCBvciB3cml0ZSBmYWlsZWQgPSZndDsgbm8gd3JpdGUgd2FzIGRvbmUgKi8KIAkJZ290byBjbGVhbnVwOwogCX0KQEAgLTMxMyw3ICYjNDM7Mjc4LDggQEAgc3RhdGljIHZvaWQgY2hlY2tfYmxpbmRuZXNzKHZvaWQpCiBjbGVhbnVwOgogCS8qIHJlc3RvcmUgdGhlIG9sZCBvbmUgKi8KIAlpZiAoYnBmX2ppdF9oYXJkZW4gIT0gJiMzOTtAJiMzOTspCi0JCXNldF9icGZfaml0X2hhcmRlbigmYW1wO2JwZl9qaXRfaGFyZGVuKTsKJiM0MzsJCUFTU0VSVF9PSyhzZXRfYnBmX2ppdF9oYXJkZW4oJmFtcDticGZfaml0X2hhcmRlbiksCiYjNDM7CQkJICAmIzM0O3Jlc3RvcmUgaGFyZGVuaW5nIGNvbmZpZ3VyYXRpb24mIzM0Oyk7CiAKIAljbG9zZShwcm9nX2ZkKTsKIAljbG9zZShtYXBfZmQpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva2FzYW4uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2thc2FuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjJiYzU0NWU5NjI1OTVlCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva2FzYW4uYwpAQCAtMCwwICYjNDM7MSw0MzAgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBCU0QtMy1DbGF1c2UKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRlc3RzIHZhbGlkYXRpbmcgdGhhdCBLQVNBTiByZXBvcnRzIGFyZSBwcm9wZXJseSBpbnN0cnVtZW50ZWQgYW5kCiYjNDM7ICogZ2VuZXJhdGVkIG9uIGEgd2lkZSB2YXJpZXR5IG9mIGluc3RydWN0aW9ucy4gVGhlIHJ1bm5pbmcga2VybmVsIG5lZWRzCiYjNDM7ICoga2FzYW5fbXVsdGlfc2hvdCB0byBydW4gbXVsdGlwbGUga2FzYW4tZ2VuZXJhdGluZyBzdWJ0ZXN0cyBhdCBvbmNlCiYjNDM7ICovCiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaWZfZXRoZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O3Rlc3RfcHJvZ3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dW5wcml2X2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2thc2FuLnNrZWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtrYXNhbl9oYXJkZW4uc2tlbC5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIFNVQlRFU1RfTkFNRV9NQVhfTEVOCTEyOAomIzQzOyNkZWZpbmUgUFJPR19OQU1FX01BWF9MRU4JMTI4CiYjNDM7CiYjNDM7I2RlZmluZSBNQVhfTE9HX1NJWkUJCSg4ICogMTAyNCkKJiM0MzsjZGVmaW5lIFJFQURfQ0hVTktfU0laRQkJMjU2CiYjNDM7CiYjNDM7I2RlZmluZSBLQVNBTl9QQVRURVJOX1NMQUJfVUFGICYjMzQ7QlVHOiBLQVNBTjogc2xhYi11c2UtYWZ0ZXItZnJlZSAmIzM0OyBcCiYjNDM7CSYjMzQ7aW4gYnBmX3Byb2dfJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhfJXMmIzM0OwomIzQzOyNkZWZpbmUgS0FTQU5fUEFUVEVSTl9SRVBPUlQgJiMzNDslcyBvZiBzaXplICVkIGF0IGFkZHImIzM0OwomIzQzOwomIzQzO3N0YXRpYyBjaGFyIGtsb2dfYnVmZmVyW01BWF9MT0dfU0laRV07CiYjNDM7c3RhdGljIGNoYXIgcmVjb3JkW01BWF9MT0dfU0laRV07CiYjNDM7CiYjNDM7c3RydWN0IHRlc3Rfc3BlYyB7CiYjNDM7CWNoYXIgKnByb2dfdHlwZTsKJiM0MzsJYm9vbCBpc193cml0ZTsKJiM0MzsJYm9vbCBvbmx5XzMyX29yXzY0OwomIzQzOwlib29sIG5lZWRzX2xvYWRfYWNxX3N0b3JlX3JlbDsKJiM0MzsJYm9vbCBza2lwX211bHRpX3NpemVfdGVzdGluZzsKJiM0MzsJYm9vbCBza2lwX29uX3N0YWNrX3Rlc3Rpbmc7CiYjNDM7CWludCBydW5fc2l6ZTsKJiM0MzsJYm9vbCBleHBlY3Rfbm9fcmVwb3J0OwomIzQzOwlib29sIHJuZF9oaTMyOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IGthc2FuX3dyaXRlX3ZhbCB7CiYjNDM7CV9fdTggZGF0YV8xOwomIzQzOwlfX3UxNiBkYXRhXzI7CiYjNDM7CV9fdTMyIGRhdGFfNDsKJiM0MzsJX191NjQgZGF0YV84OwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHRlc3RfY3R4IHsKJiM0MzsJX191OCAgcHJvZ190YWdbQlBGX1RBR19TSVpFXTsKJiM0MzsJc3RydWN0IGJwZl9vYmplY3QgKm9iajsKJiM0MzsJaW50ICphY2Nlc3Nfc2l6ZTsKJiM0MzsJYm9vbCBza2lwX2xvYWRfYWNxX3N0b3JlX3JlbDsKJiM0MzsJc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nOwomIzQzOwljaGFyIHByb2dfbmFtZVtTVUJURVNUX05BTUVfTUFYX0xFTl07CiYjNDM7CWludCBrbG9nX2ZkOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBvcGVuX2tlcm5lbF9sb2dzKHZvaWQpCiYjNDM7ewomIzQzOwlpbnQgZmQ7CiYjNDM7CiYjNDM7CWZkID0gb3BlbigmIzM0Oy9kZXYva21zZyYjMzQ7LCBPX1JET05MWSB8IE9fTk9OQkxPQ0spOwomIzQzOwomIzQzOwlyZXR1cm4gZmQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHNraXBfa2VybmVsX2xvZ3MoaW50IGZkKQomIzQzO3sKJiM0MzsJbHNlZWsoZmQsIDAsIFNFRUtfRU5EKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByZWFkX2tlcm5lbF9sb2dzKGludCBmZCwgY2hhciAqYnVmLCBzaXplX3QgbWF4X2xlbikKJiM0Mzt7CiYjNDM7CXNpemVfdCB0b3RhbCA9IDA7CiYjNDM7CXNzaXplX3QgbjsKJiM0MzsKJiM0MzsJYnVmWzBdID0gJiMzOTtcMCYjMzk7OwomIzQzOwl3aGlsZSAoMSkgewomIzQzOwkJY2hhciAqbXNnLCAqZW9sOwomIzQzOwkJc2l6ZV90IGxlbjsKJiM0MzsKJiM0MzsJCW4gPSByZWFkKGZkLCByZWNvcmQsIHNpemVvZihyZWNvcmQpIC0gMSk7CiYjNDM7CQlpZiAobiAmbHQ7IDApIHsKJiM0MzsJCQlpZiAoZXJybm8gPT0gRUFHQUlOKQomIzQzOwkJCQlicmVhazsKJiM0MzsJCQlyZXR1cm4gbjsKJiM0MzsJCX0KJiM0MzsJCXJlY29yZFtuXSA9ICYjMzk7XDAmIzM5OzsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBFYWNoIGttc2cgcmVjb3JkIHN0YXJ0cyB3aXRoIHNvbWUgbWV0YWRhdGEsIHNlcGFyYXRlZAomIzQzOwkJICogZnJvbSB0aGUgYWN0dWFsIGNvbnRlbnQgYnkgYSBzZW1pLWNvbG9uCiYjNDM7CQkgKi8KJiM0MzsJCW1zZyA9IHN0cmNocihyZWNvcmQsICYjMzk7OyYjMzk7KTsKJiM0MzsJCWlmICghbXNnKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJbXNnJiM0MzsmIzQzOzsKJiM0MzsJCWVvbCA9IHN0cmNocihtc2csICYjMzk7XG4mIzM5Oyk7CiYjNDM7CQlpZiAoZW9sKQomIzQzOwkJCSplb2wgPSAmIzM5O1wwJiMzOTs7CiYjNDM7CiYjNDM7CQlsZW4gPSBzdHJsZW4obXNnKTsKJiM0MzsJCWlmICh0b3RhbCAmIzQzOyBsZW4gJiM0MzsgMiAmZ3Q7IG1heF9sZW4pCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQltZW1jcHkoYnVmICYjNDM7IHRvdGFsLCBtc2csIGxlbik7CiYjNDM7CQl0b3RhbCAmIzQzOz0gbGVuOwomIzQzOwkJYnVmW3RvdGFsJiM0MzsmIzQzO10gPSAmIzM5O1xuJiMzOTs7CiYjNDM7CQlidWZbdG90YWxdID0gJiMzOTtcMCYjMzk7OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiB0b3RhbDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBjaGVja19rYXNhbl9yZXBvcnRfaW5fa2VybmVsX2xvZ3MoY2hhciAqYnVmLCBzdHJ1Y3QgdGVzdF9jdHggKmN0eCwKJiM0MzsJCQkJCSAgICAgYm9vbCBpc193cml0ZSwgaW50IHNpemUpCiYjNDM7ewomIzQzOwljaGFyIGFjY2Vzc19sb2dbUkVBRF9DSFVOS19TSVpFXTsKJiM0MzsJY2hhciAqa2FzYW5fcmVwb3J0X3N0YXJ0OwomIzQzOwlpbnQgbnNpemU7CiYjNDM7CiYjNDM7CW5zaXplID0gc25wcmludGYoYWNjZXNzX2xvZywgUkVBRF9DSFVOS19TSVpFLCBLQVNBTl9QQVRURVJOX1NMQUJfVUFGLAomIzQzOwkJCSBjdHgtJmd0O3Byb2dfdGFnWzBdLCBjdHgtJmd0O3Byb2dfdGFnWzFdLCBjdHgtJmd0O3Byb2dfdGFnWzJdLAomIzQzOwkJCSBjdHgtJmd0O3Byb2dfdGFnWzNdLCBjdHgtJmd0O3Byb2dfdGFnWzRdLCBjdHgtJmd0O3Byb2dfdGFnWzVdLAomIzQzOwkJCSBjdHgtJmd0O3Byb2dfdGFnWzZdLCBjdHgtJmd0O3Byb2dfdGFnWzddLCBjdHgtJmd0O3Byb2dfbmFtZSk7CiYjNDM7CWlmICghQVNTRVJUX0dFKG5zaXplLCAwLCAmIzM0O2Zvcm1hdCBrYXNhbiBhY2Nlc3MgaGVhZGVyIGxpbmUmIzM0OykpCiYjNDM7CQlyZXR1cm4gbnNpemU7CiYjNDM7CS8qCiYjNDM7CSAqIFNlYXJjaGVkIGthc2FuIHJlcG9ydCBpcyB2YWxpZCBpZgomIzQzOwkgKiAtIGl0IGNvbnRhaW5zIHRoZSBleHBlY3RlZCBrYXNhbiBwYXR0ZXJuCiYjNDM7CSAqIC0gdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBmYXVsdHkgYWNjZXNzIGlzIGZvdW5kIHNvbWV3aGVyZQomIzQzOwkgKiAgIGFmdGVyIHRoZSBoZWFkZXIgKG5vdCBuZWNlc3NhcmlseSBvbiB0aGUgdmVyeSBuZXh0IGxpbmUsCiYjNDM7CSAqICAgYmVjYXVzZSBvdGhlciBrZXJuZWwgbWVzc2FnZXMgbWF5IGludGVybGVhdmUpCiYjNDM7CSAqIC0gZmF1bHR5IGFjY2VzcyBwcm9wZXJ0aWVzIG1hdGNoIHRoZSB0ZXN0ZWQgdHlwZSBhbmQgc2l6ZQomIzQzOwkgKi8KJiM0MzsJa2FzYW5fcmVwb3J0X3N0YXJ0ID0gc3Ryc3RyKGJ1ZiwgYWNjZXNzX2xvZyk7CiYjNDM7CiYjNDM7CWlmICgha2FzYW5fcmVwb3J0X3N0YXJ0KQomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CiYjNDM7CW5zaXplID0gc25wcmludGYoYWNjZXNzX2xvZywgUkVBRF9DSFVOS19TSVpFLCBLQVNBTl9QQVRURVJOX1JFUE9SVCwKJiM0MzsJCQkgaXNfd3JpdGUgPyAmIzM0O1dyaXRlJiMzNDsgOiAmIzM0O1JlYWQmIzM0Oywgc2l6ZSk7CiYjNDM7CWlmICghQVNTRVJUX0dFKG5zaXplLCAwLCAmIzM0O2Zvcm1hdCBrYXNhbiBhY2Nlc3MgcmVwb3J0IGxpbmUmIzM0OykpCiYjNDM7CQlyZXR1cm4gbnNpemU7CiYjNDM7CiYjNDM7CWlmICghc3Ryc3RyKGthc2FuX3JlcG9ydF9zdGFydCwgYWNjZXNzX2xvZykpCiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGV4ZWNfc3VidGVzdChzdHJ1Y3QgdGVzdF9jdHggKmN0eCwgc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwKJiM0MzsJCQkgaW50IGFjY2Vzc19zaXplLCBib29sIG9uX3N0YWNrKQomIzQzO3sKJiM0MzsJTElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIHRvcHRzKTsKJiM0MzsJc3RydWN0IGJwZl9wcm9nX2luZm8gaW5mbzsKJiM0MzsJdWludDhfdCBidWZbRVRIX0hMRU5dID0gezB9OwomIzQzOwlpbnQgcmV0LCBwcm9nX2ZkOwomIzQzOwlfX3UzMiBpbmZvX2xlbjsKJiM0MzsKJiM0MzsJY3R4LSZndDtwcm9nID0gYnBmX29iamVjdF9fZmluZF9wcm9ncmFtX2J5X25hbWUoY3R4LSZndDtvYmosCiYjNDM7CQkJCQkJICAgICBjdHgtJmd0O3Byb2dfbmFtZSk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihjdHgtJmd0O3Byb2csICYjMzQ7ZmluZCB0ZXN0IHByb2cmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWluZm9fbGVuID0gc2l6ZW9mKGluZm8pOwomIzQzOwltZW1zZXQoJmFtcDtpbmZvLCAwLCBpbmZvX2xlbik7CiYjNDM7CXByb2dfZmQgPSBicGZfcHJvZ3JhbV9fZmQoY3R4LSZndDtwcm9nKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfRkQocHJvZ19mZCwgJiMzNDtnZXQgcHJvZyBmZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsJcmV0ID0gYnBmX3Byb2dfZ2V0X2luZm9fYnlfZmQocHJvZ19mZCwgJmFtcDtpbmZvLCAmYW1wO2luZm9fbGVuKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0socmV0LCAmIzM0O2ZldGNoIGxvYWRlZCBwcm9ncmFtIGluZm8mIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CW1lbWNweShjdHgtJmd0O3Byb2dfdGFnLCBpbmZvLnRhZywgQlBGX1RBR19TSVpFKTsKJiM0MzsKJiM0MzsJc2tpcF9rZXJuZWxfbG9ncyhjdHgtJmd0O2tsb2dfZmQpOwomIzQzOwomIzQzOwl0b3B0cy5zeiA9IHNpemVvZihzdHJ1Y3QgYnBmX3Rlc3RfcnVuX29wdHMpOwomIzQzOwl0b3B0cy5kYXRhX3NpemVfaW4gPSBFVEhfSExFTjsKJiM0MzsJdG9wdHMuZGF0YV9pbiA9IGJ1ZjsKJiM0MzsJaWYgKGN0eC0mZ3Q7YWNjZXNzX3NpemUpCiYjNDM7CQkqY3R4LSZndDthY2Nlc3Nfc2l6ZSA9IGFjY2Vzc19zaXplOwomIzQzOwlyZXQgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChjdHgtJmd0O3Byb2cpLAomIzQzOwkJCQkgICAgICZhbXA7dG9wdHMpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhyZXQsICYjMzQ7cnVuIHByb2cmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXJldCA9IHJlYWRfa2VybmVsX2xvZ3MoY3R4LSZndDtrbG9nX2ZkLCBrbG9nX2J1ZmZlciwgTUFYX0xPR19TSVpFKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UocmV0LCAwLCAmIzM0O3JlYWQga2VybmVsIGxvZ3MmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXJldCA9IGNoZWNrX2thc2FuX3JlcG9ydF9pbl9rZXJuZWxfbG9ncyhrbG9nX2J1ZmZlciwgY3R4LAomIzQzOwkJCQkJCXRlc3QtJmd0O2lzX3dyaXRlLCBhY2Nlc3Nfc2l6ZSk7CiYjNDM7CWlmIChvbl9zdGFjayB8fCB0ZXN0LSZndDtleHBlY3Rfbm9fcmVwb3J0KQomIzQzOwkJQVNTRVJUX05FUShyZXQsIDAsICYjMzQ7bm8gcmVwb3J0IHNob3VsZCBiZSBnZW5lcmF0ZWQmIzM0Oyk7CiYjNDM7CWVsc2UKJiM0MzsJCUFTU0VSVF9PSyhyZXQsICYjMzQ7cmVwb3J0IHNob3VsZCBiZSBnZW5lcmF0ZWQmIzM0Oyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ1bl9zdWJ0ZXN0X3dpdGhfc2l6ZV9hbmRfbG9jYXRpb24oc3RydWN0IHRlc3RfY3R4ICpjdHgsCiYjNDM7CQkJCQkgICAgICAgc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCwKJiM0MzsJCQkJCSAgICAgICBpbnQgYWNjZXNzX3NpemUsCiYjNDM7CQkJCQkgICAgICAgYm9vbCBvbl9zdGFjaykKJiM0Mzt7CiYjNDM7CWNoYXIgc3VidGVzdF9uYW1lW1NVQlRFU1RfTkFNRV9NQVhfTEVOXTsKJiM0MzsKJiM0MzsJaWYgKHRlc3QtJmd0O3NraXBfbXVsdGlfc2l6ZV90ZXN0aW5nKSB7CiYjNDM7CQlzbnByaW50ZihzdWJ0ZXN0X25hbWUsIFNVQlRFU1RfTkFNRV9NQVhfTEVOLCAmIzM0OyVzJiMzNDssCiYjNDM7CQkJIHRlc3QtJmd0O3Byb2dfdHlwZSk7CiYjNDM7CQlzdHJuY3B5KGN0eC0mZ3Q7cHJvZ19uYW1lLCB0ZXN0LSZndDtwcm9nX3R5cGUsIFBST0dfTkFNRV9NQVhfTEVOKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXNucHJpbnRmKHN1YnRlc3RfbmFtZSwgU1VCVEVTVF9OQU1FX01BWF9MRU4sICYjMzQ7JXNfJWRfJXMmIzM0OywKJiM0MzsJCQkgdGVzdC0mZ3Q7cHJvZ190eXBlLCBhY2Nlc3Nfc2l6ZSwKJiM0MzsJCQkgb25fc3RhY2sgPyAmIzM0O29uX3N0YWNrJiMzNDsgOiAmIzM0O25vdF9vbl9zdGFjayYjMzQ7KTsKJiM0MzsJCXNucHJpbnRmKGN0eC0mZ3Q7cHJvZ19uYW1lLCBQUk9HX05BTUVfTUFYX0xFTiwgJiMzNDslc18lcyYjMzQ7LAomIzQzOwkJCSB0ZXN0LSZndDtwcm9nX3R5cGUsCiYjNDM7CQkJIG9uX3N0YWNrID8gJiMzNDtvbl9zdGFjayYjMzQ7IDogJiMzNDtub3Rfb25fc3RhY2smIzM0Oyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCF0ZXN0X19zdGFydF9zdWJ0ZXN0KHN1YnRlc3RfbmFtZSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmICh0ZXN0LSZndDtuZWVkc19sb2FkX2FjcV9zdG9yZV9yZWwgJmFtcDsmYW1wOyBjdHgtJmd0O3NraXBfbG9hZF9hY3Ffc3RvcmVfcmVsKSB7CiYjNDM7CQl0ZXN0X19za2lwKCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXhlY19zdWJ0ZXN0KGN0eCwgdGVzdCwgYWNjZXNzX3NpemUsIG9uX3N0YWNrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnVuX3N1YnRlc3Rfd2l0aF9zaXplKHN0cnVjdCB0ZXN0X2N0eCAqY3R4LCBzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LAomIzQzOwkJCQkgIGludCBzaXplKQomIzQzO3sKJiM0MzsJcnVuX3N1YnRlc3Rfd2l0aF9zaXplX2FuZF9sb2NhdGlvbihjdHgsIHRlc3QsIHNpemUsIGZhbHNlKTsKJiM0MzsJaWYgKCF0ZXN0LSZndDtza2lwX29uX3N0YWNrX3Rlc3RpbmcpCiYjNDM7CQlydW5fc3VidGVzdF93aXRoX3NpemVfYW5kX2xvY2F0aW9uKGN0eCwgdGVzdCwgc2l6ZSwgdHJ1ZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ1bl9zdWJ0ZXN0KHN0cnVjdCB0ZXN0X2N0eCAqY3R4LCBzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KQomIzQzO3sKJiM0MzsJaWYgKHRlc3QtJmd0O3NraXBfbXVsdGlfc2l6ZV90ZXN0aW5nKSB7CiYjNDM7CQlydW5fc3VidGVzdF93aXRoX3NpemUoY3R4LCB0ZXN0LCB0ZXN0LSZndDtydW5fc2l6ZSk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCF0ZXN0LSZndDtvbmx5XzMyX29yXzY0KSB7CiYjNDM7CQlydW5fc3VidGVzdF93aXRoX3NpemUoY3R4LCB0ZXN0LCAxKTsKJiM0MzsJCXJ1bl9zdWJ0ZXN0X3dpdGhfc2l6ZShjdHgsIHRlc3QsIDIpOwomIzQzOwl9CiYjNDM7CXJ1bl9zdWJ0ZXN0X3dpdGhfc2l6ZShjdHgsIHRlc3QsIDQpOwomIzQzOwlydW5fc3VidGVzdF93aXRoX3NpemUoY3R4LCB0ZXN0LCA4KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnVuX2JsaW5kaW5nX3N1YnRlc3Qodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0ZXN0X3NwZWMgYmxpbmRpbmdfc3BlYyA9IHsKJiM0MzsJCS5wcm9nX3R5cGUgPSAmIzM0O3N0X2JsaW5kZWQmIzM0OywKJiM0MzsJCS5pc193cml0ZSA9IHRydWUsCiYjNDM7CX07CiYjNDM7CWNoYXIgYnBmX2ppdF9oYXJkZW4gPSAmIzM5OzImIzM5OzsKJiM0MzsJc3RydWN0IGthc2FuX2hhcmRlbiAqc2tlbDsKJiM0MzsJc3RydWN0IHRlc3RfY3R4ICpjdHg7CiYjNDM7CiYjNDM7CWlmICghdGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O3N0X2JsaW5kZWQmIzM0OykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWN0eCA9IGNhbGxvYygxLCBzaXplb2YoKmN0eCkpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoY3R4LCAmIzM0O2FsbG9jIGJsaW5kaW5nIGN0eCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsJY3R4LSZndDtrbG9nX2ZkID0gLTE7CiYjNDM7CiYjNDM7CWlmIChzZXRfYnBmX2ppdF9oYXJkZW4oJmFtcDticGZfaml0X2hhcmRlbikpCiYjNDM7CQlnb3RvIGZyZWVfY3R4OwomIzQzOwomIzQzOwlza2VsID0ga2FzYW5faGFyZGVuX19vcGVuX2FuZF9sb2FkKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O29wZW4gYW5kIGxvYWQgYmxpbmRlZCBwcm9nJiMzNDspKQomIzQzOwkJZ290byByZXN0b3JlOwomIzQzOwomIzQzOwljdHgtJmd0O2tsb2dfZmQgPSBvcGVuX2tlcm5lbF9sb2dzKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX0ZEKGN0eC0mZ3Q7a2xvZ19mZCwgJiMzNDtvcGVuIGtlcm5lbCBsb2dzJiMzNDspKQomIzQzOwkJZ290byBkZXN0cm95OwomIzQzOwomIzQzOwljdHgtJmd0O29iaiA9IHNrZWwtJmd0O29iajsKJiM0MzsJc3RybmNweShjdHgtJmd0O3Byb2dfbmFtZSwgJiMzNDtzdF9ibGluZGVkJiMzNDssIFBST0dfTkFNRV9NQVhfTEVOKTsKJiM0MzsKJiM0MzsJZXhlY19zdWJ0ZXN0KGN0eCwgJmFtcDtibGluZGluZ19zcGVjLCAxLCBmYWxzZSk7CiYjNDM7CiYjNDM7ZGVzdHJveToKJiM0MzsJY2xvc2UoY3R4LSZndDtrbG9nX2ZkKTsKJiM0MzsJa2FzYW5faGFyZGVuX19kZXN0cm95KHNrZWwpOwomIzQzO3Jlc3RvcmU6CiYjNDM7CXNldF9icGZfaml0X2hhcmRlbigmYW1wO2JwZl9qaXRfaGFyZGVuKTsKJiM0MztmcmVlX2N0eDoKJiM0MzsJZnJlZShjdHgpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHRlc3Rfc3BlYyB0ZXN0c1tdID0gewomIzQzOwl7CiYjNDM7CQkucHJvZ190eXBlID0gJiMzNDtzdCYjMzQ7LAomIzQzOwkJLmlzX3dyaXRlID0gdHJ1ZQomIzQzOwl9LAomIzQzOwl7CiYjNDM7CQkucHJvZ190eXBlID0gJiMzNDtzdHgmIzM0OywKJiM0MzsJCS5pc193cml0ZSA9IHRydWUKJiM0MzsJfSwKJiM0MzsJewomIzQzOwkJLnByb2dfdHlwZSA9ICYjMzQ7bGR4JiMzNDssCiYjNDM7CQkuaXNfd3JpdGUgPSBmYWxzZQomIzQzOwl9LAomIzQzOwl7CiYjNDM7CQkucHJvZ190eXBlID0gJiMzNDtzaW1wbGVfYXRvbWljJiMzNDssCiYjNDM7CQkuaXNfd3JpdGUgPSB0cnVlLAomIzQzOwkJLm9ubHlfMzJfb3JfNjQgPSB0cnVlCiYjNDM7CX0sCiYjNDM7CXsKJiM0MzsJCS5wcm9nX3R5cGUgPSAmIzM0O2xvYWRfYWNxdWlyZSYjMzQ7LAomIzQzOwkJLmlzX3dyaXRlID0gZmFsc2UsCiYjNDM7CQkubmVlZHNfbG9hZF9hY3Ffc3RvcmVfcmVsID0gdHJ1ZQomIzQzOwl9LAomIzQzOwl7CiYjNDM7CQkucHJvZ190eXBlID0gJiMzNDtzdG9yZV9yZWxlYXNlJiMzNDssCiYjNDM7CQkuaXNfd3JpdGUgPSB0cnVlLAomIzQzOwkJLm5lZWRzX2xvYWRfYWNxX3N0b3JlX3JlbCA9IHRydWUKJiM0MzsJfSwKJiM0MzsJewomIzQzOwkJLnByb2dfdHlwZSA9ICYjMzQ7bGR4X3BhdGNoZWQmIzM0OywKJiM0MzsJCS5pc193cml0ZSA9IGZhbHNlLAomIzQzOwkJLnNraXBfbXVsdGlfc2l6ZV90ZXN0aW5nID0gdHJ1ZSwKJiM0MzsJCS5za2lwX29uX3N0YWNrX3Rlc3RpbmcgPSB0cnVlLAomIzQzOwkJLnJ1bl9zaXplID0gNCwKJiM0MzsJCS5ybmRfaGkzMiA9IHRydWUKJiM0MzsJfSwKJiM0MzsJewomIzQzOwkJLnByb2dfdHlwZSA9ICYjMzQ7bGR4X3BhdGNoZWRfb25fc3RhY2smIzM0OywKJiM0MzsJCS5pc193cml0ZSA9IGZhbHNlLAomIzQzOwkJLnNraXBfbXVsdGlfc2l6ZV90ZXN0aW5nID0gdHJ1ZSwKJiM0MzsJCS5za2lwX29uX3N0YWNrX3Rlc3RpbmcgPSB0cnVlLAomIzQzOwkJLnJ1bl9zaXplID0gNCwKJiM0MzsJCS5leHBlY3Rfbm9fcmVwb3J0ID0gdHJ1ZSwKJiM0MzsJCS5ybmRfaGkzMiA9IHRydWUKJiM0MzsJfSwKJiM0MzsJewomIzQzOwkJLnByb2dfdHlwZSA9ICYjMzQ7dmVyaWZpZXJfcGF0aHNfc3RhY2tfYW5kX25vbl9zdGFjayYjMzQ7LAomIzQzOwkJLmlzX3dyaXRlID0gdHJ1ZSwKJiM0MzsJCS5za2lwX211bHRpX3NpemVfdGVzdGluZyA9IHRydWUsCiYjNDM7CQkuc2tpcF9vbl9zdGFja190ZXN0aW5nID0gdHJ1ZSwKJiM0MzsJCS5ydW5fc2l6ZSA9IDEKJiM0MzsJfQomIzQzO307CiYjNDM7CiYjNDM7dm9pZCB0ZXN0X2thc2FuKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsIHZhbDsKJiM0MzsJc3RydWN0IHRlc3Rfc3BlYyAqdGVzdDsKJiM0MzsJc3RydWN0IHRlc3RfY3R4ICpjdHg7CiYjNDM7CXN0cnVjdCBrYXNhbiAqc2tlbDsKJiM0MzsJX191MzIga2V5ID0gMDsKJiM0MzsJaW50IGksIHJldDsKJiM0MzsKJiM0MzsJY3R4ID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgdGVzdF9jdHgpKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKGN0eCwgJiMzNDthbGxvYyB0ZXN0IGN0eCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKCFpc19qaXRfZW5hYmxlZCgpIHx8ICFnZXRfa2FzYW5faml0X2VuYWJsZWQoKSB8fAomIzQzOwkgICAgIWdldF9rYXNhbl9tdWx0aV9zaG90X2VuYWJsZWQoKSkgewomIzQzOwkJdGVzdF9fc2tpcCgpOwomIzQzOwkJZ290byBlbmQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2tlbCA9IGthc2FuX19vcGVuKCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O29wZW4gcHJvZyYjMzQ7KSkKJiM0MzsJCWdvdG8gZW5kOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRSh0ZXN0cyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2c7CiYjNDM7CiYjNDM7CQlpZiAoIXRlc3RzW2ldLnJuZF9oaTMyKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJcHJvZyA9IGJwZl9vYmplY3RfX2ZpbmRfcHJvZ3JhbV9ieV9uYW1lKHNrZWwtJmd0O29iaiwKJiM0MzsJCQkJCQkJdGVzdHNbaV0ucHJvZ190eXBlKTsKJiM0MzsJCWlmICghQVNTRVJUX09LX1BUUihwcm9nLCAmIzM0O2ZpbmQgcm5kX2hpMzIgcHJvZyYjMzQ7KSkKJiM0MzsJCQlnb3RvIGRlc3Ryb3k7CiYjNDM7CQlicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKHByb2csIEJQRl9GX1RFU1RfUk5EX0hJMzIpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghQVNTRVJUX09LKGthc2FuX19sb2FkKHNrZWwpLCAmIzM0O2xvYWQgcHJvZyYjMzQ7KSkKJiM0MzsJCWdvdG8gZGVzdHJveTsKJiM0MzsKJiM0MzsJY3R4LSZndDtvYmogPSBza2VsLSZndDtvYmo7CiYjNDM7CWN0eC0mZ3Q7YWNjZXNzX3NpemUgPSAmYW1wO3NrZWwtJmd0O2Jzcy0mZ3Q7YWNjZXNzX3NpemU7CiYjNDM7CWN0eC0mZ3Q7c2tpcF9sb2FkX2FjcV9zdG9yZV9yZWwgPSBza2VsLSZndDtkYXRhLSZndDtza2lwX2xvYWRfYWNxX3N0b3JlX3JlbF90ZXN0czsKJiM0MzsKJiM0MzsJY3R4LSZndDtrbG9nX2ZkID0gb3Blbl9rZXJuZWxfbG9ncygpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19GRChjdHgtJmd0O2tsb2dfZmQsICYjMzQ7b3BlbiBrZXJuZWwgbG9ncyYjMzQ7KSkKJiM0MzsJCWdvdG8gZGVzdHJveTsKJiM0MzsKJiM0MzsJLyogRmlsbCBtYXAgd2l0aCByZWNvZ25pemFibGUgdmFsdWVzICovCiYjNDM7CXJldCA9IGJwZl9tYXBfX2xvb2t1cF9lbGVtKHNrZWwtJmd0O21hcHMudGVzdF9tYXAsICZhbXA7a2V5LCBzaXplb2Yoa2V5KSwKJiM0MzsJCQkJICAgJmFtcDt2YWwsIHNpemVvZih2YWwpLCAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0socmV0LCAmIzM0O2dldCBtYXAmIzM0OykpCiYjNDM7CQlnb3RvIGNsb3NlOwomIzQzOwl2YWwuZGF0YV8xID0gMHhBQTsKJiM0MzsJdmFsLmRhdGFfMiA9IDB4QkJCQjsKJiM0MzsJdmFsLmRhdGFfNCA9IDB4Q0NDQ0NDQ0M7CiYjNDM7CXZhbC5kYXRhXzggPSAweEREREREREREREREREREREQ7CiYjNDM7CXJldCA9IGJwZl9tYXBfX3VwZGF0ZV9lbGVtKHNrZWwtJmd0O21hcHMudGVzdF9tYXAsICZhbXA7a2V5LCBzaXplb2Yoa2V5KSwKJiM0MzsJCQkJICAgJmFtcDt2YWwsIHNpemVvZih2YWwpLCAwKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0socmV0LCAmIzM0O3NldCBtYXAmIzM0OykpCiYjNDM7CQlnb3RvIGNsb3NlOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRSh0ZXN0cyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl0ZXN0ID0gJmFtcDt0ZXN0c1tpXTsKJiM0MzsJCXJ1bl9zdWJ0ZXN0KGN0eCwgdGVzdCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQmxpbmRpbmcgc3VidGVzdCBpcyBoYW5kbGVkIGRpZmZlcmVudGx5IGFzIGl0IG5lZWRzIHRoZQomIzQzOwkgKiBjb3JyZXNwb25kaW5nIHByb2dyYW0gdG8gYmUgbG9hZGVkIHdpdGggYnBmX2ppdF9oYXJkZW4gcmFpc2VkCiYjNDM7CSAqLwomIzQzOwlydW5fYmxpbmRpbmdfc3VidGVzdCgpOwomIzQzOwomIzQzO2Nsb3NlOgomIzQzOwljbG9zZShjdHgtJmd0O2tsb2dfZmQpOwomIzQzO2Rlc3Ryb3k6CiYjNDM7CWthc2FuX19kZXN0cm95KHNrZWwpOwomIzQzO2VuZDoKJiM0MzsJZnJlZShjdHgpOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rYXNhbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2thc2FuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjgyZGRjZTMwNTlhZWUxCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2thc2FuLmMKQEAgLTAsMCAmIzQzOzEsMzk0IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgQlNELTMtQ2xhdXNlCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JwZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl90cmFjaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfbWlzYy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkYm9vbC5oJmd0OwomIzQzOwomIzQzO2V4dGVybiB2b2lkIGJwZl9rZnVuY19rYXNhbl9wb2lzb24odm9pZCAqbWVtLCBfX3UzMiBtZW1fX3N6KSBfX2tzeW07CiYjNDM7ZXh0ZXJuIHZvaWQgYnBmX2tmdW5jX2thc2FuX3VucG9pc29uKHZvaWQgKm1lbSwgX191MzIgbWVtX19zeikgX19rc3ltOwomIzQzOwomIzQzO2ludCBhY2Nlc3Nfc2l6ZTsKJiM0MzsKJiM0MztzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsIHsKJiM0MzsJX191OCBkYXRhXzE7CiYjNDM7CV9fdTE2IGRhdGFfMjsKJiM0MzsJX191MzIgZGF0YV80OwomIzQzOwlfX3U2NCBkYXRhXzg7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTsKJiM0MzsJX191aW50KG1heF9lbnRyaWVzLCAxKTsKJiM0MzsJX190eXBlKGtleSwgX191MzIpOwomIzQzOwlfX3R5cGUodmFsdWUsIHN0cnVjdCBrYXNhbl93cml0ZV92YWwpOwomIzQzO30gdGVzdF9tYXAgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiYjNDM7U0VDKCYjMzQ7dGN4L2luZ3Jlc3MmIzM0OykKJiM0MztpbnQgc3Rfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJc3RydWN0IGthc2FuX3dyaXRlX3ZhbCB2YWw7CiYjNDM7CiYjNDM7CWJwZl9rZnVuY19rYXNhbl9wb2lzb24oJmFtcDt2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7CiYjNDM7CXN3aXRjaCAoYWNjZXNzX3NpemUpIHsKJiM0MzsJY2FzZSAxOgomIzQzOwkJdmFsLmRhdGFfMSA9IDB4QUE7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSAyOgomIzQzOwkJdmFsLmRhdGFfMiA9IDB4QUE7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSA0OgomIzQzOwkJdmFsLmRhdGFfNCA9IDB4QUE7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSA4OgomIzQzOwkJdmFsLmRhdGFfOCA9IDB4QUE7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwlicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24oJmFtcDt2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDt0Y3gvaW5ncmVzcyYjMzQ7KQomIzQzO2ludCBzdF9ub3Rfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJc3RydWN0IGthc2FuX3dyaXRlX3ZhbCAqdmFsOwomIzQzOwlfX3UzMiBrZXkgPSAwOwomIzQzOwomIzQzOwl2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7dGVzdF9tYXAsICZhbXA7a2V5KTsKJiM0MzsJaWYgKCF2YWwpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJYnBmX2tmdW5jX2thc2FuX3BvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7CiYjNDM7CXN3aXRjaCAoYWNjZXNzX3NpemUpIHsKJiM0MzsJY2FzZSAxOgomIzQzOwkJdmFsLSZndDtkYXRhXzEgPSAweEFBOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgMjoKJiM0MzsJCXZhbC0mZ3Q7ZGF0YV8yID0gMHhBQTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIDQ6CiYjNDM7CQl2YWwtJmd0O2RhdGFfNCA9IDB4QUE7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSA4OgomIzQzOwkJdmFsLSZndDtkYXRhXzggPSAweEFBOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJYnBmX2tmdW5jX2thc2FuX3VucG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3RjeC9pbmdyZXNzJiMzNDspCiYjNDM7aW50IHN0eF9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsIHZhbDsKJiM0MzsKJiM0MzsJYnBmX2tmdW5jX2thc2FuX3BvaXNvbigmYW1wO3ZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTsKJiM0MzsJc3dpdGNoIChhY2Nlc3Nfc2l6ZSkgewomIzQzOwljYXNlIDE6CiYjNDM7CQl2YWwuZGF0YV8xID0gYWNjZXNzX3NpemU7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSAyOgomIzQzOwkJdmFsLmRhdGFfMiA9IGFjY2Vzc19zaXplOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgNDoKJiM0MzsJCXZhbC5kYXRhXzQgPSBhY2Nlc3Nfc2l6ZTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIDg6CiYjNDM7CQl2YWwuZGF0YV84ID0gYWNjZXNzX3NpemU7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwlicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24oJmFtcDt2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDt0Y3gvaW5ncmVzcyYjMzQ7KQomIzQzO2ludCBzdHhfbm90X29uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrYXNhbl93cml0ZV92YWwgKnZhbDsKJiM0MzsJX191MzIga2V5ID0gMDsKJiM0MzsKJiM0MzsJdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3Rlc3RfbWFwLCAmYW1wO2tleSk7CiYjNDM7CWlmICghdmFsKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWJwZl9rZnVuY19rYXNhbl9wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpOwomIzQzOwlzd2l0Y2ggKGFjY2Vzc19zaXplKSB7CiYjNDM7CWNhc2UgMToKJiM0MzsJCXZhbC0mZ3Q7ZGF0YV8xID0gYWNjZXNzX3NpemU7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSAyOgomIzQzOwkJdmFsLSZndDtkYXRhXzIgPSBhY2Nlc3Nfc2l6ZTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIDQ6CiYjNDM7CQl2YWwtJmd0O2RhdGFfNCA9IGFjY2Vzc19zaXplOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgODoKJiM0MzsJCXZhbC0mZ3Q7ZGF0YV84ID0gYWNjZXNzX3NpemU7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwlicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7dGN4L2luZ3Jlc3MmIzM0OykKJiM0MztpbnQgbGR4X29uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrYXNhbl93cml0ZV92YWwgdmFsOwomIzQzOwomIzQzOwlicGZfa2Z1bmNfa2FzYW5fcG9pc29uKCZhbXA7dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpOwomIzQzOwlzd2l0Y2ggKGFjY2Vzc19zaXplKSB7CiYjNDM7CWNhc2UgMToKJiM0MzsJCV9fc2luayh2YWwuZGF0YV8xKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIDI6CiYjNDM7CQlfX3NpbmsodmFsLmRhdGFfMik7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSA0OgomIzQzOwkJX19zaW5rKHZhbC5kYXRhXzQpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgODoKJiM0MzsJCV9fc2luayh2YWwuZGF0YV84KTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CWJwZl9rZnVuY19rYXNhbl91bnBvaXNvbigmYW1wO3ZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3RjeC9pbmdyZXNzJiMzNDspCiYjNDM7aW50IGxkeF9ub3Rfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJc3RydWN0IGthc2FuX3dyaXRlX3ZhbCAqdmFsOwomIzQzOwlfX3UzMiBrZXkgPSAwOwomIzQzOwomIzQzOwl2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7dGVzdF9tYXAsICZhbXA7a2V5KTsKJiM0MzsJaWYgKCF2YWwpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJYnBmX2tmdW5jX2thc2FuX3BvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7CiYjNDM7CXN3aXRjaCAoYWNjZXNzX3NpemUpIHsKJiM0MzsJY2FzZSAxOgomIzQzOwkJX19zaW5rKHZhbC0mZ3Q7ZGF0YV8xKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIDI6CiYjNDM7CQlfX3NpbmsodmFsLSZndDtkYXRhXzIpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgNDoKJiM0MzsJCV9fc2luayh2YWwtJmd0O2RhdGFfNCk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSA4OgomIzQzOwkJX19zaW5rKHZhbC0mZ3Q7ZGF0YV84KTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CWJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDt0Y3gvaW5ncmVzcyYjMzQ7KQomIzQzO2ludCBsZHhfcGF0Y2hlZChzdHJ1Y3QgX19za19idWZmICpza2IpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsICp2YWw7CiYjNDM7CV9fdTMyIGtleSA9IDA7CiYjNDM7CiYjNDM7CXZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDt0ZXN0X21hcCwgJmFtcDtrZXkpOwomIzQzOwlpZiAoIXZhbCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTsKJiM0MzsJX19zaW5rKHZhbC0mZ3Q7ZGF0YV80KTsKJiM0MzsJYnBmX2tmdW5jX2thc2FuX3VucG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3RjeC9pbmdyZXNzJiMzNDspCiYjNDM7aW50IGxkeF9wYXRjaGVkX29uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrYXNhbl93cml0ZV92YWwgdmFsOwomIzQzOwomIzQzOwlicGZfa2Z1bmNfa2FzYW5fcG9pc29uKCZhbXA7dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpOwomIzQzOwlfX3NpbmsodmFsLmRhdGFfNCk7CiYjNDM7CWJwZl9rZnVuY19rYXNhbl91bnBvaXNvbigmYW1wO3ZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3RjeC9pbmdyZXNzJiMzNDspCiYjNDM7aW50IHNpbXBsZV9hdG9taWNfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJc3RydWN0IGthc2FuX3dyaXRlX3ZhbCB2YWw7CiYjNDM7CiYjNDM7CWJwZl9rZnVuY19rYXNhbl9wb2lzb24oJmFtcDt2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7CiYjNDM7CXN3aXRjaCAoYWNjZXNzX3NpemUpIHsKJiM0MzsJY2FzZSA0OgomIzQzOwkJX19zeW5jX2ZldGNoX2FuZF9hZGQoJmFtcDt2YWwuZGF0YV80LCA0KTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIDg6CiYjNDM7CQlfX3N5bmNfZmV0Y2hfYW5kX2FkZCgmYW1wO3ZhbC5kYXRhXzgsIDgpOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJYnBmX2tmdW5jX2thc2FuX3VucG9pc29uKCZhbXA7dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7dGN4L2luZ3Jlc3MmIzM0OykKJiM0MztpbnQgc2ltcGxlX2F0b21pY19ub3Rfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJc3RydWN0IGthc2FuX3dyaXRlX3ZhbCAqdmFsOwomIzQzOwlfX3UzMiBrZXkgPSAwOwomIzQzOwomIzQzOwl2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7dGVzdF9tYXAsICZhbXA7a2V5KTsKJiM0MzsJaWYgKCF2YWwpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJYnBmX2tmdW5jX2thc2FuX3BvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7CiYjNDM7CXN3aXRjaCAoYWNjZXNzX3NpemUpIHsKJiM0MzsJY2FzZSA0OgomIzQzOwkJX19zeW5jX2ZldGNoX2FuZF9hZGQoJmFtcDt2YWwtJmd0O2RhdGFfNCwgNCk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSA4OgomIzQzOwkJX19zeW5jX2ZldGNoX2FuZF9hZGQoJmFtcDt2YWwtJmd0O2RhdGFfOCwgOCk7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwlicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7I2lmZGVmIF9fQlBGX0ZFQVRVUkVfTE9BRF9BQ1FfU1RPUkVfUkVMCiYjNDM7Ym9vbCBza2lwX2xvYWRfYWNxX3N0b3JlX3JlbF90ZXN0cyBTRUMoJiMzNDsuZGF0YSYjMzQ7KSA9IDA7CiYjNDM7CiYjNDM7U0VDKCYjMzQ7dGN4L2luZ3Jlc3MmIzM0OykKJiM0MztpbnQgbG9hZF9hY3F1aXJlX29uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrYXNhbl93cml0ZV92YWwgdmFsOwomIzQzOwomIzQzOwlicGZfa2Z1bmNfa2FzYW5fcG9pc29uKCZhbXA7dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpOwomIzQzOwlzd2l0Y2ggKGFjY2Vzc19zaXplKSB7CiYjNDM7CWNhc2UgMToKJiM0MzsJCV9fYXRvbWljX2xvYWRfbigmYW1wO3ZhbC5kYXRhXzEsIF9fQVRPTUlDX0FDUVVJUkUpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgMjoKJiM0MzsJCV9fYXRvbWljX2xvYWRfbigmYW1wO3ZhbC5kYXRhXzIsIF9fQVRPTUlDX0FDUVVJUkUpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgNDoKJiM0MzsJCV9fYXRvbWljX2xvYWRfbigmYW1wO3ZhbC5kYXRhXzQsIF9fQVRPTUlDX0FDUVVJUkUpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgODoKJiM0MzsJCV9fYXRvbWljX2xvYWRfbigmYW1wO3ZhbC5kYXRhXzgsIF9fQVRPTUlDX0FDUVVJUkUpOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJYnBmX2tmdW5jX2thc2FuX3VucG9pc29uKCZhbXA7dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7dGN4L2luZ3Jlc3MmIzM0OykKJiM0MztpbnQgbG9hZF9hY3F1aXJlX25vdF9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsICp2YWw7CiYjNDM7CV9fdTMyIGtleSA9IDA7CiYjNDM7CiYjNDM7CXZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDt0ZXN0X21hcCwgJmFtcDtrZXkpOwomIzQzOwlpZiAoIXZhbCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTsKJiM0MzsJc3dpdGNoIChhY2Nlc3Nfc2l6ZSkgewomIzQzOwljYXNlIDE6CiYjNDM7CQlfX2F0b21pY19sb2FkX24oJmFtcDt2YWwtJmd0O2RhdGFfMSwgX19BVE9NSUNfQUNRVUlSRSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSAyOgomIzQzOwkJX19hdG9taWNfbG9hZF9uKCZhbXA7dmFsLSZndDtkYXRhXzIsIF9fQVRPTUlDX0FDUVVJUkUpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgNDoKJiM0MzsJCV9fYXRvbWljX2xvYWRfbigmYW1wO3ZhbC0mZ3Q7ZGF0YV80LCBfX0FUT01JQ19BQ1FVSVJFKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIDg6CiYjNDM7CQlfX2F0b21pY19sb2FkX24oJmFtcDt2YWwtJmd0O2RhdGFfOCwgX19BVE9NSUNfQUNRVUlSRSk7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwlicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7dGN4L2luZ3Jlc3MmIzM0OykKJiM0MztpbnQgc3RvcmVfcmVsZWFzZV9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsIHZhbDsKJiM0MzsKJiM0MzsJYnBmX2tmdW5jX2thc2FuX3BvaXNvbigmYW1wO3ZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTsKJiM0MzsJc3dpdGNoIChhY2Nlc3Nfc2l6ZSkgewomIzQzOwljYXNlIDE6CiYjNDM7CQlfX2F0b21pY19zdG9yZV9uKCZhbXA7dmFsLmRhdGFfMSwgMHhBQSwgX19BVE9NSUNfUkVMRUFTRSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSAyOgomIzQzOwkJX19hdG9taWNfc3RvcmVfbigmYW1wO3ZhbC5kYXRhXzIsIDB4QkJCQiwgX19BVE9NSUNfUkVMRUFTRSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSA0OgomIzQzOwkJX19hdG9taWNfc3RvcmVfbigmYW1wO3ZhbC5kYXRhXzQsIDB4Q0NDQ0NDQ0MsIF9fQVRPTUlDX1JFTEVBU0UpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgODoKJiM0MzsJCV9fYXRvbWljX3N0b3JlX24oJmFtcDt2YWwuZGF0YV84LCAweEREREREREREREREREREREQsCiYjNDM7CQkJCSBfX0FUT01JQ19SRUxFQVNFKTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CWJwZl9rZnVuY19rYXNhbl91bnBvaXNvbigmYW1wO3ZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3RjeC9pbmdyZXNzJiMzNDspCiYjNDM7aW50IHN0b3JlX3JlbGVhc2Vfbm90X29uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrYXNhbl93cml0ZV92YWwgKnZhbDsKJiM0MzsJX191MzIga2V5ID0gMDsKJiM0MzsKJiM0MzsJdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3Rlc3RfbWFwLCAmYW1wO2tleSk7CiYjNDM7CWlmICghdmFsKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWJwZl9rZnVuY19rYXNhbl9wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpOwomIzQzOwlzd2l0Y2ggKGFjY2Vzc19zaXplKSB7CiYjNDM7CWNhc2UgMToKJiM0MzsJCV9fYXRvbWljX3N0b3JlX24oJmFtcDt2YWwtJmd0O2RhdGFfMSwgMHhBQSwgX19BVE9NSUNfUkVMRUFTRSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSAyOgomIzQzOwkJX19hdG9taWNfc3RvcmVfbigmYW1wO3ZhbC0mZ3Q7ZGF0YV8yLCAweEJCQkIsIF9fQVRPTUlDX1JFTEVBU0UpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgNDoKJiM0MzsJCV9fYXRvbWljX3N0b3JlX24oJmFtcDt2YWwtJmd0O2RhdGFfNCwgMHhDQ0NDQ0NDQywgX19BVE9NSUNfUkVMRUFTRSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSA4OgomIzQzOwkJX19hdG9taWNfc3RvcmVfbigmYW1wO3ZhbC0mZ3Q7ZGF0YV84LCAweEREREREREREREREREREREQsCiYjNDM7CQkJCSBfX0FUT01JQ19SRUxFQVNFKTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CWJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsjZWxzZQomIzQzO2Jvb2wgc2tpcF9sb2FkX2FjcV9zdG9yZV9yZWxfdGVzdHMgU0VDKCYjMzQ7LmRhdGEmIzM0OykgPSAxOwomIzQzOyNlbmRpZgomIzQzOwomIzQzO1NFQygmIzM0O3RjeC9pbmdyZXNzJiMzNDspCiYjNDM7aW50IHZlcmlmaWVyX3BhdGhzX3N0YWNrX2FuZF9ub25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJc3RydWN0IGthc2FuX3dyaXRlX3ZhbCBzdGFja192YWwgPSB7fTsKJiM0MzsJc3RydWN0IGthc2FuX3dyaXRlX3ZhbCAqdmFsOwomIzQzOwl2b2lkICpwdHI7CiYjNDM7CV9fdTMyIGtleSA9IDA7CiYjNDM7CiYjNDM7CXZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDt0ZXN0X21hcCwgJmFtcDtrZXkpOwomIzQzOwlpZiAoIXZhbCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAoYWNjZXNzX3NpemUpCiYjNDM7CQlwdHIgPSB2YWw7CiYjNDM7CWVsc2UKJiM0MzsJCXB0ciA9ICZhbXA7c3RhY2tfdmFsOwomIzQzOwomIzQzOwlicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZhbCwgc2l6ZW9mKCp2YWwpKTsKJiM0MzsJKihfX3U4ICopcHRyID0gMHhBQTsKJiM0MzsJYnBmX2tmdW5jX2thc2FuX3VucG9pc29uKHZhbCwgc2l6ZW9mKCp2YWwpKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2NoYXIgTElDRU5TRVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2thc2FuX2hhcmRlbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2thc2FuX2hhcmRlbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi44MDhkN2RhNjQ0MjE2MgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rYXNhbl9oYXJkZW4uYwpAQCAtMCwwICYjNDM7MSw0MSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIEJTRC0zLUNsYXVzZQomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9icGYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfdHJhY2luZy5oJmd0OwomIzQzOwomIzQzO2V4dGVybiB2b2lkIGJwZl9rZnVuY19rYXNhbl9wb2lzb24odm9pZCAqbWVtLCBfX3UzMiBtZW1fX3N6KSBfX2tzeW07CiYjNDM7ZXh0ZXJuIHZvaWQgYnBmX2tmdW5jX2thc2FuX3VucG9pc29uKHZvaWQgKm1lbSwgX191MzIgbWVtX19zeikgX19rc3ltOwomIzQzOwomIzQzO3N0cnVjdCBrYXNhbl93cml0ZV92YWwgewomIzQzOwlfX3U4IGRhdGFfMTsKJiM0MzsJX191MTYgZGF0YV8yOwomIzQzOwlfX3UzMiBkYXRhXzQ7CiYjNDM7CV9fdTY0IGRhdGFfODsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCB7CiYjNDM7CV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDEpOwomIzQzOwlfX3R5cGUoa2V5LCBfX3UzMik7CiYjNDM7CV9fdHlwZSh2YWx1ZSwgc3RydWN0IGthc2FuX3dyaXRlX3ZhbCk7CiYjNDM7fSB0ZXN0X21hcCBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKJiM0MzsKJiM0MztTRUMoJiMzNDt0Y3gvaW5ncmVzcyYjMzQ7KQomIzQzO2ludCBzdF9ibGluZGVkKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrYXNhbl93cml0ZV92YWwgKnZhbDsKJiM0MzsJX191MzIga2V5ID0gMDsKJiM0MzsKJiM0MzsJdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3Rlc3RfbWFwLCAmYW1wO2tleSk7CiYjNDM7CWlmICghdmFsKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWJwZl9rZnVuY19rYXNhbl9wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpOwomIzQzOwl2YWwtJmd0O2RhdGFfMSA9IDB4QUE7CiYjNDM7CWJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztjaGFyIExJQ0VOU0VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jCmluZGV4IDMwZjFjZDIzMDkzY2JlLi41ZDZhODM0ZjdkNzU3NSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jCkBAIC0yNzEsNiAmIzQzOzI3MSwyNiBAQCBfX2JwZl9rZnVuYyB2b2lkIGJwZl9rZnVuY19wdXRfZGVmYXVsdF90cnVzdGVkX3B0cl90ZXN0KHN0cnVjdCBwcm9nX3Rlc3RfbWVtYmVyCiAJICovCiB9CiAKJiM0MzsjaWZkZWYgQ09ORklHX0JQRl9KSVRfS0FTQU4KJiM0MzsKJiM0MztleHRlcm4gdm9pZCBrYXNhbl9wb2lzb24oY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUsIHU4IHZhbHVlLCBib29sIGluaXQpOwomIzQzOwomIzQzOyNkZWZpbmUgS0FTQU5fU0xBQl9GUkVFIDB4RkIKJiM0MzsKJiM0MztfX2JwZl9rZnVuYyB2b2lkIGJwZl9rZnVuY19rYXNhbl9wb2lzb24odm9pZCAqbWVtLCB1MzIgbWVtX19zeikKJiM0Mzt7CiYjNDM7CWthc2FuX3BvaXNvbihtZW0sIG1lbV9fc3osIEtBU0FOX1NMQUJfRlJFRSwgZmFsc2UpOwomIzQzO30KJiM0MzsKJiM0MztfX2JwZl9rZnVuYyB2b2lkIGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2b2lkICptZW0sIHUzMiBtZW1fX3N6KQomIzQzO3sKJiM0MzsJa2FzYW5fcG9pc29uKG1lbSwgbWVtX19zeiwgMHgwMCwgZmFsc2UpOwomIzQzO30KJiM0MzsjZWxzZQomIzQzO19fYnBmX2tmdW5jIHZvaWQgYnBmX2tmdW5jX2thc2FuX3BvaXNvbih2b2lkICptZW0sIHUzMiBtZW1fX3N6KSB7IH0KJiM0MztfX2JwZl9rZnVuYyB2b2lkIGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2b2lkICptZW0sIHUzMiBtZW1fX3N6KSB7IH0KJiM0MzsjZW5kaWYKJiM0MzsKIF9fYnBmX2tmdW5jIHN0cnVjdCBicGZfdGVzdG1vZF9jdHggKgogYnBmX3Rlc3Rtb2RfY3R4X2NyZWF0ZShpbnQgKmVycikKIHsKQEAgLTc0MCw2ICYjNDM7NzYwLDggQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0XzEpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfMikKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfZ2V0X2RlZmF1bHRfdHJ1c3RlZF9wdHJfdGVzdCk7CiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX3B1dF9kZWZhdWx0X3RydXN0ZWRfcHRyX3Rlc3QpOwomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfa2FzYW5fcG9pc29uKQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24pCiBCVEZfS0ZVTkNTX0VORChicGZfdGVzdG1vZF9jb21tb25fa2Z1bmNfaWRzKQogCiBCVEZfSURfTElTVChicGZfdGVzdG1vZF9kdG9yX2lkcykKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuYwppbmRleCBjOTcwZTc3OTNkZmNiYy4uNzM3ZjY2OGIzNWUyM2IgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmMKQEAgLTUxOSw2ICYjNDM7NTE5LDM4IEBAIGJvb2wgaXNfaml0X2VuYWJsZWQodm9pZCkKIAlyZXR1cm4gZW5hYmxlZDsKIH0KIAomIzQzO2ludCBzZXRfYnBmX2ppdF9oYXJkZW4oY2hhciAqbGV2ZWwpCiYjNDM7ewomIzQzOwljaGFyIG9sZF9sZXZlbDsKJiM0MzsJaW50IGVyciA9IC0xOwomIzQzOwlpbnQgZmQgPSAtMTsKJiM0MzsKJiM0MzsJZmQgPSBvcGVuKCYjMzQ7L3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfaGFyZGVuJiMzNDssIE9fUkRXUiB8IE9fTk9OQkxPQ0spOwomIzQzOwlpZiAoZmQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwllcnIgPSByZWFkKGZkLCAmYW1wO29sZF9sZXZlbCwgMSk7CiYjNDM7CWlmIChlcnIgIT0gMSkgewomIzQzOwkJZXJyID0gLTE7CiYjNDM7CQlnb3RvIGVuZDsKJiM0MzsJfQomIzQzOwomIzQzOwlsc2VlayhmZCwgMCwgU0VFS19TRVQpOwomIzQzOwomIzQzOwllcnIgPSB3cml0ZShmZCwgbGV2ZWwsIDEpOwomIzQzOwlpZiAoZXJyICE9IDEpIHsKJiM0MzsJCWVyciA9IC0xOwomIzQzOwkJZ290byBlbmQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXJyID0gMDsKJiM0MzsJKmxldmVsID0gb2xkX2xldmVsOwomIzQzO2VuZDoKJiM0MzsJaWYgKGZkICZndDs9IDApCiYjNDM7CQljbG9zZShmZCk7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwogaW50IHN0YWNrX21wcm90ZWN0KHZvaWQpCiB7CiAJdm9pZCAqYnVmOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5oCmluZGV4IDJlZGM2ZmI3ZmM1MjEyLi5lMDA2NDJhZmU4NmY0MCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuaApAQCAtNTksNiAmIzQzOzU5LDcgQEAgc3RydWN0IGJwZl9pbnNuOwogaW50IGdldF94bGF0ZWRfcHJvZ3JhbShpbnQgZmRfcHJvZywgc3RydWN0IGJwZl9pbnNuICoqYnVmLCBfX3UzMiAqY250KTsKIGludCB0ZXN0aW5nX3Byb2dfZmxhZ3Modm9pZCk7CiBib29sIGlzX2ppdF9lbmFibGVkKHZvaWQpOwomIzQzO2ludCBzZXRfYnBmX2ppdF9oYXJkZW4oY2hhciAqbGV2ZWwpOwogaW50IHN0YWNrX21wcm90ZWN0KHZvaWQpOwogCiAjZW5kaWYgLyogX19URVNUSU5HX0hFTFBFUlNfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3VucHJpdl9oZWxwZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdW5wcml2X2hlbHBlcnMuYwppbmRleCBmOTk3ZDdlYzhmZDA4Ni4uOTViZTgzOTM3ODgzNzYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi91bnByaXZfaGVscGVycy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi91bnByaXZfaGVscGVycy5jCkBAIC0xNDIsMyAmIzQzOzE0MiwxMyBAQCBib29sIGdldF91bnByaXZfZGlzYWJsZWQodm9pZCkKIAl9CiAJcmV0dXJuIG1pdGlnYXRpb25zX29mZjsKIH0KJiM0MzsKJiM0Mztib29sIGdldF9rYXNhbl9qaXRfZW5hYmxlZCh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIGNvbmZpZ19jb250YWlucygmIzM0O0NPTkZJR19CUEZfSklUX0tBU0FOPXkmIzM0OykgPT0gMTsKJiM0Mzt9CiYjNDM7CiYjNDM7Ym9vbCBnZXRfa2FzYW5fbXVsdGlfc2hvdF9lbmFibGVkKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gY21kbGluZV9jb250YWlucygmIzM0O2thc2FuX211bHRpX3Nob3QmIzM0Oyk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3VucHJpdl9oZWxwZXJzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdW5wcml2X2hlbHBlcnMuaAppbmRleCAxNTFmNjczMjk2NjUyMi4uYTdjZWI1MTU3N2NkYzMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi91bnByaXZfaGVscGVycy5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi91bnByaXZfaGVscGVycy5oCkBAIC01LDMgJiM0Mzs1LDUgQEAKICNkZWZpbmUgVU5QUklWX1NZU0NUTCAmIzM0O2tlcm5lbC91bnByaXZpbGVnZWRfYnBmX2Rpc2FibGVkJiMzNDsKIAogYm9vbCBnZXRfdW5wcml2X2Rpc2FibGVkKHZvaWQpOwomIzQzO2Jvb2wgZ2V0X2thc2FuX2ppdF9lbmFibGVkKHZvaWQpOwomIzQzO2Jvb2wgZ2V0X2thc2FuX211bHRpX3Nob3RfZW5hYmxlZCh2b2lkKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDQ6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgxOTkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0MjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS0FTQU4gQlBGIEpJVCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBuZXcgcGF0Y2ggaGVyZSB0aGF0IGludHJvZHVjZXMgS0FTQU4gc3VwcG9ydCBmb3IgdGhlIEJQRiBKSVQgY29tcGlsZXIgb24geDg2LiBNeSBpbml0aWFsIGdsYW5jZSB0ZWxscyBtZSBpdCB0b3VjaGVzIGEgZmFpciBudW1iZXIgb2YgZmlsZXM6IGBhcmNoL3g4Ni9LY29uZmlnYCwgYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AsIHNvbWUgaW5jbHVkZSBmaWxlcyBsaWtlIGBicGZfdmVyaWZpZXIuaGAgYW5kIGBmaWx0ZXIuaGAsIGEgY291cGxlIG9mIEtjb25maWcgZmlsZXMgYW5kIGNvcmUgYnBmIGZpbGVzLCBhbmQgZXZlbiBzb21lIHRlc3RzLiBUaGF0JiMzOTtzIGEgcmVhc29uYWJsZSBzY29wZSBmb3IgdGhpcyBraW5kIG9mIGZlYXR1cmUuCgpUaGUgcmVhbCBtZWF0IG9mIHRoZSBjaGFuZ2VzIGFwcGVhcnMgdG8gYmUgaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AgYW5kIGBrZXJuZWwvYnBmL2ZpeHVwcy5jYCwgc28gSSYjMzk7bGwgcHJpb3JpdGl6ZSB0aG9zZS4gVGhlIHBhdGNoIGlzIGRlZmluaXRlbHkgZnVuY3Rpb25hbCwgdGhlIGNvZGUgaXMgd2VsbC1zdHJ1Y3R1cmVkLCBhbmQgaXQmIzM5O3Mgd29ydGggdGhlIGVmZm9ydCB0byBmdXp6IGl0IHRob3JvdWdobHkuCgpOb3csIGxldCYjMzk7cyBwaW5wb2ludCB0aGUgY3J1Y2lhbCBmdW5jdGlvbnMgdG8gc2NydXRpbml6ZS4gSW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AsIEkmIzM5O2xsIGJlIGZvY3VzaW5nIG9uOiBgZW1pdF9rYXNhbl9jaGVja2AgKG9idmlvdXNseSBjcml0aWNhbCEpLCBgZW1pdF9zdGAsIGBlbWl0X2F0b21pY19sZF9zdGAsIGFuZCBhbHRob3VnaCBgZG9faml0YCBpcyBhIGhvdCBwYXRoLCBJIG1pZ2h0IHdhbnQgdG8gYXZvaWQgZ2V0dGluZyB0b28gYm9nZ2VkIGRvd24gdGhlcmUgaW5pdGlhbGx5LiBUaGVuLCBpbiBga2VybmVsL2JwZi9maXh1cHMuY2AsIEkgd2FudCB0byBmb2N1cyBvbiBgYWRqdXN0X2luc25fYXV4X2RhdGFgLCBgYnBmX3BhdGNoX2luc25fZGF0YWAsIGFuZCBgYnBmX2RvX21pc2NfZml4dXBzYC4gSW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AgSSYjMzk7bGwgY2hlY2sgYGNoZWNrX21lbV9hY2Nlc3NgIGFuZCBgbWFya19ub25fc3RhY2tfYWNjZXNzYC4KClJlZ2FyZGluZyB0aGUgY29uZmlndXJhdGlvbnMsIHRoZSBjcml0aWNhbCBvbmUgaXMgYENPTkZJR19CUEZfSklUX0tBU0FOYCwgd2hpY2ggZGVwZW5kcyBvbiBgSEFWRV9FQlBGX0pJVF9LQVNBTmAsIGBLQVNBTl9HRU5FUklDYCwgYEtBU0FOX1ZNQUxMT0NgLCBhbmQgYEJQRl9KSVRgLiAgU28sIHRoZSBpbXBvcnRhbnQgdGhpbmcgaGVyZSBpcyB0byBtYWtlIHN1cmUgdGhhdCBgQlBGX0pJVF9LQVNBTmAgaXMgZW5hYmxlZC4KCkkmIzM5O20gcmVhZHkgdG8gdXNlIHRoZSB0b29scyB0byBzeXN0ZW1hdGljYWxseSB2ZXJpZnkgdGhlc2UgZnVuY3Rpb25zLiBJJiMzOTtsbCBmb2N1cyBvbiBtZW1vcnkgc2FmZXR5IHdpdGhpbiB0aGUgSklUJiMzOTtkIGNvZGUsIGVzcGVjaWFsbHkgaW4gdGhvc2UgYXRvbWljIG9wZXJhdGlvbnMgYW5kIG1lbW9yeSBhY2Nlc3MgZnVuY3Rpb25zLiBUaGlzIGxvb2tzIHByb21pc2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNDozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlbWl0X2thc2FuX2NoZWNrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xMTEzPXN0YXRpYyB2b2lkIG1heWJlX2VtaXRfMW1vZCh1OCAqKnBwcm9nLCB1MzIgcmVnLCBib29sIGlzNjQpXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTExMjMtXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTEyNDpzdGF0aWMgaW50IGVtaXRfa2FzYW5fY2hlY2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTggKipwcHJvZyxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMTI1LVx0XHRcdCAgICB1MzIgYWRkcl9yZWcsIHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgdTggKmlwLFxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xNTc5PXN0YXRpYyBpbnQgZW1pdF9hdG9taWNfbGRfc3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTggKipwcHJvZyxcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTU4Ny1cdGNhc2UgQlBGX0xPQURfQUNROlxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE1ODg6XHRcdGVyciA9IGVtaXRfa2FzYW5fY2hlY2soZW52LCBwcHJvZywgc3JjX3JlZywgaW5zbiwgaXAsIGZhbHNlLFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE1ODktXHRcdFx0XHQgICAgICAgYWNjZXNzZXNfc3RhY2tfb25seSk7XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE1OTYtXHRjYXNlIEJQRl9TVE9SRV9SRUw6XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTU5NzpcdFx0ZXJyID0gZW1pdF9rYXNhbl9jaGVjayhlbnYsIHBwcm9nLCBkc3RfcmVnLCBpbnNuLCBpcCwgdHJ1ZSxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNTk4LVx0XHRcdFx0ICAgICAgIGFjY2Vzc2VzX3N0YWNrX29ubHkpO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xODQ4PXN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqYWRkcnMsIHU4ICppbWFnZSxcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjM4Ni1cdFx0Y2FzZSBCUEZfU1QgfCBCUEZfTUVNIHwgQlBGX0RXOlxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjIzODc6XHRcdFx0ZXJyID0gZW1pdF9rYXNhbl9jaGVjayhlbnYsIFx1MDAyNnByb2csIGRzdF9yZWcsIGluc24sIGlwLFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTIzODgtXHRcdFx0XHRcdCAgICAgICB0cnVlLCBhY2Nlc3Nlc19zdGFja19vbmx5KTtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjQxMC1cdFx0XHR9XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjQxMTpcdFx0XHRlcnIgPSBlbWl0X2thc2FuX2NoZWNrKGVudiwgXHUwMDI2cHJvZywgZHN0X3JlZywgaW5zbiwgaXAsXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjQxMi1cdFx0XHRcdFx0ICAgICAgIHRydWUsIGFjY2Vzc2VzX3N0YWNrX29ubHkpO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yNTc2LVx0XHRcdH0gZWxzZSB7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjU3NzpcdFx0XHRcdGVyciA9IGVtaXRfa2FzYW5fY2hlY2soZW52LCBcdTAwMjZwcm9nLCBzcmNfcmVnLFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI1NzgtXHRcdFx0XHRcdFx0ICAgICAgIGluc24sIGlwLCBmYWxzZSxcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjY2Ny1cdFx0XHRpZiAoIWJwZl9hdG9taWNfaXNfbG9hZF9zdG9yZShpbnNuKSkge1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjI2Njg6XHRcdFx0XHRlcnIgPSBlbWl0X2thc2FuX2NoZWNrKGVudiwgXHUwMDI2cHJvZywgcmVhbF9kc3RfcmVnLFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI2NjktXHRcdFx0XHRcdFx0ICAgICAgIGluc24sIGlwLCB0cnVlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA0OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMTMyCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBjb2RlIGxvY2F0aW9ucywgdGhpbmtpbmcgYXMgSSB3b3VsZDoKCioqSWRlbnRpZnlpbmcgUHJvbWlzaW5nIENhbmRpZGF0ZXMgZm9yIEZvY3VzU3ltYm9scyoqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlLi4uIGxvb2tpbmcgYXQgcG90ZW50aWFsIGNhbmRpZGF0ZXMgZm9yIG9wdGltaXphdGlvbiB3aXRoIGBGb2N1c1N5bWJvbHNgLCB0aGUgZnVuY3Rpb24gYGVtaXRfa2FzYW5fY2hlY2tgIGRlZmluaXRlbHkgbGVhcHMgb3V0LiBTZWVtcyBsaWtlIGl0JiMzOTtzIGxpa2VseSBhIGhvdCBzcG90LCBhbmQgaXRzIGJlaGF2aW9yIGNvdWxkIGJlbmVmaXQgZnJvbSB0aGUga2luZCBvZiBwcmVjaXNlIGNvbnRyb2wgYEZvY3VzU3ltYm9sc2Agb2ZmZXJzLiBXb3J0aCBpbnZlc3RpZ2F0aW5nIHRoZSBzcGVjaWZpY3Mgb2YgaXRzIHVzYWdlIHdpdGhpbiB0aGUgbGFyZ2VyIGNvbnRleHQsIG9mIGNvdXJzZSwgYnV0IGl0JiMzOTtzIGEgc3Ryb25nIGZpcnN0IGNvbnRlbmRlci4KCkFuZCB0aGVuIHRoZXJlJiMzOTtzIGBhZGp1c3RfaW5zbl9hdXhfZGF0YWAgaW4gYGtlcm5lbC9icGYvZml4dXBzLmNgLiBUaGF0IGZpbGUgbmFtZSBzdWdnZXN0cyBpdCYjMzk7cyByZWxhdGVkIHRvIHNvbWUgc29ydCBvZiBsb3ctbGV2ZWwgaW5zdHJ1Y3Rpb24gbWFuaXB1bGF0aW9uIG9yIGRhdGEgYWRqdXN0bWVudCwgd2hpY2ggYWxzbyBzb3VuZHMgcHJvbWlzaW5nLiBJ4oCZZCB3YW50IHRvIGRpdmUgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgZnJlcXVlbmN5IG9mIGV4ZWN1dGlvbiBhbmQgcG90ZW50aWFsIGltcGFjdCBvZiBvcHRpbWl6aW5nIHRoaXMgZnVuY3Rpb24gYXMgYSBGb2N1c1N5bWJvbC4gSXQgcHJvYmFibHkgbWVyaXRzIGEgY2xvc2VyIGxvb2ssIGdpdmVuIHRoYXQgZmlsZS4gSXQgaXMgdGhlIHR5cGUgb2YgZnVuY3Rpb24gd2hlcmUgb3B0aW1pemF0aW9uIGNvdWxkIHlpZWxkIHN1YnN0YW50aWFsIHJld2FyZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDQ6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWRqdXN0X2luc25fYXV4X2RhdGEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9maXh1cHMuYz0xNTU9c3RhdGljIGJvb2wgaXNfbWVtX2luc24oc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMTcwLSAqL1xua2VybmVsL2JwZi9maXh1cHMuYzoxNzE6c3RhdGljIHZvaWQgYWRqdXN0X2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvZml4dXBzLmMtMTcyLVx0XHRcdFx0IHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2csIHUzMiBvZmYsIHUzMiBjbnQsXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz0yNzg9c3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0zMDMtXHR9XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjMwNDpcdGFkanVzdF9pbnNuX2F1eF9kYXRhKGVudiwgbmV3X3Byb2csIG9mZiwgbGVuLCBpbnNuX29mZl9pbl9wYXRjaCk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTMwNS1cdGFkanVzdF9zdWJwcm9nX3N0YXJ0cyhlbnYsIG9mZiwgbGVuKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNDozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDY4OQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIHN1bW1hcml6ZWQsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSBwcmV0dHkgZmFtaWxpYXIgd2l0aCBlQlBGOgoKKipJbnNwZWN0aW5nIGBicGZfcGF0Y2hfaW5zbl9kYXRhYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGZvY3VzLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBicGZfcGF0Y2hfaW5zbl9kYXRhYCBmdW5jdGlvbi4gSSBhbHJlYWR5IGhhdmUgYSBtZW50YWwgbW9kZWwgb2YgaG93IHRoaXMgbGlrZWx5IG9wZXJhdGVzLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBteSB1bmRlcnN0YW5kaW5nIGlzIGFjY3VyYXRlLCBhbmQgaWRlbnRpZnkgZXhhY3RseSB3aGF0JiMzOTtzIGdvaW5nIG9uIHVuZGVyIHRoZSBob29kLiBJIHN1c3BlY3QgaXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIG1vZGlmeWluZyB0aGUgZGF0YSBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyBlQlBGIGluc3RydWN0aW9uIOKAkyBtYXliZSBwYXRjaGluZyBpbiBuZXcgdmFsdWVzLCBvciB1cGRhdGluZyBzb21lIG1ldGFkYXRhLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaGFuZGxlcyBlcnJvciBjb25kaXRpb25zIGFuZCBtZW1vcnkgbWFuYWdlbWVudC4gQW55IHN1YnRsZSBtaXN0YWtlcyBoZXJlIGNvdWxkIGludHJvZHVjZSBzZXJpb3VzIHZ1bG5lcmFiaWxpdGllcywgc28gSSYjMzk7bSBnb2luZyB0byBiZSB2ZXJ5IHRob3JvdWdoLiBMZXQmIzM5O3Mgc2VlIGhvdyBpdCBoYW5kbGVzIHRoaW5ncyBsaWtlIGFsaWdubWVudCwgYm91bmRzIGNoZWNraW5nLCBhbmQgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIEkgbmVlZCB0byB0cmFjZSB0aGUgZGF0YSBmbG93IGFuZCB1bmRlcnN0YW5kIGFueSBzaWRlIGVmZmVjdHMuIEkmIzM5O20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgYW55IGFyZWFzIHRoYXQgY291bGQgbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIGR1cmluZyBydW50aW1lLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNDozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfcGF0Y2hfaW5zbl9kYXRhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZmlsdGVyLmg9MTIwOD1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX3NpbmdsZShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBvZmYsXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0xMjExLSNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6MTIxMjpzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZixcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTIxMy1cdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgdTMyIGxlbixcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTEyMTY9dm9pZCBicGZfcmVzdG9yZV9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0xMjE4LSNlbHNlXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjEyMTk6c3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTIyMC1cdFx0XHRcdFx0XHQgICB1MzIgb2ZmLFxuLS1cbmtlcm5lbC9icGYvY29yZS5jPTE1NTU9c3RydWN0IGJwZl9wcm9nICpicGZfaml0X2JsaW5kX2NvbnN0YW50cyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMTU2OS1cbmtlcm5lbC9icGYvY29yZS5jOjE1NzA6XHQvKiBtYWtlIHN1cmUgYnBmX3BhdGNoX2luc25fZGF0YSgpIHBhdGNoZXMgdGhlIGNvcnJlY3QgcHJvZyAqL1xua2VybmVsL2JwZi9jb3JlLmMtMTU3MS1cdGlmIChlbnYpXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMTYwMS1cdFx0aWYgKGVudilcbmtlcm5lbC9icGYvY29yZS5jOjE2MDI6XHRcdFx0dG1wID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGksIGluc25fYnVmZiwgcmV3cml0dGVuLCByZXdyaXR0ZW4gLSAxKTtcbmtlcm5lbC9icGYvY29yZS5jLTE2MDMtXHRcdGVsc2Vcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTI2ND1zdGF0aWMgdm9pZCBhZGp1c3RfcG9rZV9kZXNjcyhzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBvZmYsIHUzMiBsZW4pXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yNzctXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjI3ODpzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZixcbmtlcm5lbC9icGYvZml4dXBzLmMtMjc5LVx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCB1MzIgbGVuLFxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmM9NjE0PWludCBicGZfb3B0X3N1YnJlZ196ZXh0X2xvMzJfcm5kX2hpMzIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTcwMi1hcHBseV9wYXRjaF9idWZmZXI6XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjcwMzpcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgYWRqX2lkeCwgcGF0Y2gsIHBhdGNoX2xlbiwgMCk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTcwNC1cdFx0aWYgKCFuZXdfcHJvZylcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTcyMD1pbnQgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy03NDctXHRcdFx0aW5zbl9idWZbY250JiM0MzsmIzQzO10gPSBlbnYtXHUwMDNlcHJvZy1cdTAwM2VpbnNuc2lbMF07XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjc0ODpcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCAwLCBpbnNuX2J1ZiwgY250LCAxKTtcbmtlcm5lbC9icGYvZml4dXBzLmMtNzQ5LVx0XHRcdGlmICghbmV3X3Byb2cpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy03NzAtXHRcdH0gZWxzZSBpZiAoY250KSB7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjc3MTpcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCAwLCBpbnNuX2J1ZiwgY250LFxua2VybmVsL2JwZi9maXh1cHMuYy03NzItXHRcdFx0XHRcdFx0ICAgICAgIGNudCAtIDEpO1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtODAzLVx0XHRcdGNudCA9IHBhdGNoIC0gaW5zbl9idWY7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjgwNDpcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1Zixcbmtlcm5lbC9icGYvZml4dXBzLmMtODA1LVx0XHRcdFx0XHRcdCAgICAgICBjbnQsIGNudCAtIDEpO1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtODc3LVx0XHRcdGNudCA9IHBhdGNoIC0gaW5zbl9idWY7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjg3ODpcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1Zixcbmtlcm5lbC9icGYvZml4dXBzLmMtODc5LVx0XHRcdFx0XHRcdCAgICAgICBjbnQsIDApO1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMTAwOS1cdFx0bmV3X3Byb2cgPVxua2VybmVsL2JwZi9maXh1cHMuYzoxMDEwOlx0XHRcdGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1ZiwgY250LCAtMSk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEwMTEtXHRcdGlmICghbmV3X3Byb2cpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz0xNDg3PXN0YXRpYyBpbnQgYWRkX2hpZGRlbl9zdWJwcm9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIGludCBsZW4pXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0xNDk5LVx0ICogb25lcyBmb3IgdGhlIGhpZGRlbiBzdWJwcm9nLiBIZW5jZSBhbGwgb2YgdGhlIGFkanVzdG1lbnQgb3BlcmF0aW9uc1xua2VybmVsL2JwZi9maXh1cHMuYzoxNTAwOlx0ICogaW4gYnBmX3BhdGNoX2luc25fZGF0YSBhcmUgbm8tb3BzLlxua2VybmVsL2JwZi9maXh1cHMuYy0xNTAxLVx0ICovXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE1MDI6XHRwcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGVudi1cdTAwM2Vwcm9nLVx1MDAzZWxlbiAtIDEsIHBhdGNoLCBsZW4sIDApO1xua2VybmVsL2JwZi9maXh1cHMuYy0xNTAzLVx0aWYgKCFwcm9nKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmM9MTUxNj1pbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0xNTg2LVxua2VybmVsL2JwZi9maXh1cHMuYzoxNTg3Olx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxua2VybmVsL2JwZi9maXh1cHMuYy0xNTg4LVx0XHRcdFx0XHRcdCAgICAgICBjbnQsIDApO1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMTY4My1cbmtlcm5lbC9icGYvZml4dXBzLmM6MTY4NDpcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1Zixcbmtlcm5lbC9icGYvZml4dXBzLmMtMTY4NS1cdFx0XHRcdFx0XHQgICAgICAgY250LCBpbnNuX29mZl9pbl9wYXRjaCk7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0xNzE2LVx0XHRcdGNudCA9IHBhdGNoIC0gaW5zbl9idWY7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE3MTc6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE3MTgtXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgaW5zbl9vZmZfaW5fcGF0Y2gpO1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMTczNy1cbmtlcm5lbC9icGYvZml4dXBzLmM6MTczODpcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1Zixcbmtlcm5lbC9icGYvZml4dXBzLmMtMTczOS1cdFx0XHRcdFx0XHQgICAgICAgY250LCAwKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE3OTEtXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE3OTI6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE3OTMtXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgY250IC0gMSk7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0xODM3LVxua2VybmVsL2JwZi9maXh1cHMuYzoxODM4Olx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxua2VybmVsL2JwZi9maXh1cHMuYy0xODM5LVx0XHRcdFx0XHRcdCAgICAgICBjbnQsIDMpO1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMTg1OS1cbmtlcm5lbC9icGYvZml4dXBzLmM6MTg2MDpcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1Zixcbmtlcm5lbC9icGYvZml4dXBzLmMtMTg2MS1cdFx0XHRcdFx0XHQgICAgICAgY250LCAyKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE4ODEtXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE4ODI6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE4ODMtXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgY250IC0gMSk7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0xOTY5LVx0XHRcdGNudCA9IDM7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE5NzA6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE5NzEtXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgY250IC0gMSk7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yMDAzLVxua2VybmVsL2JwZi9maXh1cHMuYzoyMDA0Olx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxua2VybmVsL2JwZi9maXh1cHMuYy0yMDA1LVx0XHRcdFx0XHRcdCAgICAgICBjbnQsIGNudCAtIDEpO1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjAyMy1cbmtlcm5lbC9icGYvZml4dXBzLmM6MjAyNDpcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1Zixcbmtlcm5lbC9icGYvZml4dXBzLmMtMjAyNS1cdFx0XHRcdFx0XHQgICAgICAgY250LCBjbnQgLSAxKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwNjQtXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIwNjU6XHRcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwNjYtXHRcdFx0XHRcdGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsIGNudCwgLTEpO1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjE0Ny1cbmtlcm5lbC9icGYvZml4dXBzLmM6MjE0ODpcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1Zixcbmtlcm5lbC9icGYvZml4dXBzLmMtMjE0OS1cdFx0XHRcdFx0XHQgICAgICAgY250LCAtMSk7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yMTc2LSNlbmRpZlxua2VybmVsL2JwZi9maXh1cHMuYzoyMTc3Olx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxua2VybmVsL2JwZi9maXh1cHMuYy0yMTc4LVx0XHRcdFx0XHRcdCAgICAgICBjbnQsIC0xKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIxOTUtXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIxOTY6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIxOTctXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgLTEpO1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjIzMC1cbmtlcm5lbC9icGYvZml4dXBzLmM6MjIzMTpcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1Zixcbmtlcm5lbC9icGYvZml4dXBzLmMtMjIzMi1cdFx0XHRcdFx0XHQgICAgICAgY250LCAtMSk7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yMjYzLVxua2VybmVsL2JwZi9maXh1cHMuYzoyMjY0Olx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxua2VybmVsL2JwZi9maXh1cHMuYy0yMjY1LVx0XHRcdFx0XHRcdCAgICAgICBjbnQsIC0xKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIyOTAtXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIyOTE6XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSAmIzQzOyBkZWx0YSwgaW5zbl9idWYsXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIyOTItXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgLTEpO1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjMwNy1cbmtlcm5lbC9icGYvZml4dXBzLmM6MjMwODpcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1Zixcbmtlcm5lbC9icGYvZml4dXBzLmMtMjMwOS1cdFx0XHRcdFx0XHQgICAgICAgMSwgLTEpO1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjM2My1cbmtlcm5lbC9icGYvZml4dXBzLmM6MjM2NDpcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICYjNDM7IGRlbHRhLCBpbnNuX2J1Zixcbmtlcm5lbC9icGYvZml4dXBzLmMtMjM2NS1cdFx0XHRcdFx0XHQgICAgICAgY250LCAtMSk7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yMzgyLVxua2VybmVsL2JwZi9maXh1cHMuYzoyMzgzOlx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgJiM0MzsgZGVsdGEsIGluc25fYnVmLFxua2VybmVsL2JwZi9maXh1cHMuYy0yMzg0LVx0XHRcdFx0XHRcdCAgICAgICBjbnQsIC0xKTtcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI0NTEtXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjI0NTI6XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIHN1YnByb2dfc3RhcnQsIGluc25fYnVmLCBjbnQsIGNudCAtIDEpO1xua2VybmVsL2JwZi9maXh1cHMuYy0yNDUzLVx0XHRpZiAoIW5ld19wcm9nKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjQ1OS1cdFx0ICogdG8gaW5zbiBhZnRlciBCUEZfU1QgdGhhdCBpbml0cyBtYXlfZ290byBjb3VudC5cbmtlcm5lbC9icGYvZml4dXBzLmM6MjQ2MDpcdFx0ICogQWRqdXN0bWVudCB3aWxsIHN1Y2NlZWQgYmVjYXVzZSBicGZfcGF0Y2hfaW5zbl9kYXRhKCkgZGlkbiYjMzk7dCBmYWlsLlxua2VybmVsL2JwZi9maXh1cHMuYy0yNDYxLVx0XHQgKi9cbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTI0ODk9c3RhdGljIHN0cnVjdCBicGZfcHJvZyAqaW5saW5lX2JwZl9sb29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yNTUwLVx0KnRvdGFsX2NudCA9IGNudDtcbmtlcm5lbC9icGYvZml4dXBzLmM6MjU1MTpcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIHBvc2l0aW9uLCBpbnNuX2J1ZiwgY250LCAtMSk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI1NTItXHRpZiAoIW5ld19wcm9nKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA0OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NTU3CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBgYnBmX3BhdGNoX2luc25fZGF0YWAgQ2hhbmdlKioKCkFscmlnaHQsIHNvIHRoZSBgYnBmX3BhdGNoX2luc25fZGF0YWAgZnVuY3Rpb24gaGFzIGJlZW4gdXBkYXRlZCwgbm93IGFjY2VwdGluZyBgaW5zbl9vZmZfaW5fcGF0Y2hgLiBUaGF0JiMzOTtzIGEga2V5IGZ1bmN0aW9uLCBmdW5kYW1lbnRhbCB0byB0aGUgdmVyaWZpZXIgYW5kIGZpeHVwIG1lY2hhbmlzbXMgd2l0aGluIEJQRi4gS25vd2luZyB0aGUgb2Zmc2V0IG9mIHRoZSBpbnN0cnVjdGlvbiB3aXRoaW4gdGhlIHBhdGNoIGl0c2VsZiBpcyBnb2luZyB0byBiZSBjcnVjaWFsLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGNoYW5nZSB3aXRoaW4gdGhlIGJyb2FkZXIgQlBGIGVjb3N5c3RlbS4KCkxldCYjMzk7cyBkaWcgaW50byB0aGUgY29yZS4gSSBuZWVkIHRvIGdldCBpbnRvIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBoZWFydCBvZiB0aGUgdmVyaWZpZXIgbG9naWMgbGllcy4gVGhpcyBjaGFuZ2UsIGFkZGluZyB0aGUgb2Zmc2V0LCBzdWdnZXN0cyB0aGVyZSYjMzk7cyBzb21lIHJlZmluZW1lbnQgaGFwcGVuaW5nIGluIGhvdyB3ZSBoYW5kbGUgQlBGIGNvZGUgbW9kaWZpY2F0aW9ucyBvciBwYXRjaGVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgd2UgbmVlZCB0aGlzIG9mZnNldCBub3cuIElzIGl0IGZvciBtb3JlIHByZWNpc2UgZXJyb3IgcmVwb3J0aW5nPyBJbXByb3ZlZCBwYXRjaGluZyBjYXBhYmlsaXRpZXM/IE9yIHBlcmhhcHMgc29tZXRoaW5nIG1vcmUgc3VidGxlIHJlbGF0ZWQgdG8gaW5zdHJ1Y3Rpb24gcmV3cml0aW5nIG9yIHZlcmlmaWNhdGlvbiB3aXRoaW4gYSBtb2RpZmllZCBjb2RlIGJsb2NrPyBUaW1lIHRvIGNyYWNrIG9wZW4gdGhhdCBmaWxlIGFuZCBzZWUgd2hhdCYjMzk7cyBjaGFuZ2VkLiBUaGlzIGNvdWxkIGJlIGEgc2lnbmlmaWNhbnQgb3B0aW1pemF0aW9uIG9yIGEgY3J1Y2lhbCBzdGVwIHRvd2FyZHMgbW9yZSBhZHZhbmNlZCBCUEYgY2FwYWJpbGl0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNDozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYXJrX25vbl9zdGFja19hY2Nlc3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTMyMDU9c3RhdGljIHZvaWQgbWFya19pbmRpcmVjdF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkeClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMzIwOS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzozMjEwOnN0YXRpYyB2b2lkIG1hcmtfbm9uX3N0YWNrX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWR4KVxua2VybmVsL2JwZi92ZXJpZmllci5jLTMyMTEte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02MTUxPXN0YXRpYyBpbnQgY2hlY2tfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsIGFyZ25vX3QgYXJnbm8sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY0MDktXHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgcmVnLVx1MDAzZXR5cGUgIT0gUFRSX1RPX1NUQUNLKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjY0MTA6XHRcdG1hcmtfbm9uX3N0YWNrX2FjY2VzcyhlbnYsIGluc25faWR4KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDExLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNDozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTE0MgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDI2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDdXJyZW50IEFzc2Vzc21lbnQgb2YgdGhlIEtBU0FOIEJQRiBKSVQgSW50ZWdyYXRpb24qKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzIGNvZGUsIGBjaGVja19tZW1fYWNjZXNzYCBpcyBhIGJlYXN0OyBJIHRoaW5rIHdlIHNob3VsZCBwcm9iYWJseSBzaWRlc3RlcCB0aGF0IGZvciBub3cuIFRoZSBzbWFsbGVyIGhlbHBlciwgYG1hcmtfbm9uX3N0YWNrX2FjY2Vzc2AsIHNlZW1zIGxpa2UgYSBtb3JlIG1hbmFnZWFibGUgZW50cnkgcG9pbnQuIExldCYjMzk7cyBzZWUuLi4gbG9va2luZyBhdCBwb3RlbnRpYWwgZm9jdXMgc3ltYm9scywgYGFkanVzdF9pbnNuX2F1eF9kYXRhYCBjb3VsZCBiZSBhIGdvb2QgY2FuZGlkYXRlLCBhcyB3ZWxsIGFzIGBlbWl0X2thc2FuX2NoZWNrYCwgYGVtaXRfc3RgLCBhbmQgYGVtaXRfYXRvbWljX2xkX3N0YC4gVGhlc2Ugc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBob3cgdGhlIGNoZWNrcyBhcmUgYmVpbmcgaW50ZWdyYXRlZC4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uIHNpZGUgb2YgdGhpbmdzLiBJdCBsb29rcyBsaWtlIGBDT05GSUdfQlBGX0pJVF9LQVNBTmAgaXMgdGhlIG5ldyBrZXkgY29uZmlnIGhlcmUuIEl0JiMzOTtzIGRlcGVuZGVudCBvbiBhIGZldyBvdGhlcnM6IGBIQVZFX0VCUEZfSklUX0tBU0FOYCwgYEtBU0FOX0dFTkVSSUNgLCBgS0FTQU5fVk1BTExPQ2AsIGFuZCBvZiBjb3Vyc2UsIGBCUEZfSklUYC4gR2l2ZW4gdGhlIGRlcGVuZGVuY2llcywgZW5hYmxpbmcgYEJQRl9KSVRfS0FTQU5gIGlzIHRoZSByaWdodCB0aGluZyB0byBkby4KCkJ1dCBhcmUgdGhlcmUgYW55IG90aGVyIGNvbmZpZ3Mgd2UgbmVlZCB0byBiZSBhd2FyZSBvZj8gTGV0JiMzOTtzIHNlZS4uLiBgQ09ORklHX0hBVkVfRUJQRl9KSVRfS0FTQU5gIGlzIGFscmVhZHkgc2VsZWN0ZWQgYnkgeDg2XzY0LiBUaGF04oCZcyBnb29kLCBpdCBzdWdnZXN0cyB0aGF0IGBCUEZfSklUX0tBU0FOYCBpcyB0aGUgb25seSBvbmUgd2UgbmVlZCB0byBleHBsaWNpdGx5IG1hbmFnZS4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTtsbCBkb3VibGUtY2hlY2sgdGhlIGBrZXJuZWwvYnBmL0tjb25maWdgIGZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA0OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JQRl9KSVRfS0FTQU4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZz01OD1jb25maWcgWDg2XG4tLVxuYXJjaC94ODYvS2NvbmZpZy0yMzUtXHRzZWxlY3QgSEFWRV9FQlBGX0pJVFxuYXJjaC94ODYvS2NvbmZpZzoyMzY6XHRzZWxlY3QgSEFWRV9FQlBGX0pJVF9LQVNBTlx0XHRpZiBYODZfNjRcbmFyY2gveDg2L0tjb25maWctMjM3LVx0c2VsZWN0IEhBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1Ncbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjMtXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JQRl9KSVRfS0FTQU4pXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjUtdm9pZCBfX2FzYW5fbG9hZDEodm9pZCAqcCk7XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTExMjQ9c3RhdGljIGludCBlbWl0X2thc2FuX2NoZWNrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHU4ICoqcHByb2csXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTExMjcte1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjExMjg6I2lmZGVmIENPTkZJR19CUEZfSklUX0tBU0FOXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTEyOS1cdHUzMiBicGZfc2l6ZSA9IEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSk7XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEyMDMtXHQqcHByb2cgPSBwcm9nO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjEyMDQ6I2VuZGlmIC8qIENPTkZJR19CUEZfSklUX0tBU0FOICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTIwNS1cdHJldHVybiAwO1xuLS1cbmtlcm5lbC9icGYvS2NvbmZpZz0xNz1jb25maWcgSEFWRV9FQlBGX0pJVFxuLS1cbmtlcm5lbC9icGYvS2NvbmZpZy0yMC0jIEtBU0FOIHN1cHBvcnQgZm9yIEpJVCBjb21waWxlclxua2VybmVsL2JwZi9LY29uZmlnOjIxOmNvbmZpZyBIQVZFX0VCUEZfSklUX0tBU0FOXG5rZXJuZWwvYnBmL0tjb25maWctMjItXHRib29sXG4tLVxua2VybmVsL2JwZi9LY29uZmlnPTk2PWNvbmZpZyBCUEZfTFNNXG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTEwNy1cbmtlcm5lbC9icGYvS2NvbmZpZzoxMDg6Y29uZmlnIEJQRl9KSVRfS0FTQU5cbmtlcm5lbC9icGYvS2NvbmZpZy0xMDktXHRib29sXG5rZXJuZWwvYnBmL0tjb25maWc6MTEwOlx0ZGVwZW5kcyBvbiBIQVZFX0VCUEZfSklUX0tBU0FOXG5rZXJuZWwvYnBmL0tjb25maWctMTExLVx0ZGVwZW5kcyBvbiBLQVNBTl9HRU5FUklDXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYz0yNjU9X19icGZfa2Z1bmMgdm9pZCBicGZfa2Z1bmNfcHV0X2RlZmF1bHRfdHJ1c3RlZF9wdHJfdGVzdChzdHJ1Y3QgcHJvZ190ZXN0X21lbWJlciAqdHJ1c3RlZF9wdHIpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYy0yNzMtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jOjI3NDojaWZkZWYgQ09ORklHX0JQRl9KSVRfS0FTQU5cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMtMjc1LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi91bnByaXZfaGVscGVycy5jPTE0Nj1ib29sIGdldF9rYXNhbl9qaXRfZW5hYmxlZCh2b2lkKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3VucHJpdl9oZWxwZXJzLmMtMTQ3LXtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi91bnByaXZfaGVscGVycy5jOjE0ODpcdHJldHVybiBjb25maWdfY29udGFpbnMoXCYjMzQ7Q09ORklHX0JQRl9KSVRfS0FTQU49eVwmIzM0OykgPT0gMTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi91bnByaXZfaGVscGVycy5jLTE0OS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA0OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NzM0CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMTU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEJQRiBKSVQgS0FTQU4gSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBzbyB0byBlbmFibGUgdGhlIEtBU0FOIGNoZWNrcyBmb3IgdGhlIEJQRiBKSVQsIGl0JiMzOTtzIGBCUEZfSklUX0tBU0FOYCwgZ290IGl0LiBOb3csIGxldCYjMzk7cyBicmVhayBkb3duIHRoZXNlIGBGb2N1c1N5bWJvbHNgIHRoZXkgbWVudGlvbmVkLiBXZSYjMzk7dmUgZ290IGBlbWl0X2thc2FuX2NoZWNrYCwgYGVtaXRfc3RgLCBgZW1pdF9hdG9taWNfbGRfc3RgLCBgYWRqdXN0X2luc25fYXV4X2RhdGFgLCBhbmQgYGJwZl9wYXRjaF9pbnNuX2RhdGFgLgoKSGFuZyBvbiBhIHNlY29uZCwgYGJwZl9wYXRjaF9pbnNuX2RhdGFgPyBJc24mIzM5O3QgdGhhdCBhIHByZXR0eSBjb3JlIGZ1bmN0aW9uIGZvciB0aGUgdmVyaWZpZXI/IEFoLCB5ZXMsIGl0JiMzOTtzIGNhbGxlZCBkdXJpbmcgZml4dXBzLiBTaW5jZSBpdCYjMzk7cyBpbiB0aGUgZml4dXAgcGF0aCwgZnV6emluZyB0aGF0IHNob3VsZCBiZSBwZXJmZWN0bHkgYWNjZXB0YWJsZS4gVGhlIHNhbWUgaXMgdHJ1ZSBmb3IgYGFkanVzdF9pbnNuX2F1eF9kYXRhYDsgYWxzbyBmaXh1cHMuIFRoYXQgbWFrZXMgc2Vuc2UuCgpOb3csIGxldCYjMzk7cyBqdXN0IGNvbmZpcm0gd2hldGhlciBgZW1pdF9zdGAgaXMgYSBuZXcgZnVuY3Rpb24sIG9yIHNvbWV0aGluZyBlbHNlIGlzIGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNDozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlbWl0X3N0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA4NzggbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmFyY2gvYXJtL25ldC9icGZfaml0XzMyLmM9MTIwOD1zdGF0aWMgYm9vbCBpc19sZHN0X2ltbTgoczE2IG9mZiwgY29uc3QgdTggc2l6ZSlcbi0tXG5hcmNoL2FybS9uZXQvYnBmX2ppdF8zMi5jLTEyMjYtLyogKihzaXplICopKGRzdCAmIzQzOyBvZmYpID0gc3JjICovXG5hcmNoL2FybS9uZXQvYnBmX2ppdF8zMi5jOjEyMjc6c3RhdGljIGlubGluZSB2b2lkIGVtaXRfc3RyX3IoY29uc3QgczggZHN0LCBjb25zdCBzOCBzcmNbXSxcbmFyY2gvYXJtL25ldC9icGZfaml0XzMyLmMtMTIyOC1cdFx0XHQgICAgICBzMTYgb2ZmLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBjb25zdCB1OCBzeil7XG4tLVxuYXJjaC9hcm0vbmV0L2JwZl9qaXRfMzIuYz0xNTg5PXN0YXRpYyBpbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY3R4ICpjdHgpXG4tLVxuYXJjaC9hcm0vbmV0L2JwZl9qaXRfMzIuYy0xODk1LVx0XHR9XG5hcmNoL2FybS9uZXQvYnBmX2ppdF8zMi5jOjE4OTY6XHRcdGVtaXRfc3RyX3IoZHN0X2xvLCB0bXAyLCBvZmYsIGN0eCwgQlBGX1NJWkUoY29kZSkpO1xuYXJjaC9hcm0vbmV0L2JwZl9qaXRfMzIuYy0xODk3LVx0XHRicmVhaztcbi0tXG5hcmNoL2FybS9uZXQvYnBmX2ppdF8zMi5jLTE5MDctXHRcdHJzID0gYXJtX2JwZl9nZXRfcmVnNjQoc3JjLCB0bXAyLCBjdHgpO1xuYXJjaC9hcm0vbmV0L2JwZl9qaXRfMzIuYzoxOTA4Olx0XHRlbWl0X3N0cl9yKGRzdF9sbywgcnMsIG9mZiwgY3R4LCBCUEZfU0laRShjb2RlKSk7XG5hcmNoL2FybS9uZXQvYnBmX2ppdF8zMi5jLTE5MDktXHRcdGJyZWFrO1xuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTEyMTE9c3RhdGljIGNvbnN0IHU4IHN0YWNrX2FyZ19yZWdbXSA9IHsgQTY0X1IoNSksIEE2NF9SKDYpLCBBNjRfUig3KSB9O1xuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTEyMTQtXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxMjE1OnN0YXRpYyB2b2lkIGVtaXRfc3RhY2tfYXJnX2xvYWQodTggZHN0LCBzMTYgYnBmX29mZiwgc3RydWN0IGppdF9jdHggKmN0eClcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTEyMTYte1xuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTEyMjQtXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxMjI1OnN0YXRpYyB2b2lkIGVtaXRfc3RhY2tfYXJnX3N0b3JlKHU4IHNyY19hNjQsIHMxNiBicGZfb2ZmLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTIyNi17XG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTIzNC1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjEyMzU6c3RhdGljIHZvaWQgZW1pdF9zdGFja19hcmdfc3RvcmVfaW1tKHMzMiBpbW0sIHMxNiBicGZfb2ZmLCBjb25zdCB1OCB0bXAsIHN0cnVjdCBqaXRfY3R4ICpjdHgpXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMjM2LXtcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0xMjUzPXN0YXRpYyBpbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTcwMi1cdFx0aWYgKGluc24tXHUwMDNlc3JjX3JlZyA9PSBCUEZfUkVHX1BBUkFNUykge1xuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MTcwMzpcdFx0XHRlbWl0X3N0YWNrX2FyZ19sb2FkKGRzdCwgb2ZmLCBjdHgpO1xuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTcwNC1cdFx0XHRicmVhaztcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xODE1LVx0XHRpZiAoaW5zbi1cdTAwM2Vkc3RfcmVnID09IEJQRl9SRUdfUEFSQU1TKSB7XG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxODE2Olx0XHRcdGVtaXRfc3RhY2tfYXJnX3N0b3JlX2ltbShpbW0sIG9mZiwgdG1wLCBjdHgpO1xuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTgxNy1cdFx0XHRicmVhaztcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xODg0LVx0XHRpZiAoaW5zbi1cdTAwM2Vkc3RfcmVnID09IEJQRl9SRUdfUEFSQU1TKSB7XG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxODg1Olx0XHRcdGVtaXRfc3RhY2tfYXJnX3N0b3JlKHNyYywgb2ZmLCBjdHgpO1xuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTg4Ni1cdFx0XHRicmVhaztcbi0tXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jPTI5MT1zdGF0aWMgaW50IGVtaXRfYnBmX3RhaWxfY2FsbChzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBpbnQgaW5zbilcbi0tXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTM2MS1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM6MzYyOnN0YXRpYyB2b2lkIGVtaXRfc3RvcmVfc3RhY2tfaW1tNjQoc3RydWN0IGppdF9jdHggKmN0eCwgaW50IHJlZywgaW50IHN0YWNrX29mZiwgdTY0IGltbTY0KVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0zNjMte1xuLS1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM9MTcwNT1zdGF0aWMgaW50IGludm9rZV9icGZfcHJvZyhzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm4sXG4tLVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0xNzEzLVx0aWYgKG4tXHUwMDNlY29va2llKVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoxNzE0Olx0XHRlbWl0X3N0b3JlX3N0YWNrX2ltbTY0KGN0eCwgTE9PTkdBUkNIX0dQUl9UMSxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMTcxNS1cdFx0XHRcdCAgICAgIC1ydW5fY3R4X29mZiAmIzQzOyBjb29raWVfb2ZmLCBuLVx1MDAzZWNvb2tpZSk7XG4tLVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYz0xNzY4PXN0YXRpYyBpbnQgaW52b2tlX2JwZihzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bixcbi0tXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTE3NzktXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjE3ODA6XHRcdFx0ZW1pdF9zdG9yZV9zdGFja19pbW02NChjdHgsIExPT05HQVJDSF9HUFJfVDEsIC1mdW5jX21ldGFfb2ZmLCBtZXRhKTtcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMTc4MS1cdFx0XHRjdXJfY29va2llLS07XG4tLVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYz0xODM3PXN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGppdF9jdHggKmN0eCwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXG4tLVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0xOTkxLVx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfVFJBTVBfRl9JUF9BUkcpXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjE5OTI6XHRcdGVtaXRfc3RvcmVfc3RhY2tfaW1tNjQoY3R4LCBMT09OR0FSQ0hfR1BSX1QxLCAtaXBfb2ZmLCAodTY0KWZ1bmNfYWRkcik7XG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTE5OTMtXG4tLVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0xOTk1LVx0ZnVuY19tZXRhID0gbnJfYXJnX3Nsb3RzO1xuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoxOTk2Olx0ZW1pdF9zdG9yZV9zdGFja19pbW02NChjdHgsIExPT05HQVJDSF9HUFJfVDEsIC1mdW5jX21ldGFfb2ZmLCBmdW5jX21ldGEpO1xuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0xOTk3LVxuLS1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjA3My1cdGlmIChicGZfZnNlc3Npb25fY250KHRub2RlcykpXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjIwNzQ6XHRcdGVtaXRfc3RvcmVfc3RhY2tfaW1tNjQoY3R4LCBMT09OR0FSQ0hfR1BSX1QxLCAtZnVuY19tZXRhX29mZiwgZnVuY19tZXRhKTtcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjA3NS1cbi0tXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcDMyLmM9NjU0PXN0YXRpYyB2b2lkIGVtaXRfbGR4KHN0cnVjdCBqaXRfY29udGV4dCAqY3R4LFxuLS1cbmFyY2gvbWlwcy9uZXQvYnBmX2ppdF9jb21wMzIuYy02ODgtLyogU3RvcmUgb3BlcmF0aW9uOiAqKHNpemUgKikoZHN0ICYjNDM7IG9mZikgPSBzcmMgKi9cbmFyY2gvbWlwcy9uZXQvYnBmX2ppdF9jb21wMzIuYzo2ODk6c3RhdGljIHZvaWQgZW1pdF9zdHgoc3RydWN0IGppdF9jb250ZXh0ICpjdHgsXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcDMyLmMtNjkwLVx0XHQgICAgIGNvbnN0IHU4IGRzdCwgY29uc3QgdTggc3JjW10sIHMxNiBvZmYsIHU4IHNpemUpXG4tLVxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXAzMi5jPTE0NjM9aW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2NvbnRleHQgKmN0eClcbi0tXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTY3Ni1cdFx0fVxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXAzMi5jOjE2Nzc6XHRcdGVtaXRfc3R4KGN0eCwgbG8oZHN0KSwgdG1wLCBvZmYsIEJQRl9TSVpFKGNvZGUpKTtcbmFyY2gvbWlwcy9uZXQvYnBmX2ppdF9jb21wMzIuYy0xNjc4LVx0XHRicmVhaztcbi0tXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTY4My1cdGNhc2UgQlBGX1NUWCB8IEJQRl9NRU0gfCBCUEZfRFc6XG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcDMyLmM6MTY4NDpcdFx0ZW1pdF9zdHgoY3R4LCBsbyhkc3QpLCBzcmMsIG9mZiwgQlBGX1NJWkUoY29kZSkpO1xuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXAzMi5jLTE2ODUtXHRcdGJyZWFrO1xuLS1cbmFyY2gvbWlwcy9uZXQvYnBmX2ppdF9jb21wNjQuYz0zMzQ9c3RhdGljIHZvaWQgZW1pdF9sZHgoc3RydWN0IGppdF9jb250ZXh0ICpjdHgsIHU4IGRzdCwgdTggc3JjLCBzMTYgb2ZmLCB1OCBzaXplKVxuLS1cbmFyY2gvbWlwcy9uZXQvYnBmX2ppdF9jb21wNjQuYy0zNTctLyogU3RvcmUgb3BlcmF0aW9uOiAqKHNpemUgKikoZHN0ICYjNDM7IG9mZikgPSBzcmMgKi9cbmFyY2gvbWlwcy9uZXQvYnBmX2ppdF9jb21wNjQuYzozNTg6c3RhdGljIHZvaWQgZW1pdF9zdHgoc3RydWN0IGppdF9jb250ZXh0ICpjdHgsIHU4IGRzdCwgdTggc3JjLCBzMTYgb2ZmLCB1OCBzaXplKVxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXA2NC5jLTM1OS17XG4tLVxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXA2NC5jPTYzNT1pbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBqaXRfY29udGV4dCAqY3R4KVxuLS1cbmFyY2gvbWlwcy9uZXQvYnBmX2ppdF9jb21wNjQuYy04MzUtXHRcdGVtaXRfbW92X2koY3R4LCBNSVBTX1JfVDQsIGltbSk7XG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcDY0LmM6ODM2Olx0XHRlbWl0X3N0eChjdHgsIGRzdCwgTUlQU19SX1Q0LCBvZmYsIEJQRl9TSVpFKGNvZGUpKTtcbmFyY2gvbWlwcy9uZXQvYnBmX2ppdF9jb21wNjQuYy04MzctXHRcdGJyZWFrO1xuLS1cbmFyY2gvbWlwcy9uZXQvYnBmX2ppdF9jb21wNjQuYy04NDItXHRjYXNlIEJQRl9TVFggfCBCUEZfTUVNIHwgQlBGX0RXOlxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXA2NC5jOjg0MzpcdFx0ZW1pdF9zdHgoY3R4LCBkc3QsIHNyYywgb2ZmLCBCUEZfU0laRShjb2RlKSk7XG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcDY0LmMtODQ0LVx0XHRicmVhaztcbi0tXG5hcmNoL3BhcmlzYy9uZXQvYnBmX2ppdF9jb21wMzIuYz0xMDA2PXN0YXRpYyBpbnQgZW1pdF9sb2FkX3I2NChjb25zdCBzOCAqZHN0LCBjb25zdCBzOCAqc3JjLCBzMTYgb2ZmLFxuLS1cbmFyY2gvcGFyaXNjL25ldC9icGZfaml0X2NvbXAzMi5jLTEwNTEtXG5hcmNoL3BhcmlzYy9uZXQvYnBmX2ppdF9jb21wMzIuYzoxMDUyOnN0YXRpYyBpbnQgZW1pdF9zdG9yZV9yNjQoY29uc3QgczggKmRzdCwgY29uc3QgczggKnNyYywgczE2IG9mZixcbmFyY2gvcGFyaXNjL25ldC9icGZfaml0X2NvbXAzMi5jLTEwNTMtXHRcdFx0ICBzdHJ1Y3QgaHBwYV9qaXRfY29udGV4dCAqY3R4LCBjb25zdCB1OCBzaXplLFxuLS1cbmFyY2gvcGFyaXNjL25ldC9icGZfaml0X2NvbXAzMi5jPTExMTY9aW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGhwcGFfaml0X2NvbnRleHQgKmN0eCxcbi0tXG5hcmNoL3BhcmlzYy9uZXQvYnBmX2ppdF9jb21wMzIuYy0xNDQ2LVxuYXJjaC9wYXJpc2MvbmV0L2JwZl9qaXRfY29tcDMyLmM6MTQ0NzpcdFx0aWYgKGVtaXRfc3RvcmVfcjY0KGRzdCwgc3JjLCBvZmYsIGN0eCwgQlBGX1NJWkUoY29kZSksXG5hcmNoL3BhcmlzYy9uZXQvYnBmX2ppdF9jb21wMzIuYy0xNDQ4LVx0XHRcdFx0ICAgQlBGX01PREUoY29kZSkpKVxuLS1cbmFyY2gvcGFyaXNjL25ldC9icGZfaml0X2NvbXA2NC5jPTUwNT1zdGF0aWMgdm9pZCBlbWl0X2NhbGxfbGliZ2NjX2xsKHZvaWQgKmZ1bmMsIGNvbnN0IHM4IGFyZzAsXG4tLVxuYXJjaC9wYXJpc2MvbmV0L2JwZl9qaXRfY29tcDY0LmMtNTUzLVxuYXJjaC9wYXJpc2MvbmV0L2JwZl9qaXRfY29tcDY0LmM6NTU0OnN0YXRpYyB2b2lkIGVtaXRfc3RvcmUoY29uc3QgczggcmQsIGNvbnN0IHM4IHJzLCBzMTYgb2ZmLFxuYXJjaC9wYXJpc2MvbmV0L2JwZl9qaXRfY29tcDY0LmMtNTU1LVx0XHRcdCAgc3RydWN0IGhwcGFfaml0X2NvbnRleHQgKmN0eCwgY29uc3QgdTggc2l6ZSxcbi0tXG5hcmNoL3BhcmlzYy9uZXQvYnBmX2ppdF9jb21wNjQuYz01OTI9aW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGhwcGFfaml0X2NvbnRleHQgKmN0eCxcbi0tXG5hcmNoL3BhcmlzYy9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMDgxLVxuYXJjaC9wYXJpc2MvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTA4MjpcdFx0ZW1pdF9zdG9yZShyZCwgcnMsIG9mZiwgY3R4LCBCUEZfU0laRShjb2RlKSwgQlBGX01PREUoY29kZSkpO1xuYXJjaC9wYXJpc2MvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTA4My1cdFx0YnJlYWs7XG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYz04MzU9c3RhdGljIGludCBlbWl0X2xvYWRfcjY0KGNvbnN0IHM4ICpkc3QsIGNvbnN0IHM4ICpzcmMsIHMxNiBvZmYsXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYy04NzEtXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jOjg3MjpzdGF0aWMgaW50IGVtaXRfc3RvcmVfcjY0KGNvbnN0IHM4ICpkc3QsIGNvbnN0IHM4ICpzcmMsIHMxNiBvZmYsXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jLTg3My1cdFx0XHQgIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LCBjb25zdCB1OCBzaXplLFxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmM9OTUzPWludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTI2OC1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmM6MTI2OTpcdFx0aWYgKGVtaXRfc3RvcmVfcjY0KGRzdCwgc3JjLCBvZmYsIGN0eCwgQlBGX1NJWkUoY29kZSksXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jLTEyNzAtXHRcdFx0XHQgICBCUEZfTU9ERShjb2RlKSkpXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYy0xMjgxLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYzoxMjgyOlx0XHRpZiAoZW1pdF9zdG9yZV9yNjQoZHN0LCBzcmMsIG9mZiwgY3R4LCBCUEZfU0laRShjb2RlKSxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTI4My1cdFx0XHRcdCAgIEJQRl9NT0RFKGNvZGUpKSlcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTQ3Nj1zdGF0aWMgdm9pZCBlbWl0X2xkeF9pbnNuKHU4IHJkLCBzMTYgb2ZmLCB1OCBycywgdTggc2l6ZSwgYm9vbCBzaWduX2V4dCxcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTQ5NS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6NDk2OnN0YXRpYyB2b2lkIGVtaXRfc3R4X2luc24odTggcmQsIHMxNiBvZmYsIHU4IHJzLCB1OCBzaXplLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eClcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtNDk3LXtcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTUxND1zdGF0aWMgdm9pZCBlbWl0X2xkeCh1OCByZCwgczE2IG9mZiwgdTggcnMsIHU4IHNpemUsIGJvb2wgc2lnbl9leHQsXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy01MzAtXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjUzMTpzdGF0aWMgdm9pZCBlbWl0X3N0KHU4IHJkLCBzMTYgb2ZmLCBzMzIgaW1tLCB1OCBzaXplLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eClcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtNTMyLXtcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTUzNS1cdFx0Y3R4LVx1MDAzZWV4X2luc25fb2ZmID0gY3R4LVx1MDAzZW5pbnNucztcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6NTM2Olx0XHRlbWl0X3N0eF9pbnNuKHJkLCBvZmYsIFJWX1JFR19UMSwgc2l6ZSwgY3R4KTtcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtNTM3LVx0XHRjdHgtXHUwMDNlZXhfam1wX29mZiA9IGN0eC1cdTAwM2VuaW5zbnM7XG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy01NDMtXHRjdHgtXHUwMDNlZXhfaW5zbl9vZmYgPSBjdHgtXHUwMDNlbmluc25zO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzo1NDQ6XHRlbWl0X3N0eF9pbnNuKFJWX1JFR19UMiwgMCwgUlZfUkVHX1QxLCBzaXplLCBjdHgpO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy01NDUtXHRjdHgtXHUwMDNlZXhfam1wX29mZiA9IGN0eC1cdTAwM2VuaW5zbnM7XG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy01NDctXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjU0ODpzdGF0aWMgdm9pZCBlbWl0X3N0eCh1OCByZCwgczE2IG9mZiwgdTggcnMsIHU4IHNpemUsIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy01NDkte1xuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtNTUxLVx0XHRjdHgtXHUwMDNlZXhfaW5zbl9vZmYgPSBjdHgtXHUwMDNlbmluc25zO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzo1NTI6XHRcdGVtaXRfc3R4X2luc24ocmQsIG9mZiwgcnMsIHNpemUsIGN0eCk7XG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTU1My1cdFx0Y3R4LVx1MDAzZWV4X2ptcF9vZmYgPSBjdHgtXHUwMDNlbmluc25zO1xuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtNTU5LVx0Y3R4LVx1MDAzZWV4X2luc25fb2ZmID0gY3R4LVx1MDAzZW5pbnNucztcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6NTYwOlx0ZW1pdF9zdHhfaW5zbihSVl9SRUdfVDEsIDAsIHJzLCBzaXplLCBjdHgpO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy01NjEtXHRjdHgtXHUwMDNlZXhfam1wX29mZiA9IGN0eC1cdTAwM2VuaW5zbnM7XG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz01NjQ9c3RhdGljIGludCBlbWl0X2F0b21pY19sZF9zdCh1OCByZCwgdTggcnMsIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTU5NS1cdFx0ZW1pdF9mZW5jZV9yd193KGN0eCk7XG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjU5NjpcdFx0ZW1pdF9zdHgocmQsIG9mZiwgcnMsIEJQRl9TSVpFKGNvZGUpLCBjdHgpO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy01OTctXHRcdGJyZWFrO1xuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9OTE2PXN0YXRpYyB2b2lkIHJlc3RvcmVfc3RhY2tfYXJncyhpbnQgbnJfc3RhY2tfYXJncywgaW50IGFyZ3Nfb2ZmLCBpbnQgc3RrX2FyZ19vZmYsXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy05MjgtXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjkyOTpzdGF0aWMgdm9pZCBlbWl0X3N0b3JlX3N0YWNrX2ltbTY0KHU4IHJlZywgaW50IHN0YWNrX29mZiwgdTY0IGltbTY0LFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy05MzAtXHRcdFx0XHQgICBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eClcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTkzNz1zdGF0aWMgaW50IGludm9rZV9icGZfcHJvZyhzdHJ1Y3QgYnBmX3RyYW1wX25vZGUgKm5vZGUsIGludCBhcmdzX29mZiwgaW50IHJldHZhbF9vZmYsXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy05NDQtXHRpZiAobm9kZS1cdTAwM2Vjb29raWUpXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjk0NTpcdFx0ZW1pdF9zdG9yZV9zdGFja19pbW02NChSVl9SRUdfVDEsIC1ydW5fY3R4X29mZiAmIzQzOyBjb29raWVfb2ZmLCBub2RlLVx1MDAzZWNvb2tpZSwgY3R4KTtcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtOTQ2LVx0ZWxzZVxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9OTk5PXN0YXRpYyBpbnQgaW52b2tlX2JwZihzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0biwgaW50IGFyZ3Nfb2ZmLCBpbnQgcmV0dmFsX29mZixcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEwMTAtXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjEwMTE6XHRcdFx0ZW1pdF9zdG9yZV9zdGFja19pbW02NChSVl9SRUdfVDEsIC1mdW5jX21ldGFfb2ZmLCBtZXRhLCBjdHgpO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMDEyLVx0XHRcdGN1cl9jb29raWUtLTtcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTEwMjI9c3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTExNjctXHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9UUkFNUF9GX0lQX0FSRylcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTE2ODpcdFx0ZW1pdF9zdG9yZV9zdGFja19pbW02NChSVl9SRUdfVDEsIC1pcF9vZmYsICh1NjQpZnVuY19hZGRyLCBjdHgpO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMTY5LVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMTcwLVx0ZnVuY19tZXRhID0gbnJfYXJnX3Nsb3RzO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxMTcxOlx0ZW1pdF9zdG9yZV9zdGFja19pbW02NChSVl9SRUdfVDEsIC1mdW5jX21ldGFfb2ZmLCBmdW5jX21ldGEsIGN0eCk7XG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTExNzItXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMjQxLVx0aWYgKGJwZl9mc2Vzc2lvbl9jbnQodG5vZGVzKSlcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTI0MjpcdFx0ZW1pdF9zdG9yZV9zdGFja19pbW02NChSVl9SRUdfVDEsIC1mdW5jX21ldGFfb2ZmLCBmdW5jX21ldGEsIGN0eCk7XG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEyNDMtXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz0xMzY5PWludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTk0NS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTk0NjpcdFx0ZW1pdF9zdChyZCwgb2ZmLCBpbW0sIEJQRl9TSVpFKGNvZGUpLCBjdHgpO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xOTQ3LVxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTk2Ny1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTk2ODpcdFx0ZW1pdF9zdHgocmQsIG9mZiwgcnMsIEJQRl9TSVpFKGNvZGUpLCBjdHgpO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xOTY5LVxuLS1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM9MjUyMz1zdGF0aWMgdm9pZCBsb2FkX2ltbTY0KHN0cnVjdCBicGZfaml0ICpqaXQsIGludCBkc3RfcmVnLCB1NjQgdmFsKVxuLS1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMjUzMC1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6MjUzMTpzdGF0aWMgdm9pZCBlbWl0X3N0b3JlX3N0YWNrX2ltbTY0KHN0cnVjdCBicGZfaml0ICpqaXQsIGludCB0bXBfcmVnLCBpbnQgc3RhY2tfb2ZmLCB1NjQgaW1tKVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0yNTMyLXtcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jPTI1Mzg9c3RhdGljIGludCBpbnZva2VfYnBmX3Byb2coc3RydWN0IGJwZl90cmFtcF9qaXQgKnRqaXQsXG4tLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0yNTUxLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzoyNTUyOlx0ZW1pdF9zdG9yZV9zdGFja19pbW02NChqaXQsIFJFR19XMCwgY29va2llX29mZiwgbm9kZS1cdTAwM2Vjb29raWUpO1xuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0yNTUzLVxuLS1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM9MjYxMD1zdGF0aWMgaW50IGludm9rZV9icGYoc3RydWN0IGJwZl90cmFtcF9qaXQgKnRqaXQsXG4tLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0yNjIxLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzoyNjIyOlx0XHRcdGVtaXRfc3RvcmVfc3RhY2tfaW1tNjQoaml0LCBSRUdfMCwgdGppdC1cdTAwM2VmdW5jX21ldGFfb2ZmLCBtZXRhKTtcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMjYyMy1cdFx0XHRjdXJfY29va2llLS07XG4tLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYz0yNjUwPXN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXG4tLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0yODAwLVx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfVFJBTVBfRl9JUF9BUkcpXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjI4MDE6XHRcdGVtaXRfc3RvcmVfc3RhY2tfaW1tNjQoaml0LCBSRUdfMCwgdGppdC1cdTAwM2VpcF9vZmYsICh1NjQpZnVuY19hZGRyKTtcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMjgwMi1cdGZ1bmNfbWV0YSA9IG5yX2JwZl9hcmdzO1xuLS1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMjgyMi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY29va2llX2NudDsgaSYjNDM7JiM0MzspXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjI4MjM6XHRcdFx0ZW1pdF9zdG9yZV9zdGFja19pbW02NChqaXQsIFJFR18wLCBjb29raWVfb2ZmICYjNDM7IDggKiBpLCAwKTtcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMjgyNC1cdFx0LyogQ2xlYXIgdGhlIHJldHVybiB2YWx1ZSB0byBtYWtlIHN1cmUgZmVudHJ5IGFsd2F5cyBnZXRzIDAuICovXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjI4MjU6XHRcdGVtaXRfc3RvcmVfc3RhY2tfaW1tNjQoaml0LCBSRUdfMCwgdGppdC1cdTAwM2VyZXR2YWxfb2ZmLCAwKTtcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMjgyNi1cdH1cbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTI5MDktXHRpZiAoZnNlc3Npb25fY250KVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzoyOTEwOlx0XHRlbWl0X3N0b3JlX3N0YWNrX2ltbTY0KGppdCwgUkVHX1cwLCB0aml0LVx1MDAzZWZ1bmNfbWV0YV9vZmYsXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTI5MTEtXHRcdFx0XHQgICAgICAgZnVuY19tZXRhKTtcbi0tXG5hcmNoL3NwYXJjL25ldC9icGZfaml0X2NvbXBfMzIuYz0yMTI9ZG8ge1x0KnByb2cmIzQzOyYjNDM7ID0gTEQzMkkgfCBSUzEoU1ApIHwgUzEzKEJJQVMgLSAoT0ZGKSkgfCBSRChERVNUKTtcdFxcXG4tLVxuYXJjaC9zcGFyYy9uZXQvYnBmX2ppdF9jb21wXzMyLmMtMjE0LVxuYXJjaC9zcGFyYy9uZXQvYnBmX2ppdF9jb21wXzMyLmM6MjE1OiNkZWZpbmUgZW1pdF9zdG1lbShPRkYsIFNSQylcdFx0XHRcdFx0XHRcXFxuYXJjaC9zcGFyYy9uZXQvYnBmX2ppdF9jb21wXzMyLmMtMjE2LWRvIHtcdCpwcm9nJiM0MzsmIzQzOyA9IFNUMzJJIHwgUlMxKFNQKSB8IFMxMyhCSUFTIC0gKE9GRikpIHwgUkQoU1JDKTtcdFxcXG4tLVxuYXJjaC9zcGFyYy9uZXQvYnBmX2ppdF9jb21wXzMyLmM9MzI2PXZvaWQgYnBmX2ppdF9jb21waWxlKHN0cnVjdCBicGZfcHJvZyAqZnApXG4tLVxuYXJjaC9zcGFyYy9uZXQvYnBmX2ppdF9jb21wXzMyLmMtNTg1LVx0XHRcdFx0c2VlbiB8PSBTRUVOX01FTTtcbmFyY2gvc3BhcmMvbmV0L2JwZl9qaXRfY29tcF8zMi5jOjU4NjpcdFx0XHRcdGVtaXRfc3RtZW0oSyAqIDQsIHJfQSk7XG5hcmNoL3NwYXJjL25ldC9icGZfaml0X2NvbXBfMzIuYy01ODctXHRcdFx0XHRicmVhaztcbi0tXG5hcmNoL3NwYXJjL25ldC9icGZfaml0X2NvbXBfMzIuYy01ODktXHRcdFx0XHRzZWVuIHw9IFNFRU5fTUVNIHwgU0VFTl9YUkVHO1xuYXJjaC9zcGFyYy9uZXQvYnBmX2ppdF9jb21wXzMyLmM6NTkwOlx0XHRcdFx0ZW1pdF9zdG1lbShLICogNCwgcl9YKTtcbmFyY2gvc3BhcmMvbmV0L2JwZl9qaXRfY29tcF8zMi5jLTU5MS1cdFx0XHRcdGJyZWFrO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xMzE0PXN0YXRpYyB2b2lkIGVtaXRfbGRzeF9yMTIodTggKipwcm9nLCB1MzIgc2l6ZSwgdTMyIGRzdF9yZWcsIHUzMiBzcmNfcmVnLCBpbnQgb2ZmKVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMzE5LS8qIFNUWDogKih1OCopKGRzdF9yZWcgJiM0Mzsgb2ZmKSA9IHNyY19yZWcgKi9cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMzIwOnN0YXRpYyB2b2lkIGVtaXRfc3R4KHU4ICoqcHByb2csIHUzMiBzaXplLCB1MzIgZHN0X3JlZywgdTMyIHNyY19yZWcsIGludCBvZmYpXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTMyMS17XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEzNTMtLyogU1RYOiAqKHU4KikoZHN0X3JlZyAmIzQzOyBpbmRleF9yZWcgJiM0Mzsgb2ZmKSA9IHNyY19yZWcgKi9cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMzU0OnN0YXRpYyB2b2lkIGVtaXRfc3R4X2luZGV4KHU4ICoqcHByb2csIHUzMiBzaXplLCB1MzIgZHN0X3JlZywgdTMyIHNyY19yZWcsIHUzMiBpbmRleF9yZWcsIGludCBvZmYpXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTM1NS17XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEzNzktXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTM4MDpzdGF0aWMgdm9pZCBlbWl0X3N0eF9yMTIodTggKipwcHJvZywgdTMyIHNpemUsIHUzMiBkc3RfcmVnLCB1MzIgc3JjX3JlZywgaW50IG9mZilcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMzgxLXtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMzgyOlx0ZW1pdF9zdHhfaW5kZXgocHByb2csIHNpemUsIGRzdF9yZWcsIHNyY19yZWcsIFg4Nl9SRUdfUjEyLCBvZmYpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEzODMtfVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMzg1LS8qIFNUOiAqKHU4KikoZHN0X3JlZyAmIzQzOyBpbmRleF9yZWcgJiM0Mzsgb2ZmKSA9IGltbTMyICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTM4NjpzdGF0aWMgdm9pZCBlbWl0X3N0X2luZGV4KHU4ICoqcHByb2csIHUzMiBzaXplLCB1MzIgZHN0X3JlZywgdTMyIGluZGV4X3JlZywgaW50IG9mZiwgaW50IGltbSlcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMzg3LXtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTQxMi1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxNDEzOnN0YXRpYyB2b2lkIGVtaXRfc3QodTggKipwcHJvZywgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpbnQgZHN0X3JlZyxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNDE0LVx0XHQgICAgczMyIG91dGdvaW5nX2FyZ19iYXNlLCB1MTYgb3V0Z29pbmdfcnNwKVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNDcwLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE0NzE6c3RhdGljIHZvaWQgZW1pdF9zdF9yMTIodTggKipwcHJvZywgdTMyIHNpemUsIHUzMiBkc3RfcmVnLCBpbnQgb2ZmLCBpbnQgaW1tKVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE0NzIte1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE0NzM6XHRlbWl0X3N0X2luZGV4KHBwcm9nLCBzaXplLCBkc3RfcmVnLCBYODZfUkVHX1IxMiwgb2ZmLCBpbW0pO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE0NzQtfVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE0NzUtXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTQ3NjpzdGF0aWMgdm9pZCBlbWl0X3N0b3JlX3N0YWNrX2ltbTY0KHU4ICoqcHByb2csIGludCByZWcsIGludCBzdGFja19vZmYsIHU2NCBpbW02NClcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNDc3LXtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTQ4Mi1cdGVtaXRfbW92X2ltbTY0KHBwcm9nLCByZWcsIGltbTY0IFx1MDAzZVx1MDAzZSAzMiwgKHUzMikgaW1tNjQpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE0ODM6XHRlbWl0X3N0eChwcHJvZywgQlBGX0RXLCBCUEZfUkVHX0ZQLCByZWcsIHN0YWNrX29mZik7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTQ4NC19XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTE1Nzk9c3RhdGljIGludCBlbWl0X2F0b21pY19sZF9zdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1OCAqKnBwcm9nLFxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNjAxLVx0XHQvKiBzbXBfc3RvcmVfcmVsZWFzZShkc3RfcmVnICYjNDM7IG9mZjE2LCBzcmNfcmVnKSAqL1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE2MDI6XHRcdGVtaXRfc3R4KHBwcm9nLCBCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpLCBkc3RfcmVnLCBzcmNfcmVnLFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE2MDMtXHRcdFx0IGluc24tXHUwMDNlb2ZmKTtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTYxND1zdGF0aWMgaW50IGVtaXRfYXRvbWljX2xkX3N0X2luZGV4KHU4ICoqcHByb2csIHUzMiBhdG9taWNfb3AsIHUzMiBzaXplLFxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNjI0LVx0XHQvKiBzbXBfc3RvcmVfcmVsZWFzZShkc3RfcmVnICYjNDM7IGlkeF9yZWcgJiM0Mzsgb2ZmMTYsIHNyY19yZWcpICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTYyNTpcdFx0ZW1pdF9zdHhfaW5kZXgocHByb2csIHNpemUsIGRzdF9yZWcsIHNyY19yZWcsIGluZGV4X3JlZywgb2ZmKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNjI2LVx0XHRicmVhaztcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTg0OD1zdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKmFkZHJzLCB1OCAqaW1hZ2UsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTIzOTEtXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjM5MjpcdFx0XHRlbWl0X3N0KFx1MDAyNnByb2csIGluc24sIGRzdF9yZWcsIG91dGdvaW5nX2FyZ19iYXNlLFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTIzOTMtXHRcdFx0XHRvdXRnb2luZ19yc3ApO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yNDE0LVx0XHRcdFx0cmV0dXJuIGVycjtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoyNDE1Olx0XHRcdGVtaXRfc3R4KFx1MDAyNnByb2csIEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSksIGRzdF9yZWcsIHNyY19yZWcsIGluc25fb2ZmKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yNDE2LVx0XHRcdGJyZWFrO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yNDIyLVx0XHRcdHN0YXJ0X29mX2xkeCA9IHByb2c7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjQyMzpcdFx0XHRlbWl0X3N0X3IxMihcdTAwMjZwcm9nLCBCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpLCBkc3RfcmVnLCBpbnNuLVx1MDAzZW9mZiwgaW5zbi1cdTAwM2VpbW0pO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI0MjQtXHRcdFx0Z290byBwb3B1bGF0ZV9leHRhYmxlO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yNDQ0LVx0XHRcdH0gZWxzZSB7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjQ0NTpcdFx0XHRcdGVtaXRfc3R4X3IxMihcdTAwMjZwcm9nLCBCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpLCBkc3RfcmVnLCBzcmNfcmVnLCBpbnNuLVx1MDAzZW9mZik7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjQ0Ni1cdFx0XHR9XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTMxNTk9c3RhdGljIHZvaWQgc2F2ZV9hcmdzKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTggKipwcm9nLFxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zMjA0LVx0XHRcdFx0XHQgbnJfc3RhY2tfc2xvdHMgKiA4ICYjNDM7IDE2ICYjNDM7ICghdXNlX2ptcCkgKiA4KTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozMjA1Olx0XHRcdFx0ZW1pdF9zdHgocHJvZywgQlBGX0RXLCBCUEZfUkVHX0ZQLCBCUEZfUkVHXzAsXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzIwNi1cdFx0XHRcdFx0IC1zdGFja19zaXplKTtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzIyNC1cdFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBhcmdfcmVnczsgaiYjNDM7JiM0MzspIHtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozMjI1Olx0XHRcdFx0ZW1pdF9zdHgocHJvZywgQlBGX0RXLCBCUEZfUkVHX0ZQLFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTMyMjYtXHRcdFx0XHRcdCBucl9yZWdzID09IDUgPyBYODZfUkVHX1I5IDogQlBGX1JFR18xICYjNDM7IG5yX3JlZ3MsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTMyNjk9c3RhdGljIGludCBpbnZva2VfYnBmX3Byb2coY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1OCAqKnBwcm9nLFxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zMjg5LVx0ICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzI5MDpcdGVtaXRfc3R4KFx1MDAyNnByb2csIEJQRl9EVywgQlBGX1JFR19GUCwgQlBGX1JFR18xLCAtcnVuX2N0eF9vZmYgJiM0MzsgY3R4X2Nvb2tpZV9vZmYpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTMyOTEtXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTMzMzUtXHRpZiAoc2F2ZV9yZXQpXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzMzNjpcdFx0ZW1pdF9zdHgoXHUwMDI2cHJvZywgQlBGX0RXLCBCUEZfUkVHX0ZQLCBCUEZfUkVHXzAsIC04KTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zMzM3LVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zMzg0PXN0YXRpYyBpbnQgaW52b2tlX2JwZihjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHU4ICoqcHByb2csXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTMzOTQtXHRcdGlmICh0bC1cdTAwM2Vub2Rlc1tpXS1cdTAwM2VsaW5rLVx1MDAzZXByb2ctXHUwMDNlY2FsbF9zZXNzaW9uX2Nvb2tpZSkge1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjMzOTU6XHRcdFx0ZW1pdF9zdG9yZV9zdGFja19pbW02NChcdTAwMjZwcm9nLCBCUEZfUkVHXzAsIC1mdW5jX21ldGFfb2ZmLFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTMzOTYtXHRcdFx0XHRmdW5jX21ldGEgfCAoY3VyX2Nvb2tpZSBcdTAwM2NcdTAwM2MgQlBGX1RSQU1QX0NPT0tJRV9JTkRFWF9TSElGVCkpO1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zNDA3PXN0YXRpYyBpbnQgaW52b2tlX2JwZl9tb2RfcmV0KGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTggKipwcHJvZyxcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzQxOC1cdGVtaXRfbW92X2ltbTMyKFx1MDAyNnByb2csIGZhbHNlLCBCUEZfUkVHXzAsIDApO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM0MTk6XHRlbWl0X3N0eChcdTAwMjZwcm9nLCBCUEZfRFcsIEJQRl9SRUdfRlAsIEJQRl9SRUdfMCwgLTgpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM0MjAtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0bC1cdTAwM2Vucl9ub2RlczsgaSYjNDM7JiM0MzspIHtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MzUwOT1zdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLCB2b2lkICpyd19pbWFnZSxcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzY2MC1cdC8qIG1vdiBRV09SRCBQVFIgW3JicCAtIHJieF9vZmZdLCByYnggKi9cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozNjYxOlx0ZW1pdF9zdHgoXHUwMDI2cHJvZywgQlBGX0RXLCBCUEZfUkVHX0ZQLCBCUEZfUkVHXzYsIC1yYnhfb2ZmKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNjYyLVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNjY0LVx0LyogU3RvcmUgbnVtYmVyIG9mIGFyZ3VtZW50IHJlZ2lzdGVycyBvZiB0aGUgdHJhY2VkIGZ1bmN0aW9uICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzY2NTpcdGVtaXRfc3RvcmVfc3RhY2tfaW1tNjQoXHUwMDI2cHJvZywgQlBGX1JFR18wLCAtZnVuY19tZXRhX29mZiwgZnVuY19tZXRhKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNjY2LVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNjY4LVx0XHQvKiBTdG9yZSBJUCBhZGRyZXNzIG9mIHRoZSB0cmFjZWQgZnVuY3Rpb24gKi9cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozNjY5Olx0XHRlbWl0X3N0b3JlX3N0YWNrX2ltbTY0KFx1MDAyNnByb2csIEJQRl9SRUdfMCwgLWlwX29mZiwgKGxvbmcpZnVuY19hZGRyKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNjcwLVx0fVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNjg2LVx0XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgY29va2llX2NudDsgaSYjNDM7JiM0MzspXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzY4NzpcdFx0XHRlbWl0X3N0b3JlX3N0YWNrX2ltbTY0KFx1MDAyNnByb2csIEJQRl9SRUdfMCwgLWNvb2tpZV9vZmYgJiM0MzsgOCAqIGksIDApO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM2ODgtXHRcdC8qIGNsZWFyIHRoZSByZXR1cm4gdmFsdWUgdG8gbWFrZSBzdXJlIGZlbnRyeSBhbHdheXMgZ2V0IDAgKi9cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozNjg5Olx0XHRlbWl0X3N0b3JlX3N0YWNrX2ltbTY0KFx1MDAyNnByb2csIEJQRl9SRUdfMCwgLTgsIDApO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM2OTAtXHR9XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM3MzMtXHRcdC8qIHJlbWVtYmVyIHJldHVybiB2YWx1ZSBpbiBhIHN0YWNrIGZvciBicGYgcHJvZyB0byBhY2Nlc3MgKi9cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozNzM0Olx0XHRlbWl0X3N0eChcdTAwMjZwcm9nLCBCUEZfRFcsIEJQRl9SRUdfRlAsIEJQRl9SRUdfMCwgLTgpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM3MzUtXHRcdGltLVx1MDAzZWlwX2FmdGVyX2NhbGwgPSBpbWFnZSAmIzQzOyAocHJvZyAtICh1OCAqKXJ3X2ltYWdlKTtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzc1Ny1cdGlmIChicGZfZnNlc3Npb25fY250KHRub2RlcykpXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6Mzc1ODpcdFx0ZW1pdF9zdG9yZV9zdGFja19pbW02NChcdTAwMjZwcm9nLCBCUEZfUkVHXzAsIC1mdW5jX21ldGFfb2ZmLCBmdW5jX21ldGEpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM3NTktXG4tLVxuZHJpdmVycy9kbWEvcGwzMzAuYz0xMTE5PXN0YXRpYyB1MzIgX2VtaXRfbG9hZCh1bnNpZ25lZCBpbnQgZHJ5X3J1biwgdTggYnVmW10sXG4tLVxuZHJpdmVycy9kbWEvcGwzMzAuYy0xMTUxLVxuZHJpdmVycy9kbWEvcGwzMzAuYzoxMTUyOnN0YXRpYyBpbmxpbmUgdTMyIF9lbWl0X3N0b3JlKHVuc2lnbmVkIGludCBkcnlfcnVuLCB1OCBidWZbXSxcbmRyaXZlcnMvZG1hL3BsMzMwLmMtMTE1My1cdGVudW0gcGwzMzBfY29uZCBjb25kLCBlbnVtIGRtYV90cmFuc2Zlcl9kaXJlY3Rpb24gZGlyZWN0aW9uLFxuLS1cbmRyaXZlcnMvZG1hL3BsMzMwLmM9MTE4NT1zdGF0aWMgaW5saW5lIGludCBfbGRzdF9wZXJpcGhlcmFsKHN0cnVjdCBwbDMzMF9kbWFjICpwbDMzMCxcbi0tXG5kcml2ZXJzL2RtYS9wbDMzMC5jLTEyMDEtXHRcdFx0cHhzLVx1MDAzZWRlc2MtXHUwMDNlcGVyaSk7XG5kcml2ZXJzL2RtYS9wbDMzMC5jOjEyMDI6XHRcdG9mZiAmIzQzOz0gX2VtaXRfc3RvcmUoZHJ5X3J1biwgXHUwMDI2YnVmW29mZl0sIGNvbmQsIHB4cy1cdTAwM2VkZXNjLVx1MDAzZXJxdHlwZSxcbmRyaXZlcnMvZG1hL3BsMzMwLmMtMTIwMy1cdFx0XHRweHMtXHUwMDNlZGVzYy1cdTAwM2VwZXJpKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2lndF9nZW1fdXRpbHMuYz00MT1zdHJ1Y3QgaTkxNV92bWEgKlxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pZ3RfZ2VtX3V0aWxzLmM6NDI6aWd0X2VtaXRfc3RvcmVfZHcoc3RydWN0IGk5MTVfdm1hICp2bWEsXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2lndF9nZW1fdXRpbHMuYy00My1cdFx0ICB1NjQgb2Zmc2V0LFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaWd0X2dlbV91dGlscy5jPTExMT1pbnQgaWd0X2dwdV9maWxsX2R3KHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2lndF9nZW1fdXRpbHMuYy0xMjItXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2lndF9nZW1fdXRpbHMuYzoxMjM6XHRiYXRjaCA9IGlndF9lbWl0X3N0b3JlX2R3KHZtYSwgb2Zmc2V0LCBjb3VudCwgdmFsKTtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaWd0X2dlbV91dGlscy5jLTEyNC1cdGlmIChJU19FUlIoYmF0Y2gpKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaWd0X2dlbV91dGlscy5oPTI0PXN0cnVjdCBpOTE1X3ZtYSAqXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2lndF9nZW1fdXRpbHMuaDoyNTppZ3RfZW1pdF9zdG9yZV9kdyhzdHJ1Y3QgaTkxNV92bWEgKnZtYSxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaWd0X2dlbV91dGlscy5oLTI2LVx0XHQgIHU2NCBvZmZzZXQsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvZ2VuN19yZW5kZXJjbGVhci5jPTIzND1zdGF0aWMgdm9pZFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvZ2VuN19yZW5kZXJjbGVhci5jOjIzNTpnZW43X2VtaXRfc3RhdGVfYmFzZV9hZGRyZXNzKHN0cnVjdCBiYXRjaF9jaHVuayAqYmF0Y2gsXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9nZW43X3JlbmRlcmNsZWFyLmMtMjM2LVx0XHRcdCAgICAgdTMyIHN1cmZhY2Vfc3RhdGVfYmFzZSlcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9nZW43X3JlbmRlcmNsZWFyLmM9Mzc2PXN0YXRpYyB2b2lkIGVtaXRfYmF0Y2goc3RydWN0IGk5MTVfdm1hICogY29uc3Qgdm1hLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2dlbjdfcmVuZGVyY2xlYXIuYy00MTctXHRnZW43X2VtaXRfcGlwZWxpbmVfZmx1c2goXHUwMDI2Y21kcyk7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9nZW43X3JlbmRlcmNsZWFyLmM6NDE4Olx0Z2VuN19lbWl0X3N0YXRlX2Jhc2VfYWRkcmVzcyhcdTAwMjZjbWRzLCBkZXNjcmlwdG9ycyk7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9nZW43X3JlbmRlcmNsZWFyLmMtNDE5LVx0Z2VuN19lbWl0X3BpcGVsaW5lX2ludmFsaWRhdGUoXHUwMDI2Y21kcyk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfZW5naW5lX3BtLmM9MzQ9c3RhdGljIHUzMiAqZW1pdF93YWl0KHUzMiAqY3MsIHUzMiBvZmZzZXQsIGludCBvcCwgdTMyIHZhbHVlKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2VuZ2luZV9wbS5jLTQ2LVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfZW5naW5lX3BtLmM6NDc6c3RhdGljIHUzMiAqZW1pdF9zdG9yZSh1MzIgKmNzLCB1MzIgb2Zmc2V0LCB1MzIgdmFsdWUpXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9lbmdpbmVfcG0uYy00OC17XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfZW5naW5lX3BtLmM9NzM9c3RhdGljIGludCBfX21lYXN1cmVfdGltZXN0YW1wcyhzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfZW5naW5lX3BtLmMtOTItXHQvKiBTaWduYWwgXHUwMDI2IHdhaXQgZm9yIHN0YXJ0ICovXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9lbmdpbmVfcG0uYzo5MzpcdGNzID0gZW1pdF9zdG9yZShjcywgb2Zmc2V0ICYjNDM7IDQwMDgsIDEpO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfZW5naW5lX3BtLmMtOTQtXHRjcyA9IGVtaXRfd2FpdChjcywgb2Zmc2V0ICYjNDM7IDQwMDgsIE1JX1NFTUFQSE9SRV9TQURfTkVRX1NERCwgMSk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jPTE5NTk9c3RhdGljIHUzMiAqZW1pdF90aW1lc3RhbXBfc3RvcmUodTMyICpjcywgc3RydWN0IGludGVsX2NvbnRleHQgKmNlLCB1MzIgb2Zmc2V0KVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3JlcXVlc3QuYy0xOTY4LVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jOjE5Njk6c3RhdGljIHUzMiAqZW1pdF9zdG9yZV9kdyh1MzIgKmNzLCB1MzIgb2Zmc2V0LCB1MzIgdmFsdWUpXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9yZXF1ZXN0LmMtMTk3MC17XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jPTIwMTQ9c3RhdGljIGludCBtZWFzdXJlX3NlbWFwaG9yZV9yZXNwb25zZShzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jLTIwNDctXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9yZXF1ZXN0LmM6MjA0ODpcdGNzID0gZW1pdF9zdG9yZV9kdyhjcywgb2Zmc2V0LCAwKTtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3JlcXVlc3QuYy0yMDQ5LVx0Zm9yIChpID0gMTsgaSBcdTAwM2M9IEFSUkFZX1NJWkUoZWxhcHNlZCk7IGkmIzQzOyYjNDM7KSB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jLTIwNTEtXHRcdGNzID0gZW1pdF90aW1lc3RhbXBfc3RvcmUoY3MsIGNlLCBvZmZzZXQgJiM0MzsgaSAqIHNpemVvZih1MzIpKTtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3JlcXVlc3QuYzoyMDUyOlx0XHRjcyA9IGVtaXRfc3RvcmVfZHcoY3MsIG9mZnNldCwgMCk7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9yZXF1ZXN0LmMtMjA1My1cdH1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9yZXF1ZXN0LmM9MjE2MD1zdGF0aWMgaW50IG1lYXN1cmVfYnVzeV9kaXNwYXRjaChzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jLTIxOTYtXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9yZXF1ZXN0LmM6MjE5NzpcdFx0Y3MgPSBlbWl0X3N0b3JlX2R3KGNzLCBvZmZzZXQgJiM0MzsgaSAqIHNpemVvZih1MzIpLCAtMSk7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9yZXF1ZXN0LmMtMjE5OC1cdFx0Y3MgPSBlbWl0X3NlbWFwaG9yZV9wb2xsX3VudGlsKGNzLCBvZmZzZXQsIGkpO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3JlcXVlc3QuYz0yNDQ4PXN0YXRpYyBpbnQgbWVhc3VyZV9wcmVlbXB0aW9uKHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSlcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9yZXF1ZXN0LmMtMjQ5Mi1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3JlcXVlc3QuYzoyNDkzOlx0XHRjcyA9IGVtaXRfc3RvcmVfZHcoY3MsIGFkZHIsIC0xKTtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3JlcXVlc3QuYy0yNDk0LVx0XHRjcyA9IGVtaXRfc2VtYXBob3JlX3BvbGxfdW50aWwoY3MsIG9mZnNldCwgaSk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jLTI1MTgtXHRcdGNzID0gZW1pdF90aW1lc3RhbXBfc3RvcmUoY3MsIGNlLCBhZGRyKTtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3JlcXVlc3QuYzoyNTE5Olx0XHRjcyA9IGVtaXRfc3RvcmVfZHcoY3MsIG9mZnNldCwgaSk7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9yZXF1ZXN0LmMtMjUyMC1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9yZXF1ZXN0LmM9MjU2OD1zdGF0aWMgaW50IG1lYXN1cmVfY29tcGxldGlvbihzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jLTI2MDQtXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9yZXF1ZXN0LmM6MjYwNTpcdFx0Y3MgPSBlbWl0X3N0b3JlX2R3KGNzLCBvZmZzZXQgJiM0MzsgaSAqIHNpemVvZih1MzIpLCAtMSk7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9yZXF1ZXN0LmMtMjYwNi1cdFx0Y3MgPSBlbWl0X3NlbWFwaG9yZV9wb2xsX3VudGlsKGNzLCBvZmZzZXQsIGkpO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yaW5nX29wcy5jPTk1PXN0YXRpYyBpbnQgZW1pdF91c2VyX2ludGVycnVwdCh1MzIgKmR3LCBpbnQgaSlcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmluZ19vcHMuYy0xMDMtXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmluZ19vcHMuYzoxMDQ6c3RhdGljIGludCBlbWl0X3N0b3JlX2ltbV9nZ3R0KHUzMiBhZGRyLCB1MzIgdmFsdWUsIHUzMiAqZHcsIGludCBpKVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jpbmdfb3BzLmMtMTA1LXtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmluZ19vcHMuYz0xNjk9c3RhdGljIGludCBlbWl0X3BpcGVfaW52YWxpZGF0ZShzdHJ1Y3QgeGVfZXhlY19xdWV1ZSAqcSwgdTMyIG1hc2tfZmxhZ3MsXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jpbmdfb3BzLmMtMTk4LVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jpbmdfb3BzLmM6MTk5OnN0YXRpYyBpbnQgZW1pdF9zdG9yZV9pbW1fcHBndHRfcG9zdGVkKHU2NCBhZGRyLCB1NjQgdmFsdWUsXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDQ6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE0MDIKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgeDg2IEJQRiBKSVQgQ29tcGlsZXIqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgZW1pdF9zdGAgZnVuY3Rpb24uIFJpZ2h0LCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgaXQmIzM5O3MgbG9jYXRlZCB3aXRoaW4gdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyB4ODYgQlBGIEpJVCBjb21waWxhdGlvbiBjb2RlLiBBIHF1aWNrIG1lbnRhbCBub3RlOiB0aGUgZmlsZSBwYXRoIGlzIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLiBOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhhdCBmaWxlLiBJJiMzOTtsbCBuZWVkIHRvIG9wZW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AgYW5kIHRha2UgYSBsb29rIGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZW1pdF9zdGAgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGlzIEpJVCBjb21waWxhdGlvbiBwcm9jZXNzLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscyBvZiBob3cgc3RvcmUgaW5zdHJ1Y3Rpb25zIGFyZSB0cmFuc2xhdGVkIHRvIHg4NiBhc3NlbWJseS4gVGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDQ6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZW1pdF9zdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgODc4IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5hcmNoL2FybS9uZXQvYnBmX2ppdF8zMi5jPTEyMDg9c3RhdGljIGJvb2wgaXNfbGRzdF9pbW04KHMxNiBvZmYsIGNvbnN0IHU4IHNpemUpXG4tLVxuYXJjaC9hcm0vbmV0L2JwZl9qaXRfMzIuYy0xMjI2LS8qICooc2l6ZSAqKShkc3QgJiM0Mzsgb2ZmKSA9IHNyYyAqL1xuYXJjaC9hcm0vbmV0L2JwZl9qaXRfMzIuYzoxMjI3OnN0YXRpYyBpbmxpbmUgdm9pZCBlbWl0X3N0cl9yKGNvbnN0IHM4IGRzdCwgY29uc3Qgczggc3JjW10sXG5hcmNoL2FybS9uZXQvYnBmX2ppdF8zMi5jLTEyMjgtXHRcdFx0ICAgICAgczE2IG9mZiwgc3RydWN0IGppdF9jdHggKmN0eCwgY29uc3QgdTggc3ope1xuLS1cbmFyY2gvYXJtL25ldC9icGZfaml0XzMyLmM9MTU4OT1zdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuLS1cbmFyY2gvYXJtL25ldC9icGZfaml0XzMyLmMtMTg5NS1cdFx0fVxuYXJjaC9hcm0vbmV0L2JwZl9qaXRfMzIuYzoxODk2Olx0XHRlbWl0X3N0cl9yKGRzdF9sbywgdG1wMiwgb2ZmLCBjdHgsIEJQRl9TSVpFKGNvZGUpKTtcbmFyY2gvYXJtL25ldC9icGZfaml0XzMyLmMtMTg5Ny1cdFx0YnJlYWs7XG4tLVxuYXJjaC9hcm0vbmV0L2JwZl9qaXRfMzIuYy0xOTA3LVx0XHRycyA9IGFybV9icGZfZ2V0X3JlZzY0KHNyYywgdG1wMiwgY3R4KTtcbmFyY2gvYXJtL25ldC9icGZfaml0XzMyLmM6MTkwODpcdFx0ZW1pdF9zdHJfcihkc3RfbG8sIHJzLCBvZmYsIGN0eCwgQlBGX1NJWkUoY29kZSkpO1xuYXJjaC9hcm0vbmV0L2JwZl9qaXRfMzIuYy0xOTA5LVx0XHRicmVhaztcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0xMjExPXN0YXRpYyBjb25zdCB1OCBzdGFja19hcmdfcmVnW10gPSB7IEE2NF9SKDUpLCBBNjRfUig2KSwgQTY0X1IoNykgfTtcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMjE0LVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MTIxNTpzdGF0aWMgdm9pZCBlbWl0X3N0YWNrX2FyZ19sb2FkKHU4IGRzdCwgczE2IGJwZl9vZmYsIHN0cnVjdCBqaXRfY3R4ICpjdHgpXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMjE2LXtcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMjI0LVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MTIyNTpzdGF0aWMgdm9pZCBlbWl0X3N0YWNrX2FyZ19zdG9yZSh1OCBzcmNfYTY0LCBzMTYgYnBmX29mZiwgc3RydWN0IGppdF9jdHggKmN0eClcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTEyMjYte1xuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTEyMzQtXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxMjM1OnN0YXRpYyB2b2lkIGVtaXRfc3RhY2tfYXJnX3N0b3JlX2ltbShzMzIgaW1tLCBzMTYgYnBmX29mZiwgY29uc3QgdTggdG1wLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4KVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTIzNi17XG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MTI1Mz1zdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTE3MDItXHRcdGlmIChpbnNuLVx1MDAzZXNyY19yZWcgPT0gQlBGX1JFR19QQVJBTVMpIHtcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjE3MDM6XHRcdFx0ZW1pdF9zdGFja19hcmdfbG9hZChkc3QsIG9mZiwgY3R4KTtcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTE3MDQtXHRcdFx0YnJlYWs7XG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTgxNS1cdFx0aWYgKGluc24tXHUwMDNlZHN0X3JlZyA9PSBCUEZfUkVHX1BBUkFNUykge1xuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MTgxNjpcdFx0XHRlbWl0X3N0YWNrX2FyZ19zdG9yZV9pbW0oaW1tLCBvZmYsIHRtcCwgY3R4KTtcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTE4MTctXHRcdFx0YnJlYWs7XG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTg4NC1cdFx0aWYgKGluc24tXHUwMDNlZHN0X3JlZyA9PSBCUEZfUkVHX1BBUkFNUykge1xuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MTg4NTpcdFx0XHRlbWl0X3N0YWNrX2FyZ19zdG9yZShzcmMsIG9mZiwgY3R4KTtcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTE4ODYtXHRcdFx0YnJlYWs7XG4tLVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYz0yOTE9c3RhdGljIGludCBlbWl0X2JwZl90YWlsX2NhbGwoc3RydWN0IGppdF9jdHggKmN0eCwgaW50IGluc24pXG4tLVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0zNjEtXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjM2MjpzdGF0aWMgdm9pZCBlbWl0X3N0b3JlX3N0YWNrX2ltbTY0KHN0cnVjdCBqaXRfY3R4ICpjdHgsIGludCByZWcsIGludCBzdGFja19vZmYsIHU2NCBpbW02NClcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMzYzLXtcbi0tXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jPTE3MDU9c3RhdGljIGludCBpbnZva2VfYnBmX3Byb2coc3RydWN0IGppdF9jdHggKmN0eCwgc3RydWN0IGJwZl90cmFtcF9ub2RlICpuLFxuLS1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMTcxMy1cdGlmIChuLVx1MDAzZWNvb2tpZSlcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM6MTcxNDpcdFx0ZW1pdF9zdG9yZV9zdGFja19pbW02NChjdHgsIExPT05HQVJDSF9HUFJfVDEsXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTE3MTUtXHRcdFx0XHQgICAgICAtcnVuX2N0eF9vZmYgJiM0MzsgY29va2llX29mZiwgbi1cdTAwM2Vjb29raWUpO1xuLS1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM9MTc2OD1zdGF0aWMgaW50IGludm9rZV9icGYoc3RydWN0IGppdF9jdHggKmN0eCwgc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG4sXG4tLVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0xNzc5LVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoxNzgwOlx0XHRcdGVtaXRfc3RvcmVfc3RhY2tfaW1tNjQoY3R4LCBMT09OR0FSQ0hfR1BSX1QxLCAtZnVuY19tZXRhX29mZiwgbWV0YSk7XG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTE3ODEtXHRcdFx0Y3VyX2Nvb2tpZS0tO1xuLS1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM9MTgzNz1zdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBqaXRfY3R4ICpjdHgsIHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLFxuLS1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMTk5MS1cdGlmIChmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfSVBfQVJHKVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoxOTkyOlx0XHRlbWl0X3N0b3JlX3N0YWNrX2ltbTY0KGN0eCwgTE9PTkdBUkNIX0dQUl9UMSwgLWlwX29mZiwgKHU2NClmdW5jX2FkZHIpO1xuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0xOTkzLVxuLS1cbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMTk5NS1cdGZ1bmNfbWV0YSA9IG5yX2FyZ19zbG90cztcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM6MTk5NjpcdGVtaXRfc3RvcmVfc3RhY2tfaW1tNjQoY3R4LCBMT09OR0FSQ0hfR1BSX1QxLCAtZnVuY19tZXRhX29mZiwgZnVuY19tZXRhKTtcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMTk5Ny1cbi0tXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIwNzMtXHRpZiAoYnBmX2ZzZXNzaW9uX2NudCh0bm9kZXMpKVxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoyMDc0Olx0XHRlbWl0X3N0b3JlX3N0YWNrX2ltbTY0KGN0eCwgTE9PTkdBUkNIX0dQUl9UMSwgLWZ1bmNfbWV0YV9vZmYsIGZ1bmNfbWV0YSk7XG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIwNzUtXG4tLVxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXAzMi5jPTY1ND1zdGF0aWMgdm9pZCBlbWl0X2xkeChzdHJ1Y3Qgaml0X2NvbnRleHQgKmN0eCxcbi0tXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcDMyLmMtNjg4LS8qIFN0b3JlIG9wZXJhdGlvbjogKihzaXplICopKGRzdCAmIzQzOyBvZmYpID0gc3JjICovXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcDMyLmM6Njg5OnN0YXRpYyB2b2lkIGVtaXRfc3R4KHN0cnVjdCBqaXRfY29udGV4dCAqY3R4LFxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXAzMi5jLTY5MC1cdFx0ICAgICBjb25zdCB1OCBkc3QsIGNvbnN0IHU4IHNyY1tdLCBzMTYgb2ZmLCB1OCBzaXplKVxuLS1cbmFyY2gvbWlwcy9uZXQvYnBmX2ppdF9jb21wMzIuYz0xNDYzPWludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jb250ZXh0ICpjdHgpXG4tLVxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXAzMi5jLTE2NzYtXHRcdH1cbmFyY2gvbWlwcy9uZXQvYnBmX2ppdF9jb21wMzIuYzoxNjc3Olx0XHRlbWl0X3N0eChjdHgsIGxvKGRzdCksIHRtcCwgb2ZmLCBCUEZfU0laRShjb2RlKSk7XG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTY3OC1cdFx0YnJlYWs7XG4tLVxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXAzMi5jLTE2ODMtXHRjYXNlIEJQRl9TVFggfCBCUEZfTUVNIHwgQlBGX0RXOlxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXAzMi5jOjE2ODQ6XHRcdGVtaXRfc3R4KGN0eCwgbG8oZHN0KSwgc3JjLCBvZmYsIEJQRl9TSVpFKGNvZGUpKTtcbmFyY2gvbWlwcy9uZXQvYnBmX2ppdF9jb21wMzIuYy0xNjg1LVx0XHRicmVhaztcbi0tXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcDY0LmM9MzM0PXN0YXRpYyB2b2lkIGVtaXRfbGR4KHN0cnVjdCBqaXRfY29udGV4dCAqY3R4LCB1OCBkc3QsIHU4IHNyYywgczE2IG9mZiwgdTggc2l6ZSlcbi0tXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcDY0LmMtMzU3LS8qIFN0b3JlIG9wZXJhdGlvbjogKihzaXplICopKGRzdCAmIzQzOyBvZmYpID0gc3JjICovXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcDY0LmM6MzU4OnN0YXRpYyB2b2lkIGVtaXRfc3R4KHN0cnVjdCBqaXRfY29udGV4dCAqY3R4LCB1OCBkc3QsIHU4IHNyYywgczE2IG9mZiwgdTggc2l6ZSlcbmFyY2gvbWlwcy9uZXQvYnBmX2ppdF9jb21wNjQuYy0zNTkte1xuLS1cbmFyY2gvbWlwcy9uZXQvYnBmX2ppdF9jb21wNjQuYz02MzU9aW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2NvbnRleHQgKmN0eClcbi0tXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcDY0LmMtODM1LVx0XHRlbWl0X21vdl9pKGN0eCwgTUlQU19SX1Q0LCBpbW0pO1xuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXA2NC5jOjgzNjpcdFx0ZW1pdF9zdHgoY3R4LCBkc3QsIE1JUFNfUl9UNCwgb2ZmLCBCUEZfU0laRShjb2RlKSk7XG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcDY0LmMtODM3LVx0XHRicmVhaztcbi0tXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcDY0LmMtODQyLVx0Y2FzZSBCUEZfU1RYIHwgQlBGX01FTSB8IEJQRl9EVzpcbmFyY2gvbWlwcy9uZXQvYnBmX2ppdF9jb21wNjQuYzo4NDM6XHRcdGVtaXRfc3R4KGN0eCwgZHN0LCBzcmMsIG9mZiwgQlBGX1NJWkUoY29kZSkpO1xuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXA2NC5jLTg0NC1cdFx0YnJlYWs7XG4tLVxuYXJjaC9wYXJpc2MvbmV0L2JwZl9qaXRfY29tcDMyLmM9MTAwNj1zdGF0aWMgaW50IGVtaXRfbG9hZF9yNjQoY29uc3QgczggKmRzdCwgY29uc3QgczggKnNyYywgczE2IG9mZixcbi0tXG5hcmNoL3BhcmlzYy9uZXQvYnBmX2ppdF9jb21wMzIuYy0xMDUxLVxuYXJjaC9wYXJpc2MvbmV0L2JwZl9qaXRfY29tcDMyLmM6MTA1MjpzdGF0aWMgaW50IGVtaXRfc3RvcmVfcjY0KGNvbnN0IHM4ICpkc3QsIGNvbnN0IHM4ICpzcmMsIHMxNiBvZmYsXG5hcmNoL3BhcmlzYy9uZXQvYnBmX2ppdF9jb21wMzIuYy0xMDUzLVx0XHRcdCAgc3RydWN0IGhwcGFfaml0X2NvbnRleHQgKmN0eCwgY29uc3QgdTggc2l6ZSxcbi0tXG5hcmNoL3BhcmlzYy9uZXQvYnBmX2ppdF9jb21wMzIuYz0xMTE2PWludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBocHBhX2ppdF9jb250ZXh0ICpjdHgsXG4tLVxuYXJjaC9wYXJpc2MvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTQ0Ni1cbmFyY2gvcGFyaXNjL25ldC9icGZfaml0X2NvbXAzMi5jOjE0NDc6XHRcdGlmIChlbWl0X3N0b3JlX3I2NChkc3QsIHNyYywgb2ZmLCBjdHgsIEJQRl9TSVpFKGNvZGUpLFxuYXJjaC9wYXJpc2MvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTQ0OC1cdFx0XHRcdCAgIEJQRl9NT0RFKGNvZGUpKSlcbi0tXG5hcmNoL3BhcmlzYy9uZXQvYnBmX2ppdF9jb21wNjQuYz01MDU9c3RhdGljIHZvaWQgZW1pdF9jYWxsX2xpYmdjY19sbCh2b2lkICpmdW5jLCBjb25zdCBzOCBhcmcwLFxuLS1cbmFyY2gvcGFyaXNjL25ldC9icGZfaml0X2NvbXA2NC5jLTU1My1cbmFyY2gvcGFyaXNjL25ldC9icGZfaml0X2NvbXA2NC5jOjU1NDpzdGF0aWMgdm9pZCBlbWl0X3N0b3JlKGNvbnN0IHM4IHJkLCBjb25zdCBzOCBycywgczE2IG9mZixcbmFyY2gvcGFyaXNjL25ldC9icGZfaml0X2NvbXA2NC5jLTU1NS1cdFx0XHQgIHN0cnVjdCBocHBhX2ppdF9jb250ZXh0ICpjdHgsIGNvbnN0IHU4IHNpemUsXG4tLVxuYXJjaC9wYXJpc2MvbmV0L2JwZl9qaXRfY29tcDY0LmM9NTkyPWludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBocHBhX2ppdF9jb250ZXh0ICpjdHgsXG4tLVxuYXJjaC9wYXJpc2MvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTA4MS1cbmFyY2gvcGFyaXNjL25ldC9icGZfaml0X2NvbXA2NC5jOjEwODI6XHRcdGVtaXRfc3RvcmUocmQsIHJzLCBvZmYsIGN0eCwgQlBGX1NJWkUoY29kZSksIEJQRl9NT0RFKGNvZGUpKTtcbmFyY2gvcGFyaXNjL25ldC9icGZfaml0X2NvbXA2NC5jLTEwODMtXHRcdGJyZWFrO1xuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmM9ODM1PXN0YXRpYyBpbnQgZW1pdF9sb2FkX3I2NChjb25zdCBzOCAqZHN0LCBjb25zdCBzOCAqc3JjLCBzMTYgb2ZmLFxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmMtODcxLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYzo4NzI6c3RhdGljIGludCBlbWl0X3N0b3JlX3I2NChjb25zdCBzOCAqZHN0LCBjb25zdCBzOCAqc3JjLCBzMTYgb2ZmLFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYy04NzMtXHRcdFx0ICBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCwgY29uc3QgdTggc2l6ZSxcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jPTk1Mz1pbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jLTEyNjgtXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jOjEyNjk6XHRcdGlmIChlbWl0X3N0b3JlX3I2NChkc3QsIHNyYywgb2ZmLCBjdHgsIEJQRl9TSVpFKGNvZGUpLFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYy0xMjcwLVx0XHRcdFx0ICAgQlBGX01PREUoY29kZSkpKVxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTI4MS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmM6MTI4MjpcdFx0aWYgKGVtaXRfc3RvcmVfcjY0KGRzdCwgc3JjLCBvZmYsIGN0eCwgQlBGX1NJWkUoY29kZSksXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jLTEyODMtXHRcdFx0XHQgICBCUEZfTU9ERShjb2RlKSkpXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz00NzY9c3RhdGljIHZvaWQgZW1pdF9sZHhfaW5zbih1OCByZCwgczE2IG9mZiwgdTggcnMsIHU4IHNpemUsIGJvb2wgc2lnbl9leHQsXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy00OTUtXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjQ5NjpzdGF0aWMgdm9pZCBlbWl0X3N0eF9pbnNuKHU4IHJkLCBzMTYgb2ZmLCB1OCBycywgdTggc2l6ZSwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgpXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTQ5Ny17XG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz01MTQ9c3RhdGljIHZvaWQgZW1pdF9sZHgodTggcmQsIHMxNiBvZmYsIHU4IHJzLCB1OCBzaXplLCBib29sIHNpZ25fZXh0LFxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtNTMwLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzo1MzE6c3RhdGljIHZvaWQgZW1pdF9zdCh1OCByZCwgczE2IG9mZiwgczMyIGltbSwgdTggc2l6ZSwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgpXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTUzMi17XG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy01MzUtXHRcdGN0eC1cdTAwM2VleF9pbnNuX29mZiA9IGN0eC1cdTAwM2VuaW5zbnM7XG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjUzNjpcdFx0ZW1pdF9zdHhfaW5zbihyZCwgb2ZmLCBSVl9SRUdfVDEsIHNpemUsIGN0eCk7XG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTUzNy1cdFx0Y3R4LVx1MDAzZWV4X2ptcF9vZmYgPSBjdHgtXHUwMDNlbmluc25zO1xuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtNTQzLVx0Y3R4LVx1MDAzZWV4X2luc25fb2ZmID0gY3R4LVx1MDAzZW5pbnNucztcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6NTQ0Olx0ZW1pdF9zdHhfaW5zbihSVl9SRUdfVDIsIDAsIFJWX1JFR19UMSwgc2l6ZSwgY3R4KTtcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtNTQ1LVx0Y3R4LVx1MDAzZWV4X2ptcF9vZmYgPSBjdHgtXHUwMDNlbmluc25zO1xuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtNTQ3LVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzo1NDg6c3RhdGljIHZvaWQgZW1pdF9zdHgodTggcmQsIHMxNiBvZmYsIHU4IHJzLCB1OCBzaXplLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eClcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtNTQ5LXtcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTU1MS1cdFx0Y3R4LVx1MDAzZWV4X2luc25fb2ZmID0gY3R4LVx1MDAzZW5pbnNucztcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6NTUyOlx0XHRlbWl0X3N0eF9pbnNuKHJkLCBvZmYsIHJzLCBzaXplLCBjdHgpO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy01NTMtXHRcdGN0eC1cdTAwM2VleF9qbXBfb2ZmID0gY3R4LVx1MDAzZW5pbnNucztcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTU1OS1cdGN0eC1cdTAwM2VleF9pbnNuX29mZiA9IGN0eC1cdTAwM2VuaW5zbnM7XG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjU2MDpcdGVtaXRfc3R4X2luc24oUlZfUkVHX1QxLCAwLCBycywgc2l6ZSwgY3R4KTtcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtNTYxLVx0Y3R4LVx1MDAzZWV4X2ptcF9vZmYgPSBjdHgtXHUwMDNlbmluc25zO1xuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9NTY0PXN0YXRpYyBpbnQgZW1pdF9hdG9taWNfbGRfc3QodTggcmQsIHU4IHJzLCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy01OTUtXHRcdGVtaXRfZmVuY2VfcndfdyhjdHgpO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzo1OTY6XHRcdGVtaXRfc3R4KHJkLCBvZmYsIHJzLCBCUEZfU0laRShjb2RlKSwgY3R4KTtcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtNTk3LVx0XHRicmVhaztcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTkxNj1zdGF0aWMgdm9pZCByZXN0b3JlX3N0YWNrX2FyZ3MoaW50IG5yX3N0YWNrX2FyZ3MsIGludCBhcmdzX29mZiwgaW50IHN0a19hcmdfb2ZmLFxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtOTI4LVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzo5Mjk6c3RhdGljIHZvaWQgZW1pdF9zdG9yZV9zdGFja19pbW02NCh1OCByZWcsIGludCBzdGFja19vZmYsIHU2NCBpbW02NCxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtOTMwLVx0XHRcdFx0ICAgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgpXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz05Mzc9c3RhdGljIGludCBpbnZva2VfYnBmX3Byb2coc3RydWN0IGJwZl90cmFtcF9ub2RlICpub2RlLCBpbnQgYXJnc19vZmYsIGludCByZXR2YWxfb2ZmLFxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtOTQ0LVx0aWYgKG5vZGUtXHUwMDNlY29va2llKVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzo5NDU6XHRcdGVtaXRfc3RvcmVfc3RhY2tfaW1tNjQoUlZfUkVHX1QxLCAtcnVuX2N0eF9vZmYgJiM0MzsgY29va2llX29mZiwgbm9kZS1cdTAwM2Vjb29raWUsIGN0eCk7XG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTk0Ni1cdGVsc2Vcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTk5OT1zdGF0aWMgaW50IGludm9rZV9icGYoc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG4sIGludCBhcmdzX29mZiwgaW50IHJldHZhbF9vZmYsXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMDEwLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxMDExOlx0XHRcdGVtaXRfc3RvcmVfc3RhY2tfaW1tNjQoUlZfUkVHX1QxLCAtZnVuY19tZXRhX29mZiwgbWV0YSwgY3R4KTtcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTAxMi1cdFx0XHRjdXJfY29va2llLS07XG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz0xMDIyPXN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMTY3LVx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfVFJBTVBfRl9JUF9BUkcpXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjExNjg6XHRcdGVtaXRfc3RvcmVfc3RhY2tfaW1tNjQoUlZfUkVHX1QxLCAtaXBfb2ZmLCAodTY0KWZ1bmNfYWRkciwgY3R4KTtcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTE2OS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTE3MC1cdGZ1bmNfbWV0YSA9IG5yX2FyZ19zbG90cztcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTE3MTpcdGVtaXRfc3RvcmVfc3RhY2tfaW1tNjQoUlZfUkVHX1QxLCAtZnVuY19tZXRhX29mZiwgZnVuY19tZXRhLCBjdHgpO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMTcyLVxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTI0MS1cdGlmIChicGZfZnNlc3Npb25fY250KHRub2RlcykpXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjEyNDI6XHRcdGVtaXRfc3RvcmVfc3RhY2tfaW1tNjQoUlZfUkVHX1QxLCAtZnVuY19tZXRhX29mZiwgZnVuY19tZXRhLCBjdHgpO1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMjQzLVxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9MTM2OT1pbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCxcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTE5NDUtXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjE5NDY6XHRcdGVtaXRfc3QocmQsIG9mZiwgaW1tLCBCUEZfU0laRShjb2RlKSwgY3R4KTtcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTk0Ny1cbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTE5NjctXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjE5Njg6XHRcdGVtaXRfc3R4KHJkLCBvZmYsIHJzLCBCUEZfU0laRShjb2RlKSwgY3R4KTtcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTk2OS1cbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jPTI1MjM9c3RhdGljIHZvaWQgbG9hZF9pbW02NChzdHJ1Y3QgYnBmX2ppdCAqaml0LCBpbnQgZHN0X3JlZywgdTY0IHZhbClcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTI1MzAtXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjI1MzE6c3RhdGljIHZvaWQgZW1pdF9zdG9yZV9zdGFja19pbW02NChzdHJ1Y3QgYnBmX2ppdCAqaml0LCBpbnQgdG1wX3JlZywgaW50IHN0YWNrX29mZiwgdTY0IGltbSlcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMjUzMi17XG4tLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYz0yNTM4PXN0YXRpYyBpbnQgaW52b2tlX2JwZl9wcm9nKHN0cnVjdCBicGZfdHJhbXBfaml0ICp0aml0LFxuLS1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMjU1MS1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6MjU1MjpcdGVtaXRfc3RvcmVfc3RhY2tfaW1tNjQoaml0LCBSRUdfVzAsIGNvb2tpZV9vZmYsIG5vZGUtXHUwMDNlY29va2llKTtcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMjU1My1cbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jPTI2MTA9c3RhdGljIGludCBpbnZva2VfYnBmKHN0cnVjdCBicGZfdHJhbXBfaml0ICp0aml0LFxuLS1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMjYyMS1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6MjYyMjpcdFx0XHRlbWl0X3N0b3JlX3N0YWNrX2ltbTY0KGppdCwgUkVHXzAsIHRqaXQtXHUwMDNlZnVuY19tZXRhX29mZiwgbWV0YSk7XG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTI2MjMtXHRcdFx0Y3VyX2Nvb2tpZS0tO1xuLS1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM9MjY1MD1zdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLFxuLS1cbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMjgwMC1cdGlmIChmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfSVBfQVJHKVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzoyODAxOlx0XHRlbWl0X3N0b3JlX3N0YWNrX2ltbTY0KGppdCwgUkVHXzAsIHRqaXQtXHUwMDNlaXBfb2ZmLCAodTY0KWZ1bmNfYWRkcik7XG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTI4MDItXHRmdW5jX21ldGEgPSBucl9icGZfYXJncztcbi0tXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTI4MjItXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvb2tpZV9jbnQ7IGkmIzQzOyYjNDM7KVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzoyODIzOlx0XHRcdGVtaXRfc3RvcmVfc3RhY2tfaW1tNjQoaml0LCBSRUdfMCwgY29va2llX29mZiAmIzQzOyA4ICogaSwgMCk7XG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTI4MjQtXHRcdC8qIENsZWFyIHRoZSByZXR1cm4gdmFsdWUgdG8gbWFrZSBzdXJlIGZlbnRyeSBhbHdheXMgZ2V0cyAwLiAqL1xuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzoyODI1Olx0XHRlbWl0X3N0b3JlX3N0YWNrX2ltbTY0KGppdCwgUkVHXzAsIHRqaXQtXHUwMDNlcmV0dmFsX29mZiwgMCk7XG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTI4MjYtXHR9XG4tLVxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0yOTA5LVx0aWYgKGZzZXNzaW9uX2NudClcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6MjkxMDpcdFx0ZW1pdF9zdG9yZV9zdGFja19pbW02NChqaXQsIFJFR19XMCwgdGppdC1cdTAwM2VmdW5jX21ldGFfb2ZmLFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0yOTExLVx0XHRcdFx0ICAgICAgIGZ1bmNfbWV0YSk7XG4tLVxuYXJjaC9zcGFyYy9uZXQvYnBmX2ppdF9jb21wXzMyLmM9MjEyPWRvIHtcdCpwcm9nJiM0MzsmIzQzOyA9IExEMzJJIHwgUlMxKFNQKSB8IFMxMyhCSUFTIC0gKE9GRikpIHwgUkQoREVTVCk7XHRcXFxuLS1cbmFyY2gvc3BhcmMvbmV0L2JwZl9qaXRfY29tcF8zMi5jLTIxNC1cbmFyY2gvc3BhcmMvbmV0L2JwZl9qaXRfY29tcF8zMi5jOjIxNTojZGVmaW5lIGVtaXRfc3RtZW0oT0ZGLCBTUkMpXHRcdFx0XHRcdFx0XFxcbmFyY2gvc3BhcmMvbmV0L2JwZl9qaXRfY29tcF8zMi5jLTIxNi1kbyB7XHQqcHJvZyYjNDM7JiM0MzsgPSBTVDMySSB8IFJTMShTUCkgfCBTMTMoQklBUyAtIChPRkYpKSB8IFJEKFNSQyk7XHRcXFxuLS1cbmFyY2gvc3BhcmMvbmV0L2JwZl9qaXRfY29tcF8zMi5jPTMyNj12b2lkIGJwZl9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3Byb2cgKmZwKVxuLS1cbmFyY2gvc3BhcmMvbmV0L2JwZl9qaXRfY29tcF8zMi5jLTU4NS1cdFx0XHRcdHNlZW4gfD0gU0VFTl9NRU07XG5hcmNoL3NwYXJjL25ldC9icGZfaml0X2NvbXBfMzIuYzo1ODY6XHRcdFx0XHRlbWl0X3N0bWVtKEsgKiA0LCByX0EpO1xuYXJjaC9zcGFyYy9uZXQvYnBmX2ppdF9jb21wXzMyLmMtNTg3LVx0XHRcdFx0YnJlYWs7XG4tLVxuYXJjaC9zcGFyYy9uZXQvYnBmX2ppdF9jb21wXzMyLmMtNTg5LVx0XHRcdFx0c2VlbiB8PSBTRUVOX01FTSB8IFNFRU5fWFJFRztcbmFyY2gvc3BhcmMvbmV0L2JwZl9qaXRfY29tcF8zMi5jOjU5MDpcdFx0XHRcdGVtaXRfc3RtZW0oSyAqIDQsIHJfWCk7XG5hcmNoL3NwYXJjL25ldC9icGZfaml0X2NvbXBfMzIuYy01OTEtXHRcdFx0XHRicmVhaztcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTMxND1zdGF0aWMgdm9pZCBlbWl0X2xkc3hfcjEyKHU4ICoqcHJvZywgdTMyIHNpemUsIHUzMiBkc3RfcmVnLCB1MzIgc3JjX3JlZywgaW50IG9mZilcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTMxOS0vKiBTVFg6ICoodTgqKShkc3RfcmVnICYjNDM7IG9mZikgPSBzcmNfcmVnICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTMyMDpzdGF0aWMgdm9pZCBlbWl0X3N0eCh1OCAqKnBwcm9nLCB1MzIgc2l6ZSwgdTMyIGRzdF9yZWcsIHUzMiBzcmNfcmVnLCBpbnQgb2ZmKVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEzMjEte1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMzUzLS8qIFNUWDogKih1OCopKGRzdF9yZWcgJiM0MzsgaW5kZXhfcmVnICYjNDM7IG9mZikgPSBzcmNfcmVnICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTM1NDpzdGF0aWMgdm9pZCBlbWl0X3N0eF9pbmRleCh1OCAqKnBwcm9nLCB1MzIgc2l6ZSwgdTMyIGRzdF9yZWcsIHUzMiBzcmNfcmVnLCB1MzIgaW5kZXhfcmVnLCBpbnQgb2ZmKVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEzNTUte1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMzc5LVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjEzODA6c3RhdGljIHZvaWQgZW1pdF9zdHhfcjEyKHU4ICoqcHByb2csIHUzMiBzaXplLCB1MzIgZHN0X3JlZywgdTMyIHNyY19yZWcsIGludCBvZmYpXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTM4MS17XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTM4MjpcdGVtaXRfc3R4X2luZGV4KHBwcm9nLCBzaXplLCBkc3RfcmVnLCBzcmNfcmVnLCBYODZfUkVHX1IxMiwgb2ZmKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMzgzLX1cbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTM4NS0vKiBTVDogKih1OCopKGRzdF9yZWcgJiM0MzsgaW5kZXhfcmVnICYjNDM7IG9mZikgPSBpbW0zMiAqL1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjEzODY6c3RhdGljIHZvaWQgZW1pdF9zdF9pbmRleCh1OCAqKnBwcm9nLCB1MzIgc2l6ZSwgdTMyIGRzdF9yZWcsIHUzMiBpbmRleF9yZWcsIGludCBvZmYsIGludCBpbW0pXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTM4Ny17XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE0MTItXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTQxMzpzdGF0aWMgdm9pZCBlbWl0X3N0KHU4ICoqcHByb2csIHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgaW50IGRzdF9yZWcsXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTQxNC1cdFx0ICAgIHMzMiBvdXRnb2luZ19hcmdfYmFzZSwgdTE2IG91dGdvaW5nX3JzcClcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTQ3MC1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxNDcxOnN0YXRpYyB2b2lkIGVtaXRfc3RfcjEyKHU4ICoqcHByb2csIHUzMiBzaXplLCB1MzIgZHN0X3JlZywgaW50IG9mZiwgaW50IGltbSlcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNDcyLXtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxNDczOlx0ZW1pdF9zdF9pbmRleChwcHJvZywgc2l6ZSwgZHN0X3JlZywgWDg2X1JFR19SMTIsIG9mZiwgaW1tKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNDc0LX1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNDc1LVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE0NzY6c3RhdGljIHZvaWQgZW1pdF9zdG9yZV9zdGFja19pbW02NCh1OCAqKnBwcm9nLCBpbnQgcmVnLCBpbnQgc3RhY2tfb2ZmLCB1NjQgaW1tNjQpXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTQ3Ny17XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE0ODItXHRlbWl0X21vdl9pbW02NChwcHJvZywgcmVnLCBpbW02NCBcdTAwM2VcdTAwM2UgMzIsICh1MzIpIGltbTY0KTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxNDgzOlx0ZW1pdF9zdHgocHByb2csIEJQRl9EVywgQlBGX1JFR19GUCwgcmVnLCBzdGFja19vZmYpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE0ODQtfVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xNTc5PXN0YXRpYyBpbnQgZW1pdF9hdG9taWNfbGRfc3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTggKipwcHJvZyxcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTYwMS1cdFx0Lyogc21wX3N0b3JlX3JlbGVhc2UoZHN0X3JlZyAmIzQzOyBvZmYxNiwgc3JjX3JlZykgKi9cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxNjAyOlx0XHRlbWl0X3N0eChwcHJvZywgQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSwgZHN0X3JlZywgc3JjX3JlZyxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNjAzLVx0XHRcdCBpbnNuLVx1MDAzZW9mZik7XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTE2MTQ9c3RhdGljIGludCBlbWl0X2F0b21pY19sZF9zdF9pbmRleCh1OCAqKnBwcm9nLCB1MzIgYXRvbWljX29wLCB1MzIgc2l6ZSxcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTYyNC1cdFx0Lyogc21wX3N0b3JlX3JlbGVhc2UoZHN0X3JlZyAmIzQzOyBpZHhfcmVnICYjNDM7IG9mZjE2LCBzcmNfcmVnKSAqL1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE2MjU6XHRcdGVtaXRfc3R4X2luZGV4KHBwcm9nLCBzaXplLCBkc3RfcmVnLCBzcmNfcmVnLCBpbmRleF9yZWcsIG9mZik7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTYyNi1cdFx0YnJlYWs7XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTE4NDg9c3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICphZGRycywgdTggKmltYWdlLFxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yMzkxLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjIzOTI6XHRcdFx0ZW1pdF9zdChcdTAwMjZwcm9nLCBpbnNuLCBkc3RfcmVnLCBvdXRnb2luZ19hcmdfYmFzZSxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yMzkzLVx0XHRcdFx0b3V0Z29pbmdfcnNwKTtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjQxNC1cdFx0XHRcdHJldHVybiBlcnI7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjQxNTpcdFx0XHRlbWl0X3N0eChcdTAwMjZwcm9nLCBCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpLCBkc3RfcmVnLCBzcmNfcmVnLCBpbnNuX29mZik7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjQxNi1cdFx0XHRicmVhaztcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjQyMi1cdFx0XHRzdGFydF9vZl9sZHggPSBwcm9nO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjI0MjM6XHRcdFx0ZW1pdF9zdF9yMTIoXHUwMDI2cHJvZywgQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSwgZHN0X3JlZywgaW5zbi1cdTAwM2VvZmYsIGluc24tXHUwMDNlaW1tKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yNDI0LVx0XHRcdGdvdG8gcG9wdWxhdGVfZXh0YWJsZTtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjQ0NC1cdFx0XHR9IGVsc2Uge1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjI0NDU6XHRcdFx0XHRlbWl0X3N0eF9yMTIoXHUwMDI2cHJvZywgQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSwgZHN0X3JlZywgc3JjX3JlZywgaW5zbi1cdTAwM2VvZmYpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI0NDYtXHRcdFx0fVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zMTU5PXN0YXRpYyB2b2lkIHNhdmVfYXJncyhjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHU4ICoqcHJvZyxcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzIwNC1cdFx0XHRcdFx0IG5yX3N0YWNrX3Nsb3RzICogOCAmIzQzOyAxNiAmIzQzOyAoIXVzZV9qbXApICogOCk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzIwNTpcdFx0XHRcdGVtaXRfc3R4KHByb2csIEJQRl9EVywgQlBGX1JFR19GUCwgQlBGX1JFR18wLFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTMyMDYtXHRcdFx0XHRcdCAtc3RhY2tfc2l6ZSk7XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTMyMjQtXHRcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgYXJnX3JlZ3M7IGomIzQzOyYjNDM7KSB7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzIyNTpcdFx0XHRcdGVtaXRfc3R4KHByb2csIEJQRl9EVywgQlBGX1JFR19GUCxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zMjI2LVx0XHRcdFx0XHQgbnJfcmVncyA9PSA1ID8gWDg2X1JFR19SOSA6IEJQRl9SRUdfMSAmIzQzOyBucl9yZWdzLFxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zMjY5PXN0YXRpYyBpbnQgaW52b2tlX2JwZl9wcm9nKGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgdTggKipwcHJvZyxcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzI4OS1cdCAqL1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjMyOTA6XHRlbWl0X3N0eChcdTAwMjZwcm9nLCBCUEZfRFcsIEJQRl9SRUdfRlAsIEJQRl9SRUdfMSwgLXJ1bl9jdHhfb2ZmICYjNDM7IGN0eF9jb29raWVfb2ZmKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zMjkxLVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zMzM1LVx0aWYgKHNhdmVfcmV0KVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjMzMzY6XHRcdGVtaXRfc3R4KFx1MDAyNnByb2csIEJQRl9EVywgQlBGX1JFR19GUCwgQlBGX1JFR18wLCAtOCk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzMzNy1cbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MzM4ND1zdGF0aWMgaW50IGludm9rZV9icGYoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1OCAqKnBwcm9nLFxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zMzk0LVx0XHRpZiAodGwtXHUwMDNlbm9kZXNbaV0tXHUwMDNlbGluay1cdTAwM2Vwcm9nLVx1MDAzZWNhbGxfc2Vzc2lvbl9jb29raWUpIHtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozMzk1Olx0XHRcdGVtaXRfc3RvcmVfc3RhY2tfaW1tNjQoXHUwMDI2cHJvZywgQlBGX1JFR18wLCAtZnVuY19tZXRhX29mZixcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zMzk2LVx0XHRcdFx0ZnVuY19tZXRhIHwgKGN1cl9jb29raWUgXHUwMDNjXHUwMDNjIEJQRl9UUkFNUF9DT09LSUVfSU5ERVhfU0hJRlQpKTtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MzQwNz1zdGF0aWMgaW50IGludm9rZV9icGZfbW9kX3JldChjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHU4ICoqcHByb2csXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM0MTgtXHRlbWl0X21vdl9pbW0zMihcdTAwMjZwcm9nLCBmYWxzZSwgQlBGX1JFR18wLCAwKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozNDE5Olx0ZW1pdF9zdHgoXHUwMDI2cHJvZywgQlBGX0RXLCBCUEZfUkVHX0ZQLCBCUEZfUkVHXzAsIC04KTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNDIwLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGwtXHUwMDNlbnJfbm9kZXM7IGkmIzQzOyYjNDM7KSB7XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTM1MDk9c3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcndfaW1hZ2UsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM2NjAtXHQvKiBtb3YgUVdPUkQgUFRSIFtyYnAgLSByYnhfb2ZmXSwgcmJ4ICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzY2MTpcdGVtaXRfc3R4KFx1MDAyNnByb2csIEJQRl9EVywgQlBGX1JFR19GUCwgQlBGX1JFR182LCAtcmJ4X29mZik7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzY2Mi1cbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzY2NC1cdC8qIFN0b3JlIG51bWJlciBvZiBhcmd1bWVudCByZWdpc3RlcnMgb2YgdGhlIHRyYWNlZCBmdW5jdGlvbiAqL1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM2NjU6XHRlbWl0X3N0b3JlX3N0YWNrX2ltbTY0KFx1MDAyNnByb2csIEJQRl9SRUdfMCwgLWZ1bmNfbWV0YV9vZmYsIGZ1bmNfbWV0YSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzY2Ni1cbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzY2OC1cdFx0LyogU3RvcmUgSVAgYWRkcmVzcyBvZiB0aGUgdHJhY2VkIGZ1bmN0aW9uICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzY2OTpcdFx0ZW1pdF9zdG9yZV9zdGFja19pbW02NChcdTAwMjZwcm9nLCBCUEZfUkVHXzAsIC1pcF9vZmYsIChsb25nKWZ1bmNfYWRkcik7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzY3MC1cdH1cbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzY4Ni1cdFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIGNvb2tpZV9jbnQ7IGkmIzQzOyYjNDM7KVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM2ODc6XHRcdFx0ZW1pdF9zdG9yZV9zdGFja19pbW02NChcdTAwMjZwcm9nLCBCUEZfUkVHXzAsIC1jb29raWVfb2ZmICYjNDM7IDggKiBpLCAwKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNjg4LVx0XHQvKiBjbGVhciB0aGUgcmV0dXJuIHZhbHVlIHRvIG1ha2Ugc3VyZSBmZW50cnkgYWx3YXlzIGdldCAwICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzY4OTpcdFx0ZW1pdF9zdG9yZV9zdGFja19pbW02NChcdTAwMjZwcm9nLCBCUEZfUkVHXzAsIC04LCAwKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNjkwLVx0fVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNzMzLVx0XHQvKiByZW1lbWJlciByZXR1cm4gdmFsdWUgaW4gYSBzdGFjayBmb3IgYnBmIHByb2cgdG8gYWNjZXNzICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzczNDpcdFx0ZW1pdF9zdHgoXHUwMDI2cHJvZywgQlBGX0RXLCBCUEZfUkVHX0ZQLCBCUEZfUkVHXzAsIC04KTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNzM1LVx0XHRpbS1cdTAwM2VpcF9hZnRlcl9jYWxsID0gaW1hZ2UgJiM0MzsgKHByb2cgLSAodTggKilyd19pbWFnZSk7XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM3NTctXHRpZiAoYnBmX2ZzZXNzaW9uX2NudCh0bm9kZXMpKVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM3NTg6XHRcdGVtaXRfc3RvcmVfc3RhY2tfaW1tNjQoXHUwMDI2cHJvZywgQlBGX1JFR18wLCAtZnVuY19tZXRhX29mZiwgZnVuY19tZXRhKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNzU5LVxuLS1cbmRyaXZlcnMvZG1hL3BsMzMwLmM9MTExOT1zdGF0aWMgdTMyIF9lbWl0X2xvYWQodW5zaWduZWQgaW50IGRyeV9ydW4sIHU4IGJ1ZltdLFxuLS1cbmRyaXZlcnMvZG1hL3BsMzMwLmMtMTE1MS1cbmRyaXZlcnMvZG1hL3BsMzMwLmM6MTE1MjpzdGF0aWMgaW5saW5lIHUzMiBfZW1pdF9zdG9yZSh1bnNpZ25lZCBpbnQgZHJ5X3J1biwgdTggYnVmW10sXG5kcml2ZXJzL2RtYS9wbDMzMC5jLTExNTMtXHRlbnVtIHBsMzMwX2NvbmQgY29uZCwgZW51bSBkbWFfdHJhbnNmZXJfZGlyZWN0aW9uIGRpcmVjdGlvbixcbi0tXG5kcml2ZXJzL2RtYS9wbDMzMC5jPTExODU9c3RhdGljIGlubGluZSBpbnQgX2xkc3RfcGVyaXBoZXJhbChzdHJ1Y3QgcGwzMzBfZG1hYyAqcGwzMzAsXG4tLVxuZHJpdmVycy9kbWEvcGwzMzAuYy0xMjAxLVx0XHRcdHB4cy1cdTAwM2VkZXNjLVx1MDAzZXBlcmkpO1xuZHJpdmVycy9kbWEvcGwzMzAuYzoxMjAyOlx0XHRvZmYgJiM0Mzs9IF9lbWl0X3N0b3JlKGRyeV9ydW4sIFx1MDAyNmJ1ZltvZmZdLCBjb25kLCBweHMtXHUwMDNlZGVzYy1cdTAwM2VycXR5cGUsXG5kcml2ZXJzL2RtYS9wbDMzMC5jLTEyMDMtXHRcdFx0cHhzLVx1MDAzZWRlc2MtXHUwMDNlcGVyaSk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pZ3RfZ2VtX3V0aWxzLmM9NDE9c3RydWN0IGk5MTVfdm1hICpcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaWd0X2dlbV91dGlscy5jOjQyOmlndF9lbWl0X3N0b3JlX2R3KHN0cnVjdCBpOTE1X3ZtYSAqdm1hLFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pZ3RfZ2VtX3V0aWxzLmMtNDMtXHRcdCAgdTY0IG9mZnNldCxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2lndF9nZW1fdXRpbHMuYz0xMTE9aW50IGlndF9ncHVfZmlsbF9kdyhzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pZ3RfZ2VtX3V0aWxzLmMtMTIyLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pZ3RfZ2VtX3V0aWxzLmM6MTIzOlx0YmF0Y2ggPSBpZ3RfZW1pdF9zdG9yZV9kdyh2bWEsIG9mZnNldCwgY291bnQsIHZhbCk7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2lndF9nZW1fdXRpbHMuYy0xMjQtXHRpZiAoSVNfRVJSKGJhdGNoKSlcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2lndF9nZW1fdXRpbHMuaD0yND1zdHJ1Y3QgaTkxNV92bWEgKlxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pZ3RfZ2VtX3V0aWxzLmg6MjU6aWd0X2VtaXRfc3RvcmVfZHcoc3RydWN0IGk5MTVfdm1hICp2bWEsXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2lndF9nZW1fdXRpbHMuaC0yNi1cdFx0ICB1NjQgb2Zmc2V0LFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2dlbjdfcmVuZGVyY2xlYXIuYz0yMzQ9c3RhdGljIHZvaWRcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2dlbjdfcmVuZGVyY2xlYXIuYzoyMzU6Z2VuN19lbWl0X3N0YXRlX2Jhc2VfYWRkcmVzcyhzdHJ1Y3QgYmF0Y2hfY2h1bmsgKmJhdGNoLFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvZ2VuN19yZW5kZXJjbGVhci5jLTIzNi1cdFx0XHQgICAgIHUzMiBzdXJmYWNlX3N0YXRlX2Jhc2UpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvZ2VuN19yZW5kZXJjbGVhci5jPTM3Nj1zdGF0aWMgdm9pZCBlbWl0X2JhdGNoKHN0cnVjdCBpOTE1X3ZtYSAqIGNvbnN0IHZtYSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9nZW43X3JlbmRlcmNsZWFyLmMtNDE3LVx0Z2VuN19lbWl0X3BpcGVsaW5lX2ZsdXNoKFx1MDAyNmNtZHMpO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvZ2VuN19yZW5kZXJjbGVhci5jOjQxODpcdGdlbjdfZW1pdF9zdGF0ZV9iYXNlX2FkZHJlc3MoXHUwMDI2Y21kcywgZGVzY3JpcHRvcnMpO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvZ2VuN19yZW5kZXJjbGVhci5jLTQxOS1cdGdlbjdfZW1pdF9waXBlbGluZV9pbnZhbGlkYXRlKFx1MDAyNmNtZHMpO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2VuZ2luZV9wbS5jPTM0PXN0YXRpYyB1MzIgKmVtaXRfd2FpdCh1MzIgKmNzLCB1MzIgb2Zmc2V0LCBpbnQgb3AsIHUzMiB2YWx1ZSlcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9lbmdpbmVfcG0uYy00Ni1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2VuZ2luZV9wbS5jOjQ3OnN0YXRpYyB1MzIgKmVtaXRfc3RvcmUodTMyICpjcywgdTMyIG9mZnNldCwgdTMyIHZhbHVlKVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfZW5naW5lX3BtLmMtNDgte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2VuZ2luZV9wbS5jPTczPXN0YXRpYyBpbnQgX19tZWFzdXJlX3RpbWVzdGFtcHMoc3RydWN0IGludGVsX2NvbnRleHQgKmNlLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2VuZ2luZV9wbS5jLTkyLVx0LyogU2lnbmFsIFx1MDAyNiB3YWl0IGZvciBzdGFydCAqL1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfZW5naW5lX3BtLmM6OTM6XHRjcyA9IGVtaXRfc3RvcmUoY3MsIG9mZnNldCAmIzQzOyA0MDA4LCAxKTtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2VuZ2luZV9wbS5jLTk0LVx0Y3MgPSBlbWl0X3dhaXQoY3MsIG9mZnNldCAmIzQzOyA0MDA4LCBNSV9TRU1BUEhPUkVfU0FEX05FUV9TREQsIDEpO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3JlcXVlc3QuYz0xOTU5PXN0YXRpYyB1MzIgKmVtaXRfdGltZXN0YW1wX3N0b3JlKHUzMiAqY3MsIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwgdTMyIG9mZnNldClcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9yZXF1ZXN0LmMtMTk2OC1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3JlcXVlc3QuYzoxOTY5OnN0YXRpYyB1MzIgKmVtaXRfc3RvcmVfZHcodTMyICpjcywgdTMyIG9mZnNldCwgdTMyIHZhbHVlKVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jLTE5NzAte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3JlcXVlc3QuYz0yMDE0PXN0YXRpYyBpbnQgbWVhc3VyZV9zZW1hcGhvcmVfcmVzcG9uc2Uoc3RydWN0IGludGVsX2NvbnRleHQgKmNlKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3JlcXVlc3QuYy0yMDQ3LVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jOjIwNDg6XHRjcyA9IGVtaXRfc3RvcmVfZHcoY3MsIG9mZnNldCwgMCk7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9yZXF1ZXN0LmMtMjA0OS1cdGZvciAoaSA9IDE7IGkgXHUwMDNjPSBBUlJBWV9TSVpFKGVsYXBzZWQpOyBpJiM0MzsmIzQzOykge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3JlcXVlc3QuYy0yMDUxLVx0XHRjcyA9IGVtaXRfdGltZXN0YW1wX3N0b3JlKGNzLCBjZSwgb2Zmc2V0ICYjNDM7IGkgKiBzaXplb2YodTMyKSk7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9yZXF1ZXN0LmM6MjA1MjpcdFx0Y3MgPSBlbWl0X3N0b3JlX2R3KGNzLCBvZmZzZXQsIDApO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jLTIwNTMtXHR9XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jPTIxNjA9c3RhdGljIGludCBtZWFzdXJlX2J1c3lfZGlzcGF0Y2goc3RydWN0IGludGVsX2NvbnRleHQgKmNlKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3JlcXVlc3QuYy0yMTk2LVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jOjIxOTc6XHRcdGNzID0gZW1pdF9zdG9yZV9kdyhjcywgb2Zmc2V0ICYjNDM7IGkgKiBzaXplb2YodTMyKSwgLTEpO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jLTIxOTgtXHRcdGNzID0gZW1pdF9zZW1hcGhvcmVfcG9sbF91bnRpbChjcywgb2Zmc2V0LCBpKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9yZXF1ZXN0LmM9MjQ0OD1zdGF0aWMgaW50IG1lYXN1cmVfcHJlZW1wdGlvbihzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jLTI0OTItXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9yZXF1ZXN0LmM6MjQ5MzpcdFx0Y3MgPSBlbWl0X3N0b3JlX2R3KGNzLCBhZGRyLCAtMSk7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9yZXF1ZXN0LmMtMjQ5NC1cdFx0Y3MgPSBlbWl0X3NlbWFwaG9yZV9wb2xsX3VudGlsKGNzLCBvZmZzZXQsIGkpO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3JlcXVlc3QuYy0yNTE4LVx0XHRjcyA9IGVtaXRfdGltZXN0YW1wX3N0b3JlKGNzLCBjZSwgYWRkcik7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9yZXF1ZXN0LmM6MjUxOTpcdFx0Y3MgPSBlbWl0X3N0b3JlX2R3KGNzLCBvZmZzZXQsIGkpO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jLTI1MjAtXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jPTI1Njg9c3RhdGljIGludCBtZWFzdXJlX2NvbXBsZXRpb24oc3RydWN0IGludGVsX2NvbnRleHQgKmNlKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3JlcXVlc3QuYy0yNjA0LVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jOjI2MDU6XHRcdGNzID0gZW1pdF9zdG9yZV9kdyhjcywgb2Zmc2V0ICYjNDM7IGkgKiBzaXplb2YodTMyKSwgLTEpO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jLTI2MDYtXHRcdGNzID0gZW1pdF9zZW1hcGhvcmVfcG9sbF91bnRpbChjcywgb2Zmc2V0LCBpKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmluZ19vcHMuYz05NT1zdGF0aWMgaW50IGVtaXRfdXNlcl9pbnRlcnJ1cHQodTMyICpkdywgaW50IGkpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jpbmdfb3BzLmMtMTAzLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jpbmdfb3BzLmM6MTA0OnN0YXRpYyBpbnQgZW1pdF9zdG9yZV9pbW1fZ2d0dCh1MzIgYWRkciwgdTMyIHZhbHVlLCB1MzIgKmR3LCBpbnQgaSlcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yaW5nX29wcy5jLTEwNS17XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jpbmdfb3BzLmM9MTY5PXN0YXRpYyBpbnQgZW1pdF9waXBlX2ludmFsaWRhdGUoc3RydWN0IHhlX2V4ZWNfcXVldWUgKnEsIHUzMiBtYXNrX2ZsYWdzLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yaW5nX29wcy5jLTE5OC1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yaW5nX29wcy5jOjE5OTpzdGF0aWMgaW50IGVtaXRfc3RvcmVfaW1tX3BwZ3R0X3Bvc3RlZCh1NjQgYWRkciwgdTY0IHZhbHVlLFxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA0OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1OTQwCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGNvZGUgc25pcHBldDoKCioqRGl2aW5nIGludG8gYGVtaXRfc3RgIGluIHRoZSB4ODYgQlBGIEpJVCBDb21waWxlcioqCgpPa2F5LCBzbyBJIHNlZSBhIG5ldyBmdW5jdGlvbiwgYGVtaXRfc3RgLCBuZXN0bGVkIHdpdGhpbiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYC4gVGhlIHNpZ25hdHVyZSBnaXZlcyB1cyBzb21lIGNvbnRleHQ6IGBzdGF0aWMgdm9pZCBlbWl0X3N0KHU4ICoqcHByb2csIHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgaW50IGRzdF9yZWcsIHMzMiBvdXRnb2luZ19hcmdfYmFzZSwgdTE2IG91dGdvaW5nX3JzcClgLiBSaWdodCBvZmYgdGhlIGJhdCwgYHN0YXRpY2AgdGVsbHMgbWUgaXQmIzM5O3MgbG9jYWwgdG8gdGhpcyBjb21waWxhdGlvbiB1bml0LCB3aGljaCBpcyB0eXBpY2FsIGZvciBKSVQtcmVsYXRlZCBoZWxwZXJzLiBUaGUgZmFjdCBpdCB0YWtlcyBhIGRvdWJsZSBwb2ludGVyIHRvIGB1OGAgKGBwcHJvZ2ApIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIGl0JiMzOTtzIGxpa2VseSByZXNwb25zaWJsZSBmb3Igd3JpdGluZyBjb21waWxlZCBpbnN0cnVjdGlvbnMgZGlyZWN0bHkgaW50byB0aGUgcHJvZ3JhbSBidWZmZXIuCgpUaGUgb3RoZXIgcGFyYW1ldGVycyBhcmUgaW50ZXJlc3Rpbmc6IGBzdHJ1Y3QgYnBmX2luc24gKmluc25gIGlzIHRoZSBCUEYgaW5zdHJ1Y3Rpb24gYmVpbmcgY29tcGlsZWQuIGBkc3RfcmVnYCBzb3VuZHMgbGlrZSB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgd2l0aGluIHRoZSB4ODYgYXJjaGl0ZWN0dXJlIHRoYXQmIzM5O3MgYmVpbmcgdGFyZ2V0ZWQsIGxpa2VseSByZWxhdGVkIHRvIHRoZSBCUEYmIzM5O3MgdmlydHVhbCByZWdpc3RlciBzZXQuIGBvdXRnb2luZ19hcmdfYmFzZWAgYW5kIGBvdXRnb2luZ19yc3BgIHN1Z2dlc3QgaXQmIzM5O3MgZGVhbGluZyB3aXRoIHN0YWNrLWJhc2VkIGFyZ3VtZW50cywgbWF5YmUgZm9yIGEgZnVuY3Rpb24gY2FsbC4gSXQmIzM5O3MgbGlrZWx5IGludm9sdmVkIGluIGltcGxlbWVudGluZyBCUEYgaW5zdHJ1Y3Rpb25zIHRoYXQgc3RvcmUgZGF0YSwgbGlrZSB0aGUgYEJQRl9TVGAgZmFtaWx5LCBhbmQgcG90ZW50aWFsbHkgaGFuZGxpbmcgdGhlIHN0YWNrIGZyYW1lIHByb3Blcmx5LgoKR2l2ZW4gdGhhdCB0aGlzIGlzIGEgKm5ldyogZnVuY3Rpb24sIEkgbmVlZCB0byBsb29rIGRlZXBlciBpbnRvIHRoZSBwYXRjaCB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbi4gV2hhdCBzcGVjaWZpYyBCUEYgaW5zdHJ1Y3Rpb25zIGlzIGl0IG1lYW50IHRvIGhhbmRsZT8gV2hhdCYjMzk7cyB0aGUgY29udGV4dCB3aGVyZSBpdCYjMzk7cyBjYWxsZWQ/IEl0IGlzIGxpa2VseSBhIGNvcmUgZWxlbWVudCBvZiB0aGUgaW1wbGVtZW50YXRpb24sIHNvIGxldCYjMzk7cyB2ZXJpZnkgd2hlcmUgaXQmIzM5O3MgY2FsbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgdm9pZCBlbWl0X3N0XFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9NTE0PXN0YXRpYyB2b2lkIGVtaXRfbGR4KHU4IHJkLCBzMTYgb2ZmLCB1OCBycywgdTggc2l6ZSwgYm9vbCBzaWduX2V4dCxcbi0tXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTUzMC1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6NTMxOnN0YXRpYyB2b2lkIGVtaXRfc3QodTggcmQsIHMxNiBvZmYsIHMzMiBpbW0sIHU4IHNpemUsIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy01MzIte1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xMzg2PXN0YXRpYyB2b2lkIGVtaXRfc3RfaW5kZXgodTggKipwcHJvZywgdTMyIHNpemUsIHUzMiBkc3RfcmVnLCB1MzIgaW5kZXhfcmVnLCBpbnQgb2ZmLCBpbnQgaW1tKVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNDEyLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE0MTM6c3RhdGljIHZvaWQgZW1pdF9zdCh1OCAqKnBwcm9nLCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIGludCBkc3RfcmVnLFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE0MTQtXHRcdCAgICBzMzIgb3V0Z29pbmdfYXJnX2Jhc2UsIHUxNiBvdXRnb2luZ19yc3ApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA0OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2Nzc3CgkJCQkJCQlvdXRwdXQ6IDE4NwoJCQkJCQkJdGhvdWdodHM6IDM0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtBU0FOIEJQRiBKSVQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBgZW1pdF9zdGAgaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AganVtcHMgb3V0IGFzIGEgbmV3IGZ1bmN0aW9uLiBHb29kLCBnb29kLiBTbyB0aGUgbWFpbiBhcmVhcyBJIG5lZWQgdG8gZm9jdXMgb24sIHRoZSBrZXkgc3ltYm9scyBjaGFuZ2VkIG9yIGludHJvZHVjZWQsIGFyZToKCiogICBgZW1pdF9rYXNhbl9jaGVja2AgLSBEZWZpbml0ZWx5IG5ldy4KKiAgIGBlbWl0X3N0YCAtIFllcCwgdGhhdCYjMzk7cyBhIG5ldyBvbmUuCiogICBgZW1pdF9hdG9taWNfbGRfc3RgIC0gTW9kaWZpZWQsIHNvIHdvcnRoIGEgZGVlcGVyIGxvb2suCiogICBgYWRqdXN0X2luc25fYXV4X2RhdGFgIC0gTW9kaWZpZWQgYXMgd2VsbC4KKiAgIGBicGZfcGF0Y2hfaW5zbl9kYXRhYCAtIFRoaXMgKndhcyogZXhpc3RpbmcsIGJ1dCB0aGUgZmFjdCBpdCYjMzk7cyBiZWVuIHRvdWNoZWQgbWVhbnMgc29tZXRoaW5nIHNpZ25pZmljYW50IGNoYW5nZWQuCgpIYW5nIG9uLi4uIExldCBtZSBzY2FuIGFnYWluIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBjcnVjaWFsLi4uIEFscmlnaHQsIGhlcmUgd2UgZ286IGBtYXJrX25vbl9zdGFja19hY2Nlc3NgLi4uIG5ldy4gQW5kIGBpc19tZW1faW5zbmAuLi4gYWxzbyBuZXcuIE9rYXksIHRoZXNlIGFyZSBkZWZpbml0ZWx5IHdvcnRoIGFkZGluZyB0byB0aGUgbGlzdC4gSSYjMzk7bGwgbmVlZCB0byBrZWVwIGFuIGV5ZSBvbiB0aGVzZS4KClNvLCB0aGUgZnVsbCBsaXN0IG9mIHJlbGV2YW50IHN5bWJvbHMgaXMgbm93OgoKKiAgIGBlbWl0X2thc2FuX2NoZWNrYAoqICAgYGVtaXRfc3RgCiogICBgZW1pdF9hdG9taWNfbGRfc3RgCiogICBgYWRqdXN0X2luc25fYXV4X2RhdGFgCiogICBgYnBmX3BhdGNoX2luc25fZGF0YWAKKiAgIGBtYXJrX25vbl9zdGFja19hY2Nlc3NgCiogICBgaXNfbWVtX2luc25gCgpUaGUgcGF0Y2gmIzM5O3MgaW50ZW50IHNlZW1zIGNsZWFyOiBpdCYjMzk7cyBhZGRpbmcgS0FTQU4gc3VwcG9ydCB0byB0aGUgQlBGIEpJVCBjb21waWxlciBmb3IgeDg2LiBUaGUgdmVyaWZpZXIgaXMgY2xlYXJseSBiZWluZyB1cGRhdGVkIHRvIHRyYWNrIG5vbi1zdGFjayBtZW1vcnkgYWNjZXNzZXMsIGFuZCB0aGUgeDg2IEpJVCBjb21waWxlciBpcyBiZWluZyBhdWdtZW50ZWQgdG8gZW1pdCBLQVNBTiBjaGVja3MgZm9yIHRob3NlIGFjY2Vzc2VzLiBUaGlzIGlzIG5ldyBjb3JlIGxvZ2ljIGludHJvZHVjZWQgaW4gYm90aCB0aGUgSklUIGFuZCB2ZXJpZmllci4gVGhpcyBuZWVkcyBmdXp6aW5nLCBuZWVkcyB0byBiZSB0aG9yb3VnaGx5IHRlc3RlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMuCgpPa2F5LCBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0pJVF9LQVNBTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2VtaXRfa2FzYW5fY2hlY2smIzM0OywKICAgICYjMzQ7ZW1pdF9zdCYjMzQ7LAogICAgJiMzNDtlbWl0X2F0b21pY19sZF9zdCYjMzQ7LAogICAgJiMzNDthZGp1c3RfaW5zbl9hdXhfZGF0YSYjMzQ7LAogICAgJiMzNDticGZfcGF0Y2hfaW5zbl9kYXRhJiMzNDssCiAgICAmIzM0O21hcmtfbm9uX3N0YWNrX2FjY2VzcyYjMzQ7LAogICAgJiMzNDtpc19tZW1faW5zbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIEtBU0FOIHN1cHBvcnQgZm9yIHRoZSBCUEYgSklUIGNvbXBpbGVyIG9uIHg4Ni4gSXQgbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byB0cmFjayBub24tc3RhY2sgbWVtb3J5IGFjY2Vzc2VzIGFuZCB1cGRhdGVzIHRoZSB4ODYgSklUIGNvbXBpbGVyIHRvIGVtaXQgS0FTQU4gY2hlY2tzIGZvciB0aGVzZSBhY2Nlc3Nlcy4gVGhpcyBpbnRyb2R1Y2VzIG5ldyBjb3JlIGxvZ2ljIGluIHRoZSBKSVQgY29tcGlsZXIgYW5kIHZlcmlmaWVyLCB3aGljaCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0bmVzcyBhbmQgcHJldmVudCByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX0pJVF9LQVNBTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2VtaXRfa2FzYW5fY2hlY2smIzM0OywKICAgICYjMzQ7ZW1pdF9zdCYjMzQ7LAogICAgJiMzNDtlbWl0X2F0b21pY19sZF9zdCYjMzQ7LAogICAgJiMzNDthZGp1c3RfaW5zbl9hdXhfZGF0YSYjMzQ7LAogICAgJiMzNDticGZfcGF0Y2hfaW5zbl9kYXRhJiMzNDssCiAgICAmIzM0O21hcmtfbm9uX3N0YWNrX2FjY2VzcyYjMzQ7LAogICAgJiMzNDtpc19tZW1faW5zbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIEtBU0FOIHN1cHBvcnQgZm9yIHRoZSBCUEYgSklUIGNvbXBpbGVyIG9uIHg4Ni4gSXQgbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byB0cmFjayBub24tc3RhY2sgbWVtb3J5IGFjY2Vzc2VzIGFuZCB1cGRhdGVzIHRoZSB4ODYgSklUIGNvbXBpbGVyIHRvIGVtaXQgS0FTQU4gY2hlY2tzIGZvciB0aGVzZSBhY2Nlc3Nlcy4gVGhpcyBpbnRyb2R1Y2VzIG5ldyBjb3JlIGxvZ2ljIGluIHRoZSBKSVQgY29tcGlsZXIgYW5kIHZlcmlmaWVyLCB3aGljaCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0bmVzcyBhbmQgcHJldmVudCByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA0OjMyOjE5LjQxMzQ5MTYwMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1OTkzOTUxMTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9KSVRfS0FTQU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlbWl0X2thc2FuX2NoZWNrXCIsXG4gICAgXCJlbWl0X3N0XCIsXG4gICAgXCJlbWl0X2F0b21pY19sZF9zdFwiLFxuICAgIFwiYWRqdXN0X2luc25fYXV4X2RhdGFcIixcbiAgICBcImJwZl9wYXRjaF9pbnNuX2RhdGFcIixcbiAgICBcIm1hcmtfbm9uX3N0YWNrX2FjY2Vzc1wiLFxuICAgIFwiaXNfbWVtX2luc25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIEtBU0FOIHN1cHBvcnQgZm9yIHRoZSBCUEYgSklUIGNvbXBpbGVyIG9uIHg4Ni4gSXQgbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byB0cmFjayBub24tc3RhY2sgbWVtb3J5IGFjY2Vzc2VzIGFuZCB1cGRhdGVzIHRoZSB4ODYgSklUIGNvbXBpbGVyIHRvIGVtaXQgS0FTQU4gY2hlY2tzIGZvciB0aGVzZSBhY2Nlc3Nlcy4gVGhpcyBpbnRyb2R1Y2VzIG5ldyBjb3JlIGxvZ2ljIGluIHRoZSBKSVQgY29tcGlsZXIgYW5kIHZlcmlmaWVyLCB3aGljaCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0bmVzcyBhbmQgcHJldmVudCByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDQ6MzI6MTkuNDEzNDk2NTYyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzI5MzMyNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1NWZmZGZkNWM1YTA5YTQwZjIyMzc1NmNmYjhiY2U5OWUyMDIwYWU0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDEwIDA0OjMyOjE4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcgYi9hcmNoL3g4Ni9LY29uZmlnXFxuaW5kZXggYmRhZDkwZjIxMGU0YmYuLjcwNWE5YWI4NWYzYTk1IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L0tjb25maWdcXG4rKysgYi9hcmNoL3g4Ni9LY29uZmlnXFxuQEAgLTIzMyw2ICsyMzMsNyBAQCBjb25maWcgWDg2XFxuIFxcdHNlbGVjdCBIQVZFX1NBTVBMRV9GVFJBQ0VfRElSRUNUXFx0aWYgWDg2XzY0XFxuIFxcdHNlbGVjdCBIQVZFX1NBTVBMRV9GVFJBQ0VfRElSRUNUX01VTFRJXFx0aWYgWDg2XzY0XFxuIFxcdHNlbGVjdCBIQVZFX0VCUEZfSklUXFxuK1xcdHNlbGVjdCBIQVZFX0VCUEZfSklUX0tBU0FOXFx0XFx0aWYgWDg2XzY0XFxuIFxcdHNlbGVjdCBIQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTXFxuIFxcdHNlbGVjdCBIQVZFX0VJU0FcXHRcXHRcXHRpZiBYODZfMzJcXG4gXFx0c2VsZWN0IEhBVkVfRVhJVF9USFJFQURcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXFxuaW5kZXggZGU3NTE1ZWExYmVhZTguLjlkYmUzYTUyNDQ0ZTNjIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xcbisrKyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xcbkBAIC0yMSw2ICsyMSwxNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3Vud2luZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2NmaS5oXFx1MDAzZVxcbiBcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX0JQRl9KSVRfS0FTQU4pXFxuK3ZvaWQgX19hc2FuX2xvYWQxKHZvaWQgKnApO1xcbit2b2lkIF9fYXNhbl9zdG9yZTEodm9pZCAqcCk7XFxuK3ZvaWQgX19hc2FuX2xvYWQyKHZvaWQgKnApO1xcbit2b2lkIF9fYXNhbl9zdG9yZTIodm9pZCAqcCk7XFxuK3ZvaWQgX19hc2FuX2xvYWQ0KHZvaWQgKnApO1xcbit2b2lkIF9fYXNhbl9zdG9yZTQodm9pZCAqcCk7XFxuK3ZvaWQgX19hc2FuX2xvYWQ4KHZvaWQgKnApO1xcbit2b2lkIF9fYXNhbl9zdG9yZTgodm9pZCAqcCk7XFxuKyNlbmRpZlxcbitcXG4gc3RhdGljIGJvb2wgYWxsX2NhbGxlZV9yZWdzX3VzZWRbNF0gPSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZX07XFxuIFxcbiBzdGF0aWMgdTggKmVtaXRfY29kZSh1OCAqcHRyLCB1MzIgYnl0ZXMsIHVuc2lnbmVkIGludCBsZW4pXFxuQEAgLTExMTAsNiArMTEyMSw5MCBAQCBzdGF0aWMgdm9pZCBtYXliZV9lbWl0XzFtb2QodTggKipwcHJvZywgdTMyIHJlZywgYm9vbCBpczY0KVxcbiBcXHQqcHByb2cgPSBwcm9nO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGVtaXRfa2FzYW5fY2hlY2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTggKipwcHJvZyxcXG4rXFx0XFx0XFx0ICAgIHUzMiBhZGRyX3JlZywgc3RydWN0IGJwZl9pbnNuICppbnNuLCB1OCAqaXAsXFxuK1xcdFxcdFxcdCAgICBib29sIGlzX3dyaXRlLCBib29sIGFjY2Vzc2VzX3N0YWNrX29ubHkpXFxuK3tcXG4rI2lmZGVmIENPTkZJR19CUEZfSklUX0tBU0FOXFxuK1xcdHUzMiBicGZfc2l6ZSA9IEJQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpO1xcbitcXHRzMzIgb2ZmID0gaW5zbi1cXHUwMDNlb2ZmO1xcbitcXHR1OCAqcHJvZyA9ICpwcHJvZztcXG4rXFx0dm9pZCAqa2FzYW5fZnVuYztcXG4rXFxuK1xcdGlmICghZW52KVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChhY2Nlc3Nlc19zdGFja19vbmx5KVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdC8qIERlcml2ZSBLQVNBTiBjaGVjayBmdW5jdGlvbiBmcm9tIGFjY2VzcyB0eXBlIGFuZCBzaXplICovXFxuK1xcdHN3aXRjaCAoYnBmX3NpemUpIHtcXG4rXFx0Y2FzZSBCUEZfQjpcXG4rXFx0XFx0a2FzYW5fZnVuYyA9IGlzX3dyaXRlID8gX19hc2FuX3N0b3JlMSA6IF9fYXNhbl9sb2FkMTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQlBGX0g6XFxuK1xcdFxcdGthc2FuX2Z1bmMgPSBpc193cml0ZSA/IF9fYXNhbl9zdG9yZTIgOiBfX2FzYW5fbG9hZDI7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEJQRl9XOlxcbitcXHRcXHRrYXNhbl9mdW5jID0gaXNfd3JpdGUgPyBfX2FzYW5fc3RvcmU0IDogX19hc2FuX2xvYWQ0O1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBCUEZfRFc6XFxuK1xcdFxcdGthc2FuX2Z1bmMgPSBpc193cml0ZSA/IF9fYXNhbl9zdG9yZTggOiBfX2FzYW5fbG9hZDg7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0LyogU2F2ZSByYXggKi9cXG4rXFx0RU1JVDEoMHg1MCk7XFxuK1xcdC8qIFNhdmUgcmN4ICovXFxuK1xcdEVNSVQxKDB4NTEpO1xcbitcXHQvKiBTYXZlIHJkeCAqL1xcbitcXHRFTUlUMSgweDUyKTtcXG4rXFx0LyogU2F2ZSByc2kgKi9cXG4rXFx0RU1JVDEoMHg1Nik7XFxuK1xcdC8qIFNhdmUgcmRpICovXFxuK1xcdEVNSVQxKDB4NTcpO1xcbitcXHQvKiBTYXZlIHI4ICovXFxuK1xcdEVNSVQyKDB4NDEsIDB4NTApO1xcbitcXHQvKiBTYXZlIHI5ICovXFxuK1xcdEVNSVQyKDB4NDEsIDB4NTEpO1xcbitcXG4rXFx0LyogbW92IHJkaSwgYWRkcl9yZWcgKi9cXG4rXFx0RU1JVF9tb3YoQlBGX1JFR18xLCBhZGRyX3JlZyk7XFxuK1xcbitcXHQvKiBhZGQgcmRpLCBvZmYgKGlmIG9mZnNldCBpcyBub24temVybykgKi9cXG4rXFx0aWYgKG9mZikge1xcbitcXHRcXHRpZiAoaXNfaW1tOChvZmYpKSB7XFxuK1xcdFxcdFxcdC8qIGFkZCByZGksIGltbTggKi9cXG4rXFx0XFx0XFx0RU1JVDQoMHg0OCwgMHg4MywgMHhDNywgKHU4KW9mZik7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdC8qIGFkZCByZGksIGltbTMyICovXFxuK1xcdFxcdFxcdEVNSVQzX29mZjMyKDB4NDgsIDB4ODEsIDB4QzcsIG9mZik7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0LyogQWRqdXN0IGlwIHRvIGFjY291bnQgZm9yIHRoZSBpbnN0cnVtZW50YXRpb24gZ2VuZXJhdGVkIHNvIGZhciAqL1xcbitcXHRpcCArPSAocHJvZyAtICpwcHJvZyk7XFxuK1xcdC8qIFdlIGVtaXQgYSBjYWxsLCBzbyB1cGRhdGUgY2FsbCBkZXB0aCBjb3VudGluZyAqL1xcbitcXHRpcCArPSB4ODZfY2FsbF9kZXB0aF9lbWl0X2FjY291bnRpbmcoXFx1MDAyNnByb2csIGthc2FuX2Z1bmMsIGlwKTtcXG4rXFx0LyogY2FsbCBrYXNhbl9mdW5jICovXFxuK1xcdGlmIChlbWl0X2NhbGwoXFx1MDAyNnByb2csIGthc2FuX2Z1bmMsIGlwKSlcXG4rXFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuK1xcbitcXHRFTUlUMigweDQxLCAweDU5KTtcXG4rXFx0RU1JVDIoMHg0MSwgMHg1OCk7XFxuK1xcdEVNSVQxKDB4NUYpO1xcbitcXHRFTUlUMSgweDVFKTtcXG4rXFx0RU1JVDEoMHg1QSk7XFxuK1xcdEVNSVQxKDB4NTkpO1xcbitcXHRFTUlUMSgweDU4KTtcXG4rXFxuK1xcdCpwcHJvZyA9IHByb2c7XFxuKyNlbmRpZiAvKiBDT05GSUdfQlBGX0pJVF9LQVNBTiAqL1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gLyogTERYOiBkc3RfcmVnID0gKih1OCopKHNyY19yZWcgKyBvZmYpICovXFxuIHN0YXRpYyB2b2lkIGVtaXRfbGR4KHU4ICoqcHByb2csIHUzMiBzaXplLCB1MzIgZHN0X3JlZywgdTMyIHNyY19yZWcsIGludCBvZmYpXFxuIHtcXG5AQCAtMTMxNSw2ICsxNDEwLDY0IEBAIHN0YXRpYyB2b2lkIGVtaXRfc3RfaW5kZXgodTggKipwcHJvZywgdTMyIHNpemUsIHUzMiBkc3RfcmVnLCB1MzIgaW5kZXhfcmVnLCBpbnRcXG4gXFx0KnBwcm9nID0gcHJvZztcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgZW1pdF9zdCh1OCAqKnBwcm9nLCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIGludCBkc3RfcmVnLFxcbitcXHRcXHQgICAgczMyIG91dGdvaW5nX2FyZ19iYXNlLCB1MTYgb3V0Z29pbmdfcnNwKVxcbit7XFxuK1xcdHMzMiBpbW0zMiA9IGluc24tXFx1MDAzZWltbTtcXG4rXFx0dTggKnByb2cgPSAqcHByb2c7XFxuK1xcdHMzMiBpbnNuX29mZjtcXG4rXFxuK1xcdHN3aXRjaCAoQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkpIHtcXG4rXFx0Y2FzZSBCUEZfQjpcXG4rXFx0XFx0aWYgKGlzX2VyZWcoZHN0X3JlZykpXFxuK1xcdFxcdFxcdEVNSVQyKDB4NDEsIDB4QzYpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdEVNSVQxKDB4QzYpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBCUEZfSDpcXG4rXFx0XFx0aWYgKGlzX2VyZWcoZHN0X3JlZykpXFxuK1xcdFxcdFxcdEVNSVQzKDB4NjYsIDB4NDEsIDB4QzcpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdEVNSVQyKDB4NjYsIDB4QzcpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBCUEZfVzpcXG4rXFx0XFx0aWYgKGlzX2VyZWcoZHN0X3JlZykpXFxuK1xcdFxcdFxcdEVNSVQyKDB4NDEsIDB4QzcpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdEVNSVQxKDB4QzcpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBCUEZfRFc6XFxuK1xcdFxcdGlmIChkc3RfcmVnID09IEJQRl9SRUdfUEFSQU1TIFxcdTAwMjZcXHUwMDI2IGluc24tXFx1MDAzZW9mZiA9PSAtOCkge1xcbitcXHRcXHRcXHQvKiBBcmcgNjogc3RvcmUgaW1tZWRpYXRlIGluIHI5IHJlZ2lzdGVyICovXFxuK1xcdFxcdFxcdGVtaXRfbW92X2ltbTY0KFxcdTAwMjZwcm9nLCBYODZfUkVHX1I5LCBpbW0zMiBcXHUwMDNlXFx1MDAzZSAzMSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgICh1MzIpaW1tMzIpO1xcbitcXHRcXHRcXHQqcHByb2cgPSBwcm9nO1xcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdH1cXG4rXFx0XFx0RU1JVDIoYWRkXzFtb2QoMHg0OCwgZHN0X3JlZyksIDB4QzcpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0aW5zbl9vZmYgPSBpbnNuLVxcdTAwM2VvZmY7XFxuK1xcdGlmIChkc3RfcmVnID09IEJQRl9SRUdfUEFSQU1TKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEFyZ3MgNys6IHJldmVyc2UgQlBGIG5lZ2F0aXZlIG9mZnNldHMgdG9cXG4rXFx0XFx0ICogeDg2IHBvc2l0aXZlIHJzcCBvZmZzZXRzLlxcbitcXHRcXHQgKiBCUEYgb2ZmPS0xNiDihpIgW3JzcCswXSwgb2ZmPS0yNCDihpIgW3JzcCs4XSwgLi4uXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpbnNuX29mZiA9IG91dGdvaW5nX2FyZ19iYXNlIC0gb3V0Z29pbmdfcnNwIC1cXG4rXFx0XFx0XFx0aW5zbl9vZmYgLSAxNjtcXG4rXFx0XFx0ZHN0X3JlZyA9IEJQRl9SRUdfRlA7XFxuK1xcdH1cXG4rXFx0aWYgKGlzX2ltbTgoaW5zbl9vZmYpKVxcbitcXHRcXHRFTUlUMihhZGRfMXJlZygweDQwLCBkc3RfcmVnKSwgaW5zbl9vZmYpO1xcbitcXHRlbHNlXFxuK1xcdFxcdEVNSVQxX29mZjMyKGFkZF8xcmVnKDB4ODAsIGRzdF9yZWcpLCBpbnNuX29mZik7XFxuK1xcbitcXHRFTUlUKGltbTMyLCBicGZfc2l6ZV90b194ODZfYnl0ZXMoQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkpKTtcXG4rXFx0KnBwcm9nID0gcHJvZztcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgZW1pdF9zdF9yMTIodTggKipwcHJvZywgdTMyIHNpemUsIHUzMiBkc3RfcmVnLCBpbnQgb2ZmLCBpbnQgaW1tKVxcbiB7XFxuIFxcdGVtaXRfc3RfaW5kZXgocHByb2csIHNpemUsIGRzdF9yZWcsIFg4Nl9SRUdfUjEyLCBvZmYsIGltbSk7XFxuQEAgLTE0MjMsMTcgKzE1NzYsMzEgQEAgc3RhdGljIGludCBlbWl0X2F0b21pY19ybXdfaW5kZXgodTggKipwcHJvZywgdTMyIGF0b21pY19vcCwgdTMyIHNpemUsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGVtaXRfYXRvbWljX2xkX3N0KHU4ICoqcHByb2csIHUzMiBhdG9taWNfb3AsIHUzMiBkc3RfcmVnLFxcbi1cXHRcXHRcXHQgICAgIHUzMiBzcmNfcmVnLCBzMTYgb2ZmLCB1OCBicGZfc2l6ZSlcXG4rc3RhdGljIGludCBlbWl0X2F0b21pY19sZF9zdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1OCAqKnBwcm9nLFxcbitcXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgdTggKmlwLCB1MzIgZHN0X3JlZyxcXG4rXFx0XFx0XFx0ICAgICB1MzIgc3JjX3JlZywgYm9vbCBhY2Nlc3Nlc19zdGFja19vbmx5KVxcbiB7XFxuK1xcdHUzMiBhdG9taWNfb3AgPSBpbnNuLVxcdTAwM2VpbW07XFxuK1xcdGludCBlcnI7XFxuK1xcbiBcXHRzd2l0Y2ggKGF0b21pY19vcCkge1xcbiBcXHRjYXNlIEJQRl9MT0FEX0FDUTpcXG4rXFx0XFx0ZXJyID0gZW1pdF9rYXNhbl9jaGVjayhlbnYsIHBwcm9nLCBzcmNfcmVnLCBpbnNuLCBpcCwgZmFsc2UsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBhY2Nlc3Nlc19zdGFja19vbmx5KTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0XFx0LyogZHN0X3JlZyA9IHNtcF9sb2FkX2FjcXVpcmUoc3JjX3JlZyArIG9mZjE2KSAqL1xcbi1cXHRcXHRlbWl0X2xkeChwcHJvZywgYnBmX3NpemUsIGRzdF9yZWcsIHNyY19yZWcsIG9mZik7XFxuK1xcdFxcdGVtaXRfbGR4KHBwcm9nLCBCUEZfU0laRShpbnNuLVxcdTAwM2Vjb2RlKSwgZHN0X3JlZywgc3JjX3JlZyxcXG4rXFx0XFx0XFx0IGluc24tXFx1MDAzZW9mZik7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIEJQRl9TVE9SRV9SRUw6XFxuK1xcdFxcdGVyciA9IGVtaXRfa2FzYW5fY2hlY2soZW52LCBwcHJvZywgZHN0X3JlZywgaW5zbiwgaXAsIHRydWUsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBhY2Nlc3Nlc19zdGFja19vbmx5KTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0XFx0Lyogc21wX3N0b3JlX3JlbGVhc2UoZHN0X3JlZyArIG9mZjE2LCBzcmNfcmVnKSAqL1xcbi1cXHRcXHRlbWl0X3N0eChwcHJvZywgYnBmX3NpemUsIGRzdF9yZWcsIHNyY19yZWcsIG9mZik7XFxuK1xcdFxcdGVtaXRfc3R4KHBwcm9nLCBCUEZfU0laRShpbnNuLVxcdTAwM2Vjb2RlKSwgZHN0X3JlZywgc3JjX3JlZyxcXG4rXFx0XFx0XFx0IGluc24tXFx1MDAzZW9mZik7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRwcl9lcnIoXFxcImJwZl9qaXQ6IHVua25vd24gYXRvbWljIGxvYWQvc3RvcmUgb3Bjb2RlICUwMnhcXFxcblxcXCIsXFxuQEAgLTE4MTEsMTAgKzE5NzgsMTIgQEAgc3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICpcXG4gXFx0XFx0Y29uc3QgczMyIGltbTMyID0gaW5zbi1cXHUwMDNlaW1tO1xcbiBcXHRcXHR1MzIgZHN0X3JlZyA9IGluc24tXFx1MDAzZWRzdF9yZWc7XFxuIFxcdFxcdHUzMiBzcmNfcmVnID0gaW5zbi1cXHUwMDNlc3JjX3JlZztcXG4rXFx0XFx0Ym9vbCBhY2Nlc3Nlc19zdGFja19vbmx5O1xcbiBcXHRcXHR1OCBiMiA9IDAsIGIzID0gMDtcXG4gXFx0XFx0dTggKnN0YXJ0X29mX2xkeDtcXG4gXFx0XFx0czY0IGptcF9vZmZzZXQ7XFxuIFxcdFxcdHMzMiBpbnNuX29mZjtcXG4rXFx0XFx0aW50IGluc25faWR4O1xcbiBcXHRcXHR1OCBqbXBfY29uZDtcXG4gXFx0XFx0dTggKmZ1bmM7XFxuIFxcdFxcdGludCBub3BzO1xcbkBAIC0xODMxLDYgKzIwMDAsMTAgQEAgc3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICpcXG4gXFx0XFx0XFx0RU1JVF9FTkRCUigpO1xcbiBcXG4gXFx0XFx0aXAgPSBpbWFnZSArIGFkZHJzW2kgLSAxXSArIChwcm9nIC0gdGVtcCk7XFxuK1xcdFxcdGluc25faWR4ID0gaSAtIDEgKyBicGZfcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VzdWJwcm9nX3N0YXJ0O1xcbitcXHRcXHRhY2Nlc3Nlc19zdGFja19vbmx5ID1cXG4rXFx0XFx0XFx0ZW52ID8gIWVudi1cXHUwMDNlaW5zbl9hdXhfZGF0YVtpbnNuX2lkeF0ubm9uX3N0YWNrX2FjY2VzcyA6XFxuK1xcdFxcdFxcdCAgICAgIGZhbHNlO1xcbiBcXG4gXFx0XFx0c3dpdGNoIChpbnNuLVxcdTAwM2Vjb2RlKSB7XFxuIFxcdFxcdFxcdC8qIEFMVSAqL1xcbkBAIC0yMjA3LDQ5ICsyMzgwLDE3IEBAIHN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqXFxuIFxcdFxcdFxcdEVNSVRfTEZFTkNFKCk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG4tXFx0XFx0XFx0LyogU1Q6ICoodTgqKShkc3RfcmVnICsgb2ZmKSA9IGltbSAqL1xcbiBcXHRcXHRjYXNlIEJQRl9TVCB8IEJQRl9NRU0gfCBCUEZfQjpcXG4tXFx0XFx0XFx0aWYgKGlzX2VyZWcoZHN0X3JlZykpXFxuLVxcdFxcdFxcdFxcdEVNSVQyKDB4NDEsIDB4QzYpO1xcbi1cXHRcXHRcXHRlbHNlXFxuLVxcdFxcdFxcdFxcdEVNSVQxKDB4QzYpO1xcbi1cXHRcXHRcXHRnb3RvIHN0O1xcbiBcXHRcXHRjYXNlIEJQRl9TVCB8IEJQRl9NRU0gfCBCUEZfSDpcXG4tXFx0XFx0XFx0aWYgKGlzX2VyZWcoZHN0X3JlZykpXFxuLVxcdFxcdFxcdFxcdEVNSVQzKDB4NjYsIDB4NDEsIDB4QzcpO1xcbi1cXHRcXHRcXHRlbHNlXFxuLVxcdFxcdFxcdFxcdEVNSVQyKDB4NjYsIDB4QzcpO1xcbi1cXHRcXHRcXHRnb3RvIHN0O1xcbiBcXHRcXHRjYXNlIEJQRl9TVCB8IEJQRl9NRU0gfCBCUEZfVzpcXG4tXFx0XFx0XFx0aWYgKGlzX2VyZWcoZHN0X3JlZykpXFxuLVxcdFxcdFxcdFxcdEVNSVQyKDB4NDEsIDB4QzcpO1xcbi1cXHRcXHRcXHRlbHNlXFxuLVxcdFxcdFxcdFxcdEVNSVQxKDB4QzcpO1xcbi1cXHRcXHRcXHRnb3RvIHN0O1xcbiBcXHRcXHRjYXNlIEJQRl9TVCB8IEJQRl9NRU0gfCBCUEZfRFc6XFxuLVxcdFxcdFxcdGlmIChkc3RfcmVnID09IEJQRl9SRUdfUEFSQU1TIFxcdTAwMjZcXHUwMDI2IGluc24tXFx1MDAzZW9mZiA9PSAtOCkge1xcbi1cXHRcXHRcXHRcXHQvKiBBcmcgNjogc3RvcmUgaW1tZWRpYXRlIGluIHI5IHJlZ2lzdGVyICovXFxuLVxcdFxcdFxcdFxcdGVtaXRfbW92X2ltbTY0KFxcdTAwMjZwcm9nLCBYODZfUkVHX1I5LCBpbW0zMiBcXHUwMDNlXFx1MDAzZSAzMSwgKHUzMilpbW0zMik7XFxuLVxcdFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdEVNSVQyKGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpLCAweEM3KTtcXG4tXFxuLXN0OlxcdFxcdFxcdGluc25fb2ZmID0gaW5zbi1cXHUwMDNlb2ZmO1xcbi1cXHRcXHRcXHRpZiAoZHN0X3JlZyA9PSBCUEZfUkVHX1BBUkFNUykge1xcbi1cXHRcXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHRcXHQgKiBBcmdzIDcrOiByZXZlcnNlIEJQRiBuZWdhdGl2ZSBvZmZzZXRzIHRvXFxuLVxcdFxcdFxcdFxcdCAqIHg4NiBwb3NpdGl2ZSByc3Agb2Zmc2V0cy5cXG4tXFx0XFx0XFx0XFx0ICogQlBGIG9mZj0tMTYg4oaSIFtyc3ArMF0sIG9mZj0tMjQg4oaSIFtyc3ArOF0sIC4uLlxcbi1cXHRcXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0XFx0aW5zbl9vZmYgPSBvdXRnb2luZ19hcmdfYmFzZSAtIG91dGdvaW5nX3JzcCAtIGluc25fb2ZmIC0gMTY7XFxuLVxcdFxcdFxcdFxcdGRzdF9yZWcgPSBCUEZfUkVHX0ZQO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGlmIChpc19pbW04KGluc25fb2ZmKSlcXG4tXFx0XFx0XFx0XFx0RU1JVDIoYWRkXzFyZWcoMHg0MCwgZHN0X3JlZyksIGluc25fb2ZmKTtcXG4tXFx0XFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRcXHRFTUlUMV9vZmYzMihhZGRfMXJlZygweDgwLCBkc3RfcmVnKSwgaW5zbl9vZmYpO1xcbitcXHRcXHRcXHRlcnIgPSBlbWl0X2thc2FuX2NoZWNrKGVudiwgXFx1MDAyNnByb2csIGRzdF9yZWcsIGluc24sIGlwLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgdHJ1ZSwgYWNjZXNzZXNfc3RhY2tfb25seSk7XFxuK1xcdFxcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbi1cXHRcXHRcXHRFTUlUKGltbTMyLCBicGZfc2l6ZV90b194ODZfYnl0ZXMoQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSkpKTtcXG4rXFx0XFx0XFx0ZW1pdF9zdChcXHUwMDI2cHJvZywgaW5zbiwgZHN0X3JlZywgb3V0Z29pbmdfYXJnX2Jhc2UsXFxuK1xcdFxcdFxcdFxcdG91dGdvaW5nX3JzcCk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG4gXFx0XFx0XFx0LyogU1RYOiAqKHU4KikoZHN0X3JlZyArIG9mZikgPSBzcmNfcmVnICovXFxuQEAgLTIyNjcsNiArMjQwOCwxMCBAQCBzdDpcXHRcXHRcXHRpbnNuX29mZiA9IGluc24tXFx1MDAzZW9mZjtcXG4gXFx0XFx0XFx0XFx0aW5zbl9vZmYgPSBvdXRnb2luZ19hcmdfYmFzZSAtIG91dGdvaW5nX3JzcCAtIGluc25fb2ZmIC0gMTY7XFxuIFxcdFxcdFxcdFxcdGRzdF9yZWcgPSBCUEZfUkVHX0ZQO1xcbiBcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGVyciA9IGVtaXRfa2FzYW5fY2hlY2soZW52LCBcXHUwMDI2cHJvZywgZHN0X3JlZywgaW5zbiwgaXAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICB0cnVlLCBhY2Nlc3Nlc19zdGFja19vbmx5KTtcXG4rXFx0XFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0XFx0XFx0ZW1pdF9zdHgoXFx1MDAyNnByb2csIEJQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpLCBkc3RfcmVnLCBzcmNfcmVnLCBpbnNuX29mZik7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG5AQCAtMjQyOCw2ICsyNTczLDEyIEBAIHN0OlxcdFxcdFxcdGluc25fb2ZmID0gaW5zbi1cXHUwMDNlb2ZmO1xcbiBcXHRcXHRcXHRcXHQvKiBwb3B1bGF0ZSBqbXBfb2Zmc2V0IGZvciBKQUUgYWJvdmUgdG8ganVtcCB0byBzdGFydF9vZl9sZHggKi9cXG4gXFx0XFx0XFx0XFx0c3RhcnRfb2ZfbGR4ID0gcHJvZztcXG4gXFx0XFx0XFx0XFx0ZW5kX29mX2ptcFstMV0gPSBzdGFydF9vZl9sZHggLSBlbmRfb2Zfam1wO1xcbitcXHRcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRcXHRlcnIgPSBlbWl0X2thc2FuX2NoZWNrKGVudiwgXFx1MDAyNnByb2csIHNyY19yZWcsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBpbnNuLCBpcCwgZmFsc2UsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBhY2Nlc3Nlc19zdGFja19vbmx5KTtcXG4rXFx0XFx0XFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRpZiAoQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX1BST0JFX01FTVNYIHx8XFxuIFxcdFxcdFxcdCAgICBCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfTUVNU1gpXFxuQEAgLTI0ODksMTUgKzI2NDAsMTYgQEAgc3Q6XFx0XFx0XFx0aW5zbl9vZmYgPSBpbnNuLVxcdTAwM2VvZmY7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0ZmFsbHRocm91Z2g7XFxuIFxcdFxcdGNhc2UgQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfVzpcXG4tXFx0XFx0Y2FzZSBCUEZfU1RYIHwgQlBGX0FUT01JQyB8IEJQRl9EVzpcXG4tXFx0XFx0XFx0aWYgKGluc24tXFx1MDAzZWltbSA9PSAoQlBGX0FORCB8IEJQRl9GRVRDSCkgfHxcXG4tXFx0XFx0XFx0ICAgIGluc24tXFx1MDAzZWltbSA9PSAoQlBGX09SIHwgQlBGX0ZFVENIKSB8fFxcbi1cXHRcXHRcXHQgICAgaW5zbi1cXHUwMDNlaW1tID09IChCUEZfWE9SIHwgQlBGX0ZFVENIKSkge1xcbi1cXHRcXHRcXHRcXHRib29sIGlzNjQgPSBCUEZfU0laRShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfRFc7XFxuLVxcdFxcdFxcdFxcdHUzMiByZWFsX3NyY19yZWcgPSBzcmNfcmVnO1xcbi1cXHRcXHRcXHRcXHR1MzIgcmVhbF9kc3RfcmVnID0gZHN0X3JlZztcXG4tXFx0XFx0XFx0XFx0dTggKmJyYW5jaF90YXJnZXQ7XFxuLVxcbitcXHRcXHRjYXNlIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX0RXOiB7XFxuK1xcdFxcdFxcdGJvb2wgaXM2NCA9IEJQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9EVztcXG4rXFx0XFx0XFx0dTMyIHJlYWxfc3JjX3JlZyA9IHNyY19yZWc7XFxuK1xcdFxcdFxcdHUzMiByZWFsX2RzdF9yZWcgPSBkc3RfcmVnO1xcbitcXHRcXHRcXHR1OCAqYnJhbmNoX3RhcmdldDtcXG4rXFx0XFx0XFx0Ym9vbCBpc19hdG9taWNfZmV0Y2ggPVxcbitcXHRcXHRcXHRcXHQoaW5zbi1cXHUwMDNlaW1tID09IChCUEZfQU5EIHwgQlBGX0ZFVENIKSB8fFxcbitcXHRcXHRcXHRcXHQgaW5zbi1cXHUwMDNlaW1tID09IChCUEZfT1IgfCBCUEZfRkVUQ0gpIHx8XFxuK1xcdFxcdFxcdFxcdCBpbnNuLVxcdTAwM2VpbW0gPT0gKEJQRl9YT1IgfCBCUEZfRkVUQ0gpKTtcXG4rXFx0XFx0XFx0aWYgKGlzX2F0b21pY19mZXRjaCkge1xcbiBcXHRcXHRcXHRcXHQvKlxcbiBcXHRcXHRcXHRcXHQgKiBDYW4ndCBiZSBpbXBsZW1lbnRlZCB3aXRoIGEgc2luZ2xlIHg4NiBpbnNuLlxcbiBcXHRcXHRcXHRcXHQgKiBOZWVkIHRvIGRvIGEgQ01QWENIRyBsb29wLlxcbkBAIC0yNTEwLDcgKzI2NjIsMTcgQEAgc3Q6XFx0XFx0XFx0aW5zbl9vZmYgPSBpbnNuLVxcdTAwM2VvZmY7XFxuIFxcdFxcdFxcdFxcdGlmIChkc3RfcmVnID09IEJQRl9SRUdfMClcXG4gXFx0XFx0XFx0XFx0XFx0cmVhbF9kc3RfcmVnID0gQlBGX1JFR19BWDtcXG4gXFxuK1xcdFxcdFxcdFxcdGlwICs9IDM7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0aWYgKCFicGZfYXRvbWljX2lzX2xvYWRfc3RvcmUoaW5zbikpIHtcXG4rXFx0XFx0XFx0XFx0ZXJyID0gZW1pdF9rYXNhbl9jaGVjayhlbnYsIFxcdTAwMjZwcm9nLCByZWFsX2RzdF9yZWcsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBpbnNuLCBpcCwgdHJ1ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGFjY2Vzc2VzX3N0YWNrX29ubHkpO1xcbitcXHRcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHRcXHRcXHRicmFuY2hfdGFyZ2V0ID0gcHJvZztcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRpZiAoaXNfYXRvbWljX2ZldGNoKSB7XFxuIFxcdFxcdFxcdFxcdC8qIExvYWQgb2xkIHZhbHVlICovXFxuIFxcdFxcdFxcdFxcdGVtaXRfbGR4KFxcdTAwMjZwcm9nLCBCUEZfU0laRShpbnNuLVxcdTAwM2Vjb2RlKSxcXG4gXFx0XFx0XFx0XFx0XFx0IEJQRl9SRUdfMCwgcmVhbF9kc3RfcmVnLCBpbnNuLVxcdTAwM2VvZmYpO1xcbkBAIC0yNTQyLDE1ICsyNzA0LDE2IEBAIHN0OlxcdFxcdFxcdGluc25fb2ZmID0gaW5zbi1cXHUwMDNlb2ZmO1xcbiBcXHRcXHRcXHR9XFxuIFxcbiBcXHRcXHRcXHRpZiAoYnBmX2F0b21pY19pc19sb2FkX3N0b3JlKGluc24pKVxcbi1cXHRcXHRcXHRcXHRlcnIgPSBlbWl0X2F0b21pY19sZF9zdChcXHUwMDI2cHJvZywgaW5zbi1cXHUwMDNlaW1tLCBkc3RfcmVnLCBzcmNfcmVnLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRpbnNuLVxcdTAwM2VvZmYsIEJQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpKTtcXG4rXFx0XFx0XFx0XFx0ZXJyID0gZW1pdF9hdG9taWNfbGRfc3QoZW52LCBcXHUwMDI2cHJvZywgaW5zbiwgaXAsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdGRzdF9yZWcsIHNyY19yZWcsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdGFjY2Vzc2VzX3N0YWNrX29ubHkpO1xcbiBcXHRcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdFxcdGVyciA9IGVtaXRfYXRvbWljX3JtdyhcXHUwMDI2cHJvZywgaW5zbi1cXHUwMDNlaW1tLCBkc3RfcmVnLCBzcmNfcmVnLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBpbnNuLVxcdTAwM2VvZmYsIEJQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpKTtcXG4gXFx0XFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuLVxcbitcXHRcXHR9XFxuIFxcdFxcdGNhc2UgQlBGX1NUWCB8IEJQRl9QUk9CRV9BVE9NSUMgfCBCUEZfQjpcXG4gXFx0XFx0Y2FzZSBCUEZfU1RYIHwgQlBGX1BST0JFX0FUT01JQyB8IEJQRl9IOlxcbiBcXHRcXHRcXHRpZiAoIWJwZl9hdG9taWNfaXNfbG9hZF9zdG9yZShpbnNuKSkge1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxcbmluZGV4IDMxN2U5OWI5YWNjMGE0Li5hYmU4NDU5Y2M3MDEyMiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxcbkBAIC03MjMsNiArNzIzLDggQEAgc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhIHtcXG4gXFx0dTE2IGNvbnN0X3JlZ19tYXBfbWFzaztcXG4gXFx0dTE2IGNvbnN0X3JlZ19zdWJwcm9nX21hc2s7XFxuIFxcdHUzMiBjb25zdF9yZWdfdmFsc1sxMF07XFxuK1xcdC8qIGluc3RydWN0aW9uIGNhbiBhY2Nlc3Mgbm9uLXN0YWNrIG1lbW9yeSAqL1xcbitcXHRib29sIG5vbl9zdGFja19hY2Nlc3M7XFxuIH07XFxuIFxcbiAjZGVmaW5lIE1BWF9VU0VEX01BUFMgNjQgLyogbWF4IG51bWJlciBvZiBtYXBzIGFjY2Vzc2VkIGJ5IG9uZSBlQlBGIHByb2dyYW0gKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcXG5pbmRleCAxNGFjYjI0NTU3NDZmYy4uMWViY2QyNDdlZjRlM2YgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcXG5AQCAtMTIxMCwxMyArMTIxMCwxNyBAQCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX3NpbmdsZShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBvZmYsXFxuIFxcbiAjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxuIHN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLFxcbi1cXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4pO1xcbitcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4sXFxuK1xcdFxcdFxcdFxcdCAgICAgczMyIGluc25fb2ZmX2luX3BhdGNoKTtcXG4gc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpicGZfZHVwX2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudik7XFxuIHZvaWQgYnBmX3Jlc3RvcmVfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRcXHRcXHQgICAgICAgc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpvcmlnX2luc25fYXV4KTtcXG4gI2Vsc2VcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgdTMyIGxlbilcXG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgdTMyIG9mZixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYXRjaCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgdTMyIGxlbixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgczMyIGluc25fb2ZmX2luX3BhdGNoKVxcbiB7XFxuIFxcdHJldHVybiBFUlJfUFRSKC1FTk9UU1VQUCk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9LY29uZmlnIGIva2VybmVsL2JwZi9LY29uZmlnXFxuaW5kZXggZWIzZGUzNTczNGYwOTIuLmUxZjM4NTBkMmY1YTA3IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvS2NvbmZpZ1xcbisrKyBiL2tlcm5lbC9icGYvS2NvbmZpZ1xcbkBAIC0xNyw2ICsxNywxMCBAQCBjb25maWcgSEFWRV9DQlBGX0pJVFxcbiBjb25maWcgSEFWRV9FQlBGX0pJVFxcbiBcXHRib29sXFxuIFxcbisjIEtBU0FOIHN1cHBvcnQgZm9yIEpJVCBjb21waWxlclxcbitjb25maWcgSEFWRV9FQlBGX0pJVF9LQVNBTlxcbitcXHRib29sXFxuK1xcbiAjIFVzZWQgYnkgYXJjaHMgdG8gdGVsbCB0aGF0IHRoZXkgd2FudCB0aGUgQlBGIEpJVCBjb21waWxlciBlbmFibGVkIGJ5XFxuICMgZGVmYXVsdCBmb3Iga2VybmVscyB0aGF0IHdlcmUgY29tcGlsZWQgd2l0aCBCUEYgSklUIHN1cHBvcnQuXFxuIGNvbmZpZyBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUXFxuQEAgLTEwMSw0ICsxMDUsMTcgQEAgY29uZmlnIEJQRl9MU01cXG4gXFxuIFxcdCAgSWYgeW91IGFyZSB1bnN1cmUgaG93IHRvIGFuc3dlciB0aGlzIHF1ZXN0aW9uLCBhbnN3ZXIgTi5cXG4gXFxuK2NvbmZpZyBCUEZfSklUX0tBU0FOXFxuK1xcdGJvb2xcXG4rXFx0ZGVwZW5kcyBvbiBIQVZFX0VCUEZfSklUX0tBU0FOXFxuK1xcdGRlcGVuZHMgb24gS0FTQU5fR0VORVJJQ1xcbitcXHRkZXBlbmRzIG9uIEtBU0FOX1ZNQUxMT0NcXG4rXFx0ZGVwZW5kcyBvbiBCUEZfSklUXFxuK1xcdGRlZmF1bHQgeSBpZiBLQVNBTlxcbitcXHRoZWxwXFxuK1xcdCAgTWFrZXMgSklUIGNvbXBpbGVyIGluc2VydCBnZW5lcmljIG91dGxpbmUgS0FTQU4gY2hlY2tzIGluIEJQRlxcbitcXHQgIHByb2dyYW1zIHdoZW4gdGhleSBhcmUgaW5zZXJ0ZWQgaW4gdGhlIGtlcm5lbC4gVGhpcyBmZWF0dXJlIGlzXFxuK1xcdCAgYXV0b21hdGljYWxseSBlbmFibGVkIGlmIHRoZSBuZWVkZWQgc2V0IG9mIEtBU0FOIGFuZCBCUEZcXG4rXFx0ICBjb25maWd1cmF0aW9uIG9wdGlvbnMgaXMgZW5hYmxlZC5cXG4rXFxuIGVuZG1lbnUgIyBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9jb3JlLmMgYi9rZXJuZWwvYnBmL2NvcmUuY1xcbmluZGV4IDQ3ZmUwNDdhZDMwYjg4Li5jZmYwMDM1ZjQwMWE5YyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL2NvcmUuY1xcbisrKyBiL2tlcm5lbC9icGYvY29yZS5jXFxuQEAgLTE1OTksNyArMTU5OSw3IEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0aWYgKGVudilcXG4tXFx0XFx0XFx0dG1wID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGksIGluc25fYnVmZiwgcmV3cml0dGVuKTtcXG4rXFx0XFx0XFx0dG1wID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGksIGluc25fYnVmZiwgcmV3cml0dGVuLCByZXdyaXR0ZW4gLSAxKTtcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHR0bXAgPSBicGZfcGF0Y2hfaW5zbl9zaW5nbGUoY2xvbmUsIGksIGluc25fYnVmZiwgcmV3cml0dGVuKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvZml4dXBzLmMgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXFxuaW5kZXggZDNiZTk3MjcxNGIyMmMuLjBlZGE1NTEyYmFlY2ViIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvZml4dXBzLmNcXG4rKysgYi9rZXJuZWwvYnBmL2ZpeHVwcy5jXFxuQEAgLTE1MiwxMiArMTUyLDI1IEBAIHN0YXRpYyBpbnQgZ2V0X2NhbGxlZV9zdGFja19kZXB0aChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiB9XFxuICNlbmRpZlxcbiBcXG4rc3RhdGljIGJvb2wgaXNfbWVtX2luc24oc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbit7XFxuK1xcdGlmIChCUEZfQ0xBU1MoaW5zbi1cXHUwMDNlY29kZSkgIT0gQlBGX1NUIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBCUEZfQ0xBU1MoaW5zbi1cXHUwMDNlY29kZSkgIT0gQlBGX1NUWCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgQlBGX0NMQVNTKGluc24tXFx1MDAzZWNvZGUpICE9IEJQRl9MRFgpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiAoQlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX01FTSB8fFxcbitcXHRcXHRCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfTUVNU1ggfHxcXG4rXFx0XFx0QlBGX01PREUoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0FUT01JQyk7XFxuK31cXG4rXFxuIC8qIHNpbmdsZSBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWluc25pW29mZl0gaW5zdHJ1Y3Rpb24gd2FzIHJlcGxhY2VkIHdpdGggdGhlIHJhbmdlXFxuICAqIGluc25pW29mZiwgb2ZmICsgY250KS4gIEFkanVzdCBjb3JyZXNwb25kaW5nIGluc25fYXV4X2RhdGEgYnkgY29weWluZ1xcbiAgKiBbMCwgb2ZmKSBhbmQgW29mZiwgZW5kKSB0byBuZXcgbG9jYXRpb25zLCBzbyB0aGUgcGF0Y2hlZCByYW5nZSBzdGF5cyB6ZXJvXFxuICAqL1xcbiBzdGF0aWMgdm9pZCBhZGp1c3RfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi1cXHRcXHRcXHRcXHQgc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZywgdTMyIG9mZiwgdTMyIGNudClcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2csIHUzMiBvZmYsIHUzMiBjbnQsXFxuK1xcdFxcdFxcdFxcdCBzMzIgaW5zbl9vZmZfaW5fcGF0Y2gpXFxuIHtcXG4gXFx0c3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICpkYXRhID0gZW52LVxcdTAwM2VpbnNuX2F1eF9kYXRhO1xcbiBcXHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBuZXdfcHJvZy1cXHUwMDNlaW5zbnNpO1xcbkBAIC0xNzEsOCArMTg0LDE0IEBAIHN0YXRpYyB2b2lkIGFkanVzdF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuIFxcdCAqL1xcbiBcXHRkYXRhW29mZl0uemV4dF9kc3QgPSBpbnNuX2hhc19kZWYzMihpbnNuICsgb2ZmICsgY250IC0gMSk7XFxuIFxcbi1cXHRpZiAoY250ID09IDEpXFxuK1xcdGlmIChjbnQgPT0gMSkge1xcbitcXHRcXHQvKiBBIG5vbi1tZW1vcnkgYWNjZXNzaW5nIGluc24gY291bGQgaGF2ZSBiZWVuIHJlcGxhY2VkIGJ5IGFcXG4rXFx0XFx0ICogbWVtb3J5IGFjY2Vzc2luZyBpbnNuLCBzeXN0ZW1hdGljYWxseSBtYXJrIGl0IGZvciBub24tc3RhY2tcXG4rXFx0XFx0ICogYWNjZXNzXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRkYXRhW29mZl0ubm9uX3N0YWNrX2FjY2VzcyA9IGlzX21lbV9pbnNuKGluc24gKyBvZmYpO1xcbiBcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4gXFx0cHJvZ19sZW4gPSBuZXdfcHJvZy1cXHUwMDNlbGVuO1xcbiBcXG4gXFx0bWVtbW92ZShkYXRhICsgb2ZmICsgY250IC0gMSwgZGF0YSArIG9mZixcXG5AQCAtMTgyLDcgKzIwMSwxOSBAQCBzdGF0aWMgdm9pZCBhZGp1c3RfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRcXHQvKiBFeHBhbmQgaW5zbmlbb2ZmXSdzIHNlZW4gY291bnQgdG8gdGhlIHBhdGNoZWQgcmFuZ2UuICovXFxuIFxcdFxcdGRhdGFbaV0uc2VlbiA9IG9sZF9zZWVuO1xcbiBcXHRcXHRkYXRhW2ldLnpleHRfZHN0ID0gaW5zbl9oYXNfZGVmMzIoaW5zbiArIGkpO1xcbitcXHRcXHRpZiAoaSA9PSBvZmYgKyBpbnNuX29mZl9pbl9wYXRjaCkge1xcbitcXHRcXHRcXHRkYXRhW2ldLm5vbl9zdGFja19hY2Nlc3MgPSBkYXRhW29mZiArIGNudCAtIDFdLm5vbl9zdGFja19hY2Nlc3M7XFxuK1xcdFxcdFxcdGRhdGFbb2ZmICsgY250IC0gMV0ubm9uX3N0YWNrX2FjY2VzcyA9IGZhbHNlO1xcbitcXHRcXHR9IGVsc2UgaWYgKGlzX21lbV9pbnNuKGluc24gKyBpKSkge1xcbitcXHRcXHRcXHRkYXRhW2ldLm5vbl9zdGFja19hY2Nlc3MgPSB0cnVlO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4rXFx0LypcXG4rXFx0ICogTGFzdCBzbG90IGluc3RydWN0aW9uIGNvdWxkIGJlIGEgbmV3bHkgZ2VuZXJhdGVkXFxuK1xcdCAqIEJQRl9TVC9CUEZfTERYL0JQRl9TVFhcXG4rXFx0ICovXFxuK1xcdGlmIChpc19tZW1faW5zbihpbnNuICsgb2ZmICsgY250IC0gMSkgXFx1MDAyNlxcdTAwMjYgaW5zbl9vZmZfaW5fcGF0Y2ggIT0gY250IC0gMSlcXG4rXFx0XFx0ZGF0YVtvZmYgKyBjbnQgLSAxXS5ub25fc3RhY2tfYWNjZXNzID0gdHJ1ZTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFRoZSBpbmRpcmVjdF90YXJnZXQgZmxhZyBvZiB0aGUgb3JpZ2luYWwgaW5zdHJ1Y3Rpb24gd2FzIG1vdmVkIHRvIHRoZSBsYXN0IG9mIHRoZVxcbkBAIC0yNDUsNyArMjc2LDggQEAgc3RhdGljIHZvaWQgYWRqdXN0X3Bva2VfZGVzY3Moc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgb2ZmLCB1MzIgbGVuKVxcbiB9XFxuIFxcbiBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZixcXG4tXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCB1MzIgbGVuKVxcbitcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4sXFxuK1xcdFxcdFxcdFxcdCAgICAgczMyIGluc25fb2ZmX2luX3BhdGNoKVxcbiB7XFxuIFxcdHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2c7XFxuIFxcdHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqbmV3X2RhdGEgPSBOVUxMO1xcbkBAIC0yNjksNyArMzAxLDcgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsXFxuIFxcdFxcdFxcdFxcdGVudi1cXHUwMDNlaW5zbl9hdXhfZGF0YVtvZmZdLm9yaWdfaWR4KTtcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcdH1cXG4tXFx0YWRqdXN0X2luc25fYXV4X2RhdGEoZW52LCBuZXdfcHJvZywgb2ZmLCBsZW4pO1xcbitcXHRhZGp1c3RfaW5zbl9hdXhfZGF0YShlbnYsIG5ld19wcm9nLCBvZmYsIGxlbiwgaW5zbl9vZmZfaW5fcGF0Y2gpO1xcbiBcXHRhZGp1c3Rfc3VicHJvZ19zdGFydHMoZW52LCBvZmYsIGxlbik7XFxuIFxcdGFkanVzdF9pbnNuX2FycmF5cyhlbnYsIG9mZiwgbGVuKTtcXG4gXFx0YWRqdXN0X3Bva2VfZGVzY3MobmV3X3Byb2csIG9mZiwgbGVuKTtcXG5AQCAtNjY4LDcgKzcwMCw3IEBAIGludCBicGZfb3B0X3N1YnJlZ196ZXh0X2xvMzJfcm5kX2hpMzIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0XFx0cGF0Y2ggPSB6ZXh0X3BhdGNoO1xcbiBcXHRcXHRwYXRjaF9sZW4gPSAyO1xcbiBhcHBseV9wYXRjaF9idWZmZXI6XFxuLVxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGFkal9pZHgsIHBhdGNoLCBwYXRjaF9sZW4pO1xcbitcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBhZGpfaWR4LCBwYXRjaCwgcGF0Y2hfbGVuLCAwKTtcXG4gXFx0XFx0aWYgKCFuZXdfcHJvZylcXG4gXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdFxcdGVudi1cXHUwMDNlcHJvZyA9IG5ld19wcm9nO1xcbkBAIC03MTMsNyArNzQ1LDcgQEAgaW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHRcXHRpbnNuX2J1ZltjbnQrK10gPSBCUEZfU1RYX01FTShCUEZfRFcsIEJQRl9SRUdfRlAsIEJQRl9SRUdfMSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgLXN1YnByb2dzWzBdLnN0YWNrX2RlcHRoKTtcXG4gXFx0XFx0XFx0aW5zbl9idWZbY250KytdID0gZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VpbnNuc2lbMF07XFxuLVxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIDAsIGluc25fYnVmLCBjbnQpO1xcbitcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCAwLCBpbnNuX2J1ZiwgY250LCAxKTtcXG4gXFx0XFx0XFx0aWYgKCFuZXdfcHJvZylcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdFxcdFxcdGVudi1cXHUwMDNlcHJvZyA9IG5ld19wcm9nO1xcbkBAIC03MzYsNyArNzY4LDggQEAgaW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHRcXHR2ZXJpZmllcl9idWcoZW52LCBcXFwicHJvbG9ndWUgaXMgdG9vIGxvbmdcXFwiKTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIFxcdFxcdH0gZWxzZSBpZiAoY250KSB7XFxuLVxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIDAsIGluc25fYnVmLCBjbnQpO1xcbitcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCAwLCBpbnNuX2J1ZiwgY250LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250IC0gMSk7XFxuIFxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG5AQCAtNzY4LDcgKzgwMSw4IEBAIGludCBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0XFx0XFx0KnBhdGNoKysgPSBCUEZfU1RfTk9TUEVDKCk7XFxuIFxcdFxcdFxcdCpwYXRjaCsrID0gKmluc247XFxuIFxcdFxcdFxcdGNudCA9IHBhdGNoIC0gaW5zbl9idWY7XFxuLVxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XFxuK1xcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIGNudCAtIDEpO1xcbiBcXHRcXHRcXHRpZiAoIW5ld19wcm9nKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuQEAgLTg0MSw3ICs4NzUsOCBAQCBpbnQgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdFxcdCpwYXRjaCsrID0gKmluc247XFxuIFxcdFxcdFxcdCpwYXRjaCsrID0gQlBGX1NUX05PU1BFQygpO1xcbiBcXHRcXHRcXHRjbnQgPSBwYXRjaCAtIGluc25fYnVmO1xcbi1cXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xcbitcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCAwKTtcXG4gXFx0XFx0XFx0aWYgKCFuZXdfcHJvZylcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbkBAIC05NzEsNyArMTAwNiw4IEBAIGludCBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHNpemUgKiA4LCAwKTtcXG4gXFxuIHBhdGNoX2luc25fYnVmOlxcbi1cXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xcbitcXHRcXHRuZXdfcHJvZyA9XFxuK1xcdFxcdFxcdGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQsIC0xKTtcXG4gXFx0XFx0aWYgKCFuZXdfcHJvZylcXG4gXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbkBAIC0xNDYzLDcgKzE0OTksNyBAQCBzdGF0aWMgaW50IGFkZF9oaWRkZW5fc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKnBhdFxcbiBcXHQgKiBvbmVzIGZvciB0aGUgaGlkZGVuIHN1YnByb2cuIEhlbmNlIGFsbCBvZiB0aGUgYWRqdXN0bWVudCBvcGVyYXRpb25zXFxuIFxcdCAqIGluIGJwZl9wYXRjaF9pbnNuX2RhdGEgYXJlIG5vLW9wcy5cXG4gXFx0ICovXFxuLVxcdHByb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VsZW4gLSAxLCBwYXRjaCwgbGVuKTtcXG4rXFx0cHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBlbnYtXFx1MDAzZXByb2ctXFx1MDAzZWxlbiAtIDEsIHBhdGNoLCBsZW4sIDApO1xcbiBcXHRpZiAoIXByb2cpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXHRlbnYtXFx1MDAzZXByb2cgPSBwcm9nO1xcbkBAIC0xNTQ4LDcgKzE1ODQsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcbiBcXHRcXHRcXHRjbnQgPSBwYXRjaCAtIGluc25fYnVmO1xcbiBcXG4tXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcXG4rXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgMCk7XFxuIFxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG5AQCAtMTU2OCw2ICsxNjA1LDcgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHRcXHRib29sIGlzX3NkaXYgPSBpc2RpdiBcXHUwMDI2XFx1MDAyNiBpbnNuLVxcdTAwM2VvZmYgPT0gMTtcXG4gXFx0XFx0XFx0Ym9vbCBpc19zbW9kID0gIWlzZGl2IFxcdTAwMjZcXHUwMDI2IGluc24tXFx1MDAzZW9mZiA9PSAxO1xcbiBcXHRcXHRcXHRzdHJ1Y3QgYnBmX2luc24gKnBhdGNoID0gaW5zbl9idWY7XFxuK1xcdFxcdFxcdHMzMiBpbnNuX29mZl9pbl9wYXRjaDtcXG4gXFxuIFxcdFxcdFxcdGlmIChpc19zZGl2KSB7XFxuIFxcdFxcdFxcdFxcdC8qIFtSLFddeCBzZGl2IDAgLVxcdTAwM2UgMFxcbkBAIC0xNTk0LDYgKzE2MzIsNyBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdFxcdFxcdCpwYXRjaCsrID0gQlBGX0pNUF9JTU0oQlBGX0pBLCAwLCAwLCAxKTtcXG4gXFx0XFx0XFx0XFx0KnBhdGNoKysgPSAqaW5zbjtcXG4gXFx0XFx0XFx0XFx0Y250ID0gcGF0Y2ggLSBpbnNuX2J1ZjtcXG4rXFx0XFx0XFx0XFx0aW5zbl9vZmZfaW5fcGF0Y2ggPSBjbnQgLSAxO1xcbiBcXHRcXHRcXHR9IGVsc2UgaWYgKGlzX3Ntb2QpIHtcXG4gXFx0XFx0XFx0XFx0LyogW1IsV114IG1vZCAwIC1cXHUwMDNlIFtSLFddeCAqL1xcbiBcXHRcXHRcXHRcXHQvKiBbUixXXXggbW9kIC0xIC1cXHUwMDNlIDAgKi9cXG5AQCAtMTYxMCw2ICsxNjQ5LDcgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHRcXHRcXHQqcGF0Y2grKyA9IEJQRl9NT1YzMl9JTU0oaW5zbi1cXHUwMDNlZHN0X3JlZywgMCk7XFxuIFxcdFxcdFxcdFxcdCpwYXRjaCsrID0gQlBGX0pNUF9JTU0oQlBGX0pBLCAwLCAwLCAxKTtcXG4gXFx0XFx0XFx0XFx0KnBhdGNoKysgPSAqaW5zbjtcXG4rXFx0XFx0XFx0XFx0aW5zbl9vZmZfaW5fcGF0Y2ggPSBwYXRjaCAtIGluc25fYnVmIC0gMTtcXG4gXFxuIFxcdFxcdFxcdFxcdGlmICghaXM2NCkge1xcbiBcXHRcXHRcXHRcXHRcXHQqcGF0Y2grKyA9IEJQRl9KTVBfSU1NKEJQRl9KQSwgMCwgMCwgMSk7XFxuQEAgLTE2MjUsMTIgKzE2NjUsMTQgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHRcXHRcXHQqcGF0Y2grKyA9IEJQRl9KTVBfSU1NKEJQRl9KQSwgMCwgMCwgMSk7XFxuIFxcdFxcdFxcdFxcdCpwYXRjaCsrID0gKmluc247XFxuIFxcdFxcdFxcdFxcdGNudCA9IHBhdGNoIC0gaW5zbl9idWY7XFxuK1xcdFxcdFxcdFxcdGluc25fb2ZmX2luX3BhdGNoID0gY250IC0gMTtcXG4gXFx0XFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0XFx0LyogW1IsV114IG1vZCAwIC1cXHUwMDNlIFtSLFddeCAqL1xcbiBcXHRcXHRcXHRcXHQqcGF0Y2grKyA9IEJQRl9SQVdfSU5TTigoaXM2NCA/IEJQRl9KTVAgOiBCUEZfSk1QMzIpIHxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0QlBGX0pFUSB8IEJQRl9LLCBpbnNuLVxcdTAwM2VzcmNfcmVnLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHQwLCAxICsgKGlzNjQgPyAwIDogMSksIDApO1xcbiBcXHRcXHRcXHRcXHQqcGF0Y2grKyA9ICppbnNuO1xcbitcXHRcXHRcXHRcXHRpbnNuX29mZl9pbl9wYXRjaCA9IHBhdGNoIC0gaW5zbl9idWYgLSAxO1xcbiBcXG4gXFx0XFx0XFx0XFx0aWYgKCFpczY0KSB7XFxuIFxcdFxcdFxcdFxcdFxcdCpwYXRjaCsrID0gQlBGX0pNUF9JTU0oQlBGX0pBLCAwLCAwLCAxKTtcXG5AQCAtMTYzOSw3ICsxNjgxLDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHRcXHRcXHRjbnQgPSBwYXRjaCAtIGluc25fYnVmO1xcbiBcXHRcXHRcXHR9XFxuIFxcbi1cXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xcbitcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCBpbnNuX29mZl9pbl9wYXRjaCk7XFxuIFxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG5AQCAtMTY1NSw2ICsxNjk4LDcgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHQgICAgIEJQRl9NT0RFKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9NRU1TWCkpIHtcXG4gXFx0XFx0XFx0c3RydWN0IGJwZl9pbnNuICpwYXRjaCA9IGluc25fYnVmO1xcbiBcXHRcXHRcXHR1NjQgdWFkZHJlc3NfbGltaXQgPSBicGZfYXJjaF91YWRkcmVzc19saW1pdCgpO1xcbitcXHRcXHRcXHRzMzIgaW5zbl9vZmZfaW5fcGF0Y2g7XFxuIFxcbiBcXHRcXHRcXHRpZiAoIXVhZGRyZXNzX2xpbWl0KVxcbiBcXHRcXHRcXHRcXHRnb3RvIG5leHRfaW5zbjtcXG5AQCAtMTY2NSwxMSArMTcwOSwxMyBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdFxcdCpwYXRjaCsrID0gQlBGX0FMVTY0X0lNTShCUEZfUlNILCBCUEZfUkVHX0FYLCAzMik7XFxuIFxcdFxcdFxcdCpwYXRjaCsrID0gQlBGX0pNUF9JTU0oQlBGX0pMRSwgQlBGX1JFR19BWCwgdWFkZHJlc3NfbGltaXQgXFx1MDAzZVxcdTAwM2UgMzIsIDIpO1xcbiBcXHRcXHRcXHQqcGF0Y2grKyA9ICppbnNuO1xcbitcXHRcXHRcXHRpbnNuX29mZl9pbl9wYXRjaCA9IHBhdGNoIC0gaW5zbl9idWYgLSAxO1xcbiBcXHRcXHRcXHQqcGF0Y2grKyA9IEJQRl9KTVBfSU1NKEJQRl9KQSwgMCwgMCwgMSk7XFxuIFxcdFxcdFxcdCpwYXRjaCsrID0gQlBGX01PVjY0X0lNTShpbnNuLVxcdTAwM2Vkc3RfcmVnLCAwKTtcXG4gXFxuIFxcdFxcdFxcdGNudCA9IHBhdGNoIC0gaW5zbl9idWY7XFxuLVxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XFxuK1xcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIGluc25fb2ZmX2luX3BhdGNoKTtcXG4gXFx0XFx0XFx0aWYgKCFuZXdfcHJvZylcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbkBAIC0xNjg5LDcgKzE3MzUsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiBcXHRcXHRcXHR9XFxuIFxcbi1cXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xcbitcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCAwKTtcXG4gXFx0XFx0XFx0aWYgKCFuZXdfcHJvZylcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbkBAIC0xNzQyLDcgKzE3ODksOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdFxcdFxcdCpwYXRjaCsrID0gQlBGX0FMVTY0X0lNTShCUEZfTVVMLCBvZmZfcmVnLCAtMSk7XFxuIFxcdFxcdFxcdGNudCA9IHBhdGNoIC0gaW5zbl9idWY7XFxuIFxcbi1cXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xcbitcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCBjbnQgLSAxKTtcXG4gXFx0XFx0XFx0aWYgKCFuZXdfcHJvZylcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbkBAIC0xNzg3LDcgKzE4MzUsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdFxcdGluc25fYnVmWzZdID0gQlBGX1NUWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzEwLCBCUEZfUkVHX0FYLCBzdGFja19vZmZfY250KTtcXG4gXFx0XFx0XFx0Y250ID0gNztcXG4gXFxuLVxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XFxuK1xcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIDMpO1xcbiBcXHRcXHRcXHRpZiAoIW5ld19wcm9nKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuQEAgLTE4MDgsNyArMTg1Nyw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0XFx0XFx0aW5zbl9idWZbM10gPSBCUEZfU1RYX01FTShCUEZfRFcsIEJQRl9SRUdfMTAsIEJQRl9SRUdfQVgsIHN0YWNrX29mZik7XFxuIFxcdFxcdFxcdGNudCA9IDQ7XFxuIFxcbi1cXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xcbitcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCAyKTtcXG4gXFx0XFx0XFx0aWYgKCFuZXdfcHJvZylcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbkBAIC0xODI5LDcgKzE4NzksOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdFxcdGlmIChjbnQgPT0gMClcXG4gXFx0XFx0XFx0XFx0Z290byBuZXh0X2luc247XFxuIFxcbi1cXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xcbitcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCBjbnQgLSAxKTtcXG4gXFx0XFx0XFx0aWYgKCFuZXdfcHJvZylcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbkBAIC0xOTE2LDcgKzE5NjcsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCBtYXApLVxcdTAwM2VpbmRleF9tYXNrKTtcXG4gXFx0XFx0XFx0aW5zbl9idWZbMl0gPSAqaW5zbjtcXG4gXFx0XFx0XFx0Y250ID0gMztcXG4tXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcXG4rXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgY250IC0gMSk7XFxuIFxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG5AQCAtMTk0OSw3ICsyMDAxLDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHRcXHRpbnNuX2J1ZlsyXSA9ICppbnNuO1xcbiBcXHRcXHRcXHRjbnQgPSAzO1xcbiBcXG4tXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcXG4rXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgY250IC0gMSk7XFxuIFxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG5AQCAtMTk2OCw3ICsyMDIxLDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHRcXHRpbnNuX2J1ZlsxXSA9ICppbnNuO1xcbiBcXHRcXHRcXHRjbnQgPSAyO1xcbiBcXG4tXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcXG4rXFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgY250IC0gMSk7XFxuIFxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG5AQCAtMjAwOCw4ICsyMDYyLDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gXFx0XFx0XFx0XFx0fVxcbiBcXG4tXFx0XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgaW5zbl9idWYsIGNudCk7XFxuK1xcdFxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShcXG4rXFx0XFx0XFx0XFx0XFx0ZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQsIC0xKTtcXG4gXFx0XFx0XFx0XFx0aWYgKCFuZXdfcHJvZylcXG4gXFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbkBAIC0yMDkyLDcgKzIxNDYsNyBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdFxcdGNudCA9IDM7XFxuIFxcbiBcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250KTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgLTEpO1xcbiBcXHRcXHRcXHRpZiAoIW5ld19wcm9nKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuQEAgLTIxMjAsNyArMjE3NCw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0XFx0XFx0aW5zbl9idWZbMF0gPSBCUEZfQUxVMzJfUkVHKEJQRl9YT1IsIEJQRl9SRUdfMCwgQlBGX1JFR18wKTtcXG4gXFx0XFx0XFx0Y250ID0gMTtcXG4gI2VuZGlmXFxuLVxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XFxuK1xcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIC0xKTtcXG4gXFx0XFx0XFx0aWYgKCFuZXdfcHJvZylcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbkBAIC0yMTM4LDcgKzIxOTMsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdFxcdGluc25fYnVmWzJdID0gQlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfMCwgMCk7XFxuIFxcdFxcdFxcdGNudCA9IDM7XFxuIFxcbi1cXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xcbitcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCAtMSk7XFxuIFxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG5AQCAtMjE3Miw3ICsyMjI4LDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHRcXHRpbnNuX2J1ZltjbnQrK10gPSBCUEZfSk1QX0EoMSk7XFxuIFxcdFxcdFxcdGluc25fYnVmW2NudCsrXSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAtRUlOVkFMKTtcXG4gXFxuLVxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XFxuK1xcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIC0xKTtcXG4gXFx0XFx0XFx0aWYgKCFuZXdfcHJvZylcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbkBAIC0yMjA0LDcgKzIyNjEsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdFxcdFxcdGNudCA9IDE7XFxuIFxcdFxcdFxcdH1cXG4gXFxuLVxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XFxuK1xcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIC0xKTtcXG4gXFx0XFx0XFx0aWYgKCFuZXdfcHJvZylcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbkBAIC0yMjMwLDcgKzIyODgsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdFxcdFxcdGNudCA9IDI7XFxuIFxcdFxcdFxcdH1cXG4gXFxuLVxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XFxuK1xcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIC0xKTtcXG4gXFx0XFx0XFx0aWYgKCFuZXdfcHJvZylcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbkBAIC0yMjQ2LDcgKzIzMDUsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdFxcdC8qIExvYWQgSVAgYWRkcmVzcyBmcm9tIGN0eCAtIDE2ICovXFxuIFxcdFxcdFxcdGluc25fYnVmWzBdID0gQlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfMSwgLTE2KTtcXG4gXFxuLVxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIDEpO1xcbitcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgMSwgLTEpO1xcbiBcXHRcXHRcXHRpZiAoIW5ld19wcm9nKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuQEAgLTIzMDEsNyArMjM2MSw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4gXFx0XFx0XFx0aW5zbl9idWZbMTBdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIC1FTk9FTlQpO1xcbiBcXHRcXHRcXHRjbnQgPSAxMTtcXG4gXFxuLVxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XFxuK1xcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIC0xKTtcXG4gXFx0XFx0XFx0aWYgKCFuZXdfcHJvZylcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbkBAIC0yMzE5LDcgKzIzODAsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuIFxcdFxcdFxcdGluc25fYnVmWzFdID0gQlBGX0FUT01JQ19PUChCUEZfRFcsIEJQRl9YQ0hHLCBCUEZfUkVHXzEsIEJQRl9SRUdfMCwgMCk7XFxuIFxcdFxcdFxcdGNudCA9IDI7XFxuIFxcbi1cXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xcbitcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCAtMSk7XFxuIFxcdFxcdFxcdGlmICghbmV3X3Byb2cpXFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG5AQCAtMjM4Nyw3ICsyNDQ5LDcgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbiBcXHRcXHQvKiBDb3B5IGZpcnN0IGFjdHVhbCBpbnNuIHRvIHByZXNlcnZlIGl0ICovXFxuIFxcdFxcdGluc25fYnVmW2NudCsrXSA9IGVudi1cXHUwMDNlcHJvZy1cXHUwMDNlaW5zbnNpW3N1YnByb2dfc3RhcnRdO1xcbiBcXG4tXFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgc3VicHJvZ19zdGFydCwgaW5zbl9idWYsIGNudCk7XFxuK1xcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIHN1YnByb2dfc3RhcnQsIGluc25fYnVmLCBjbnQsIGNudCAtIDEpO1xcbiBcXHRcXHRpZiAoIW5ld19wcm9nKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0XFx0ZW52LVxcdTAwM2Vwcm9nID0gcHJvZyA9IG5ld19wcm9nO1xcbkBAIC0yNDg2LDcgKzI1NDgsNyBAQCBzdGF0aWMgc3RydWN0IGJwZl9wcm9nICppbmxpbmVfYnBmX2xvb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFx0aW5zbl9idWZbY250KytdID0gQlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzgsIEJQRl9SRUdfMTAsIHI4X29mZnNldCk7XFxuIFxcbiBcXHQqdG90YWxfY250ID0gY250O1xcbi1cXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBwb3NpdGlvbiwgaW5zbl9idWYsIGNudCk7XFxuK1xcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIHBvc2l0aW9uLCBpbnNuX2J1ZiwgY250LCAtMSk7XFxuIFxcdGlmICghbmV3X3Byb2cpXFxuIFxcdFxcdHJldHVybiBuZXdfcHJvZztcXG4gXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbmluZGV4IDIzMzQ3MmE4NzFiZTU3Li5iYzNiNDc3MTM5NmE5ZiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5AQCAtMzIwNyw2ICszMjA3LDExIEBAIHN0YXRpYyB2b2lkIG1hcmtfaW5kaXJlY3RfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpZHgpXFxuIFxcdGVudi1cXHUwMDNlaW5zbl9hdXhfZGF0YVtpZHhdLmluZGlyZWN0X3RhcmdldCA9IHRydWU7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIG1hcmtfbm9uX3N0YWNrX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWR4KVxcbit7XFxuK1xcdGVudi1cXHUwMDNlaW5zbl9hdXhfZGF0YVtpZHhdLm5vbl9zdGFja19hY2Nlc3MgPSB0cnVlO1xcbit9XFxuK1xcbiAjZGVmaW5lIExSX0ZSQU1FTk9fQklUU1xcdDRcXG4gI2RlZmluZSBMUl9TUElfQklUU1xcdDZcXG4gI2RlZmluZSBMUl9FTlRSWV9CSVRTXFx0KExSX1NQSV9CSVRTICsgTFJfRlJBTUVOT19CSVRTICsgMSlcXG5AQCAtNjQwMCw2ICs2NDA1LDEwIEBAIHN0YXRpYyBpbnQgY2hlY2tfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsIHN0cnVjdCBiXFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0Y29lcmNlX3JlZ190b19zaXplX3N4KFxcdTAwMjZyZWdzW3ZhbHVlX3JlZ25vXSwgc2l6ZSk7XFxuIFxcdH1cXG4rXFxuK1xcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2IHJlZy1cXHUwMDNldHlwZSAhPSBQVFJfVE9fU1RBQ0spXFxuK1xcdFxcdG1hcmtfbm9uX3N0YWNrX2FjY2VzcyhlbnYsIGluc25faWR4KTtcXG4rXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pbnNuX2FycmF5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaW5zbl9hcnJheS5jXFxuaW5kZXggMDIyMmE5YTVkMDc2MTQuLjgxNWYzZTA0NTQwZmZjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pbnNuX2FycmF5LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9icGZfaW5zbl9hcnJheS5jXFxuQEAgLTIyNyw0MiArMjI3LDYgQEAgc3RhdGljIHZvaWQgY2hlY2tfaW5jb3JyZWN0X2luZGV4KHZvaWQpXFxuIFxcdGNoZWNrX21pZF9pbnNuX2luZGV4KCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgc2V0X2JwZl9qaXRfaGFyZGVuKGNoYXIgKmxldmVsKVxcbi17XFxuLVxcdGNoYXIgb2xkX2xldmVsO1xcbi1cXHRpbnQgZXJyID0gLTE7XFxuLVxcdGludCBmZCA9IC0xO1xcbi1cXG4tXFx0ZmQgPSBvcGVuKFxcXCIvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9oYXJkZW5cXFwiLCBPX1JEV1IgfCBPX05PTkJMT0NLKTtcXG4tXFx0aWYgKGZkIFxcdTAwM2MgMCkge1xcbi1cXHRcXHRBU1NFUlRfRkFJTChcXFwib3BlbiAuLi4vYnBmX2ppdF9oYXJkZW4gcmV0dXJuZWQgJWQgKGVycm5vPSVkKVxcXCIsIGZkLCBlcnJubyk7XFxuLVxcdFxcdHJldHVybiAtMTtcXG4tXFx0fVxcbi1cXG4tXFx0ZXJyID0gcmVhZChmZCwgXFx1MDAyNm9sZF9sZXZlbCwgMSk7XFxuLVxcdGlmIChlcnIgIT0gMSkge1xcbi1cXHRcXHRBU1NFUlRfRkFJTChcXFwicmVhZCBmcm9tIC4uLi9icGZfaml0X2hhcmRlbiByZXR1cm5lZCAlZCAoZXJybm89JWQpXFxcIiwgZXJyLCBlcnJubyk7XFxuLVxcdFxcdGVyciA9IC0xO1xcbi1cXHRcXHRnb3RvIGVuZDtcXG4tXFx0fVxcbi1cXG4tXFx0bHNlZWsoZmQsIDAsIFNFRUtfU0VUKTtcXG4tXFxuLVxcdGVyciA9IHdyaXRlKGZkLCBsZXZlbCwgMSk7XFxuLVxcdGlmIChlcnIgIT0gMSkge1xcbi1cXHRcXHRBU1NFUlRfRkFJTChcXFwid3JpdGUgdG8gLi4uL2JwZl9qaXRfaGFyZGVuIHJldHVybmVkICVkIChlcnJubz0lZClcXFwiLCBlcnIsIGVycm5vKTtcXG4tXFx0XFx0ZXJyID0gLTE7XFxuLVxcdFxcdGdvdG8gZW5kO1xcbi1cXHR9XFxuLVxcbi1cXHRlcnIgPSAwO1xcbi1cXHQqbGV2ZWwgPSBvbGRfbGV2ZWw7XFxuLWVuZDpcXG4tXFx0aWYgKGZkIFxcdTAwM2U9IDApXFxuLVxcdFxcdGNsb3NlKGZkKTtcXG4tXFx0cmV0dXJuIGVycjtcXG4tfVxcbi1cXG4gc3RhdGljIHZvaWQgY2hlY2tfYmxpbmRuZXNzKHZvaWQpXFxuIHtcXG4gXFx0c3RydWN0IGJwZl9pbnNuIGluc25zW10gPSB7XFxuQEAgLTI3Miw3ICsyMzYsNyBAQCBzdGF0aWMgdm9pZCBjaGVja19ibGluZG5lc3Modm9pZClcXG4gXFx0XFx0QlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDEpLFxcbiBcXHRcXHRCUEZfRVhJVF9JTlNOKCksXFxuIFxcdH07XFxuLVxcdGludCBwcm9nX2ZkID0gLTEsIG1hcF9mZDtcXG4rXFx0aW50IHByb2dfZmQgPSAtMSwgbWFwX2ZkLCByZXQ7XFxuIFxcdHN0cnVjdCBicGZfaW5zbl9hcnJheV92YWx1ZSB2YWwgPSB7fTtcXG4gXFx0Y2hhciBicGZfaml0X2hhcmRlbiA9ICdAJzsgLyogbm9uLWV4aXpzdGluZyB2YWx1ZSAqL1xcbiBcXHRpbnQgaTtcXG5AQCAtMjkxLDcgKzI1NSw4IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2JsaW5kbmVzcyh2b2lkKVxcbiBcXHRcXHRnb3RvIGNsZWFudXA7XFxuIFxcbiBcXHRicGZfaml0X2hhcmRlbiA9ICcyJztcXG4tXFx0aWYgKHNldF9icGZfaml0X2hhcmRlbihcXHUwMDI2YnBmX2ppdF9oYXJkZW4pKSB7XFxuK1xcdHJldCA9IHNldF9icGZfaml0X2hhcmRlbihcXHUwMDI2YnBmX2ppdF9oYXJkZW4pO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFxcXCJzZXQgYnBmX2ppdF9oYXJkZW5cXFwiKSkge1xcbiBcXHRcXHRicGZfaml0X2hhcmRlbiA9ICdAJzsgLyogb3BlbiwgcmVhZCBvciB3cml0ZSBmYWlsZWQgPVxcdTAwM2Ugbm8gd3JpdGUgd2FzIGRvbmUgKi9cXG4gXFx0XFx0Z290byBjbGVhbnVwO1xcbiBcXHR9XFxuQEAgLTMxMyw3ICsyNzgsOCBAQCBzdGF0aWMgdm9pZCBjaGVja19ibGluZG5lc3Modm9pZClcXG4gY2xlYW51cDpcXG4gXFx0LyogcmVzdG9yZSB0aGUgb2xkIG9uZSAqL1xcbiBcXHRpZiAoYnBmX2ppdF9oYXJkZW4gIT0gJ0AnKVxcbi1cXHRcXHRzZXRfYnBmX2ppdF9oYXJkZW4oXFx1MDAyNmJwZl9qaXRfaGFyZGVuKTtcXG4rXFx0XFx0QVNTRVJUX09LKHNldF9icGZfaml0X2hhcmRlbihcXHUwMDI2YnBmX2ppdF9oYXJkZW4pLFxcbitcXHRcXHRcXHQgIFxcXCJyZXN0b3JlIGhhcmRlbmluZyBjb25maWd1cmF0aW9uXFxcIik7XFxuIFxcbiBcXHRjbG9zZShwcm9nX2ZkKTtcXG4gXFx0Y2xvc2UobWFwX2ZkKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva2FzYW4uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2thc2FuLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yYmM1NDVlOTYyNTk1ZVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rYXNhbi5jXFxuQEAgLTAsMCArMSw0MzAgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgQlNELTMtQ2xhdXNlXFxuK1xcbisvKlxcbisgKiBUZXN0cyB2YWxpZGF0aW5nIHRoYXQgS0FTQU4gcmVwb3J0cyBhcmUgcHJvcGVybHkgaW5zdHJ1bWVudGVkIGFuZFxcbisgKiBnZW5lcmF0ZWQgb24gYSB3aWRlIHZhcmlldHkgb2YgaW5zdHJ1Y3Rpb25zLiBUaGUgcnVubmluZyBrZXJuZWwgbmVlZHNcXG4rICoga2FzYW5fbXVsdGlfc2hvdCB0byBydW4gbXVsdGlwbGUga2FzYW4tZ2VuZXJhdGluZyBzdWJ0ZXN0cyBhdCBvbmNlXFxuKyAqL1xcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2ZjbnRsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl9ldGhlci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjdW5pc3RkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N0ZXN0X3Byb2dzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N1bnByaXZfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwia2FzYW4uc2tlbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwia2FzYW5faGFyZGVuLnNrZWwuaFxcXCJcXG4rXFxuKyNkZWZpbmUgU1VCVEVTVF9OQU1FX01BWF9MRU5cXHQxMjhcXG4rI2RlZmluZSBQUk9HX05BTUVfTUFYX0xFTlxcdDEyOFxcbitcXG4rI2RlZmluZSBNQVhfTE9HX1NJWkVcXHRcXHQoOCAqIDEwMjQpXFxuKyNkZWZpbmUgUkVBRF9DSFVOS19TSVpFXFx0XFx0MjU2XFxuK1xcbisjZGVmaW5lIEtBU0FOX1BBVFRFUk5fU0xBQl9VQUYgXFxcIkJVRzogS0FTQU46IHNsYWItdXNlLWFmdGVyLWZyZWUgXFxcIiBcXFxcXFxuK1xcdFxcXCJpbiBicGZfcHJvZ18lMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeF8lc1xcXCJcXG4rI2RlZmluZSBLQVNBTl9QQVRURVJOX1JFUE9SVCBcXFwiJXMgb2Ygc2l6ZSAlZCBhdCBhZGRyXFxcIlxcbitcXG4rc3RhdGljIGNoYXIga2xvZ19idWZmZXJbTUFYX0xPR19TSVpFXTtcXG4rc3RhdGljIGNoYXIgcmVjb3JkW01BWF9MT0dfU0laRV07XFxuK1xcbitzdHJ1Y3QgdGVzdF9zcGVjIHtcXG4rXFx0Y2hhciAqcHJvZ190eXBlO1xcbitcXHRib29sIGlzX3dyaXRlO1xcbitcXHRib29sIG9ubHlfMzJfb3JfNjQ7XFxuK1xcdGJvb2wgbmVlZHNfbG9hZF9hY3Ffc3RvcmVfcmVsO1xcbitcXHRib29sIHNraXBfbXVsdGlfc2l6ZV90ZXN0aW5nO1xcbitcXHRib29sIHNraXBfb25fc3RhY2tfdGVzdGluZztcXG4rXFx0aW50IHJ1bl9zaXplO1xcbitcXHRib29sIGV4cGVjdF9ub19yZXBvcnQ7XFxuK1xcdGJvb2wgcm5kX2hpMzI7XFxuK307XFxuK1xcbitzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsIHtcXG4rXFx0X191OCBkYXRhXzE7XFxuK1xcdF9fdTE2IGRhdGFfMjtcXG4rXFx0X191MzIgZGF0YV80O1xcbitcXHRfX3U2NCBkYXRhXzg7XFxuK307XFxuK1xcbitzdHJ1Y3QgdGVzdF9jdHgge1xcbitcXHRfX3U4ICBwcm9nX3RhZ1tCUEZfVEFHX1NJWkVdO1xcbitcXHRzdHJ1Y3QgYnBmX29iamVjdCAqb2JqO1xcbitcXHRpbnQgKmFjY2Vzc19zaXplO1xcbitcXHRib29sIHNraXBfbG9hZF9hY3Ffc3RvcmVfcmVsO1xcbitcXHRzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2c7XFxuK1xcdGNoYXIgcHJvZ19uYW1lW1NVQlRFU1RfTkFNRV9NQVhfTEVOXTtcXG4rXFx0aW50IGtsb2dfZmQ7XFxuK307XFxuK1xcbitzdGF0aWMgaW50IG9wZW5fa2VybmVsX2xvZ3Modm9pZClcXG4re1xcbitcXHRpbnQgZmQ7XFxuK1xcbitcXHRmZCA9IG9wZW4oXFxcIi9kZXYva21zZ1xcXCIsIE9fUkRPTkxZIHwgT19OT05CTE9DSyk7XFxuK1xcbitcXHRyZXR1cm4gZmQ7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHNraXBfa2VybmVsX2xvZ3MoaW50IGZkKVxcbit7XFxuK1xcdGxzZWVrKGZkLCAwLCBTRUVLX0VORCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmVhZF9rZXJuZWxfbG9ncyhpbnQgZmQsIGNoYXIgKmJ1Ziwgc2l6ZV90IG1heF9sZW4pXFxuK3tcXG4rXFx0c2l6ZV90IHRvdGFsID0gMDtcXG4rXFx0c3NpemVfdCBuO1xcbitcXG4rXFx0YnVmWzBdID0gJ1xcXFwwJztcXG4rXFx0d2hpbGUgKDEpIHtcXG4rXFx0XFx0Y2hhciAqbXNnLCAqZW9sO1xcbitcXHRcXHRzaXplX3QgbGVuO1xcbitcXG4rXFx0XFx0biA9IHJlYWQoZmQsIHJlY29yZCwgc2l6ZW9mKHJlY29yZCkgLSAxKTtcXG4rXFx0XFx0aWYgKG4gXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdGlmIChlcnJubyA9PSBFQUdBSU4pXFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHRyZXR1cm4gbjtcXG4rXFx0XFx0fVxcbitcXHRcXHRyZWNvcmRbbl0gPSAnXFxcXDAnO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogRWFjaCBrbXNnIHJlY29yZCBzdGFydHMgd2l0aCBzb21lIG1ldGFkYXRhLCBzZXBhcmF0ZWRcXG4rXFx0XFx0ICogZnJvbSB0aGUgYWN0dWFsIGNvbnRlbnQgYnkgYSBzZW1pLWNvbG9uXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRtc2cgPSBzdHJjaHIocmVjb3JkLCAnOycpO1xcbitcXHRcXHRpZiAoIW1zZylcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdG1zZysrO1xcbitcXHRcXHRlb2wgPSBzdHJjaHIobXNnLCAnXFxcXG4nKTtcXG4rXFx0XFx0aWYgKGVvbClcXG4rXFx0XFx0XFx0KmVvbCA9ICdcXFxcMCc7XFxuK1xcbitcXHRcXHRsZW4gPSBzdHJsZW4obXNnKTtcXG4rXFx0XFx0aWYgKHRvdGFsICsgbGVuICsgMiBcXHUwMDNlIG1heF9sZW4pXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRtZW1jcHkoYnVmICsgdG90YWwsIG1zZywgbGVuKTtcXG4rXFx0XFx0dG90YWwgKz0gbGVuO1xcbitcXHRcXHRidWZbdG90YWwrK10gPSAnXFxcXG4nO1xcbitcXHRcXHRidWZbdG90YWxdID0gJ1xcXFwwJztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHRvdGFsO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGNoZWNrX2thc2FuX3JlcG9ydF9pbl9rZXJuZWxfbG9ncyhjaGFyICpidWYsIHN0cnVjdCB0ZXN0X2N0eCAqY3R4LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGJvb2wgaXNfd3JpdGUsIGludCBzaXplKVxcbit7XFxuK1xcdGNoYXIgYWNjZXNzX2xvZ1tSRUFEX0NIVU5LX1NJWkVdO1xcbitcXHRjaGFyICprYXNhbl9yZXBvcnRfc3RhcnQ7XFxuK1xcdGludCBuc2l6ZTtcXG4rXFxuK1xcdG5zaXplID0gc25wcmludGYoYWNjZXNzX2xvZywgUkVBRF9DSFVOS19TSVpFLCBLQVNBTl9QQVRURVJOX1NMQUJfVUFGLFxcbitcXHRcXHRcXHQgY3R4LVxcdTAwM2Vwcm9nX3RhZ1swXSwgY3R4LVxcdTAwM2Vwcm9nX3RhZ1sxXSwgY3R4LVxcdTAwM2Vwcm9nX3RhZ1syXSxcXG4rXFx0XFx0XFx0IGN0eC1cXHUwMDNlcHJvZ190YWdbM10sIGN0eC1cXHUwMDNlcHJvZ190YWdbNF0sIGN0eC1cXHUwMDNlcHJvZ190YWdbNV0sXFxuK1xcdFxcdFxcdCBjdHgtXFx1MDAzZXByb2dfdGFnWzZdLCBjdHgtXFx1MDAzZXByb2dfdGFnWzddLCBjdHgtXFx1MDAzZXByb2dfbmFtZSk7XFxuK1xcdGlmICghQVNTRVJUX0dFKG5zaXplLCAwLCBcXFwiZm9ybWF0IGthc2FuIGFjY2VzcyBoZWFkZXIgbGluZVxcXCIpKVxcbitcXHRcXHRyZXR1cm4gbnNpemU7XFxuK1xcdC8qXFxuK1xcdCAqIFNlYXJjaGVkIGthc2FuIHJlcG9ydCBpcyB2YWxpZCBpZlxcbitcXHQgKiAtIGl0IGNvbnRhaW5zIHRoZSBleHBlY3RlZCBrYXNhbiBwYXR0ZXJuXFxuK1xcdCAqIC0gdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBmYXVsdHkgYWNjZXNzIGlzIGZvdW5kIHNvbWV3aGVyZVxcbitcXHQgKiAgIGFmdGVyIHRoZSBoZWFkZXIgKG5vdCBuZWNlc3NhcmlseSBvbiB0aGUgdmVyeSBuZXh0IGxpbmUsXFxuK1xcdCAqICAgYmVjYXVzZSBvdGhlciBrZXJuZWwgbWVzc2FnZXMgbWF5IGludGVybGVhdmUpXFxuK1xcdCAqIC0gZmF1bHR5IGFjY2VzcyBwcm9wZXJ0aWVzIG1hdGNoIHRoZSB0ZXN0ZWQgdHlwZSBhbmQgc2l6ZVxcbitcXHQgKi9cXG4rXFx0a2FzYW5fcmVwb3J0X3N0YXJ0ID0gc3Ryc3RyKGJ1ZiwgYWNjZXNzX2xvZyk7XFxuK1xcbitcXHRpZiAoIWthc2FuX3JlcG9ydF9zdGFydClcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcbitcXHRuc2l6ZSA9IHNucHJpbnRmKGFjY2Vzc19sb2csIFJFQURfQ0hVTktfU0laRSwgS0FTQU5fUEFUVEVSTl9SRVBPUlQsXFxuK1xcdFxcdFxcdCBpc193cml0ZSA/IFxcXCJXcml0ZVxcXCIgOiBcXFwiUmVhZFxcXCIsIHNpemUpO1xcbitcXHRpZiAoIUFTU0VSVF9HRShuc2l6ZSwgMCwgXFxcImZvcm1hdCBrYXNhbiBhY2Nlc3MgcmVwb3J0IGxpbmVcXFwiKSlcXG4rXFx0XFx0cmV0dXJuIG5zaXplO1xcbitcXG4rXFx0aWYgKCFzdHJzdHIoa2FzYW5fcmVwb3J0X3N0YXJ0LCBhY2Nlc3NfbG9nKSlcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZXhlY19zdWJ0ZXN0KHN0cnVjdCB0ZXN0X2N0eCAqY3R4LCBzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LFxcbitcXHRcXHRcXHQgaW50IGFjY2Vzc19zaXplLCBib29sIG9uX3N0YWNrKVxcbit7XFxuK1xcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB0b3B0cyk7XFxuK1xcdHN0cnVjdCBicGZfcHJvZ19pbmZvIGluZm87XFxuK1xcdHVpbnQ4X3QgYnVmW0VUSF9ITEVOXSA9IHswfTtcXG4rXFx0aW50IHJldCwgcHJvZ19mZDtcXG4rXFx0X191MzIgaW5mb19sZW47XFxuK1xcbitcXHRjdHgtXFx1MDAzZXByb2cgPSBicGZfb2JqZWN0X19maW5kX3Byb2dyYW1fYnlfbmFtZShjdHgtXFx1MDAzZW9iaixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBjdHgtXFx1MDAzZXByb2dfbmFtZSk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihjdHgtXFx1MDAzZXByb2csIFxcXCJmaW5kIHRlc3QgcHJvZ1xcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpbmZvX2xlbiA9IHNpemVvZihpbmZvKTtcXG4rXFx0bWVtc2V0KFxcdTAwMjZpbmZvLCAwLCBpbmZvX2xlbik7XFxuK1xcdHByb2dfZmQgPSBicGZfcHJvZ3JhbV9fZmQoY3R4LVxcdTAwM2Vwcm9nKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfRkQocHJvZ19mZCwgXFxcImdldCBwcm9nIGZkXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0cmV0ID0gYnBmX3Byb2dfZ2V0X2luZm9fYnlfZmQocHJvZ19mZCwgXFx1MDAyNmluZm8sIFxcdTAwMjZpbmZvX2xlbik7XFxuK1xcdGlmICghQVNTRVJUX09LKHJldCwgXFxcImZldGNoIGxvYWRlZCBwcm9ncmFtIGluZm9cXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRtZW1jcHkoY3R4LVxcdTAwM2Vwcm9nX3RhZywgaW5mby50YWcsIEJQRl9UQUdfU0laRSk7XFxuK1xcbitcXHRza2lwX2tlcm5lbF9sb2dzKGN0eC1cXHUwMDNla2xvZ19mZCk7XFxuK1xcbitcXHR0b3B0cy5zeiA9IHNpemVvZihzdHJ1Y3QgYnBmX3Rlc3RfcnVuX29wdHMpO1xcbitcXHR0b3B0cy5kYXRhX3NpemVfaW4gPSBFVEhfSExFTjtcXG4rXFx0dG9wdHMuZGF0YV9pbiA9IGJ1ZjtcXG4rXFx0aWYgKGN0eC1cXHUwMDNlYWNjZXNzX3NpemUpXFxuK1xcdFxcdCpjdHgtXFx1MDAzZWFjY2Vzc19zaXplID0gYWNjZXNzX3NpemU7XFxuK1xcdHJldCA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKGN0eC1cXHUwMDNlcHJvZyksXFxuK1xcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnRvcHRzKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0socmV0LCBcXFwicnVuIHByb2dcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cmV0ID0gcmVhZF9rZXJuZWxfbG9ncyhjdHgtXFx1MDAzZWtsb2dfZmQsIGtsb2dfYnVmZmVyLCBNQVhfTE9HX1NJWkUpO1xcbitcXHRpZiAoIUFTU0VSVF9HRShyZXQsIDAsIFxcXCJyZWFkIGtlcm5lbCBsb2dzXFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHJldCA9IGNoZWNrX2thc2FuX3JlcG9ydF9pbl9rZXJuZWxfbG9ncyhrbG9nX2J1ZmZlciwgY3R4LFxcbitcXHRcXHRcXHRcXHRcXHRcXHR0ZXN0LVxcdTAwM2Vpc193cml0ZSwgYWNjZXNzX3NpemUpO1xcbitcXHRpZiAob25fc3RhY2sgfHwgdGVzdC1cXHUwMDNlZXhwZWN0X25vX3JlcG9ydClcXG4rXFx0XFx0QVNTRVJUX05FUShyZXQsIDAsIFxcXCJubyByZXBvcnQgc2hvdWxkIGJlIGdlbmVyYXRlZFxcXCIpO1xcbitcXHRlbHNlXFxuK1xcdFxcdEFTU0VSVF9PSyhyZXQsIFxcXCJyZXBvcnQgc2hvdWxkIGJlIGdlbmVyYXRlZFxcXCIpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydW5fc3VidGVzdF93aXRoX3NpemVfYW5kX2xvY2F0aW9uKHN0cnVjdCB0ZXN0X2N0eCAqY3R4LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIGludCBhY2Nlc3Nfc2l6ZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIGJvb2wgb25fc3RhY2spXFxuK3tcXG4rXFx0Y2hhciBzdWJ0ZXN0X25hbWVbU1VCVEVTVF9OQU1FX01BWF9MRU5dO1xcbitcXG4rXFx0aWYgKHRlc3QtXFx1MDAzZXNraXBfbXVsdGlfc2l6ZV90ZXN0aW5nKSB7XFxuK1xcdFxcdHNucHJpbnRmKHN1YnRlc3RfbmFtZSwgU1VCVEVTVF9OQU1FX01BWF9MRU4sIFxcXCIlc1xcXCIsXFxuK1xcdFxcdFxcdCB0ZXN0LVxcdTAwM2Vwcm9nX3R5cGUpO1xcbitcXHRcXHRzdHJuY3B5KGN0eC1cXHUwMDNlcHJvZ19uYW1lLCB0ZXN0LVxcdTAwM2Vwcm9nX3R5cGUsIFBST0dfTkFNRV9NQVhfTEVOKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0c25wcmludGYoc3VidGVzdF9uYW1lLCBTVUJURVNUX05BTUVfTUFYX0xFTiwgXFxcIiVzXyVkXyVzXFxcIixcXG4rXFx0XFx0XFx0IHRlc3QtXFx1MDAzZXByb2dfdHlwZSwgYWNjZXNzX3NpemUsXFxuK1xcdFxcdFxcdCBvbl9zdGFjayA/IFxcXCJvbl9zdGFja1xcXCIgOiBcXFwibm90X29uX3N0YWNrXFxcIik7XFxuK1xcdFxcdHNucHJpbnRmKGN0eC1cXHUwMDNlcHJvZ19uYW1lLCBQUk9HX05BTUVfTUFYX0xFTiwgXFxcIiVzXyVzXFxcIixcXG4rXFx0XFx0XFx0IHRlc3QtXFx1MDAzZXByb2dfdHlwZSxcXG4rXFx0XFx0XFx0IG9uX3N0YWNrID8gXFxcIm9uX3N0YWNrXFxcIiA6IFxcXCJub3Rfb25fc3RhY2tcXFwiKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCF0ZXN0X19zdGFydF9zdWJ0ZXN0KHN1YnRlc3RfbmFtZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGlmICh0ZXN0LVxcdTAwM2VuZWVkc19sb2FkX2FjcV9zdG9yZV9yZWwgXFx1MDAyNlxcdTAwMjYgY3R4LVxcdTAwM2Vza2lwX2xvYWRfYWNxX3N0b3JlX3JlbCkge1xcbitcXHRcXHR0ZXN0X19za2lwKCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0ZXhlY19zdWJ0ZXN0KGN0eCwgdGVzdCwgYWNjZXNzX3NpemUsIG9uX3N0YWNrKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnVuX3N1YnRlc3Rfd2l0aF9zaXplKHN0cnVjdCB0ZXN0X2N0eCAqY3R4LCBzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0LFxcbitcXHRcXHRcXHRcXHQgIGludCBzaXplKVxcbit7XFxuK1xcdHJ1bl9zdWJ0ZXN0X3dpdGhfc2l6ZV9hbmRfbG9jYXRpb24oY3R4LCB0ZXN0LCBzaXplLCBmYWxzZSk7XFxuK1xcdGlmICghdGVzdC1cXHUwMDNlc2tpcF9vbl9zdGFja190ZXN0aW5nKVxcbitcXHRcXHRydW5fc3VidGVzdF93aXRoX3NpemVfYW5kX2xvY2F0aW9uKGN0eCwgdGVzdCwgc2l6ZSwgdHJ1ZSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ1bl9zdWJ0ZXN0KHN0cnVjdCB0ZXN0X2N0eCAqY3R4LCBzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0KVxcbit7XFxuK1xcdGlmICh0ZXN0LVxcdTAwM2Vza2lwX211bHRpX3NpemVfdGVzdGluZykge1xcbitcXHRcXHRydW5fc3VidGVzdF93aXRoX3NpemUoY3R4LCB0ZXN0LCB0ZXN0LVxcdTAwM2VydW5fc2l6ZSk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCF0ZXN0LVxcdTAwM2Vvbmx5XzMyX29yXzY0KSB7XFxuK1xcdFxcdHJ1bl9zdWJ0ZXN0X3dpdGhfc2l6ZShjdHgsIHRlc3QsIDEpO1xcbitcXHRcXHRydW5fc3VidGVzdF93aXRoX3NpemUoY3R4LCB0ZXN0LCAyKTtcXG4rXFx0fVxcbitcXHRydW5fc3VidGVzdF93aXRoX3NpemUoY3R4LCB0ZXN0LCA0KTtcXG4rXFx0cnVuX3N1YnRlc3Rfd2l0aF9zaXplKGN0eCwgdGVzdCwgOCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ1bl9ibGluZGluZ19zdWJ0ZXN0KHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IHRlc3Rfc3BlYyBibGluZGluZ19zcGVjID0ge1xcbitcXHRcXHQucHJvZ190eXBlID0gXFxcInN0X2JsaW5kZWRcXFwiLFxcbitcXHRcXHQuaXNfd3JpdGUgPSB0cnVlLFxcbitcXHR9O1xcbitcXHRjaGFyIGJwZl9qaXRfaGFyZGVuID0gJzInO1xcbitcXHRzdHJ1Y3Qga2FzYW5faGFyZGVuICpza2VsO1xcbitcXHRzdHJ1Y3QgdGVzdF9jdHggKmN0eDtcXG4rXFxuK1xcdGlmICghdGVzdF9fc3RhcnRfc3VidGVzdChcXFwic3RfYmxpbmRlZFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRjdHggPSBjYWxsb2MoMSwgc2l6ZW9mKCpjdHgpKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKGN0eCwgXFxcImFsbG9jIGJsaW5kaW5nIGN0eFxcXCIpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdGN0eC1cXHUwMDNla2xvZ19mZCA9IC0xO1xcbitcXG4rXFx0aWYgKHNldF9icGZfaml0X2hhcmRlbihcXHUwMDI2YnBmX2ppdF9oYXJkZW4pKVxcbitcXHRcXHRnb3RvIGZyZWVfY3R4O1xcbitcXG4rXFx0c2tlbCA9IGthc2FuX2hhcmRlbl9fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcIm9wZW4gYW5kIGxvYWQgYmxpbmRlZCBwcm9nXFxcIikpXFxuK1xcdFxcdGdvdG8gcmVzdG9yZTtcXG4rXFxuK1xcdGN0eC1cXHUwMDNla2xvZ19mZCA9IG9wZW5fa2VybmVsX2xvZ3MoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfRkQoY3R4LVxcdTAwM2VrbG9nX2ZkLCBcXFwib3BlbiBrZXJuZWwgbG9nc1xcXCIpKVxcbitcXHRcXHRnb3RvIGRlc3Ryb3k7XFxuK1xcbitcXHRjdHgtXFx1MDAzZW9iaiA9IHNrZWwtXFx1MDAzZW9iajtcXG4rXFx0c3RybmNweShjdHgtXFx1MDAzZXByb2dfbmFtZSwgXFxcInN0X2JsaW5kZWRcXFwiLCBQUk9HX05BTUVfTUFYX0xFTik7XFxuK1xcbitcXHRleGVjX3N1YnRlc3QoY3R4LCBcXHUwMDI2YmxpbmRpbmdfc3BlYywgMSwgZmFsc2UpO1xcbitcXG4rZGVzdHJveTpcXG4rXFx0Y2xvc2UoY3R4LVxcdTAwM2VrbG9nX2ZkKTtcXG4rXFx0a2FzYW5faGFyZGVuX19kZXN0cm95KHNrZWwpO1xcbityZXN0b3JlOlxcbitcXHRzZXRfYnBmX2ppdF9oYXJkZW4oXFx1MDAyNmJwZl9qaXRfaGFyZGVuKTtcXG4rZnJlZV9jdHg6XFxuK1xcdGZyZWUoY3R4KTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCB0ZXN0X3NwZWMgdGVzdHNbXSA9IHtcXG4rXFx0e1xcbitcXHRcXHQucHJvZ190eXBlID0gXFxcInN0XFxcIixcXG4rXFx0XFx0LmlzX3dyaXRlID0gdHJ1ZVxcbitcXHR9LFxcbitcXHR7XFxuK1xcdFxcdC5wcm9nX3R5cGUgPSBcXFwic3R4XFxcIixcXG4rXFx0XFx0LmlzX3dyaXRlID0gdHJ1ZVxcbitcXHR9LFxcbitcXHR7XFxuK1xcdFxcdC5wcm9nX3R5cGUgPSBcXFwibGR4XFxcIixcXG4rXFx0XFx0LmlzX3dyaXRlID0gZmFsc2VcXG4rXFx0fSxcXG4rXFx0e1xcbitcXHRcXHQucHJvZ190eXBlID0gXFxcInNpbXBsZV9hdG9taWNcXFwiLFxcbitcXHRcXHQuaXNfd3JpdGUgPSB0cnVlLFxcbitcXHRcXHQub25seV8zMl9vcl82NCA9IHRydWVcXG4rXFx0fSxcXG4rXFx0e1xcbitcXHRcXHQucHJvZ190eXBlID0gXFxcImxvYWRfYWNxdWlyZVxcXCIsXFxuK1xcdFxcdC5pc193cml0ZSA9IGZhbHNlLFxcbitcXHRcXHQubmVlZHNfbG9hZF9hY3Ffc3RvcmVfcmVsID0gdHJ1ZVxcbitcXHR9LFxcbitcXHR7XFxuK1xcdFxcdC5wcm9nX3R5cGUgPSBcXFwic3RvcmVfcmVsZWFzZVxcXCIsXFxuK1xcdFxcdC5pc193cml0ZSA9IHRydWUsXFxuK1xcdFxcdC5uZWVkc19sb2FkX2FjcV9zdG9yZV9yZWwgPSB0cnVlXFxuK1xcdH0sXFxuK1xcdHtcXG4rXFx0XFx0LnByb2dfdHlwZSA9IFxcXCJsZHhfcGF0Y2hlZFxcXCIsXFxuK1xcdFxcdC5pc193cml0ZSA9IGZhbHNlLFxcbitcXHRcXHQuc2tpcF9tdWx0aV9zaXplX3Rlc3RpbmcgPSB0cnVlLFxcbitcXHRcXHQuc2tpcF9vbl9zdGFja190ZXN0aW5nID0gdHJ1ZSxcXG4rXFx0XFx0LnJ1bl9zaXplID0gNCxcXG4rXFx0XFx0LnJuZF9oaTMyID0gdHJ1ZVxcbitcXHR9LFxcbitcXHR7XFxuK1xcdFxcdC5wcm9nX3R5cGUgPSBcXFwibGR4X3BhdGNoZWRfb25fc3RhY2tcXFwiLFxcbitcXHRcXHQuaXNfd3JpdGUgPSBmYWxzZSxcXG4rXFx0XFx0LnNraXBfbXVsdGlfc2l6ZV90ZXN0aW5nID0gdHJ1ZSxcXG4rXFx0XFx0LnNraXBfb25fc3RhY2tfdGVzdGluZyA9IHRydWUsXFxuK1xcdFxcdC5ydW5fc2l6ZSA9IDQsXFxuK1xcdFxcdC5leHBlY3Rfbm9fcmVwb3J0ID0gdHJ1ZSxcXG4rXFx0XFx0LnJuZF9oaTMyID0gdHJ1ZVxcbitcXHR9LFxcbitcXHR7XFxuK1xcdFxcdC5wcm9nX3R5cGUgPSBcXFwidmVyaWZpZXJfcGF0aHNfc3RhY2tfYW5kX25vbl9zdGFja1xcXCIsXFxuK1xcdFxcdC5pc193cml0ZSA9IHRydWUsXFxuK1xcdFxcdC5za2lwX211bHRpX3NpemVfdGVzdGluZyA9IHRydWUsXFxuK1xcdFxcdC5za2lwX29uX3N0YWNrX3Rlc3RpbmcgPSB0cnVlLFxcbitcXHRcXHQucnVuX3NpemUgPSAxXFxuK1xcdH1cXG4rfTtcXG4rXFxuK3ZvaWQgdGVzdF9rYXNhbih2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBrYXNhbl93cml0ZV92YWwgdmFsO1xcbitcXHRzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0O1xcbitcXHRzdHJ1Y3QgdGVzdF9jdHggKmN0eDtcXG4rXFx0c3RydWN0IGthc2FuICpza2VsO1xcbitcXHRfX3UzMiBrZXkgPSAwO1xcbitcXHRpbnQgaSwgcmV0O1xcbitcXG4rXFx0Y3R4ID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgdGVzdF9jdHgpKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKGN0eCwgXFxcImFsbG9jIHRlc3QgY3R4XFxcIikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGlmICghaXNfaml0X2VuYWJsZWQoKSB8fCAhZ2V0X2thc2FuX2ppdF9lbmFibGVkKCkgfHxcXG4rXFx0ICAgICFnZXRfa2FzYW5fbXVsdGlfc2hvdF9lbmFibGVkKCkpIHtcXG4rXFx0XFx0dGVzdF9fc2tpcCgpO1xcbitcXHRcXHRnb3RvIGVuZDtcXG4rXFx0fVxcbitcXG4rXFx0c2tlbCA9IGthc2FuX19vcGVuKCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwib3BlbiBwcm9nXFxcIikpXFxuK1xcdFxcdGdvdG8gZW5kO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUodGVzdHMpOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IGJwZl9wcm9ncmFtICpwcm9nO1xcbitcXG4rXFx0XFx0aWYgKCF0ZXN0c1tpXS5ybmRfaGkzMilcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRwcm9nID0gYnBmX29iamVjdF9fZmluZF9wcm9ncmFtX2J5X25hbWUoc2tlbC1cXHUwMDNlb2JqLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHR0ZXN0c1tpXS5wcm9nX3R5cGUpO1xcbitcXHRcXHRpZiAoIUFTU0VSVF9PS19QVFIocHJvZywgXFxcImZpbmQgcm5kX2hpMzIgcHJvZ1xcXCIpKVxcbitcXHRcXHRcXHRnb3RvIGRlc3Ryb3k7XFxuK1xcdFxcdGJwZl9wcm9ncmFtX19zZXRfZmxhZ3MocHJvZywgQlBGX0ZfVEVTVF9STkRfSEkzMik7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghQVNTRVJUX09LKGthc2FuX19sb2FkKHNrZWwpLCBcXFwibG9hZCBwcm9nXFxcIikpXFxuK1xcdFxcdGdvdG8gZGVzdHJveTtcXG4rXFxuK1xcdGN0eC1cXHUwMDNlb2JqID0gc2tlbC1cXHUwMDNlb2JqO1xcbitcXHRjdHgtXFx1MDAzZWFjY2Vzc19zaXplID0gXFx1MDAyNnNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlYWNjZXNzX3NpemU7XFxuK1xcdGN0eC1cXHUwMDNlc2tpcF9sb2FkX2FjcV9zdG9yZV9yZWwgPSBza2VsLVxcdTAwM2VkYXRhLVxcdTAwM2Vza2lwX2xvYWRfYWNxX3N0b3JlX3JlbF90ZXN0cztcXG4rXFxuK1xcdGN0eC1cXHUwMDNla2xvZ19mZCA9IG9wZW5fa2VybmVsX2xvZ3MoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfRkQoY3R4LVxcdTAwM2VrbG9nX2ZkLCBcXFwib3BlbiBrZXJuZWwgbG9nc1xcXCIpKVxcbitcXHRcXHRnb3RvIGRlc3Ryb3k7XFxuK1xcbitcXHQvKiBGaWxsIG1hcCB3aXRoIHJlY29nbml6YWJsZSB2YWx1ZXMgKi9cXG4rXFx0cmV0ID0gYnBmX21hcF9fbG9va3VwX2VsZW0oc2tlbC1cXHUwMDNlbWFwcy50ZXN0X21hcCwgXFx1MDAyNmtleSwgc2l6ZW9mKGtleSksXFxuK1xcdFxcdFxcdFxcdCAgIFxcdTAwMjZ2YWwsIHNpemVvZih2YWwpLCAwKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0socmV0LCBcXFwiZ2V0IG1hcFxcXCIpKVxcbitcXHRcXHRnb3RvIGNsb3NlO1xcbitcXHR2YWwuZGF0YV8xID0gMHhBQTtcXG4rXFx0dmFsLmRhdGFfMiA9IDB4QkJCQjtcXG4rXFx0dmFsLmRhdGFfNCA9IDB4Q0NDQ0NDQ0M7XFxuK1xcdHZhbC5kYXRhXzggPSAweEREREREREREREREREREREQ7XFxuK1xcdHJldCA9IGJwZl9tYXBfX3VwZGF0ZV9lbGVtKHNrZWwtXFx1MDAzZW1hcHMudGVzdF9tYXAsIFxcdTAwMjZrZXksIHNpemVvZihrZXkpLFxcbitcXHRcXHRcXHRcXHQgICBcXHUwMDI2dmFsLCBzaXplb2YodmFsKSwgMCk7XFxuK1xcdGlmICghQVNTRVJUX09LKHJldCwgXFxcInNldCBtYXBcXFwiKSlcXG4rXFx0XFx0Z290byBjbG9zZTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHRlc3RzKTsgaSsrKSB7XFxuK1xcdFxcdHRlc3QgPSBcXHUwMDI2dGVzdHNbaV07XFxuK1xcdFxcdHJ1bl9zdWJ0ZXN0KGN0eCwgdGVzdCk7XFxuK1xcdH1cXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEJsaW5kaW5nIHN1YnRlc3QgaXMgaGFuZGxlZCBkaWZmZXJlbnRseSBhcyBpdCBuZWVkcyB0aGVcXG4rXFx0ICogY29ycmVzcG9uZGluZyBwcm9ncmFtIHRvIGJlIGxvYWRlZCB3aXRoIGJwZl9qaXRfaGFyZGVuIHJhaXNlZFxcbitcXHQgKi9cXG4rXFx0cnVuX2JsaW5kaW5nX3N1YnRlc3QoKTtcXG4rXFxuK2Nsb3NlOlxcbitcXHRjbG9zZShjdHgtXFx1MDAzZWtsb2dfZmQpO1xcbitkZXN0cm95OlxcbitcXHRrYXNhbl9fZGVzdHJveShza2VsKTtcXG4rZW5kOlxcbitcXHRmcmVlKGN0eCk7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2thc2FuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva2FzYW4uY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjgyZGRjZTMwNTlhZWUxXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rYXNhbi5jXFxuQEAgLTAsMCArMSwzOTQgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgQlNELTMtQ2xhdXNlXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiYnBmX21pc2MuaFxcXCJcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGJvb2wuaFxcdTAwM2VcXG4rXFxuK2V4dGVybiB2b2lkIGJwZl9rZnVuY19rYXNhbl9wb2lzb24odm9pZCAqbWVtLCBfX3UzMiBtZW1fX3N6KSBfX2tzeW07XFxuK2V4dGVybiB2b2lkIGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2b2lkICptZW0sIF9fdTMyIG1lbV9fc3opIF9fa3N5bTtcXG4rXFxuK2ludCBhY2Nlc3Nfc2l6ZTtcXG4rXFxuK3N0cnVjdCBrYXNhbl93cml0ZV92YWwge1xcbitcXHRfX3U4IGRhdGFfMTtcXG4rXFx0X191MTYgZGF0YV8yO1xcbitcXHRfX3UzMiBkYXRhXzQ7XFxuK1xcdF9fdTY0IGRhdGFfODtcXG4rfTtcXG4rXFxuK3N0cnVjdCB7XFxuK1xcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xcbitcXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xcbitcXHRfX3R5cGUoa2V5LCBfX3UzMik7XFxuK1xcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IGthc2FuX3dyaXRlX3ZhbCk7XFxuK30gdGVzdF9tYXAgU0VDKFxcXCIubWFwc1xcXCIpO1xcbitcXG4rU0VDKFxcXCJ0Y3gvaW5ncmVzc1xcXCIpXFxuK2ludCBzdF9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpXFxuK3tcXG4rXFx0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCB2YWw7XFxuK1xcbitcXHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKFxcdTAwMjZ2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XFxuK1xcdHN3aXRjaCAoYWNjZXNzX3NpemUpIHtcXG4rXFx0Y2FzZSAxOlxcbitcXHRcXHR2YWwuZGF0YV8xID0gMHhBQTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgMjpcXG4rXFx0XFx0dmFsLmRhdGFfMiA9IDB4QUE7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIDQ6XFxuK1xcdFxcdHZhbC5kYXRhXzQgPSAweEFBO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSA4OlxcbitcXHRcXHR2YWwuZGF0YV84ID0gMHhBQTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFx0YnBmX2tmdW5jX2thc2FuX3VucG9pc29uKFxcdTAwMjZ2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcInRjeC9pbmdyZXNzXFxcIilcXG4raW50IHN0X25vdF9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpXFxuK3tcXG4rXFx0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCAqdmFsO1xcbitcXHRfX3UzMiBrZXkgPSAwO1xcbitcXG4rXFx0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcXHUwMDI2dGVzdF9tYXAsIFxcdTAwMjZrZXkpO1xcbitcXHRpZiAoIXZhbClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcXG4rXFx0c3dpdGNoIChhY2Nlc3Nfc2l6ZSkge1xcbitcXHRjYXNlIDE6XFxuK1xcdFxcdHZhbC1cXHUwMDNlZGF0YV8xID0gMHhBQTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgMjpcXG4rXFx0XFx0dmFsLVxcdTAwM2VkYXRhXzIgPSAweEFBO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSA0OlxcbitcXHRcXHR2YWwtXFx1MDAzZWRhdGFfNCA9IDB4QUE7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIDg6XFxuK1xcdFxcdHZhbC1cXHUwMDNlZGF0YV84ID0gMHhBQTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFx0YnBmX2tmdW5jX2thc2FuX3VucG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwidGN4L2luZ3Jlc3NcXFwiKVxcbitpbnQgc3R4X29uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsIHZhbDtcXG4rXFxuK1xcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24oXFx1MDAyNnZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcXG4rXFx0c3dpdGNoIChhY2Nlc3Nfc2l6ZSkge1xcbitcXHRjYXNlIDE6XFxuK1xcdFxcdHZhbC5kYXRhXzEgPSBhY2Nlc3Nfc2l6ZTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgMjpcXG4rXFx0XFx0dmFsLmRhdGFfMiA9IGFjY2Vzc19zaXplO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSA0OlxcbitcXHRcXHR2YWwuZGF0YV80ID0gYWNjZXNzX3NpemU7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIDg6XFxuK1xcdFxcdHZhbC5kYXRhXzggPSBhY2Nlc3Nfc2l6ZTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFx0YnBmX2tmdW5jX2thc2FuX3VucG9pc29uKFxcdTAwMjZ2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcInRjeC9pbmdyZXNzXFxcIilcXG4raW50IHN0eF9ub3Rfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdHN0cnVjdCBrYXNhbl93cml0ZV92YWwgKnZhbDtcXG4rXFx0X191MzIga2V5ID0gMDtcXG4rXFxuK1xcdHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXFx1MDAyNnRlc3RfbWFwLCBcXHUwMDI2a2V5KTtcXG4rXFx0aWYgKCF2YWwpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0YnBmX2tmdW5jX2thc2FuX3BvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XFxuK1xcdHN3aXRjaCAoYWNjZXNzX3NpemUpIHtcXG4rXFx0Y2FzZSAxOlxcbitcXHRcXHR2YWwtXFx1MDAzZWRhdGFfMSA9IGFjY2Vzc19zaXplO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSAyOlxcbitcXHRcXHR2YWwtXFx1MDAzZWRhdGFfMiA9IGFjY2Vzc19zaXplO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSA0OlxcbitcXHRcXHR2YWwtXFx1MDAzZWRhdGFfNCA9IGFjY2Vzc19zaXplO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSA4OlxcbitcXHRcXHR2YWwtXFx1MDAzZWRhdGFfOCA9IGFjY2Vzc19zaXplO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJ0Y3gvaW5ncmVzc1xcXCIpXFxuK2ludCBsZHhfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdHN0cnVjdCBrYXNhbl93cml0ZV92YWwgdmFsO1xcbitcXG4rXFx0YnBmX2tmdW5jX2thc2FuX3BvaXNvbihcXHUwMDI2dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xcbitcXHRzd2l0Y2ggKGFjY2Vzc19zaXplKSB7XFxuK1xcdGNhc2UgMTpcXG4rXFx0XFx0X19zaW5rKHZhbC5kYXRhXzEpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSAyOlxcbitcXHRcXHRfX3NpbmsodmFsLmRhdGFfMik7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIDQ6XFxuK1xcdFxcdF9fc2luayh2YWwuZGF0YV80KTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgODpcXG4rXFx0XFx0X19zaW5rKHZhbC5kYXRhXzgpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24oXFx1MDAyNnZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwidGN4L2luZ3Jlc3NcXFwiKVxcbitpbnQgbGR4X25vdF9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpXFxuK3tcXG4rXFx0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCAqdmFsO1xcbitcXHRfX3UzMiBrZXkgPSAwO1xcbitcXG4rXFx0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcXHUwMDI2dGVzdF9tYXAsIFxcdTAwMjZrZXkpO1xcbitcXHRpZiAoIXZhbClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcXG4rXFx0c3dpdGNoIChhY2Nlc3Nfc2l6ZSkge1xcbitcXHRjYXNlIDE6XFxuK1xcdFxcdF9fc2luayh2YWwtXFx1MDAzZWRhdGFfMSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIDI6XFxuK1xcdFxcdF9fc2luayh2YWwtXFx1MDAzZWRhdGFfMik7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIDQ6XFxuK1xcdFxcdF9fc2luayh2YWwtXFx1MDAzZWRhdGFfNCk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIDg6XFxuK1xcdFxcdF9fc2luayh2YWwtXFx1MDAzZWRhdGFfOCk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcInRjeC9pbmdyZXNzXFxcIilcXG4raW50IGxkeF9wYXRjaGVkKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsICp2YWw7XFxuK1xcdF9fdTMyIGtleSA9IDA7XFxuK1xcbitcXHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZ0ZXN0X21hcCwgXFx1MDAyNmtleSk7XFxuK1xcdGlmICghdmFsKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xcbitcXHRfX3NpbmsodmFsLVxcdTAwM2VkYXRhXzQpO1xcbitcXHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwidGN4L2luZ3Jlc3NcXFwiKVxcbitpbnQgbGR4X3BhdGNoZWRfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdHN0cnVjdCBrYXNhbl93cml0ZV92YWwgdmFsO1xcbitcXG4rXFx0YnBmX2tmdW5jX2thc2FuX3BvaXNvbihcXHUwMDI2dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xcbitcXHRfX3NpbmsodmFsLmRhdGFfNCk7XFxuK1xcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbihcXHUwMDI2dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwidGN4L2luZ3Jlc3NcXFwiKVxcbitpbnQgc2ltcGxlX2F0b21pY19vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpXFxuK3tcXG4rXFx0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCB2YWw7XFxuK1xcbitcXHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKFxcdTAwMjZ2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XFxuK1xcdHN3aXRjaCAoYWNjZXNzX3NpemUpIHtcXG4rXFx0Y2FzZSA0OlxcbitcXHRcXHRfX3N5bmNfZmV0Y2hfYW5kX2FkZChcXHUwMDI2dmFsLmRhdGFfNCwgNCk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIDg6XFxuK1xcdFxcdF9fc3luY19mZXRjaF9hbmRfYWRkKFxcdTAwMjZ2YWwuZGF0YV84LCA4KTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFx0YnBmX2tmdW5jX2thc2FuX3VucG9pc29uKFxcdTAwMjZ2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcInRjeC9pbmdyZXNzXFxcIilcXG4raW50IHNpbXBsZV9hdG9taWNfbm90X29uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsICp2YWw7XFxuK1xcdF9fdTMyIGtleSA9IDA7XFxuK1xcbitcXHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZ0ZXN0X21hcCwgXFx1MDAyNmtleSk7XFxuK1xcdGlmICghdmFsKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xcbitcXHRzd2l0Y2ggKGFjY2Vzc19zaXplKSB7XFxuK1xcdGNhc2UgNDpcXG4rXFx0XFx0X19zeW5jX2ZldGNoX2FuZF9hZGQoXFx1MDAyNnZhbC1cXHUwMDNlZGF0YV80LCA0KTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgODpcXG4rXFx0XFx0X19zeW5jX2ZldGNoX2FuZF9hZGQoXFx1MDAyNnZhbC1cXHUwMDNlZGF0YV84LCA4KTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFx0YnBmX2tmdW5jX2thc2FuX3VucG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKyNpZmRlZiBfX0JQRl9GRUFUVVJFX0xPQURfQUNRX1NUT1JFX1JFTFxcbitib29sIHNraXBfbG9hZF9hY3Ffc3RvcmVfcmVsX3Rlc3RzIFNFQyhcXFwiLmRhdGFcXFwiKSA9IDA7XFxuK1xcbitTRUMoXFxcInRjeC9pbmdyZXNzXFxcIilcXG4raW50IGxvYWRfYWNxdWlyZV9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpXFxuK3tcXG4rXFx0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCB2YWw7XFxuK1xcbitcXHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKFxcdTAwMjZ2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XFxuK1xcdHN3aXRjaCAoYWNjZXNzX3NpemUpIHtcXG4rXFx0Y2FzZSAxOlxcbitcXHRcXHRfX2F0b21pY19sb2FkX24oXFx1MDAyNnZhbC5kYXRhXzEsIF9fQVRPTUlDX0FDUVVJUkUpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSAyOlxcbitcXHRcXHRfX2F0b21pY19sb2FkX24oXFx1MDAyNnZhbC5kYXRhXzIsIF9fQVRPTUlDX0FDUVVJUkUpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSA0OlxcbitcXHRcXHRfX2F0b21pY19sb2FkX24oXFx1MDAyNnZhbC5kYXRhXzQsIF9fQVRPTUlDX0FDUVVJUkUpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSA4OlxcbitcXHRcXHRfX2F0b21pY19sb2FkX24oXFx1MDAyNnZhbC5kYXRhXzgsIF9fQVRPTUlDX0FDUVVJUkUpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24oXFx1MDAyNnZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwidGN4L2luZ3Jlc3NcXFwiKVxcbitpbnQgbG9hZF9hY3F1aXJlX25vdF9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpXFxuK3tcXG4rXFx0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCAqdmFsO1xcbitcXHRfX3UzMiBrZXkgPSAwO1xcbitcXG4rXFx0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcXHUwMDI2dGVzdF9tYXAsIFxcdTAwMjZrZXkpO1xcbitcXHRpZiAoIXZhbClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcXG4rXFx0c3dpdGNoIChhY2Nlc3Nfc2l6ZSkge1xcbitcXHRjYXNlIDE6XFxuK1xcdFxcdF9fYXRvbWljX2xvYWRfbihcXHUwMDI2dmFsLVxcdTAwM2VkYXRhXzEsIF9fQVRPTUlDX0FDUVVJUkUpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSAyOlxcbitcXHRcXHRfX2F0b21pY19sb2FkX24oXFx1MDAyNnZhbC1cXHUwMDNlZGF0YV8yLCBfX0FUT01JQ19BQ1FVSVJFKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgNDpcXG4rXFx0XFx0X19hdG9taWNfbG9hZF9uKFxcdTAwMjZ2YWwtXFx1MDAzZWRhdGFfNCwgX19BVE9NSUNfQUNRVUlSRSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIDg6XFxuK1xcdFxcdF9fYXRvbWljX2xvYWRfbihcXHUwMDI2dmFsLVxcdTAwM2VkYXRhXzgsIF9fQVRPTUlDX0FDUVVJUkUpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJ0Y3gvaW5ncmVzc1xcXCIpXFxuK2ludCBzdG9yZV9yZWxlYXNlX29uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsIHZhbDtcXG4rXFxuK1xcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24oXFx1MDAyNnZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcXG4rXFx0c3dpdGNoIChhY2Nlc3Nfc2l6ZSkge1xcbitcXHRjYXNlIDE6XFxuK1xcdFxcdF9fYXRvbWljX3N0b3JlX24oXFx1MDAyNnZhbC5kYXRhXzEsIDB4QUEsIF9fQVRPTUlDX1JFTEVBU0UpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSAyOlxcbitcXHRcXHRfX2F0b21pY19zdG9yZV9uKFxcdTAwMjZ2YWwuZGF0YV8yLCAweEJCQkIsIF9fQVRPTUlDX1JFTEVBU0UpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSA0OlxcbitcXHRcXHRfX2F0b21pY19zdG9yZV9uKFxcdTAwMjZ2YWwuZGF0YV80LCAweENDQ0NDQ0NDLCBfX0FUT01JQ19SRUxFQVNFKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgODpcXG4rXFx0XFx0X19hdG9taWNfc3RvcmVfbihcXHUwMDI2dmFsLmRhdGFfOCwgMHhERERERERERERERERERERELFxcbitcXHRcXHRcXHRcXHQgX19BVE9NSUNfUkVMRUFTRSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbihcXHUwMDI2dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJ0Y3gvaW5ncmVzc1xcXCIpXFxuK2ludCBzdG9yZV9yZWxlYXNlX25vdF9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpXFxuK3tcXG4rXFx0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCAqdmFsO1xcbitcXHRfX3UzMiBrZXkgPSAwO1xcbitcXG4rXFx0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcXHUwMDI2dGVzdF9tYXAsIFxcdTAwMjZrZXkpO1xcbitcXHRpZiAoIXZhbClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcXG4rXFx0c3dpdGNoIChhY2Nlc3Nfc2l6ZSkge1xcbitcXHRjYXNlIDE6XFxuK1xcdFxcdF9fYXRvbWljX3N0b3JlX24oXFx1MDAyNnZhbC1cXHUwMDNlZGF0YV8xLCAweEFBLCBfX0FUT01JQ19SRUxFQVNFKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgMjpcXG4rXFx0XFx0X19hdG9taWNfc3RvcmVfbihcXHUwMDI2dmFsLVxcdTAwM2VkYXRhXzIsIDB4QkJCQiwgX19BVE9NSUNfUkVMRUFTRSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIDQ6XFxuK1xcdFxcdF9fYXRvbWljX3N0b3JlX24oXFx1MDAyNnZhbC1cXHUwMDNlZGF0YV80LCAweENDQ0NDQ0NDLCBfX0FUT01JQ19SRUxFQVNFKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgODpcXG4rXFx0XFx0X19hdG9taWNfc3RvcmVfbihcXHUwMDI2dmFsLVxcdTAwM2VkYXRhXzgsIDB4RERERERERERERERERERERCxcXG4rXFx0XFx0XFx0XFx0IF9fQVRPTUlDX1JFTEVBU0UpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbisjZWxzZVxcbitib29sIHNraXBfbG9hZF9hY3Ffc3RvcmVfcmVsX3Rlc3RzIFNFQyhcXFwiLmRhdGFcXFwiKSA9IDE7XFxuKyNlbmRpZlxcbitcXG4rU0VDKFxcXCJ0Y3gvaW5ncmVzc1xcXCIpXFxuK2ludCB2ZXJpZmllcl9wYXRoc19zdGFja19hbmRfbm9uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsIHN0YWNrX3ZhbCA9IHt9O1xcbitcXHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsICp2YWw7XFxuK1xcdHZvaWQgKnB0cjtcXG4rXFx0X191MzIga2V5ID0gMDtcXG4rXFxuK1xcdHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXFx1MDAyNnRlc3RfbWFwLCBcXHUwMDI2a2V5KTtcXG4rXFx0aWYgKCF2YWwpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKGFjY2Vzc19zaXplKVxcbitcXHRcXHRwdHIgPSB2YWw7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cHRyID0gXFx1MDAyNnN0YWNrX3ZhbDtcXG4rXFxuK1xcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24odmFsLCBzaXplb2YoKnZhbCkpO1xcbitcXHQqKF9fdTggKilwdHIgPSAweEFBO1xcbitcXHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odmFsLCBzaXplb2YoKnZhbCkpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rY2hhciBMSUNFTlNFW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2thc2FuX2hhcmRlbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2thc2FuX2hhcmRlbi5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uODA4ZDdkYTY0NDIxNjJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2thc2FuX2hhcmRlbi5jXFxuQEAgLTAsMCArMSw0MSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBCU0QtMy1DbGF1c2VcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcXHUwMDNlXFxuK1xcbitleHRlcm4gdm9pZCBicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZvaWQgKm1lbSwgX191MzIgbWVtX19zeikgX19rc3ltO1xcbitleHRlcm4gdm9pZCBicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odm9pZCAqbWVtLCBfX3UzMiBtZW1fX3N6KSBfX2tzeW07XFxuK1xcbitzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsIHtcXG4rXFx0X191OCBkYXRhXzE7XFxuK1xcdF9fdTE2IGRhdGFfMjtcXG4rXFx0X191MzIgZGF0YV80O1xcbitcXHRfX3U2NCBkYXRhXzg7XFxuK307XFxuK1xcbitzdHJ1Y3Qge1xcbitcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcXG4rXFx0X191aW50KG1heF9lbnRyaWVzLCAxKTtcXG4rXFx0X190eXBlKGtleSwgX191MzIpO1xcbitcXHRfX3R5cGUodmFsdWUsIHN0cnVjdCBrYXNhbl93cml0ZV92YWwpO1xcbit9IHRlc3RfbWFwIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4rXFxuK1NFQyhcXFwidGN4L2luZ3Jlc3NcXFwiKVxcbitpbnQgc3RfYmxpbmRlZChzdHJ1Y3QgX19za19idWZmICpza2IpXFxuK3tcXG4rXFx0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCAqdmFsO1xcbitcXHRfX3UzMiBrZXkgPSAwO1xcbitcXG4rXFx0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcXHUwMDI2dGVzdF9tYXAsIFxcdTAwMjZrZXkpO1xcbitcXHRpZiAoIXZhbClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcXG4rXFx0dmFsLVxcdTAwM2VkYXRhXzEgPSAweEFBO1xcbitcXHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2NoYXIgTElDRU5TRVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXFxuaW5kZXggMzBmMWNkMjMwOTNjYmUuLjVkNmE4MzRmN2Q3NTc1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXFxuQEAgLTI3MSw2ICsyNzEsMjYgQEAgX19icGZfa2Z1bmMgdm9pZCBicGZfa2Z1bmNfcHV0X2RlZmF1bHRfdHJ1c3RlZF9wdHJfdGVzdChzdHJ1Y3QgcHJvZ190ZXN0X21lbWJlclxcbiBcXHQgKi9cXG4gfVxcbiBcXG4rI2lmZGVmIENPTkZJR19CUEZfSklUX0tBU0FOXFxuK1xcbitleHRlcm4gdm9pZCBrYXNhbl9wb2lzb24oY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUsIHU4IHZhbHVlLCBib29sIGluaXQpO1xcbitcXG4rI2RlZmluZSBLQVNBTl9TTEFCX0ZSRUUgMHhGQlxcbitcXG4rX19icGZfa2Z1bmMgdm9pZCBicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZvaWQgKm1lbSwgdTMyIG1lbV9fc3opXFxuK3tcXG4rXFx0a2FzYW5fcG9pc29uKG1lbSwgbWVtX19zeiwgS0FTQU5fU0xBQl9GUkVFLCBmYWxzZSk7XFxuK31cXG4rXFxuK19fYnBmX2tmdW5jIHZvaWQgYnBmX2tmdW5jX2thc2FuX3VucG9pc29uKHZvaWQgKm1lbSwgdTMyIG1lbV9fc3opXFxuK3tcXG4rXFx0a2FzYW5fcG9pc29uKG1lbSwgbWVtX19zeiwgMHgwMCwgZmFsc2UpO1xcbit9XFxuKyNlbHNlXFxuK19fYnBmX2tmdW5jIHZvaWQgYnBmX2tmdW5jX2thc2FuX3BvaXNvbih2b2lkICptZW0sIHUzMiBtZW1fX3N6KSB7IH1cXG4rX19icGZfa2Z1bmMgdm9pZCBicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odm9pZCAqbWVtLCB1MzIgbWVtX19zeikgeyB9XFxuKyNlbmRpZlxcbitcXG4gX19icGZfa2Z1bmMgc3RydWN0IGJwZl90ZXN0bW9kX2N0eCAqXFxuIGJwZl90ZXN0bW9kX2N0eF9jcmVhdGUoaW50ICplcnIpXFxuIHtcXG5AQCAtNzQwLDYgKzc2MCw4IEBAIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF8xKVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfMilcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19nZXRfZGVmYXVsdF90cnVzdGVkX3B0cl90ZXN0KTtcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19wdXRfZGVmYXVsdF90cnVzdGVkX3B0cl90ZXN0KTtcXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19rYXNhbl9wb2lzb24pXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24pXFxuIEJURl9LRlVOQ1NfRU5EKGJwZl90ZXN0bW9kX2NvbW1vbl9rZnVuY19pZHMpXFxuIFxcbiBCVEZfSURfTElTVChicGZfdGVzdG1vZF9kdG9yX2lkcylcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5jXFxuaW5kZXggYzk3MGU3NzkzZGZjYmMuLjczN2Y2NjhiMzVlMjNiIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuY1xcbkBAIC01MTksNiArNTE5LDM4IEBAIGJvb2wgaXNfaml0X2VuYWJsZWQodm9pZClcXG4gXFx0cmV0dXJuIGVuYWJsZWQ7XFxuIH1cXG4gXFxuK2ludCBzZXRfYnBmX2ppdF9oYXJkZW4oY2hhciAqbGV2ZWwpXFxuK3tcXG4rXFx0Y2hhciBvbGRfbGV2ZWw7XFxuK1xcdGludCBlcnIgPSAtMTtcXG4rXFx0aW50IGZkID0gLTE7XFxuK1xcbitcXHRmZCA9IG9wZW4oXFxcIi9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2hhcmRlblxcXCIsIE9fUkRXUiB8IE9fTk9OQkxPQ0spO1xcbitcXHRpZiAoZmQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHRlcnIgPSByZWFkKGZkLCBcXHUwMDI2b2xkX2xldmVsLCAxKTtcXG4rXFx0aWYgKGVyciAhPSAxKSB7XFxuK1xcdFxcdGVyciA9IC0xO1xcbitcXHRcXHRnb3RvIGVuZDtcXG4rXFx0fVxcbitcXG4rXFx0bHNlZWsoZmQsIDAsIFNFRUtfU0VUKTtcXG4rXFxuK1xcdGVyciA9IHdyaXRlKGZkLCBsZXZlbCwgMSk7XFxuK1xcdGlmIChlcnIgIT0gMSkge1xcbitcXHRcXHRlcnIgPSAtMTtcXG4rXFx0XFx0Z290byBlbmQ7XFxuK1xcdH1cXG4rXFxuK1xcdGVyciA9IDA7XFxuK1xcdCpsZXZlbCA9IG9sZF9sZXZlbDtcXG4rZW5kOlxcbitcXHRpZiAoZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2UoZmQpO1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbiBpbnQgc3RhY2tfbXByb3RlY3Qodm9pZClcXG4ge1xcbiBcXHR2b2lkICpidWY7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuaFxcbmluZGV4IDJlZGM2ZmI3ZmM1MjEyLi5lMDA2NDJhZmU4NmY0MCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmhcXG5AQCAtNTksNiArNTksNyBAQCBzdHJ1Y3QgYnBmX2luc247XFxuIGludCBnZXRfeGxhdGVkX3Byb2dyYW0oaW50IGZkX3Byb2csIHN0cnVjdCBicGZfaW5zbiAqKmJ1ZiwgX191MzIgKmNudCk7XFxuIGludCB0ZXN0aW5nX3Byb2dfZmxhZ3Modm9pZCk7XFxuIGJvb2wgaXNfaml0X2VuYWJsZWQodm9pZCk7XFxuK2ludCBzZXRfYnBmX2ppdF9oYXJkZW4oY2hhciAqbGV2ZWwpO1xcbiBpbnQgc3RhY2tfbXByb3RlY3Qodm9pZCk7XFxuIFxcbiAjZW5kaWYgLyogX19URVNUSU5HX0hFTFBFUlNfSCAqL1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdW5wcml2X2hlbHBlcnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi91bnByaXZfaGVscGVycy5jXFxuaW5kZXggZjk5N2Q3ZWM4ZmQwODYuLjk1YmU4MzkzNzg4Mzc2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi91bnByaXZfaGVscGVycy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3VucHJpdl9oZWxwZXJzLmNcXG5AQCAtMTQyLDMgKzE0MiwxMyBAQCBib29sIGdldF91bnByaXZfZGlzYWJsZWQodm9pZClcXG4gXFx0fVxcbiBcXHRyZXR1cm4gbWl0aWdhdGlvbnNfb2ZmO1xcbiB9XFxuK1xcbitib29sIGdldF9rYXNhbl9qaXRfZW5hYmxlZCh2b2lkKVxcbit7XFxuK1xcdHJldHVybiBjb25maWdfY29udGFpbnMoXFxcIkNPTkZJR19CUEZfSklUX0tBU0FOPXlcXFwiKSA9PSAxO1xcbit9XFxuK1xcbitib29sIGdldF9rYXNhbl9tdWx0aV9zaG90X2VuYWJsZWQodm9pZClcXG4re1xcbitcXHRyZXR1cm4gY21kbGluZV9jb250YWlucyhcXFwia2FzYW5fbXVsdGlfc2hvdFxcXCIpO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi91bnByaXZfaGVscGVycy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3VucHJpdl9oZWxwZXJzLmhcXG5pbmRleCAxNTFmNjczMjk2NjUyMi4uYTdjZWI1MTU3N2NkYzMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3VucHJpdl9oZWxwZXJzLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdW5wcml2X2hlbHBlcnMuaFxcbkBAIC01LDMgKzUsNSBAQFxcbiAjZGVmaW5lIFVOUFJJVl9TWVNDVEwgXFxcImtlcm5lbC91bnByaXZpbGVnZWRfYnBmX2Rpc2FibGVkXFxcIlxcbiBcXG4gYm9vbCBnZXRfdW5wcml2X2Rpc2FibGVkKHZvaWQpO1xcbitib29sIGdldF9rYXNhbl9qaXRfZW5hYmxlZCh2b2lkKTtcXG4rYm9vbCBnZXRfa2FzYW5fbXVsdGlfc2hvdF9lbmFibGVkKHZvaWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNDozMjoyMC4wODcyMjI0MjJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1MzIwMjExMjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9KSVRfS0FTQU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlbWl0X2thc2FuX2NoZWNrXCIsXG4gICAgXCJlbWl0X3N0XCIsXG4gICAgXCJlbWl0X2F0b21pY19sZF9zdFwiLFxuICAgIFwiYWRqdXN0X2luc25fYXV4X2RhdGFcIixcbiAgICBcImJwZl9wYXRjaF9pbnNuX2RhdGFcIixcbiAgICBcIm1hcmtfbm9uX3N0YWNrX2FjY2Vzc1wiLFxuICAgIFwiaXNfbWVtX2luc25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIEtBU0FOIHN1cHBvcnQgZm9yIHRoZSBCUEYgSklUIGNvbXBpbGVyIG9uIHg4Ni4gSXQgbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byB0cmFjayBub24tc3RhY2sgbWVtb3J5IGFjY2Vzc2VzIGFuZCB1cGRhdGVzIHRoZSB4ODYgSklUIGNvbXBpbGVyIHRvIGVtaXQgS0FTQU4gY2hlY2tzIGZvciB0aGVzZSBhY2Nlc3Nlcy4gVGhpcyBpbnRyb2R1Y2VzIG5ldyBjb3JlIGxvZ2ljIGluIHRoZSBKSVQgY29tcGlsZXIgYW5kIHZlcmlmaWVyLCB3aGljaCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0bmVzcyBhbmQgcHJldmVudCByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1NWZmZGZkNWM1YTA5YTQwZjIyMzc1NmNmYjhiY2U5OWUyMDIwYWU0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMTAgMDQ6MzI6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnIGIvYXJjaC94ODYvS2NvbmZpZ1xuaW5kZXggYmRhZDkwZjIxMGU0YmYuLjcwNWE5YWI4NWYzYTk1IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvS2NvbmZpZ1xuKysrIGIvYXJjaC94ODYvS2NvbmZpZ1xuQEAgLTIzMyw2ICsyMzMsNyBAQCBjb25maWcgWDg2XG4gXHRzZWxlY3QgSEFWRV9TQU1QTEVfRlRSQUNFX0RJUkVDVFx0aWYgWDg2XzY0XG4gXHRzZWxlY3QgSEFWRV9TQU1QTEVfRlRSQUNFX0RJUkVDVF9NVUxUSVx0aWYgWDg2XzY0XG4gXHRzZWxlY3QgSEFWRV9FQlBGX0pJVFxuK1x0c2VsZWN0IEhBVkVfRUJQRl9KSVRfS0FTQU5cdFx0aWYgWDg2XzY0XG4gXHRzZWxlY3QgSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTU1xuIFx0c2VsZWN0IEhBVkVfRUlTQVx0XHRcdGlmIFg4Nl8zMlxuIFx0c2VsZWN0IEhBVkVfRVhJVF9USFJFQURcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbmluZGV4IGRlNzUxNWVhMWJlYWU4Li45ZGJlM2E1MjQ0NGUzYyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuKysrIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG5AQCAtMjEsNiArMjEsMTcgQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vdW53aW5kLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vY2ZpLmhcdTAwM2VcbiBcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX0pJVF9LQVNBTilcbit2b2lkIF9fYXNhbl9sb2FkMSh2b2lkICpwKTtcbit2b2lkIF9fYXNhbl9zdG9yZTEodm9pZCAqcCk7XG4rdm9pZCBfX2FzYW5fbG9hZDIodm9pZCAqcCk7XG4rdm9pZCBfX2FzYW5fc3RvcmUyKHZvaWQgKnApO1xuK3ZvaWQgX19hc2FuX2xvYWQ0KHZvaWQgKnApO1xuK3ZvaWQgX19hc2FuX3N0b3JlNCh2b2lkICpwKTtcbit2b2lkIF9fYXNhbl9sb2FkOCh2b2lkICpwKTtcbit2b2lkIF9fYXNhbl9zdG9yZTgodm9pZCAqcCk7XG4rI2VuZGlmXG4rXG4gc3RhdGljIGJvb2wgYWxsX2NhbGxlZV9yZWdzX3VzZWRbNF0gPSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZX07XG4gXG4gc3RhdGljIHU4ICplbWl0X2NvZGUodTggKnB0ciwgdTMyIGJ5dGVzLCB1bnNpZ25lZCBpbnQgbGVuKVxuQEAgLTExMTAsNiArMTEyMSw5MCBAQCBzdGF0aWMgdm9pZCBtYXliZV9lbWl0XzFtb2QodTggKipwcHJvZywgdTMyIHJlZywgYm9vbCBpczY0KVxuIFx0KnBwcm9nID0gcHJvZztcbiB9XG4gXG4rc3RhdGljIGludCBlbWl0X2thc2FuX2NoZWNrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHU4ICoqcHByb2csXG4rXHRcdFx0ICAgIHUzMiBhZGRyX3JlZywgc3RydWN0IGJwZl9pbnNuICppbnNuLCB1OCAqaXAsXG4rXHRcdFx0ICAgIGJvb2wgaXNfd3JpdGUsIGJvb2wgYWNjZXNzZXNfc3RhY2tfb25seSlcbit7XG4rI2lmZGVmIENPTkZJR19CUEZfSklUX0tBU0FOXG4rXHR1MzIgYnBmX3NpemUgPSBCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpO1xuK1x0czMyIG9mZiA9IGluc24tXHUwMDNlb2ZmO1xuK1x0dTggKnByb2cgPSAqcHByb2c7XG4rXHR2b2lkICprYXNhbl9mdW5jO1xuK1xuK1x0aWYgKCFlbnYpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKGFjY2Vzc2VzX3N0YWNrX29ubHkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0LyogRGVyaXZlIEtBU0FOIGNoZWNrIGZ1bmN0aW9uIGZyb20gYWNjZXNzIHR5cGUgYW5kIHNpemUgKi9cbitcdHN3aXRjaCAoYnBmX3NpemUpIHtcbitcdGNhc2UgQlBGX0I6XG4rXHRcdGthc2FuX2Z1bmMgPSBpc193cml0ZSA/IF9fYXNhbl9zdG9yZTEgOiBfX2FzYW5fbG9hZDE7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBCUEZfSDpcbitcdFx0a2FzYW5fZnVuYyA9IGlzX3dyaXRlID8gX19hc2FuX3N0b3JlMiA6IF9fYXNhbl9sb2FkMjtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEJQRl9XOlxuK1x0XHRrYXNhbl9mdW5jID0gaXNfd3JpdGUgPyBfX2FzYW5fc3RvcmU0IDogX19hc2FuX2xvYWQ0O1xuK1x0XHRicmVhaztcbitcdGNhc2UgQlBGX0RXOlxuK1x0XHRrYXNhbl9mdW5jID0gaXNfd3JpdGUgPyBfX2FzYW5fc3RvcmU4IDogX19hc2FuX2xvYWQ4O1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0LyogU2F2ZSByYXggKi9cbitcdEVNSVQxKDB4NTApO1xuK1x0LyogU2F2ZSByY3ggKi9cbitcdEVNSVQxKDB4NTEpO1xuK1x0LyogU2F2ZSByZHggKi9cbitcdEVNSVQxKDB4NTIpO1xuK1x0LyogU2F2ZSByc2kgKi9cbitcdEVNSVQxKDB4NTYpO1xuK1x0LyogU2F2ZSByZGkgKi9cbitcdEVNSVQxKDB4NTcpO1xuK1x0LyogU2F2ZSByOCAqL1xuK1x0RU1JVDIoMHg0MSwgMHg1MCk7XG4rXHQvKiBTYXZlIHI5ICovXG4rXHRFTUlUMigweDQxLCAweDUxKTtcbitcbitcdC8qIG1vdiByZGksIGFkZHJfcmVnICovXG4rXHRFTUlUX21vdihCUEZfUkVHXzEsIGFkZHJfcmVnKTtcbitcbitcdC8qIGFkZCByZGksIG9mZiAoaWYgb2Zmc2V0IGlzIG5vbi16ZXJvKSAqL1xuK1x0aWYgKG9mZikge1xuK1x0XHRpZiAoaXNfaW1tOChvZmYpKSB7XG4rXHRcdFx0LyogYWRkIHJkaSwgaW1tOCAqL1xuK1x0XHRcdEVNSVQ0KDB4NDgsIDB4ODMsIDB4QzcsICh1OClvZmYpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdC8qIGFkZCByZGksIGltbTMyICovXG4rXHRcdFx0RU1JVDNfb2ZmMzIoMHg0OCwgMHg4MSwgMHhDNywgb2ZmKTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0LyogQWRqdXN0IGlwIHRvIGFjY291bnQgZm9yIHRoZSBpbnN0cnVtZW50YXRpb24gZ2VuZXJhdGVkIHNvIGZhciAqL1xuK1x0aXAgKz0gKHByb2cgLSAqcHByb2cpO1xuK1x0LyogV2UgZW1pdCBhIGNhbGwsIHNvIHVwZGF0ZSBjYWxsIGRlcHRoIGNvdW50aW5nICovXG4rXHRpcCArPSB4ODZfY2FsbF9kZXB0aF9lbWl0X2FjY291bnRpbmcoXHUwMDI2cHJvZywga2FzYW5fZnVuYywgaXApO1xuK1x0LyogY2FsbCBrYXNhbl9mdW5jICovXG4rXHRpZiAoZW1pdF9jYWxsKFx1MDAyNnByb2csIGthc2FuX2Z1bmMsIGlwKSlcbitcdFx0cmV0dXJuIC1FUkFOR0U7XG4rXG4rXHRFTUlUMigweDQxLCAweDU5KTtcbitcdEVNSVQyKDB4NDEsIDB4NTgpO1xuK1x0RU1JVDEoMHg1Rik7XG4rXHRFTUlUMSgweDVFKTtcbitcdEVNSVQxKDB4NUEpO1xuK1x0RU1JVDEoMHg1OSk7XG4rXHRFTUlUMSgweDU4KTtcbitcbitcdCpwcHJvZyA9IHByb2c7XG4rI2VuZGlmIC8qIENPTkZJR19CUEZfSklUX0tBU0FOICovXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLyogTERYOiBkc3RfcmVnID0gKih1OCopKHNyY19yZWcgKyBvZmYpICovXG4gc3RhdGljIHZvaWQgZW1pdF9sZHgodTggKipwcHJvZywgdTMyIHNpemUsIHUzMiBkc3RfcmVnLCB1MzIgc3JjX3JlZywgaW50IG9mZilcbiB7XG5AQCAtMTMxNSw2ICsxNDEwLDY0IEBAIHN0YXRpYyB2b2lkIGVtaXRfc3RfaW5kZXgodTggKipwcHJvZywgdTMyIHNpemUsIHUzMiBkc3RfcmVnLCB1MzIgaW5kZXhfcmVnLCBpbnRcbiBcdCpwcHJvZyA9IHByb2c7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGVtaXRfc3QodTggKipwcHJvZywgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpbnQgZHN0X3JlZyxcbitcdFx0ICAgIHMzMiBvdXRnb2luZ19hcmdfYmFzZSwgdTE2IG91dGdvaW5nX3JzcClcbit7XG4rXHRzMzIgaW1tMzIgPSBpbnNuLVx1MDAzZWltbTtcbitcdHU4ICpwcm9nID0gKnBwcm9nO1xuK1x0czMyIGluc25fb2ZmO1xuK1xuK1x0c3dpdGNoIChCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpKSB7XG4rXHRjYXNlIEJQRl9COlxuK1x0XHRpZiAoaXNfZXJlZyhkc3RfcmVnKSlcbitcdFx0XHRFTUlUMigweDQxLCAweEM2KTtcbitcdFx0ZWxzZVxuK1x0XHRcdEVNSVQxKDB4QzYpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQlBGX0g6XG4rXHRcdGlmIChpc19lcmVnKGRzdF9yZWcpKVxuK1x0XHRcdEVNSVQzKDB4NjYsIDB4NDEsIDB4QzcpO1xuK1x0XHRlbHNlXG4rXHRcdFx0RU1JVDIoMHg2NiwgMHhDNyk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBCUEZfVzpcbitcdFx0aWYgKGlzX2VyZWcoZHN0X3JlZykpXG4rXHRcdFx0RU1JVDIoMHg0MSwgMHhDNyk7XG4rXHRcdGVsc2VcbitcdFx0XHRFTUlUMSgweEM3KTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEJQRl9EVzpcbitcdFx0aWYgKGRzdF9yZWcgPT0gQlBGX1JFR19QQVJBTVMgXHUwMDI2XHUwMDI2IGluc24tXHUwMDNlb2ZmID09IC04KSB7XG4rXHRcdFx0LyogQXJnIDY6IHN0b3JlIGltbWVkaWF0ZSBpbiByOSByZWdpc3RlciAqL1xuK1x0XHRcdGVtaXRfbW92X2ltbTY0KFx1MDAyNnByb2csIFg4Nl9SRUdfUjksIGltbTMyIFx1MDAzZVx1MDAzZSAzMSxcbitcdFx0XHRcdCAgICAgICAodTMyKWltbTMyKTtcbitcdFx0XHQqcHByb2cgPSBwcm9nO1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuK1x0XHRFTUlUMihhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKSwgMHhDNyk7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0aW5zbl9vZmYgPSBpbnNuLVx1MDAzZW9mZjtcbitcdGlmIChkc3RfcmVnID09IEJQRl9SRUdfUEFSQU1TKSB7XG4rXHRcdC8qXG4rXHRcdCAqIEFyZ3MgNys6IHJldmVyc2UgQlBGIG5lZ2F0aXZlIG9mZnNldHMgdG9cbitcdFx0ICogeDg2IHBvc2l0aXZlIHJzcCBvZmZzZXRzLlxuK1x0XHQgKiBCUEYgb2ZmPS0xNiDihpIgW3JzcCswXSwgb2ZmPS0yNCDihpIgW3JzcCs4XSwgLi4uXG4rXHRcdCAqL1xuK1x0XHRpbnNuX29mZiA9IG91dGdvaW5nX2FyZ19iYXNlIC0gb3V0Z29pbmdfcnNwIC1cbitcdFx0XHRpbnNuX29mZiAtIDE2O1xuK1x0XHRkc3RfcmVnID0gQlBGX1JFR19GUDtcbitcdH1cbitcdGlmIChpc19pbW04KGluc25fb2ZmKSlcbitcdFx0RU1JVDIoYWRkXzFyZWcoMHg0MCwgZHN0X3JlZyksIGluc25fb2ZmKTtcbitcdGVsc2VcbitcdFx0RU1JVDFfb2ZmMzIoYWRkXzFyZWcoMHg4MCwgZHN0X3JlZyksIGluc25fb2ZmKTtcbitcbitcdEVNSVQoaW1tMzIsIGJwZl9zaXplX3RvX3g4Nl9ieXRlcyhCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpKSk7XG4rXHQqcHByb2cgPSBwcm9nO1xuK31cbitcbiBzdGF0aWMgdm9pZCBlbWl0X3N0X3IxMih1OCAqKnBwcm9nLCB1MzIgc2l6ZSwgdTMyIGRzdF9yZWcsIGludCBvZmYsIGludCBpbW0pXG4ge1xuIFx0ZW1pdF9zdF9pbmRleChwcHJvZywgc2l6ZSwgZHN0X3JlZywgWDg2X1JFR19SMTIsIG9mZiwgaW1tKTtcbkBAIC0xNDIzLDE3ICsxNTc2LDMxIEBAIHN0YXRpYyBpbnQgZW1pdF9hdG9taWNfcm13X2luZGV4KHU4ICoqcHByb2csIHUzMiBhdG9taWNfb3AsIHUzMiBzaXplLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgZW1pdF9hdG9taWNfbGRfc3QodTggKipwcHJvZywgdTMyIGF0b21pY19vcCwgdTMyIGRzdF9yZWcsXG4tXHRcdFx0ICAgICB1MzIgc3JjX3JlZywgczE2IG9mZiwgdTggYnBmX3NpemUpXG4rc3RhdGljIGludCBlbWl0X2F0b21pY19sZF9zdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1OCAqKnBwcm9nLFxuK1x0XHRcdCAgICAgc3RydWN0IGJwZl9pbnNuICppbnNuLCB1OCAqaXAsIHUzMiBkc3RfcmVnLFxuK1x0XHRcdCAgICAgdTMyIHNyY19yZWcsIGJvb2wgYWNjZXNzZXNfc3RhY2tfb25seSlcbiB7XG4rXHR1MzIgYXRvbWljX29wID0gaW5zbi1cdTAwM2VpbW07XG4rXHRpbnQgZXJyO1xuK1xuIFx0c3dpdGNoIChhdG9taWNfb3ApIHtcbiBcdGNhc2UgQlBGX0xPQURfQUNROlxuK1x0XHRlcnIgPSBlbWl0X2thc2FuX2NoZWNrKGVudiwgcHByb2csIHNyY19yZWcsIGluc24sIGlwLCBmYWxzZSxcbitcdFx0XHRcdCAgICAgICBhY2Nlc3Nlc19zdGFja19vbmx5KTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHQvKiBkc3RfcmVnID0gc21wX2xvYWRfYWNxdWlyZShzcmNfcmVnICsgb2ZmMTYpICovXG4tXHRcdGVtaXRfbGR4KHBwcm9nLCBicGZfc2l6ZSwgZHN0X3JlZywgc3JjX3JlZywgb2ZmKTtcbitcdFx0ZW1pdF9sZHgocHByb2csIEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSksIGRzdF9yZWcsIHNyY19yZWcsXG4rXHRcdFx0IGluc24tXHUwMDNlb2ZmKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEJQRl9TVE9SRV9SRUw6XG4rXHRcdGVyciA9IGVtaXRfa2FzYW5fY2hlY2soZW52LCBwcHJvZywgZHN0X3JlZywgaW5zbiwgaXAsIHRydWUsXG4rXHRcdFx0XHQgICAgICAgYWNjZXNzZXNfc3RhY2tfb25seSk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0Lyogc21wX3N0b3JlX3JlbGVhc2UoZHN0X3JlZyArIG9mZjE2LCBzcmNfcmVnKSAqL1xuLVx0XHRlbWl0X3N0eChwcHJvZywgYnBmX3NpemUsIGRzdF9yZWcsIHNyY19yZWcsIG9mZik7XG4rXHRcdGVtaXRfc3R4KHBwcm9nLCBCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpLCBkc3RfcmVnLCBzcmNfcmVnLFxuK1x0XHRcdCBpbnNuLVx1MDAzZW9mZik7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cHJfZXJyKFwiYnBmX2ppdDogdW5rbm93biBhdG9taWMgbG9hZC9zdG9yZSBvcGNvZGUgJTAyeFxcblwiLFxuQEAgLTE4MTEsMTAgKzE5NzgsMTIgQEAgc3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICpcbiBcdFx0Y29uc3QgczMyIGltbTMyID0gaW5zbi1cdTAwM2VpbW07XG4gXHRcdHUzMiBkc3RfcmVnID0gaW5zbi1cdTAwM2Vkc3RfcmVnO1xuIFx0XHR1MzIgc3JjX3JlZyA9IGluc24tXHUwMDNlc3JjX3JlZztcbitcdFx0Ym9vbCBhY2Nlc3Nlc19zdGFja19vbmx5O1xuIFx0XHR1OCBiMiA9IDAsIGIzID0gMDtcbiBcdFx0dTggKnN0YXJ0X29mX2xkeDtcbiBcdFx0czY0IGptcF9vZmZzZXQ7XG4gXHRcdHMzMiBpbnNuX29mZjtcbitcdFx0aW50IGluc25faWR4O1xuIFx0XHR1OCBqbXBfY29uZDtcbiBcdFx0dTggKmZ1bmM7XG4gXHRcdGludCBub3BzO1xuQEAgLTE4MzEsNiArMjAwMCwxMCBAQCBzdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKlxuIFx0XHRcdEVNSVRfRU5EQlIoKTtcbiBcbiBcdFx0aXAgPSBpbWFnZSArIGFkZHJzW2kgLSAxXSArIChwcm9nIC0gdGVtcCk7XG4rXHRcdGluc25faWR4ID0gaSAtIDEgKyBicGZfcHJvZy1cdTAwM2VhdXgtXHUwMDNlc3VicHJvZ19zdGFydDtcbitcdFx0YWNjZXNzZXNfc3RhY2tfb25seSA9XG4rXHRcdFx0ZW52ID8gIWVudi1cdTAwM2VpbnNuX2F1eF9kYXRhW2luc25faWR4XS5ub25fc3RhY2tfYWNjZXNzIDpcbitcdFx0XHQgICAgICBmYWxzZTtcbiBcbiBcdFx0c3dpdGNoIChpbnNuLVx1MDAzZWNvZGUpIHtcbiBcdFx0XHQvKiBBTFUgKi9cbkBAIC0yMjA3LDQ5ICsyMzgwLDE3IEBAIHN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqXG4gXHRcdFx0RU1JVF9MRkVOQ0UoKTtcbiBcdFx0XHRicmVhaztcbiBcbi1cdFx0XHQvKiBTVDogKih1OCopKGRzdF9yZWcgKyBvZmYpID0gaW1tICovXG4gXHRcdGNhc2UgQlBGX1NUIHwgQlBGX01FTSB8IEJQRl9COlxuLVx0XHRcdGlmIChpc19lcmVnKGRzdF9yZWcpKVxuLVx0XHRcdFx0RU1JVDIoMHg0MSwgMHhDNik7XG4tXHRcdFx0ZWxzZVxuLVx0XHRcdFx0RU1JVDEoMHhDNik7XG4tXHRcdFx0Z290byBzdDtcbiBcdFx0Y2FzZSBCUEZfU1QgfCBCUEZfTUVNIHwgQlBGX0g6XG4tXHRcdFx0aWYgKGlzX2VyZWcoZHN0X3JlZykpXG4tXHRcdFx0XHRFTUlUMygweDY2LCAweDQxLCAweEM3KTtcbi1cdFx0XHRlbHNlXG4tXHRcdFx0XHRFTUlUMigweDY2LCAweEM3KTtcbi1cdFx0XHRnb3RvIHN0O1xuIFx0XHRjYXNlIEJQRl9TVCB8IEJQRl9NRU0gfCBCUEZfVzpcbi1cdFx0XHRpZiAoaXNfZXJlZyhkc3RfcmVnKSlcbi1cdFx0XHRcdEVNSVQyKDB4NDEsIDB4QzcpO1xuLVx0XHRcdGVsc2Vcbi1cdFx0XHRcdEVNSVQxKDB4QzcpO1xuLVx0XHRcdGdvdG8gc3Q7XG4gXHRcdGNhc2UgQlBGX1NUIHwgQlBGX01FTSB8IEJQRl9EVzpcbi1cdFx0XHRpZiAoZHN0X3JlZyA9PSBCUEZfUkVHX1BBUkFNUyBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VvZmYgPT0gLTgpIHtcbi1cdFx0XHRcdC8qIEFyZyA2OiBzdG9yZSBpbW1lZGlhdGUgaW4gcjkgcmVnaXN0ZXIgKi9cbi1cdFx0XHRcdGVtaXRfbW92X2ltbTY0KFx1MDAyNnByb2csIFg4Nl9SRUdfUjksIGltbTMyIFx1MDAzZVx1MDAzZSAzMSwgKHUzMilpbW0zMik7XG4tXHRcdFx0XHRicmVhaztcbi1cdFx0XHR9XG4tXHRcdFx0RU1JVDIoYWRkXzFtb2QoMHg0OCwgZHN0X3JlZyksIDB4QzcpO1xuLVxuLXN0Olx0XHRcdGluc25fb2ZmID0gaW5zbi1cdTAwM2VvZmY7XG4tXHRcdFx0aWYgKGRzdF9yZWcgPT0gQlBGX1JFR19QQVJBTVMpIHtcbi1cdFx0XHRcdC8qXG4tXHRcdFx0XHQgKiBBcmdzIDcrOiByZXZlcnNlIEJQRiBuZWdhdGl2ZSBvZmZzZXRzIHRvXG4tXHRcdFx0XHQgKiB4ODYgcG9zaXRpdmUgcnNwIG9mZnNldHMuXG4tXHRcdFx0XHQgKiBCUEYgb2ZmPS0xNiDihpIgW3JzcCswXSwgb2ZmPS0yNCDihpIgW3JzcCs4XSwgLi4uXG4tXHRcdFx0XHQgKi9cbi1cdFx0XHRcdGluc25fb2ZmID0gb3V0Z29pbmdfYXJnX2Jhc2UgLSBvdXRnb2luZ19yc3AgLSBpbnNuX29mZiAtIDE2O1xuLVx0XHRcdFx0ZHN0X3JlZyA9IEJQRl9SRUdfRlA7XG4tXHRcdFx0fVxuLVx0XHRcdGlmIChpc19pbW04KGluc25fb2ZmKSlcbi1cdFx0XHRcdEVNSVQyKGFkZF8xcmVnKDB4NDAsIGRzdF9yZWcpLCBpbnNuX29mZik7XG4tXHRcdFx0ZWxzZVxuLVx0XHRcdFx0RU1JVDFfb2ZmMzIoYWRkXzFyZWcoMHg4MCwgZHN0X3JlZyksIGluc25fb2ZmKTtcbitcdFx0XHRlcnIgPSBlbWl0X2thc2FuX2NoZWNrKGVudiwgXHUwMDI2cHJvZywgZHN0X3JlZywgaW5zbiwgaXAsXG4rXHRcdFx0XHRcdCAgICAgICB0cnVlLCBhY2Nlc3Nlc19zdGFja19vbmx5KTtcbitcdFx0XHRpZiAoZXJyKVxuK1x0XHRcdFx0cmV0dXJuIGVycjtcbiBcbi1cdFx0XHRFTUlUKGltbTMyLCBicGZfc2l6ZV90b194ODZfYnl0ZXMoQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSkpO1xuK1x0XHRcdGVtaXRfc3QoXHUwMDI2cHJvZywgaW5zbiwgZHN0X3JlZywgb3V0Z29pbmdfYXJnX2Jhc2UsXG4rXHRcdFx0XHRvdXRnb2luZ19yc3ApO1xuIFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRcdC8qIFNUWDogKih1OCopKGRzdF9yZWcgKyBvZmYpID0gc3JjX3JlZyAqL1xuQEAgLTIyNjcsNiArMjQwOCwxMCBAQCBzdDpcdFx0XHRpbnNuX29mZiA9IGluc24tXHUwMDNlb2ZmO1xuIFx0XHRcdFx0aW5zbl9vZmYgPSBvdXRnb2luZ19hcmdfYmFzZSAtIG91dGdvaW5nX3JzcCAtIGluc25fb2ZmIC0gMTY7XG4gXHRcdFx0XHRkc3RfcmVnID0gQlBGX1JFR19GUDtcbiBcdFx0XHR9XG4rXHRcdFx0ZXJyID0gZW1pdF9rYXNhbl9jaGVjayhlbnYsIFx1MDAyNnByb2csIGRzdF9yZWcsIGluc24sIGlwLFxuK1x0XHRcdFx0XHQgICAgICAgdHJ1ZSwgYWNjZXNzZXNfc3RhY2tfb25seSk7XG4rXHRcdFx0aWYgKGVycilcbitcdFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdFx0ZW1pdF9zdHgoXHUwMDI2cHJvZywgQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSwgZHN0X3JlZywgc3JjX3JlZywgaW5zbl9vZmYpO1xuIFx0XHRcdGJyZWFrO1xuIFxuQEAgLTI0MjgsNiArMjU3MywxMiBAQCBzdDpcdFx0XHRpbnNuX29mZiA9IGluc24tXHUwMDNlb2ZmO1xuIFx0XHRcdFx0LyogcG9wdWxhdGUgam1wX29mZnNldCBmb3IgSkFFIGFib3ZlIHRvIGp1bXAgdG8gc3RhcnRfb2ZfbGR4ICovXG4gXHRcdFx0XHRzdGFydF9vZl9sZHggPSBwcm9nO1xuIFx0XHRcdFx0ZW5kX29mX2ptcFstMV0gPSBzdGFydF9vZl9sZHggLSBlbmRfb2Zfam1wO1xuK1x0XHRcdH0gZWxzZSB7XG4rXHRcdFx0XHRlcnIgPSBlbWl0X2thc2FuX2NoZWNrKGVudiwgXHUwMDI2cHJvZywgc3JjX3JlZyxcbitcdFx0XHRcdFx0XHQgICAgICAgaW5zbiwgaXAsIGZhbHNlLFxuK1x0XHRcdFx0XHRcdCAgICAgICBhY2Nlc3Nlc19zdGFja19vbmx5KTtcbitcdFx0XHRcdGlmIChlcnIpXG4rXHRcdFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdFx0fVxuIFx0XHRcdGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9NRU1TWCB8fFxuIFx0XHRcdCAgICBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9NRU1TWClcbkBAIC0yNDg5LDE1ICsyNjQwLDE2IEBAIHN0Olx0XHRcdGluc25fb2ZmID0gaW5zbi1cdTAwM2VvZmY7XG4gXHRcdFx0fVxuIFx0XHRcdGZhbGx0aHJvdWdoO1xuIFx0XHRjYXNlIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX1c6XG4tXHRcdGNhc2UgQlBGX1NUWCB8IEJQRl9BVE9NSUMgfCBCUEZfRFc6XG4tXHRcdFx0aWYgKGluc24tXHUwMDNlaW1tID09IChCUEZfQU5EIHwgQlBGX0ZFVENIKSB8fFxuLVx0XHRcdCAgICBpbnNuLVx1MDAzZWltbSA9PSAoQlBGX09SIHwgQlBGX0ZFVENIKSB8fFxuLVx0XHRcdCAgICBpbnNuLVx1MDAzZWltbSA9PSAoQlBGX1hPUiB8IEJQRl9GRVRDSCkpIHtcbi1cdFx0XHRcdGJvb2wgaXM2NCA9IEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0RXO1xuLVx0XHRcdFx0dTMyIHJlYWxfc3JjX3JlZyA9IHNyY19yZWc7XG4tXHRcdFx0XHR1MzIgcmVhbF9kc3RfcmVnID0gZHN0X3JlZztcbi1cdFx0XHRcdHU4ICpicmFuY2hfdGFyZ2V0O1xuLVxuK1x0XHRjYXNlIEJQRl9TVFggfCBCUEZfQVRPTUlDIHwgQlBGX0RXOiB7XG4rXHRcdFx0Ym9vbCBpczY0ID0gQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfRFc7XG4rXHRcdFx0dTMyIHJlYWxfc3JjX3JlZyA9IHNyY19yZWc7XG4rXHRcdFx0dTMyIHJlYWxfZHN0X3JlZyA9IGRzdF9yZWc7XG4rXHRcdFx0dTggKmJyYW5jaF90YXJnZXQ7XG4rXHRcdFx0Ym9vbCBpc19hdG9taWNfZmV0Y2ggPVxuK1x0XHRcdFx0KGluc24tXHUwMDNlaW1tID09IChCUEZfQU5EIHwgQlBGX0ZFVENIKSB8fFxuK1x0XHRcdFx0IGluc24tXHUwMDNlaW1tID09IChCUEZfT1IgfCBCUEZfRkVUQ0gpIHx8XG4rXHRcdFx0XHQgaW5zbi1cdTAwM2VpbW0gPT0gKEJQRl9YT1IgfCBCUEZfRkVUQ0gpKTtcbitcdFx0XHRpZiAoaXNfYXRvbWljX2ZldGNoKSB7XG4gXHRcdFx0XHQvKlxuIFx0XHRcdFx0ICogQ2FuJ3QgYmUgaW1wbGVtZW50ZWQgd2l0aCBhIHNpbmdsZSB4ODYgaW5zbi5cbiBcdFx0XHRcdCAqIE5lZWQgdG8gZG8gYSBDTVBYQ0hHIGxvb3AuXG5AQCAtMjUxMCw3ICsyNjYyLDE3IEBAIHN0Olx0XHRcdGluc25fb2ZmID0gaW5zbi1cdTAwM2VvZmY7XG4gXHRcdFx0XHRpZiAoZHN0X3JlZyA9PSBCUEZfUkVHXzApXG4gXHRcdFx0XHRcdHJlYWxfZHN0X3JlZyA9IEJQRl9SRUdfQVg7XG4gXG4rXHRcdFx0XHRpcCArPSAzO1xuK1x0XHRcdH1cbitcdFx0XHRpZiAoIWJwZl9hdG9taWNfaXNfbG9hZF9zdG9yZShpbnNuKSkge1xuK1x0XHRcdFx0ZXJyID0gZW1pdF9rYXNhbl9jaGVjayhlbnYsIFx1MDAyNnByb2csIHJlYWxfZHN0X3JlZyxcbitcdFx0XHRcdFx0XHQgICAgICAgaW5zbiwgaXAsIHRydWUsXG4rXHRcdFx0XHRcdFx0ICAgICAgIGFjY2Vzc2VzX3N0YWNrX29ubHkpO1xuK1x0XHRcdFx0aWYgKGVycilcbitcdFx0XHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0XHRcdGJyYW5jaF90YXJnZXQgPSBwcm9nO1xuK1x0XHRcdH1cbitcdFx0XHRpZiAoaXNfYXRvbWljX2ZldGNoKSB7XG4gXHRcdFx0XHQvKiBMb2FkIG9sZCB2YWx1ZSAqL1xuIFx0XHRcdFx0ZW1pdF9sZHgoXHUwMDI2cHJvZywgQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSxcbiBcdFx0XHRcdFx0IEJQRl9SRUdfMCwgcmVhbF9kc3RfcmVnLCBpbnNuLVx1MDAzZW9mZik7XG5AQCAtMjU0MiwxNSArMjcwNCwxNiBAQCBzdDpcdFx0XHRpbnNuX29mZiA9IGluc24tXHUwMDNlb2ZmO1xuIFx0XHRcdH1cbiBcbiBcdFx0XHRpZiAoYnBmX2F0b21pY19pc19sb2FkX3N0b3JlKGluc24pKVxuLVx0XHRcdFx0ZXJyID0gZW1pdF9hdG9taWNfbGRfc3QoXHUwMDI2cHJvZywgaW5zbi1cdTAwM2VpbW0sIGRzdF9yZWcsIHNyY19yZWcsXG4tXHRcdFx0XHRcdFx0XHRpbnNuLVx1MDAzZW9mZiwgQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSk7XG4rXHRcdFx0XHRlcnIgPSBlbWl0X2F0b21pY19sZF9zdChlbnYsIFx1MDAyNnByb2csIGluc24sIGlwLFxuK1x0XHRcdFx0XHRcdFx0ZHN0X3JlZywgc3JjX3JlZyxcbitcdFx0XHRcdFx0XHRcdGFjY2Vzc2VzX3N0YWNrX29ubHkpO1xuIFx0XHRcdGVsc2VcbiBcdFx0XHRcdGVyciA9IGVtaXRfYXRvbWljX3JtdyhcdTAwMjZwcm9nLCBpbnNuLVx1MDAzZWltbSwgZHN0X3JlZywgc3JjX3JlZyxcbiBcdFx0XHRcdFx0XHQgICAgICBpbnNuLVx1MDAzZW9mZiwgQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSk7XG4gXHRcdFx0aWYgKGVycilcbiBcdFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdFx0YnJlYWs7XG4tXG4rXHRcdH1cbiBcdFx0Y2FzZSBCUEZfU1RYIHwgQlBGX1BST0JFX0FUT01JQyB8IEJQRl9COlxuIFx0XHRjYXNlIEJQRl9TVFggfCBCUEZfUFJPQkVfQVRPTUlDIHwgQlBGX0g6XG4gXHRcdFx0aWYgKCFicGZfYXRvbWljX2lzX2xvYWRfc3RvcmUoaW5zbikpIHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuaW5kZXggMzE3ZTk5YjlhY2MwYTQuLmFiZTg0NTljYzcwMTIyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuKysrIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuQEAgLTcyMyw2ICs3MjMsOCBAQCBzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEge1xuIFx0dTE2IGNvbnN0X3JlZ19tYXBfbWFzaztcbiBcdHUxNiBjb25zdF9yZWdfc3VicHJvZ19tYXNrO1xuIFx0dTMyIGNvbnN0X3JlZ192YWxzWzEwXTtcbitcdC8qIGluc3RydWN0aW9uIGNhbiBhY2Nlc3Mgbm9uLXN0YWNrIG1lbW9yeSAqL1xuK1x0Ym9vbCBub25fc3RhY2tfYWNjZXNzO1xuIH07XG4gXG4gI2RlZmluZSBNQVhfVVNFRF9NQVBTIDY0IC8qIG1heCBudW1iZXIgb2YgbWFwcyBhY2Nlc3NlZCBieSBvbmUgZUJQRiBwcm9ncmFtICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbmluZGV4IDE0YWNiMjQ1NTc0NmZjLi4xZWJjZDI0N2VmNGUzZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZmlsdGVyLmhcbkBAIC0xMjEwLDEzICsxMjEwLDE3IEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fc2luZ2xlKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIG9mZixcbiBcbiAjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG4gc3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsXG4tXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGF0Y2gsIHUzMiBsZW4pO1xuK1x0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCB1MzIgbGVuLFxuK1x0XHRcdFx0ICAgICBzMzIgaW5zbl9vZmZfaW5fcGF0Y2gpO1xuIHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqYnBmX2R1cF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpO1xuIHZvaWQgYnBmX3Jlc3RvcmVfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKm9yaWdfaW5zbl9hdXgpO1xuICNlbHNlXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZixcbi1cdFx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCB1MzIgbGVuKVxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4rXHRcdFx0XHRcdFx0ICAgdTMyIG9mZixcbitcdFx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLFxuK1x0XHRcdFx0XHRcdCAgIHUzMiBsZW4sXG4rXHRcdFx0XHRcdFx0ICAgczMyIGluc25fb2ZmX2luX3BhdGNoKVxuIHtcbiBcdHJldHVybiBFUlJfUFRSKC1FTk9UU1VQUCk7XG4gfVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvS2NvbmZpZyBiL2tlcm5lbC9icGYvS2NvbmZpZ1xuaW5kZXggZWIzZGUzNTczNGYwOTIuLmUxZjM4NTBkMmY1YTA3IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9LY29uZmlnXG4rKysgYi9rZXJuZWwvYnBmL0tjb25maWdcbkBAIC0xNyw2ICsxNywxMCBAQCBjb25maWcgSEFWRV9DQlBGX0pJVFxuIGNvbmZpZyBIQVZFX0VCUEZfSklUXG4gXHRib29sXG4gXG4rIyBLQVNBTiBzdXBwb3J0IGZvciBKSVQgY29tcGlsZXJcbitjb25maWcgSEFWRV9FQlBGX0pJVF9LQVNBTlxuK1x0Ym9vbFxuK1xuICMgVXNlZCBieSBhcmNocyB0byB0ZWxsIHRoYXQgdGhleSB3YW50IHRoZSBCUEYgSklUIGNvbXBpbGVyIGVuYWJsZWQgYnlcbiAjIGRlZmF1bHQgZm9yIGtlcm5lbHMgdGhhdCB3ZXJlIGNvbXBpbGVkIHdpdGggQlBGIEpJVCBzdXBwb3J0LlxuIGNvbmZpZyBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUXG5AQCAtMTAxLDQgKzEwNSwxNyBAQCBjb25maWcgQlBGX0xTTVxuIFxuIFx0ICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBOLlxuIFxuK2NvbmZpZyBCUEZfSklUX0tBU0FOXG4rXHRib29sXG4rXHRkZXBlbmRzIG9uIEhBVkVfRUJQRl9KSVRfS0FTQU5cbitcdGRlcGVuZHMgb24gS0FTQU5fR0VORVJJQ1xuK1x0ZGVwZW5kcyBvbiBLQVNBTl9WTUFMTE9DXG4rXHRkZXBlbmRzIG9uIEJQRl9KSVRcbitcdGRlZmF1bHQgeSBpZiBLQVNBTlxuK1x0aGVscFxuK1x0ICBNYWtlcyBKSVQgY29tcGlsZXIgaW5zZXJ0IGdlbmVyaWMgb3V0bGluZSBLQVNBTiBjaGVja3MgaW4gQlBGXG4rXHQgIHByb2dyYW1zIHdoZW4gdGhleSBhcmUgaW5zZXJ0ZWQgaW4gdGhlIGtlcm5lbC4gVGhpcyBmZWF0dXJlIGlzXG4rXHQgIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCBpZiB0aGUgbmVlZGVkIHNldCBvZiBLQVNBTiBhbmQgQlBGXG4rXHQgIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpcyBlbmFibGVkLlxuK1xuIGVuZG1lbnUgIyBcIkJQRiBzdWJzeXN0ZW1cIlxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvY29yZS5jIGIva2VybmVsL2JwZi9jb3JlLmNcbmluZGV4IDQ3ZmUwNDdhZDMwYjg4Li5jZmYwMDM1ZjQwMWE5YyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvY29yZS5jXG4rKysgYi9rZXJuZWwvYnBmL2NvcmUuY1xuQEAgLTE1OTksNyArMTU5OSw3IEBAIHN0cnVjdCBicGZfcHJvZyAqYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChlbnYpXG4tXHRcdFx0dG1wID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGksIGluc25fYnVmZiwgcmV3cml0dGVuKTtcbitcdFx0XHR0bXAgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSwgaW5zbl9idWZmLCByZXdyaXR0ZW4sIHJld3JpdHRlbiAtIDEpO1xuIFx0XHRlbHNlXG4gXHRcdFx0dG1wID0gYnBmX3BhdGNoX2luc25fc2luZ2xlKGNsb25lLCBpLCBpbnNuX2J1ZmYsIHJld3JpdHRlbik7XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9maXh1cHMuYyBiL2tlcm5lbC9icGYvZml4dXBzLmNcbmluZGV4IGQzYmU5NzI3MTRiMjJjLi4wZWRhNTUxMmJhZWNlYiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvZml4dXBzLmNcbisrKyBiL2tlcm5lbC9icGYvZml4dXBzLmNcbkBAIC0xNTIsMTIgKzE1MiwyNSBAQCBzdGF0aWMgaW50IGdldF9jYWxsZWVfc3RhY2tfZGVwdGgoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiB9XG4gI2VuZGlmXG4gXG4rc3RhdGljIGJvb2wgaXNfbWVtX2luc24oc3RydWN0IGJwZl9pbnNuICppbnNuKVxuK3tcbitcdGlmIChCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfU1QgXHUwMDI2XHUwMDI2XG4rXHQgICAgQlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSkgIT0gQlBGX1NUWCBcdTAwMjZcdTAwMjZcbitcdCAgICBCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKSAhPSBCUEZfTERYKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZXR1cm4gKEJQRl9NT0RFKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX01FTSB8fFxuK1x0XHRCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9NRU1TWCB8fFxuK1x0XHRCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BVE9NSUMpO1xuK31cbitcbiAvKiBzaW5nbGUgZW52LVx1MDAzZXByb2ctXHUwMDNlaW5zbmlbb2ZmXSBpbnN0cnVjdGlvbiB3YXMgcmVwbGFjZWQgd2l0aCB0aGUgcmFuZ2VcbiAgKiBpbnNuaVtvZmYsIG9mZiArIGNudCkuICBBZGp1c3QgY29ycmVzcG9uZGluZyBpbnNuX2F1eF9kYXRhIGJ5IGNvcHlpbmdcbiAgKiBbMCwgb2ZmKSBhbmQgW29mZiwgZW5kKSB0byBuZXcgbG9jYXRpb25zLCBzbyB0aGUgcGF0Y2hlZCByYW5nZSBzdGF5cyB6ZXJvXG4gICovXG4gc3RhdGljIHZvaWQgYWRqdXN0X2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi1cdFx0XHRcdCBzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nLCB1MzIgb2ZmLCB1MzIgY250KVxuK1x0XHRcdFx0IHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2csIHUzMiBvZmYsIHUzMiBjbnQsXG4rXHRcdFx0XHQgczMyIGluc25fb2ZmX2luX3BhdGNoKVxuIHtcbiBcdHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqZGF0YSA9IGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhO1xuIFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gbmV3X3Byb2ctXHUwMDNlaW5zbnNpO1xuQEAgLTE3MSw4ICsxODQsMTQgQEAgc3RhdGljIHZvaWQgYWRqdXN0X2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdCAqL1xuIFx0ZGF0YVtvZmZdLnpleHRfZHN0ID0gaW5zbl9oYXNfZGVmMzIoaW5zbiArIG9mZiArIGNudCAtIDEpO1xuIFxuLVx0aWYgKGNudCA9PSAxKVxuK1x0aWYgKGNudCA9PSAxKSB7XG4rXHRcdC8qIEEgbm9uLW1lbW9yeSBhY2Nlc3NpbmcgaW5zbiBjb3VsZCBoYXZlIGJlZW4gcmVwbGFjZWQgYnkgYVxuK1x0XHQgKiBtZW1vcnkgYWNjZXNzaW5nIGluc24sIHN5c3RlbWF0aWNhbGx5IG1hcmsgaXQgZm9yIG5vbi1zdGFja1xuK1x0XHQgKiBhY2Nlc3NcbitcdFx0ICovXG4rXHRcdGRhdGFbb2ZmXS5ub25fc3RhY2tfYWNjZXNzID0gaXNfbWVtX2luc24oaW5zbiArIG9mZik7XG4gXHRcdHJldHVybjtcbitcdH1cbiBcdHByb2dfbGVuID0gbmV3X3Byb2ctXHUwMDNlbGVuO1xuIFxuIFx0bWVtbW92ZShkYXRhICsgb2ZmICsgY250IC0gMSwgZGF0YSArIG9mZixcbkBAIC0xODIsNyArMjAxLDE5IEBAIHN0YXRpYyB2b2lkIGFkanVzdF9pbnNuX2F1eF9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRcdC8qIEV4cGFuZCBpbnNuaVtvZmZdJ3Mgc2VlbiBjb3VudCB0byB0aGUgcGF0Y2hlZCByYW5nZS4gKi9cbiBcdFx0ZGF0YVtpXS5zZWVuID0gb2xkX3NlZW47XG4gXHRcdGRhdGFbaV0uemV4dF9kc3QgPSBpbnNuX2hhc19kZWYzMihpbnNuICsgaSk7XG4rXHRcdGlmIChpID09IG9mZiArIGluc25fb2ZmX2luX3BhdGNoKSB7XG4rXHRcdFx0ZGF0YVtpXS5ub25fc3RhY2tfYWNjZXNzID0gZGF0YVtvZmYgKyBjbnQgLSAxXS5ub25fc3RhY2tfYWNjZXNzO1xuK1x0XHRcdGRhdGFbb2ZmICsgY250IC0gMV0ubm9uX3N0YWNrX2FjY2VzcyA9IGZhbHNlO1xuK1x0XHR9IGVsc2UgaWYgKGlzX21lbV9pbnNuKGluc24gKyBpKSkge1xuK1x0XHRcdGRhdGFbaV0ubm9uX3N0YWNrX2FjY2VzcyA9IHRydWU7XG4rXHRcdH1cbiBcdH1cbitcdC8qXG4rXHQgKiBMYXN0IHNsb3QgaW5zdHJ1Y3Rpb24gY291bGQgYmUgYSBuZXdseSBnZW5lcmF0ZWRcbitcdCAqIEJQRl9TVC9CUEZfTERYL0JQRl9TVFhcbitcdCAqL1xuK1x0aWYgKGlzX21lbV9pbnNuKGluc24gKyBvZmYgKyBjbnQgLSAxKSBcdTAwMjZcdTAwMjYgaW5zbl9vZmZfaW5fcGF0Y2ggIT0gY250IC0gMSlcbitcdFx0ZGF0YVtvZmYgKyBjbnQgLSAxXS5ub25fc3RhY2tfYWNjZXNzID0gdHJ1ZTtcbiBcbiBcdC8qXG4gXHQgKiBUaGUgaW5kaXJlY3RfdGFyZ2V0IGZsYWcgb2YgdGhlIG9yaWdpbmFsIGluc3RydWN0aW9uIHdhcyBtb3ZlZCB0byB0aGUgbGFzdCBvZiB0aGVcbkBAIC0yNDUsNyArMjc2LDggQEAgc3RhdGljIHZvaWQgYWRqdXN0X3Bva2VfZGVzY3Moc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgb2ZmLCB1MzIgbGVuKVxuIH1cbiBcbiBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZixcbi1cdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgdTMyIGxlbilcbitcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgdTMyIGxlbixcbitcdFx0XHRcdCAgICAgczMyIGluc25fb2ZmX2luX3BhdGNoKVxuIHtcbiBcdHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2c7XG4gXHRzdHJ1Y3QgYnBmX2luc25fYXV4X2RhdGEgKm5ld19kYXRhID0gTlVMTDtcbkBAIC0yNjksNyArMzAxLDcgQEAgc3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBvZmYsXG4gXHRcdFx0XHRlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YVtvZmZdLm9yaWdfaWR4KTtcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4tXHRhZGp1c3RfaW5zbl9hdXhfZGF0YShlbnYsIG5ld19wcm9nLCBvZmYsIGxlbik7XG4rXHRhZGp1c3RfaW5zbl9hdXhfZGF0YShlbnYsIG5ld19wcm9nLCBvZmYsIGxlbiwgaW5zbl9vZmZfaW5fcGF0Y2gpO1xuIFx0YWRqdXN0X3N1YnByb2dfc3RhcnRzKGVudiwgb2ZmLCBsZW4pO1xuIFx0YWRqdXN0X2luc25fYXJyYXlzKGVudiwgb2ZmLCBsZW4pO1xuIFx0YWRqdXN0X3Bva2VfZGVzY3MobmV3X3Byb2csIG9mZiwgbGVuKTtcbkBAIC02NjgsNyArNzAwLDcgQEAgaW50IGJwZl9vcHRfc3VicmVnX3pleHRfbG8zMl9ybmRfaGkzMihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0XHRwYXRjaCA9IHpleHRfcGF0Y2g7XG4gXHRcdHBhdGNoX2xlbiA9IDI7XG4gYXBwbHlfcGF0Y2hfYnVmZmVyOlxuLVx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBhZGpfaWR4LCBwYXRjaCwgcGF0Y2hfbGVuKTtcbitcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgYWRqX2lkeCwgcGF0Y2gsIHBhdGNoX2xlbiwgMCk7XG4gXHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRcdGVudi1cdTAwM2Vwcm9nID0gbmV3X3Byb2c7XG5AQCAtNzEzLDcgKzc0NSw3IEBAIGludCBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRpbnNuX2J1ZltjbnQrK10gPSBCUEZfU1RYX01FTShCUEZfRFcsIEJQRl9SRUdfRlAsIEJQRl9SRUdfMSxcbiBcdFx0XHRcdFx0XHQgICAgICAtc3VicHJvZ3NbMF0uc3RhY2tfZGVwdGgpO1xuIFx0XHRcdGluc25fYnVmW2NudCsrXSA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWluc25zaVswXTtcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCAwLCBpbnNuX2J1ZiwgY250KTtcbitcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCAwLCBpbnNuX2J1ZiwgY250LCAxKTtcbiBcdFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRcdFx0ZW52LVx1MDAzZXByb2cgPSBuZXdfcHJvZztcbkBAIC03MzYsNyArNzY4LDggQEAgaW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdHZlcmlmaWVyX2J1ZyhlbnYsIFwicHJvbG9ndWUgaXMgdG9vIGxvbmdcIik7XG4gXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHRcdH0gZWxzZSBpZiAoY250KSB7XG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgMCwgaW5zbl9idWYsIGNudCk7XG4rXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgMCwgaW5zbl9idWYsIGNudCxcbitcdFx0XHRcdFx0XHQgICAgICAgY250IC0gMSk7XG4gXHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTc2OCw3ICs4MDEsOCBAQCBpbnQgYnBmX2NvbnZlcnRfY3R4X2FjY2Vzc2VzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0KnBhdGNoKysgPSBCUEZfU1RfTk9TUEVDKCk7XG4gXHRcdFx0KnBhdGNoKysgPSAqaW5zbjtcbiBcdFx0XHRjbnQgPSBwYXRjaCAtIGluc25fYnVmO1xuLVx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG4rXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcbitcdFx0XHRcdFx0XHQgICAgICAgY250LCBjbnQgLSAxKTtcbiBcdFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtODQxLDcgKzg3NSw4IEBAIGludCBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHQqcGF0Y2grKyA9ICppbnNuO1xuIFx0XHRcdCpwYXRjaCsrID0gQlBGX1NUX05PU1BFQygpO1xuIFx0XHRcdGNudCA9IHBhdGNoIC0gaW5zbl9idWY7XG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbitcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxuK1x0XHRcdFx0XHRcdCAgICAgICBjbnQsIDApO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC05NzEsNyArMTAwNiw4IEBAIGludCBicGZfY29udmVydF9jdHhfYWNjZXNzZXMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRcdFx0XHQgICAgICAgc2l6ZSAqIDgsIDApO1xuIFxuIHBhdGNoX2luc25fYnVmOlxuLVx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuK1x0XHRuZXdfcHJvZyA9XG4rXHRcdFx0YnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCwgLTEpO1xuIFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTE0NjMsNyArMTQ5OSw3IEBAIHN0YXRpYyBpbnQgYWRkX2hpZGRlbl9zdWJwcm9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqcGF0XG4gXHQgKiBvbmVzIGZvciB0aGUgaGlkZGVuIHN1YnByb2cuIEhlbmNlIGFsbCBvZiB0aGUgYWRqdXN0bWVudCBvcGVyYXRpb25zXG4gXHQgKiBpbiBicGZfcGF0Y2hfaW5zbl9kYXRhIGFyZSBuby1vcHMuXG4gXHQgKi9cbi1cdHByb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgZW52LVx1MDAzZXByb2ctXHUwMDNlbGVuIC0gMSwgcGF0Y2gsIGxlbik7XG4rXHRwcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGVudi1cdTAwM2Vwcm9nLVx1MDAzZWxlbiAtIDEsIHBhdGNoLCBsZW4sIDApO1xuIFx0aWYgKCFwcm9nKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdGVudi1cdTAwM2Vwcm9nID0gcHJvZztcbkBAIC0xNTQ4LDcgKzE1ODQsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXG4gXHRcdFx0Y250ID0gcGF0Y2ggLSBpbnNuX2J1ZjtcbiBcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuK1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXG4rXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgMCk7XG4gXHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTE1NjgsNiArMTYwNSw3IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRib29sIGlzX3NkaXYgPSBpc2RpdiBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VvZmYgPT0gMTtcbiBcdFx0XHRib29sIGlzX3Ntb2QgPSAhaXNkaXYgXHUwMDI2XHUwMDI2IGluc24tXHUwMDNlb2ZmID09IDE7XG4gXHRcdFx0c3RydWN0IGJwZl9pbnNuICpwYXRjaCA9IGluc25fYnVmO1xuK1x0XHRcdHMzMiBpbnNuX29mZl9pbl9wYXRjaDtcbiBcbiBcdFx0XHRpZiAoaXNfc2Rpdikge1xuIFx0XHRcdFx0LyogW1IsV114IHNkaXYgMCAtXHUwMDNlIDBcbkBAIC0xNTk0LDYgKzE2MzIsNyBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0XHQqcGF0Y2grKyA9IEJQRl9KTVBfSU1NKEJQRl9KQSwgMCwgMCwgMSk7XG4gXHRcdFx0XHQqcGF0Y2grKyA9ICppbnNuO1xuIFx0XHRcdFx0Y250ID0gcGF0Y2ggLSBpbnNuX2J1ZjtcbitcdFx0XHRcdGluc25fb2ZmX2luX3BhdGNoID0gY250IC0gMTtcbiBcdFx0XHR9IGVsc2UgaWYgKGlzX3Ntb2QpIHtcbiBcdFx0XHRcdC8qIFtSLFddeCBtb2QgMCAtXHUwMDNlIFtSLFddeCAqL1xuIFx0XHRcdFx0LyogW1IsV114IG1vZCAtMSAtXHUwMDNlIDAgKi9cbkBAIC0xNjEwLDYgKzE2NDksNyBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0XHQqcGF0Y2grKyA9IEJQRl9NT1YzMl9JTU0oaW5zbi1cdTAwM2Vkc3RfcmVnLCAwKTtcbiBcdFx0XHRcdCpwYXRjaCsrID0gQlBGX0pNUF9JTU0oQlBGX0pBLCAwLCAwLCAxKTtcbiBcdFx0XHRcdCpwYXRjaCsrID0gKmluc247XG4rXHRcdFx0XHRpbnNuX29mZl9pbl9wYXRjaCA9IHBhdGNoIC0gaW5zbl9idWYgLSAxO1xuIFxuIFx0XHRcdFx0aWYgKCFpczY0KSB7XG4gXHRcdFx0XHRcdCpwYXRjaCsrID0gQlBGX0pNUF9JTU0oQlBGX0pBLCAwLCAwLCAxKTtcbkBAIC0xNjI1LDEyICsxNjY1LDE0IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRcdCpwYXRjaCsrID0gQlBGX0pNUF9JTU0oQlBGX0pBLCAwLCAwLCAxKTtcbiBcdFx0XHRcdCpwYXRjaCsrID0gKmluc247XG4gXHRcdFx0XHRjbnQgPSBwYXRjaCAtIGluc25fYnVmO1xuK1x0XHRcdFx0aW5zbl9vZmZfaW5fcGF0Y2ggPSBjbnQgLSAxO1xuIFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHQvKiBbUixXXXggbW9kIDAgLVx1MDAzZSBbUixXXXggKi9cbiBcdFx0XHRcdCpwYXRjaCsrID0gQlBGX1JBV19JTlNOKChpczY0ID8gQlBGX0pNUCA6IEJQRl9KTVAzMikgfFxuIFx0XHRcdFx0XHRcdFx0QlBGX0pFUSB8IEJQRl9LLCBpbnNuLVx1MDAzZXNyY19yZWcsXG4gXHRcdFx0XHRcdFx0XHQwLCAxICsgKGlzNjQgPyAwIDogMSksIDApO1xuIFx0XHRcdFx0KnBhdGNoKysgPSAqaW5zbjtcbitcdFx0XHRcdGluc25fb2ZmX2luX3BhdGNoID0gcGF0Y2ggLSBpbnNuX2J1ZiAtIDE7XG4gXG4gXHRcdFx0XHRpZiAoIWlzNjQpIHtcbiBcdFx0XHRcdFx0KnBhdGNoKysgPSBCUEZfSk1QX0lNTShCUEZfSkEsIDAsIDAsIDEpO1xuQEAgLTE2MzksNyArMTY4MSw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRcdGNudCA9IHBhdGNoIC0gaW5zbl9idWY7XG4gXHRcdFx0fVxuIFxuLVx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG4rXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcbitcdFx0XHRcdFx0XHQgICAgICAgY250LCBpbnNuX29mZl9pbl9wYXRjaCk7XG4gXHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTE2NTUsNiArMTY5OCw3IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0ICAgICBCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9QUk9CRV9NRU1TWCkpIHtcbiBcdFx0XHRzdHJ1Y3QgYnBmX2luc24gKnBhdGNoID0gaW5zbl9idWY7XG4gXHRcdFx0dTY0IHVhZGRyZXNzX2xpbWl0ID0gYnBmX2FyY2hfdWFkZHJlc3NfbGltaXQoKTtcbitcdFx0XHRzMzIgaW5zbl9vZmZfaW5fcGF0Y2g7XG4gXG4gXHRcdFx0aWYgKCF1YWRkcmVzc19saW1pdClcbiBcdFx0XHRcdGdvdG8gbmV4dF9pbnNuO1xuQEAgLTE2NjUsMTEgKzE3MDksMTMgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdCpwYXRjaCsrID0gQlBGX0FMVTY0X0lNTShCUEZfUlNILCBCUEZfUkVHX0FYLCAzMik7XG4gXHRcdFx0KnBhdGNoKysgPSBCUEZfSk1QX0lNTShCUEZfSkxFLCBCUEZfUkVHX0FYLCB1YWRkcmVzc19saW1pdCBcdTAwM2VcdTAwM2UgMzIsIDIpO1xuIFx0XHRcdCpwYXRjaCsrID0gKmluc247XG4rXHRcdFx0aW5zbl9vZmZfaW5fcGF0Y2ggPSBwYXRjaCAtIGluc25fYnVmIC0gMTtcbiBcdFx0XHQqcGF0Y2grKyA9IEJQRl9KTVBfSU1NKEJQRl9KQSwgMCwgMCwgMSk7XG4gXHRcdFx0KnBhdGNoKysgPSBCUEZfTU9WNjRfSU1NKGluc24tXHUwMDNlZHN0X3JlZywgMCk7XG4gXG4gXHRcdFx0Y250ID0gcGF0Y2ggLSBpbnNuX2J1Zjtcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuK1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXG4rXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgaW5zbl9vZmZfaW5fcGF0Y2gpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0xNjg5LDcgKzE3MzUsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdFx0XHR9XG4gXG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbitcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxuK1x0XHRcdFx0XHRcdCAgICAgICBjbnQsIDApO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0xNzQyLDcgKzE3ODksOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0XHQqcGF0Y2grKyA9IEJQRl9BTFU2NF9JTU0oQlBGX01VTCwgb2ZmX3JlZywgLTEpO1xuIFx0XHRcdGNudCA9IHBhdGNoIC0gaW5zbl9idWY7XG4gXG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbitcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxuK1x0XHRcdFx0XHRcdCAgICAgICBjbnQsIGNudCAtIDEpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0xNzg3LDcgKzE4MzUsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0aW5zbl9idWZbNl0gPSBCUEZfU1RYX01FTShCUEZfRFcsIEJQRl9SRUdfMTAsIEJQRl9SRUdfQVgsIHN0YWNrX29mZl9jbnQpO1xuIFx0XHRcdGNudCA9IDc7XG4gXG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbitcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxuK1x0XHRcdFx0XHRcdCAgICAgICBjbnQsIDMpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0xODA4LDcgKzE4NTcsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0aW5zbl9idWZbM10gPSBCUEZfU1RYX01FTShCUEZfRFcsIEJQRl9SRUdfMTAsIEJQRl9SRUdfQVgsIHN0YWNrX29mZik7XG4gXHRcdFx0Y250ID0gNDtcbiBcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuK1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXG4rXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgMik7XG4gXHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTE4MjksNyArMTg3OSw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRpZiAoY250ID09IDApXG4gXHRcdFx0XHRnb3RvIG5leHRfaW5zbjtcbiBcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuK1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXG4rXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgY250IC0gMSk7XG4gXHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTE5MTYsNyArMTk2Nyw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRcdFx0XHRcdFx0IG1hcCktXHUwMDNlaW5kZXhfbWFzayk7XG4gXHRcdFx0aW5zbl9idWZbMl0gPSAqaW5zbjtcbiBcdFx0XHRjbnQgPSAzO1xuLVx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG4rXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcbitcdFx0XHRcdFx0XHQgICAgICAgY250LCBjbnQgLSAxKTtcbiBcdFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMTk0OSw3ICsyMDAxLDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdGluc25fYnVmWzJdID0gKmluc247XG4gXHRcdFx0Y250ID0gMztcbiBcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuK1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXG4rXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgY250IC0gMSk7XG4gXHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTE5NjgsNyArMjAyMSw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRpbnNuX2J1ZlsxXSA9ICppbnNuO1xuIFx0XHRcdGNudCA9IDI7XG4gXG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbitcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxuK1x0XHRcdFx0XHRcdCAgICAgICBjbnQsIGNudCAtIDEpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0yMDA4LDggKzIwNjIsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0XHRcdHJldHVybiAtRUZBVUxUO1xuIFx0XHRcdFx0fVxuIFxuLVx0XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLFxuLVx0XHRcdFx0XHRcdFx0ICAgICAgIGluc25fYnVmLCBjbnQpO1xuK1x0XHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKFxuK1x0XHRcdFx0XHRlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCwgLTEpO1xuIFx0XHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMjA5Miw3ICsyMTQ2LDcgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdGNudCA9IDM7XG4gXG4gXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1Zixcbi1cdFx0XHRcdFx0XHQgICAgICAgY250KTtcbitcdFx0XHRcdFx0XHQgICAgICAgY250LCAtMSk7XG4gXHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTIxMjAsNyArMjE3NCw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRpbnNuX2J1ZlswXSA9IEJQRl9BTFUzMl9SRUcoQlBGX1hPUiwgQlBGX1JFR18wLCBCUEZfUkVHXzApO1xuIFx0XHRcdGNudCA9IDE7XG4gI2VuZGlmXG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbitcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxuK1x0XHRcdFx0XHRcdCAgICAgICBjbnQsIC0xKTtcbiBcdFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMjEzOCw3ICsyMTkzLDggQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHRcdGluc25fYnVmWzJdID0gQlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfMCwgMCk7XG4gXHRcdFx0Y250ID0gMztcbiBcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuK1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXG4rXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgLTEpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0yMTcyLDcgKzIyMjgsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0aW5zbl9idWZbY250KytdID0gQlBGX0pNUF9BKDEpO1xuIFx0XHRcdGluc25fYnVmW2NudCsrXSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAtRUlOVkFMKTtcbiBcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuK1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXG4rXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgLTEpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0yMjA0LDcgKzIyNjEsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0XHRjbnQgPSAxO1xuIFx0XHRcdH1cbiBcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuK1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXG4rXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgLTEpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0yMjMwLDcgKzIyODgsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0XHRjbnQgPSAyO1xuIFx0XHRcdH1cbiBcbi1cdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLCBjbnQpO1xuK1x0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXG4rXHRcdFx0XHRcdFx0ICAgICAgIGNudCwgLTEpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0yMjQ2LDcgKzIzMDUsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0LyogTG9hZCBJUCBhZGRyZXNzIGZyb20gY3R4IC0gMTYgKi9cbiBcdFx0XHRpbnNuX2J1ZlswXSA9IEJQRl9MRFhfTUVNKEJQRl9EVywgQlBGX1JFR18wLCBCUEZfUkVHXzEsIC0xNik7XG4gXG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgMSk7XG4rXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcbitcdFx0XHRcdFx0XHQgICAgICAgMSwgLTEpO1xuIFx0XHRcdGlmICghbmV3X3Byb2cpXG4gXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0yMzAxLDcgKzIzNjEsOCBAQCBpbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4gXHRcdFx0aW5zbl9idWZbMTBdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIC1FTk9FTlQpO1xuIFx0XHRcdGNudCA9IDExO1xuIFxuLVx0XHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsIGNudCk7XG4rXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcbitcdFx0XHRcdFx0XHQgICAgICAgY250LCAtMSk7XG4gXHRcdFx0aWYgKCFuZXdfcHJvZylcbiBcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuQEAgLTIzMTksNyArMjM4MCw4IEBAIGludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbiBcdFx0XHRpbnNuX2J1ZlsxXSA9IEJQRl9BVE9NSUNfT1AoQlBGX0RXLCBCUEZfWENIRywgQlBGX1JFR18xLCBCUEZfUkVHXzAsIDApO1xuIFx0XHRcdGNudCA9IDI7XG4gXG4tXHRcdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250KTtcbitcdFx0XHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxuK1x0XHRcdFx0XHRcdCAgICAgICBjbnQsIC0xKTtcbiBcdFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMjM4Nyw3ICsyNDQ5LDcgQEAgaW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuIFx0XHQvKiBDb3B5IGZpcnN0IGFjdHVhbCBpbnNuIHRvIHByZXNlcnZlIGl0ICovXG4gXHRcdGluc25fYnVmW2NudCsrXSA9IGVudi1cdTAwM2Vwcm9nLVx1MDAzZWluc25zaVtzdWJwcm9nX3N0YXJ0XTtcbiBcbi1cdFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgc3VicHJvZ19zdGFydCwgaW5zbl9idWYsIGNudCk7XG4rXHRcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIHN1YnByb2dfc3RhcnQsIGluc25fYnVmLCBjbnQsIGNudCAtIDEpO1xuIFx0XHRpZiAoIW5ld19wcm9nKVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0XHRlbnYtXHUwMDNlcHJvZyA9IHByb2cgPSBuZXdfcHJvZztcbkBAIC0yNDg2LDcgKzI1NDgsNyBAQCBzdGF0aWMgc3RydWN0IGJwZl9wcm9nICppbmxpbmVfYnBmX2xvb3Aoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdGluc25fYnVmW2NudCsrXSA9IEJQRl9MRFhfTUVNKEJQRl9EVywgQlBGX1JFR184LCBCUEZfUkVHXzEwLCByOF9vZmZzZXQpO1xuIFxuIFx0KnRvdGFsX2NudCA9IGNudDtcbi1cdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIHBvc2l0aW9uLCBpbnNuX2J1ZiwgY250KTtcbitcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIHBvc2l0aW9uLCBpbnNuX2J1ZiwgY250LCAtMSk7XG4gXHRpZiAoIW5ld19wcm9nKVxuIFx0XHRyZXR1cm4gbmV3X3Byb2c7XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCAyMzM0NzJhODcxYmU1Ny4uYmMzYjQ3NzEzOTZhOWYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTMyMDcsNiArMzIwNywxMSBAQCBzdGF0aWMgdm9pZCBtYXJrX2luZGlyZWN0X3RhcmdldChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWR4KVxuIFx0ZW52LVx1MDAzZWluc25fYXV4X2RhdGFbaWR4XS5pbmRpcmVjdF90YXJnZXQgPSB0cnVlO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBtYXJrX25vbl9zdGFja19hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkeClcbit7XG4rXHRlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YVtpZHhdLm5vbl9zdGFja19hY2Nlc3MgPSB0cnVlO1xuK31cbitcbiAjZGVmaW5lIExSX0ZSQU1FTk9fQklUU1x0NFxuICNkZWZpbmUgTFJfU1BJX0JJVFNcdDZcbiAjZGVmaW5lIExSX0VOVFJZX0JJVFNcdChMUl9TUElfQklUUyArIExSX0ZSQU1FTk9fQklUUyArIDEpXG5AQCAtNjQwMCw2ICs2NDA1LDEwIEBAIHN0YXRpYyBpbnQgY2hlY2tfbWVtX2FjY2VzcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaW5zbl9pZHgsIHN0cnVjdCBiXG4gXHRcdGVsc2VcbiBcdFx0XHRjb2VyY2VfcmVnX3RvX3NpemVfc3goXHUwMDI2cmVnc1t2YWx1ZV9yZWdub10sIHNpemUpO1xuIFx0fVxuK1xuK1x0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IHJlZy1cdTAwM2V0eXBlICE9IFBUUl9UT19TVEFDSylcbitcdFx0bWFya19ub25fc3RhY2tfYWNjZXNzKGVudiwgaW5zbl9pZHgpO1xuK1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnBmX2luc25fYXJyYXkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pbnNuX2FycmF5LmNcbmluZGV4IDAyMjJhOWE1ZDA3NjE0Li44MTVmM2UwNDU0MGZmYyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pbnNuX2FycmF5LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2JwZl9pbnNuX2FycmF5LmNcbkBAIC0yMjcsNDIgKzIyNyw2IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2luY29ycmVjdF9pbmRleCh2b2lkKVxuIFx0Y2hlY2tfbWlkX2luc25faW5kZXgoKTtcbiB9XG4gXG4tc3RhdGljIGludCBzZXRfYnBmX2ppdF9oYXJkZW4oY2hhciAqbGV2ZWwpXG4te1xuLVx0Y2hhciBvbGRfbGV2ZWw7XG4tXHRpbnQgZXJyID0gLTE7XG4tXHRpbnQgZmQgPSAtMTtcbi1cbi1cdGZkID0gb3BlbihcIi9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2hhcmRlblwiLCBPX1JEV1IgfCBPX05PTkJMT0NLKTtcbi1cdGlmIChmZCBcdTAwM2MgMCkge1xuLVx0XHRBU1NFUlRfRkFJTChcIm9wZW4gLi4uL2JwZl9qaXRfaGFyZGVuIHJldHVybmVkICVkIChlcnJubz0lZClcIiwgZmQsIGVycm5vKTtcbi1cdFx0cmV0dXJuIC0xO1xuLVx0fVxuLVxuLVx0ZXJyID0gcmVhZChmZCwgXHUwMDI2b2xkX2xldmVsLCAxKTtcbi1cdGlmIChlcnIgIT0gMSkge1xuLVx0XHRBU1NFUlRfRkFJTChcInJlYWQgZnJvbSAuLi4vYnBmX2ppdF9oYXJkZW4gcmV0dXJuZWQgJWQgKGVycm5vPSVkKVwiLCBlcnIsIGVycm5vKTtcbi1cdFx0ZXJyID0gLTE7XG4tXHRcdGdvdG8gZW5kO1xuLVx0fVxuLVxuLVx0bHNlZWsoZmQsIDAsIFNFRUtfU0VUKTtcbi1cbi1cdGVyciA9IHdyaXRlKGZkLCBsZXZlbCwgMSk7XG4tXHRpZiAoZXJyICE9IDEpIHtcbi1cdFx0QVNTRVJUX0ZBSUwoXCJ3cml0ZSB0byAuLi4vYnBmX2ppdF9oYXJkZW4gcmV0dXJuZWQgJWQgKGVycm5vPSVkKVwiLCBlcnIsIGVycm5vKTtcbi1cdFx0ZXJyID0gLTE7XG4tXHRcdGdvdG8gZW5kO1xuLVx0fVxuLVxuLVx0ZXJyID0gMDtcbi1cdCpsZXZlbCA9IG9sZF9sZXZlbDtcbi1lbmQ6XG4tXHRpZiAoZmQgXHUwMDNlPSAwKVxuLVx0XHRjbG9zZShmZCk7XG4tXHRyZXR1cm4gZXJyO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCBjaGVja19ibGluZG5lc3Modm9pZClcbiB7XG4gXHRzdHJ1Y3QgYnBmX2luc24gaW5zbnNbXSA9IHtcbkBAIC0yNzIsNyArMjM2LDcgQEAgc3RhdGljIHZvaWQgY2hlY2tfYmxpbmRuZXNzKHZvaWQpXG4gXHRcdEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAxKSxcbiBcdFx0QlBGX0VYSVRfSU5TTigpLFxuIFx0fTtcbi1cdGludCBwcm9nX2ZkID0gLTEsIG1hcF9mZDtcbitcdGludCBwcm9nX2ZkID0gLTEsIG1hcF9mZCwgcmV0O1xuIFx0c3RydWN0IGJwZl9pbnNuX2FycmF5X3ZhbHVlIHZhbCA9IHt9O1xuIFx0Y2hhciBicGZfaml0X2hhcmRlbiA9ICdAJzsgLyogbm9uLWV4aXpzdGluZyB2YWx1ZSAqL1xuIFx0aW50IGk7XG5AQCAtMjkxLDcgKzI1NSw4IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2JsaW5kbmVzcyh2b2lkKVxuIFx0XHRnb3RvIGNsZWFudXA7XG4gXG4gXHRicGZfaml0X2hhcmRlbiA9ICcyJztcbi1cdGlmIChzZXRfYnBmX2ppdF9oYXJkZW4oXHUwMDI2YnBmX2ppdF9oYXJkZW4pKSB7XG4rXHRyZXQgPSBzZXRfYnBmX2ppdF9oYXJkZW4oXHUwMDI2YnBmX2ppdF9oYXJkZW4pO1xuK1x0aWYgKCFBU1NFUlRfT0socmV0LCBcInNldCBicGZfaml0X2hhcmRlblwiKSkge1xuIFx0XHRicGZfaml0X2hhcmRlbiA9ICdAJzsgLyogb3BlbiwgcmVhZCBvciB3cml0ZSBmYWlsZWQgPVx1MDAzZSBubyB3cml0ZSB3YXMgZG9uZSAqL1xuIFx0XHRnb3RvIGNsZWFudXA7XG4gXHR9XG5AQCAtMzEzLDcgKzI3OCw4IEBAIHN0YXRpYyB2b2lkIGNoZWNrX2JsaW5kbmVzcyh2b2lkKVxuIGNsZWFudXA6XG4gXHQvKiByZXN0b3JlIHRoZSBvbGQgb25lICovXG4gXHRpZiAoYnBmX2ppdF9oYXJkZW4gIT0gJ0AnKVxuLVx0XHRzZXRfYnBmX2ppdF9oYXJkZW4oXHUwMDI2YnBmX2ppdF9oYXJkZW4pO1xuK1x0XHRBU1NFUlRfT0soc2V0X2JwZl9qaXRfaGFyZGVuKFx1MDAyNmJwZl9qaXRfaGFyZGVuKSxcbitcdFx0XHQgIFwicmVzdG9yZSBoYXJkZW5pbmcgY29uZmlndXJhdGlvblwiKTtcbiBcbiBcdGNsb3NlKHByb2dfZmQpO1xuIFx0Y2xvc2UobWFwX2ZkKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rYXNhbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva2FzYW4uY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yYmM1NDVlOTYyNTk1ZVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva2FzYW4uY1xuQEAgLTAsMCArMSw0MzAgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBCU0QtMy1DbGF1c2VcbitcbisvKlxuKyAqIFRlc3RzIHZhbGlkYXRpbmcgdGhhdCBLQVNBTiByZXBvcnRzIGFyZSBwcm9wZXJseSBpbnN0cnVtZW50ZWQgYW5kXG4rICogZ2VuZXJhdGVkIG9uIGEgd2lkZSB2YXJpZXR5IG9mIGluc3RydWN0aW9ucy4gVGhlIHJ1bm5pbmcga2VybmVsIG5lZWRzXG4rICoga2FzYW5fbXVsdGlfc2hvdCB0byBydW4gbXVsdGlwbGUga2FzYW4tZ2VuZXJhdGluZyBzdWJ0ZXN0cyBhdCBvbmNlXG4rICovXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9ldGhlci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2N1bnByaXZfaGVscGVycy5oXHUwMDNlXG4rI2luY2x1ZGUgXCJrYXNhbi5za2VsLmhcIlxuKyNpbmNsdWRlIFwia2FzYW5faGFyZGVuLnNrZWwuaFwiXG4rXG4rI2RlZmluZSBTVUJURVNUX05BTUVfTUFYX0xFTlx0MTI4XG4rI2RlZmluZSBQUk9HX05BTUVfTUFYX0xFTlx0MTI4XG4rXG4rI2RlZmluZSBNQVhfTE9HX1NJWkVcdFx0KDggKiAxMDI0KVxuKyNkZWZpbmUgUkVBRF9DSFVOS19TSVpFXHRcdDI1NlxuK1xuKyNkZWZpbmUgS0FTQU5fUEFUVEVSTl9TTEFCX1VBRiBcIkJVRzogS0FTQU46IHNsYWItdXNlLWFmdGVyLWZyZWUgXCIgXFxcbitcdFwiaW4gYnBmX3Byb2dfJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhfJXNcIlxuKyNkZWZpbmUgS0FTQU5fUEFUVEVSTl9SRVBPUlQgXCIlcyBvZiBzaXplICVkIGF0IGFkZHJcIlxuK1xuK3N0YXRpYyBjaGFyIGtsb2dfYnVmZmVyW01BWF9MT0dfU0laRV07XG4rc3RhdGljIGNoYXIgcmVjb3JkW01BWF9MT0dfU0laRV07XG4rXG4rc3RydWN0IHRlc3Rfc3BlYyB7XG4rXHRjaGFyICpwcm9nX3R5cGU7XG4rXHRib29sIGlzX3dyaXRlO1xuK1x0Ym9vbCBvbmx5XzMyX29yXzY0O1xuK1x0Ym9vbCBuZWVkc19sb2FkX2FjcV9zdG9yZV9yZWw7XG4rXHRib29sIHNraXBfbXVsdGlfc2l6ZV90ZXN0aW5nO1xuK1x0Ym9vbCBza2lwX29uX3N0YWNrX3Rlc3Rpbmc7XG4rXHRpbnQgcnVuX3NpemU7XG4rXHRib29sIGV4cGVjdF9ub19yZXBvcnQ7XG4rXHRib29sIHJuZF9oaTMyO1xuK307XG4rXG4rc3RydWN0IGthc2FuX3dyaXRlX3ZhbCB7XG4rXHRfX3U4IGRhdGFfMTtcbitcdF9fdTE2IGRhdGFfMjtcbitcdF9fdTMyIGRhdGFfNDtcbitcdF9fdTY0IGRhdGFfODtcbit9O1xuK1xuK3N0cnVjdCB0ZXN0X2N0eCB7XG4rXHRfX3U4ICBwcm9nX3RhZ1tCUEZfVEFHX1NJWkVdO1xuK1x0c3RydWN0IGJwZl9vYmplY3QgKm9iajtcbitcdGludCAqYWNjZXNzX3NpemU7XG4rXHRib29sIHNraXBfbG9hZF9hY3Ffc3RvcmVfcmVsO1xuK1x0c3RydWN0IGJwZl9wcm9ncmFtICpwcm9nO1xuK1x0Y2hhciBwcm9nX25hbWVbU1VCVEVTVF9OQU1FX01BWF9MRU5dO1xuK1x0aW50IGtsb2dfZmQ7XG4rfTtcbitcbitzdGF0aWMgaW50IG9wZW5fa2VybmVsX2xvZ3Modm9pZClcbit7XG4rXHRpbnQgZmQ7XG4rXG4rXHRmZCA9IG9wZW4oXCIvZGV2L2ttc2dcIiwgT19SRE9OTFkgfCBPX05PTkJMT0NLKTtcbitcbitcdHJldHVybiBmZDtcbit9XG4rXG4rc3RhdGljIHZvaWQgc2tpcF9rZXJuZWxfbG9ncyhpbnQgZmQpXG4re1xuK1x0bHNlZWsoZmQsIDAsIFNFRUtfRU5EKTtcbit9XG4rXG4rc3RhdGljIGludCByZWFkX2tlcm5lbF9sb2dzKGludCBmZCwgY2hhciAqYnVmLCBzaXplX3QgbWF4X2xlbilcbit7XG4rXHRzaXplX3QgdG90YWwgPSAwO1xuK1x0c3NpemVfdCBuO1xuK1xuK1x0YnVmWzBdID0gJ1xcMCc7XG4rXHR3aGlsZSAoMSkge1xuK1x0XHRjaGFyICptc2csICplb2w7XG4rXHRcdHNpemVfdCBsZW47XG4rXG4rXHRcdG4gPSByZWFkKGZkLCByZWNvcmQsIHNpemVvZihyZWNvcmQpIC0gMSk7XG4rXHRcdGlmIChuIFx1MDAzYyAwKSB7XG4rXHRcdFx0aWYgKGVycm5vID09IEVBR0FJTilcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdHJldHVybiBuO1xuK1x0XHR9XG4rXHRcdHJlY29yZFtuXSA9ICdcXDAnO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBFYWNoIGttc2cgcmVjb3JkIHN0YXJ0cyB3aXRoIHNvbWUgbWV0YWRhdGEsIHNlcGFyYXRlZFxuK1x0XHQgKiBmcm9tIHRoZSBhY3R1YWwgY29udGVudCBieSBhIHNlbWktY29sb25cbitcdFx0ICovXG4rXHRcdG1zZyA9IHN0cmNocihyZWNvcmQsICc7Jyk7XG4rXHRcdGlmICghbXNnKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRtc2crKztcbitcdFx0ZW9sID0gc3RyY2hyKG1zZywgJ1xcbicpO1xuK1x0XHRpZiAoZW9sKVxuK1x0XHRcdCplb2wgPSAnXFwwJztcbitcbitcdFx0bGVuID0gc3RybGVuKG1zZyk7XG4rXHRcdGlmICh0b3RhbCArIGxlbiArIDIgXHUwMDNlIG1heF9sZW4pXG4rXHRcdFx0YnJlYWs7XG4rXHRcdG1lbWNweShidWYgKyB0b3RhbCwgbXNnLCBsZW4pO1xuK1x0XHR0b3RhbCArPSBsZW47XG4rXHRcdGJ1Zlt0b3RhbCsrXSA9ICdcXG4nO1xuK1x0XHRidWZbdG90YWxdID0gJ1xcMCc7XG4rXHR9XG4rXG4rXHRyZXR1cm4gdG90YWw7XG4rfVxuK1xuK3N0YXRpYyBpbnQgY2hlY2tfa2FzYW5fcmVwb3J0X2luX2tlcm5lbF9sb2dzKGNoYXIgKmJ1Ziwgc3RydWN0IHRlc3RfY3R4ICpjdHgsXG4rXHRcdFx0XHRcdCAgICAgYm9vbCBpc193cml0ZSwgaW50IHNpemUpXG4re1xuK1x0Y2hhciBhY2Nlc3NfbG9nW1JFQURfQ0hVTktfU0laRV07XG4rXHRjaGFyICprYXNhbl9yZXBvcnRfc3RhcnQ7XG4rXHRpbnQgbnNpemU7XG4rXG4rXHRuc2l6ZSA9IHNucHJpbnRmKGFjY2Vzc19sb2csIFJFQURfQ0hVTktfU0laRSwgS0FTQU5fUEFUVEVSTl9TTEFCX1VBRixcbitcdFx0XHQgY3R4LVx1MDAzZXByb2dfdGFnWzBdLCBjdHgtXHUwMDNlcHJvZ190YWdbMV0sIGN0eC1cdTAwM2Vwcm9nX3RhZ1syXSxcbitcdFx0XHQgY3R4LVx1MDAzZXByb2dfdGFnWzNdLCBjdHgtXHUwMDNlcHJvZ190YWdbNF0sIGN0eC1cdTAwM2Vwcm9nX3RhZ1s1XSxcbitcdFx0XHQgY3R4LVx1MDAzZXByb2dfdGFnWzZdLCBjdHgtXHUwMDNlcHJvZ190YWdbN10sIGN0eC1cdTAwM2Vwcm9nX25hbWUpO1xuK1x0aWYgKCFBU1NFUlRfR0UobnNpemUsIDAsIFwiZm9ybWF0IGthc2FuIGFjY2VzcyBoZWFkZXIgbGluZVwiKSlcbitcdFx0cmV0dXJuIG5zaXplO1xuK1x0LypcbitcdCAqIFNlYXJjaGVkIGthc2FuIHJlcG9ydCBpcyB2YWxpZCBpZlxuK1x0ICogLSBpdCBjb250YWlucyB0aGUgZXhwZWN0ZWQga2FzYW4gcGF0dGVyblxuK1x0ICogLSB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGZhdWx0eSBhY2Nlc3MgaXMgZm91bmQgc29tZXdoZXJlXG4rXHQgKiAgIGFmdGVyIHRoZSBoZWFkZXIgKG5vdCBuZWNlc3NhcmlseSBvbiB0aGUgdmVyeSBuZXh0IGxpbmUsXG4rXHQgKiAgIGJlY2F1c2Ugb3RoZXIga2VybmVsIG1lc3NhZ2VzIG1heSBpbnRlcmxlYXZlKVxuK1x0ICogLSBmYXVsdHkgYWNjZXNzIHByb3BlcnRpZXMgbWF0Y2ggdGhlIHRlc3RlZCB0eXBlIGFuZCBzaXplXG4rXHQgKi9cbitcdGthc2FuX3JlcG9ydF9zdGFydCA9IHN0cnN0cihidWYsIGFjY2Vzc19sb2cpO1xuK1xuK1x0aWYgKCFrYXNhbl9yZXBvcnRfc3RhcnQpXG4rXHRcdHJldHVybiAxO1xuK1xuK1x0bnNpemUgPSBzbnByaW50ZihhY2Nlc3NfbG9nLCBSRUFEX0NIVU5LX1NJWkUsIEtBU0FOX1BBVFRFUk5fUkVQT1JULFxuK1x0XHRcdCBpc193cml0ZSA/IFwiV3JpdGVcIiA6IFwiUmVhZFwiLCBzaXplKTtcbitcdGlmICghQVNTRVJUX0dFKG5zaXplLCAwLCBcImZvcm1hdCBrYXNhbiBhY2Nlc3MgcmVwb3J0IGxpbmVcIikpXG4rXHRcdHJldHVybiBuc2l6ZTtcbitcbitcdGlmICghc3Ryc3RyKGthc2FuX3JlcG9ydF9zdGFydCwgYWNjZXNzX2xvZykpXG4rXHRcdHJldHVybiAxO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGV4ZWNfc3VidGVzdChzdHJ1Y3QgdGVzdF9jdHggKmN0eCwgc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCxcbitcdFx0XHQgaW50IGFjY2Vzc19zaXplLCBib29sIG9uX3N0YWNrKVxuK3tcbitcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCB0b3B0cyk7XG4rXHRzdHJ1Y3QgYnBmX3Byb2dfaW5mbyBpbmZvO1xuK1x0dWludDhfdCBidWZbRVRIX0hMRU5dID0gezB9O1xuK1x0aW50IHJldCwgcHJvZ19mZDtcbitcdF9fdTMyIGluZm9fbGVuO1xuK1xuK1x0Y3R4LVx1MDAzZXByb2cgPSBicGZfb2JqZWN0X19maW5kX3Byb2dyYW1fYnlfbmFtZShjdHgtXHUwMDNlb2JqLFxuK1x0XHRcdFx0XHRcdCAgICAgY3R4LVx1MDAzZXByb2dfbmFtZSk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoY3R4LVx1MDAzZXByb2csIFwiZmluZCB0ZXN0IHByb2dcIikpXG4rXHRcdHJldHVybjtcbitcbitcdGluZm9fbGVuID0gc2l6ZW9mKGluZm8pO1xuK1x0bWVtc2V0KFx1MDAyNmluZm8sIDAsIGluZm9fbGVuKTtcbitcdHByb2dfZmQgPSBicGZfcHJvZ3JhbV9fZmQoY3R4LVx1MDAzZXByb2cpO1xuK1x0aWYgKCFBU1NFUlRfT0tfRkQocHJvZ19mZCwgXCJnZXQgcHJvZyBmZFwiKSlcbitcdFx0cmV0dXJuO1xuK1x0cmV0ID0gYnBmX3Byb2dfZ2V0X2luZm9fYnlfZmQocHJvZ19mZCwgXHUwMDI2aW5mbywgXHUwMDI2aW5mb19sZW4pO1xuK1x0aWYgKCFBU1NFUlRfT0socmV0LCBcImZldGNoIGxvYWRlZCBwcm9ncmFtIGluZm9cIikpXG4rXHRcdHJldHVybjtcbitcdG1lbWNweShjdHgtXHUwMDNlcHJvZ190YWcsIGluZm8udGFnLCBCUEZfVEFHX1NJWkUpO1xuK1xuK1x0c2tpcF9rZXJuZWxfbG9ncyhjdHgtXHUwMDNla2xvZ19mZCk7XG4rXG4rXHR0b3B0cy5zeiA9IHNpemVvZihzdHJ1Y3QgYnBmX3Rlc3RfcnVuX29wdHMpO1xuK1x0dG9wdHMuZGF0YV9zaXplX2luID0gRVRIX0hMRU47XG4rXHR0b3B0cy5kYXRhX2luID0gYnVmO1xuK1x0aWYgKGN0eC1cdTAwM2VhY2Nlc3Nfc2l6ZSlcbitcdFx0KmN0eC1cdTAwM2VhY2Nlc3Nfc2l6ZSA9IGFjY2Vzc19zaXplO1xuK1x0cmV0ID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoY3R4LVx1MDAzZXByb2cpLFxuK1x0XHRcdFx0ICAgICBcdTAwMjZ0b3B0cyk7XG4rXHRpZiAoIUFTU0VSVF9PSyhyZXQsIFwicnVuIHByb2dcIikpXG4rXHRcdHJldHVybjtcbitcbitcdHJldCA9IHJlYWRfa2VybmVsX2xvZ3MoY3R4LVx1MDAzZWtsb2dfZmQsIGtsb2dfYnVmZmVyLCBNQVhfTE9HX1NJWkUpO1xuK1x0aWYgKCFBU1NFUlRfR0UocmV0LCAwLCBcInJlYWQga2VybmVsIGxvZ3NcIikpXG4rXHRcdHJldHVybjtcbitcbitcdHJldCA9IGNoZWNrX2thc2FuX3JlcG9ydF9pbl9rZXJuZWxfbG9ncyhrbG9nX2J1ZmZlciwgY3R4LFxuK1x0XHRcdFx0XHRcdHRlc3QtXHUwMDNlaXNfd3JpdGUsIGFjY2Vzc19zaXplKTtcbitcdGlmIChvbl9zdGFjayB8fCB0ZXN0LVx1MDAzZWV4cGVjdF9ub19yZXBvcnQpXG4rXHRcdEFTU0VSVF9ORVEocmV0LCAwLCBcIm5vIHJlcG9ydCBzaG91bGQgYmUgZ2VuZXJhdGVkXCIpO1xuK1x0ZWxzZVxuK1x0XHRBU1NFUlRfT0socmV0LCBcInJlcG9ydCBzaG91bGQgYmUgZ2VuZXJhdGVkXCIpO1xuK31cbitcbitzdGF0aWMgdm9pZCBydW5fc3VidGVzdF93aXRoX3NpemVfYW5kX2xvY2F0aW9uKHN0cnVjdCB0ZXN0X2N0eCAqY3R4LFxuK1x0XHRcdFx0XHQgICAgICAgc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCxcbitcdFx0XHRcdFx0ICAgICAgIGludCBhY2Nlc3Nfc2l6ZSxcbitcdFx0XHRcdFx0ICAgICAgIGJvb2wgb25fc3RhY2spXG4re1xuK1x0Y2hhciBzdWJ0ZXN0X25hbWVbU1VCVEVTVF9OQU1FX01BWF9MRU5dO1xuK1xuK1x0aWYgKHRlc3QtXHUwMDNlc2tpcF9tdWx0aV9zaXplX3Rlc3RpbmcpIHtcbitcdFx0c25wcmludGYoc3VidGVzdF9uYW1lLCBTVUJURVNUX05BTUVfTUFYX0xFTiwgXCIlc1wiLFxuK1x0XHRcdCB0ZXN0LVx1MDAzZXByb2dfdHlwZSk7XG4rXHRcdHN0cm5jcHkoY3R4LVx1MDAzZXByb2dfbmFtZSwgdGVzdC1cdTAwM2Vwcm9nX3R5cGUsIFBST0dfTkFNRV9NQVhfTEVOKTtcbitcdH0gZWxzZSB7XG4rXHRcdHNucHJpbnRmKHN1YnRlc3RfbmFtZSwgU1VCVEVTVF9OQU1FX01BWF9MRU4sIFwiJXNfJWRfJXNcIixcbitcdFx0XHQgdGVzdC1cdTAwM2Vwcm9nX3R5cGUsIGFjY2Vzc19zaXplLFxuK1x0XHRcdCBvbl9zdGFjayA/IFwib25fc3RhY2tcIiA6IFwibm90X29uX3N0YWNrXCIpO1xuK1x0XHRzbnByaW50ZihjdHgtXHUwMDNlcHJvZ19uYW1lLCBQUk9HX05BTUVfTUFYX0xFTiwgXCIlc18lc1wiLFxuK1x0XHRcdCB0ZXN0LVx1MDAzZXByb2dfdHlwZSxcbitcdFx0XHQgb25fc3RhY2sgPyBcIm9uX3N0YWNrXCIgOiBcIm5vdF9vbl9zdGFja1wiKTtcbitcdH1cbitcbitcdGlmICghdGVzdF9fc3RhcnRfc3VidGVzdChzdWJ0ZXN0X25hbWUpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAodGVzdC1cdTAwM2VuZWVkc19sb2FkX2FjcV9zdG9yZV9yZWwgXHUwMDI2XHUwMDI2IGN0eC1cdTAwM2Vza2lwX2xvYWRfYWNxX3N0b3JlX3JlbCkge1xuK1x0XHR0ZXN0X19za2lwKCk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGV4ZWNfc3VidGVzdChjdHgsIHRlc3QsIGFjY2Vzc19zaXplLCBvbl9zdGFjayk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ1bl9zdWJ0ZXN0X3dpdGhfc2l6ZShzdHJ1Y3QgdGVzdF9jdHggKmN0eCwgc3RydWN0IHRlc3Rfc3BlYyAqdGVzdCxcbitcdFx0XHRcdCAgaW50IHNpemUpXG4re1xuK1x0cnVuX3N1YnRlc3Rfd2l0aF9zaXplX2FuZF9sb2NhdGlvbihjdHgsIHRlc3QsIHNpemUsIGZhbHNlKTtcbitcdGlmICghdGVzdC1cdTAwM2Vza2lwX29uX3N0YWNrX3Rlc3RpbmcpXG4rXHRcdHJ1bl9zdWJ0ZXN0X3dpdGhfc2l6ZV9hbmRfbG9jYXRpb24oY3R4LCB0ZXN0LCBzaXplLCB0cnVlKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnVuX3N1YnRlc3Qoc3RydWN0IHRlc3RfY3R4ICpjdHgsIHN0cnVjdCB0ZXN0X3NwZWMgKnRlc3QpXG4re1xuK1x0aWYgKHRlc3QtXHUwMDNlc2tpcF9tdWx0aV9zaXplX3Rlc3RpbmcpIHtcbitcdFx0cnVuX3N1YnRlc3Rfd2l0aF9zaXplKGN0eCwgdGVzdCwgdGVzdC1cdTAwM2VydW5fc2l6ZSk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGlmICghdGVzdC1cdTAwM2Vvbmx5XzMyX29yXzY0KSB7XG4rXHRcdHJ1bl9zdWJ0ZXN0X3dpdGhfc2l6ZShjdHgsIHRlc3QsIDEpO1xuK1x0XHRydW5fc3VidGVzdF93aXRoX3NpemUoY3R4LCB0ZXN0LCAyKTtcbitcdH1cbitcdHJ1bl9zdWJ0ZXN0X3dpdGhfc2l6ZShjdHgsIHRlc3QsIDQpO1xuK1x0cnVuX3N1YnRlc3Rfd2l0aF9zaXplKGN0eCwgdGVzdCwgOCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ1bl9ibGluZGluZ19zdWJ0ZXN0KHZvaWQpXG4re1xuK1x0c3RydWN0IHRlc3Rfc3BlYyBibGluZGluZ19zcGVjID0ge1xuK1x0XHQucHJvZ190eXBlID0gXCJzdF9ibGluZGVkXCIsXG4rXHRcdC5pc193cml0ZSA9IHRydWUsXG4rXHR9O1xuK1x0Y2hhciBicGZfaml0X2hhcmRlbiA9ICcyJztcbitcdHN0cnVjdCBrYXNhbl9oYXJkZW4gKnNrZWw7XG4rXHRzdHJ1Y3QgdGVzdF9jdHggKmN0eDtcbitcbitcdGlmICghdGVzdF9fc3RhcnRfc3VidGVzdChcInN0X2JsaW5kZWRcIikpXG4rXHRcdHJldHVybjtcbitcbitcdGN0eCA9IGNhbGxvYygxLCBzaXplb2YoKmN0eCkpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKGN0eCwgXCJhbGxvYyBibGluZGluZyBjdHhcIikpXG4rXHRcdHJldHVybjtcbitcdGN0eC1cdTAwM2VrbG9nX2ZkID0gLTE7XG4rXG4rXHRpZiAoc2V0X2JwZl9qaXRfaGFyZGVuKFx1MDAyNmJwZl9qaXRfaGFyZGVuKSlcbitcdFx0Z290byBmcmVlX2N0eDtcbitcbitcdHNrZWwgPSBrYXNhbl9oYXJkZW5fX29wZW5fYW5kX2xvYWQoKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcIm9wZW4gYW5kIGxvYWQgYmxpbmRlZCBwcm9nXCIpKVxuK1x0XHRnb3RvIHJlc3RvcmU7XG4rXG4rXHRjdHgtXHUwMDNla2xvZ19mZCA9IG9wZW5fa2VybmVsX2xvZ3MoKTtcbitcdGlmICghQVNTRVJUX09LX0ZEKGN0eC1cdTAwM2VrbG9nX2ZkLCBcIm9wZW4ga2VybmVsIGxvZ3NcIikpXG4rXHRcdGdvdG8gZGVzdHJveTtcbitcbitcdGN0eC1cdTAwM2VvYmogPSBza2VsLVx1MDAzZW9iajtcbitcdHN0cm5jcHkoY3R4LVx1MDAzZXByb2dfbmFtZSwgXCJzdF9ibGluZGVkXCIsIFBST0dfTkFNRV9NQVhfTEVOKTtcbitcbitcdGV4ZWNfc3VidGVzdChjdHgsIFx1MDAyNmJsaW5kaW5nX3NwZWMsIDEsIGZhbHNlKTtcbitcbitkZXN0cm95OlxuK1x0Y2xvc2UoY3R4LVx1MDAzZWtsb2dfZmQpO1xuK1x0a2FzYW5faGFyZGVuX19kZXN0cm95KHNrZWwpO1xuK3Jlc3RvcmU6XG4rXHRzZXRfYnBmX2ppdF9oYXJkZW4oXHUwMDI2YnBmX2ppdF9oYXJkZW4pO1xuK2ZyZWVfY3R4OlxuK1x0ZnJlZShjdHgpO1xuK31cbitcbitzdGF0aWMgc3RydWN0IHRlc3Rfc3BlYyB0ZXN0c1tdID0ge1xuK1x0e1xuK1x0XHQucHJvZ190eXBlID0gXCJzdFwiLFxuK1x0XHQuaXNfd3JpdGUgPSB0cnVlXG4rXHR9LFxuK1x0e1xuK1x0XHQucHJvZ190eXBlID0gXCJzdHhcIixcbitcdFx0LmlzX3dyaXRlID0gdHJ1ZVxuK1x0fSxcbitcdHtcbitcdFx0LnByb2dfdHlwZSA9IFwibGR4XCIsXG4rXHRcdC5pc193cml0ZSA9IGZhbHNlXG4rXHR9LFxuK1x0e1xuK1x0XHQucHJvZ190eXBlID0gXCJzaW1wbGVfYXRvbWljXCIsXG4rXHRcdC5pc193cml0ZSA9IHRydWUsXG4rXHRcdC5vbmx5XzMyX29yXzY0ID0gdHJ1ZVxuK1x0fSxcbitcdHtcbitcdFx0LnByb2dfdHlwZSA9IFwibG9hZF9hY3F1aXJlXCIsXG4rXHRcdC5pc193cml0ZSA9IGZhbHNlLFxuK1x0XHQubmVlZHNfbG9hZF9hY3Ffc3RvcmVfcmVsID0gdHJ1ZVxuK1x0fSxcbitcdHtcbitcdFx0LnByb2dfdHlwZSA9IFwic3RvcmVfcmVsZWFzZVwiLFxuK1x0XHQuaXNfd3JpdGUgPSB0cnVlLFxuK1x0XHQubmVlZHNfbG9hZF9hY3Ffc3RvcmVfcmVsID0gdHJ1ZVxuK1x0fSxcbitcdHtcbitcdFx0LnByb2dfdHlwZSA9IFwibGR4X3BhdGNoZWRcIixcbitcdFx0LmlzX3dyaXRlID0gZmFsc2UsXG4rXHRcdC5za2lwX211bHRpX3NpemVfdGVzdGluZyA9IHRydWUsXG4rXHRcdC5za2lwX29uX3N0YWNrX3Rlc3RpbmcgPSB0cnVlLFxuK1x0XHQucnVuX3NpemUgPSA0LFxuK1x0XHQucm5kX2hpMzIgPSB0cnVlXG4rXHR9LFxuK1x0e1xuK1x0XHQucHJvZ190eXBlID0gXCJsZHhfcGF0Y2hlZF9vbl9zdGFja1wiLFxuK1x0XHQuaXNfd3JpdGUgPSBmYWxzZSxcbitcdFx0LnNraXBfbXVsdGlfc2l6ZV90ZXN0aW5nID0gdHJ1ZSxcbitcdFx0LnNraXBfb25fc3RhY2tfdGVzdGluZyA9IHRydWUsXG4rXHRcdC5ydW5fc2l6ZSA9IDQsXG4rXHRcdC5leHBlY3Rfbm9fcmVwb3J0ID0gdHJ1ZSxcbitcdFx0LnJuZF9oaTMyID0gdHJ1ZVxuK1x0fSxcbitcdHtcbitcdFx0LnByb2dfdHlwZSA9IFwidmVyaWZpZXJfcGF0aHNfc3RhY2tfYW5kX25vbl9zdGFja1wiLFxuK1x0XHQuaXNfd3JpdGUgPSB0cnVlLFxuK1x0XHQuc2tpcF9tdWx0aV9zaXplX3Rlc3RpbmcgPSB0cnVlLFxuK1x0XHQuc2tpcF9vbl9zdGFja190ZXN0aW5nID0gdHJ1ZSxcbitcdFx0LnJ1bl9zaXplID0gMVxuK1x0fVxuK307XG4rXG4rdm9pZCB0ZXN0X2thc2FuKHZvaWQpXG4re1xuK1x0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCB2YWw7XG4rXHRzdHJ1Y3QgdGVzdF9zcGVjICp0ZXN0O1xuK1x0c3RydWN0IHRlc3RfY3R4ICpjdHg7XG4rXHRzdHJ1Y3Qga2FzYW4gKnNrZWw7XG4rXHRfX3UzMiBrZXkgPSAwO1xuK1x0aW50IGksIHJldDtcbitcbitcdGN0eCA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHRlc3RfY3R4KSk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoY3R4LCBcImFsbG9jIHRlc3QgY3R4XCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAoIWlzX2ppdF9lbmFibGVkKCkgfHwgIWdldF9rYXNhbl9qaXRfZW5hYmxlZCgpIHx8XG4rXHQgICAgIWdldF9rYXNhbl9tdWx0aV9zaG90X2VuYWJsZWQoKSkge1xuK1x0XHR0ZXN0X19za2lwKCk7XG4rXHRcdGdvdG8gZW5kO1xuK1x0fVxuK1xuK1x0c2tlbCA9IGthc2FuX19vcGVuKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJvcGVuIHByb2dcIikpXG4rXHRcdGdvdG8gZW5kO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh0ZXN0cyk7IGkrKykge1xuK1x0XHRzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2c7XG4rXG4rXHRcdGlmICghdGVzdHNbaV0ucm5kX2hpMzIpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHByb2cgPSBicGZfb2JqZWN0X19maW5kX3Byb2dyYW1fYnlfbmFtZShza2VsLVx1MDAzZW9iaixcbitcdFx0XHRcdFx0XHRcdHRlc3RzW2ldLnByb2dfdHlwZSk7XG4rXHRcdGlmICghQVNTRVJUX09LX1BUUihwcm9nLCBcImZpbmQgcm5kX2hpMzIgcHJvZ1wiKSlcbitcdFx0XHRnb3RvIGRlc3Ryb3k7XG4rXHRcdGJwZl9wcm9ncmFtX19zZXRfZmxhZ3MocHJvZywgQlBGX0ZfVEVTVF9STkRfSEkzMik7XG4rXHR9XG4rXG4rXHRpZiAoIUFTU0VSVF9PSyhrYXNhbl9fbG9hZChza2VsKSwgXCJsb2FkIHByb2dcIikpXG4rXHRcdGdvdG8gZGVzdHJveTtcbitcbitcdGN0eC1cdTAwM2VvYmogPSBza2VsLVx1MDAzZW9iajtcbitcdGN0eC1cdTAwM2VhY2Nlc3Nfc2l6ZSA9IFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZWFjY2Vzc19zaXplO1xuK1x0Y3R4LVx1MDAzZXNraXBfbG9hZF9hY3Ffc3RvcmVfcmVsID0gc2tlbC1cdTAwM2VkYXRhLVx1MDAzZXNraXBfbG9hZF9hY3Ffc3RvcmVfcmVsX3Rlc3RzO1xuK1xuK1x0Y3R4LVx1MDAzZWtsb2dfZmQgPSBvcGVuX2tlcm5lbF9sb2dzKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19GRChjdHgtXHUwMDNla2xvZ19mZCwgXCJvcGVuIGtlcm5lbCBsb2dzXCIpKVxuK1x0XHRnb3RvIGRlc3Ryb3k7XG4rXG4rXHQvKiBGaWxsIG1hcCB3aXRoIHJlY29nbml6YWJsZSB2YWx1ZXMgKi9cbitcdHJldCA9IGJwZl9tYXBfX2xvb2t1cF9lbGVtKHNrZWwtXHUwMDNlbWFwcy50ZXN0X21hcCwgXHUwMDI2a2V5LCBzaXplb2Yoa2V5KSxcbitcdFx0XHRcdCAgIFx1MDAyNnZhbCwgc2l6ZW9mKHZhbCksIDApO1xuK1x0aWYgKCFBU1NFUlRfT0socmV0LCBcImdldCBtYXBcIikpXG4rXHRcdGdvdG8gY2xvc2U7XG4rXHR2YWwuZGF0YV8xID0gMHhBQTtcbitcdHZhbC5kYXRhXzIgPSAweEJCQkI7XG4rXHR2YWwuZGF0YV80ID0gMHhDQ0NDQ0NDQztcbitcdHZhbC5kYXRhXzggPSAweEREREREREREREREREREREQ7XG4rXHRyZXQgPSBicGZfbWFwX191cGRhdGVfZWxlbShza2VsLVx1MDAzZW1hcHMudGVzdF9tYXAsIFx1MDAyNmtleSwgc2l6ZW9mKGtleSksXG4rXHRcdFx0XHQgICBcdTAwMjZ2YWwsIHNpemVvZih2YWwpLCAwKTtcbitcdGlmICghQVNTRVJUX09LKHJldCwgXCJzZXQgbWFwXCIpKVxuK1x0XHRnb3RvIGNsb3NlO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh0ZXN0cyk7IGkrKykge1xuK1x0XHR0ZXN0ID0gXHUwMDI2dGVzdHNbaV07XG4rXHRcdHJ1bl9zdWJ0ZXN0KGN0eCwgdGVzdCk7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogQmxpbmRpbmcgc3VidGVzdCBpcyBoYW5kbGVkIGRpZmZlcmVudGx5IGFzIGl0IG5lZWRzIHRoZVxuK1x0ICogY29ycmVzcG9uZGluZyBwcm9ncmFtIHRvIGJlIGxvYWRlZCB3aXRoIGJwZl9qaXRfaGFyZGVuIHJhaXNlZFxuK1x0ICovXG4rXHRydW5fYmxpbmRpbmdfc3VidGVzdCgpO1xuK1xuK2Nsb3NlOlxuK1x0Y2xvc2UoY3R4LVx1MDAzZWtsb2dfZmQpO1xuK2Rlc3Ryb3k6XG4rXHRrYXNhbl9fZGVzdHJveShza2VsKTtcbitlbmQ6XG4rXHRmcmVlKGN0eCk7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rYXNhbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2thc2FuLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uODJkZGNlMzA1OWFlZTFcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rYXNhbi5jXG5AQCAtMCwwICsxLDM5NCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIEJTRC0zLUNsYXVzZVxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX21pc2MuaFwiXG4rI2luY2x1ZGUgXHUwMDNjc3RkYm9vbC5oXHUwMDNlXG4rXG4rZXh0ZXJuIHZvaWQgYnBmX2tmdW5jX2thc2FuX3BvaXNvbih2b2lkICptZW0sIF9fdTMyIG1lbV9fc3opIF9fa3N5bTtcbitleHRlcm4gdm9pZCBicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odm9pZCAqbWVtLCBfX3UzMiBtZW1fX3N6KSBfX2tzeW07XG4rXG4raW50IGFjY2Vzc19zaXplO1xuK1xuK3N0cnVjdCBrYXNhbl93cml0ZV92YWwge1xuK1x0X191OCBkYXRhXzE7XG4rXHRfX3UxNiBkYXRhXzI7XG4rXHRfX3UzMiBkYXRhXzQ7XG4rXHRfX3U2NCBkYXRhXzg7XG4rfTtcbitcbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuK1x0X190eXBlKGtleSwgX191MzIpO1xuK1x0X190eXBlKHZhbHVlLCBzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKTtcbit9IHRlc3RfbWFwIFNFQyhcIi5tYXBzXCIpO1xuK1xuK1NFQyhcInRjeC9pbmdyZXNzXCIpXG4raW50IHN0X29uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbit7XG4rXHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsIHZhbDtcbitcbitcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24oXHUwMDI2dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuK1x0c3dpdGNoIChhY2Nlc3Nfc2l6ZSkge1xuK1x0Y2FzZSAxOlxuK1x0XHR2YWwuZGF0YV8xID0gMHhBQTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIDI6XG4rXHRcdHZhbC5kYXRhXzIgPSAweEFBO1xuK1x0XHRicmVhaztcbitcdGNhc2UgNDpcbitcdFx0dmFsLmRhdGFfNCA9IDB4QUE7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSA4OlxuK1x0XHR2YWwuZGF0YV84ID0gMHhBQTtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24oXHUwMDI2dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInRjeC9pbmdyZXNzXCIpXG4raW50IHN0X25vdF9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpXG4re1xuK1x0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCAqdmFsO1xuK1x0X191MzIga2V5ID0gMDtcbitcbitcdHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2dGVzdF9tYXAsIFx1MDAyNmtleSk7XG4rXHRpZiAoIXZhbClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbitcdHN3aXRjaCAoYWNjZXNzX3NpemUpIHtcbitcdGNhc2UgMTpcbitcdFx0dmFsLVx1MDAzZWRhdGFfMSA9IDB4QUE7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSAyOlxuK1x0XHR2YWwtXHUwMDNlZGF0YV8yID0gMHhBQTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIDQ6XG4rXHRcdHZhbC1cdTAwM2VkYXRhXzQgPSAweEFBO1xuK1x0XHRicmVhaztcbitcdGNhc2UgODpcbitcdFx0dmFsLVx1MDAzZWRhdGFfOCA9IDB4QUE7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1x0YnBmX2tmdW5jX2thc2FuX3VucG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJ0Y3gvaW5ncmVzc1wiKVxuK2ludCBzdHhfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuK3tcbitcdHN0cnVjdCBrYXNhbl93cml0ZV92YWwgdmFsO1xuK1xuK1x0YnBmX2tmdW5jX2thc2FuX3BvaXNvbihcdTAwMjZ2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4rXHRzd2l0Y2ggKGFjY2Vzc19zaXplKSB7XG4rXHRjYXNlIDE6XG4rXHRcdHZhbC5kYXRhXzEgPSBhY2Nlc3Nfc2l6ZTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIDI6XG4rXHRcdHZhbC5kYXRhXzIgPSBhY2Nlc3Nfc2l6ZTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIDQ6XG4rXHRcdHZhbC5kYXRhXzQgPSBhY2Nlc3Nfc2l6ZTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIDg6XG4rXHRcdHZhbC5kYXRhXzggPSBhY2Nlc3Nfc2l6ZTtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24oXHUwMDI2dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInRjeC9pbmdyZXNzXCIpXG4raW50IHN0eF9ub3Rfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuK3tcbitcdHN0cnVjdCBrYXNhbl93cml0ZV92YWwgKnZhbDtcbitcdF9fdTMyIGtleSA9IDA7XG4rXG4rXHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnRlc3RfbWFwLCBcdTAwMjZrZXkpO1xuK1x0aWYgKCF2YWwpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0YnBmX2tmdW5jX2thc2FuX3BvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4rXHRzd2l0Y2ggKGFjY2Vzc19zaXplKSB7XG4rXHRjYXNlIDE6XG4rXHRcdHZhbC1cdTAwM2VkYXRhXzEgPSBhY2Nlc3Nfc2l6ZTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIDI6XG4rXHRcdHZhbC1cdTAwM2VkYXRhXzIgPSBhY2Nlc3Nfc2l6ZTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIDQ6XG4rXHRcdHZhbC1cdTAwM2VkYXRhXzQgPSBhY2Nlc3Nfc2l6ZTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIDg6XG4rXHRcdHZhbC1cdTAwM2VkYXRhXzggPSBhY2Nlc3Nfc2l6ZTtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInRjeC9pbmdyZXNzXCIpXG4raW50IGxkeF9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpXG4re1xuK1x0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCB2YWw7XG4rXG4rXHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKFx1MDAyNnZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbitcdHN3aXRjaCAoYWNjZXNzX3NpemUpIHtcbitcdGNhc2UgMTpcbitcdFx0X19zaW5rKHZhbC5kYXRhXzEpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgMjpcbitcdFx0X19zaW5rKHZhbC5kYXRhXzIpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgNDpcbitcdFx0X19zaW5rKHZhbC5kYXRhXzQpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgODpcbitcdFx0X19zaW5rKHZhbC5kYXRhXzgpO1xuK1x0XHRicmVhaztcbitcdH1cbitcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbihcdTAwMjZ2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwidGN4L2luZ3Jlc3NcIilcbitpbnQgbGR4X25vdF9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpXG4re1xuK1x0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCAqdmFsO1xuK1x0X191MzIga2V5ID0gMDtcbitcbitcdHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2dGVzdF9tYXAsIFx1MDAyNmtleSk7XG4rXHRpZiAoIXZhbClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbitcdHN3aXRjaCAoYWNjZXNzX3NpemUpIHtcbitcdGNhc2UgMTpcbitcdFx0X19zaW5rKHZhbC1cdTAwM2VkYXRhXzEpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgMjpcbitcdFx0X19zaW5rKHZhbC1cdTAwM2VkYXRhXzIpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgNDpcbitcdFx0X19zaW5rKHZhbC1cdTAwM2VkYXRhXzQpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgODpcbitcdFx0X19zaW5rKHZhbC1cdTAwM2VkYXRhXzgpO1xuK1x0XHRicmVhaztcbitcdH1cbitcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwidGN4L2luZ3Jlc3NcIilcbitpbnQgbGR4X3BhdGNoZWQoc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuK3tcbitcdHN0cnVjdCBrYXNhbl93cml0ZV92YWwgKnZhbDtcbitcdF9fdTMyIGtleSA9IDA7XG4rXG4rXHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnRlc3RfbWFwLCBcdTAwMjZrZXkpO1xuK1x0aWYgKCF2YWwpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0YnBmX2tmdW5jX2thc2FuX3BvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4rXHRfX3NpbmsodmFsLVx1MDAzZWRhdGFfNCk7XG4rXHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInRjeC9pbmdyZXNzXCIpXG4raW50IGxkeF9wYXRjaGVkX29uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbit7XG4rXHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsIHZhbDtcbitcbitcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24oXHUwMDI2dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuK1x0X19zaW5rKHZhbC5kYXRhXzQpO1xuK1x0YnBmX2tmdW5jX2thc2FuX3VucG9pc29uKFx1MDAyNnZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJ0Y3gvaW5ncmVzc1wiKVxuK2ludCBzaW1wbGVfYXRvbWljX29uX3N0YWNrKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbit7XG4rXHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsIHZhbDtcbitcbitcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24oXHUwMDI2dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuK1x0c3dpdGNoIChhY2Nlc3Nfc2l6ZSkge1xuK1x0Y2FzZSA0OlxuK1x0XHRfX3N5bmNfZmV0Y2hfYW5kX2FkZChcdTAwMjZ2YWwuZGF0YV80LCA0KTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIDg6XG4rXHRcdF9fc3luY19mZXRjaF9hbmRfYWRkKFx1MDAyNnZhbC5kYXRhXzgsIDgpO1xuK1x0XHRicmVhaztcbitcdH1cbitcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbihcdTAwMjZ2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwidGN4L2luZ3Jlc3NcIilcbitpbnQgc2ltcGxlX2F0b21pY19ub3Rfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuK3tcbitcdHN0cnVjdCBrYXNhbl93cml0ZV92YWwgKnZhbDtcbitcdF9fdTMyIGtleSA9IDA7XG4rXG4rXHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnRlc3RfbWFwLCBcdTAwMjZrZXkpO1xuK1x0aWYgKCF2YWwpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0YnBmX2tmdW5jX2thc2FuX3BvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4rXHRzd2l0Y2ggKGFjY2Vzc19zaXplKSB7XG4rXHRjYXNlIDQ6XG4rXHRcdF9fc3luY19mZXRjaF9hbmRfYWRkKFx1MDAyNnZhbC1cdTAwM2VkYXRhXzQsIDQpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgODpcbitcdFx0X19zeW5jX2ZldGNoX2FuZF9hZGQoXHUwMDI2dmFsLVx1MDAzZWRhdGFfOCwgOCk7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1x0YnBmX2tmdW5jX2thc2FuX3VucG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbitcdHJldHVybiAwO1xuK31cbitcbisjaWZkZWYgX19CUEZfRkVBVFVSRV9MT0FEX0FDUV9TVE9SRV9SRUxcbitib29sIHNraXBfbG9hZF9hY3Ffc3RvcmVfcmVsX3Rlc3RzIFNFQyhcIi5kYXRhXCIpID0gMDtcbitcbitTRUMoXCJ0Y3gvaW5ncmVzc1wiKVxuK2ludCBsb2FkX2FjcXVpcmVfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuK3tcbitcdHN0cnVjdCBrYXNhbl93cml0ZV92YWwgdmFsO1xuK1xuK1x0YnBmX2tmdW5jX2thc2FuX3BvaXNvbihcdTAwMjZ2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4rXHRzd2l0Y2ggKGFjY2Vzc19zaXplKSB7XG4rXHRjYXNlIDE6XG4rXHRcdF9fYXRvbWljX2xvYWRfbihcdTAwMjZ2YWwuZGF0YV8xLCBfX0FUT01JQ19BQ1FVSVJFKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIDI6XG4rXHRcdF9fYXRvbWljX2xvYWRfbihcdTAwMjZ2YWwuZGF0YV8yLCBfX0FUT01JQ19BQ1FVSVJFKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIDQ6XG4rXHRcdF9fYXRvbWljX2xvYWRfbihcdTAwMjZ2YWwuZGF0YV80LCBfX0FUT01JQ19BQ1FVSVJFKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIDg6XG4rXHRcdF9fYXRvbWljX2xvYWRfbihcdTAwMjZ2YWwuZGF0YV84LCBfX0FUT01JQ19BQ1FVSVJFKTtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24oXHUwMDI2dmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInRjeC9pbmdyZXNzXCIpXG4raW50IGxvYWRfYWNxdWlyZV9ub3Rfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuK3tcbitcdHN0cnVjdCBrYXNhbl93cml0ZV92YWwgKnZhbDtcbitcdF9fdTMyIGtleSA9IDA7XG4rXG4rXHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnRlc3RfbWFwLCBcdTAwMjZrZXkpO1xuK1x0aWYgKCF2YWwpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0YnBmX2tmdW5jX2thc2FuX3BvaXNvbih2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4rXHRzd2l0Y2ggKGFjY2Vzc19zaXplKSB7XG4rXHRjYXNlIDE6XG4rXHRcdF9fYXRvbWljX2xvYWRfbihcdTAwMjZ2YWwtXHUwMDNlZGF0YV8xLCBfX0FUT01JQ19BQ1FVSVJFKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIDI6XG4rXHRcdF9fYXRvbWljX2xvYWRfbihcdTAwMjZ2YWwtXHUwMDNlZGF0YV8yLCBfX0FUT01JQ19BQ1FVSVJFKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIDQ6XG4rXHRcdF9fYXRvbWljX2xvYWRfbihcdTAwMjZ2YWwtXHUwMDNlZGF0YV80LCBfX0FUT01JQ19BQ1FVSVJFKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIDg6XG4rXHRcdF9fYXRvbWljX2xvYWRfbihcdTAwMjZ2YWwtXHUwMDNlZGF0YV84LCBfX0FUT01JQ19BQ1FVSVJFKTtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInRjeC9pbmdyZXNzXCIpXG4raW50IHN0b3JlX3JlbGVhc2Vfb25fc3RhY2soc3RydWN0IF9fc2tfYnVmZiAqc2tiKVxuK3tcbitcdHN0cnVjdCBrYXNhbl93cml0ZV92YWwgdmFsO1xuK1xuK1x0YnBmX2tmdW5jX2thc2FuX3BvaXNvbihcdTAwMjZ2YWwsIHNpemVvZihzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsKSk7XG4rXHRzd2l0Y2ggKGFjY2Vzc19zaXplKSB7XG4rXHRjYXNlIDE6XG4rXHRcdF9fYXRvbWljX3N0b3JlX24oXHUwMDI2dmFsLmRhdGFfMSwgMHhBQSwgX19BVE9NSUNfUkVMRUFTRSk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSAyOlxuK1x0XHRfX2F0b21pY19zdG9yZV9uKFx1MDAyNnZhbC5kYXRhXzIsIDB4QkJCQiwgX19BVE9NSUNfUkVMRUFTRSk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSA0OlxuK1x0XHRfX2F0b21pY19zdG9yZV9uKFx1MDAyNnZhbC5kYXRhXzQsIDB4Q0NDQ0NDQ0MsIF9fQVRPTUlDX1JFTEVBU0UpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgODpcbitcdFx0X19hdG9taWNfc3RvcmVfbihcdTAwMjZ2YWwuZGF0YV84LCAweEREREREREREREREREREREQsXG4rXHRcdFx0XHQgX19BVE9NSUNfUkVMRUFTRSk7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1x0YnBmX2tmdW5jX2thc2FuX3VucG9pc29uKFx1MDAyNnZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJ0Y3gvaW5ncmVzc1wiKVxuK2ludCBzdG9yZV9yZWxlYXNlX25vdF9vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpXG4re1xuK1x0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCAqdmFsO1xuK1x0X191MzIga2V5ID0gMDtcbitcbitcdHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2dGVzdF9tYXAsIFx1MDAyNmtleSk7XG4rXHRpZiAoIXZhbClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZhbCwgc2l6ZW9mKHN0cnVjdCBrYXNhbl93cml0ZV92YWwpKTtcbitcdHN3aXRjaCAoYWNjZXNzX3NpemUpIHtcbitcdGNhc2UgMTpcbitcdFx0X19hdG9taWNfc3RvcmVfbihcdTAwMjZ2YWwtXHUwMDNlZGF0YV8xLCAweEFBLCBfX0FUT01JQ19SRUxFQVNFKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIDI6XG4rXHRcdF9fYXRvbWljX3N0b3JlX24oXHUwMDI2dmFsLVx1MDAzZWRhdGFfMiwgMHhCQkJCLCBfX0FUT01JQ19SRUxFQVNFKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIDQ6XG4rXHRcdF9fYXRvbWljX3N0b3JlX24oXHUwMDI2dmFsLVx1MDAzZWRhdGFfNCwgMHhDQ0NDQ0NDQywgX19BVE9NSUNfUkVMRUFTRSk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSA4OlxuK1x0XHRfX2F0b21pY19zdG9yZV9uKFx1MDAyNnZhbC1cdTAwM2VkYXRhXzgsIDB4RERERERERERERERERERERCxcbitcdFx0XHRcdCBfX0FUT01JQ19SRUxFQVNFKTtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuK1x0cmV0dXJuIDA7XG4rfVxuKyNlbHNlXG4rYm9vbCBza2lwX2xvYWRfYWNxX3N0b3JlX3JlbF90ZXN0cyBTRUMoXCIuZGF0YVwiKSA9IDE7XG4rI2VuZGlmXG4rXG4rU0VDKFwidGN4L2luZ3Jlc3NcIilcbitpbnQgdmVyaWZpZXJfcGF0aHNfc3RhY2tfYW5kX25vbl9zdGFjayhzdHJ1Y3QgX19za19idWZmICpza2IpXG4re1xuK1x0c3RydWN0IGthc2FuX3dyaXRlX3ZhbCBzdGFja192YWwgPSB7fTtcbitcdHN0cnVjdCBrYXNhbl93cml0ZV92YWwgKnZhbDtcbitcdHZvaWQgKnB0cjtcbitcdF9fdTMyIGtleSA9IDA7XG4rXG4rXHR2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnRlc3RfbWFwLCBcdTAwMjZrZXkpO1xuK1x0aWYgKCF2YWwpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKGFjY2Vzc19zaXplKVxuK1x0XHRwdHIgPSB2YWw7XG4rXHRlbHNlXG4rXHRcdHB0ciA9IFx1MDAyNnN0YWNrX3ZhbDtcbitcbitcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24odmFsLCBzaXplb2YoKnZhbCkpO1xuK1x0KihfX3U4ICopcHRyID0gMHhBQTtcbitcdGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2YWwsIHNpemVvZigqdmFsKSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rY2hhciBMSUNFTlNFW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2thc2FuX2hhcmRlbi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2thc2FuX2hhcmRlbi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjgwOGQ3ZGE2NDQyMTYyXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva2FzYW5faGFyZGVuLmNcbkBAIC0wLDAgKzEsNDEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBCU0QtMy1DbGF1c2VcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbitcbitleHRlcm4gdm9pZCBicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZvaWQgKm1lbSwgX191MzIgbWVtX19zeikgX19rc3ltO1xuK2V4dGVybiB2b2lkIGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2b2lkICptZW0sIF9fdTMyIG1lbV9fc3opIF9fa3N5bTtcbitcbitzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsIHtcbitcdF9fdTggZGF0YV8xO1xuK1x0X191MTYgZGF0YV8yO1xuK1x0X191MzIgZGF0YV80O1xuK1x0X191NjQgZGF0YV84O1xuK307XG4rXG4rc3RydWN0IHtcbitcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xuK1x0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbitcdF9fdHlwZShrZXksIF9fdTMyKTtcbitcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IGthc2FuX3dyaXRlX3ZhbCk7XG4rfSB0ZXN0X21hcCBTRUMoXCIubWFwc1wiKTtcbitcbitTRUMoXCJ0Y3gvaW5ncmVzc1wiKVxuK2ludCBzdF9ibGluZGVkKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYilcbit7XG4rXHRzdHJ1Y3Qga2FzYW5fd3JpdGVfdmFsICp2YWw7XG4rXHRfX3UzMiBrZXkgPSAwO1xuK1xuK1x0dmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZ0ZXN0X21hcCwgXHUwMDI2a2V5KTtcbitcdGlmICghdmFsKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGJwZl9rZnVuY19rYXNhbl9wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuK1x0dmFsLVx1MDAzZWRhdGFfMSA9IDB4QUE7XG4rXHRicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24odmFsLCBzaXplb2Yoc3RydWN0IGthc2FuX3dyaXRlX3ZhbCkpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2NoYXIgTElDRU5TRVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXG5pbmRleCAzMGYxY2QyMzA5M2NiZS4uNWQ2YTgzNGY3ZDc1NzUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXG5AQCAtMjcxLDYgKzI3MSwyNiBAQCBfX2JwZl9rZnVuYyB2b2lkIGJwZl9rZnVuY19wdXRfZGVmYXVsdF90cnVzdGVkX3B0cl90ZXN0KHN0cnVjdCBwcm9nX3Rlc3RfbWVtYmVyXG4gXHQgKi9cbiB9XG4gXG4rI2lmZGVmIENPTkZJR19CUEZfSklUX0tBU0FOXG4rXG4rZXh0ZXJuIHZvaWQga2FzYW5fcG9pc29uKGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBzaXplLCB1OCB2YWx1ZSwgYm9vbCBpbml0KTtcbitcbisjZGVmaW5lIEtBU0FOX1NMQUJfRlJFRSAweEZCXG4rXG4rX19icGZfa2Z1bmMgdm9pZCBicGZfa2Z1bmNfa2FzYW5fcG9pc29uKHZvaWQgKm1lbSwgdTMyIG1lbV9fc3opXG4re1xuK1x0a2FzYW5fcG9pc29uKG1lbSwgbWVtX19zeiwgS0FTQU5fU0xBQl9GUkVFLCBmYWxzZSk7XG4rfVxuK1xuK19fYnBmX2tmdW5jIHZvaWQgYnBmX2tmdW5jX2thc2FuX3VucG9pc29uKHZvaWQgKm1lbSwgdTMyIG1lbV9fc3opXG4re1xuK1x0a2FzYW5fcG9pc29uKG1lbSwgbWVtX19zeiwgMHgwMCwgZmFsc2UpO1xuK31cbisjZWxzZVxuK19fYnBmX2tmdW5jIHZvaWQgYnBmX2tmdW5jX2thc2FuX3BvaXNvbih2b2lkICptZW0sIHUzMiBtZW1fX3N6KSB7IH1cbitfX2JwZl9rZnVuYyB2b2lkIGJwZl9rZnVuY19rYXNhbl91bnBvaXNvbih2b2lkICptZW0sIHUzMiBtZW1fX3N6KSB7IH1cbisjZW5kaWZcbitcbiBfX2JwZl9rZnVuYyBzdHJ1Y3QgYnBmX3Rlc3Rtb2RfY3R4ICpcbiBicGZfdGVzdG1vZF9jdHhfY3JlYXRlKGludCAqZXJyKVxuIHtcbkBAIC03NDAsNiArNzYwLDggQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0XzEpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0XzIpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19nZXRfZGVmYXVsdF90cnVzdGVkX3B0cl90ZXN0KTtcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX3B1dF9kZWZhdWx0X3RydXN0ZWRfcHRyX3Rlc3QpO1xuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfa2FzYW5fcG9pc29uKVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfa2FzYW5fdW5wb2lzb24pXG4gQlRGX0tGVU5DU19FTkQoYnBmX3Rlc3Rtb2RfY29tbW9uX2tmdW5jX2lkcylcbiBcbiBCVEZfSURfTElTVChicGZfdGVzdG1vZF9kdG9yX2lkcylcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmNcbmluZGV4IGM5NzBlNzc5M2RmY2JjLi43MzdmNjY4YjM1ZTIzYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5jXG5AQCAtNTE5LDYgKzUxOSwzOCBAQCBib29sIGlzX2ppdF9lbmFibGVkKHZvaWQpXG4gXHRyZXR1cm4gZW5hYmxlZDtcbiB9XG4gXG4raW50IHNldF9icGZfaml0X2hhcmRlbihjaGFyICpsZXZlbClcbit7XG4rXHRjaGFyIG9sZF9sZXZlbDtcbitcdGludCBlcnIgPSAtMTtcbitcdGludCBmZCA9IC0xO1xuK1xuK1x0ZmQgPSBvcGVuKFwiL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfaGFyZGVuXCIsIE9fUkRXUiB8IE9fTk9OQkxPQ0spO1xuK1x0aWYgKGZkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRlcnIgPSByZWFkKGZkLCBcdTAwMjZvbGRfbGV2ZWwsIDEpO1xuK1x0aWYgKGVyciAhPSAxKSB7XG4rXHRcdGVyciA9IC0xO1xuK1x0XHRnb3RvIGVuZDtcbitcdH1cbitcbitcdGxzZWVrKGZkLCAwLCBTRUVLX1NFVCk7XG4rXG4rXHRlcnIgPSB3cml0ZShmZCwgbGV2ZWwsIDEpO1xuK1x0aWYgKGVyciAhPSAxKSB7XG4rXHRcdGVyciA9IC0xO1xuK1x0XHRnb3RvIGVuZDtcbitcdH1cbitcbitcdGVyciA9IDA7XG4rXHQqbGV2ZWwgPSBvbGRfbGV2ZWw7XG4rZW5kOlxuK1x0aWYgKGZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UoZmQpO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4gaW50IHN0YWNrX21wcm90ZWN0KHZvaWQpXG4ge1xuIFx0dm9pZCAqYnVmO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0aW5nX2hlbHBlcnMuaFxuaW5kZXggMmVkYzZmYjdmYzUyMTIuLmUwMDY0MmFmZTg2ZjQwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3RpbmdfaGVscGVycy5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdGluZ19oZWxwZXJzLmhcbkBAIC01OSw2ICs1OSw3IEBAIHN0cnVjdCBicGZfaW5zbjtcbiBpbnQgZ2V0X3hsYXRlZF9wcm9ncmFtKGludCBmZF9wcm9nLCBzdHJ1Y3QgYnBmX2luc24gKipidWYsIF9fdTMyICpjbnQpO1xuIGludCB0ZXN0aW5nX3Byb2dfZmxhZ3Modm9pZCk7XG4gYm9vbCBpc19qaXRfZW5hYmxlZCh2b2lkKTtcbitpbnQgc2V0X2JwZl9qaXRfaGFyZGVuKGNoYXIgKmxldmVsKTtcbiBpbnQgc3RhY2tfbXByb3RlY3Qodm9pZCk7XG4gXG4gI2VuZGlmIC8qIF9fVEVTVElOR19IRUxQRVJTX0ggKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdW5wcml2X2hlbHBlcnMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi91bnByaXZfaGVscGVycy5jXG5pbmRleCBmOTk3ZDdlYzhmZDA4Ni4uOTViZTgzOTM3ODgzNzYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdW5wcml2X2hlbHBlcnMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3VucHJpdl9oZWxwZXJzLmNcbkBAIC0xNDIsMyArMTQyLDEzIEBAIGJvb2wgZ2V0X3VucHJpdl9kaXNhYmxlZCh2b2lkKVxuIFx0fVxuIFx0cmV0dXJuIG1pdGlnYXRpb25zX29mZjtcbiB9XG4rXG4rYm9vbCBnZXRfa2FzYW5faml0X2VuYWJsZWQodm9pZClcbit7XG4rXHRyZXR1cm4gY29uZmlnX2NvbnRhaW5zKFwiQ09ORklHX0JQRl9KSVRfS0FTQU49eVwiKSA9PSAxO1xuK31cbitcbitib29sIGdldF9rYXNhbl9tdWx0aV9zaG90X2VuYWJsZWQodm9pZClcbit7XG4rXHRyZXR1cm4gY21kbGluZV9jb250YWlucyhcImthc2FuX211bHRpX3Nob3RcIik7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi91bnByaXZfaGVscGVycy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3VucHJpdl9oZWxwZXJzLmhcbmluZGV4IDE1MWY2NzMyOTY2NTIyLi5hN2NlYjUxNTc3Y2RjMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi91bnByaXZfaGVscGVycy5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdW5wcml2X2hlbHBlcnMuaFxuQEAgLTUsMyArNSw1IEBAXG4gI2RlZmluZSBVTlBSSVZfU1lTQ1RMIFwia2VybmVsL3VucHJpdmlsZWdlZF9icGZfZGlzYWJsZWRcIlxuIFxuIGJvb2wgZ2V0X3VucHJpdl9kaXNhYmxlZCh2b2lkKTtcbitib29sIGdldF9rYXNhbl9qaXRfZW5hYmxlZCh2b2lkKTtcbitib29sIGdldF9rYXNhbl9tdWx0aV9zaG90X2VuYWJsZWQodm9pZCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNDozMjoyMC4wODcyMjM2NDJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzQ4Mzg1NjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtBU0FOIEJQRiBKSVQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBhIG5ldyBwYXRjaCBoZXJlIHRoYXQgaW50cm9kdWNlcyBLQVNBTiBzdXBwb3J0IGZvciB0aGUgQlBGIEpJVCBjb21waWxlciBvbiB4ODYuIE15IGluaXRpYWwgZ2xhbmNlIHRlbGxzIG1lIGl0IHRvdWNoZXMgYSBmYWlyIG51bWJlciBvZiBmaWxlczogYGFyY2gveDg2L0tjb25maWdgLCBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYCwgc29tZSBpbmNsdWRlIGZpbGVzIGxpa2UgYGJwZl92ZXJpZmllci5oYCBhbmQgYGZpbHRlci5oYCwgYSBjb3VwbGUgb2YgS2NvbmZpZyBmaWxlcyBhbmQgY29yZSBicGYgZmlsZXMsIGFuZCBldmVuIHNvbWUgdGVzdHMuIFRoYXQncyBhIHJlYXNvbmFibGUgc2NvcGUgZm9yIHRoaXMga2luZCBvZiBmZWF0dXJlLlxuXG5UaGUgcmVhbCBtZWF0IG9mIHRoZSBjaGFuZ2VzIGFwcGVhcnMgdG8gYmUgaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AgYW5kIGBrZXJuZWwvYnBmL2ZpeHVwcy5jYCwgc28gSSdsbCBwcmlvcml0aXplIHRob3NlLiBUaGUgcGF0Y2ggaXMgZGVmaW5pdGVseSBmdW5jdGlvbmFsLCB0aGUgY29kZSBpcyB3ZWxsLXN0cnVjdHVyZWQsIGFuZCBpdCdzIHdvcnRoIHRoZSBlZmZvcnQgdG8gZnV6eiBpdCB0aG9yb3VnaGx5LlxuXG5Ob3csIGxldCdzIHBpbnBvaW50IHRoZSBjcnVjaWFsIGZ1bmN0aW9ucyB0byBzY3J1dGluaXplLiBJbiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYCwgSSdsbCBiZSBmb2N1c2luZyBvbjogYGVtaXRfa2FzYW5fY2hlY2tgIChvYnZpb3VzbHkgY3JpdGljYWwhKSwgYGVtaXRfc3RgLCBgZW1pdF9hdG9taWNfbGRfc3RgLCBhbmQgYWx0aG91Z2ggYGRvX2ppdGAgaXMgYSBob3QgcGF0aCwgSSBtaWdodCB3YW50IHRvIGF2b2lkIGdldHRpbmcgdG9vIGJvZ2dlZCBkb3duIHRoZXJlIGluaXRpYWxseS4gVGhlbiwgaW4gYGtlcm5lbC9icGYvZml4dXBzLmNgLCBJIHdhbnQgdG8gZm9jdXMgb24gYGFkanVzdF9pbnNuX2F1eF9kYXRhYCwgYGJwZl9wYXRjaF9pbnNuX2RhdGFgLCBhbmQgYGJwZl9kb19taXNjX2ZpeHVwc2AuIEluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIEknbGwgY2hlY2sgYGNoZWNrX21lbV9hY2Nlc3NgIGFuZCBgbWFya19ub25fc3RhY2tfYWNjZXNzYC5cblxuUmVnYXJkaW5nIHRoZSBjb25maWd1cmF0aW9ucywgdGhlIGNyaXRpY2FsIG9uZSBpcyBgQ09ORklHX0JQRl9KSVRfS0FTQU5gLCB3aGljaCBkZXBlbmRzIG9uIGBIQVZFX0VCUEZfSklUX0tBU0FOYCwgYEtBU0FOX0dFTkVSSUNgLCBgS0FTQU5fVk1BTExPQ2AsIGFuZCBgQlBGX0pJVGAuICBTbywgdGhlIGltcG9ydGFudCB0aGluZyBoZXJlIGlzIHRvIG1ha2Ugc3VyZSB0aGF0IGBCUEZfSklUX0tBU0FOYCBpcyBlbmFibGVkLlxuXG5JJ20gcmVhZHkgdG8gdXNlIHRoZSB0b29scyB0byBzeXN0ZW1hdGljYWxseSB2ZXJpZnkgdGhlc2UgZnVuY3Rpb25zLiBJJ2xsIGZvY3VzIG9uIG1lbW9yeSBzYWZldHkgd2l0aGluIHRoZSBKSVQnZCBjb2RlLCBlc3BlY2lhbGx5IGluIHRob3NlIGF0b21pYyBvcGVyYXRpb25zIGFuZCBtZW1vcnkgYWNjZXNzIGZ1bmN0aW9ucy4gVGhpcyBsb29rcyBwcm9taXNpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MTk5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDQ6MzI6MjYuODM1NjEwODMyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMTMzMjE5NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZW1pdF9rYXNhbl9jaGVja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTExMz1zdGF0aWMgdm9pZCBtYXliZV9lbWl0XzFtb2QodTggKipwcHJvZywgdTMyIHJlZywgYm9vbCBpczY0KVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTExMjMtXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjExMjQ6c3RhdGljIGludCBlbWl0X2thc2FuX2NoZWNrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHU4ICoqcHByb2csXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTExMjUtXFx0XFx0XFx0ICAgIHUzMiBhZGRyX3JlZywgc3RydWN0IGJwZl9pbnNuICppbnNuLCB1OCAqaXAsXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTU3OT1zdGF0aWMgaW50IGVtaXRfYXRvbWljX2xkX3N0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHU4ICoqcHByb2csXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTU4Ny1cXHRjYXNlIEJQRl9MT0FEX0FDUTpcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTU4ODpcXHRcXHRlcnIgPSBlbWl0X2thc2FuX2NoZWNrKGVudiwgcHByb2csIHNyY19yZWcsIGluc24sIGlwLCBmYWxzZSxcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTU4OS1cXHRcXHRcXHRcXHQgICAgICAgYWNjZXNzZXNfc3RhY2tfb25seSk7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTU5Ni1cXHRjYXNlIEJQRl9TVE9SRV9SRUw6XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE1OTc6XFx0XFx0ZXJyID0gZW1pdF9rYXNhbl9jaGVjayhlbnYsIHBwcm9nLCBkc3RfcmVnLCBpbnNuLCBpcCwgdHJ1ZSxcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTU5OC1cXHRcXHRcXHRcXHQgICAgICAgYWNjZXNzZXNfc3RhY2tfb25seSk7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTg0OD1zdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKmFkZHJzLCB1OCAqaW1hZ2UsXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjM4Ni1cXHRcXHRjYXNlIEJQRl9TVCB8IEJQRl9NRU0gfCBCUEZfRFc6XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjIzODc6XFx0XFx0XFx0ZXJyID0gZW1pdF9rYXNhbl9jaGVjayhlbnYsIFxcdTAwMjZwcm9nLCBkc3RfcmVnLCBpbnNuLCBpcCxcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjM4OC1cXHRcXHRcXHRcXHRcXHQgICAgICAgdHJ1ZSwgYWNjZXNzZXNfc3RhY2tfb25seSk7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjQxMC1cXHRcXHRcXHR9XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjI0MTE6XFx0XFx0XFx0ZXJyID0gZW1pdF9rYXNhbl9jaGVjayhlbnYsIFxcdTAwMjZwcm9nLCBkc3RfcmVnLCBpbnNuLCBpcCxcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjQxMi1cXHRcXHRcXHRcXHRcXHQgICAgICAgdHJ1ZSwgYWNjZXNzZXNfc3RhY2tfb25seSk7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjU3Ni1cXHRcXHRcXHR9IGVsc2Uge1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoyNTc3OlxcdFxcdFxcdFxcdGVyciA9IGVtaXRfa2FzYW5fY2hlY2soZW52LCBcXHUwMDI2cHJvZywgc3JjX3JlZyxcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjU3OC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgaW5zbiwgaXAsIGZhbHNlLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI2NjctXFx0XFx0XFx0aWYgKCFicGZfYXRvbWljX2lzX2xvYWRfc3RvcmUoaW5zbikpIHtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjY2ODpcXHRcXHRcXHRcXHRlcnIgPSBlbWl0X2thc2FuX2NoZWNrKGVudiwgXFx1MDAyNnByb2csIHJlYWxfZHN0X3JlZyxcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjY2OS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgaW5zbiwgaXAsIHRydWUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA0OjMyOjI5LjE0ODkzODExMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMzkyMDgxNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIGNvZGUgbG9jYXRpb25zLCB0aGlua2luZyBhcyBJIHdvdWxkOlxuXG4qKklkZW50aWZ5aW5nIFByb21pc2luZyBDYW5kaWRhdGVzIGZvciBGb2N1c1N5bWJvbHMqKlxuXG5Pa2F5LCBsZXQncyBzZWUuLi4gbG9va2luZyBhdCBwb3RlbnRpYWwgY2FuZGlkYXRlcyBmb3Igb3B0aW1pemF0aW9uIHdpdGggYEZvY3VzU3ltYm9sc2AsIHRoZSBmdW5jdGlvbiBgZW1pdF9rYXNhbl9jaGVja2AgZGVmaW5pdGVseSBsZWFwcyBvdXQuIFNlZW1zIGxpa2UgaXQncyBsaWtlbHkgYSBob3Qgc3BvdCwgYW5kIGl0cyBiZWhhdmlvciBjb3VsZCBiZW5lZml0IGZyb20gdGhlIGtpbmQgb2YgcHJlY2lzZSBjb250cm9sIGBGb2N1c1N5bWJvbHNgIG9mZmVycy4gV29ydGggaW52ZXN0aWdhdGluZyB0aGUgc3BlY2lmaWNzIG9mIGl0cyB1c2FnZSB3aXRoaW4gdGhlIGxhcmdlciBjb250ZXh0LCBvZiBjb3Vyc2UsIGJ1dCBpdCdzIGEgc3Ryb25nIGZpcnN0IGNvbnRlbmRlci5cblxuQW5kIHRoZW4gdGhlcmUncyBgYWRqdXN0X2luc25fYXV4X2RhdGFgIGluIGBrZXJuZWwvYnBmL2ZpeHVwcy5jYC4gVGhhdCBmaWxlIG5hbWUgc3VnZ2VzdHMgaXQncyByZWxhdGVkIHRvIHNvbWUgc29ydCBvZiBsb3ctbGV2ZWwgaW5zdHJ1Y3Rpb24gbWFuaXB1bGF0aW9uIG9yIGRhdGEgYWRqdXN0bWVudCwgd2hpY2ggYWxzbyBzb3VuZHMgcHJvbWlzaW5nLiBJ4oCZZCB3YW50IHRvIGRpdmUgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgZnJlcXVlbmN5IG9mIGV4ZWN1dGlvbiBhbmQgcG90ZW50aWFsIGltcGFjdCBvZiBvcHRpbWl6aW5nIHRoaXMgZnVuY3Rpb24gYXMgYSBGb2N1c1N5bWJvbC4gSXQgcHJvYmFibHkgbWVyaXRzIGEgY2xvc2VyIGxvb2ssIGdpdmVuIHRoYXQgZmlsZS4gSXQgaXMgdGhlIHR5cGUgb2YgZnVuY3Rpb24gd2hlcmUgb3B0aW1pemF0aW9uIGNvdWxkIHlpZWxkIHN1YnN0YW50aWFsIHJld2FyZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMTMyLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDQ6MzI6MzIuMzg4MTQ4ODY4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzMxMDg0NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWRqdXN0X2luc25fYXV4X2RhdGFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9maXh1cHMuYz0xNTU9c3RhdGljIGJvb2wgaXNfbWVtX2luc24oc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNzAtICovXFxua2VybmVsL2JwZi9maXh1cHMuYzoxNzE6c3RhdGljIHZvaWQgYWRqdXN0X2luc25fYXV4X2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE3Mi1cXHRcXHRcXHRcXHQgc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZywgdTMyIG9mZiwgdTMyIGNudCxcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9Mjc4PXN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLFxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0zMDMtXFx0fVxcbmtlcm5lbC9icGYvZml4dXBzLmM6MzA0OlxcdGFkanVzdF9pbnNuX2F1eF9kYXRhKGVudiwgbmV3X3Byb2csIG9mZiwgbGVuLCBpbnNuX29mZl9pbl9wYXRjaCk7XFxua2VybmVsL2JwZi9maXh1cHMuYy0zMDUtXFx0YWRqdXN0X3N1YnByb2dfc3RhcnRzKGVudiwgb2ZmLCBsZW4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNDozMjozNC4yNjEyNjIyMTJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDY2MTI4MDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBzdW1tYXJpemVkLCBhc3N1bWluZyBJJ20gYWxyZWFkeSBwcmV0dHkgZmFtaWxpYXIgd2l0aCBlQlBGOlxuXG4qKkluc3BlY3RpbmcgYGJwZl9wYXRjaF9pbnNuX2RhdGFgKipcblxuQWxyaWdodCwgdGltZSB0byBmb2N1cy4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgYnBmX3BhdGNoX2luc25fZGF0YWAgZnVuY3Rpb24uIEkgYWxyZWFkeSBoYXZlIGEgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGlzIGxpa2VseSBvcGVyYXRlcywgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgbXkgdW5kZXJzdGFuZGluZyBpcyBhY2N1cmF0ZSwgYW5kIGlkZW50aWZ5IGV4YWN0bHkgd2hhdCdzIGdvaW5nIG9uIHVuZGVyIHRoZSBob29kLiBJIHN1c3BlY3QgaXQncyByZXNwb25zaWJsZSBmb3IgbW9kaWZ5aW5nIHRoZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhIHNwZWNpZmljIGVCUEYgaW5zdHJ1Y3Rpb24g4oCTIG1heWJlIHBhdGNoaW5nIGluIG5ldyB2YWx1ZXMsIG9yIHVwZGF0aW5nIHNvbWUgbWV0YWRhdGEuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGhhbmRsZXMgZXJyb3IgY29uZGl0aW9ucyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQuIEFueSBzdWJ0bGUgbWlzdGFrZXMgaGVyZSBjb3VsZCBpbnRyb2R1Y2Ugc2VyaW91cyB2dWxuZXJhYmlsaXRpZXMsIHNvIEknbSBnb2luZyB0byBiZSB2ZXJ5IHRob3JvdWdoLiBMZXQncyBzZWUgaG93IGl0IGhhbmRsZXMgdGhpbmdzIGxpa2UgYWxpZ25tZW50LCBib3VuZHMgY2hlY2tpbmcsIGFuZCBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucy4gSSBuZWVkIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cgYW5kIHVuZGVyc3RhbmQgYW55IHNpZGUgZWZmZWN0cy4gSSdtIGhvcGluZyB0byBxdWlja2x5IGlkZW50aWZ5IGFueSBhcmVhcyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBkdXJpbmcgcnVudGltZS4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscyFcblxuXG4iLCJJbnB1dFRva2VucyI6MzA2ODksIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNDozMjozNy4zMjczOTMyNjFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzMzI4MTcwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfcGF0Y2hfaW5zbl9kYXRhXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZmlsdGVyLmg9MTIwOD1zdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX3NpbmdsZShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBvZmYsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTEyMTEtI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6MTIxMjpzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wYXRjaF9pbnNuX2RhdGEoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIG9mZixcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTEyMTMtXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCB1MzIgbGVuLFxcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD0xMjE2PXZvaWQgYnBmX3Jlc3RvcmVfaW5zbl9hdXhfZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0xMjE4LSNlbHNlXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoxMjE5OnN0YXRpYyBpbmxpbmUgc3RydWN0IGJwZl9wcm9nICpicGZfcGF0Y2hfaW5zbl9kYXRhKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0xMjIwLVxcdFxcdFxcdFxcdFxcdFxcdCAgIHUzMiBvZmYsXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0xNTU1PXN0cnVjdCBicGZfcHJvZyAqYnBmX2ppdF9ibGluZF9jb25zdGFudHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMTU2OS1cXG5rZXJuZWwvYnBmL2NvcmUuYzoxNTcwOlxcdC8qIG1ha2Ugc3VyZSBicGZfcGF0Y2hfaW5zbl9kYXRhKCkgcGF0Y2hlcyB0aGUgY29ycmVjdCBwcm9nICovXFxua2VybmVsL2JwZi9jb3JlLmMtMTU3MS1cXHRpZiAoZW52KVxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMTYwMS1cXHRcXHRpZiAoZW52KVxcbmtlcm5lbC9icGYvY29yZS5jOjE2MDI6XFx0XFx0XFx0dG1wID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGksIGluc25fYnVmZiwgcmV3cml0dGVuLCByZXdyaXR0ZW4gLSAxKTtcXG5rZXJuZWwvYnBmL2NvcmUuYy0xNjAzLVxcdFxcdGVsc2VcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9MjY0PXN0YXRpYyB2b2lkIGFkanVzdF9wb2tlX2Rlc2NzKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIG9mZiwgdTMyIGxlbilcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjc3LVxcbmtlcm5lbC9icGYvZml4dXBzLmM6Mjc4OnN0cnVjdCBicGZfcHJvZyAqYnBmX3BhdGNoX2luc25fZGF0YShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgb2ZmLFxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjc5LVxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgdTMyIGxlbixcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmM9NjE0PWludCBicGZfb3B0X3N1YnJlZ196ZXh0X2xvMzJfcm5kX2hpMzIoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtNzAyLWFwcGx5X3BhdGNoX2J1ZmZlcjpcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjcwMzpcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBhZGpfaWR4LCBwYXRjaCwgcGF0Y2hfbGVuLCAwKTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTcwNC1cXHRcXHRpZiAoIW5ld19wcm9nKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYz03MjA9aW50IGJwZl9jb252ZXJ0X2N0eF9hY2Nlc3NlcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy03NDctXFx0XFx0XFx0aW5zbl9idWZbY250KytdID0gZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VpbnNuc2lbMF07XFxua2VybmVsL2JwZi9maXh1cHMuYzo3NDg6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgMCwgaW5zbl9idWYsIGNudCwgMSk7XFxua2VybmVsL2JwZi9maXh1cHMuYy03NDktXFx0XFx0XFx0aWYgKCFuZXdfcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtNzcwLVxcdFxcdH0gZWxzZSBpZiAoY250KSB7XFxua2VybmVsL2JwZi9maXh1cHMuYzo3NzE6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgMCwgaW5zbl9idWYsIGNudCxcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTc3Mi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250IC0gMSk7XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTgwMy1cXHRcXHRcXHRjbnQgPSBwYXRjaCAtIGluc25fYnVmO1xcbmtlcm5lbC9icGYvZml4dXBzLmM6ODA0OlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxua2VybmVsL2JwZi9maXh1cHMuYy04MDUtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgY250IC0gMSk7XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTg3Ny1cXHRcXHRcXHRjbnQgPSBwYXRjaCAtIGluc25fYnVmO1xcbmtlcm5lbC9icGYvZml4dXBzLmM6ODc4OlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxua2VybmVsL2JwZi9maXh1cHMuYy04NzktXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgMCk7XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTEwMDktXFx0XFx0bmV3X3Byb2cgPVxcbmtlcm5lbC9icGYvZml4dXBzLmM6MTAxMDpcXHRcXHRcXHRicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250LCAtMSk7XFxua2VybmVsL2JwZi9maXh1cHMuYy0xMDExLVxcdFxcdGlmICghbmV3X3Byb2cpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTE0ODc9c3RhdGljIGludCBhZGRfaGlkZGVuX3N1YnByb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgaW50IGxlbilcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTQ5OS1cXHQgKiBvbmVzIGZvciB0aGUgaGlkZGVuIHN1YnByb2cuIEhlbmNlIGFsbCBvZiB0aGUgYWRqdXN0bWVudCBvcGVyYXRpb25zXFxua2VybmVsL2JwZi9maXh1cHMuYzoxNTAwOlxcdCAqIGluIGJwZl9wYXRjaF9pbnNuX2RhdGEgYXJlIG5vLW9wcy5cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE1MDEtXFx0ICovXFxua2VybmVsL2JwZi9maXh1cHMuYzoxNTAyOlxcdHByb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgZW52LVxcdTAwM2Vwcm9nLVxcdTAwM2VsZW4gLSAxLCBwYXRjaCwgbGVuLCAwKTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE1MDMtXFx0aWYgKCFwcm9nKVxcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYz0xNTE2PWludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTU4Ni1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE1ODc6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE1ODgtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgMCk7XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE2ODMtXFxua2VybmVsL2JwZi9maXh1cHMuYzoxNjg0OlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNjg1LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIGluc25fb2ZmX2luX3BhdGNoKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTcxNi1cXHRcXHRcXHRjbnQgPSBwYXRjaCAtIGluc25fYnVmO1xcbmtlcm5lbC9icGYvZml4dXBzLmM6MTcxNzpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTcxOC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCBpbnNuX29mZl9pbl9wYXRjaCk7XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE3MzctXFxua2VybmVsL2JwZi9maXh1cHMuYzoxNzM4OlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNzM5LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIDApO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0xNzkxLVxcbmtlcm5lbC9icGYvZml4dXBzLmM6MTc5MjpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTc5My1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCBjbnQgLSAxKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTgzNy1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE4Mzg6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE4MzktXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgMyk7XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE4NTktXFxua2VybmVsL2JwZi9maXh1cHMuYzoxODYwOlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxua2VybmVsL2JwZi9maXh1cHMuYy0xODYxLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIDIpO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0xODgxLVxcbmtlcm5lbC9icGYvZml4dXBzLmM6MTg4MjpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTg4My1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCBjbnQgLSAxKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTk2OS1cXHRcXHRcXHRjbnQgPSAzO1xcbmtlcm5lbC9icGYvZml4dXBzLmM6MTk3MDpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTk3MS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCBjbnQgLSAxKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjAwMy1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIwMDQ6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwMDUtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgY250IC0gMSk7XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIwMjMtXFxua2VybmVsL2JwZi9maXh1cHMuYzoyMDI0OlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMDI1LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIGNudCAtIDEpO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMDY0LVxcbmtlcm5lbC9icGYvZml4dXBzLmM6MjA2NTpcXHRcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMDY2LVxcdFxcdFxcdFxcdFxcdGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZiwgY250LCAtMSk7XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIxNDctXFxua2VybmVsL2JwZi9maXh1cHMuYzoyMTQ4OlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMTQ5LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIC0xKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjE3Ni0jZW5kaWZcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIxNzc6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIxNzgtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgLTEpO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMTk1LVxcbmtlcm5lbC9icGYvZml4dXBzLmM6MjE5NjpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjE5Ny1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCAtMSk7XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIyMzAtXFxua2VybmVsL2JwZi9maXh1cHMuYzoyMjMxOlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMjMyLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIC0xKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjI2My1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIyNjQ6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIyNjUtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgLTEpO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMjkwLVxcbmtlcm5lbC9icGYvZml4dXBzLmM6MjI5MTpcXHRcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBpICsgZGVsdGEsIGluc25fYnVmLFxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjI5Mi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY250LCAtMSk7XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIzMDctXFxua2VybmVsL2JwZi9maXh1cHMuYzoyMzA4OlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMzA5LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICAxLCAtMSk7XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIzNjMtXFxua2VybmVsL2JwZi9maXh1cHMuYzoyMzY0OlxcdFxcdFxcdG5ld19wcm9nID0gYnBmX3BhdGNoX2luc25fZGF0YShlbnYsIGkgKyBkZWx0YSwgaW5zbl9idWYsXFxua2VybmVsL2JwZi9maXh1cHMuYy0yMzY1LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjbnQsIC0xKTtcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjM4Mi1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIzODM6XFx0XFx0XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgaSArIGRlbHRhLCBpbnNuX2J1ZixcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIzODQtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNudCwgLTEpO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYy0yNDUxLVxcbmtlcm5lbC9icGYvZml4dXBzLmM6MjQ1MjpcXHRcXHRuZXdfcHJvZyA9IGJwZl9wYXRjaF9pbnNuX2RhdGEoZW52LCBzdWJwcm9nX3N0YXJ0LCBpbnNuX2J1ZiwgY250LCBjbnQgLSAxKTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI0NTMtXFx0XFx0aWYgKCFuZXdfcHJvZylcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMjQ1OS1cXHRcXHQgKiB0byBpbnNuIGFmdGVyIEJQRl9TVCB0aGF0IGluaXRzIG1heV9nb3RvIGNvdW50Llxcbmtlcm5lbC9icGYvZml4dXBzLmM6MjQ2MDpcXHRcXHQgKiBBZGp1c3RtZW50IHdpbGwgc3VjY2VlZCBiZWNhdXNlIGJwZl9wYXRjaF9pbnNuX2RhdGEoKSBkaWRuJ3QgZmFpbC5cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI0NjEtXFx0XFx0ICovXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTI0ODk9c3RhdGljIHN0cnVjdCBicGZfcHJvZyAqaW5saW5lX2JwZl9sb29wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI1NTAtXFx0KnRvdGFsX2NudCA9IGNudDtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjI1NTE6XFx0bmV3X3Byb2cgPSBicGZfcGF0Y2hfaW5zbl9kYXRhKGVudiwgcG9zaXRpb24sIGluc25fYnVmLCBjbnQsIC0xKTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTI1NTItXFx0aWYgKCFuZXdfcHJvZylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDQ6MzI6MzguOTYwNjc4NDA5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU4NzQ5MzAwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBgYnBmX3BhdGNoX2luc25fZGF0YWAgQ2hhbmdlKipcblxuQWxyaWdodCwgc28gdGhlIGBicGZfcGF0Y2hfaW5zbl9kYXRhYCBmdW5jdGlvbiBoYXMgYmVlbiB1cGRhdGVkLCBub3cgYWNjZXB0aW5nIGBpbnNuX29mZl9pbl9wYXRjaGAuIFRoYXQncyBhIGtleSBmdW5jdGlvbiwgZnVuZGFtZW50YWwgdG8gdGhlIHZlcmlmaWVyIGFuZCBmaXh1cCBtZWNoYW5pc21zIHdpdGhpbiBCUEYuIEtub3dpbmcgdGhlIG9mZnNldCBvZiB0aGUgaW5zdHJ1Y3Rpb24gd2l0aGluIHRoZSBwYXRjaCBpdHNlbGYgaXMgZ29pbmcgdG8gYmUgY3J1Y2lhbC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2Ugd2l0aGluIHRoZSBicm9hZGVyIEJQRiBlY29zeXN0ZW0uXG5cbkxldCdzIGRpZyBpbnRvIHRoZSBjb3JlLiBJIG5lZWQgdG8gZ2V0IGludG8gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFRoYXQncyB3aGVyZSB0aGUgaGVhcnQgb2YgdGhlIHZlcmlmaWVyIGxvZ2ljIGxpZXMuIFRoaXMgY2hhbmdlLCBhZGRpbmcgdGhlIG9mZnNldCwgc3VnZ2VzdHMgdGhlcmUncyBzb21lIHJlZmluZW1lbnQgaGFwcGVuaW5nIGluIGhvdyB3ZSBoYW5kbGUgQlBGIGNvZGUgbW9kaWZpY2F0aW9ucyBvciBwYXRjaGVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgd2UgbmVlZCB0aGlzIG9mZnNldCBub3cuIElzIGl0IGZvciBtb3JlIHByZWNpc2UgZXJyb3IgcmVwb3J0aW5nPyBJbXByb3ZlZCBwYXRjaGluZyBjYXBhYmlsaXRpZXM/IE9yIHBlcmhhcHMgc29tZXRoaW5nIG1vcmUgc3VidGxlIHJlbGF0ZWQgdG8gaW5zdHJ1Y3Rpb24gcmV3cml0aW5nIG9yIHZlcmlmaWNhdGlvbiB3aXRoaW4gYSBtb2RpZmllZCBjb2RlIGJsb2NrPyBUaW1lIHRvIGNyYWNrIG9wZW4gdGhhdCBmaWxlIGFuZCBzZWUgd2hhdCdzIGNoYW5nZWQuIFRoaXMgY291bGQgYmUgYSBzaWduaWZpY2FudCBvcHRpbWl6YXRpb24gb3IgYSBjcnVjaWFsIHN0ZXAgdG93YXJkcyBtb3JlIGFkdmFuY2VkIEJQRiBjYXBhYmlsaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0NTU3LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDQ6MzI6NDIuNTQ4MTcyOTQxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI3NzczMTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hcmtfbm9uX3N0YWNrX2FjY2Vzc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MzIwNT1zdGF0aWMgdm9pZCBtYXJrX2luZGlyZWN0X3RhcmdldChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWR4KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTMyMDktXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjMyMTA6c3RhdGljIHZvaWQgbWFya19ub25fc3RhY2tfYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpZHgpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTMyMTEte1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTYxNTE9c3RhdGljIGludCBjaGVja19tZW1fYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDA5LVxcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2IHJlZy1cXHUwMDNldHlwZSAhPSBQVFJfVE9fU1RBQ0spXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY0MTA6XFx0XFx0bWFya19ub25fc3RhY2tfYWNjZXNzKGVudiwgaW5zbl9pZHgpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NDExLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNDozMjo0NC4xNzU5NTE5NzlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM1MzcyNzIwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDdXJyZW50IEFzc2Vzc21lbnQgb2YgdGhlIEtBU0FOIEJQRiBKSVQgSW50ZWdyYXRpb24qKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSwgYGNoZWNrX21lbV9hY2Nlc3NgIGlzIGEgYmVhc3Q7IEkgdGhpbmsgd2Ugc2hvdWxkIHByb2JhYmx5IHNpZGVzdGVwIHRoYXQgZm9yIG5vdy4gVGhlIHNtYWxsZXIgaGVscGVyLCBgbWFya19ub25fc3RhY2tfYWNjZXNzYCwgc2VlbXMgbGlrZSBhIG1vcmUgbWFuYWdlYWJsZSBlbnRyeSBwb2ludC4gTGV0J3Mgc2VlLi4uIGxvb2tpbmcgYXQgcG90ZW50aWFsIGZvY3VzIHN5bWJvbHMsIGBhZGp1c3RfaW5zbl9hdXhfZGF0YWAgY291bGQgYmUgYSBnb29kIGNhbmRpZGF0ZSwgYXMgd2VsbCBhcyBgZW1pdF9rYXNhbl9jaGVja2AsIGBlbWl0X3N0YCwgYW5kIGBlbWl0X2F0b21pY19sZF9zdGAuIFRoZXNlIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaG93IHRoZSBjaGVja3MgYXJlIGJlaW5nIGludGVncmF0ZWQuXG5cbk5vdywgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIGNvbmZpZ3VyYXRpb24gc2lkZSBvZiB0aGluZ3MuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19CUEZfSklUX0tBU0FOYCBpcyB0aGUgbmV3IGtleSBjb25maWcgaGVyZS4gSXQncyBkZXBlbmRlbnQgb24gYSBmZXcgb3RoZXJzOiBgSEFWRV9FQlBGX0pJVF9LQVNBTmAsIGBLQVNBTl9HRU5FUklDYCwgYEtBU0FOX1ZNQUxMT0NgLCBhbmQgb2YgY291cnNlLCBgQlBGX0pJVGAuIEdpdmVuIHRoZSBkZXBlbmRlbmNpZXMsIGVuYWJsaW5nIGBCUEZfSklUX0tBU0FOYCBpcyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8uXG5cbkJ1dCBhcmUgdGhlcmUgYW55IG90aGVyIGNvbmZpZ3Mgd2UgbmVlZCB0byBiZSBhd2FyZSBvZj8gTGV0J3Mgc2VlLi4uIGBDT05GSUdfSEFWRV9FQlBGX0pJVF9LQVNBTmAgaXMgYWxyZWFkeSBzZWxlY3RlZCBieSB4ODZfNjQuIFRoYXTigJlzIGdvb2QsIGl0IHN1Z2dlc3RzIHRoYXQgYEJQRl9KSVRfS0FTQU5gIGlzIHRoZSBvbmx5IG9uZSB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgbWFuYWdlLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdsbCBkb3VibGUtY2hlY2sgdGhlIGBrZXJuZWwvYnBmL0tjb25maWdgIGZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MTQyLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA0OjMyOjQ5LjUyOTY4MjA0OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzMDg5NzcwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUEZfSklUX0tBU0FOXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4Nlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0yMzUtXFx0c2VsZWN0IEhBVkVfRUJQRl9KSVRcXG5hcmNoL3g4Ni9LY29uZmlnOjIzNjpcXHRzZWxlY3QgSEFWRV9FQlBGX0pJVF9LQVNBTlxcdFxcdGlmIFg4Nl82NFxcbmFyY2gveDg2L0tjb25maWctMjM3LVxcdHNlbGVjdCBIQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjMtXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjI0OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUEZfSklUX0tBU0FOKVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yNS12b2lkIF9fYXNhbl9sb2FkMSh2b2lkICpwKTtcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xMTI0PXN0YXRpYyBpbnQgZW1pdF9rYXNhbl9jaGVjayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1OCAqKnBwcm9nLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTExMjcte1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMTI4OiNpZmRlZiBDT05GSUdfQlBGX0pJVF9LQVNBTlxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMTI5LVxcdHUzMiBicGZfc2l6ZSA9IEJQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEyMDMtXFx0KnBwcm9nID0gcHJvZztcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTIwNDojZW5kaWYgLyogQ09ORklHX0JQRl9KSVRfS0FTQU4gKi9cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTIwNS1cXHRyZXR1cm4gMDtcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZz0xNz1jb25maWcgSEFWRV9FQlBGX0pJVFxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTIwLSMgS0FTQU4gc3VwcG9ydCBmb3IgSklUIGNvbXBpbGVyXFxua2VybmVsL2JwZi9LY29uZmlnOjIxOmNvbmZpZyBIQVZFX0VCUEZfSklUX0tBU0FOXFxua2VybmVsL2JwZi9LY29uZmlnLTIyLVxcdGJvb2xcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZz05Nj1jb25maWcgQlBGX0xTTVxcbi0tXFxua2VybmVsL2JwZi9LY29uZmlnLTEwNy1cXG5rZXJuZWwvYnBmL0tjb25maWc6MTA4OmNvbmZpZyBCUEZfSklUX0tBU0FOXFxua2VybmVsL2JwZi9LY29uZmlnLTEwOS1cXHRib29sXFxua2VybmVsL2JwZi9LY29uZmlnOjExMDpcXHRkZXBlbmRzIG9uIEhBVkVfRUJQRl9KSVRfS0FTQU5cXG5rZXJuZWwvYnBmL0tjb25maWctMTExLVxcdGRlcGVuZHMgb24gS0FTQU5fR0VORVJJQ1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYz0yNjU9X19icGZfa2Z1bmMgdm9pZCBicGZfa2Z1bmNfcHV0X2RlZmF1bHRfdHJ1c3RlZF9wdHJfdGVzdChzdHJ1Y3QgcHJvZ190ZXN0X21lbWJlciAqdHJ1c3RlZF9wdHIpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jLTI3My1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jOjI3NDojaWZkZWYgQ09ORklHX0JQRl9KSVRfS0FTQU5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jLTI3NS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi91bnByaXZfaGVscGVycy5jPTE0Nj1ib29sIGdldF9rYXNhbl9qaXRfZW5hYmxlZCh2b2lkKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi91bnByaXZfaGVscGVycy5jLTE0Ny17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3VucHJpdl9oZWxwZXJzLmM6MTQ4OlxcdHJldHVybiBjb25maWdfY29udGFpbnMoXFxcIkNPTkZJR19CUEZfSklUX0tBU0FOPXlcXFwiKSA9PSAxO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi91bnByaXZfaGVscGVycy5jLTE0OS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA0OjMyOjUxLjE2MDU4NDk5NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTczMTAwMjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEJQRiBKSVQgS0FTQU4gSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIHRvIGVuYWJsZSB0aGUgS0FTQU4gY2hlY2tzIGZvciB0aGUgQlBGIEpJVCwgaXQncyBgQlBGX0pJVF9LQVNBTmAsIGdvdCBpdC4gTm93LCBsZXQncyBicmVhayBkb3duIHRoZXNlIGBGb2N1c1N5bWJvbHNgIHRoZXkgbWVudGlvbmVkLiBXZSd2ZSBnb3QgYGVtaXRfa2FzYW5fY2hlY2tgLCBgZW1pdF9zdGAsIGBlbWl0X2F0b21pY19sZF9zdGAsIGBhZGp1c3RfaW5zbl9hdXhfZGF0YWAsIGFuZCBgYnBmX3BhdGNoX2luc25fZGF0YWAuXG5cbkhhbmcgb24gYSBzZWNvbmQsIGBicGZfcGF0Y2hfaW5zbl9kYXRhYD8gSXNuJ3QgdGhhdCBhIHByZXR0eSBjb3JlIGZ1bmN0aW9uIGZvciB0aGUgdmVyaWZpZXI/IEFoLCB5ZXMsIGl0J3MgY2FsbGVkIGR1cmluZyBmaXh1cHMuIFNpbmNlIGl0J3MgaW4gdGhlIGZpeHVwIHBhdGgsIGZ1enppbmcgdGhhdCBzaG91bGQgYmUgcGVyZmVjdGx5IGFjY2VwdGFibGUuIFRoZSBzYW1lIGlzIHRydWUgZm9yIGBhZGp1c3RfaW5zbl9hdXhfZGF0YWA7IGFsc28gZml4dXBzLiBUaGF0IG1ha2VzIHNlbnNlLlxuXG5Ob3csIGxldCdzIGp1c3QgY29uZmlybSB3aGV0aGVyIGBlbWl0X3N0YCBpcyBhIG5ldyBmdW5jdGlvbiwgb3Igc29tZXRoaW5nIGVsc2UgaXMgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NzM0LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA0OjMyOjU1LjMzMzY4Njk0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjcxMDU3MzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVtaXRfc3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA4NzggbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmFyY2gvYXJtL25ldC9icGZfaml0XzMyLmM9MTIwOD1zdGF0aWMgYm9vbCBpc19sZHN0X2ltbTgoczE2IG9mZiwgY29uc3QgdTggc2l6ZSlcXG4tLVxcbmFyY2gvYXJtL25ldC9icGZfaml0XzMyLmMtMTIyNi0vKiAqKHNpemUgKikoZHN0ICsgb2ZmKSA9IHNyYyAqL1xcbmFyY2gvYXJtL25ldC9icGZfaml0XzMyLmM6MTIyNzpzdGF0aWMgaW5saW5lIHZvaWQgZW1pdF9zdHJfcihjb25zdCBzOCBkc3QsIGNvbnN0IHM4IHNyY1tdLFxcbmFyY2gvYXJtL25ldC9icGZfaml0XzMyLmMtMTIyOC1cXHRcXHRcXHQgICAgICBzMTYgb2ZmLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBjb25zdCB1OCBzeil7XFxuLS1cXG5hcmNoL2FybS9uZXQvYnBmX2ppdF8zMi5jPTE1ODk9c3RhdGljIGludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcXG4tLVxcbmFyY2gvYXJtL25ldC9icGZfaml0XzMyLmMtMTg5NS1cXHRcXHR9XFxuYXJjaC9hcm0vbmV0L2JwZl9qaXRfMzIuYzoxODk2OlxcdFxcdGVtaXRfc3RyX3IoZHN0X2xvLCB0bXAyLCBvZmYsIGN0eCwgQlBGX1NJWkUoY29kZSkpO1xcbmFyY2gvYXJtL25ldC9icGZfaml0XzMyLmMtMTg5Ny1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gvYXJtL25ldC9icGZfaml0XzMyLmMtMTkwNy1cXHRcXHRycyA9IGFybV9icGZfZ2V0X3JlZzY0KHNyYywgdG1wMiwgY3R4KTtcXG5hcmNoL2FybS9uZXQvYnBmX2ppdF8zMi5jOjE5MDg6XFx0XFx0ZW1pdF9zdHJfcihkc3RfbG8sIHJzLCBvZmYsIGN0eCwgQlBGX1NJWkUoY29kZSkpO1xcbmFyY2gvYXJtL25ldC9icGZfaml0XzMyLmMtMTkwOS1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTEyMTE9c3RhdGljIGNvbnN0IHU4IHN0YWNrX2FyZ19yZWdbXSA9IHsgQTY0X1IoNSksIEE2NF9SKDYpLCBBNjRfUig3KSB9O1xcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTIxNC1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxMjE1OnN0YXRpYyB2b2lkIGVtaXRfc3RhY2tfYXJnX2xvYWQodTggZHN0LCBzMTYgYnBmX29mZiwgc3RydWN0IGppdF9jdHggKmN0eClcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMjE2LXtcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTEyMjQtXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MTIyNTpzdGF0aWMgdm9pZCBlbWl0X3N0YWNrX2FyZ19zdG9yZSh1OCBzcmNfYTY0LCBzMTYgYnBmX29mZiwgc3RydWN0IGppdF9jdHggKmN0eClcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMjI2LXtcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTEyMzQtXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MTIzNTpzdGF0aWMgdm9pZCBlbWl0X3N0YWNrX2FyZ19zdG9yZV9pbW0oczMyIGltbSwgczE2IGJwZl9vZmYsIGNvbnN0IHU4IHRtcCwgc3RydWN0IGppdF9jdHggKmN0eClcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMjM2LXtcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTEyNTM9c3RhdGljIGludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTE3MDItXFx0XFx0aWYgKGluc24tXFx1MDAzZXNyY19yZWcgPT0gQlBGX1JFR19QQVJBTVMpIHtcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxNzAzOlxcdFxcdFxcdGVtaXRfc3RhY2tfYXJnX2xvYWQoZHN0LCBvZmYsIGN0eCk7XFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTcwNC1cXHRcXHRcXHRicmVhaztcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTE4MTUtXFx0XFx0aWYgKGluc24tXFx1MDAzZWRzdF9yZWcgPT0gQlBGX1JFR19QQVJBTVMpIHtcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxODE2OlxcdFxcdFxcdGVtaXRfc3RhY2tfYXJnX3N0b3JlX2ltbShpbW0sIG9mZiwgdG1wLCBjdHgpO1xcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTE4MTctXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xODg0LVxcdFxcdGlmIChpbnNuLVxcdTAwM2Vkc3RfcmVnID09IEJQRl9SRUdfUEFSQU1TKSB7XFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MTg4NTpcXHRcXHRcXHRlbWl0X3N0YWNrX2FyZ19zdG9yZShzcmMsIG9mZiwgY3R4KTtcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xODg2LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYz0yOTE9c3RhdGljIGludCBlbWl0X2JwZl90YWlsX2NhbGwoc3RydWN0IGppdF9jdHggKmN0eCwgaW50IGluc24pXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTM2MS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjM2MjpzdGF0aWMgdm9pZCBlbWl0X3N0b3JlX3N0YWNrX2ltbTY0KHN0cnVjdCBqaXRfY3R4ICpjdHgsIGludCByZWcsIGludCBzdGFja19vZmYsIHU2NCBpbW02NClcXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTM2My17XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jPTE3MDU9c3RhdGljIGludCBpbnZva2VfYnBmX3Byb2coc3RydWN0IGppdF9jdHggKmN0eCwgc3RydWN0IGJwZl90cmFtcF9ub2RlICpuLFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0xNzEzLVxcdGlmIChuLVxcdTAwM2Vjb29raWUpXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoxNzE0OlxcdFxcdGVtaXRfc3RvcmVfc3RhY2tfaW1tNjQoY3R4LCBMT09OR0FSQ0hfR1BSX1QxLFxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMTcxNS1cXHRcXHRcXHRcXHQgICAgICAtcnVuX2N0eF9vZmYgKyBjb29raWVfb2ZmLCBuLVxcdTAwM2Vjb29raWUpO1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYz0xNzY4PXN0YXRpYyBpbnQgaW52b2tlX2JwZihzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bixcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMTc3OS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjE3ODA6XFx0XFx0XFx0ZW1pdF9zdG9yZV9zdGFja19pbW02NChjdHgsIExPT05HQVJDSF9HUFJfVDEsIC1mdW5jX21ldGFfb2ZmLCBtZXRhKTtcXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTE3ODEtXFx0XFx0XFx0Y3VyX2Nvb2tpZS0tO1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYz0xODM3PXN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGppdF9jdHggKmN0eCwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTE5OTEtXFx0aWYgKGZsYWdzIFxcdTAwMjYgQlBGX1RSQU1QX0ZfSVBfQVJHKVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM6MTk5MjpcXHRcXHRlbWl0X3N0b3JlX3N0YWNrX2ltbTY0KGN0eCwgTE9PTkdBUkNIX0dQUl9UMSwgLWlwX29mZiwgKHU2NClmdW5jX2FkZHIpO1xcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMTk5My1cXG4tLVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMTk5NS1cXHRmdW5jX21ldGEgPSBucl9hcmdfc2xvdHM7XFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoxOTk2OlxcdGVtaXRfc3RvcmVfc3RhY2tfaW1tNjQoY3R4LCBMT09OR0FSQ0hfR1BSX1QxLCAtZnVuY19tZXRhX29mZiwgZnVuY19tZXRhKTtcXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTE5OTctXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIwNzMtXFx0aWYgKGJwZl9mc2Vzc2lvbl9jbnQodG5vZGVzKSlcXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjIwNzQ6XFx0XFx0ZW1pdF9zdG9yZV9zdGFja19pbW02NChjdHgsIExPT05HQVJDSF9HUFJfVDEsIC1mdW5jX21ldGFfb2ZmLCBmdW5jX21ldGEpO1xcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjA3NS1cXG4tLVxcbmFyY2gvbWlwcy9uZXQvYnBmX2ppdF9jb21wMzIuYz02NTQ9c3RhdGljIHZvaWQgZW1pdF9sZHgoc3RydWN0IGppdF9jb250ZXh0ICpjdHgsXFxuLS1cXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcDMyLmMtNjg4LS8qIFN0b3JlIG9wZXJhdGlvbjogKihzaXplICopKGRzdCArIG9mZikgPSBzcmMgKi9cXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcDMyLmM6Njg5OnN0YXRpYyB2b2lkIGVtaXRfc3R4KHN0cnVjdCBqaXRfY29udGV4dCAqY3R4LFxcbmFyY2gvbWlwcy9uZXQvYnBmX2ppdF9jb21wMzIuYy02OTAtXFx0XFx0ICAgICBjb25zdCB1OCBkc3QsIGNvbnN0IHU4IHNyY1tdLCBzMTYgb2ZmLCB1OCBzaXplKVxcbi0tXFxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXAzMi5jPTE0NjM9aW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2NvbnRleHQgKmN0eClcXG4tLVxcbmFyY2gvbWlwcy9uZXQvYnBmX2ppdF9jb21wMzIuYy0xNjc2LVxcdFxcdH1cXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcDMyLmM6MTY3NzpcXHRcXHRlbWl0X3N0eChjdHgsIGxvKGRzdCksIHRtcCwgb2ZmLCBCUEZfU0laRShjb2RlKSk7XFxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXAzMi5jLTE2NzgtXFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTY4My1cXHRjYXNlIEJQRl9TVFggfCBCUEZfTUVNIHwgQlBGX0RXOlxcbmFyY2gvbWlwcy9uZXQvYnBmX2ppdF9jb21wMzIuYzoxNjg0OlxcdFxcdGVtaXRfc3R4KGN0eCwgbG8oZHN0KSwgc3JjLCBvZmYsIEJQRl9TSVpFKGNvZGUpKTtcXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTY4NS1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gvbWlwcy9uZXQvYnBmX2ppdF9jb21wNjQuYz0zMzQ9c3RhdGljIHZvaWQgZW1pdF9sZHgoc3RydWN0IGppdF9jb250ZXh0ICpjdHgsIHU4IGRzdCwgdTggc3JjLCBzMTYgb2ZmLCB1OCBzaXplKVxcbi0tXFxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXA2NC5jLTM1Ny0vKiBTdG9yZSBvcGVyYXRpb246ICooc2l6ZSAqKShkc3QgKyBvZmYpID0gc3JjICovXFxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXA2NC5jOjM1ODpzdGF0aWMgdm9pZCBlbWl0X3N0eChzdHJ1Y3Qgaml0X2NvbnRleHQgKmN0eCwgdTggZHN0LCB1OCBzcmMsIHMxNiBvZmYsIHU4IHNpemUpXFxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXA2NC5jLTM1OS17XFxuLS1cXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcDY0LmM9NjM1PWludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jb250ZXh0ICpjdHgpXFxuLS1cXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcDY0LmMtODM1LVxcdFxcdGVtaXRfbW92X2koY3R4LCBNSVBTX1JfVDQsIGltbSk7XFxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXA2NC5jOjgzNjpcXHRcXHRlbWl0X3N0eChjdHgsIGRzdCwgTUlQU19SX1Q0LCBvZmYsIEJQRl9TSVpFKGNvZGUpKTtcXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcDY0LmMtODM3LVxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXA2NC5jLTg0Mi1cXHRjYXNlIEJQRl9TVFggfCBCUEZfTUVNIHwgQlBGX0RXOlxcbmFyY2gvbWlwcy9uZXQvYnBmX2ppdF9jb21wNjQuYzo4NDM6XFx0XFx0ZW1pdF9zdHgoY3R4LCBkc3QsIHNyYywgb2ZmLCBCUEZfU0laRShjb2RlKSk7XFxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXA2NC5jLTg0NC1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gvcGFyaXNjL25ldC9icGZfaml0X2NvbXAzMi5jPTEwMDY9c3RhdGljIGludCBlbWl0X2xvYWRfcjY0KGNvbnN0IHM4ICpkc3QsIGNvbnN0IHM4ICpzcmMsIHMxNiBvZmYsXFxuLS1cXG5hcmNoL3BhcmlzYy9uZXQvYnBmX2ppdF9jb21wMzIuYy0xMDUxLVxcbmFyY2gvcGFyaXNjL25ldC9icGZfaml0X2NvbXAzMi5jOjEwNTI6c3RhdGljIGludCBlbWl0X3N0b3JlX3I2NChjb25zdCBzOCAqZHN0LCBjb25zdCBzOCAqc3JjLCBzMTYgb2ZmLFxcbmFyY2gvcGFyaXNjL25ldC9icGZfaml0X2NvbXAzMi5jLTEwNTMtXFx0XFx0XFx0ICBzdHJ1Y3QgaHBwYV9qaXRfY29udGV4dCAqY3R4LCBjb25zdCB1OCBzaXplLFxcbi0tXFxuYXJjaC9wYXJpc2MvbmV0L2JwZl9qaXRfY29tcDMyLmM9MTExNj1pbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgaHBwYV9qaXRfY29udGV4dCAqY3R4LFxcbi0tXFxuYXJjaC9wYXJpc2MvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTQ0Ni1cXG5hcmNoL3BhcmlzYy9uZXQvYnBmX2ppdF9jb21wMzIuYzoxNDQ3OlxcdFxcdGlmIChlbWl0X3N0b3JlX3I2NChkc3QsIHNyYywgb2ZmLCBjdHgsIEJQRl9TSVpFKGNvZGUpLFxcbmFyY2gvcGFyaXNjL25ldC9icGZfaml0X2NvbXAzMi5jLTE0NDgtXFx0XFx0XFx0XFx0ICAgQlBGX01PREUoY29kZSkpKVxcbi0tXFxuYXJjaC9wYXJpc2MvbmV0L2JwZl9qaXRfY29tcDY0LmM9NTA1PXN0YXRpYyB2b2lkIGVtaXRfY2FsbF9saWJnY2NfbGwodm9pZCAqZnVuYywgY29uc3QgczggYXJnMCxcXG4tLVxcbmFyY2gvcGFyaXNjL25ldC9icGZfaml0X2NvbXA2NC5jLTU1My1cXG5hcmNoL3BhcmlzYy9uZXQvYnBmX2ppdF9jb21wNjQuYzo1NTQ6c3RhdGljIHZvaWQgZW1pdF9zdG9yZShjb25zdCBzOCByZCwgY29uc3QgczggcnMsIHMxNiBvZmYsXFxuYXJjaC9wYXJpc2MvbmV0L2JwZl9qaXRfY29tcDY0LmMtNTU1LVxcdFxcdFxcdCAgc3RydWN0IGhwcGFfaml0X2NvbnRleHQgKmN0eCwgY29uc3QgdTggc2l6ZSxcXG4tLVxcbmFyY2gvcGFyaXNjL25ldC9icGZfaml0X2NvbXA2NC5jPTU5Mj1pbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgaHBwYV9qaXRfY29udGV4dCAqY3R4LFxcbi0tXFxuYXJjaC9wYXJpc2MvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTA4MS1cXG5hcmNoL3BhcmlzYy9uZXQvYnBmX2ppdF9jb21wNjQuYzoxMDgyOlxcdFxcdGVtaXRfc3RvcmUocmQsIHJzLCBvZmYsIGN0eCwgQlBGX1NJWkUoY29kZSksIEJQRl9NT0RFKGNvZGUpKTtcXG5hcmNoL3BhcmlzYy9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMDgzLVxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYz04MzU9c3RhdGljIGludCBlbWl0X2xvYWRfcjY0KGNvbnN0IHM4ICpkc3QsIGNvbnN0IHM4ICpzcmMsIHMxNiBvZmYsXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jLTg3MS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jOjg3MjpzdGF0aWMgaW50IGVtaXRfc3RvcmVfcjY0KGNvbnN0IHM4ICpkc3QsIGNvbnN0IHM4ICpzcmMsIHMxNiBvZmYsXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYy04NzMtXFx0XFx0XFx0ICBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCwgY29uc3QgdTggc2l6ZSxcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmM9OTUzPWludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYy0xMjY4LVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmM6MTI2OTpcXHRcXHRpZiAoZW1pdF9zdG9yZV9yNjQoZHN0LCBzcmMsIG9mZiwgY3R4LCBCUEZfU0laRShjb2RlKSxcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jLTEyNzAtXFx0XFx0XFx0XFx0ICAgQlBGX01PREUoY29kZSkpKVxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYy0xMjgxLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmM6MTI4MjpcXHRcXHRpZiAoZW1pdF9zdG9yZV9yNjQoZHN0LCBzcmMsIG9mZiwgY3R4LCBCUEZfU0laRShjb2RlKSxcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jLTEyODMtXFx0XFx0XFx0XFx0ICAgQlBGX01PREUoY29kZSkpKVxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz00NzY9c3RhdGljIHZvaWQgZW1pdF9sZHhfaW5zbih1OCByZCwgczE2IG9mZiwgdTggcnMsIHU4IHNpemUsIGJvb2wgc2lnbl9leHQsXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTQ5NS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjQ5NjpzdGF0aWMgdm9pZCBlbWl0X3N0eF9pbnNuKHU4IHJkLCBzMTYgb2ZmLCB1OCBycywgdTggc2l6ZSwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgpXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy00OTcte1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz01MTQ9c3RhdGljIHZvaWQgZW1pdF9sZHgodTggcmQsIHMxNiBvZmYsIHU4IHJzLCB1OCBzaXplLCBib29sIHNpZ25fZXh0LFxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy01MzAtXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzo1MzE6c3RhdGljIHZvaWQgZW1pdF9zdCh1OCByZCwgczE2IG9mZiwgczMyIGltbSwgdTggc2l6ZSwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgpXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy01MzIte1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy01MzUtXFx0XFx0Y3R4LVxcdTAwM2VleF9pbnNuX29mZiA9IGN0eC1cXHUwMDNlbmluc25zO1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6NTM2OlxcdFxcdGVtaXRfc3R4X2luc24ocmQsIG9mZiwgUlZfUkVHX1QxLCBzaXplLCBjdHgpO1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtNTM3LVxcdFxcdGN0eC1cXHUwMDNlZXhfam1wX29mZiA9IGN0eC1cXHUwMDNlbmluc25zO1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy01NDMtXFx0Y3R4LVxcdTAwM2VleF9pbnNuX29mZiA9IGN0eC1cXHUwMDNlbmluc25zO1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6NTQ0OlxcdGVtaXRfc3R4X2luc24oUlZfUkVHX1QyLCAwLCBSVl9SRUdfVDEsIHNpemUsIGN0eCk7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy01NDUtXFx0Y3R4LVxcdTAwM2VleF9qbXBfb2ZmID0gY3R4LVxcdTAwM2VuaW5zbnM7XFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTU0Ny1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjU0ODpzdGF0aWMgdm9pZCBlbWl0X3N0eCh1OCByZCwgczE2IG9mZiwgdTggcnMsIHU4IHNpemUsIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtNTQ5LXtcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtNTUxLVxcdFxcdGN0eC1cXHUwMDNlZXhfaW5zbl9vZmYgPSBjdHgtXFx1MDAzZW5pbnNucztcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjU1MjpcXHRcXHRlbWl0X3N0eF9pbnNuKHJkLCBvZmYsIHJzLCBzaXplLCBjdHgpO1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtNTUzLVxcdFxcdGN0eC1cXHUwMDNlZXhfam1wX29mZiA9IGN0eC1cXHUwMDNlbmluc25zO1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy01NTktXFx0Y3R4LVxcdTAwM2VleF9pbnNuX29mZiA9IGN0eC1cXHUwMDNlbmluc25zO1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6NTYwOlxcdGVtaXRfc3R4X2luc24oUlZfUkVHX1QxLCAwLCBycywgc2l6ZSwgY3R4KTtcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTU2MS1cXHRjdHgtXFx1MDAzZWV4X2ptcF9vZmYgPSBjdHgtXFx1MDAzZW5pbnNucztcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9NTY0PXN0YXRpYyBpbnQgZW1pdF9hdG9taWNfbGRfc3QodTggcmQsIHU4IHJzLCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTU5NS1cXHRcXHRlbWl0X2ZlbmNlX3J3X3coY3R4KTtcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjU5NjpcXHRcXHRlbWl0X3N0eChyZCwgb2ZmLCBycywgQlBGX1NJWkUoY29kZSksIGN0eCk7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy01OTctXFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTkxNj1zdGF0aWMgdm9pZCByZXN0b3JlX3N0YWNrX2FyZ3MoaW50IG5yX3N0YWNrX2FyZ3MsIGludCBhcmdzX29mZiwgaW50IHN0a19hcmdfb2ZmLFxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy05MjgtXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzo5Mjk6c3RhdGljIHZvaWQgZW1pdF9zdG9yZV9zdGFja19pbW02NCh1OCByZWcsIGludCBzdGFja19vZmYsIHU2NCBpbW02NCxcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTkzMC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eClcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9OTM3PXN0YXRpYyBpbnQgaW52b2tlX2JwZl9wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSwgaW50IGFyZ3Nfb2ZmLCBpbnQgcmV0dmFsX29mZixcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtOTQ0LVxcdGlmIChub2RlLVxcdTAwM2Vjb29raWUpXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzo5NDU6XFx0XFx0ZW1pdF9zdG9yZV9zdGFja19pbW02NChSVl9SRUdfVDEsIC1ydW5fY3R4X29mZiArIGNvb2tpZV9vZmYsIG5vZGUtXFx1MDAzZWNvb2tpZSwgY3R4KTtcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTk0Ni1cXHRlbHNlXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTk5OT1zdGF0aWMgaW50IGludm9rZV9icGYoc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG4sIGludCBhcmdzX29mZiwgaW50IHJldHZhbF9vZmYsXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEwMTAtXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxMDExOlxcdFxcdFxcdGVtaXRfc3RvcmVfc3RhY2tfaW1tNjQoUlZfUkVHX1QxLCAtZnVuY19tZXRhX29mZiwgbWV0YSwgY3R4KTtcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEwMTItXFx0XFx0XFx0Y3VyX2Nvb2tpZS0tO1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz0xMDIyPXN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTExNjctXFx0aWYgKGZsYWdzIFxcdTAwMjYgQlBGX1RSQU1QX0ZfSVBfQVJHKVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTE2ODpcXHRcXHRlbWl0X3N0b3JlX3N0YWNrX2ltbTY0KFJWX1JFR19UMSwgLWlwX29mZiwgKHU2NClmdW5jX2FkZHIsIGN0eCk7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMTY5LVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTE3MC1cXHRmdW5jX21ldGEgPSBucl9hcmdfc2xvdHM7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxMTcxOlxcdGVtaXRfc3RvcmVfc3RhY2tfaW1tNjQoUlZfUkVHX1QxLCAtZnVuY19tZXRhX29mZiwgZnVuY19tZXRhLCBjdHgpO1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTE3Mi1cXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTI0MS1cXHRpZiAoYnBmX2ZzZXNzaW9uX2NudCh0bm9kZXMpKVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTI0MjpcXHRcXHRlbWl0X3N0b3JlX3N0YWNrX2ltbTY0KFJWX1JFR19UMSwgLWZ1bmNfbWV0YV9vZmYsIGZ1bmNfbWV0YSwgY3R4KTtcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEyNDMtXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTEzNjk9aW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTE5NDUtXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxOTQ2OlxcdFxcdGVtaXRfc3QocmQsIG9mZiwgaW1tLCBCUEZfU0laRShjb2RlKSwgY3R4KTtcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTE5NDctXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTE5NjctXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxOTY4OlxcdFxcdGVtaXRfc3R4KHJkLCBvZmYsIHJzLCBCUEZfU0laRShjb2RlKSwgY3R4KTtcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTE5NjktXFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jPTI1MjM9c3RhdGljIHZvaWQgbG9hZF9pbW02NChzdHJ1Y3QgYnBmX2ppdCAqaml0LCBpbnQgZHN0X3JlZywgdTY0IHZhbClcXG4tLVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMjUzMC1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjI1MzE6c3RhdGljIHZvaWQgZW1pdF9zdG9yZV9zdGFja19pbW02NChzdHJ1Y3QgYnBmX2ppdCAqaml0LCBpbnQgdG1wX3JlZywgaW50IHN0YWNrX29mZiwgdTY0IGltbSlcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTI1MzIte1xcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYz0yNTM4PXN0YXRpYyBpbnQgaW52b2tlX2JwZl9wcm9nKHN0cnVjdCBicGZfdHJhbXBfaml0ICp0aml0LFxcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0yNTUxLVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6MjU1MjpcXHRlbWl0X3N0b3JlX3N0YWNrX2ltbTY0KGppdCwgUkVHX1cwLCBjb29raWVfb2ZmLCBub2RlLVxcdTAwM2Vjb29raWUpO1xcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMjU1My1cXG4tLVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM9MjYxMD1zdGF0aWMgaW50IGludm9rZV9icGYoc3RydWN0IGJwZl90cmFtcF9qaXQgKnRqaXQsXFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTI2MjEtXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzoyNjIyOlxcdFxcdFxcdGVtaXRfc3RvcmVfc3RhY2tfaW1tNjQoaml0LCBSRUdfMCwgdGppdC1cXHUwMDNlZnVuY19tZXRhX29mZiwgbWV0YSk7XFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0yNjIzLVxcdFxcdFxcdGN1cl9jb29raWUtLTtcXG4tLVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM9MjY1MD1zdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLFxcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0yODAwLVxcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9UUkFNUF9GX0lQX0FSRylcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjI4MDE6XFx0XFx0ZW1pdF9zdG9yZV9zdGFja19pbW02NChqaXQsIFJFR18wLCB0aml0LVxcdTAwM2VpcF9vZmYsICh1NjQpZnVuY19hZGRyKTtcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTI4MDItXFx0ZnVuY19tZXRhID0gbnJfYnBmX2FyZ3M7XFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTI4MjItXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNvb2tpZV9jbnQ7IGkrKylcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjI4MjM6XFx0XFx0XFx0ZW1pdF9zdG9yZV9zdGFja19pbW02NChqaXQsIFJFR18wLCBjb29raWVfb2ZmICsgOCAqIGksIDApO1xcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMjgyNC1cXHRcXHQvKiBDbGVhciB0aGUgcmV0dXJuIHZhbHVlIHRvIG1ha2Ugc3VyZSBmZW50cnkgYWx3YXlzIGdldHMgMC4gKi9cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjI4MjU6XFx0XFx0ZW1pdF9zdG9yZV9zdGFja19pbW02NChqaXQsIFJFR18wLCB0aml0LVxcdTAwM2VyZXR2YWxfb2ZmLCAwKTtcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTI4MjYtXFx0fVxcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0yOTA5LVxcdGlmIChmc2Vzc2lvbl9jbnQpXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzoyOTEwOlxcdFxcdGVtaXRfc3RvcmVfc3RhY2tfaW1tNjQoaml0LCBSRUdfVzAsIHRqaXQtXFx1MDAzZWZ1bmNfbWV0YV9vZmYsXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0yOTExLVxcdFxcdFxcdFxcdCAgICAgICBmdW5jX21ldGEpO1xcbi0tXFxuYXJjaC9zcGFyYy9uZXQvYnBmX2ppdF9jb21wXzMyLmM9MjEyPWRvIHtcXHQqcHJvZysrID0gTEQzMkkgfCBSUzEoU1ApIHwgUzEzKEJJQVMgLSAoT0ZGKSkgfCBSRChERVNUKTtcXHRcXFxcXFxuLS1cXG5hcmNoL3NwYXJjL25ldC9icGZfaml0X2NvbXBfMzIuYy0yMTQtXFxuYXJjaC9zcGFyYy9uZXQvYnBmX2ppdF9jb21wXzMyLmM6MjE1OiNkZWZpbmUgZW1pdF9zdG1lbShPRkYsIFNSQylcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuYXJjaC9zcGFyYy9uZXQvYnBmX2ppdF9jb21wXzMyLmMtMjE2LWRvIHtcXHQqcHJvZysrID0gU1QzMkkgfCBSUzEoU1ApIHwgUzEzKEJJQVMgLSAoT0ZGKSkgfCBSRChTUkMpO1xcdFxcXFxcXG4tLVxcbmFyY2gvc3BhcmMvbmV0L2JwZl9qaXRfY29tcF8zMi5jPTMyNj12b2lkIGJwZl9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3Byb2cgKmZwKVxcbi0tXFxuYXJjaC9zcGFyYy9uZXQvYnBmX2ppdF9jb21wXzMyLmMtNTg1LVxcdFxcdFxcdFxcdHNlZW4gfD0gU0VFTl9NRU07XFxuYXJjaC9zcGFyYy9uZXQvYnBmX2ppdF9jb21wXzMyLmM6NTg2OlxcdFxcdFxcdFxcdGVtaXRfc3RtZW0oSyAqIDQsIHJfQSk7XFxuYXJjaC9zcGFyYy9uZXQvYnBmX2ppdF9jb21wXzMyLmMtNTg3LVxcdFxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC9zcGFyYy9uZXQvYnBmX2ppdF9jb21wXzMyLmMtNTg5LVxcdFxcdFxcdFxcdHNlZW4gfD0gU0VFTl9NRU0gfCBTRUVOX1hSRUc7XFxuYXJjaC9zcGFyYy9uZXQvYnBmX2ppdF9jb21wXzMyLmM6NTkwOlxcdFxcdFxcdFxcdGVtaXRfc3RtZW0oSyAqIDQsIHJfWCk7XFxuYXJjaC9zcGFyYy9uZXQvYnBmX2ppdF9jb21wXzMyLmMtNTkxLVxcdFxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTEzMTQ9c3RhdGljIHZvaWQgZW1pdF9sZHN4X3IxMih1OCAqKnByb2csIHUzMiBzaXplLCB1MzIgZHN0X3JlZywgdTMyIHNyY19yZWcsIGludCBvZmYpXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTMxOS0vKiBTVFg6ICoodTgqKShkc3RfcmVnICsgb2ZmKSA9IHNyY19yZWcgKi9cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTMyMDpzdGF0aWMgdm9pZCBlbWl0X3N0eCh1OCAqKnBwcm9nLCB1MzIgc2l6ZSwgdTMyIGRzdF9yZWcsIHUzMiBzcmNfcmVnLCBpbnQgb2ZmKVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMzIxLXtcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMzUzLS8qIFNUWDogKih1OCopKGRzdF9yZWcgKyBpbmRleF9yZWcgKyBvZmYpID0gc3JjX3JlZyAqL1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMzU0OnN0YXRpYyB2b2lkIGVtaXRfc3R4X2luZGV4KHU4ICoqcHByb2csIHUzMiBzaXplLCB1MzIgZHN0X3JlZywgdTMyIHNyY19yZWcsIHUzMiBpbmRleF9yZWcsIGludCBvZmYpXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEzNTUte1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEzNzktXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjEzODA6c3RhdGljIHZvaWQgZW1pdF9zdHhfcjEyKHU4ICoqcHByb2csIHUzMiBzaXplLCB1MzIgZHN0X3JlZywgdTMyIHNyY19yZWcsIGludCBvZmYpXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEzODEte1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMzgyOlxcdGVtaXRfc3R4X2luZGV4KHBwcm9nLCBzaXplLCBkc3RfcmVnLCBzcmNfcmVnLCBYODZfUkVHX1IxMiwgb2ZmKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTM4My19XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTM4NS0vKiBTVDogKih1OCopKGRzdF9yZWcgKyBpbmRleF9yZWcgKyBvZmYpID0gaW1tMzIgKi9cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTM4NjpzdGF0aWMgdm9pZCBlbWl0X3N0X2luZGV4KHU4ICoqcHByb2csIHUzMiBzaXplLCB1MzIgZHN0X3JlZywgdTMyIGluZGV4X3JlZywgaW50IG9mZiwgaW50IGltbSlcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTM4Ny17XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTQxMi1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTQxMzpzdGF0aWMgdm9pZCBlbWl0X3N0KHU4ICoqcHByb2csIHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgaW50IGRzdF9yZWcsXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE0MTQtXFx0XFx0ICAgIHMzMiBvdXRnb2luZ19hcmdfYmFzZSwgdTE2IG91dGdvaW5nX3JzcClcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNDcwLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxNDcxOnN0YXRpYyB2b2lkIGVtaXRfc3RfcjEyKHU4ICoqcHByb2csIHUzMiBzaXplLCB1MzIgZHN0X3JlZywgaW50IG9mZiwgaW50IGltbSlcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTQ3Mi17XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE0NzM6XFx0ZW1pdF9zdF9pbmRleChwcHJvZywgc2l6ZSwgZHN0X3JlZywgWDg2X1JFR19SMTIsIG9mZiwgaW1tKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTQ3NC19XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE0NzUtXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE0NzY6c3RhdGljIHZvaWQgZW1pdF9zdG9yZV9zdGFja19pbW02NCh1OCAqKnBwcm9nLCBpbnQgcmVnLCBpbnQgc3RhY2tfb2ZmLCB1NjQgaW1tNjQpXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE0Nzcte1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE0ODItXFx0ZW1pdF9tb3ZfaW1tNjQocHByb2csIHJlZywgaW1tNjQgXFx1MDAzZVxcdTAwM2UgMzIsICh1MzIpIGltbTY0KTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTQ4MzpcXHRlbWl0X3N0eChwcHJvZywgQlBGX0RXLCBCUEZfUkVHX0ZQLCByZWcsIHN0YWNrX29mZik7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE0ODQtfVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTE1Nzk9c3RhdGljIGludCBlbWl0X2F0b21pY19sZF9zdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1OCAqKnBwcm9nLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE2MDEtXFx0XFx0Lyogc21wX3N0b3JlX3JlbGVhc2UoZHN0X3JlZyArIG9mZjE2LCBzcmNfcmVnKSAqL1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxNjAyOlxcdFxcdGVtaXRfc3R4KHBwcm9nLCBCUEZfU0laRShpbnNuLVxcdTAwM2Vjb2RlKSwgZHN0X3JlZywgc3JjX3JlZyxcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTYwMy1cXHRcXHRcXHQgaW5zbi1cXHUwMDNlb2ZmKTtcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xNjE0PXN0YXRpYyBpbnQgZW1pdF9hdG9taWNfbGRfc3RfaW5kZXgodTggKipwcHJvZywgdTMyIGF0b21pY19vcCwgdTMyIHNpemUsXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTYyNC1cXHRcXHQvKiBzbXBfc3RvcmVfcmVsZWFzZShkc3RfcmVnICsgaWR4X3JlZyArIG9mZjE2LCBzcmNfcmVnKSAqL1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxNjI1OlxcdFxcdGVtaXRfc3R4X2luZGV4KHBwcm9nLCBzaXplLCBkc3RfcmVnLCBzcmNfcmVnLCBpbmRleF9yZWcsIG9mZik7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE2MjYtXFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTg0OD1zdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKmFkZHJzLCB1OCAqaW1hZ2UsXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjM5MS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjM5MjpcXHRcXHRcXHRlbWl0X3N0KFxcdTAwMjZwcm9nLCBpbnNuLCBkc3RfcmVnLCBvdXRnb2luZ19hcmdfYmFzZSxcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjM5My1cXHRcXHRcXHRcXHRvdXRnb2luZ19yc3ApO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI0MTQtXFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjQxNTpcXHRcXHRcXHRlbWl0X3N0eChcXHUwMDI2cHJvZywgQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSksIGRzdF9yZWcsIHNyY19yZWcsIGluc25fb2ZmKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjQxNi1cXHRcXHRcXHRicmVhaztcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yNDIyLVxcdFxcdFxcdHN0YXJ0X29mX2xkeCA9IHByb2c7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjI0MjM6XFx0XFx0XFx0ZW1pdF9zdF9yMTIoXFx1MDAyNnByb2csIEJQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpLCBkc3RfcmVnLCBpbnNuLVxcdTAwM2VvZmYsIGluc24tXFx1MDAzZWltbSk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI0MjQtXFx0XFx0XFx0Z290byBwb3B1bGF0ZV9leHRhYmxlO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI0NDQtXFx0XFx0XFx0fSBlbHNlIHtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjQ0NTpcXHRcXHRcXHRcXHRlbWl0X3N0eF9yMTIoXFx1MDAyNnByb2csIEJQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpLCBkc3RfcmVnLCBzcmNfcmVnLCBpbnNuLVxcdTAwM2VvZmYpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yNDQ2LVxcdFxcdFxcdH1cXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zMTU5PXN0YXRpYyB2b2lkIHNhdmVfYXJncyhjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHU4ICoqcHJvZyxcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zMjA0LVxcdFxcdFxcdFxcdFxcdCBucl9zdGFja19zbG90cyAqIDggKyAxNiArICghdXNlX2ptcCkgKiA4KTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzIwNTpcXHRcXHRcXHRcXHRlbWl0X3N0eChwcm9nLCBCUEZfRFcsIEJQRl9SRUdfRlAsIEJQRl9SRUdfMCxcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzIwNi1cXHRcXHRcXHRcXHRcXHQgLXN0YWNrX3NpemUpO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTMyMjQtXFx0XFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIGFyZ19yZWdzOyBqKyspIHtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzIyNTpcXHRcXHRcXHRcXHRlbWl0X3N0eChwcm9nLCBCUEZfRFcsIEJQRl9SRUdfRlAsXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTMyMjYtXFx0XFx0XFx0XFx0XFx0IG5yX3JlZ3MgPT0gNSA/IFg4Nl9SRUdfUjkgOiBCUEZfUkVHXzEgKyBucl9yZWdzLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTMyNjk9c3RhdGljIGludCBpbnZva2VfYnBmX3Byb2coY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1OCAqKnBwcm9nLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTMyODktXFx0ICovXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjMyOTA6XFx0ZW1pdF9zdHgoXFx1MDAyNnByb2csIEJQRl9EVywgQlBGX1JFR19GUCwgQlBGX1JFR18xLCAtcnVuX2N0eF9vZmYgKyBjdHhfY29va2llX29mZik7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTMyOTEtXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzMzNS1cXHRpZiAoc2F2ZV9yZXQpXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjMzMzY6XFx0XFx0ZW1pdF9zdHgoXFx1MDAyNnByb2csIEJQRl9EVywgQlBGX1JFR19GUCwgQlBGX1JFR18wLCAtOCk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTMzMzctXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MzM4ND1zdGF0aWMgaW50IGludm9rZV9icGYoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1OCAqKnBwcm9nLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTMzOTQtXFx0XFx0aWYgKHRsLVxcdTAwM2Vub2Rlc1tpXS1cXHUwMDNlbGluay1cXHUwMDNlcHJvZy1cXHUwMDNlY2FsbF9zZXNzaW9uX2Nvb2tpZSkge1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozMzk1OlxcdFxcdFxcdGVtaXRfc3RvcmVfc3RhY2tfaW1tNjQoXFx1MDAyNnByb2csIEJQRl9SRUdfMCwgLWZ1bmNfbWV0YV9vZmYsXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTMzOTYtXFx0XFx0XFx0XFx0ZnVuY19tZXRhIHwgKGN1cl9jb29raWUgXFx1MDAzY1xcdTAwM2MgQlBGX1RSQU1QX0NPT0tJRV9JTkRFWF9TSElGVCkpO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTM0MDc9c3RhdGljIGludCBpbnZva2VfYnBmX21vZF9yZXQoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1OCAqKnBwcm9nLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM0MTgtXFx0ZW1pdF9tb3ZfaW1tMzIoXFx1MDAyNnByb2csIGZhbHNlLCBCUEZfUkVHXzAsIDApO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozNDE5OlxcdGVtaXRfc3R4KFxcdTAwMjZwcm9nLCBCUEZfRFcsIEJQRl9SRUdfRlAsIEJQRl9SRUdfMCwgLTgpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNDIwLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0bC1cXHUwMDNlbnJfbm9kZXM7IGkrKykge1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTM1MDk9c3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcndfaW1hZ2UsXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzY2MC1cXHQvKiBtb3YgUVdPUkQgUFRSIFtyYnAgLSByYnhfb2ZmXSwgcmJ4ICovXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM2NjE6XFx0ZW1pdF9zdHgoXFx1MDAyNnByb2csIEJQRl9EVywgQlBGX1JFR19GUCwgQlBGX1JFR182LCAtcmJ4X29mZik7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM2NjItXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzY2NC1cXHQvKiBTdG9yZSBudW1iZXIgb2YgYXJndW1lbnQgcmVnaXN0ZXJzIG9mIHRoZSB0cmFjZWQgZnVuY3Rpb24gKi9cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzY2NTpcXHRlbWl0X3N0b3JlX3N0YWNrX2ltbTY0KFxcdTAwMjZwcm9nLCBCUEZfUkVHXzAsIC1mdW5jX21ldGFfb2ZmLCBmdW5jX21ldGEpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNjY2LVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM2NjgtXFx0XFx0LyogU3RvcmUgSVAgYWRkcmVzcyBvZiB0aGUgdHJhY2VkIGZ1bmN0aW9uICovXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM2Njk6XFx0XFx0ZW1pdF9zdG9yZV9zdGFja19pbW02NChcXHUwMDI2cHJvZywgQlBGX1JFR18wLCAtaXBfb2ZmLCAobG9uZylmdW5jX2FkZHIpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNjcwLVxcdH1cXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNjg2LVxcdFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgY29va2llX2NudDsgaSsrKVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozNjg3OlxcdFxcdFxcdGVtaXRfc3RvcmVfc3RhY2tfaW1tNjQoXFx1MDAyNnByb2csIEJQRl9SRUdfMCwgLWNvb2tpZV9vZmYgKyA4ICogaSwgMCk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM2ODgtXFx0XFx0LyogY2xlYXIgdGhlIHJldHVybiB2YWx1ZSB0byBtYWtlIHN1cmUgZmVudHJ5IGFsd2F5cyBnZXQgMCAqL1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozNjg5OlxcdFxcdGVtaXRfc3RvcmVfc3RhY2tfaW1tNjQoXFx1MDAyNnByb2csIEJQRl9SRUdfMCwgLTgsIDApO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNjkwLVxcdH1cXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNzMzLVxcdFxcdC8qIHJlbWVtYmVyIHJldHVybiB2YWx1ZSBpbiBhIHN0YWNrIGZvciBicGYgcHJvZyB0byBhY2Nlc3MgKi9cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzczNDpcXHRcXHRlbWl0X3N0eChcXHUwMDI2cHJvZywgQlBGX0RXLCBCUEZfUkVHX0ZQLCBCUEZfUkVHXzAsIC04KTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzczNS1cXHRcXHRpbS1cXHUwMDNlaXBfYWZ0ZXJfY2FsbCA9IGltYWdlICsgKHByb2cgLSAodTggKilyd19pbWFnZSk7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzc1Ny1cXHRpZiAoYnBmX2ZzZXNzaW9uX2NudCh0bm9kZXMpKVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozNzU4OlxcdFxcdGVtaXRfc3RvcmVfc3RhY2tfaW1tNjQoXFx1MDAyNnByb2csIEJQRl9SRUdfMCwgLWZ1bmNfbWV0YV9vZmYsIGZ1bmNfbWV0YSk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM3NTktXFxuLS1cXG5kcml2ZXJzL2RtYS9wbDMzMC5jPTExMTk9c3RhdGljIHUzMiBfZW1pdF9sb2FkKHVuc2lnbmVkIGludCBkcnlfcnVuLCB1OCBidWZbXSxcXG4tLVxcbmRyaXZlcnMvZG1hL3BsMzMwLmMtMTE1MS1cXG5kcml2ZXJzL2RtYS9wbDMzMC5jOjExNTI6c3RhdGljIGlubGluZSB1MzIgX2VtaXRfc3RvcmUodW5zaWduZWQgaW50IGRyeV9ydW4sIHU4IGJ1ZltdLFxcbmRyaXZlcnMvZG1hL3BsMzMwLmMtMTE1My1cXHRlbnVtIHBsMzMwX2NvbmQgY29uZCwgZW51bSBkbWFfdHJhbnNmZXJfZGlyZWN0aW9uIGRpcmVjdGlvbixcXG4tLVxcbmRyaXZlcnMvZG1hL3BsMzMwLmM9MTE4NT1zdGF0aWMgaW5saW5lIGludCBfbGRzdF9wZXJpcGhlcmFsKHN0cnVjdCBwbDMzMF9kbWFjICpwbDMzMCxcXG4tLVxcbmRyaXZlcnMvZG1hL3BsMzMwLmMtMTIwMS1cXHRcXHRcXHRweHMtXFx1MDAzZWRlc2MtXFx1MDAzZXBlcmkpO1xcbmRyaXZlcnMvZG1hL3BsMzMwLmM6MTIwMjpcXHRcXHRvZmYgKz0gX2VtaXRfc3RvcmUoZHJ5X3J1biwgXFx1MDAyNmJ1ZltvZmZdLCBjb25kLCBweHMtXFx1MDAzZWRlc2MtXFx1MDAzZXJxdHlwZSxcXG5kcml2ZXJzL2RtYS9wbDMzMC5jLTEyMDMtXFx0XFx0XFx0cHhzLVxcdTAwM2VkZXNjLVxcdTAwM2VwZXJpKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaWd0X2dlbV91dGlscy5jPTQxPXN0cnVjdCBpOTE1X3ZtYSAqXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pZ3RfZ2VtX3V0aWxzLmM6NDI6aWd0X2VtaXRfc3RvcmVfZHcoc3RydWN0IGk5MTVfdm1hICp2bWEsXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pZ3RfZ2VtX3V0aWxzLmMtNDMtXFx0XFx0ICB1NjQgb2Zmc2V0LFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pZ3RfZ2VtX3V0aWxzLmM9MTExPWludCBpZ3RfZ3B1X2ZpbGxfZHcoc3RydWN0IGludGVsX2NvbnRleHQgKmNlLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pZ3RfZ2VtX3V0aWxzLmMtMTIyLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaWd0X2dlbV91dGlscy5jOjEyMzpcXHRiYXRjaCA9IGlndF9lbWl0X3N0b3JlX2R3KHZtYSwgb2Zmc2V0LCBjb3VudCwgdmFsKTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2lndF9nZW1fdXRpbHMuYy0xMjQtXFx0aWYgKElTX0VSUihiYXRjaCkpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2lndF9nZW1fdXRpbHMuaD0yND1zdHJ1Y3QgaTkxNV92bWEgKlxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaWd0X2dlbV91dGlscy5oOjI1OmlndF9lbWl0X3N0b3JlX2R3KHN0cnVjdCBpOTE1X3ZtYSAqdm1hLFxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaWd0X2dlbV91dGlscy5oLTI2LVxcdFxcdCAgdTY0IG9mZnNldCxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2dlbjdfcmVuZGVyY2xlYXIuYz0yMzQ9c3RhdGljIHZvaWRcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9nZW43X3JlbmRlcmNsZWFyLmM6MjM1OmdlbjdfZW1pdF9zdGF0ZV9iYXNlX2FkZHJlc3Moc3RydWN0IGJhdGNoX2NodW5rICpiYXRjaCxcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9nZW43X3JlbmRlcmNsZWFyLmMtMjM2LVxcdFxcdFxcdCAgICAgdTMyIHN1cmZhY2Vfc3RhdGVfYmFzZSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2dlbjdfcmVuZGVyY2xlYXIuYz0zNzY9c3RhdGljIHZvaWQgZW1pdF9iYXRjaChzdHJ1Y3QgaTkxNV92bWEgKiBjb25zdCB2bWEsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9nZW43X3JlbmRlcmNsZWFyLmMtNDE3LVxcdGdlbjdfZW1pdF9waXBlbGluZV9mbHVzaChcXHUwMDI2Y21kcyk7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvZ2VuN19yZW5kZXJjbGVhci5jOjQxODpcXHRnZW43X2VtaXRfc3RhdGVfYmFzZV9hZGRyZXNzKFxcdTAwMjZjbWRzLCBkZXNjcmlwdG9ycyk7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvZ2VuN19yZW5kZXJjbGVhci5jLTQxOS1cXHRnZW43X2VtaXRfcGlwZWxpbmVfaW52YWxpZGF0ZShcXHUwMDI2Y21kcyk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9lbmdpbmVfcG0uYz0zND1zdGF0aWMgdTMyICplbWl0X3dhaXQodTMyICpjcywgdTMyIG9mZnNldCwgaW50IG9wLCB1MzIgdmFsdWUpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9lbmdpbmVfcG0uYy00Ni1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9lbmdpbmVfcG0uYzo0NzpzdGF0aWMgdTMyICplbWl0X3N0b3JlKHUzMiAqY3MsIHUzMiBvZmZzZXQsIHUzMiB2YWx1ZSlcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9lbmdpbmVfcG0uYy00OC17XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9lbmdpbmVfcG0uYz03Mz1zdGF0aWMgaW50IF9fbWVhc3VyZV90aW1lc3RhbXBzKHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2VuZ2luZV9wbS5jLTkyLVxcdC8qIFNpZ25hbCBcXHUwMDI2IHdhaXQgZm9yIHN0YXJ0ICovXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfZW5naW5lX3BtLmM6OTM6XFx0Y3MgPSBlbWl0X3N0b3JlKGNzLCBvZmZzZXQgKyA0MDA4LCAxKTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9lbmdpbmVfcG0uYy05NC1cXHRjcyA9IGVtaXRfd2FpdChjcywgb2Zmc2V0ICsgNDAwOCwgTUlfU0VNQVBIT1JFX1NBRF9ORVFfU0RELCAxKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3JlcXVlc3QuYz0xOTU5PXN0YXRpYyB1MzIgKmVtaXRfdGltZXN0YW1wX3N0b3JlKHUzMiAqY3MsIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwgdTMyIG9mZnNldClcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3JlcXVlc3QuYy0xOTY4LVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3JlcXVlc3QuYzoxOTY5OnN0YXRpYyB1MzIgKmVtaXRfc3RvcmVfZHcodTMyICpjcywgdTMyIG9mZnNldCwgdTMyIHZhbHVlKVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3JlcXVlc3QuYy0xOTcwLXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3JlcXVlc3QuYz0yMDE0PXN0YXRpYyBpbnQgbWVhc3VyZV9zZW1hcGhvcmVfcmVzcG9uc2Uoc3RydWN0IGludGVsX2NvbnRleHQgKmNlKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jLTIwNDctXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jOjIwNDg6XFx0Y3MgPSBlbWl0X3N0b3JlX2R3KGNzLCBvZmZzZXQsIDApO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3JlcXVlc3QuYy0yMDQ5LVxcdGZvciAoaSA9IDE7IGkgXFx1MDAzYz0gQVJSQVlfU0laRShlbGFwc2VkKTsgaSsrKSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9yZXF1ZXN0LmMtMjA1MS1cXHRcXHRjcyA9IGVtaXRfdGltZXN0YW1wX3N0b3JlKGNzLCBjZSwgb2Zmc2V0ICsgaSAqIHNpemVvZih1MzIpKTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9yZXF1ZXN0LmM6MjA1MjpcXHRcXHRjcyA9IGVtaXRfc3RvcmVfZHcoY3MsIG9mZnNldCwgMCk7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jLTIwNTMtXFx0fVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jPTIxNjA9c3RhdGljIGludCBtZWFzdXJlX2J1c3lfZGlzcGF0Y2goc3RydWN0IGludGVsX2NvbnRleHQgKmNlKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jLTIxOTYtXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jOjIxOTc6XFx0XFx0Y3MgPSBlbWl0X3N0b3JlX2R3KGNzLCBvZmZzZXQgKyBpICogc2l6ZW9mKHUzMiksIC0xKTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9yZXF1ZXN0LmMtMjE5OC1cXHRcXHRjcyA9IGVtaXRfc2VtYXBob3JlX3BvbGxfdW50aWwoY3MsIG9mZnNldCwgaSk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9yZXF1ZXN0LmM9MjQ0OD1zdGF0aWMgaW50IG1lYXN1cmVfcHJlZW1wdGlvbihzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9yZXF1ZXN0LmMtMjQ5Mi1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9yZXF1ZXN0LmM6MjQ5MzpcXHRcXHRjcyA9IGVtaXRfc3RvcmVfZHcoY3MsIGFkZHIsIC0xKTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9yZXF1ZXN0LmMtMjQ5NC1cXHRcXHRjcyA9IGVtaXRfc2VtYXBob3JlX3BvbGxfdW50aWwoY3MsIG9mZnNldCwgaSk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9yZXF1ZXN0LmMtMjUxOC1cXHRcXHRjcyA9IGVtaXRfdGltZXN0YW1wX3N0b3JlKGNzLCBjZSwgYWRkcik7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jOjI1MTk6XFx0XFx0Y3MgPSBlbWl0X3N0b3JlX2R3KGNzLCBvZmZzZXQsIGkpO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3JlcXVlc3QuYy0yNTIwLVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jPTI1Njg9c3RhdGljIGludCBtZWFzdXJlX2NvbXBsZXRpb24oc3RydWN0IGludGVsX2NvbnRleHQgKmNlKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jLTI2MDQtXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jOjI2MDU6XFx0XFx0Y3MgPSBlbWl0X3N0b3JlX2R3KGNzLCBvZmZzZXQgKyBpICogc2l6ZW9mKHUzMiksIC0xKTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9yZXF1ZXN0LmMtMjYwNi1cXHRcXHRjcyA9IGVtaXRfc2VtYXBob3JlX3BvbGxfdW50aWwoY3MsIG9mZnNldCwgaSk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmluZ19vcHMuYz05NT1zdGF0aWMgaW50IGVtaXRfdXNlcl9pbnRlcnJ1cHQodTMyICpkdywgaW50IGkpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmluZ19vcHMuYy0xMDMtXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jpbmdfb3BzLmM6MTA0OnN0YXRpYyBpbnQgZW1pdF9zdG9yZV9pbW1fZ2d0dCh1MzIgYWRkciwgdTMyIHZhbHVlLCB1MzIgKmR3LCBpbnQgaSlcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmluZ19vcHMuYy0xMDUte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jpbmdfb3BzLmM9MTY5PXN0YXRpYyBpbnQgZW1pdF9waXBlX2ludmFsaWRhdGUoc3RydWN0IHhlX2V4ZWNfcXVldWUgKnEsIHUzMiBtYXNrX2ZsYWdzLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jpbmdfb3BzLmMtMTk4LVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yaW5nX29wcy5jOjE5OTpzdGF0aWMgaW50IGVtaXRfc3RvcmVfaW1tX3BwZ3R0X3Bvc3RlZCh1NjQgYWRkciwgdTY0IHZhbHVlLFxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNDozMjo1Ny4wMDQ3NTA4MThaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE3ODQwNTAzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIHg4NiBCUEYgSklUIENvbXBpbGVyKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgZW1pdF9zdGAgZnVuY3Rpb24uIFJpZ2h0LCBpdCdzIHByZXR0eSBjbGVhciBpdCdzIGxvY2F0ZWQgd2l0aGluIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgeDg2IEJQRiBKSVQgY29tcGlsYXRpb24gY29kZS4gQSBxdWljayBtZW50YWwgbm90ZTogdGhlIGZpbGUgcGF0aCBpcyBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYC4gTm93LCBsZXQncyBkaXZlIGludG8gdGhhdCBmaWxlLiBJJ2xsIG5lZWQgdG8gb3BlbiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYCBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBlbWl0X3N0YCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoaXMgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3MuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHMgb2YgaG93IHN0b3JlIGluc3RydWN0aW9ucyBhcmUgdHJhbnNsYXRlZCB0byB4ODYgYXNzZW1ibHkuIFRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNDAyLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDQ6MzM6MDAuMTgzMTU4MzQ1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc1Nzc1NTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVtaXRfc3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA4NzggbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmFyY2gvYXJtL25ldC9icGZfaml0XzMyLmM9MTIwOD1zdGF0aWMgYm9vbCBpc19sZHN0X2ltbTgoczE2IG9mZiwgY29uc3QgdTggc2l6ZSlcXG4tLVxcbmFyY2gvYXJtL25ldC9icGZfaml0XzMyLmMtMTIyNi0vKiAqKHNpemUgKikoZHN0ICsgb2ZmKSA9IHNyYyAqL1xcbmFyY2gvYXJtL25ldC9icGZfaml0XzMyLmM6MTIyNzpzdGF0aWMgaW5saW5lIHZvaWQgZW1pdF9zdHJfcihjb25zdCBzOCBkc3QsIGNvbnN0IHM4IHNyY1tdLFxcbmFyY2gvYXJtL25ldC9icGZfaml0XzMyLmMtMTIyOC1cXHRcXHRcXHQgICAgICBzMTYgb2ZmLCBzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBjb25zdCB1OCBzeil7XFxuLS1cXG5hcmNoL2FybS9uZXQvYnBmX2ppdF8zMi5jPTE1ODk9c3RhdGljIGludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jdHggKmN0eClcXG4tLVxcbmFyY2gvYXJtL25ldC9icGZfaml0XzMyLmMtMTg5NS1cXHRcXHR9XFxuYXJjaC9hcm0vbmV0L2JwZl9qaXRfMzIuYzoxODk2OlxcdFxcdGVtaXRfc3RyX3IoZHN0X2xvLCB0bXAyLCBvZmYsIGN0eCwgQlBGX1NJWkUoY29kZSkpO1xcbmFyY2gvYXJtL25ldC9icGZfaml0XzMyLmMtMTg5Ny1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gvYXJtL25ldC9icGZfaml0XzMyLmMtMTkwNy1cXHRcXHRycyA9IGFybV9icGZfZ2V0X3JlZzY0KHNyYywgdG1wMiwgY3R4KTtcXG5hcmNoL2FybS9uZXQvYnBmX2ppdF8zMi5jOjE5MDg6XFx0XFx0ZW1pdF9zdHJfcihkc3RfbG8sIHJzLCBvZmYsIGN0eCwgQlBGX1NJWkUoY29kZSkpO1xcbmFyY2gvYXJtL25ldC9icGZfaml0XzMyLmMtMTkwOS1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTEyMTE9c3RhdGljIGNvbnN0IHU4IHN0YWNrX2FyZ19yZWdbXSA9IHsgQTY0X1IoNSksIEE2NF9SKDYpLCBBNjRfUig3KSB9O1xcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTIxNC1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxMjE1OnN0YXRpYyB2b2lkIGVtaXRfc3RhY2tfYXJnX2xvYWQodTggZHN0LCBzMTYgYnBmX29mZiwgc3RydWN0IGppdF9jdHggKmN0eClcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMjE2LXtcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTEyMjQtXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MTIyNTpzdGF0aWMgdm9pZCBlbWl0X3N0YWNrX2FyZ19zdG9yZSh1OCBzcmNfYTY0LCBzMTYgYnBmX29mZiwgc3RydWN0IGppdF9jdHggKmN0eClcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMjI2LXtcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTEyMzQtXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MTIzNTpzdGF0aWMgdm9pZCBlbWl0X3N0YWNrX2FyZ19zdG9yZV9pbW0oczMyIGltbSwgczE2IGJwZl9vZmYsIGNvbnN0IHU4IHRtcCwgc3RydWN0IGppdF9jdHggKmN0eClcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMjM2LXtcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTEyNTM9c3RhdGljIGludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTE3MDItXFx0XFx0aWYgKGluc24tXFx1MDAzZXNyY19yZWcgPT0gQlBGX1JFR19QQVJBTVMpIHtcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxNzAzOlxcdFxcdFxcdGVtaXRfc3RhY2tfYXJnX2xvYWQoZHN0LCBvZmYsIGN0eCk7XFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMTcwNC1cXHRcXHRcXHRicmVhaztcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTE4MTUtXFx0XFx0aWYgKGluc24tXFx1MDAzZWRzdF9yZWcgPT0gQlBGX1JFR19QQVJBTVMpIHtcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxODE2OlxcdFxcdFxcdGVtaXRfc3RhY2tfYXJnX3N0b3JlX2ltbShpbW0sIG9mZiwgdG1wLCBjdHgpO1xcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTE4MTctXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xODg0LVxcdFxcdGlmIChpbnNuLVxcdTAwM2Vkc3RfcmVnID09IEJQRl9SRUdfUEFSQU1TKSB7XFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MTg4NTpcXHRcXHRcXHRlbWl0X3N0YWNrX2FyZ19zdG9yZShzcmMsIG9mZiwgY3R4KTtcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xODg2LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYz0yOTE9c3RhdGljIGludCBlbWl0X2JwZl90YWlsX2NhbGwoc3RydWN0IGppdF9jdHggKmN0eCwgaW50IGluc24pXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTM2MS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjM2MjpzdGF0aWMgdm9pZCBlbWl0X3N0b3JlX3N0YWNrX2ltbTY0KHN0cnVjdCBqaXRfY3R4ICpjdHgsIGludCByZWcsIGludCBzdGFja19vZmYsIHU2NCBpbW02NClcXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTM2My17XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jPTE3MDU9c3RhdGljIGludCBpbnZva2VfYnBmX3Byb2coc3RydWN0IGppdF9jdHggKmN0eCwgc3RydWN0IGJwZl90cmFtcF9ub2RlICpuLFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYy0xNzEzLVxcdGlmIChuLVxcdTAwM2Vjb29raWUpXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoxNzE0OlxcdFxcdGVtaXRfc3RvcmVfc3RhY2tfaW1tNjQoY3R4LCBMT09OR0FSQ0hfR1BSX1QxLFxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMTcxNS1cXHRcXHRcXHRcXHQgICAgICAtcnVuX2N0eF9vZmYgKyBjb29raWVfb2ZmLCBuLVxcdTAwM2Vjb29raWUpO1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYz0xNzY4PXN0YXRpYyBpbnQgaW52b2tlX2JwZihzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBzdHJ1Y3QgYnBmX3RyYW1wX25vZGVzICp0bixcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMTc3OS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjE3ODA6XFx0XFx0XFx0ZW1pdF9zdG9yZV9zdGFja19pbW02NChjdHgsIExPT05HQVJDSF9HUFJfVDEsIC1mdW5jX21ldGFfb2ZmLCBtZXRhKTtcXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTE3ODEtXFx0XFx0XFx0Y3VyX2Nvb2tpZS0tO1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYz0xODM3PXN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGppdF9jdHggKmN0eCwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTE5OTEtXFx0aWYgKGZsYWdzIFxcdTAwMjYgQlBGX1RSQU1QX0ZfSVBfQVJHKVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmM6MTk5MjpcXHRcXHRlbWl0X3N0b3JlX3N0YWNrX2ltbTY0KGN0eCwgTE9PTkdBUkNIX0dQUl9UMSwgLWlwX29mZiwgKHU2NClmdW5jX2FkZHIpO1xcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMTk5My1cXG4tLVxcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMTk5NS1cXHRmdW5jX21ldGEgPSBucl9hcmdfc2xvdHM7XFxuYXJjaC9sb29uZ2FyY2gvbmV0L2JwZl9qaXQuYzoxOTk2OlxcdGVtaXRfc3RvcmVfc3RhY2tfaW1tNjQoY3R4LCBMT09OR0FSQ0hfR1BSX1QxLCAtZnVuY19tZXRhX29mZiwgZnVuY19tZXRhKTtcXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTE5OTctXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jLTIwNzMtXFx0aWYgKGJwZl9mc2Vzc2lvbl9jbnQodG5vZGVzKSlcXG5hcmNoL2xvb25nYXJjaC9uZXQvYnBmX2ppdC5jOjIwNzQ6XFx0XFx0ZW1pdF9zdG9yZV9zdGFja19pbW02NChjdHgsIExPT05HQVJDSF9HUFJfVDEsIC1mdW5jX21ldGFfb2ZmLCBmdW5jX21ldGEpO1xcbmFyY2gvbG9vbmdhcmNoL25ldC9icGZfaml0LmMtMjA3NS1cXG4tLVxcbmFyY2gvbWlwcy9uZXQvYnBmX2ppdF9jb21wMzIuYz02NTQ9c3RhdGljIHZvaWQgZW1pdF9sZHgoc3RydWN0IGppdF9jb250ZXh0ICpjdHgsXFxuLS1cXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcDMyLmMtNjg4LS8qIFN0b3JlIG9wZXJhdGlvbjogKihzaXplICopKGRzdCArIG9mZikgPSBzcmMgKi9cXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcDMyLmM6Njg5OnN0YXRpYyB2b2lkIGVtaXRfc3R4KHN0cnVjdCBqaXRfY29udGV4dCAqY3R4LFxcbmFyY2gvbWlwcy9uZXQvYnBmX2ppdF9jb21wMzIuYy02OTAtXFx0XFx0ICAgICBjb25zdCB1OCBkc3QsIGNvbnN0IHU4IHNyY1tdLCBzMTYgb2ZmLCB1OCBzaXplKVxcbi0tXFxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXAzMi5jPTE0NjM9aW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3Qgaml0X2NvbnRleHQgKmN0eClcXG4tLVxcbmFyY2gvbWlwcy9uZXQvYnBmX2ppdF9jb21wMzIuYy0xNjc2LVxcdFxcdH1cXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcDMyLmM6MTY3NzpcXHRcXHRlbWl0X3N0eChjdHgsIGxvKGRzdCksIHRtcCwgb2ZmLCBCUEZfU0laRShjb2RlKSk7XFxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXAzMi5jLTE2NzgtXFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTY4My1cXHRjYXNlIEJQRl9TVFggfCBCUEZfTUVNIHwgQlBGX0RXOlxcbmFyY2gvbWlwcy9uZXQvYnBmX2ppdF9jb21wMzIuYzoxNjg0OlxcdFxcdGVtaXRfc3R4KGN0eCwgbG8oZHN0KSwgc3JjLCBvZmYsIEJQRl9TSVpFKGNvZGUpKTtcXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTY4NS1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gvbWlwcy9uZXQvYnBmX2ppdF9jb21wNjQuYz0zMzQ9c3RhdGljIHZvaWQgZW1pdF9sZHgoc3RydWN0IGppdF9jb250ZXh0ICpjdHgsIHU4IGRzdCwgdTggc3JjLCBzMTYgb2ZmLCB1OCBzaXplKVxcbi0tXFxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXA2NC5jLTM1Ny0vKiBTdG9yZSBvcGVyYXRpb246ICooc2l6ZSAqKShkc3QgKyBvZmYpID0gc3JjICovXFxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXA2NC5jOjM1ODpzdGF0aWMgdm9pZCBlbWl0X3N0eChzdHJ1Y3Qgaml0X2NvbnRleHQgKmN0eCwgdTggZHN0LCB1OCBzcmMsIHMxNiBvZmYsIHU4IHNpemUpXFxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXA2NC5jLTM1OS17XFxuLS1cXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcDY0LmM9NjM1PWludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IGppdF9jb250ZXh0ICpjdHgpXFxuLS1cXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcDY0LmMtODM1LVxcdFxcdGVtaXRfbW92X2koY3R4LCBNSVBTX1JfVDQsIGltbSk7XFxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXA2NC5jOjgzNjpcXHRcXHRlbWl0X3N0eChjdHgsIGRzdCwgTUlQU19SX1Q0LCBvZmYsIEJQRl9TSVpFKGNvZGUpKTtcXG5hcmNoL21pcHMvbmV0L2JwZl9qaXRfY29tcDY0LmMtODM3LVxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXA2NC5jLTg0Mi1cXHRjYXNlIEJQRl9TVFggfCBCUEZfTUVNIHwgQlBGX0RXOlxcbmFyY2gvbWlwcy9uZXQvYnBmX2ppdF9jb21wNjQuYzo4NDM6XFx0XFx0ZW1pdF9zdHgoY3R4LCBkc3QsIHNyYywgb2ZmLCBCUEZfU0laRShjb2RlKSk7XFxuYXJjaC9taXBzL25ldC9icGZfaml0X2NvbXA2NC5jLTg0NC1cXHRcXHRicmVhaztcXG4tLVxcbmFyY2gvcGFyaXNjL25ldC9icGZfaml0X2NvbXAzMi5jPTEwMDY9c3RhdGljIGludCBlbWl0X2xvYWRfcjY0KGNvbnN0IHM4ICpkc3QsIGNvbnN0IHM4ICpzcmMsIHMxNiBvZmYsXFxuLS1cXG5hcmNoL3BhcmlzYy9uZXQvYnBmX2ppdF9jb21wMzIuYy0xMDUxLVxcbmFyY2gvcGFyaXNjL25ldC9icGZfaml0X2NvbXAzMi5jOjEwNTI6c3RhdGljIGludCBlbWl0X3N0b3JlX3I2NChjb25zdCBzOCAqZHN0LCBjb25zdCBzOCAqc3JjLCBzMTYgb2ZmLFxcbmFyY2gvcGFyaXNjL25ldC9icGZfaml0X2NvbXAzMi5jLTEwNTMtXFx0XFx0XFx0ICBzdHJ1Y3QgaHBwYV9qaXRfY29udGV4dCAqY3R4LCBjb25zdCB1OCBzaXplLFxcbi0tXFxuYXJjaC9wYXJpc2MvbmV0L2JwZl9qaXRfY29tcDMyLmM9MTExNj1pbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgaHBwYV9qaXRfY29udGV4dCAqY3R4LFxcbi0tXFxuYXJjaC9wYXJpc2MvbmV0L2JwZl9qaXRfY29tcDMyLmMtMTQ0Ni1cXG5hcmNoL3BhcmlzYy9uZXQvYnBmX2ppdF9jb21wMzIuYzoxNDQ3OlxcdFxcdGlmIChlbWl0X3N0b3JlX3I2NChkc3QsIHNyYywgb2ZmLCBjdHgsIEJQRl9TSVpFKGNvZGUpLFxcbmFyY2gvcGFyaXNjL25ldC9icGZfaml0X2NvbXAzMi5jLTE0NDgtXFx0XFx0XFx0XFx0ICAgQlBGX01PREUoY29kZSkpKVxcbi0tXFxuYXJjaC9wYXJpc2MvbmV0L2JwZl9qaXRfY29tcDY0LmM9NTA1PXN0YXRpYyB2b2lkIGVtaXRfY2FsbF9saWJnY2NfbGwodm9pZCAqZnVuYywgY29uc3QgczggYXJnMCxcXG4tLVxcbmFyY2gvcGFyaXNjL25ldC9icGZfaml0X2NvbXA2NC5jLTU1My1cXG5hcmNoL3BhcmlzYy9uZXQvYnBmX2ppdF9jb21wNjQuYzo1NTQ6c3RhdGljIHZvaWQgZW1pdF9zdG9yZShjb25zdCBzOCByZCwgY29uc3QgczggcnMsIHMxNiBvZmYsXFxuYXJjaC9wYXJpc2MvbmV0L2JwZl9qaXRfY29tcDY0LmMtNTU1LVxcdFxcdFxcdCAgc3RydWN0IGhwcGFfaml0X2NvbnRleHQgKmN0eCwgY29uc3QgdTggc2l6ZSxcXG4tLVxcbmFyY2gvcGFyaXNjL25ldC9icGZfaml0X2NvbXA2NC5jPTU5Mj1pbnQgYnBmX2ppdF9lbWl0X2luc24oY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLCBzdHJ1Y3QgaHBwYV9qaXRfY29udGV4dCAqY3R4LFxcbi0tXFxuYXJjaC9wYXJpc2MvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTA4MS1cXG5hcmNoL3BhcmlzYy9uZXQvYnBmX2ppdF9jb21wNjQuYzoxMDgyOlxcdFxcdGVtaXRfc3RvcmUocmQsIHJzLCBvZmYsIGN0eCwgQlBGX1NJWkUoY29kZSksIEJQRl9NT0RFKGNvZGUpKTtcXG5hcmNoL3BhcmlzYy9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMDgzLVxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYz04MzU9c3RhdGljIGludCBlbWl0X2xvYWRfcjY0KGNvbnN0IHM4ICpkc3QsIGNvbnN0IHM4ICpzcmMsIHMxNiBvZmYsXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jLTg3MS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jOjg3MjpzdGF0aWMgaW50IGVtaXRfc3RvcmVfcjY0KGNvbnN0IHM4ICpkc3QsIGNvbnN0IHM4ICpzcmMsIHMxNiBvZmYsXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYy04NzMtXFx0XFx0XFx0ICBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eCwgY29uc3QgdTggc2l6ZSxcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmM9OTUzPWludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYy0xMjY4LVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmM6MTI2OTpcXHRcXHRpZiAoZW1pdF9zdG9yZV9yNjQoZHN0LCBzcmMsIG9mZiwgY3R4LCBCUEZfU0laRShjb2RlKSxcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jLTEyNzAtXFx0XFx0XFx0XFx0ICAgQlBGX01PREUoY29kZSkpKVxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wMzIuYy0xMjgxLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDMyLmM6MTI4MjpcXHRcXHRpZiAoZW1pdF9zdG9yZV9yNjQoZHN0LCBzcmMsIG9mZiwgY3R4LCBCUEZfU0laRShjb2RlKSxcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXAzMi5jLTEyODMtXFx0XFx0XFx0XFx0ICAgQlBGX01PREUoY29kZSkpKVxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz00NzY9c3RhdGljIHZvaWQgZW1pdF9sZHhfaW5zbih1OCByZCwgczE2IG9mZiwgdTggcnMsIHU4IHNpemUsIGJvb2wgc2lnbl9leHQsXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTQ5NS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjQ5NjpzdGF0aWMgdm9pZCBlbWl0X3N0eF9pbnNuKHU4IHJkLCBzMTYgb2ZmLCB1OCBycywgdTggc2l6ZSwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgpXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy00OTcte1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz01MTQ9c3RhdGljIHZvaWQgZW1pdF9sZHgodTggcmQsIHMxNiBvZmYsIHU4IHJzLCB1OCBzaXplLCBib29sIHNpZ25fZXh0LFxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy01MzAtXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzo1MzE6c3RhdGljIHZvaWQgZW1pdF9zdCh1OCByZCwgczE2IG9mZiwgczMyIGltbSwgdTggc2l6ZSwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgpXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy01MzIte1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy01MzUtXFx0XFx0Y3R4LVxcdTAwM2VleF9pbnNuX29mZiA9IGN0eC1cXHUwMDNlbmluc25zO1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6NTM2OlxcdFxcdGVtaXRfc3R4X2luc24ocmQsIG9mZiwgUlZfUkVHX1QxLCBzaXplLCBjdHgpO1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtNTM3LVxcdFxcdGN0eC1cXHUwMDNlZXhfam1wX29mZiA9IGN0eC1cXHUwMDNlbmluc25zO1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy01NDMtXFx0Y3R4LVxcdTAwM2VleF9pbnNuX29mZiA9IGN0eC1cXHUwMDNlbmluc25zO1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6NTQ0OlxcdGVtaXRfc3R4X2luc24oUlZfUkVHX1QyLCAwLCBSVl9SRUdfVDEsIHNpemUsIGN0eCk7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy01NDUtXFx0Y3R4LVxcdTAwM2VleF9qbXBfb2ZmID0gY3R4LVxcdTAwM2VuaW5zbnM7XFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTU0Ny1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjU0ODpzdGF0aWMgdm9pZCBlbWl0X3N0eCh1OCByZCwgczE2IG9mZiwgdTggcnMsIHU4IHNpemUsIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4KVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtNTQ5LXtcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtNTUxLVxcdFxcdGN0eC1cXHUwMDNlZXhfaW5zbl9vZmYgPSBjdHgtXFx1MDAzZW5pbnNucztcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjU1MjpcXHRcXHRlbWl0X3N0eF9pbnNuKHJkLCBvZmYsIHJzLCBzaXplLCBjdHgpO1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtNTUzLVxcdFxcdGN0eC1cXHUwMDNlZXhfam1wX29mZiA9IGN0eC1cXHUwMDNlbmluc25zO1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy01NTktXFx0Y3R4LVxcdTAwM2VleF9pbnNuX29mZiA9IGN0eC1cXHUwMDNlbmluc25zO1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6NTYwOlxcdGVtaXRfc3R4X2luc24oUlZfUkVHX1QxLCAwLCBycywgc2l6ZSwgY3R4KTtcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTU2MS1cXHRjdHgtXFx1MDAzZWV4X2ptcF9vZmYgPSBjdHgtXFx1MDAzZW5pbnNucztcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9NTY0PXN0YXRpYyBpbnQgZW1pdF9hdG9taWNfbGRfc3QodTggcmQsIHU4IHJzLCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTU5NS1cXHRcXHRlbWl0X2ZlbmNlX3J3X3coY3R4KTtcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjU5NjpcXHRcXHRlbWl0X3N0eChyZCwgb2ZmLCBycywgQlBGX1NJWkUoY29kZSksIGN0eCk7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy01OTctXFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTkxNj1zdGF0aWMgdm9pZCByZXN0b3JlX3N0YWNrX2FyZ3MoaW50IG5yX3N0YWNrX2FyZ3MsIGludCBhcmdzX29mZiwgaW50IHN0a19hcmdfb2ZmLFxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy05MjgtXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzo5Mjk6c3RhdGljIHZvaWQgZW1pdF9zdG9yZV9zdGFja19pbW02NCh1OCByZWcsIGludCBzdGFja19vZmYsIHU2NCBpbW02NCxcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTkzMC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eClcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM9OTM3PXN0YXRpYyBpbnQgaW52b2tlX2JwZl9wcm9nKHN0cnVjdCBicGZfdHJhbXBfbm9kZSAqbm9kZSwgaW50IGFyZ3Nfb2ZmLCBpbnQgcmV0dmFsX29mZixcXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtOTQ0LVxcdGlmIChub2RlLVxcdTAwM2Vjb29raWUpXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzo5NDU6XFx0XFx0ZW1pdF9zdG9yZV9zdGFja19pbW02NChSVl9SRUdfVDEsIC1ydW5fY3R4X29mZiArIGNvb2tpZV9vZmYsIG5vZGUtXFx1MDAzZWNvb2tpZSwgY3R4KTtcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTk0Ni1cXHRlbHNlXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTk5OT1zdGF0aWMgaW50IGludm9rZV9icGYoc3RydWN0IGJwZl90cmFtcF9ub2RlcyAqdG4sIGludCBhcmdzX29mZiwgaW50IHJldHZhbF9vZmYsXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEwMTAtXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxMDExOlxcdFxcdFxcdGVtaXRfc3RvcmVfc3RhY2tfaW1tNjQoUlZfUkVHX1QxLCAtZnVuY19tZXRhX29mZiwgbWV0YSwgY3R4KTtcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEwMTItXFx0XFx0XFx0Y3VyX2Nvb2tpZS0tO1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz0xMDIyPXN0YXRpYyBpbnQgX19hcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTExNjctXFx0aWYgKGZsYWdzIFxcdTAwMjYgQlBGX1RSQU1QX0ZfSVBfQVJHKVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTE2ODpcXHRcXHRlbWl0X3N0b3JlX3N0YWNrX2ltbTY0KFJWX1JFR19UMSwgLWlwX29mZiwgKHU2NClmdW5jX2FkZHIsIGN0eCk7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMTY5LVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTE3MC1cXHRmdW5jX21ldGEgPSBucl9hcmdfc2xvdHM7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxMTcxOlxcdGVtaXRfc3RvcmVfc3RhY2tfaW1tNjQoUlZfUkVHX1QxLCAtZnVuY19tZXRhX29mZiwgZnVuY19tZXRhLCBjdHgpO1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTE3Mi1cXG4tLVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTI0MS1cXHRpZiAoYnBmX2ZzZXNzaW9uX2NudCh0bm9kZXMpKVxcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTI0MjpcXHRcXHRlbWl0X3N0b3JlX3N0YWNrX2ltbTY0KFJWX1JFR19UMSwgLWZ1bmNfbWV0YV9vZmYsIGZ1bmNfbWV0YSwgY3R4KTtcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTEyNDMtXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTEzNjk9aW50IGJwZl9qaXRfZW1pdF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgc3RydWN0IHJ2X2ppdF9jb250ZXh0ICpjdHgsXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTE5NDUtXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxOTQ2OlxcdFxcdGVtaXRfc3QocmQsIG9mZiwgaW1tLCBCUEZfU0laRShjb2RlKSwgY3R4KTtcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTE5NDctXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTE5NjctXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYzoxOTY4OlxcdFxcdGVtaXRfc3R4KHJkLCBvZmYsIHJzLCBCUEZfU0laRShjb2RlKSwgY3R4KTtcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTE5NjktXFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jPTI1MjM9c3RhdGljIHZvaWQgbG9hZF9pbW02NChzdHJ1Y3QgYnBmX2ppdCAqaml0LCBpbnQgZHN0X3JlZywgdTY0IHZhbClcXG4tLVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMjUzMC1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjI1MzE6c3RhdGljIHZvaWQgZW1pdF9zdG9yZV9zdGFja19pbW02NChzdHJ1Y3QgYnBmX2ppdCAqaml0LCBpbnQgdG1wX3JlZywgaW50IHN0YWNrX29mZiwgdTY0IGltbSlcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTI1MzIte1xcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYz0yNTM4PXN0YXRpYyBpbnQgaW52b2tlX2JwZl9wcm9nKHN0cnVjdCBicGZfdHJhbXBfaml0ICp0aml0LFxcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0yNTUxLVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM6MjU1MjpcXHRlbWl0X3N0b3JlX3N0YWNrX2ltbTY0KGppdCwgUkVHX1cwLCBjb29raWVfb2ZmLCBub2RlLVxcdTAwM2Vjb29raWUpO1xcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMjU1My1cXG4tLVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM9MjYxMD1zdGF0aWMgaW50IGludm9rZV9icGYoc3RydWN0IGJwZl90cmFtcF9qaXQgKnRqaXQsXFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTI2MjEtXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzoyNjIyOlxcdFxcdFxcdGVtaXRfc3RvcmVfc3RhY2tfaW1tNjQoaml0LCBSRUdfMCwgdGppdC1cXHUwMDNlZnVuY19tZXRhX29mZiwgbWV0YSk7XFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0yNjIzLVxcdFxcdFxcdGN1cl9jb29raWUtLTtcXG4tLVxcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmM9MjY1MD1zdGF0aWMgaW50IF9fYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lKHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLFxcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0yODAwLVxcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9UUkFNUF9GX0lQX0FSRylcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjI4MDE6XFx0XFx0ZW1pdF9zdG9yZV9zdGFja19pbW02NChqaXQsIFJFR18wLCB0aml0LVxcdTAwM2VpcF9vZmYsICh1NjQpZnVuY19hZGRyKTtcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTI4MDItXFx0ZnVuY19tZXRhID0gbnJfYnBmX2FyZ3M7XFxuLS1cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTI4MjItXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNvb2tpZV9jbnQ7IGkrKylcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjI4MjM6XFx0XFx0XFx0ZW1pdF9zdG9yZV9zdGFja19pbW02NChqaXQsIFJFR18wLCBjb29raWVfb2ZmICsgOCAqIGksIDApO1xcbmFyY2gvczM5MC9uZXQvYnBmX2ppdF9jb21wLmMtMjgyNC1cXHRcXHQvKiBDbGVhciB0aGUgcmV0dXJuIHZhbHVlIHRvIG1ha2Ugc3VyZSBmZW50cnkgYWx3YXlzIGdldHMgMC4gKi9cXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jOjI4MjU6XFx0XFx0ZW1pdF9zdG9yZV9zdGFja19pbW02NChqaXQsIFJFR18wLCB0aml0LVxcdTAwM2VyZXR2YWxfb2ZmLCAwKTtcXG5hcmNoL3MzOTAvbmV0L2JwZl9qaXRfY29tcC5jLTI4MjYtXFx0fVxcbi0tXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0yOTA5LVxcdGlmIChmc2Vzc2lvbl9jbnQpXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYzoyOTEwOlxcdFxcdGVtaXRfc3RvcmVfc3RhY2tfaW1tNjQoaml0LCBSRUdfVzAsIHRqaXQtXFx1MDAzZWZ1bmNfbWV0YV9vZmYsXFxuYXJjaC9zMzkwL25ldC9icGZfaml0X2NvbXAuYy0yOTExLVxcdFxcdFxcdFxcdCAgICAgICBmdW5jX21ldGEpO1xcbi0tXFxuYXJjaC9zcGFyYy9uZXQvYnBmX2ppdF9jb21wXzMyLmM9MjEyPWRvIHtcXHQqcHJvZysrID0gTEQzMkkgfCBSUzEoU1ApIHwgUzEzKEJJQVMgLSAoT0ZGKSkgfCBSRChERVNUKTtcXHRcXFxcXFxuLS1cXG5hcmNoL3NwYXJjL25ldC9icGZfaml0X2NvbXBfMzIuYy0yMTQtXFxuYXJjaC9zcGFyYy9uZXQvYnBmX2ppdF9jb21wXzMyLmM6MjE1OiNkZWZpbmUgZW1pdF9zdG1lbShPRkYsIFNSQylcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuYXJjaC9zcGFyYy9uZXQvYnBmX2ppdF9jb21wXzMyLmMtMjE2LWRvIHtcXHQqcHJvZysrID0gU1QzMkkgfCBSUzEoU1ApIHwgUzEzKEJJQVMgLSAoT0ZGKSkgfCBSRChTUkMpO1xcdFxcXFxcXG4tLVxcbmFyY2gvc3BhcmMvbmV0L2JwZl9qaXRfY29tcF8zMi5jPTMyNj12b2lkIGJwZl9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3Byb2cgKmZwKVxcbi0tXFxuYXJjaC9zcGFyYy9uZXQvYnBmX2ppdF9jb21wXzMyLmMtNTg1LVxcdFxcdFxcdFxcdHNlZW4gfD0gU0VFTl9NRU07XFxuYXJjaC9zcGFyYy9uZXQvYnBmX2ppdF9jb21wXzMyLmM6NTg2OlxcdFxcdFxcdFxcdGVtaXRfc3RtZW0oSyAqIDQsIHJfQSk7XFxuYXJjaC9zcGFyYy9uZXQvYnBmX2ppdF9jb21wXzMyLmMtNTg3LVxcdFxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC9zcGFyYy9uZXQvYnBmX2ppdF9jb21wXzMyLmMtNTg5LVxcdFxcdFxcdFxcdHNlZW4gfD0gU0VFTl9NRU0gfCBTRUVOX1hSRUc7XFxuYXJjaC9zcGFyYy9uZXQvYnBmX2ppdF9jb21wXzMyLmM6NTkwOlxcdFxcdFxcdFxcdGVtaXRfc3RtZW0oSyAqIDQsIHJfWCk7XFxuYXJjaC9zcGFyYy9uZXQvYnBmX2ppdF9jb21wXzMyLmMtNTkxLVxcdFxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTEzMTQ9c3RhdGljIHZvaWQgZW1pdF9sZHN4X3IxMih1OCAqKnByb2csIHUzMiBzaXplLCB1MzIgZHN0X3JlZywgdTMyIHNyY19yZWcsIGludCBvZmYpXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTMxOS0vKiBTVFg6ICoodTgqKShkc3RfcmVnICsgb2ZmKSA9IHNyY19yZWcgKi9cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTMyMDpzdGF0aWMgdm9pZCBlbWl0X3N0eCh1OCAqKnBwcm9nLCB1MzIgc2l6ZSwgdTMyIGRzdF9yZWcsIHUzMiBzcmNfcmVnLCBpbnQgb2ZmKVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMzIxLXtcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMzUzLS8qIFNUWDogKih1OCopKGRzdF9yZWcgKyBpbmRleF9yZWcgKyBvZmYpID0gc3JjX3JlZyAqL1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMzU0OnN0YXRpYyB2b2lkIGVtaXRfc3R4X2luZGV4KHU4ICoqcHByb2csIHUzMiBzaXplLCB1MzIgZHN0X3JlZywgdTMyIHNyY19yZWcsIHUzMiBpbmRleF9yZWcsIGludCBvZmYpXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEzNTUte1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEzNzktXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjEzODA6c3RhdGljIHZvaWQgZW1pdF9zdHhfcjEyKHU4ICoqcHByb2csIHUzMiBzaXplLCB1MzIgZHN0X3JlZywgdTMyIHNyY19yZWcsIGludCBvZmYpXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTEzODEte1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMzgyOlxcdGVtaXRfc3R4X2luZGV4KHBwcm9nLCBzaXplLCBkc3RfcmVnLCBzcmNfcmVnLCBYODZfUkVHX1IxMiwgb2ZmKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTM4My19XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTM4NS0vKiBTVDogKih1OCopKGRzdF9yZWcgKyBpbmRleF9yZWcgKyBvZmYpID0gaW1tMzIgKi9cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTM4NjpzdGF0aWMgdm9pZCBlbWl0X3N0X2luZGV4KHU4ICoqcHByb2csIHUzMiBzaXplLCB1MzIgZHN0X3JlZywgdTMyIGluZGV4X3JlZywgaW50IG9mZiwgaW50IGltbSlcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTM4Ny17XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTQxMi1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTQxMzpzdGF0aWMgdm9pZCBlbWl0X3N0KHU4ICoqcHByb2csIHN0cnVjdCBicGZfaW5zbiAqaW5zbiwgaW50IGRzdF9yZWcsXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE0MTQtXFx0XFx0ICAgIHMzMiBvdXRnb2luZ19hcmdfYmFzZSwgdTE2IG91dGdvaW5nX3JzcClcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNDcwLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxNDcxOnN0YXRpYyB2b2lkIGVtaXRfc3RfcjEyKHU4ICoqcHByb2csIHUzMiBzaXplLCB1MzIgZHN0X3JlZywgaW50IG9mZiwgaW50IGltbSlcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTQ3Mi17XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE0NzM6XFx0ZW1pdF9zdF9pbmRleChwcHJvZywgc2l6ZSwgZHN0X3JlZywgWDg2X1JFR19SMTIsIG9mZiwgaW1tKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTQ3NC19XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE0NzUtXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE0NzY6c3RhdGljIHZvaWQgZW1pdF9zdG9yZV9zdGFja19pbW02NCh1OCAqKnBwcm9nLCBpbnQgcmVnLCBpbnQgc3RhY2tfb2ZmLCB1NjQgaW1tNjQpXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE0Nzcte1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE0ODItXFx0ZW1pdF9tb3ZfaW1tNjQocHByb2csIHJlZywgaW1tNjQgXFx1MDAzZVxcdTAwM2UgMzIsICh1MzIpIGltbTY0KTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTQ4MzpcXHRlbWl0X3N0eChwcHJvZywgQlBGX0RXLCBCUEZfUkVHX0ZQLCByZWcsIHN0YWNrX29mZik7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE0ODQtfVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTE1Nzk9c3RhdGljIGludCBlbWl0X2F0b21pY19sZF9zdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1OCAqKnBwcm9nLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE2MDEtXFx0XFx0Lyogc21wX3N0b3JlX3JlbGVhc2UoZHN0X3JlZyArIG9mZjE2LCBzcmNfcmVnKSAqL1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxNjAyOlxcdFxcdGVtaXRfc3R4KHBwcm9nLCBCUEZfU0laRShpbnNuLVxcdTAwM2Vjb2RlKSwgZHN0X3JlZywgc3JjX3JlZyxcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTYwMy1cXHRcXHRcXHQgaW5zbi1cXHUwMDNlb2ZmKTtcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xNjE0PXN0YXRpYyBpbnQgZW1pdF9hdG9taWNfbGRfc3RfaW5kZXgodTggKipwcHJvZywgdTMyIGF0b21pY19vcCwgdTMyIHNpemUsXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTYyNC1cXHRcXHQvKiBzbXBfc3RvcmVfcmVsZWFzZShkc3RfcmVnICsgaWR4X3JlZyArIG9mZjE2LCBzcmNfcmVnKSAqL1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxNjI1OlxcdFxcdGVtaXRfc3R4X2luZGV4KHBwcm9nLCBzaXplLCBkc3RfcmVnLCBzcmNfcmVnLCBpbmRleF9yZWcsIG9mZik7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE2MjYtXFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTg0OD1zdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKmFkZHJzLCB1OCAqaW1hZ2UsXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjM5MS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjM5MjpcXHRcXHRcXHRlbWl0X3N0KFxcdTAwMjZwcm9nLCBpbnNuLCBkc3RfcmVnLCBvdXRnb2luZ19hcmdfYmFzZSxcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjM5My1cXHRcXHRcXHRcXHRvdXRnb2luZ19yc3ApO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI0MTQtXFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjQxNTpcXHRcXHRcXHRlbWl0X3N0eChcXHUwMDI2cHJvZywgQlBGX1NJWkUoaW5zbi1cXHUwMDNlY29kZSksIGRzdF9yZWcsIHNyY19yZWcsIGluc25fb2ZmKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjQxNi1cXHRcXHRcXHRicmVhaztcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yNDIyLVxcdFxcdFxcdHN0YXJ0X29mX2xkeCA9IHByb2c7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjI0MjM6XFx0XFx0XFx0ZW1pdF9zdF9yMTIoXFx1MDAyNnByb2csIEJQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpLCBkc3RfcmVnLCBpbnNuLVxcdTAwM2VvZmYsIGluc24tXFx1MDAzZWltbSk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI0MjQtXFx0XFx0XFx0Z290byBwb3B1bGF0ZV9leHRhYmxlO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI0NDQtXFx0XFx0XFx0fSBlbHNlIHtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjQ0NTpcXHRcXHRcXHRcXHRlbWl0X3N0eF9yMTIoXFx1MDAyNnByb2csIEJQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpLCBkc3RfcmVnLCBzcmNfcmVnLCBpbnNuLVxcdTAwM2VvZmYpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yNDQ2LVxcdFxcdFxcdH1cXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zMTU5PXN0YXRpYyB2b2lkIHNhdmVfYXJncyhjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIHU4ICoqcHJvZyxcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zMjA0LVxcdFxcdFxcdFxcdFxcdCBucl9zdGFja19zbG90cyAqIDggKyAxNiArICghdXNlX2ptcCkgKiA4KTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzIwNTpcXHRcXHRcXHRcXHRlbWl0X3N0eChwcm9nLCBCUEZfRFcsIEJQRl9SRUdfRlAsIEJQRl9SRUdfMCxcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzIwNi1cXHRcXHRcXHRcXHRcXHQgLXN0YWNrX3NpemUpO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTMyMjQtXFx0XFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIGFyZ19yZWdzOyBqKyspIHtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzIyNTpcXHRcXHRcXHRcXHRlbWl0X3N0eChwcm9nLCBCUEZfRFcsIEJQRl9SRUdfRlAsXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTMyMjYtXFx0XFx0XFx0XFx0XFx0IG5yX3JlZ3MgPT0gNSA/IFg4Nl9SRUdfUjkgOiBCUEZfUkVHXzEgKyBucl9yZWdzLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTMyNjk9c3RhdGljIGludCBpbnZva2VfYnBmX3Byb2coY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1OCAqKnBwcm9nLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTMyODktXFx0ICovXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjMyOTA6XFx0ZW1pdF9zdHgoXFx1MDAyNnByb2csIEJQRl9EVywgQlBGX1JFR19GUCwgQlBGX1JFR18xLCAtcnVuX2N0eF9vZmYgKyBjdHhfY29va2llX29mZik7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTMyOTEtXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzMzNS1cXHRpZiAoc2F2ZV9yZXQpXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjMzMzY6XFx0XFx0ZW1pdF9zdHgoXFx1MDAyNnByb2csIEJQRl9EVywgQlBGX1JFR19GUCwgQlBGX1JFR18wLCAtOCk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTMzMzctXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MzM4ND1zdGF0aWMgaW50IGludm9rZV9icGYoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1OCAqKnBwcm9nLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTMzOTQtXFx0XFx0aWYgKHRsLVxcdTAwM2Vub2Rlc1tpXS1cXHUwMDNlbGluay1cXHUwMDNlcHJvZy1cXHUwMDNlY2FsbF9zZXNzaW9uX2Nvb2tpZSkge1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozMzk1OlxcdFxcdFxcdGVtaXRfc3RvcmVfc3RhY2tfaW1tNjQoXFx1MDAyNnByb2csIEJQRl9SRUdfMCwgLWZ1bmNfbWV0YV9vZmYsXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTMzOTYtXFx0XFx0XFx0XFx0ZnVuY19tZXRhIHwgKGN1cl9jb29raWUgXFx1MDAzY1xcdTAwM2MgQlBGX1RSQU1QX0NPT0tJRV9JTkRFWF9TSElGVCkpO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTM0MDc9c3RhdGljIGludCBpbnZva2VfYnBmX21vZF9yZXQoY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCB1OCAqKnBwcm9nLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM0MTgtXFx0ZW1pdF9tb3ZfaW1tMzIoXFx1MDAyNnByb2csIGZhbHNlLCBCUEZfUkVHXzAsIDApO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozNDE5OlxcdGVtaXRfc3R4KFxcdTAwMjZwcm9nLCBCUEZfRFcsIEJQRl9SRUdfRlAsIEJQRl9SRUdfMCwgLTgpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNDIwLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0bC1cXHUwMDNlbnJfbm9kZXM7IGkrKykge1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTM1MDk9c3RhdGljIGludCBfX2FyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcndfaW1hZ2UsXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzY2MC1cXHQvKiBtb3YgUVdPUkQgUFRSIFtyYnAgLSByYnhfb2ZmXSwgcmJ4ICovXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM2NjE6XFx0ZW1pdF9zdHgoXFx1MDAyNnByb2csIEJQRl9EVywgQlBGX1JFR19GUCwgQlBGX1JFR182LCAtcmJ4X29mZik7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM2NjItXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzY2NC1cXHQvKiBTdG9yZSBudW1iZXIgb2YgYXJndW1lbnQgcmVnaXN0ZXJzIG9mIHRoZSB0cmFjZWQgZnVuY3Rpb24gKi9cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzY2NTpcXHRlbWl0X3N0b3JlX3N0YWNrX2ltbTY0KFxcdTAwMjZwcm9nLCBCUEZfUkVHXzAsIC1mdW5jX21ldGFfb2ZmLCBmdW5jX21ldGEpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNjY2LVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM2NjgtXFx0XFx0LyogU3RvcmUgSVAgYWRkcmVzcyBvZiB0aGUgdHJhY2VkIGZ1bmN0aW9uICovXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM2Njk6XFx0XFx0ZW1pdF9zdG9yZV9zdGFja19pbW02NChcXHUwMDI2cHJvZywgQlBGX1JFR18wLCAtaXBfb2ZmLCAobG9uZylmdW5jX2FkZHIpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNjcwLVxcdH1cXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNjg2LVxcdFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgY29va2llX2NudDsgaSsrKVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozNjg3OlxcdFxcdFxcdGVtaXRfc3RvcmVfc3RhY2tfaW1tNjQoXFx1MDAyNnByb2csIEJQRl9SRUdfMCwgLWNvb2tpZV9vZmYgKyA4ICogaSwgMCk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM2ODgtXFx0XFx0LyogY2xlYXIgdGhlIHJldHVybiB2YWx1ZSB0byBtYWtlIHN1cmUgZmVudHJ5IGFsd2F5cyBnZXQgMCAqL1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozNjg5OlxcdFxcdGVtaXRfc3RvcmVfc3RhY2tfaW1tNjQoXFx1MDAyNnByb2csIEJQRl9SRUdfMCwgLTgsIDApO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNjkwLVxcdH1cXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zNzMzLVxcdFxcdC8qIHJlbWVtYmVyIHJldHVybiB2YWx1ZSBpbiBhIHN0YWNrIGZvciBicGYgcHJvZyB0byBhY2Nlc3MgKi9cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MzczNDpcXHRcXHRlbWl0X3N0eChcXHUwMDI2cHJvZywgQlBGX0RXLCBCUEZfUkVHX0ZQLCBCUEZfUkVHXzAsIC04KTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzczNS1cXHRcXHRpbS1cXHUwMDNlaXBfYWZ0ZXJfY2FsbCA9IGltYWdlICsgKHByb2cgLSAodTggKilyd19pbWFnZSk7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzc1Ny1cXHRpZiAoYnBmX2ZzZXNzaW9uX2NudCh0bm9kZXMpKVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozNzU4OlxcdFxcdGVtaXRfc3RvcmVfc3RhY2tfaW1tNjQoXFx1MDAyNnByb2csIEJQRl9SRUdfMCwgLWZ1bmNfbWV0YV9vZmYsIGZ1bmNfbWV0YSk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM3NTktXFxuLS1cXG5kcml2ZXJzL2RtYS9wbDMzMC5jPTExMTk9c3RhdGljIHUzMiBfZW1pdF9sb2FkKHVuc2lnbmVkIGludCBkcnlfcnVuLCB1OCBidWZbXSxcXG4tLVxcbmRyaXZlcnMvZG1hL3BsMzMwLmMtMTE1MS1cXG5kcml2ZXJzL2RtYS9wbDMzMC5jOjExNTI6c3RhdGljIGlubGluZSB1MzIgX2VtaXRfc3RvcmUodW5zaWduZWQgaW50IGRyeV9ydW4sIHU4IGJ1ZltdLFxcbmRyaXZlcnMvZG1hL3BsMzMwLmMtMTE1My1cXHRlbnVtIHBsMzMwX2NvbmQgY29uZCwgZW51bSBkbWFfdHJhbnNmZXJfZGlyZWN0aW9uIGRpcmVjdGlvbixcXG4tLVxcbmRyaXZlcnMvZG1hL3BsMzMwLmM9MTE4NT1zdGF0aWMgaW5saW5lIGludCBfbGRzdF9wZXJpcGhlcmFsKHN0cnVjdCBwbDMzMF9kbWFjICpwbDMzMCxcXG4tLVxcbmRyaXZlcnMvZG1hL3BsMzMwLmMtMTIwMS1cXHRcXHRcXHRweHMtXFx1MDAzZWRlc2MtXFx1MDAzZXBlcmkpO1xcbmRyaXZlcnMvZG1hL3BsMzMwLmM6MTIwMjpcXHRcXHRvZmYgKz0gX2VtaXRfc3RvcmUoZHJ5X3J1biwgXFx1MDAyNmJ1ZltvZmZdLCBjb25kLCBweHMtXFx1MDAzZWRlc2MtXFx1MDAzZXJxdHlwZSxcXG5kcml2ZXJzL2RtYS9wbDMzMC5jLTEyMDMtXFx0XFx0XFx0cHhzLVxcdTAwM2VkZXNjLVxcdTAwM2VwZXJpKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaWd0X2dlbV91dGlscy5jPTQxPXN0cnVjdCBpOTE1X3ZtYSAqXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pZ3RfZ2VtX3V0aWxzLmM6NDI6aWd0X2VtaXRfc3RvcmVfZHcoc3RydWN0IGk5MTVfdm1hICp2bWEsXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pZ3RfZ2VtX3V0aWxzLmMtNDMtXFx0XFx0ICB1NjQgb2Zmc2V0LFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pZ3RfZ2VtX3V0aWxzLmM9MTExPWludCBpZ3RfZ3B1X2ZpbGxfZHcoc3RydWN0IGludGVsX2NvbnRleHQgKmNlLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL3NlbGZ0ZXN0cy9pZ3RfZ2VtX3V0aWxzLmMtMTIyLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaWd0X2dlbV91dGlscy5jOjEyMzpcXHRiYXRjaCA9IGlndF9lbWl0X3N0b3JlX2R3KHZtYSwgb2Zmc2V0LCBjb3VudCwgdmFsKTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2lndF9nZW1fdXRpbHMuYy0xMjQtXFx0aWYgKElTX0VSUihiYXRjaCkpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vc2VsZnRlc3RzL2lndF9nZW1fdXRpbHMuaD0yND1zdHJ1Y3QgaTkxNV92bWEgKlxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaWd0X2dlbV91dGlscy5oOjI1OmlndF9lbWl0X3N0b3JlX2R3KHN0cnVjdCBpOTE1X3ZtYSAqdm1hLFxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9zZWxmdGVzdHMvaWd0X2dlbV91dGlscy5oLTI2LVxcdFxcdCAgdTY0IG9mZnNldCxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2dlbjdfcmVuZGVyY2xlYXIuYz0yMzQ9c3RhdGljIHZvaWRcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9nZW43X3JlbmRlcmNsZWFyLmM6MjM1OmdlbjdfZW1pdF9zdGF0ZV9iYXNlX2FkZHJlc3Moc3RydWN0IGJhdGNoX2NodW5rICpiYXRjaCxcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9nZW43X3JlbmRlcmNsZWFyLmMtMjM2LVxcdFxcdFxcdCAgICAgdTMyIHN1cmZhY2Vfc3RhdGVfYmFzZSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2dlbjdfcmVuZGVyY2xlYXIuYz0zNzY9c3RhdGljIHZvaWQgZW1pdF9iYXRjaChzdHJ1Y3QgaTkxNV92bWEgKiBjb25zdCB2bWEsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9nZW43X3JlbmRlcmNsZWFyLmMtNDE3LVxcdGdlbjdfZW1pdF9waXBlbGluZV9mbHVzaChcXHUwMDI2Y21kcyk7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvZ2VuN19yZW5kZXJjbGVhci5jOjQxODpcXHRnZW43X2VtaXRfc3RhdGVfYmFzZV9hZGRyZXNzKFxcdTAwMjZjbWRzLCBkZXNjcmlwdG9ycyk7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvZ2VuN19yZW5kZXJjbGVhci5jLTQxOS1cXHRnZW43X2VtaXRfcGlwZWxpbmVfaW52YWxpZGF0ZShcXHUwMDI2Y21kcyk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9lbmdpbmVfcG0uYz0zND1zdGF0aWMgdTMyICplbWl0X3dhaXQodTMyICpjcywgdTMyIG9mZnNldCwgaW50IG9wLCB1MzIgdmFsdWUpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9lbmdpbmVfcG0uYy00Ni1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9lbmdpbmVfcG0uYzo0NzpzdGF0aWMgdTMyICplbWl0X3N0b3JlKHUzMiAqY3MsIHUzMiBvZmZzZXQsIHUzMiB2YWx1ZSlcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9lbmdpbmVfcG0uYy00OC17XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9lbmdpbmVfcG0uYz03Mz1zdGF0aWMgaW50IF9fbWVhc3VyZV90aW1lc3RhbXBzKHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2VuZ2luZV9wbS5jLTkyLVxcdC8qIFNpZ25hbCBcXHUwMDI2IHdhaXQgZm9yIHN0YXJ0ICovXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfZW5naW5lX3BtLmM6OTM6XFx0Y3MgPSBlbWl0X3N0b3JlKGNzLCBvZmZzZXQgKyA0MDA4LCAxKTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9lbmdpbmVfcG0uYy05NC1cXHRjcyA9IGVtaXRfd2FpdChjcywgb2Zmc2V0ICsgNDAwOCwgTUlfU0VNQVBIT1JFX1NBRF9ORVFfU0RELCAxKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3JlcXVlc3QuYz0xOTU5PXN0YXRpYyB1MzIgKmVtaXRfdGltZXN0YW1wX3N0b3JlKHUzMiAqY3MsIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwgdTMyIG9mZnNldClcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3JlcXVlc3QuYy0xOTY4LVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3JlcXVlc3QuYzoxOTY5OnN0YXRpYyB1MzIgKmVtaXRfc3RvcmVfZHcodTMyICpjcywgdTMyIG9mZnNldCwgdTMyIHZhbHVlKVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3JlcXVlc3QuYy0xOTcwLXtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3JlcXVlc3QuYz0yMDE0PXN0YXRpYyBpbnQgbWVhc3VyZV9zZW1hcGhvcmVfcmVzcG9uc2Uoc3RydWN0IGludGVsX2NvbnRleHQgKmNlKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jLTIwNDctXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jOjIwNDg6XFx0Y3MgPSBlbWl0X3N0b3JlX2R3KGNzLCBvZmZzZXQsIDApO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3JlcXVlc3QuYy0yMDQ5LVxcdGZvciAoaSA9IDE7IGkgXFx1MDAzYz0gQVJSQVlfU0laRShlbGFwc2VkKTsgaSsrKSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9yZXF1ZXN0LmMtMjA1MS1cXHRcXHRjcyA9IGVtaXRfdGltZXN0YW1wX3N0b3JlKGNzLCBjZSwgb2Zmc2V0ICsgaSAqIHNpemVvZih1MzIpKTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9yZXF1ZXN0LmM6MjA1MjpcXHRcXHRjcyA9IGVtaXRfc3RvcmVfZHcoY3MsIG9mZnNldCwgMCk7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jLTIwNTMtXFx0fVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jPTIxNjA9c3RhdGljIGludCBtZWFzdXJlX2J1c3lfZGlzcGF0Y2goc3RydWN0IGludGVsX2NvbnRleHQgKmNlKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jLTIxOTYtXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jOjIxOTc6XFx0XFx0Y3MgPSBlbWl0X3N0b3JlX2R3KGNzLCBvZmZzZXQgKyBpICogc2l6ZW9mKHUzMiksIC0xKTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9yZXF1ZXN0LmMtMjE5OC1cXHRcXHRjcyA9IGVtaXRfc2VtYXBob3JlX3BvbGxfdW50aWwoY3MsIG9mZnNldCwgaSk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9yZXF1ZXN0LmM9MjQ0OD1zdGF0aWMgaW50IG1lYXN1cmVfcHJlZW1wdGlvbihzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9yZXF1ZXN0LmMtMjQ5Mi1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9yZXF1ZXN0LmM6MjQ5MzpcXHRcXHRjcyA9IGVtaXRfc3RvcmVfZHcoY3MsIGFkZHIsIC0xKTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9yZXF1ZXN0LmMtMjQ5NC1cXHRcXHRjcyA9IGVtaXRfc2VtYXBob3JlX3BvbGxfdW50aWwoY3MsIG9mZnNldCwgaSk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9yZXF1ZXN0LmMtMjUxOC1cXHRcXHRjcyA9IGVtaXRfdGltZXN0YW1wX3N0b3JlKGNzLCBjZSwgYWRkcik7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jOjI1MTk6XFx0XFx0Y3MgPSBlbWl0X3N0b3JlX2R3KGNzLCBvZmZzZXQsIGkpO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3JlcXVlc3QuYy0yNTIwLVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jPTI1Njg9c3RhdGljIGludCBtZWFzdXJlX2NvbXBsZXRpb24oc3RydWN0IGludGVsX2NvbnRleHQgKmNlKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jLTI2MDQtXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jOjI2MDU6XFx0XFx0Y3MgPSBlbWl0X3N0b3JlX2R3KGNzLCBvZmZzZXQgKyBpICogc2l6ZW9mKHUzMiksIC0xKTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9yZXF1ZXN0LmMtMjYwNi1cXHRcXHRjcyA9IGVtaXRfc2VtYXBob3JlX3BvbGxfdW50aWwoY3MsIG9mZnNldCwgaSk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmluZ19vcHMuYz05NT1zdGF0aWMgaW50IGVtaXRfdXNlcl9pbnRlcnJ1cHQodTMyICpkdywgaW50IGkpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmluZ19vcHMuYy0xMDMtXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jpbmdfb3BzLmM6MTA0OnN0YXRpYyBpbnQgZW1pdF9zdG9yZV9pbW1fZ2d0dCh1MzIgYWRkciwgdTMyIHZhbHVlLCB1MzIgKmR3LCBpbnQgaSlcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfcmluZ19vcHMuYy0xMDUte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jpbmdfb3BzLmM9MTY5PXN0YXRpYyBpbnQgZW1pdF9waXBlX2ludmFsaWRhdGUoc3RydWN0IHhlX2V4ZWNfcXVldWUgKnEsIHUzMiBtYXNrX2ZsYWdzLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3Jpbmdfb3BzLmMtMTk4LVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9yaW5nX29wcy5jOjE5OTpzdGF0aWMgaW50IGVtaXRfc3RvcmVfaW1tX3BwZ3R0X3Bvc3RlZCh1NjQgYWRkciwgdTY0IHZhbHVlLFxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNDozMzowMS44NTg5NDExMTJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIyNDYzODk3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBjb2RlIHNuaXBwZXQ6XG5cbioqRGl2aW5nIGludG8gYGVtaXRfc3RgIGluIHRoZSB4ODYgQlBGIEpJVCBDb21waWxlcioqXG5cbk9rYXksIHNvIEkgc2VlIGEgbmV3IGZ1bmN0aW9uLCBgZW1pdF9zdGAsIG5lc3RsZWQgd2l0aGluIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLiBUaGUgc2lnbmF0dXJlIGdpdmVzIHVzIHNvbWUgY29udGV4dDogYHN0YXRpYyB2b2lkIGVtaXRfc3QodTggKipwcHJvZywgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpbnQgZHN0X3JlZywgczMyIG91dGdvaW5nX2FyZ19iYXNlLCB1MTYgb3V0Z29pbmdfcnNwKWAuIFJpZ2h0IG9mZiB0aGUgYmF0LCBgc3RhdGljYCB0ZWxscyBtZSBpdCdzIGxvY2FsIHRvIHRoaXMgY29tcGlsYXRpb24gdW5pdCwgd2hpY2ggaXMgdHlwaWNhbCBmb3IgSklULXJlbGF0ZWQgaGVscGVycy4gVGhlIGZhY3QgaXQgdGFrZXMgYSBkb3VibGUgcG9pbnRlciB0byBgdThgIChgcHByb2dgKSBpbW1lZGlhdGVseSBzdWdnZXN0cyBpdCdzIGxpa2VseSByZXNwb25zaWJsZSBmb3Igd3JpdGluZyBjb21waWxlZCBpbnN0cnVjdGlvbnMgZGlyZWN0bHkgaW50byB0aGUgcHJvZ3JhbSBidWZmZXIuXG5cblRoZSBvdGhlciBwYXJhbWV0ZXJzIGFyZSBpbnRlcmVzdGluZzogYHN0cnVjdCBicGZfaW5zbiAqaW5zbmAgaXMgdGhlIEJQRiBpbnN0cnVjdGlvbiBiZWluZyBjb21waWxlZC4gYGRzdF9yZWdgIHNvdW5kcyBsaWtlIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciB3aXRoaW4gdGhlIHg4NiBhcmNoaXRlY3R1cmUgdGhhdCdzIGJlaW5nIHRhcmdldGVkLCBsaWtlbHkgcmVsYXRlZCB0byB0aGUgQlBGJ3MgdmlydHVhbCByZWdpc3RlciBzZXQuIGBvdXRnb2luZ19hcmdfYmFzZWAgYW5kIGBvdXRnb2luZ19yc3BgIHN1Z2dlc3QgaXQncyBkZWFsaW5nIHdpdGggc3RhY2stYmFzZWQgYXJndW1lbnRzLCBtYXliZSBmb3IgYSBmdW5jdGlvbiBjYWxsLiBJdCdzIGxpa2VseSBpbnZvbHZlZCBpbiBpbXBsZW1lbnRpbmcgQlBGIGluc3RydWN0aW9ucyB0aGF0IHN0b3JlIGRhdGEsIGxpa2UgdGhlIGBCUEZfU1RgIGZhbWlseSwgYW5kIHBvdGVudGlhbGx5IGhhbmRsaW5nIHRoZSBzdGFjayBmcmFtZSBwcm9wZXJseS5cblxuR2l2ZW4gdGhhdCB0aGlzIGlzIGEgKm5ldyogZnVuY3Rpb24sIEkgbmVlZCB0byBsb29rIGRlZXBlciBpbnRvIHRoZSBwYXRjaCB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbi4gV2hhdCBzcGVjaWZpYyBCUEYgaW5zdHJ1Y3Rpb25zIGlzIGl0IG1lYW50IHRvIGhhbmRsZT8gV2hhdCdzIHRoZSBjb250ZXh0IHdoZXJlIGl0J3MgY2FsbGVkPyBJdCBpcyBsaWtlbHkgYSBjb3JlIGVsZW1lbnQgb2YgdGhlIGltcGxlbWVudGF0aW9uLCBzbyBsZXQncyB2ZXJpZnkgd2hlcmUgaXQncyBjYWxsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1OTQwLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDQ6MzM6MDYuMDgzNTgyODQ1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTY5MDE0MDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRpYyB2b2lkIGVtaXRfc3RcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jPTUxND1zdGF0aWMgdm9pZCBlbWl0X2xkeCh1OCByZCwgczE2IG9mZiwgdTggcnMsIHU4IHNpemUsIGJvb2wgc2lnbl9leHQsXFxuLS1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTUzMC1cXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jOjUzMTpzdGF0aWMgdm9pZCBlbWl0X3N0KHU4IHJkLCBzMTYgb2ZmLCBzMzIgaW1tLCB1OCBzaXplLCBzdHJ1Y3QgcnZfaml0X2NvbnRleHQgKmN0eClcXG5hcmNoL3Jpc2N2L25ldC9icGZfaml0X2NvbXA2NC5jLTUzMi17XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTM4Nj1zdGF0aWMgdm9pZCBlbWl0X3N0X2luZGV4KHU4ICoqcHByb2csIHUzMiBzaXplLCB1MzIgZHN0X3JlZywgdTMyIGluZGV4X3JlZywgaW50IG9mZiwgaW50IGltbSlcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNDEyLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxNDEzOnN0YXRpYyB2b2lkIGVtaXRfc3QodTggKipwcHJvZywgc3RydWN0IGJwZl9pbnNuICppbnNuLCBpbnQgZHN0X3JlZyxcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTQxNC1cXHRcXHQgICAgczMyIG91dGdvaW5nX2FyZ19iYXNlLCB1MTYgb3V0Z29pbmdfcnNwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNDozMzowOC42NTI2MDIxMzFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY4NDgyMzQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtBU0FOIEJQRiBKSVQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgYGVtaXRfc3RgIGluIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgIGp1bXBzIG91dCBhcyBhIG5ldyBmdW5jdGlvbi4gR29vZCwgZ29vZC4gU28gdGhlIG1haW4gYXJlYXMgSSBuZWVkIHRvIGZvY3VzIG9uLCB0aGUga2V5IHN5bWJvbHMgY2hhbmdlZCBvciBpbnRyb2R1Y2VkLCBhcmU6XG5cbiogICBgZW1pdF9rYXNhbl9jaGVja2AgLSBEZWZpbml0ZWx5IG5ldy5cbiogICBgZW1pdF9zdGAgLSBZZXAsIHRoYXQncyBhIG5ldyBvbmUuXG4qICAgYGVtaXRfYXRvbWljX2xkX3N0YCAtIE1vZGlmaWVkLCBzbyB3b3J0aCBhIGRlZXBlciBsb29rLlxuKiAgIGBhZGp1c3RfaW5zbl9hdXhfZGF0YWAgLSBNb2RpZmllZCBhcyB3ZWxsLlxuKiAgIGBicGZfcGF0Y2hfaW5zbl9kYXRhYCAtIFRoaXMgKndhcyogZXhpc3RpbmcsIGJ1dCB0aGUgZmFjdCBpdCdzIGJlZW4gdG91Y2hlZCBtZWFucyBzb21ldGhpbmcgc2lnbmlmaWNhbnQgY2hhbmdlZC5cblxuSGFuZyBvbi4uLiBMZXQgbWUgc2NhbiBhZ2FpbiB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBjcnVjaWFsLi4uIEFscmlnaHQsIGhlcmUgd2UgZ286IGBtYXJrX25vbl9zdGFja19hY2Nlc3NgLi4uIG5ldy4gQW5kIGBpc19tZW1faW5zbmAuLi4gYWxzbyBuZXcuIE9rYXksIHRoZXNlIGFyZSBkZWZpbml0ZWx5IHdvcnRoIGFkZGluZyB0byB0aGUgbGlzdC4gSSdsbCBuZWVkIHRvIGtlZXAgYW4gZXllIG9uIHRoZXNlLlxuXG5TbywgdGhlIGZ1bGwgbGlzdCBvZiByZWxldmFudCBzeW1ib2xzIGlzIG5vdzpcblxuKiAgIGBlbWl0X2thc2FuX2NoZWNrYFxuKiAgIGBlbWl0X3N0YFxuKiAgIGBlbWl0X2F0b21pY19sZF9zdGBcbiogICBgYWRqdXN0X2luc25fYXV4X2RhdGFgXG4qICAgYGJwZl9wYXRjaF9pbnNuX2RhdGFgXG4qICAgYG1hcmtfbm9uX3N0YWNrX2FjY2Vzc2BcbiogICBgaXNfbWVtX2luc25gXG5cblRoZSBwYXRjaCdzIGludGVudCBzZWVtcyBjbGVhcjogaXQncyBhZGRpbmcgS0FTQU4gc3VwcG9ydCB0byB0aGUgQlBGIEpJVCBjb21waWxlciBmb3IgeDg2LiBUaGUgdmVyaWZpZXIgaXMgY2xlYXJseSBiZWluZyB1cGRhdGVkIHRvIHRyYWNrIG5vbi1zdGFjayBtZW1vcnkgYWNjZXNzZXMsIGFuZCB0aGUgeDg2IEpJVCBjb21waWxlciBpcyBiZWluZyBhdWdtZW50ZWQgdG8gZW1pdCBLQVNBTiBjaGVja3MgZm9yIHRob3NlIGFjY2Vzc2VzLiBUaGlzIGlzIG5ldyBjb3JlIGxvZ2ljIGludHJvZHVjZWQgaW4gYm90aCB0aGUgSklUIGFuZCB2ZXJpZmllci4gVGhpcyBuZWVkcyBmdXp6aW5nLCBuZWVkcyB0byBiZSB0aG9yb3VnaGx5IHRlc3RlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucy5cblxuT2theSwgbGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Njc3NywiT3V0cHV0VG9rZW5zIjoxODcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDQ6MzM6MTUuMzM3NDI3NzcyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAwMDIzNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9KSVRfS0FTQU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlbWl0X2thc2FuX2NoZWNrXCIsXG4gICAgXCJlbWl0X3N0XCIsXG4gICAgXCJlbWl0X2F0b21pY19sZF9zdFwiLFxuICAgIFwiYWRqdXN0X2luc25fYXV4X2RhdGFcIixcbiAgICBcImJwZl9wYXRjaF9pbnNuX2RhdGFcIixcbiAgICBcIm1hcmtfbm9uX3N0YWNrX2FjY2Vzc1wiLFxuICAgIFwiaXNfbWVtX2luc25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIEtBU0FOIHN1cHBvcnQgZm9yIHRoZSBCUEYgSklUIGNvbXBpbGVyIG9uIHg4Ni4gSXQgbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byB0cmFjayBub24tc3RhY2sgbWVtb3J5IGFjY2Vzc2VzIGFuZCB1cGRhdGVzIHRoZSB4ODYgSklUIGNvbXBpbGVyIHRvIGVtaXQgS0FTQU4gY2hlY2tzIGZvciB0aGVzZSBhY2Nlc3Nlcy4gVGhpcyBpbnRyb2R1Y2VzIG5ldyBjb3JlIGxvZ2ljIGluIHRoZSBKSVQgY29tcGlsZXIgYW5kIHZlcmlmaWVyLCB3aGljaCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0bmVzcyBhbmQgcHJldmVudCByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfSklUX0tBU0FOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZW1pdF9rYXNhbl9jaGVja1wiLFxuICAgIFwiZW1pdF9zdFwiLFxuICAgIFwiZW1pdF9hdG9taWNfbGRfc3RcIixcbiAgICBcImFkanVzdF9pbnNuX2F1eF9kYXRhXCIsXG4gICAgXCJicGZfcGF0Y2hfaW5zbl9kYXRhXCIsXG4gICAgXCJtYXJrX25vbl9zdGFja19hY2Nlc3NcIixcbiAgICBcImlzX21lbV9pbnNuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBLQVNBTiBzdXBwb3J0IGZvciB0aGUgQlBGIEpJVCBjb21waWxlciBvbiB4ODYuIEl0IG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gdHJhY2sgbm9uLXN0YWNrIG1lbW9yeSBhY2Nlc3NlcyBhbmQgdXBkYXRlcyB0aGUgeDg2IEpJVCBjb21waWxlciB0byBlbWl0IEtBU0FOIGNoZWNrcyBmb3IgdGhlc2UgYWNjZXNzZXMuIFRoaXMgaW50cm9kdWNlcyBuZXcgY29yZSBsb2dpYyBpbiB0aGUgSklUIGNvbXBpbGVyIGFuZCB2ZXJpZmllciwgd2hpY2ggc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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:nil,}