I2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KCiNpZiBkZWZpbmVkKE9QRU5TU0xfWDg2XzY0KSAmJiAhZGVmaW5lZChPUEVOU1NMX1dJTkRPV1MpCgojaW5jbHVkZSAiLi4vaW50ZXJuYWwuaCIKCi8qIHg4Nl82NCBCSUdOVU0gYWNjZWxlcmF0b3IgdmVyc2lvbiAwLjEsIERlY2VtYmVyIDIwMDIuCiAqCiAqIEltcGxlbWVudGVkIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPiBmb3IgdGhlIE9wZW5TU0wKICogcHJvamVjdC4KICoKICogUmlnaHRzIGZvciByZWRpc3RyaWJ1dGlvbiBhbmQgdXNhZ2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMgYXJlCiAqIGdyYW50ZWQgYWNjb3JkaW5nIHRvIHRoZSBPcGVuU1NMIGxpY2Vuc2UuIFdhcnJhbnR5IG9mIGFueSBraW5kIGlzCiAqIGRpc2NsYWltZWQuCiAqCiAqIFEuIFZlcnNpb24gMC4xPyBJdCBkb2Vzbid0IHNvdW5kIGxpa2UgQW5keSwgaGUgdXNlZCB0byBhc3NpZ24gcmVhbAogKiAgICB2ZXJzaW9ucywgbGlrZSAxLjAuLi4KICogQS4gV2VsbCwgdGhhdCdzIGJlY2F1c2UgdGhpcyBjb2RlIGlzIGJhc2ljYWxseSBhIHF1aWNrLW4tZGlydHkKICogICAgcHJvb2Ytb2YtY29uY2VwdCBoYWNrLiBBcyB5b3UgY2FuIHNlZSBpdCdzIGltcGxlbWVudGVkIHdpdGgKICogICAgaW5saW5lIGFzc2VtYmxlciwgd2hpY2ggbWVhbnMgdGhhdCB5b3UncmUgYm91bmQgdG8gR0NDIGFuZCB0aGF0CiAqICAgIHRoZXJlIG1pZ2h0IGJlIGVub3VnaCByb29tIGZvciBmdXJ0aGVyIGltcHJvdmVtZW50LgogKgogKiBRLiBXaHkgaW5saW5lIGFzc2VtYmxlcj8KICogQS4geDg2XzY0IGZlYXR1cmVzIG93biBBQkkgd2hpY2ggSSdtIG5vdCBmYW1pbGlhciB3aXRoLiBUaGlzIGlzCiAqICAgIHdoeSBJIGRlY2lkZWQgdG8gbGV0IHRoZSBjb21waWxlciB0YWtlIGNhcmUgb2Ygc3Vicm91dGluZQogKiAgICBwcm9sb2d1ZS9lcGlsb2d1ZSBhcyB3ZWxsIGFzIHJlZ2lzdGVyIGFsbG9jYXRpb24uIEZvciByZWZlcmVuY2UuCiAqICAgIFdpbjY0IGltcGxlbWVudHMgZGlmZmVyZW50IEFCSSBmb3IgQU1ENjQsIGRpZmZlcmVudCBmcm9tIExpbnV4LgogKgogKiBRLiBIb3cgbXVjaCBmYXN0ZXIgZG9lcyBpdCBnZXQ/CiAqIEEuICdhcHBzL29wZW5zc2wgc3BlZWQgcnNhIGRzYScgb3V0cHV0IHdpdGggbm8tYXNtOgogKgogKgkgICAgICAgICAgICAgICAgICBzaWduICAgIHZlcmlmeSAgICBzaWduL3MgdmVyaWZ5L3MKICoJcnNhICA1MTIgYml0cyAgIDAuMDAwNnMgICAwLjAwMDFzICAgMTY4My44ICAxODQ1Ni4yCiAqCXJzYSAxMDI0IGJpdHMgICAwLjAwMjhzICAgMC4wMDAycyAgICAzNTYuMCAgIDY0MDcuMAogKglyc2EgMjA0OCBiaXRzICAgMC4wMTcycyAgIDAuMDAwNXMgICAgIDU4LjAgICAxOTU3LjgKICoJcnNhIDQwOTYgYml0cyAgIDAuMTE1NXMgICAwLjAwMThzICAgICAgOC43ICAgIDU1NS42CiAqCSAgICAgICAgICAgICAgICAgIHNpZ24gICAgdmVyaWZ5ICAgIHNpZ24vcyB2ZXJpZnkvcwogKglkc2EgIDUxMiBiaXRzICAgMC4wMDA1cyAgIDAuMDAwNnMgICAyMTAwLjggICAxNzY4LjMKICoJZHNhIDEwMjQgYml0cyAgIDAuMDAxNHMgICAwLjAwMThzICAgIDY5Mi4zICAgIDU1OS4yCiAqCWRzYSAyMDQ4IGJpdHMgICAwLjAwNDlzICAgMC4wMDYxcyAgICAyMDQuNyAgICAxNjUuMAogKgogKiAgICAnYXBwcy9vcGVuc3NsIHNwZWVkIHJzYSBkc2EnIG91dHB1dCB3aXRoIHRoaXMgbW9kdWxlOgogKgogKgkgICAgICAgICAgICAgICAgICBzaWduICAgIHZlcmlmeSAgICBzaWduL3MgdmVyaWZ5L3MKICoJcnNhICA1MTIgYml0cyAgIDAuMDAwNHMgICAwLjAwMDBzICAgMjc2Ny4xICAzMzI5Ny45CiAqCXJzYSAxMDI0IGJpdHMgICAwLjAwMTJzICAgMC4wMDAxcyAgICA4NjcuNCAgMTQ2NzQuNwogKglyc2EgMjA0OCBiaXRzICAgMC4wMDYxcyAgIDAuMDAwMnMgICAgMTY0LjAgICA1MjcwLjAKICoJcnNhIDQwOTYgYml0cyAgIDAuMDM4NHMgICAwLjAwMDZzICAgICAyNi4xICAgMTY1MC44CiAqCSAgICAgICAgICAgICAgICAgIHNpZ24gICAgdmVyaWZ5ICAgIHNpZ24vcyB2ZXJpZnkvcwogKglkc2EgIDUxMiBiaXRzICAgMC4wMDAycyAgIDAuMDAwM3MgICA0NDQyLjIgICAzNzg2LjMKICoJZHNhIDEwMjQgYml0cyAgIDAuMDAwNXMgICAwLjAwMDdzICAgMTgzNS4xICAgMTQ5Ny40CiAqCWRzYSAyMDQ4IGJpdHMgICAwLjAwMTZzICAgMC4wMDIwcyAgICA2MjAuNCAgICA1MDQuNgogKgogKiAgICBGb3IgdGhlIHJlZmVyZW5jZS4gSUEtMzIgYXNzZW1ibGVyIGltcGxlbWVudGF0aW9uIHBlcmZvcm1zCiAqICAgIHZlcnkgbXVjaCBsaWtlIDY0LWJpdCBjb2RlIGNvbXBpbGVkIHdpdGggbm8tYXNtIG9uIHRoZSBzYW1lCiAqICAgIG1hY2hpbmUuCiAqLwoKI3VuZGVmIG11bAojdW5kZWYgbXVsX2FkZAoKI2RlZmluZSBhc20gX19hc21fXwoKLyoKICogIm0iKGEpLCAiK20iKHIpCWlzIHRoZSB3YXkgdG8gZmF2b3IgRGlyZWN0UGF0aCC1LWNvZGU7CiAqICJnIigwKQkJbGV0IHRoZSBjb21waWxlciB0byBkZWNpZGUgd2hlcmUgZG9lcyBpdAogKgkJCXdhbnQgdG8ga2VlcCB0aGUgdmFsdWUgb2YgemVybzsKICovCiNkZWZpbmUgbXVsX2FkZChyLCBhLCB3b3JkLCBjYXJyeSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIHJlZ2lzdGVyIEJOX1VMT05HIGhpZ2gsIGxvdzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICBhc20oIm11bHEgJTMiIDogIj1hIihsb3cpLCAiPWQiKGhpZ2gpIDogImEiKHdvcmQpLCAibSIoYSkgOiAiY2MiKTsgXAogICAgYXNtKCJhZGRxICUyLCUwOyBhZGNxICUzLCUxIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICA6ICIrciIoY2FycnkpLCAiK2QiKGhpZ2gpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgOiAiYSIobG93KSwgImciKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgIDogImNjIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIGFzbSgiYWRkcSAlMiwlMDsgYWRjcSAlMywlMSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgOiAiK20iKHIpLCAiK2QiKGhpZ2gpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgIDogInIiKGNhcnJ5KSwgImciKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICA6ICJjYyIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICBjYXJyeSA9IGhpZ2g7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogIH0gd2hpbGUgKDApCgojZGVmaW5lIG11bChyLCBhLCB3b3JkLCBjYXJyeSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICByZWdpc3RlciBCTl9VTE9ORyBoaWdoLCBsb3c7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgYXNtKCJtdWxxICUzIiA6ICI9YSIobG93KSwgIj1kIihoaWdoKSA6ICJhIih3b3JkKSwgImciKGEpIDogImNjIik7IFwKICAgIGFzbSgiYWRkcSAlMiwlMDsgYWRjcSAlMywlMSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgOiAiK3IiKGNhcnJ5KSwgIitkIihoaWdoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgIDogImEiKGxvdyksICJnIigwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICA6ICJjYyIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAocikgPSBjYXJyeSwgY2FycnkgPSBoaWdoOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogIH0gd2hpbGUgKDApCiN1bmRlZiBzcXIKI2RlZmluZSBzcXIocjAsIHIxLCBhKSBhc20oIm11bHEgJTIiIDogIj1hIihyMCksICI9ZCIocjEpIDogImEiKGEpIDogImNjIik7CgpCTl9VTE9ORyBibl9tdWxfYWRkX3dvcmRzKEJOX1VMT05HICpycCwgY29uc3QgQk5fVUxPTkcgKmFwLCBpbnQgbnVtLAogICAgICAgICAgICAgICAgICAgICAgICAgIEJOX1VMT05HIHcpIHsKICBCTl9VTE9ORyBjMSA9IDA7CgogIGlmIChudW0gPD0gMCkKICAgIHJldHVybiAoYzEpOwoKICB3aGlsZSAobnVtICYgfjMpIHsKICAgIG11bF9hZGQocnBbMF0sIGFwWzBdLCB3LCBjMSk7CiAgICBtdWxfYWRkKHJwWzFdLCBhcFsxXSwgdywgYzEpOwogICAgbXVsX2FkZChycFsyXSwgYXBbMl0sIHcsIGMxKTsKICAgIG11bF9hZGQocnBbM10sIGFwWzNdLCB3LCBjMSk7CiAgICBhcCArPSA0OwogICAgcnAgKz0gNDsKICAgIG51bSAtPSA0OwogIH0KICBpZiAobnVtKSB7CiAgICBtdWxfYWRkKHJwWzBdLCBhcFswXSwgdywgYzEpOwogICAgaWYgKC0tbnVtID09IDApCiAgICAgIHJldHVybiBjMTsKICAgIG11bF9hZGQocnBbMV0sIGFwWzFdLCB3LCBjMSk7CiAgICBpZiAoLS1udW0gPT0gMCkKICAgICAgcmV0dXJuIGMxOwogICAgbXVsX2FkZChycFsyXSwgYXBbMl0sIHcsIGMxKTsKICAgIHJldHVybiBjMTsKICB9CgogIHJldHVybiAoYzEpOwp9CgpCTl9VTE9ORyBibl9tdWxfd29yZHMoQk5fVUxPTkcgKnJwLCBjb25zdCBCTl9VTE9ORyAqYXAsIGludCBudW0sIEJOX1VMT05HIHcpIHsKICBCTl9VTE9ORyBjMSA9IDA7CgogIGlmIChudW0gPD0gMCkKICAgIHJldHVybiAoYzEpOwoKICB3aGlsZSAobnVtICYgfjMpIHsKICAgIG11bChycFswXSwgYXBbMF0sIHcsIGMxKTsKICAgIG11bChycFsxXSwgYXBbMV0sIHcsIGMxKTsKICAgIG11bChycFsyXSwgYXBbMl0sIHcsIGMxKTsKICAgIG11bChycFszXSwgYXBbM10sIHcsIGMxKTsKICAgIGFwICs9IDQ7CiAgICBycCArPSA0OwogICAgbnVtIC09IDQ7CiAgfQogIGlmIChudW0pIHsKICAgIG11bChycFswXSwgYXBbMF0sIHcsIGMxKTsKICAgIGlmICgtLW51bSA9PSAwKQogICAgICByZXR1cm4gYzE7CiAgICBtdWwocnBbMV0sIGFwWzFdLCB3LCBjMSk7CiAgICBpZiAoLS1udW0gPT0gMCkKICAgICAgcmV0dXJuIGMxOwogICAgbXVsKHJwWzJdLCBhcFsyXSwgdywgYzEpOwogIH0KICByZXR1cm4gKGMxKTsKfQoKdm9pZCBibl9zcXJfd29yZHMoQk5fVUxPTkcgKnIsIGNvbnN0IEJOX1VMT05HICphLCBpbnQgbikgewogIGlmIChuIDw9IDApCiAgICByZXR1cm47CgogIHdoaWxlIChuICYgfjMpIHsKICAgIHNxcihyWzBdLCByWzFdLCBhWzBdKTsKICAgIHNxcihyWzJdLCByWzNdLCBhWzFdKTsKICAgIHNxcihyWzRdLCByWzVdLCBhWzJdKTsKICAgIHNxcihyWzZdLCByWzddLCBhWzNdKTsKICAgIGEgKz0gNDsKICAgIHIgKz0gODsKICAgIG4gLT0gNDsKICB9CiAgaWYgKG4pIHsKICAgIHNxcihyWzBdLCByWzFdLCBhWzBdKTsKICAgIGlmICgtLW4gPT0gMCkKICAgICAgcmV0dXJuOwogICAgc3FyKHJbMl0sIHJbM10sIGFbMV0pOwogICAgaWYgKC0tbiA9PSAwKQogICAgICByZXR1cm47CiAgICBzcXIocls0XSwgcls1XSwgYVsyXSk7CiAgfQp9CgpCTl9VTE9ORyBibl9kaXZfd29yZHMoQk5fVUxPTkcgaCwgQk5fVUxPTkcgbCwgQk5fVUxPTkcgZCkgewogIEJOX1VMT05HIHJldCwgd2FzdGU7CgogIGFzbSgiZGl2cQklNCIgOiAiPWEiKHJldCksICI9ZCIod2FzdGUpIDogImEiKGwpLCAiZCIoaCksICJnIihkKSA6ICJjYyIpOwoKICByZXR1cm4gcmV0Owp9CgpCTl9VTE9ORyBibl9hZGRfd29yZHMoQk5fVUxPTkcgKnJwLCBjb25zdCBCTl9VTE9ORyAqYXAsIGNvbnN0IEJOX1VMT05HICpicCwKICAgICAgICAgICAgICAgICAgICAgIGludCBuKSB7CiAgQk5fVUxPTkcgcmV0OwogIHNpemVfdCBpID0gMDsKCiAgaWYgKG4gPD0gMCkKICAgIHJldHVybiAwOwoKICBhc20oIglzdWJxCSUwLCUwCQlcbiIgLyogY2xlYXIgY2FycnkgKi8KICAgICAgIglqbXAJMWYJCVxuIgogICAgICAiLnAyYWxpZ24gNAkJCVxuIgogICAgICAiMToJbW92cQkoJTQsJTIsOCksJTAJXG4iCiAgICAgICIJYWRjcQkoJTUsJTIsOCksJTAJXG4iCiAgICAgICIJbW92cQklMCwoJTMsJTIsOCkJXG4iCiAgICAgICIJbGVhCTEoJTIpLCUyCVxuIgogICAgICAiCWxvb3AJMWIJCVxuIgogICAgICAiCXNiYnEJJTAsJTAJCVxuIgogICAgICA6ICI9JnIiKHJldCksICIrYyIobiksICIrciIoaSkKICAgICAgOiAiciIocnApLCAiciIoYXApLCAiciIoYnApCiAgICAgIDogImNjIik7CgogIHJldHVybiByZXQgJiAxOwp9CgojaWZuZGVmIFNJTUlDUwpCTl9VTE9ORyBibl9zdWJfd29yZHMoQk5fVUxPTkcgKnJwLCBjb25zdCBCTl9VTE9ORyAqYXAsIGNvbnN0IEJOX1VMT05HICpicCwKICAgICAgICAgICAgICAgICAgICAgIGludCBuKSB7CiAgQk5fVUxPTkcgcmV0OwogIHNpemVfdCBpID0gMDsKCiAgaWYgKG4gPD0gMCkKICAgIHJldHVybiAwOwoKICBhc20oIglzdWJxCSUwLCUwCQlcbiIgLyogY2xlYXIgYm9ycm93ICovCiAgICAgICIJam1wCTFmCQlcbiIKICAgICAgIi5wMmFsaWduIDQJCQlcbiIKICAgICAgIjE6CW1vdnEJKCU0LCUyLDgpLCUwCVxuIgogICAgICAiCXNiYnEJKCU1LCUyLDgpLCUwCVxuIgogICAgICAiCW1vdnEJJTAsKCUzLCUyLDgpCVxuIgogICAgICAiCWxlYQkxKCUyKSwlMglcbiIKICAgICAgIglsb29wCTFiCQlcbiIKICAgICAgIglzYmJxCSUwLCUwCQlcbiIKICAgICAgOiAiPSZyIihyZXQpLCAiK2MiKG4pLCAiK3IiKGkpCiAgICAgIDogInIiKHJwKSwgInIiKGFwKSwgInIiKGJwKQogICAgICA6ICJjYyIpOwoKICByZXR1cm4gcmV0ICYgMTsKfQojZWxzZQovKiBTaW1pY3MgMS40PDcgaGFzIGJ1Z2d5IHNiYnE6LSggKi8KI2RlZmluZSBCTl9NQVNLMiAweGZmZmZmZmZmZmZmZmZmZmZMCkJOX1VMT05HIGJuX3N1Yl93b3JkcyhCTl9VTE9ORyAqciwgQk5fVUxPTkcgKmEsIEJOX1VMT05HICpiLCBpbnQgbikgewogIEJOX1VMT05HIHQxLCB0MjsKICBpbnQgYyA9IDA7CgogIGlmIChuIDw9IDApCiAgICByZXR1cm4gKChCTl9VTE9ORykwKTsKCiAgZm9yICg7OykgewogICAgdDEgPSBhWzBdOwogICAgdDIgPSBiWzBdOwogICAgclswXSA9ICh0MSAtIHQyIC0gYykgJiBCTl9NQVNLMjsKICAgIGlmICh0MSAhPSB0MikKICAgICAgYyA9ICh0MSA8IHQyKTsKICAgIGlmICgtLW4gPD0gMCkKICAgICAgYnJlYWs7CgogICAgdDEgPSBhWzFdOwogICAgdDIgPSBiWzFdOwogICAgclsxXSA9ICh0MSAtIHQyIC0gYykgJiBCTl9NQVNLMjsKICAgIGlmICh0MSAhPSB0MikKICAgICAgYyA9ICh0MSA8IHQyKTsKICAgIGlmICgtLW4gPD0gMCkKICAgICAgYnJlYWs7CgogICAgdDEgPSBhWzJdOwogICAgdDIgPSBiWzJdOwogICAgclsyXSA9ICh0MSAtIHQyIC0gYykgJiBCTl9NQVNLMjsKICAgIGlmICh0MSAhPSB0MikKICAgICAgYyA9ICh0MSA8IHQyKTsKICAgIGlmICgtLW4gPD0gMCkKICAgICAgYnJlYWs7CgogICAgdDEgPSBhWzNdOwogICAgdDIgPSBiWzNdOwogICAgclszXSA9ICh0MSAtIHQyIC0gYykgJiBCTl9NQVNLMjsKICAgIGlmICh0MSAhPSB0MikKICAgICAgYyA9ICh0MSA8IHQyKTsKICAgIGlmICgtLW4gPD0gMCkKICAgICAgYnJlYWs7CgogICAgYSArPSA0OwogICAgYiArPSA0OwogICAgciArPSA0OwogIH0KICByZXR1cm4gKGMpOwp9CiNlbmRpZgoKLyogbXVsX2FkZF9jKGEsYixjMCxjMSxjMikgIC0tIGMrPWEqYiBmb3IgdGhyZWUgd29yZCBudW1iZXIgYz0oYzIsYzEsYzApICovCi8qIG11bF9hZGRfYzIoYSxiLGMwLGMxLGMyKSAtLSBjKz0yKmEqYiBmb3IgdGhyZWUgd29yZCBudW1iZXIgYz0oYzIsYzEsYzApICovCi8qIHNxcl9hZGRfYyhhLGksYzAsYzEsYzIpICAtLSBjKz1hW2ldXjIgZm9yIHRocmVlIHdvcmQgbnVtYmVyIGM9KGMyLGMxLGMwKSAqLwovKiBzcXJfYWRkX2MyKGEsaSxjMCxjMSxjMikgLS0gYys9MiphW2ldKmFbal0gZm9yIHRocmVlIHdvcmQgbnVtYmVyIGM9KGMyLGMxLGMwKQogKi8KCiNpZiAwCi8qIG9yaWdpbmFsIG1hY3JvcyBhcmUga2VwdCBmb3IgcmVmZXJlbmNlIHB1cnBvc2VzICovCiNkZWZpbmUgbXVsX2FkZF9jKGEsIGIsIGMwLCBjMSwgYzIpIFwKICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgQk5fVUxPTkcgdGEgPSAoYSksIHRiID0gKGIpOyAgICBcCiAgICB0MSA9IHRhICogdGI7ICAgICAgICAgICAgICAgICAgIFwKICAgIHQyID0gQk5fVU1VTFRfSElHSCh0YSwgdGIpOyAgICAgXAogICAgYzAgKz0gdDE7ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICB0MiArPSAoYzAgPCB0MSkgPyAxIDogMDsgICAgICAgIFwKICAgIGMxICs9IHQyOyAgICAgICAgICAgICAgICAgICAgICAgXAogICAgYzIgKz0gKGMxIDwgdDIpID8gMSA6IDA7ICAgICAgICBcCiAgfQoKI2RlZmluZSBtdWxfYWRkX2MyKGEsIGIsIGMwLCBjMSwgYzIpIFwKICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIEJOX1VMT05HIHRhID0gKGEpLCB0YiA9IChiKSwgdDA7IFwKICAgIHQxID0gQk5fVU1VTFRfSElHSCh0YSwgdGIpOyAgICAgIFwKICAgIHQwID0gdGEgKiB0YjsgICAgICAgICAgICAgICAgICAgIFwKICAgIHQyID0gdDEgKyB0MTsgICAgICAgICAgICAgICAgICAgIFwKICAgIGMyICs9ICh0MiA8IHQxKSA/IDEgOiAwOyAgICAgICAgIFwKICAgIHQxID0gdDAgKyB0MDsgICAgICAgICAgICAgICAgICAgIFwKICAgIHQyICs9ICh0MSA8IHQwKSA/IDEgOiAwOyAgICAgICAgIFwKICAgIGMwICs9IHQxOyAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIHQyICs9IChjMCA8IHQxKSA/IDEgOiAwOyAgICAgICAgIFwKICAgIGMxICs9IHQyOyAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIGMyICs9IChjMSA8IHQyKSA/IDEgOiAwOyAgICAgICAgIFwKICB9CiNlbHNlCiNkZWZpbmUgbXVsX2FkZF9jKGEsIGIsIGMwLCBjMSwgYzIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIGFzbSgibXVscSAlMyIgOiAiPWEiKHQxKSwgIj1kIih0MikgOiAiYSIoYSksICJtIihiKSA6ICJjYyIpOyBcCiAgICBhc20oImFkZHEgJTIsJTA7IGFkY3EgJTMsJTEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgIDogIityIihjMCksICIrZCIodDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICA6ICJhIih0MSksICJnIigwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgOiAiY2MiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgYXNtKCJhZGRxICUyLCUwOyBhZGNxICUzLCUxIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICA6ICIrciIoYzEpLCAiK3IiKGMyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgOiAiZCIodDIpLCAiZyIoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgIDogImNjIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICB9IHdoaWxlICgwKQoKI2RlZmluZSBzcXJfYWRkX2MoYSwgaSwgYzAsIGMxLCBjMikgICAgICAgICAgICAgICAgICAgICAgICAgXAogIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICBhc20oIm11bHEgJTIiIDogIj1hIih0MSksICI9ZCIodDIpIDogImEiKGFbaV0pIDogImNjIik7IFwKICAgIGFzbSgiYWRkcSAlMiwlMDsgYWRjcSAlMywlMSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgIDogIityIihjMCksICIrZCIodDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgOiAiYSIodDEpLCAiZyIoMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICA6ICJjYyIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgYXNtKCJhZGRxICUyLCUwOyBhZGNxICUzLCUxIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgOiAiK3IiKGMxKSwgIityIihjMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICA6ICJkIih0MiksICJnIigwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgIDogImNjIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgfSB3aGlsZSAoMCkKCiNkZWZpbmUgbXVsX2FkZF9jMihhLCBiLCBjMCwgYzEsIGMyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgYXNtKCJtdWxxICUzIiA6ICI9YSIodDEpLCAiPWQiKHQyKSA6ICJhIihhKSwgIm0iKGIpIDogImNjIik7ICAgICAgICBcCiAgICBhc20oImFkZHEgJTAsJTA7IGFkY3EgJTIsJTEiIDogIitkIih0MiksICIrciIoYzIpIDogImciKDApIDogImNjIik7IFwKICAgIGFzbSgiYWRkcSAlMCwlMDsgYWRjcSAlMiwlMSIgOiAiK2EiKHQxKSwgIitkIih0MikgOiAiZyIoMCkgOiAiY2MiKTsgXAogICAgYXNtKCJhZGRxICUyLCUwOyBhZGNxICUzLCUxIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgOiAiK3IiKGMwKSwgIitkIih0MikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICA6ICJhIih0MSksICJnIigwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgIDogImNjIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICBhc20oImFkZHEgJTIsJTA7IGFkY3EgJTMsJTEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICA6ICIrciIoYzEpLCAiK3IiKGMyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgIDogImQiKHQyKSwgImciKDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgOiAiY2MiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICB9IHdoaWxlICgwKQojZW5kaWYKCiNkZWZpbmUgc3FyX2FkZF9jMihhLCBpLCBqLCBjMCwgYzEsIGMyKSBtdWxfYWRkX2MyKChhKVtpXSwgKGEpW2pdLCBjMCwgYzEsIGMyKQoKdm9pZCBibl9tdWxfY29tYmE4KEJOX1VMT05HICpyLCBCTl9VTE9ORyAqYSwgQk5fVUxPTkcgKmIpIHsKICBCTl9VTE9ORyB0MSwgdDI7CiAgQk5fVUxPTkcgYzEsIGMyLCBjMzsKCiAgYzEgPSAwOwogIGMyID0gMDsKICBjMyA9IDA7CiAgbXVsX2FkZF9jKGFbMF0sIGJbMF0sIGMxLCBjMiwgYzMpOwogIHJbMF0gPSBjMTsKICBjMSA9IDA7CiAgbXVsX2FkZF9jKGFbMF0sIGJbMV0sIGMyLCBjMywgYzEpOwogIG11bF9hZGRfYyhhWzFdLCBiWzBdLCBjMiwgYzMsIGMxKTsKICByWzFdID0gYzI7CiAgYzIgPSAwOwogIG11bF9hZGRfYyhhWzJdLCBiWzBdLCBjMywgYzEsIGMyKTsKICBtdWxfYWRkX2MoYVsxXSwgYlsxXSwgYzMsIGMxLCBjMik7CiAgbXVsX2FkZF9jKGFbMF0sIGJbMl0sIGMzLCBjMSwgYzIpOwogIHJbMl0gPSBjMzsKICBjMyA9IDA7CiAgbXVsX2FkZF9jKGFbMF0sIGJbM10sIGMxLCBjMiwgYzMpOwogIG11bF9hZGRfYyhhWzFdLCBiWzJdLCBjMSwgYzIsIGMzKTsKICBtdWxfYWRkX2MoYVsyXSwgYlsxXSwgYzEsIGMyLCBjMyk7CiAgbXVsX2FkZF9jKGFbM10sIGJbMF0sIGMxLCBjMiwgYzMpOwogIHJbM10gPSBjMTsKICBjMSA9IDA7CiAgbXVsX2FkZF9jKGFbNF0sIGJbMF0sIGMyLCBjMywgYzEpOwogIG11bF9hZGRfYyhhWzNdLCBiWzFdLCBjMiwgYzMsIGMxKTsKICBtdWxfYWRkX2MoYVsyXSwgYlsyXSwgYzIsIGMzLCBjMSk7CiAgbXVsX2FkZF9jKGFbMV0sIGJbM10sIGMyLCBjMywgYzEpOwogIG11bF9hZGRfYyhhWzBdLCBiWzRdLCBjMiwgYzMsIGMxKTsKICByWzRdID0gYzI7CiAgYzIgPSAwOwogIG11bF9hZGRfYyhhWzBdLCBiWzVdLCBjMywgYzEsIGMyKTsKICBtdWxfYWRkX2MoYVsxXSwgYls0XSwgYzMsIGMxLCBjMik7CiAgbXVsX2FkZF9jKGFbMl0sIGJbM10sIGMzLCBjMSwgYzIpOwogIG11bF9hZGRfYyhhWzNdLCBiWzJdLCBjMywgYzEsIGMyKTsKICBtdWxfYWRkX2MoYVs0XSwgYlsxXSwgYzMsIGMxLCBjMik7CiAgbXVsX2FkZF9jKGFbNV0sIGJbMF0sIGMzLCBjMSwgYzIpOwogIHJbNV0gPSBjMzsKICBjMyA9IDA7CiAgbXVsX2FkZF9jKGFbNl0sIGJbMF0sIGMxLCBjMiwgYzMpOwogIG11bF9hZGRfYyhhWzVdLCBiWzFdLCBjMSwgYzIsIGMzKTsKICBtdWxfYWRkX2MoYVs0XSwgYlsyXSwgYzEsIGMyLCBjMyk7CiAgbXVsX2FkZF9jKGFbM10sIGJbM10sIGMxLCBjMiwgYzMpOwogIG11bF9hZGRfYyhhWzJdLCBiWzRdLCBjMSwgYzIsIGMzKTsKICBtdWxfYWRkX2MoYVsxXSwgYls1XSwgYzEsIGMyLCBjMyk7CiAgbXVsX2FkZF9jKGFbMF0sIGJbNl0sIGMxLCBjMiwgYzMpOwogIHJbNl0gPSBjMTsKICBjMSA9IDA7CiAgbXVsX2FkZF9jKGFbMF0sIGJbN10sIGMyLCBjMywgYzEpOwogIG11bF9hZGRfYyhhWzFdLCBiWzZdLCBjMiwgYzMsIGMxKTsKICBtdWxfYWRkX2MoYVsyXSwgYls1XSwgYzIsIGMzLCBjMSk7CiAgbXVsX2FkZF9jKGFbM10sIGJbNF0sIGMyLCBjMywgYzEpOwogIG11bF9hZGRfYyhhWzRdLCBiWzNdLCBjMiwgYzMsIGMxKTsKICBtdWxfYWRkX2MoYVs1XSwgYlsyXSwgYzIsIGMzLCBjMSk7CiAgbXVsX2FkZF9jKGFbNl0sIGJbMV0sIGMyLCBjMywgYzEpOwogIG11bF9hZGRfYyhhWzddLCBiWzBdLCBjMiwgYzMsIGMxKTsKICByWzddID0gYzI7CiAgYzIgPSAwOwogIG11bF9hZGRfYyhhWzddLCBiWzFdLCBjMywgYzEsIGMyKTsKICBtdWxfYWRkX2MoYVs2XSwgYlsyXSwgYzMsIGMxLCBjMik7CiAgbXVsX2FkZF9jKGFbNV0sIGJbM10sIGMzLCBjMSwgYzIpOwogIG11bF9hZGRfYyhhWzRdLCBiWzRdLCBjMywgYzEsIGMyKTsKICBtdWxfYWRkX2MoYVszXSwgYls1XSwgYzMsIGMxLCBjMik7CiAgbXVsX2FkZF9jKGFbMl0sIGJbNl0sIGMzLCBjMSwgYzIpOwogIG11bF9hZGRfYyhhWzFdLCBiWzddLCBjMywgYzEsIGMyKTsKICByWzhdID0gYzM7CiAgYzMgPSAwOwogIG11bF9hZGRfYyhhWzJdLCBiWzddLCBjMSwgYzIsIGMzKTsKICBtdWxfYWRkX2MoYVszXSwgYls2XSwgYzEsIGMyLCBjMyk7CiAgbXVsX2FkZF9jKGFbNF0sIGJbNV0sIGMxLCBjMiwgYzMpOwogIG11bF9hZGRfYyhhWzVdLCBiWzRdLCBjMSwgYzIsIGMzKTsKICBtdWxfYWRkX2MoYVs2XSwgYlszXSwgYzEsIGMyLCBjMyk7CiAgbXVsX2FkZF9jKGFbN10sIGJbMl0sIGMxLCBjMiwgYzMpOwogIHJbOV0gPSBjMTsKICBjMSA9IDA7CiAgbXVsX2FkZF9jKGFbN10sIGJbM10sIGMyLCBjMywgYzEpOwogIG11bF9hZGRfYyhhWzZdLCBiWzRdLCBjMiwgYzMsIGMxKTsKICBtdWxfYWRkX2MoYVs1XSwgYls1XSwgYzIsIGMzLCBjMSk7CiAgbXVsX2FkZF9jKGFbNF0sIGJbNl0sIGMyLCBjMywgYzEpOwogIG11bF9hZGRfYyhhWzNdLCBiWzddLCBjMiwgYzMsIGMxKTsKICByWzEwXSA9IGMyOwogIGMyID0gMDsKICBtdWxfYWRkX2MoYVs0XSwgYls3XSwgYzMsIGMxLCBjMik7CiAgbXVsX2FkZF9jKGFbNV0sIGJbNl0sIGMzLCBjMSwgYzIpOwogIG11bF9hZGRfYyhhWzZdLCBiWzVdLCBjMywgYzEsIGMyKTsKICBtdWxfYWRkX2MoYVs3XSwgYls0XSwgYzMsIGMxLCBjMik7CiAgclsxMV0gPSBjMzsKICBjMyA9IDA7CiAgbXVsX2FkZF9jKGFbN10sIGJbNV0sIGMxLCBjMiwgYzMpOwogIG11bF9hZGRfYyhhWzZdLCBiWzZdLCBjMSwgYzIsIGMzKTsKICBtdWxfYWRkX2MoYVs1XSwgYls3XSwgYzEsIGMyLCBjMyk7CiAgclsxMl0gPSBjMTsKICBjMSA9IDA7CiAgbXVsX2FkZF9jKGFbNl0sIGJbN10sIGMyLCBjMywgYzEpOwogIG11bF9hZGRfYyhhWzddLCBiWzZdLCBjMiwgYzMsIGMxKTsKICByWzEzXSA9IGMyOwogIGMyID0gMDsKICBtdWxfYWRkX2MoYVs3XSwgYls3XSwgYzMsIGMxLCBjMik7CiAgclsxNF0gPSBjMzsKICByWzE1XSA9IGMxOwp9Cgp2b2lkIGJuX211bF9jb21iYTQoQk5fVUxPTkcgKnIsIEJOX1VMT05HICphLCBCTl9VTE9ORyAqYikgewogIEJOX1VMT05HIHQxLCB0MjsKICBCTl9VTE9ORyBjMSwgYzIsIGMzOwoKICBjMSA9IDA7CiAgYzIgPSAwOwogIGMzID0gMDsKICBtdWxfYWRkX2MoYVswXSwgYlswXSwgYzEsIGMyLCBjMyk7CiAgclswXSA9IGMxOwogIGMxID0gMDsKICBtdWxfYWRkX2MoYVswXSwgYlsxXSwgYzIsIGMzLCBjMSk7CiAgbXVsX2FkZF9jKGFbMV0sIGJbMF0sIGMyLCBjMywgYzEpOwogIHJbMV0gPSBjMjsKICBjMiA9IDA7CiAgbXVsX2FkZF9jKGFbMl0sIGJbMF0sIGMzLCBjMSwgYzIpOwogIG11bF9hZGRfYyhhWzFdLCBiWzFdLCBjMywgYzEsIGMyKTsKICBtdWxfYWRkX2MoYVswXSwgYlsyXSwgYzMsIGMxLCBjMik7CiAgclsyXSA9IGMzOwogIGMzID0gMDsKICBtdWxfYWRkX2MoYVswXSwgYlszXSwgYzEsIGMyLCBjMyk7CiAgbXVsX2FkZF9jKGFbMV0sIGJbMl0sIGMxLCBjMiwgYzMpOwogIG11bF9hZGRfYyhhWzJdLCBiWzFdLCBjMSwgYzIsIGMzKTsKICBtdWxfYWRkX2MoYVszXSwgYlswXSwgYzEsIGMyLCBjMyk7CiAgclszXSA9IGMxOwogIGMxID0gMDsKICBtdWxfYWRkX2MoYVszXSwgYlsxXSwgYzIsIGMzLCBjMSk7CiAgbXVsX2FkZF9jKGFbMl0sIGJbMl0sIGMyLCBjMywgYzEpOwogIG11bF9hZGRfYyhhWzFdLCBiWzNdLCBjMiwgYzMsIGMxKTsKICByWzRdID0gYzI7CiAgYzIgPSAwOwogIG11bF9hZGRfYyhhWzJdLCBiWzNdLCBjMywgYzEsIGMyKTsKICBtdWxfYWRkX2MoYVszXSwgYlsyXSwgYzMsIGMxLCBjMik7CiAgcls1XSA9IGMzOwogIGMzID0gMDsKICBtdWxfYWRkX2MoYVszXSwgYlszXSwgYzEsIGMyLCBjMyk7CiAgcls2XSA9IGMxOwogIHJbN10gPSBjMjsKfQoKdm9pZCBibl9zcXJfY29tYmE4KEJOX1VMT05HICpyLCBjb25zdCBCTl9VTE9ORyAqYSkgewogIEJOX1VMT05HIHQxLCB0MjsKICBCTl9VTE9ORyBjMSwgYzIsIGMzOwoKICBjMSA9IDA7CiAgYzIgPSAwOwogIGMzID0gMDsKICBzcXJfYWRkX2MoYSwgMCwgYzEsIGMyLCBjMyk7CiAgclswXSA9IGMxOwogIGMxID0gMDsKICBzcXJfYWRkX2MyKGEsIDEsIDAsIGMyLCBjMywgYzEpOwogIHJbMV0gPSBjMjsKICBjMiA9IDA7CiAgc3FyX2FkZF9jKGEsIDEsIGMzLCBjMSwgYzIpOwogIHNxcl9hZGRfYzIoYSwgMiwgMCwgYzMsIGMxLCBjMik7CiAgclsyXSA9IGMzOwogIGMzID0gMDsKICBzcXJfYWRkX2MyKGEsIDMsIDAsIGMxLCBjMiwgYzMpOwogIHNxcl9hZGRfYzIoYSwgMiwgMSwgYzEsIGMyLCBjMyk7CiAgclszXSA9IGMxOwogIGMxID0gMDsKICBzcXJfYWRkX2MoYSwgMiwgYzIsIGMzLCBjMSk7CiAgc3FyX2FkZF9jMihhLCAzLCAxLCBjMiwgYzMsIGMxKTsKICBzcXJfYWRkX2MyKGEsIDQsIDAsIGMyLCBjMywgYzEpOwogIHJbNF0gPSBjMjsKICBjMiA9IDA7CiAgc3FyX2FkZF9jMihhLCA1LCAwLCBjMywgYzEsIGMyKTsKICBzcXJfYWRkX2MyKGEsIDQsIDEsIGMzLCBjMSwgYzIpOwogIHNxcl9hZGRfYzIoYSwgMywgMiwgYzMsIGMxLCBjMik7CiAgcls1XSA9IGMzOwogIGMzID0gMDsKICBzcXJfYWRkX2MoYSwgMywgYzEsIGMyLCBjMyk7CiAgc3FyX2FkZF9jMihhLCA0LCAyLCBjMSwgYzIsIGMzKTsKICBzcXJfYWRkX2MyKGEsIDUsIDEsIGMxLCBjMiwgYzMpOwogIHNxcl9hZGRfYzIoYSwgNiwgMCwgYzEsIGMyLCBjMyk7CiAgcls2XSA9IGMxOwogIGMxID0gMDsKICBzcXJfYWRkX2MyKGEsIDcsIDAsIGMyLCBjMywgYzEpOwogIHNxcl9hZGRfYzIoYSwgNiwgMSwgYzIsIGMzLCBjMSk7CiAgc3FyX2FkZF9jMihhLCA1LCAyLCBjMiwgYzMsIGMxKTsKICBzcXJfYWRkX2MyKGEsIDQsIDMsIGMyLCBjMywgYzEpOwogIHJbN10gPSBjMjsKICBjMiA9IDA7CiAgc3FyX2FkZF9jKGEsIDQsIGMzLCBjMSwgYzIpOwogIHNxcl9hZGRfYzIoYSwgNSwgMywgYzMsIGMxLCBjMik7CiAgc3FyX2FkZF9jMihhLCA2LCAyLCBjMywgYzEsIGMyKTsKICBzcXJfYWRkX2MyKGEsIDcsIDEsIGMzLCBjMSwgYzIpOwogIHJbOF0gPSBjMzsKICBjMyA9IDA7CiAgc3FyX2FkZF9jMihhLCA3LCAyLCBjMSwgYzIsIGMzKTsKICBzcXJfYWRkX2MyKGEsIDYsIDMsIGMxLCBjMiwgYzMpOwogIHNxcl9hZGRfYzIoYSwgNSwgNCwgYzEsIGMyLCBjMyk7CiAgcls5XSA9IGMxOwogIGMxID0gMDsKICBzcXJfYWRkX2MoYSwgNSwgYzIsIGMzLCBjMSk7CiAgc3FyX2FkZF9jMihhLCA2LCA0LCBjMiwgYzMsIGMxKTsKICBzcXJfYWRkX2MyKGEsIDcsIDMsIGMyLCBjMywgYzEpOwogIHJbMTBdID0gYzI7CiAgYzIgPSAwOwogIHNxcl9hZGRfYzIoYSwgNywgNCwgYzMsIGMxLCBjMik7CiAgc3FyX2FkZF9jMihhLCA2LCA1LCBjMywgYzEsIGMyKTsKICByWzExXSA9IGMzOwogIGMzID0gMDsKICBzcXJfYWRkX2MoYSwgNiwgYzEsIGMyLCBjMyk7CiAgc3FyX2FkZF9jMihhLCA3LCA1LCBjMSwgYzIsIGMzKTsKICByWzEyXSA9IGMxOwogIGMxID0gMDsKICBzcXJfYWRkX2MyKGEsIDcsIDYsIGMyLCBjMywgYzEpOwogIHJbMTNdID0gYzI7CiAgYzIgPSAwOwogIHNxcl9hZGRfYyhhLCA3LCBjMywgYzEsIGMyKTsKICByWzE0XSA9IGMzOwogIHJbMTVdID0gYzE7Cn0KCnZvaWQgYm5fc3FyX2NvbWJhNChCTl9VTE9ORyAqciwgY29uc3QgQk5fVUxPTkcgKmEpIHsKICBCTl9VTE9ORyB0MSwgdDI7CiAgQk5fVUxPTkcgYzEsIGMyLCBjMzsKCiAgYzEgPSAwOwogIGMyID0gMDsKICBjMyA9IDA7CiAgc3FyX2FkZF9jKGEsIDAsIGMxLCBjMiwgYzMpOwogIHJbMF0gPSBjMTsKICBjMSA9IDA7CiAgc3FyX2FkZF9jMihhLCAxLCAwLCBjMiwgYzMsIGMxKTsKICByWzFdID0gYzI7CiAgYzIgPSAwOwogIHNxcl9hZGRfYyhhLCAxLCBjMywgYzEsIGMyKTsKICBzcXJfYWRkX2MyKGEsIDIsIDAsIGMzLCBjMSwgYzIpOwogIHJbMl0gPSBjMzsKICBjMyA9IDA7CiAgc3FyX2FkZF9jMihhLCAzLCAwLCBjMSwgYzIsIGMzKTsKICBzcXJfYWRkX2MyKGEsIDIsIDEsIGMxLCBjMiwgYzMpOwogIHJbM10gPSBjMTsKICBjMSA9IDA7CiAgc3FyX2FkZF9jKGEsIDIsIGMyLCBjMywgYzEpOwogIHNxcl9hZGRfYzIoYSwgMywgMSwgYzIsIGMzLCBjMSk7CiAgcls0XSA9IGMyOwogIGMyID0gMDsKICBzcXJfYWRkX2MyKGEsIDMsIDIsIGMzLCBjMSwgYzIpOwogIHJbNV0gPSBjMzsKICBjMyA9IDA7CiAgc3FyX2FkZF9jKGEsIDMsIGMxLCBjMiwgYzMpOwogIHJbNl0gPSBjMTsKICByWzddID0gYzI7Cn0KCiNlbmRpZiAgLyogZGVmaW5lZChPUEVOU1NMX1g4Nl82NCkgJiYgIWRlZmluZWQoT1BFTlNTTF9XSU5ET1dTKSAqLwo=