LyoKICogJElkJAogKgogKiBJUC1hZGRyZXNzL2hvc3RuYW1lIHRvIGNvdW50cnkgY29udmVydGVyLgogKgogKiBQcm9ibGVtOyB5b3Ugd2FudCB0byBrbm93IHdoZXJlIElQIGEuYi5jLmQgaXMgbG9jYXRlZC4KICoKICogVXNlIGFyZXNfZ2V0aG9zdGJ5bmFtZSAoImQuYy5iLmEuenouY291bnRyaWVzLm5lcmQuZGsiKQogKiBhbmQgZ2V0IHRoZSBDTkFNRSAoaG9zdC0+aF9uYW1lKS4gUmVzdWx0IHdpbGwgYmU6CiAqICAgQ05BTUUgPSB6ejxDQz4uY291bnRyaWVzLm5lcmQuZGsgd2l0aCBhZGRyZXNzIDEyNy4wLngueSAodmVyIDEpIG9yCiAqICAgQ05BTUUgPSA8YS5iLmMuZD4uenouY291bnRyaWVzLm5lcmQuZGsgd2l0aCBhZGRyZXNzIDEyNy4wLngueSAodmVyIDIpCiAqCiAqIFRoZSAyIGxldHRlciBjb3VudHJ5IGNvZGUgaW4gPENDPiBhbmQgdGhlIElTTy0zMTY2IGNvdW50cnkKICogbnVtYmVyIGluIHgueSAobnVtYmVyID0geCoyNTYgKyB5KS4gVmVyc2lvbiAyIG9mIHRoZSBwcm90b2NvbCBpcyBtaXNzaW5nCiAqIHRoZSA8Q0M+IG51bWJlci4KICoKICogUmVmOiBodHRwOi8vY291bnRyaWVzLm5lcmQuZGsvbW9yZS5odG1sCiAqCiAqIFdyaXR0ZW4gYnkgRy4gVmFuZW0gPGd2YW5lbUBicm9hZHBhcmsubm8+IDIwMDYsIDIwMDcKICoKICogTkIhIFRoaXMgcHJvZ3JhbSBtYXkgbm90IGJlIGJpZy1lbmRpYW4gYXdhcmUuCiAqCiAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKICogc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dAogKiBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAogKiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodAogKiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcKICogZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgTS5JLlQuIG5vdCBiZSB1c2VkIGluCiAqIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUKICogc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgogKiBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZgogKiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKICogd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCiAqLwoKI2luY2x1ZGUgInNldHVwLmgiCgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RkYXJnLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPGN0eXBlLmg+CiNpZmRlZiBIQVZFX1VOSVNURF9ICiNpbmNsdWRlIDx1bmlzdGQuaD4KI2VuZGlmCgojaWYgZGVmaW5lZChXSU4zMikKICAjaW5jbHVkZSA8d2luc29jay5oPgojZWxzZQogICNpbmNsdWRlIDxhcnBhL2luZXQuaD4KICAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogICNpbmNsdWRlIDxuZXRkYi5oPgojZW5kaWYKCiNpbmNsdWRlICJhcmVzLmgiCiNpbmNsdWRlICJhcmVzX2dldG9wdC5oIgojaW5jbHVkZSAiaW5ldF9uZXRfcHRvbi5oIgojaW5jbHVkZSAiaW5ldF9udG9wLmgiCgpzdGF0aWMgY29uc3QgY2hhciAqdXNhZ2UgICAgICA9ICJhY291bnRyeSBbLXZoP10ge2hvc3R8YWRkcn0gLi4uXG4iOwpzdGF0aWMgY29uc3QgY2hhciAgbmVyZF9mbXRbXSA9ICIldS4ldS4ldS4ldS56ei5jb3VudHJpZXMubmVyZC5kayI7CnN0YXRpYyBjb25zdCBjaGFyICpuZXJkX3ZlcjEgID0gbmVyZF9mbXQgKyAxNDsKc3RhdGljIGNvbnN0IGNoYXIgKm5lcmRfdmVyMiAgPSBuZXJkX2ZtdCArIDExOwpzdGF0aWMgaW50ICAgICAgICAgdmVyYm9zZSAgICA9IDA7CgojZGVmaW5lIFRSQUNFKGZtdCkgZG8geyAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UgPiAwKSBcCiAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmIGZtdCA7ICAgXAogICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCkKCnN0YXRpYyB2b2lkIHdhaXRfYXJlcyhhcmVzX2NoYW5uZWwgY2hhbm5lbCk7CnN0YXRpYyB2b2lkIGNhbGxiYWNrKHZvaWQgKmFyZywgaW50IHN0YXR1cywgaW50IHRpbWVvdXRzLCBzdHJ1Y3QgaG9zdGVudCAqaG9zdCk7CnN0YXRpYyB2b2lkIGNhbGxiYWNrMih2b2lkICphcmcsIGludCBzdGF0dXMsIGludCB0aW1lb3V0cywgc3RydWN0IGhvc3RlbnQgKmhvc3QpOwpzdGF0aWMgdm9pZCBmaW5kX2NvdW50cnlfZnJvbV9jbmFtZShjb25zdCBjaGFyICpjbmFtZSwgc3RydWN0IGluX2FkZHIgYWRkcik7CgpzdGF0aWMgdm9pZCBBYm9ydChjb25zdCBjaGFyICpmbXQsIC4uLikKewogIHZhX2xpc3QgYXJnczsKICB2YV9zdGFydChhcmdzLCBmbXQpOwogIHZmcHJpbnRmKHN0ZGVyciwgZm10LCBhcmdzKTsKICB2YV9lbmQoYXJncyk7CiAgZXhpdCgxKTsKfQoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQp7CiAgYXJlc19jaGFubmVsIGNoYW5uZWw7CiAgaW50ICAgIGNoLCBzdGF0dXM7CgojaWZkZWYgV0lOMzIKICBXT1JEIHdWZXJzaW9uUmVxdWVzdGVkID0gTUFLRVdPUkQoVVNFX1dJTlNPQ0ssVVNFX1dJTlNPQ0spOwogIFdTQURBVEEgd3NhRGF0YTsKICBXU0FTdGFydHVwKHdWZXJzaW9uUmVxdWVzdGVkLCAmd3NhRGF0YSk7CiNlbmRpZgoKICB3aGlsZSAoKGNoID0gYXJlc19nZXRvcHQoYXJnYywgYXJndiwgImR2aD8iKSkgIT0gLTEpCiAgICBzd2l0Y2ggKGNoKQogICAgICB7CiAgICAgIGNhc2UgJ2QnOgojaWZkZWYgV0FUVDMyCiAgICAgICAgZGJ1Z19pbml0KCk7CiNlbmRpZgogICAgICAgIGJyZWFrOwogICAgICBjYXNlICd2JzoKICAgICAgICB2ZXJib3NlKys7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgJ2gnOgogICAgICBjYXNlICc/JzoKICAgICAgZGVmYXVsdDoKICAgICAgICBBYm9ydCh1c2FnZSk7CiAgICAgIH0KCiAgYXJnYyAtPSBvcHRpbmQ7CiAgYXJndiArPSBvcHRpbmQ7CiAgaWYgKGFyZ2MgPCAxKQogICAgIEFib3J0KHVzYWdlKTsKCiAgc3RhdHVzID0gYXJlc19pbml0KCZjaGFubmVsKTsKICBpZiAoc3RhdHVzICE9IEFSRVNfU1VDQ0VTUykKICAgIHsKICAgICAgZnByaW50ZihzdGRlcnIsICJhcmVzX2luaXQ6ICVzXG4iLCBhcmVzX3N0cmVycm9yKHN0YXR1cykpOwogICAgICByZXR1cm4gMTsKICAgIH0KCiAgLyogSW5pdGlhdGUgdGhlIHF1ZXJpZXMsIG9uZSBwZXIgY29tbWFuZC1saW5lIGFyZ3VtZW50LiAqLwogIGZvciAoIDsgKmFyZ3Y7IGFyZ3YrKykKICAgIHsKICAgICAgc3RydWN0IGluX2FkZHIgYWRkcjsKICAgICAgY2hhciBidWZbMTAwXTsKCiAgICAgIC8qIElmIHRoaXMgZmFpbHMsIGFzc3VtZSAnKmFyZ3YnIGlzIGEgaG9zdC1uYW1lIHRoYXQKICAgICAgICogbXVzdCBiZSByZXNvbHZlZCBmaXJzdAogICAgICAgKi8KICAgICAgaWYgKGFyZXNfaW5ldF9wdG9uKEFGX0lORVQsICphcmd2LCAmYWRkcikgIT0gMSkKICAgICAgICB7CiAgICAgICAgICBhcmVzX2dldGhvc3RieW5hbWUoY2hhbm5lbCwgKmFyZ3YsIEFGX0lORVQsIGNhbGxiYWNrMiwgJmFkZHIpOwogICAgICAgICAgd2FpdF9hcmVzKGNoYW5uZWwpOwogICAgICAgICAgaWYgKGFkZHIuc19hZGRyID09IElOQUREUl9OT05FKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgcHJpbnRmKCJGYWlsZWQgdG8gbG9va3VwICVzXG4iLCAqYXJndik7CiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICBzcHJpbnRmKGJ1ZiwgbmVyZF9mbXQsCiAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCkoYWRkci5zX2FkZHIgPj4gMjQpLAogICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpKChhZGRyLnNfYWRkciA+PiAxNikgJiAyNTUpLAogICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpKChhZGRyLnNfYWRkciA+PiA4KSAmIDI1NSksCiAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCkoYWRkci5zX2FkZHIgJiAyNTUpKTsKICAgICAgVFJBQ0UoKCJMb29raW5nIHVwICVzLi4uIiwgYnVmKSk7CiAgICAgIGZmbHVzaChzdGRvdXQpOwogICAgICBhcmVzX2dldGhvc3RieW5hbWUoY2hhbm5lbCwgYnVmLCBBRl9JTkVULCBjYWxsYmFjaywgYnVmKTsKICAgIH0KCiAgd2FpdF9hcmVzKGNoYW5uZWwpOwogIGFyZXNfZGVzdHJveShjaGFubmVsKTsKCiNpZmRlZiBXSU4zMgogIFdTQUNsZWFudXAoKTsKI2VuZGlmCgogIHJldHVybiAwOwp9CgovKgogKiBXYWl0IGZvciB0aGUgcXVlcmllcyB0byBjb21wbGV0ZS4KICovCnN0YXRpYyB2b2lkIHdhaXRfYXJlcyhhcmVzX2NoYW5uZWwgY2hhbm5lbCkKewogIHdoaWxlICgxKQogICAgewogICAgICBzdHJ1Y3QgdGltZXZhbCAqdHZwLCB0djsKICAgICAgZmRfc2V0IHJlYWRfZmRzLCB3cml0ZV9mZHM7CiAgICAgIGludCBuZmRzOwoKICAgICAgRkRfWkVSTygmcmVhZF9mZHMpOwogICAgICBGRF9aRVJPKCZ3cml0ZV9mZHMpOwogICAgICBuZmRzID0gYXJlc19mZHMoY2hhbm5lbCwgJnJlYWRfZmRzLCAmd3JpdGVfZmRzKTsKICAgICAgaWYgKG5mZHMgPT0gMCkKICAgICAgICBicmVhazsKICAgICAgdHZwID0gYXJlc190aW1lb3V0KGNoYW5uZWwsIE5VTEwsICZ0dik7CiAgICAgIHNlbGVjdChuZmRzLCAmcmVhZF9mZHMsICZ3cml0ZV9mZHMsIE5VTEwsIHR2cCk7CiAgICAgIGFyZXNfcHJvY2VzcyhjaGFubmVsLCAmcmVhZF9mZHMsICZ3cml0ZV9mZHMpOwogICAgfQp9CgovKgogKiBUaGlzIGlzIHRoZSBjYWxsYmFjayB1c2VkIHdoZW4gd2UgaGF2ZSB0aGUgSVAtYWRkcmVzcyBvZiBpbnRlcmVzdC4KICogRXh0cmFjdCB0aGUgQ05BTUUgYW5kIGZpZ3VyZSBvdXQgdGhlIGNvdW50cnktY29kZSBmcm9tIGl0LgogKi8Kc3RhdGljIHZvaWQgY2FsbGJhY2sodm9pZCAqYXJnLCBpbnQgc3RhdHVzLCBpbnQgdGltZW91dHMsIHN0cnVjdCBob3N0ZW50ICpob3N0KQp7CiAgY29uc3QgY2hhciAqbmFtZSA9IChjb25zdCBjaGFyKilhcmc7CiAgY29uc3QgY2hhciAqY25hbWU7CiAgY2hhciBidWZbMjBdOwoKICAodm9pZCl0aW1lb3V0czsKCiAgaWYgKCFob3N0IHx8IHN0YXR1cyAhPSBBUkVTX1NVQ0NFU1MpCiAgICB7CiAgICAgIHByaW50ZigiRmFpbGVkIHRvIGxvb2t1cCAlczogJXNcbiIsIG5hbWUsIGFyZXNfc3RyZXJyb3Ioc3RhdHVzKSk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgVFJBQ0UoKCJcbkZvdW5kIGFkZHJlc3MgJXMsIG5hbWUgJXNcbiIsCiAgICAgICAgIGFyZXNfaW5ldF9udG9wKEFGX0lORVQsKGNvbnN0IGNoYXIqKWhvc3QtPmhfYWRkcixidWYsc2l6ZW9mKGJ1ZikpLAogICAgICAgICBob3N0LT5oX25hbWUpKTsKCiAgY25hbWUgPSBob3N0LT5oX25hbWU7ICAvKiBDTkFNRSBnZXRzIHB1dCBoZXJlICovCiAgaWYgKCFjbmFtZSkKICAgIHByaW50ZigiRmFpbGVkIHRvIGdldCBDTkFNRSBmb3IgJXNcbiIsIG5hbWUpOwogIGVsc2UKICAgIGZpbmRfY291bnRyeV9mcm9tX2NuYW1lKGNuYW1lLCAqKHN0cnVjdCBpbl9hZGRyKilob3N0LT5oX2FkZHIpOwp9CgovKgogKiBUaGlzIGlzIHRoZSBjYWxsYmFjayB1c2VkIHRvIG9idGFpbiB0aGUgSVAtYWRkcmVzcyBvZiB0aGUgaG9zdCBvZiBpbnRlcmVzdC4KICovCnN0YXRpYyB2b2lkIGNhbGxiYWNrMih2b2lkICphcmcsIGludCBzdGF0dXMsIGludCB0aW1lb3V0cywgc3RydWN0IGhvc3RlbnQgKmhvc3QpCnsKICBzdHJ1Y3QgaW5fYWRkciAqYWRkciA9IChzdHJ1Y3QgaW5fYWRkciopIGFyZzsKCiAgKHZvaWQpdGltZW91dHM7CiAgaWYgKCFob3N0IHx8IHN0YXR1cyAhPSBBUkVTX1NVQ0NFU1MpCiAgICBtZW1zZXQoYWRkciwgSU5BRERSX05PTkUsIHNpemVvZigqYWRkcikpOwogIGVsc2UKICAgIG1lbWNweShhZGRyLCBob3N0LT5oX2FkZHIsIHNpemVvZigqYWRkcikpOwp9CgpzdHJ1Y3Qgc2VhcmNoX2xpc3QgewogICAgICAgaW50ICAgICAgICAgY291bnRyeV9udW1iZXI7IC8qIElTTy0zMTY2IGNvdW50cnkgbnVtYmVyICovCiAgICAgICBjaGFyICAgICAgICBzaG9ydF9uYW1lWzNdOyAgLyogQTIgc2hvcnQgY291bnRyeSBjb2RlICovCiAgICAgICBjb25zdCBjaGFyICpsb25nX25hbWU7ICAgICAgLyogbm9ybWFsIGNvdW50cnkgbmFtZSAqLwogICAgIH07Cgpjb25zdCBzdHJ1Y3Qgc2VhcmNoX2xpc3QgKmxpc3RfbG9va3VwKGludCBudW1iZXIsIGNvbnN0IHN0cnVjdCBzZWFyY2hfbGlzdCAqbGlzdCwgaW50IG51bSkKewogIHdoaWxlIChudW0gPiAwICYmIGxpc3QtPmxvbmdfbmFtZSkKICAgIHsKICAgICAgaWYgKGxpc3QtPmNvdW50cnlfbnVtYmVyID09IG51bWJlcikKICAgICAgICByZXR1cm4gKGxpc3QpOwogICAgICBudW0tLTsKICAgICAgbGlzdCsrOwogICAgfQogIHJldHVybiAoTlVMTCk7Cn0KCi8qCiAqIFJlZjogZnRwOi8vZnRwLnJpcGUubmV0L2lzbzMxNjYtY291bnRyeWNvZGVzLnR4dAogKi8Kc3RhdGljIGNvbnN0IHN0cnVjdCBzZWFyY2hfbGlzdCBjb3VudHJ5X2xpc3RbXSA9IHsKICAgICAgIHsgICA0LCAiYWYiLCAiQWZnaGFuaXN0YW4iICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAyNDgsICJheCIsICLFbGFuZCBJc2xhbmQiICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7ICAgOCwgImFsIiwgIkFsYmFuaWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgIDEyLCAiZHoiLCAiQWxnZXJpYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAgMTYsICJhcyIsICJBbWVyaWNhbiBTYW1vYSIgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7ICAyMCwgImFkIiwgIkFuZG9ycmEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgIDI0LCAiYW8iLCAiQW5nb2xhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA2NjAsICJhaSIsICJBbmd1aWxsYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7ICAxMCwgImFxIiwgIkFudGFyY3RpY2EiICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgIDI4LCAiYWciLCAiQW50aWd1YSAmIEJhcmJ1ZGEiICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAgMzIsICJhciIsICJBcmdlbnRpbmEiICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7ICA1MSwgImFtIiwgIkFybWVuaWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNTMzLCAiYXciLCAiQXJ1YmEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAgMzYsICJhdSIsICJBdXN0cmFsaWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7ICA0MCwgImF0IiwgIkF1c3RyaWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgIDMxLCAiYXoiLCAiQXplcmJhaWphbiIgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAgNDQsICJicyIsICJCYWhhbWFzIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7ICA0OCwgImJoIiwgIkJhaHJhaW4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgIDUwLCAiYmQiLCAiQmFuZ2xhZGVzaCIgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAgNTIsICJiYiIsICJCYXJiYWRvcyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDExMiwgImJ5IiwgIkJlbGFydXMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgIDU2LCAiYmUiLCAiQmVsZ2l1bSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAgODQsICJieiIsICJCZWxpemUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDIwNCwgImJqIiwgIkJlbmluIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgIDYwLCAiYm0iLCAiQmVybXVkYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAgNjQsICJidCIsICJCaHV0YW4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7ICA2OCwgImJvIiwgIkJvbGl2aWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgIDcwLCAiYmEiLCAiQm9zbmlhICYgSGVyemVnb3dpbmEiICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAgNzIsICJidyIsICJCb3Rzd2FuYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7ICA3NCwgImJ2IiwgIkJvdXZldCBJc2xhbmQiICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgIDc2LCAiYnIiLCAiQnJhemlsIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAgODYsICJpbyIsICJCcml0aXNoIEluZGlhbiBPY2VhbiBUZXJyaXRvcnkiICAgICAgIH0sCiAgICAgICB7ICA5NiwgImJuIiwgIkJydW5laSBEYXJ1c3NhbGFtIiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMTAwLCAiYmciLCAiQnVsZ2FyaWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA4NTQsICJiZiIsICJCdXJraW5hIEZhc28iICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDEwOCwgImJpIiwgIkJ1cnVuZGkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMTE2LCAia2giLCAiQ2FtYm9kaWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAxMjAsICJjbSIsICJDYW1lcm9vbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDEyNCwgImNhIiwgIkNhbmFkYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMTMyLCAiY3YiLCAiQ2FwZSBWZXJkZSIgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAxMzYsICJreSIsICJDYXltYW4gSXNsYW5kcyIgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDE0MCwgImNmIiwgIkNlbnRyYWwgQWZyaWNhbiBSZXB1YmxpYyIgICAgICAgICAgICAgfSwKICAgICAgIHsgMTQ4LCAidGQiLCAiQ2hhZCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAxNTIsICJjbCIsICJDaGlsZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDE1NiwgImNuIiwgIkNoaW5hIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMTYyLCAiY3giLCAiQ2hyaXN0bWFzIElzbGFuZCIgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAxNjYsICJjYyIsICJDb2NvcyBJc2xhbmRzIiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDE3MCwgImNvIiwgIkNvbG9tYmlhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMTc0LCAia20iLCAiQ29tb3JvcyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAxNzgsICJjZyIsICJDb25nbyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDE4MCwgImNkIiwgIkNvbmdvIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMTg0LCAiY2siLCAiQ29vayBJc2xhbmRzIiAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAxODgsICJjciIsICJDb3N0YSBSaWNhIiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDM4NCwgImNpIiwgIkNvdGUgZCdJdm9pcmUiICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMTkxLCAiaHIiLCAiQ3JvYXRpYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAxOTIsICJjdSIsICJDdWJhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDE5NiwgImN5IiwgIkN5cHJ1cyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMjAzLCAiY3oiLCAiQ3plY2ggUmVwdWJsaWMiICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAyMDgsICJkayIsICJEZW5tYXJrIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDI2MiwgImRqIiwgIkRqaWJvdXRpIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMjEyLCAiZG0iLCAiRG9taW5pY2EiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAyMTQsICJkbyIsICJEb21pbmljYW4gUmVwdWJsaWMiICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDIxOCwgImVjIiwgIkVjdWFkb3IiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgODE4LCAiZWciLCAiRWd5cHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAyMjIsICJzdiIsICJFbCBTYWx2YWRvciIgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDIyNiwgImdxIiwgIkVxdWF0b3JpYWwgR3VpbmVhIiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMjMyLCAiZXIiLCAiRXJpdHJlYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAyMzMsICJlZSIsICJFc3RvbmlhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDIzMSwgImV0IiwgIkV0aGlvcGlhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMjM4LCAiZmsiLCAiRmFsa2xhbmQgSXNsYW5kcyIgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAyMzQsICJmbyIsICJGYXJvZSBJc2xhbmRzIiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDI0MiwgImZqIiwgIkZpamkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMjQ2LCAiZmkiLCAiRmlubGFuZCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAyNTAsICJmciIsICJGcmFuY2UiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDI0OSwgImZ4IiwgIkZyYW5jZSwgTWV0cm9wb2xpdGFuIiAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMjU0LCAiZ2YiLCAiRnJlbmNoIEd1aWFuYSIgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAyNTgsICJwZiIsICJGcmVuY2ggUG9seW5lc2lhIiAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDI2MCwgInRmIiwgIkZyZW5jaCBTb3V0aGVybiBUZXJyaXRvcmllcyIgICAgICAgICAgfSwKICAgICAgIHsgMjY2LCAiZ2EiLCAiR2Fib24iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAyNzAsICJnbSIsICJHYW1iaWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDI2OCwgImdlIiwgIkdlb3JnaWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMjc2LCAiZGUiLCAiR2VybWFueSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAyODgsICJnaCIsICJHaGFuYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDI5MiwgImdpIiwgIkdpYnJhbHRhciIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMzAwLCAiZ3IiLCAiR3JlZWNlIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAzMDQsICJnbCIsICJHcmVlbmxhbmQiICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDMwOCwgImdkIiwgIkdyZW5hZGEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMzEyLCAiZ3AiLCAiR3VhZGVsb3VwZSIgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAzMTYsICJndSIsICJHdWFtIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDMyMCwgImd0IiwgIkd1YXRlbWFsYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMzI0LCAiZ24iLCAiR3VpbmVhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA2MjQsICJndyIsICJHdWluZWEtQmlzc2F1IiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDMyOCwgImd5IiwgIkd1eWFuYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMzMyLCAiaHQiLCAiSGFpdGkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAzMzQsICJobSIsICJIZWFyZCAmIE1jIERvbmFsZCBJc2xhbmRzIiAgICAgICAgICAgIH0sCiAgICAgICB7IDMzNiwgInZhIiwgIlZhdGljYW4gQ2l0eSIgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMzQwLCAiaG4iLCAiSG9uZHVyYXMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAzNDQsICJoayIsICJIb25nIGtvbmciICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDM0OCwgImh1IiwgIkh1bmdhcnkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMzUyLCAiaXMiLCAiSWNlbGFuZCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAzNTYsICJpbiIsICJJbmRpYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDM2MCwgImlkIiwgIkluZG9uZXNpYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMzY0LCAiaXIiLCAiSXJhbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAzNjgsICJpcSIsICJJcmFxIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDM3MiwgImllIiwgIklyZWxhbmQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMzc2LCAiaWwiLCAiSXNyYWVsIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAzODAsICJpdCIsICJJdGFseSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDM4OCwgImptIiwgIkphbWFpY2EiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMzkyLCAianAiLCAiSmFwYW4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA0MDAsICJqbyIsICJKb3JkYW4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDM5OCwgImt6IiwgIkthemFraHN0YW4iICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNDA0LCAia2UiLCAiS2VueWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAyOTYsICJraSIsICJLaXJpYmF0aSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDQwOCwgImtwIiwgIktvcmVhIChub3J0aCkiICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNDEwLCAia3IiLCAiS29yZWEgKHNvdXRoKSIgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA0MTQsICJrdyIsICJLdXdhaXQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDQxNywgImtnIiwgIkt5cmd5enN0YW4iICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNDE4LCAibGEiLCAiTGFvcyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA0MjgsICJsdiIsICJMYXR2aWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDQyMiwgImxiIiwgIkxlYmFub24iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNDI2LCAibHMiLCAiTGVzb3RobyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA0MzAsICJsciIsICJMaWJlcmlhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDQzNCwgImx5IiwgIkxpYnlhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNDM4LCAibGkiLCAiTGllY2h0ZW5zdGVpbiIgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA0NDAsICJsdCIsICJMaXRodWFuaWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDQ0MiwgImx1IiwgIkx1eGVtYm91cmciICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNDQ2LCAibW8iLCAiTWFjYW8iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA4MDcsICJtayIsICJNYWNlZG9uaWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDQ1MCwgIm1nIiwgIk1hZGFnYXNjYXIiICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNDU0LCAibXciLCAiTWFsYXdpIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA0NTgsICJteSIsICJNYWxheXNpYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDQ2MiwgIm12IiwgIk1hbGRpdmVzIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNDY2LCAibWwiLCAiTWFsaSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA0NzAsICJtdCIsICJNYWx0YSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDU4NCwgIm1oIiwgIk1hcnNoYWxsIElzbGFuZHMiICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNDc0LCAibXEiLCAiTWFydGluaXF1ZSIgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA0NzgsICJtciIsICJNYXVyaXRhbmlhIiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDQ4MCwgIm11IiwgIk1hdXJpdGl1cyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMTc1LCAieXQiLCAiTWF5b3R0ZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA0ODQsICJteCIsICJNZXhpY28iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDU4MywgImZtIiwgIk1pY3JvbmVzaWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNDk4LCAibWQiLCAiTW9sZG92YSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA0OTIsICJtYyIsICJNb25hY28iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDQ5NiwgIm1uIiwgIk1vbmdvbGlhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNTAwLCAibXMiLCAiTW9udHNlcnJhdCIgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA1MDQsICJtYSIsICJNb3JvY2NvIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDUwOCwgIm16IiwgIk1vemFtYmlxdWUiICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMTA0LCAibW0iLCAiTXlhbm1hciIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA1MTYsICJuYSIsICJOYW1pYmlhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDUyMCwgIm5yIiwgIk5hdXJ1IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNTI0LCAibnAiLCAiTmVwYWwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA1MjgsICJubCIsICJOZXRoZXJsYW5kcyIgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDUzMCwgImFuIiwgIk5ldGhlcmxhbmRzIEFudGlsbGVzIiAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNTQwLCAibmMiLCAiTmV3IENhbGVkb25pYSIgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA1NTQsICJueiIsICJOZXcgWmVhbGFuZCIgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDU1OCwgIm5pIiwgIk5pY2FyYWd1YSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNTYyLCAibmUiLCAiTmlnZXIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA1NjYsICJuZyIsICJOaWdlcmlhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDU3MCwgIm51IiwgIk5pdWUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNTc0LCAibmYiLCAiTm9yZm9sayBJc2xhbmQiICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA1ODAsICJtcCIsICJOb3J0aGVybiBNYXJpYW5hIElzbGFuZHMiICAgICAgICAgICAgIH0sCiAgICAgICB7IDU3OCwgIm5vIiwgIk5vcndheSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNTEyLCAib20iLCAiT21hbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA1ODYsICJwayIsICJQYWtpc3RhbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDU4NSwgInB3IiwgIlBhbGF1IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMjc1LCAicHMiLCAiUGFsZXN0aW5pYW4gVGVycml0b3J5IiAgICAgICAgICAgICAgICB9LAogICAgICAgeyA1OTEsICJwYSIsICJQYW5hbWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDU5OCwgInBnIiwgIlBhcHVhIE5ldyBHdWluZWEiICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNjAwLCAicHkiLCAiUGFyYWd1YXkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA2MDQsICJwZSIsICJQZXJ1IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDYwOCwgInBoIiwgIlBoaWxpcHBpbmVzIiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNjEyLCAicG4iLCAiUGl0Y2Fpcm4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA2MTYsICJwbCIsICJQb2xhbmQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDYyMCwgInB0IiwgIlBvcnR1Z2FsIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNjMwLCAicHIiLCAiUHVlcnRvIFJpY28iICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA2MzQsICJxYSIsICJRYXRhciIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDYzOCwgInJlIiwgIlJldW5pb24iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNjQyLCAicm8iLCAiUm9tYW5pYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA2NDMsICJydSIsICJSdXNzaWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDY0NiwgInJ3IiwgIlJ3YW5kYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNjU5LCAia24iLCAiU2FpbnQgS2l0dHMgJiBOZXZpcyIgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA2NjIsICJsYyIsICJTYWludCBMdWNpYSIgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDY3MCwgInZjIiwgIlNhaW50IFZpbmNlbnQiICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgODgyLCAid3MiLCAiU2Ftb2EiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA2NzQsICJzbSIsICJTYW4gTWFyaW5vIiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDY3OCwgInN0IiwgIlNhbyBUb21lICYgUHJpbmNpcGUiICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNjgyLCAic2EiLCAiU2F1ZGkgQXJhYmlhIiAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA2ODYsICJzbiIsICJTZW5lZ2FsIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDg5MSwgImNzIiwgIlNlcmJpYSBhbmQgTW9udGVuZWdybyIgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNjkwLCAic2MiLCAiU2V5Y2hlbGxlcyIgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA2OTQsICJzbCIsICJTaWVycmEgTGVvbmUiICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDcwMiwgInNnIiwgIlNpbmdhcG9yZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNzAzLCAic2siLCAiU2xvdmFraWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA3MDUsICJzaSIsICJTbG92ZW5pYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7ICA5MCwgInNiIiwgIlNvbG9tb24gSXNsYW5kcyIgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNzA2LCAic28iLCAiU29tYWxpYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA3MTAsICJ6YSIsICJTb3V0aCBBZnJpY2EiICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDIzOSwgImdzIiwgIlNvdXRoIEdlb3JnaWEiICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNzI0LCAiZXMiLCAiU3BhaW4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyAxNDQsICJsayIsICJTcmkgTGFua2EiICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDY1NCwgInNoIiwgIlN0LiBIZWxlbmEiICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNjY2LCAicG0iLCAiU3QuIFBpZXJyZSAmIE1pcXVlbG9uIiAgICAgICAgICAgICAgICB9LAogICAgICAgeyA3MzYsICJzZCIsICJTdWRhbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDc0MCwgInNyIiwgIlN1cmluYW1lIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNzQ0LCAic2oiLCAiU3ZhbGJhcmQgJiBKYW4gTWF5ZW4gSXNsYW5kcyIgICAgICAgICB9LAogICAgICAgeyA3NDgsICJzeiIsICJTd2F6aWxhbmQiICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDc1MiwgInNlIiwgIlN3ZWRlbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNzU2LCAiY2giLCAiU3dpdHplcmxhbmQiICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA3NjAsICJzeSIsICJTeXJpYW4gQXJhYiBSZXB1YmxpYyIgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDYyNiwgInRsIiwgIlRpbW9yLUxlc3RlIiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgMTU4LCAidHciLCAiVGFpd2FuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA3NjIsICJ0aiIsICJUYWppa2lzdGFuIiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDgzNCwgInR6IiwgIlRhbnphbmlhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNzY0LCAidGgiLCAiVGhhaWxhbmQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA3NjgsICJ0ZyIsICJUb2dvIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDc3MiwgInRrIiwgIlRva2VsYXUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNzc2LCAidG8iLCAiVG9uZ2EiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA3ODAsICJ0dCIsICJUcmluaWRhZCAmIFRvYmFnbyIgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDc4OCwgInRuIiwgIlR1bmlzaWEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNzkyLCAidHIiLCAiVHVya2V5IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA3OTUsICJ0bSIsICJUdXJrbWVuaXN0YW4iICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDc5NiwgInRjIiwgIlR1cmtzICYgQ2FpY29zIElzbGFuZHMiICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNzk4LCAidHYiLCAiVHV2YWx1IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA4MDAsICJ1ZyIsICJVZ2FuZGEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDgwNCwgInVhIiwgIlVrcmFpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNzg0LCAiYWUiLCAiVW5pdGVkIEFyYWIgRW1pcmF0ZXMiICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA4MjYsICJnYiIsICJVbml0ZWQgS2luZ2RvbSIgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDg0MCwgInVzIiwgIlVuaXRlZCBTdGF0ZXMiICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNTgxLCAidW0iLCAiVW5pdGVkIFN0YXRlcyBNaW5vciBPdXRseWluZyBJc2xhbmRzIiB9LAogICAgICAgeyA4NTgsICJ1eSIsICJVcnVndWF5IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDg2MCwgInV6IiwgIlV6YmVraXN0YW4iICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNTQ4LCAidnUiLCAiVmFudWF0dSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA4NjIsICJ2ZSIsICJWZW5lenVlbGEiICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDcwNCwgInZuIiwgIlZpZXRuYW0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgIDkyLCAidmciLCAiVmlyZ2luIElzbGFuZHMgKEJyaXRpc2gpIiAgICAgICAgICAgICB9LAogICAgICAgeyA4NTAsICJ2aSIsICJWaXJnaW4gSXNsYW5kcyAoVVMpIiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDg3NiwgIndmIiwgIldhbGxpcyAmIEZ1dHVuYSBJc2xhbmRzIiAgICAgICAgICAgICAgfSwKICAgICAgIHsgNzMyLCAiZWgiLCAiV2VzdGVybiBTYWhhcmEiICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgeyA4ODcsICJ5ZSIsICJZZW1lbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICB7IDg5NCwgInptIiwgIlphbWJpYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgIHsgNzE2LCAienciLCAiWmltYmFid2UiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgfTsKCi8qCiAqIENoZWNrIGlmIHN0YXJ0IG9mICdzdHInIGlzIHNpbXBseSBhbiBJUHY0IGFkZHJlc3MuCiAqLwojZGVmaW5lIEJZVEVfT0soeCkgKCh4KSA+PSAwICYmICh4KSA8PSAyNTUpCgpzdGF0aWMgaW50IGlzX2FkZHIoY2hhciAqc3RyLCBjaGFyICoqZW5kKQp7CiAgaW50IGEwLCBhMSwgYTIsIGEzLCBudW0sIHJjID0gMCwgbGVuZ3RoID0gMDsKCiAgaWYgKChudW0gPSBzc2NhbmYoc3RyLCIlM2QuJTNkLiUzZC4lM2QlbiIsJmEwLCZhMSwmYTIsJmEzLCZsZW5ndGgpKSA9PSA0ICYmCiAgICAgIEJZVEVfT0soYTApICYmIEJZVEVfT0soYTEpICYmIEJZVEVfT0soYTIpICYmIEJZVEVfT0soYTMpICYmCiAgICAgIGxlbmd0aCA+PSAoMys0KSkKICAgIHsKICAgICAgcmMgPSAxOwogICAgICAqZW5kID0gc3RyICsgbGVuZ3RoOwogICAgfQogIHJldHVybiByYzsKfQoKLyoKICogRmluZCB0aGUgY291bnRyeS1jb2RlIGFuZCBuYW1lIGZyb20gdGhlIENOQU1FLiBFLmcuOgogKiAgIHZlcnNpb24gMTogQ05BTUUgPSB6em5vLmNvdW50cmllcy5uZXJkLmRrIHdpdGggYWRkcmVzcyAxMjcuMC4yLjY2CiAqICAgICAgICAgICAgICB5aWVsZHMgY2NvZGVfQSIgPSAibm8iIGFuZCBjbnVtYmVyIDU3OCAoMi42NikuCiAqICAgdmVyc2lvbiAyOiBDTkFNRSA9IDxhLmIuYy5kPi56ei5jb3VudHJpZXMubmVyZC5kayB3aXRoIGFkZHJlc3MgMTI3LjAuMi42NgogKiAgICAgICAgICAgICAgeWllbGRzIGNudW1iZXIgNTc4ICgyLjY2KS4gY2NvZGVfQSBpcyAiIjsKICovCnN0YXRpYyB2b2lkIGZpbmRfY291bnRyeV9mcm9tX2NuYW1lKGNvbnN0IGNoYXIgKmNuYW1lLCBzdHJ1Y3QgaW5fYWRkciBhZGRyKQp7CiAgY29uc3Qgc3RydWN0IHNlYXJjaF9saXN0ICpjb3VudHJ5OwogIGNoYXIgIGNjb2RlX0EyWzNdLCAqY2NvcHksICpkb3RfNDsKICBpbnQgICBjbnVtYmVyLCB6MCwgejEsIHZlcl8xLCB2ZXJfMjsKICB1X2xvbmcgaXA7CgogIGlwID0gbnRvaGwoYWRkci5zX2FkZHIpOwogIHowID0gdG9sb3dlcihjbmFtZVswXSk7CiAgejEgPSB0b2xvd2VyKGNuYW1lWzFdKTsKICBjY29weSA9IHN0cmR1cChjbmFtZSk7CgogIHZlcl8xID0gKHowID09ICd6JyAmJiB6MSA9PSAneicgJiYgIXN0cmNhc2VjbXAoY25hbWUrNCxuZXJkX3ZlcjEpKTsKICB2ZXJfMiA9IChpc19hZGRyKGNjb3B5LCZkb3RfNCkgJiYgIXN0cmNhc2VjbXAoZG90XzQsbmVyZF92ZXIyKSk7CgogIGlmICh2ZXJfMSkKICAgIHsKICAgICAgY29uc3QgY2hhciAqZG90ID0gc3RyY2hyKGNuYW1lLCAnLicpOwogICAgICBpZiAoKHowICE9ICd6JyAmJiB6MSAhPSAneicpIHx8IGRvdCAhPSBjbmFtZSs0KQogICAgICAgIHsKICAgICAgICAgIHByaW50ZigiVW5leHBlY3RlZCBDTkFNRSAlcyAodmVyXzEpXG4iLCBjbmFtZSk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQogIGVsc2UgaWYgKHZlcl8yKQogICAgewogICAgICB6MCA9IHRvbG93ZXIoZG90XzRbMV0pOwogICAgICB6MSA9IHRvbG93ZXIoZG90XzRbMl0pOwogICAgICBpZiAoejAgIT0gJ3onICYmIHoxICE9ICd6JykKICAgICAgICB7CiAgICAgICAgICBwcmludGYoIlVuZXhwZWN0ZWQgQ05BTUUgJXMgKHZlcl8yKVxuIiwgY25hbWUpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KICBlbHNlCiAgICB7CiAgICAgIHByaW50ZigiVW5leHBlY3RlZCBDTkFNRSAlcyAodmVyPylcbiIsIGNuYW1lKTsKICAgICAgcmV0dXJuOwogICAgfQoKICBpZiAodmVyXzEpCiAgICB7CiAgICAgIGNjb2RlX0EyWzBdID0gdG9sb3dlcihjbmFtZVsyXSk7CiAgICAgIGNjb2RlX0EyWzFdID0gdG9sb3dlcihjbmFtZVszXSk7CiAgICAgIGNjb2RlX0EyWzJdID0gJ1wwJzsKICAgIH0KICBlbHNlCiAgICBjY29kZV9BMlswXSA9ICdcMCc7CgogIGNudW1iZXIgPSBpcCAmIDB4RkZGRjsKCiAgVFJBQ0UoKCJGb3VuZCBjb3VudHJ5LWNvZGUgYCVzJywgbnVtYmVyICVkXG4iLAogICAgICAgICB2ZXJfMSA/IGNjb2RlX0EyIDogIjxuL2E+IiwgY251bWJlcikpOwoKICBjb3VudHJ5ID0gbGlzdF9sb29rdXAoY251bWJlciwgY291bnRyeV9saXN0LAogICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoY291bnRyeV9saXN0KSAvIHNpemVvZihjb3VudHJ5X2xpc3RbMF0pKTsKICBpZiAoIWNvdW50cnkpCiAgICBwcmludGYoIk5hbWUgZm9yIGNvdW50cnktbnVtYmVyICVkIG5vdCBmb3VuZC5cbiIsIGNudW1iZXIpOwogIGVsc2UKICAgIHsKICAgICAgaWYgKHZlcl8xICYmICoodW5zaWduZWQgc2hvcnQqKSZjb3VudHJ5LT5zaG9ydF9uYW1lICE9ICoodW5zaWduZWQqKSZjY29kZV9BMikKICAgICAgICBwcmludGYoInNob3J0LW5hbWUgbWlzbWF0Y2g7ICVzIHZzICVzXG4iLCBjb3VudHJ5LT5zaG9ydF9uYW1lLCBjY29kZV9BMik7CgogICAgICBwcmludGYoIiVzICglcyksIG51bWJlciAlZC5cbiIsCiAgICAgICAgICAgICBjb3VudHJ5LT5sb25nX25hbWUsIGNvdW50cnktPnNob3J0X25hbWUsIGNudW1iZXIpOwogICAgfQogIGZyZWUoY2NvcHkpOwp9Cgo=