SGVsbG8sIGV2ZXJ5b25lIQoKwqDCoMKgIMKgwqDCoCB3aW5kb3cgaXMgdGhlIHRvcGxldmVsIHdp ZGdldCB3aGlsZSBsYWJlbCBpcyB0aGUgc3ViV2lkZ2V0LCB3aGVuCkkgY2hhbmdlIHRoZSBzaXpl IG9mIGxhYmVsIGJ5IGd0a193aWRnZXRfc2V0X3NpemVfcmVxdWVzdCwKCmlmIG5ldyBsYWJlbCBp cyBsYXJnZXIgdGhhbiB0aGUgb2xkIGxhYmVsLCB0b3BsZXZlbCB3aWxsIGJlIGxhcmdlciwgYnV0 CndoeSB0aGF0IG5vdCB3b3JrcyB0aGUgb3RoZXIgd2F5wqAgYXJvdW5kID8KCgpbMV0KCiNpbmNs dWRlIDxndGsvZ3RrLmg+wqAKwqAKR3RrV2lkZ2V0ICp3aW5kb3c7wqAKR3RrV2lkZ2V0ICpsYWJl bDsKCnZvaWQgY2xvc2VfYXBwKEd0a1dpZGdldCAqd2luZG93LGdwb2ludGVyIGRhdGEpwqAKe8Kg CsKgwqDCoCBndGtfbWFpbl9xdWl0KCk7wqAKfcKgCgp2b2lkIGJ1dHRvbl9ldmVudChHdGtXaWRn ZXQgKndpZGdldCxncG9pbnRlciAqZGF0YSkgLyrlm57osIPlh73mlbAqLwoKewrCoMKgwqAgaWYo TlVMTCAhPSBkYXRhKSB7CsKgwqDCoMKgwqDCoMKgIGd0a193aWRnZXRfc2V0X3NpemVfcmVxdWVz dChsYWJlbCwgMjAwLCAyMDApOwrCoMKgwqAgfSBlbHNlIHsKwqDCoMKgwqDCoMKgwqAgZ3RrX3dp ZGdldF9zZXRfc2l6ZV9yZXF1ZXN0KGxhYmVsLCA1MCwgNTApOwrCoMKgwqDCoMKgwqDCoCBndGtf d2lkZ2V0X3NldF9zaXplX3JlcXVlc3Qod2luZG93LCAtMSwgLTEpOwrCoMKgwqAgfQoKfQoKaW50 IG1haW4oaW50IGFyZ2MsY2hhciAqYXJndltdKcKgCnvCoArCoMKgwqAgR3RrV2lkZ2V0ICpidXR0 b24xO8KgCsKgwqDCoCBHdGtXaWRnZXQgKmJ1dHRvbjI7wqAKwqDCoMKgIEd0a1dpZGdldCAqYnV0 dG9uMzvCoArCoMKgwqAgR3RrV2lkZ2V0ICpIYm94O8KgCsKgwqDCoCBHdGtXaWRnZXQgKlZib3g7 wqAKwqAKwqDCoMKgIGd0a19pbml0KCZhcmdjLCZhcmd2KTvCoArCoArCoMKgwqAgLy9uZXcgd2lu ZG93wqAKwqDCoMKgIHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwp O8KgCsKgwqDCoCBndGtfd2luZG93X3NldF90aXRsZShHVEtfV0lORE9XKHdpbmRvdyksIkxheW91 dCBkZW1vIik7wqAKwqDCoMKgIGd0a193aW5kb3dfc2V0X3Bvc2l0aW9uKEdUS19XSU5ET1cod2lu ZG93KSxHVEtfV0lOX1BPU19DRU5URVIpO8KgCsKgwqDCoCBndGtfd2luZG93X3NldF9kZWZhdWx0 X3NpemUoR1RLX1dJTkRPVyh3aW5kb3cpLDIwMCwyMDApO8KgCsKgwqDCoApnX3NpZ25hbF9jb25u ZWN0KEdUS19PQkpFQ1Qod2luZG93KSwiZGVzdHJveSIsR1RLX1NJR05BTF9GVU5DKGNsb3NlX2Fw cCksTlVMTCk7wqDCoAoKwqDCoMKgwqDCoArCoMKgwqAgLy/mlrDlu7rkuoYz5Liq5oyJ6ZKu5ZKM 5Lik5Liq57uE6KOF55uSwqAKwqDCoMKgIGJ1dHRvbjEgPSBndGtfYnV0dG9uX25ld193aXRoX2xh YmVsKCJidXR0b24xIik7wqAKwqDCoMKgIGJ1dHRvbjIgPSBndGtfYnV0dG9uX25ld193aXRoX2xh YmVsKCJidXR0b24yIik7wqAKwqDCoMKgIGJ1dHRvbjMgPSBndGtfYnV0dG9uX25ld193aXRoX2xh YmVsKCJidXR0b24zIik7wqAKwqAKwqDCoMKgIGxhYmVsID0gZ3RrX2xhYmVsX25ldygic3RhdHVz IGxpbmUiKTsKwqAKwqDCoMKgIEhib3ggPSBndGtfaGJveF9uZXcoVFJVRSwwKTvCoArCoMKgwqAg VmJveCA9IGd0a192Ym94X25ldyhUUlVFLDApO8KgCsKgwqDCoMKgwqAKwqDCoMKgIC8v5bCGYnV0 dG9uMeWSjGJ1dHRvbjLmlL7lnKhIYm945LiKwqAKwqDCoMKgIGd0a19ib3hfcGFja19zdGFydChH VEtfQk9YKEhib3gpLGJ1dHRvbjEsRkFMU0UsRkFMU0UsMCk7wqAKwqDCoMKgIGd0a19ib3hfcGFj a19zdGFydChHVEtfQk9YKEhib3gpLGJ1dHRvbjIsRkFMU0UsRkFMU0UsMCk7wqAKwqAKwqDCoMKg IC8v5bCGYnV0dG9uM+WSjEhib3jmlL7lnKhWYm945LiKwqAKwqDCoMKgIGd0a19ib3hfcGFja19z dGFydChHVEtfQk9YKFZib3gpLEdUS19XSURHRVQoSGJveCksRkFMU0UsRkFMU0UsMCk7wqAKwqDC oMKgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKFZib3gpLGxhYmVsLEZBTFNFLEZBTFNFLDAp O8KgCsKgwqDCoCBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChWYm94KSxidXR0b24zLEZBTFNF LEZBTFNFLDApO8KgCgrCoMKgwqAgZ3RrX3NpZ25hbF9jb25uZWN0KEdUS19PQkpFQ1QoYnV0dG9u MSksICJwcmVzc2VkIiwKR1RLX1NJR05BTF9GVU5DKGJ1dHRvbl9ldmVudCksICIxIik7CsKgwqDC oCBndGtfc2lnbmFsX2Nvbm5lY3QoR1RLX09CSkVDVChidXR0b24yKSwgInByZXNzZWQiLApHVEtf U0lHTkFMX0ZVTkMoYnV0dG9uX2V2ZW50KSwgTlVMTCk7CsKgCsKgwqDCoCAvL+WwhlZib3jmt7vl iqDliLB3aW5kb3flrrnlmajkuIrCoArCoMKgwqAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRB SU5FUih3aW5kb3cpLFZib3gpO8KgCsKgwqDCoCBndGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7 wqAKwqDCoMKgIGd0a19tYWluKCk7wqAKwqAKwqDCoMKgIHJldHVybiAwO8KgCn3CoAoKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmd0ay1hcHAtZGV2ZWwt bGlzdCBtYWlsaW5nIGxpc3QKZ3RrLWFwcC1kZXZlbC1saXN0QGdub21lLm9yZwpodHRwczovL21h aWwuZ25vbWUub3JnL21haWxtYW4vbGlzdGluZm8vZ3RrLWFwcC1kZXZlbC1saXN0