LyoqCiAqIEBmaWxlIGt3YXRjaF9tc2cuaAogKiBAYnJpZWYgtqjS5bb5za/K1rHtuvPMqLf+zvHT601NSb27u6W1xM/7z6K907/aCiAqCiAqIENvcHlyaWdodCAoQykgMjAxNyBTYW5lY2hpcHMgVGVjaG5vbG9neSBDby4sIEx0ZC4KICogQGF1dGhvcgogKgogKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICoKICovCgojaWZuZGVmIF9LV0FUQ0hfTVNHX0gKI2RlZmluZSBfS1dBVENIX01TR19ICi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogICAgICAgICAgICAgICAgICAgICAgICAgICBJbmNsdWRlIGhlYWRlciBmaWxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiBJbmNsdWRlICJhcHAvaW5jbHVkZS9tZXNzYWdlLmgiLiAqLwojaW5jbHVkZSAibWVzc2FnZS5oIgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvIGRlZmluaXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KI2RlZmluZSBLV0FUQ0hfTVNHX0JBU0UgTVNHX0NNRF9LV0FUQ0hfQkFTRSAvLzB4ODAwMQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSBkZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwplbnVtIHsKICAgIC8qxr3MqL/Nu6e2y8/7z6IqLwogICAgLy9LV0FUQ0hfTVNHX1BMQVRGT1JNX0NMSUVOVCA9IEtXQVRDSF9NU0dfQkFTRSwKCiAgICAvL8no1sPA4AogICAgLyrK/b7dyc+0q7zkuPTJ6NbDLLWlzru31tbTKi8KICAgIC8vS1dBVENIX01TR19TRVRfVElNRVBFUklPRF9SRVEsCiAgICAvL0tXQVRDSF9NU0dfU0VUX1RJTUVQRVJJT0RfUlNQLAoKICAgIC8qsqa08rXnu7AqLwogICAgLy9LV0FUQ0hfTVNHX0NBTExfUkVRLAogICAgLy9LV0FUQ0hfTVNHX0NBTExfUlNQLAoKCVRSQUNLX01TR19JRF9TVEFSVCA9IEtXQVRDSF9NU0dfQkFTRSArIDEsCglUUkFDS19NU0dfSURfU0VSVkVSX1JFQ0VJVkUsCglUUkFDS19NU0dfSURfU0VSVkVSX1NFTkQsCglUUkFDS19NU0dfSURfU0xBVkVfU0VSVkVSX1JFQ0VJVkUsCglUUkFDS19NU0dfSURfU0xBVkVfU0VSVkVSX1NFTkQsCglUUkFDS19NU0dfSURfUkVQT1JUX1NFUlZFUl9SRUNFSVZFLAoJVFJBQ0tfTVNHX0lEX1JFUE9SVF9TRVJWRVJfU0VORCwKCVRSQUNLX01TR19JRF9HUFNfUE9XRVJPTl9SRVEsCglUUkFDS19NU0dfSURfR1BTX1BPV0VST0ZGX1JFUSwKCU1TR19JRF9HUFNfTk1FQV9HR0EsCglNU0dfSURfR1BTX05NRUFfR1NBLAoJTVNHX0lEX0dQU19OTUVBX0dTViwKCU1TR19JRF9HUFNfTk1FQV9STUMsCglNU0dfSURfR1BTX05NRUFfVlRHLAoJTVNHX0lEX0dQU19OTUVBX0FDQ1VSQUNZLAoJVFJBQ0tfTVNHX0lEX1VQTE9BRCwgICAvKraoyrHJz7GoKi8KCVRSQUNLX01TR19JRF9MS19USU1FX09VVCwgICAvKkxLs6zKsbzssuIqLwoJVFJBQ0tfTVNHX0lEX0xLX1RJTUVfUkVTRVRfTkVULCAvKkxLs6zKsdbY1sPN+MLnKi8KCVRSQUNLX01TR19TRVJWRVJfQ0hFQ0ssICAgLyrW97f+zvHN+MLnvOyy4iovCglUUkFDS19NU0dfV0VBVEhFUl9DSEVDSywgIC8qzOzG+LzssukqLwoJVFJBQ0tfTVNHX1NMQVZFX1NFUlZFUl9DSEVDSywgICAvKsqxvOS3/s7xxvfN+MLnvOyy4iovCglUUkFDS19NU0dfSURfQ1JfVElNRU9VVCwKCVRSQUNLX01TR19JRF9BR1BTX0NIRUNLLAoJVFJBQ0tfTVNHX0lEX1VQTE9BRF9NT0RFX09ORSwKCVRSQUNLX01TR19JRF9VUExPQURfTU9ERV9UV08sCglUUkFDS19NU0dfSURfVVBMT0FEX01PREVfVEhSRUUsCglUUkFDS19NU0dfSURfRU5DUllQVF9FUlIsCglUUkFDS19NU0dfSURfTE9HX1NBVkUsCglUUkFDS19NU0dfSURfU1RPUF9SRU1PVEVfSEVBUlRSQVRFLAoJVFJBQ0tfTVNHX0lEX0RFVl9VTkJJTl9USU1FX09VVCwKCVRSQUNLX01TR19JRF9HRVRfQVAsCglUUkFDS19NU0dfSURfUFBfRlJJRU5ELAoJVFJBQ0tfTVNHX0lEX0VORCA9IEtXQVRDSF9NU0dfQkFTRSArIDEwMCwKCS8q0tTJz8/7z6JJRNb30qrKx7j4d2F0Y2hfc3ZyxNqyv8/7z6LKudPDKi8KCS8q0tTPws/7z6JJRNb30qrKx7j4d2F0Y2hfc3Zy0+vG5Mv8vfizzLzkz/vPosq508MqLwogICAgLyoqKioqKioqKioqKioqKioqKioqKioqKirI/bv5zay0tM/7z6K907/aKioqKioqKioqKioqKioqKioqKioqKioqLwogICAgLyrK/b7dyc+0q7zkuPTJ6NbDo6zP4NOmyv2+3b3hubnQxc+ia3dhdGNoX3VwbG9hZF9pbmZvus1rd2F0Y2hfY29tbW9uX3Jlc3VsdCovCiAgICAvL0tXQVRDSF9NU0dfU0VUX1VQTE9BRF9SRVEsCiAgICAvL0tXQVRDSF9NU0dfU0VUX1VQTE9BRF9SU1AsCiAgICAvKtbQ0MS6xcLryejWw6Osz+DTpsr9vt294bm50MXPomt3YXRjaF9jZW50ZXJfaW5mb7rNa3dhdGNoX2NvbW1vbl9yZXN1bHQqLwoJS1dBVENIX01TR19TRVRfQ0VOVEVSX1JFUSwgICAgIC8vMDIKICAgIEtXQVRDSF9NU0dfU0VUX0NFTlRFUl9SU1AsCiAgICAvKr/Y1sbD3MLryejWw6Osz+DTpsr9vt294bm50MXPomt3YXRjaF9wd19pbmZvus1rd2F0Y2hfY29tbW9uX3Jlc3VsdCovCiAgICBLV0FUQ0hfTVNHX1NFVF9QV19SRVEsCiAgICBLV0FUQ0hfTVNHX1NFVF9QV19SU1AsCiAgICAvKrzgzP0otaXP8vH2zP0px+vH86Osz+DTpsr9vt294bm50MXPomt3YXRjaF9jb21tb25fcmVzdWx0oaPLtcP3OtbVtsvX1Lavu9iyptbQ0MS6xcLrKi8KICAgIEtXQVRDSF9NU0dfT1dMX1JFUSwKICAgIEtXQVRDSF9NU0dfT1dMX1JTUCwKICAgIC8qU09TusXC68no1sOjrM/g06bK/b7dveG5udDFz6Jrd2F0Y2hfc29zX2luZm+6zWt3YXRjaF9jb21tb25fcmVzdWx0Ki8KICAgIEtXQVRDSF9NU0dfU0VUX1NPU19SRVEsCiAgICBLV0FUQ0hfTVNHX1NFVF9TT1NfUlNQLAogICAgLyrT79HUus3Kscf4yejWw6Osz+DTpsr9vt294bm50MXPomt3YXRjaF9sel9pbmZvus1rd2F0Y2hfY29tbW9uX3Jlc3VsdCovCiAgICBLV0FUQ0hfTVNHX1NFVF9MWl9SRVEsICAgIC8vMTAKICAgIEtXQVRDSF9NU0dfU0VUX0xaX1JTUCwKICAgIC8qU09TtszQxbGovq+/qrnYo6zP4NOmyv2+3b3hubnQxc+ia3dhdGNoX3Nvc3Ntc19pbmZvus1rd2F0Y2hfY29tbW9uX3Jlc3VsdCovCiAgICBLV0FUQ0hfTVNHX1NFVF9TT1NTTVNfUkVRLAogICAgS1dBVENIX01TR19TRVRfU09TU01TX1JTUCwKICAgIC8qtc2157bM0MWxqL6vv6q52KOsz+DTpsr9vt294bm50MXPomt3YXRjaF9sb3diYXRfaW5mb7rNa3dhdGNoX2NvbW1vbl9yZXN1bHQqLwogICAgS1dBVENIX01TR19TRVRfTE9XQkFUX1JFUSwKICAgIEtXQVRDSF9NU0dfU0VUX0xPV0JBVF9SU1AsCiAgICAvKrDmsb6y6dGvo6zP4NOmyv2+3b3hubnQxc+ia3dhdGNoX3Zlcm5vX2luZm8qLwogICAgS1dBVENIX01TR19HRVRfVkVSTk9fUkVRLAogICAgS1dBVENIX01TR19HRVRfVkVSTk9fUlNQLAogICAgLyrBory0tqjOu9a4we6jrM/g06bK/b7dveG5udDFz6Jrd2F0Y2hfY29tbW9uX3Jlc3VsdKGjy7XD9zrBory0u73Q0dbVtstHUFPEo7/po6zBrND40ru2zsqxvOTSu9axtKbT2raozrvXtMysKi8KICAgIEtXQVRDSF9NU0dfQ1JfUkVRLAogICAgS1dBVENIX01TR19DUl9SU1AsCiAgICAvKrnYu/rWuMHuo6zP4NOmyv2+3b3hubnQxc+ia3dhdGNoX2NvbW1vbl9yZXN1bHShoyovCiAgICBLV0FUQ0hfTVNHX1BPV0VST0ZGX1JFUSwgIC8vMjAKICAgIEtXQVRDSF9NU0dfUE9XRVJPRkZfUlNQLAogICAgLyq8xrK9yrG85LbOyejWw6Osz+DTpsr9vt294bm50MXPomt3YXRjaF93YWxrdGltZV9pbmZvus1rd2F0Y2hfY29tbW9uX3Jlc3VsdCovCiAgICBLV0FUQ0hfTVNHX1NFVF9XQUxLVElNRV9SRVEsCiAgICBLV0FUQ0hfTVNHX1NFVF9XQUxLVElNRV9SU1AsCiAgICAvKretufa87LLiyrG85LbOyejWw6Osz+DTpsr9vt294bm50MXPomt3YXRjaF9zbGVlcHRpbWVfaW5mb7rNa3dhdGNoX2NvbW1vbl9yZXN1bHQqLwogICAgS1dBVENIX01TR19TRVRfU0xFRVBUSU1FX1JFUSwKICAgIEtXQVRDSF9NU0dfU0VUX1NMRUVQVElNRV9SU1AsCiAgICAvKsPitPLIxcqxvOS2zsno1sOjrM/g06bK/b7dveG5udDFz6Jrd2F0Y2hfc2lsZW5jZXRpbWVfaW5mb7rNa3dhdGNoX2NvbW1vbl9yZXN1bHQqLwogICAgS1dBVENIX01TR19TRVRfU0lMRU5DRVRJTUVfUkVRLAogICAgS1dBVENIX01TR19TRVRfU0lMRU5DRVRJTUVfUlNQLAogICAgLyrV0srWse2jrM/g06bK/b7dveG5udDFz6Jrd2F0Y2hfY29tbW9uX3Jlc3VsdKGjKi8KICAgIEtXQVRDSF9NU0dfRklORF9SRVEsCiAgICBLV0FUQ0hfTVNHX0ZJTkRfUlNQLAogICAgLyrE1tbTyejWw6Osz+DTpsr9vt294bm50MXPomt3YXRjaF9yZW1pbmRfaW5mb7rNa3dhdGNoX2NvbW1vbl9yZXN1bHQqLwogICAgS1dBVENIX01TR19TRVRfUkVNSU5EX1JFUSwgIC8vMzAKICAgIEtXQVRDSF9NU0dfU0VUX1JFTUlORF9SU1AsCiAgICAvKrXnu7Cxvsno1sOjrNPD09rJ6NbDx7A1uPbBqs+1yMujrLy0warPtcjLMS01o6zP4NOmyv2+3b3hubnQxc+ia3dhdGNoX3BoYl9pbmZvus1rd2F0Y2hfY29tbW9uX3Jlc3VsdCovCiAgICBLV0FUQ0hfTVNHX1NFVF9QSEJfUkVRLAogICAgS1dBVENIX01TR19TRVRfUEhCX1JTUCwKICAgIC8qtee7sLG+Msno1sOjrNPD09rJ6NbDuvM1uPbBqs+1yMujrLy0warPtcjLNi0xMKOsz+DTpsr9vt294bm50MXPomt3YXRjaF9waGJfaW5mb7rNa3dhdGNoX2NvbW1vbl9yZXN1bHQqLwogICAgS1dBVENIX01TR19TRVRfUEhCMl9SRVEsCiAgICBLV0FUQ0hfTVNHX1NFVF9QSEIyX1JTUCwKICAgIC8qttS9srmmxNyjrM/g06bK/b7dveG5udDFz6Jrd2F0Y2hfdGtfaW5mb7rNa3dhdGNoX2NvbW1vbl9yZXN1bHShowogICAgICDLtcP3OrjDz/vPotPDwLS3osvNvdPK1bW9tcTGvcyottS9ssr9vt21vdbVtsujrLjDz/vPosrHuvPMqLf+zvG3osvNuPhVSbXEKi8KICAgIEtXQVRDSF9NU0dfUkVDVl9US19SRVEsCiAgICBLV0FUQ0hfTVNHX1JFQ1ZfVEtfUlNQLAogICAgLyq21L2yuabE3KOsz+DTpsr9vt294bm50MXPomt3YXRjaF90a19pbmZvus1rd2F0Y2hfY29tbW9uX3Jlc3VsdKGjCiAgICAgIMu1w/c6uMPP+8+i08PAtLeiy83W1bbLttS9ssr9vt21vca9zKijrLjDz/vPosrHVUm3osvNtb2688yot/7O8bXEKi8KICAgIEtXQVRDSF9NU0dfU0VORF9US19SRVEsCiAgICBLV0FUQ0hfTVNHX1NFTkRfVEtfUlNQLAogICAgLyogt6K2zNDFo6zTw9Paytax7bf+zvHNqLn9xr3MqMq1z9a3orbM0MW5psTcLiAqLwogICAgS1dBVENIX01TR19TRU5EX1NNU19SRVEsICAgLy80MAogICAgS1dBVENIX01TR19TRU5EX1NNU19SU1AsCiAgICAvKiDP8srWse23/s7x16q3osa9zKi908rVtb21xLbM0MUuICovCiAgICBLV0FUQ0hfTVNHX0ZPUldBUkRfU01TX1JFUSwKICAgIEtXQVRDSF9NU0dfRk9SV0FSRF9TTVNfUlNQLAogICAgLyogU09TtPK157uwLiAqLwogICAgS1dBVENIX01TR19TT1NfQ0FMTF9SRVEsCiAgICBLV0FUQ0hfTVNHX1NPU19DQUxMX1JTUCwKICAgIC8qIMbVzai08rXnu7AuICovCiAgICBLV0FUQ0hfTVNHX05PUk1BTF9DQUxMX1JFUSwKICAgIEtXQVRDSF9NU0dfTk9STUFMX0NBTExfUlNQLAogICAgLyogu/HIoczsxvjQxc+iLiAqLwogICAgS1dBVENIX01TR19HRVRfV0VBVEhFUl9JTkZPX1JFUSwKICAgIEtXQVRDSF9NU0dfR0VUX1dFQVRIRVJfSU5GT19SU1AsCiAgICAvKiC9u8Xz09EuICovCiAgICBLV0FUQ0hfTVNHX01BS0VfRlJJRU5EU19SRVEsICAgLy81MAogICAgS1dBVENIX01TR19NQUtFX0ZSSUVORFNfUlNQLAogICAgLyogu/HIobCu0MTK/cG/LiAqLwogICAgS1dBVENIX01TR19SRURfSEVBUlRfUkVRLAogICAgS1dBVENIX01TR19SRURfSEVBUlRfUlNQLAoKCUtXQVRDSF9NU0dfU0VUX1BST0ZJTEVfUkVRLAoJS1dBVENIX01TR19TRVRfUFJPRklMRV9SU1AsCgoJLyogt6LLzVNPU8rCvP7NqNaqICovCiAgICBLV0FUQ0hfTVNHX0VYRUNfU09TX1JFUSwKICAgIEtXQVRDSF9NU0dfRVhFQ19TT1NfUlNQLAoKICAgIC8qILzGsr3Qxc+iu/HIoSAqLwogICAgS1dBVENIX01TR19HRVRfU1RFUF9SRVEsCiAgICBLV0FUQ0hfTVNHX0dFVF9TVEVQX1JTUCwKCgkvKiBHUFMgKi8KICAgIEtXQVRDSF9NU0dfR1BTX0dQRF9TRVRfUkVRLCAvLzYwCglLV0FUQ0hfTVNHX0dQU19QV1JfU0VUX1JFUSwKCUtXQVRDSF9NU0dfR1BTX0NPT1JESU5BVEVfU0VUX1JFUSwKCUtXQVRDSF9NU0dfR1BTX0lOUVVJUkVfUkVRLAoJS1dBVENIX01TR19HUFNfUlNQLAoKICAgIC8qIMrWse3XpcXEsqLJz7Sr1dXGrCAqLwoJLyogd2F0Y2hfc3Zyz/LK1rHtyeixuLei16XFxM/7z6Iszt6yzsr9ICovCglLV0FUQ0hfTVNHX1NOQVBfUkVRLAoJLyogytax7cnosbi72Li016XFxNDFz6Ist7W72Gt3YXRjaF9zbmFwX2luZm/A4NDNyv2+3SAqLwoJS1dBVENIX01TR19TTkFQX1JTUCwKCiAgICAvKiDP4Mast9bP7SAqLwoJLyogytax7cnosbjP8ndhdGNoX3N2creiy8231s/tz+DGrM/7z6Isz/vPosr9vt3M5c6qa3dhdGNoX3NoYXJlX3Bob3Rvc19pbmZvwODQzSAqLwoJS1dBVENIX01TR19TSEFSRV9QSE9UT1NfUkVRLAoJLyogd2F0Y2hfc3Zyu9i4tM/gxqy31s/tveG5+yAqLwoJS1dBVENIX01TR19TSEFSRV9QSE9UT1NfUlNQLAoKICAgIC8qILvWuLSz9rOnyejWwyAqLwoJLyogd2F0Y2hfc3Zyz/LK1rHtyeixuLeiy8271ri0s/azp8no1sPP+8+iLM7ess7K/SAqLwoJS1dBVENIX01TR19GQUNfUkVTRVRfUkVRLAoJLyogytax7cnosbi08Li0u9a4tLP2s6fWtNDQveG5+yAqLwoJS1dBVENIX01TR19GQUNfUkVTRVRfUlNQLCAgLy83MAoKICAgIC8qILaoyrG/qrnYu/oqLwogICAgLyogd2F0Y2hfc3Zyz/LK1rHtyeixuLeiy822qMqxv6q52Lv60MXPoixrd2F0Y2hfc3BvZl9pbmZvKi8KICAgIEtXQVRDSF9NU0dfU1BPRl9SRVEsCiAgICAvKsrWse3J6LG4t6LLzbaoyrG/qrnYu/rJ6NbDveG5+yBrd2F0Y2hfY29tbW9uX3Jlc3VsdCovCiAgICBLV0FUQ0hfTVNHX1NQT0ZfUlNQLAoKCS8qbW1pt6LLzc34wufH0Lu7o6zP4NOmyv2+3b3hubnQxc+ia3dhdGNoX3BkcF9zdGF0dXNfaW5mbyovCglLV0FUQ0hfTVNHX1BEUF9TVEFUVVNfSU5ELAoKICAgIC8qILmks8zEo8q9o7pHLVNlbnNvcrLiytQgKi8KCS8qIMrWse3J6LG4z/J3YXRjaF9zdnK3osvNuaSzzMSjyr1HLVNlbnNvcrLiytTP+8+iICovCglLV0FUQ0hfTVNHX0dTRU5TT1JfVEVTVF9SRVEsCgkvKiB3YXRjaF9zdnLP8srWse3J6LG4t7W72Ectc2Vuc29ysuLK1L3hufvQxc+iLLe1u9hrd2F0Y2hfZ3NlbnNvcl90ZXN0X2luZm/A4NDNyv2+3SAqLwoJS1dBVENIX01TR19HU0VOU09SX1RFU1RfUlNQLAoKICAgIC8qILmks8zEo8q9o7pHUFOy4srUICovCgkvKiDK1rHtyeixuM/yd2F0Y2hfc3Zyt6LLzbmks8zEo8q9R1BTsuLK1M/7z6IgKi8KCUtXQVRDSF9NU0dfR1BTX1RFU1RfUkVRLAoJLyogd2F0Y2hfc3Zyz/LK1rHtyeixuLe1u9hHUFOy4srUveG5+9DFz6Ist7W72Gt3YXRjaF9ncHNfdGVzdF9pbmZvwODQzcr9vt0gKi8KCUtXQVRDSF9NU0dfR1BTX1RFU1RfUlNQLAoKICAgIC8qILmks8zEo8q9o7pXaS1GabLiytQgKi8KCS8qIMrWse3J6LG4z/J3YXRjaF9zdnK3osvNuaSzzMSjyr1XaS1GabLiytTP+8+iICovCglLV0FUQ0hfTVNHX1dJRklfVEVTVF9SRVEsCgkvKiB3YXRjaF9zdnLP8srWse3J6LG4t7W72FdpLUZpsuLK1L3hufvQxc+iLLe1u9hrd2F0Y2hfd2lmaV90ZXN0X2luZm/A4NDNyv2+3SAqLwoJS1dBVENIX01TR19XSUZJX1RFU1RfUlNQLAoKCS8qILv51b62qM67o7pMQlPQxc+iyc+xqCAqLwoJLyog1N2yu8q508MgKi8KCUtXQVRDSF9NU0dfTEJTX1JFUSwKCS8qIE1vZGVtz/J3YXRjaF9zdnLXqreitcRMQlPQxc+iICovCglLV0FUQ0hfTVNHX0xCU19SU1AsCgoJLyp3YXRjaF9zdnIgt6LLzb371rnKudPDsqa6xcXMKi8KCUtXQVRDSF9NU0dfRElBTEVSX0ZPUkJJRERFTl9SRVEsCgoJLyogd2F0Y2hfc3Zyz/LK1rHtyeixuLeiy8278cihteez2M/gudjQxc+iz/vPoizO3rLOyv0gKi8KCUtXQVRDSF9NU0dfQkFUVEVSWV9JTkZPX1JFUSwKCgkvKiDK1rHtyeixuLTwuLS157PYz+C52M/7z6Isss7K/dPJa3dhdGNoX2JhdHRlcnlfaW5mb73hubm2qNLlICovCglLV0FUQ0hfTVNHX0JBVFRFUllfSU5GT19SU1AsCgoJLyogTU1Jt6LLzVBQvbvT0cfrx/MqLwoJS1dBVENIX1BQX0ZSSUVORF9SRVEgPSBLV0FUQ0hfTVNHX0xCU19SU1ArMTAwLAoJLyogd2F0Y2hfc3ZyIM2o1qpNTUm9u9PRveG5+yAqLwoJS1dBVENIX1BQX0ZSSUVORF9SU1AsCgoJLyq6w9PRuabE3KOsz+DTpsr9vt294bm50MXPomt3YXRjaF9mcmllbmRfdGtfaW5mb7rNa3dhdGNoX2NvbW1vbl9yZXN1bHShowogICAgICDLtcP3OrjDz/vPotPDwLS3osvNvdPK1bW9tcTGvcyottS9ssr9vt21vdbVtsujrLjDz/vPosrHuvPMqLf+zvG3osvNuPhVSbXEKi8KICAgIEtXQVRDSF9NU0dfUkVDVl9GUklFTkRfVEtfUkVRLAogICAgS1dBVENIX01TR19SRUNWX0ZSSUVORF9US19SU1AsCgoJLyq6w9PRuabE3KOsz+DTpsr9vt294bm50MXPomt3YXRjaF9mcmllbmRfdGtfaW5mb7rNa3dhdGNoX2NvbW1vbl9yZXN1bHShowogICAgICDLtcP3OrjDz/vPotPDwLS3osvN1tW2y7bUvbLK/b7dtb3Gvcyoo6y4w8/7z6LKx1VJt6LLzbW9uvPMqLf+zvG1xCovCiAgICBLV0FUQ0hfTVNHX1NFTkRfRlJJRU5EX1RLX1JFUSwKICAgIEtXQVRDSF9NU0dfU0VORF9GUklFTkRfVEtfUlNQLAoKCS8qbW1pt6LLzbrD09HJvrP9z/vPoiovCglLV0FUQ0hfTVNHX1BQX0ZSSUVORF9ERUxfUkVRLAoJLyp3YXRjaF9zdnIgt6LLzbrD09HJvrP9veG5+yovCglLV0FUQ0hfTVNHX1BQX0ZSSUVORF9ERUxfUlNQLAoKCS8qzqLBxL3TytXOxNfW0MXPoiovCiAgICBLV0FUQ0hfVEVYVF9NU0dfUkVDVl9SRVEsCiAgICBLV0FUQ0hfVEVYVF9NU0dfUkVDVl9SU1AsCgoJLyrQxMLK0arRubLiwb8qLwoJS1dBVENIX0hFQVJUUkFURV9NRUFTVVJFX1JFUSwgIC8qTU1JILeiy82y4sG/x+vH8yDP+8+iveG5uczlIGt3YXRjaF9oZWFydHJhdGVfbWVhc3VyZV9yZXEqLwogICAgS1dBVENIX0hFQVJUUkFURV9NRUFTVVJFX1JTUCwgIC8qd2F0Y2hfc3ZyILLiwb+94bn7t6LLzbj4TU1JIM/7z6K94bm5zOUga3dhdGNoX2hlYXJ0cmF0ZV9pbmZvKi8KCglLV0FUQ0hfUE9XRVJfU0FWRV9SRVEsICAvKndhdGNoX3N2ciC3osvNyqG158Sjyr0gz/vPor3hubnM5SBrd2F0Y2hfcG93ZXJfc2F2ZV9yZXEqLwoKCUtXQVRDSF9XSUZJX0FQX1JTUCwgIC8qvdPK3FdJRkkgyajD6L3hufsqLwoJS1dBVENIX01TR19XSUZJX09QRU5fUkVRLC8qV0lGSSC08r+qx+vH8yovCglLV0FUQ0hfTVNHX1dJRklfT1BFTl9SU1AsCgkvKsja1MbK08a1zai7sCovCglLV0FUQ0hfUFJZVkNBTExfUkVRLCAgLypBUFC2y8/yytax7beixvDK08a1zai7sMfrx/Mgd2F0Y2hfc3ZyIHRvIG1taSovCglLV0FUQ0hfUFJZVkNBTExfUlNQLCAgLyrK08a1zai7sMfrx/O94bn717TMrCBtbWkgdG8gd2F0Y2hfc3ZyKi8KCQoJS1dBVENIX1JZVkNBTExDQU5DRUxfUkVRLCAgLypBUFC2y8ihz/vP8srWse23osbwytPGtc2ou7DH68fzIHdhdGNoX3N2ciB0byBtbWkqLwoJCglLV0FUQ0hfUllWQ0FMTFJFRlVTRV9SRVEsICAvKkFQULbLvty++MrWse3K08a1zai7sMfrx/Mgd2F0Y2hfc3ZyIHRvIG1taSovCglLV0FUQ0hfUllWQ0FMTFJFRlVTRV9SU1AsICAvKsrWse2+3L3TYXBwtsvK08a1zai7sMfrx/MgbW1pIHRvIHdhdGNoX3N2ciovCgoJS1dBVENIX1dSWVZDQUxMX1JTUCwgIC8qytax7bbLz/JhcHC2y7eixvDK08a1zai7sMfrx/NtbWkgdG8gd2F0Y2hfc3ZyKi8KCUtXQVRDSF9XUllWQ0FMTF9SRVEsICAvKmFwcLvYuLTK1rHttsvK08a1zai7sMfrx/PXtMysd2F0Y2hfc3ZyIHRvIG1taSovCgoJS1dBVENIX1VQUllST09NQ09VTlRfUlNQLCAgLyrK1rHttsu9+LP2t7+85La8z/JhcHC2y8nPsai3v7zkyqPT4MjLyv0gbW1pIHRvIHdhdGNoX3N2ciovCgkKCUtXQVRDSF9SWUNPTkZJR19SRVEsICAvKrf+zvHG97bLyejWw8rWse3I2tTGc2RrIGxvZ7+qudggd2F0Y2hfc3ZyIHRvIG1taSovCgkKCUtXQVRDSF9DTE9DS19CSl9DSEFOR0UsCn07Ci8qz+zTpr3hufu07c7zwusqLwp0eXBlZGVmIGVudW0gewogICAgS1dBVENIX1JFVF9GQUlMID0gLTEsLyrKp7DcKi8KICAgIEtXQVRDSF9SRVRfT0sgPSAwLC8qs8m5piovCiAgICAvKrj5vt3Q6NKqzO2808bky/y07c7zwusqLwp9IGt3YXRjaF9yZXN1bHQ7CgovKs2o08PP7NOmveG5+8r9vt294bm5Ki8KdHlwZWRlZiBzdHJ1Y3QgewogICAgLyqyzrz7a3dhdGNoX3Jlc3VsdCovCiAgICBrd2F0Y2hfcmVzdWx0IHJlc3VsdDsKfSBrd2F0Y2hfY29tbW9uX3Jlc3VsdDsKCiNpZiAwCi8qyv2+3cnPtKu85Lj0yejWw9DFz6Is08PT2sno1sPW1bbLtqjKscnPsai1xMqxvOS85Lj0Ki8KdHlwZWRlZiBzdHJ1Y3QgewogICAgdW5zaWduZWQgaW50IHBlcmlvZDsvKrWlzrs6t9bW0yovCn0ga3dhdGNoX3VwbG9hZF9pbmZvOwojZW5kaWYKLyrW0NDEusXC68no1sPQxc+iLM2ouf24w8rWu/q6xb/J0tS3osvNtszQxda4we6horzgzP21yCovCnR5cGVkZWYgc3RydWN0IHsKICAgIGNoYXIgbnVtYmVyWzQ4XTsvKrXnu7C6xcLrKi8KfSBrd2F0Y2hfY2VudGVyX2luZm87CgovKr/Y1sbD3MLryejWw9DFz6Ist8fW0NDEusXC67eiy822zNDF1rjB7tDo0qrM7bzTw9zC6yovCnR5cGVkZWYgc3RydWN0IHsKICAgIGNoYXIgcGFzc3dvcmRbMzJdOy8qw9zC6yovCn0ga3dhdGNoX3B3X2luZm87CgovKlNPU7rFwuvJ6NbD0MXPoqOs1+624Mno1sMzuPZTT1O6xcLrKi8KdHlwZWRlZiBzdHJ1Y3QgewogICAgY2hhciBudW1iZXIxWzQ4XTsvKlNPU7Xnu7C6xcLrMSovCiAgICBjaGFyIG51bWJlcjJbNDhdOy8qU09Ttee7sLrFwusyKi8KICAgIGNoYXIgbnVtYmVyM1s0OF07LypTT1O157uwusXC6zMqLwp9IGt3YXRjaF9zb3NfaW5mbzsKCi8q0+/R1LrNyrHH+Mno1sPQxc+iLNPD09rJ6NbD1tW2y9Pv0dS6zcqxx/gqLwp0eXBlZGVmIHN0cnVjdCB7CiAgICB1bnNpZ25lZCBpbnQgbGFuZ3VnZTsvKtPv0dSjrDAt1tDOxKO7MS3Tos7EKi8KICAgIHVuc2lnbmVkIGludCB0aW1lem9uZTsvKsqxx/gqLwp9IGt3YXRjaF9sel9pbmZvOwoKLypTT1O2zNDFsai+r7+qudjJ6NbD0MXPoizJ6NbDsvrJ+lNPU7Govq+688rHt/HP8lNPU7rFwuu3osvNtszQxSovCnR5cGVkZWYgc3RydWN0IHsKICAgIHVuc2lnbmVkIGludCBvbm9mZjsvKr+qudijrDAtudix1aO7MS208r+qKi8KfSBrd2F0Y2hfc29zc21zX2luZm87Ci8qtc2157Govq+/qrnYyejWw9DFz6IsyejWw7L6yfq1zbXnsai+r7rzyse38c/y1tDQxLrFwuu3osvNtszQxSovCnR5cGVkZWYgc3RydWN0IHsKICAgIHVuc2lnbmVkIGludCBvbm9mZjsvKr+qudijrDAtudix1aO7MS208r+qKi8KfSBrd2F0Y2hfbG93YmF0X2luZm87CgovKtbVtsuw5rG+0MXPoizTw9Payc+0q7Dmsb7Qxc+iKi8KdHlwZWRlZiBzdHJ1Y3QgewogICAgY2hhciB2ZXJzaW9uWzEyOF07Lyqw5rG+0MXPoiovCn0ga3dhdGNoX3Zlcm5vX2luZm87Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICB1bnNpZ25lZCBjaGFyIGhvdXI7IC8qIDB+MjMgKi8KICAgIHVuc2lnbmVkIGNoYXIgbWluOyAgLyogMH41OSAqLwogICAgdW5zaWduZWQgY2hhciBzZWM7ICAvKiAwfjU5ICovCn0ga3dhdGNoX3RpbWU7Ci8qvMayvcqxvOS2zsno1sPQxc+io6zTw9PayejWw7zGsr208r+qtcTKsbzkts63ts6nLNfutuDJ6NbDM7j2Ki8KdHlwZWRlZiBzdHJ1Y3QgewogICAga3dhdGNoX3RpbWUgdGltZTFbMl07LyrKsbzkts4xo6wwLcbwyrzKsbzko7sxLb3hyvjKsbzkKi8KICAgIGt3YXRjaF90aW1lIHRpbWUyWzJdOy8qyrG85LbOMqOsMC3G8Mq8yrG85KO7MS294cr4yrG85CovCiAgICBrd2F0Y2hfdGltZSB0aW1lM1syXTsvKsqxvOS2zjOjrDAtxvDKvMqxvOSjuzEtveHK+MqxvOQqLwp9IGt3YXRjaF93YWxrdGltZV9pbmZvOwoKLyq3rbn2vOyy4sqxvOS2zsno1sPQxc+io6zTw9PayejWw7etufa87LLitcTKsbzkts63ts6nLNfutuDJ6NbDMbj2Ki8KdHlwZWRlZiBzdHJ1Y3QgewogICAga3dhdGNoX3RpbWUgdGltZVsyXTsvKsqxvOS2zqOsMC3G8Mq8yrG85KO7MS294cr4yrG85CovCn0ga3dhdGNoX3NsZWVwdGltZV9pbmZvOwoKLyrD4rTyyMXKsbzkts7J6NbD0MXPoqOs08PT2sno1sPD4rTyyMXKsbzkts63ts6nLNfutuDJ6NbDNLj2Ki8KdHlwZWRlZiBzdHJ1Y3QgewogICAga3dhdGNoX3RpbWUgdGltZTFbMl07LyrKsbzkts4xo6wwLcbwyrzKsbzko7sxLb3hyvjKsbzkKi8KICAgIGt3YXRjaF90aW1lIHRpbWUyWzJdOy8qyrG85LbOMqOsMC3G8Mq8yrG85KO7MS294cr4yrG85CovCiAgICBrd2F0Y2hfdGltZSB0aW1lM1syXTsvKsqxvOS2zjOjrDAtxvDKvMqxvOSjuzEtveHK+MqxvOQqLwogICAga3dhdGNoX3RpbWUgdGltZTRbMl07LyrKsbzkts40o6wwLcbwyrzKsbzko7sxLb3hyvjKsbzkKi8KfSBrd2F0Y2hfc2lsZW5jZXRpbWVfaW5mbzsKCi8qxNbW08no1sPQxc+io6zTw9PayejWw9bVtsvE1tbTLNfutuDJ6NbDM7j2Ki8KdHlwZWRlZiBzdHJ1Y3QgewogICAgc3RydWN0IHsKICAgICAgICBrd2F0Y2hfdGltZSB0aW1lOy8qyrG85CovCiAgICAgICAgdW5zaWduZWQgaW50IG9ub2ZmOy8qv6q52CwwLbnYsdWjuzEttPK/qiovCiAgICAgICAgdW5zaWduZWQgaW50IGZyZXE7LyrGtcLKKi8KCQl1bnNpZ25lZCBpbnQgZGF5czsgLyrX1Lao0uUqLwogICAgfSBhbGFybVszXTsKfSBrd2F0Y2hfcmVtaW5kX2luZm87CgovKtfUtq+/qrnYu/rJ6NbD0MXPoqOs08PT2sno1sPW1bbLxNbW0yzX7rbgyejWwzO49iovCnR5cGVkZWYgc3RydWN0IHsKCQlrd2F0Y2hfdGltZSB0aW1lOy8qyrG85CovCgkJdW5zaWduZWQgaW50IG9ub2ZmOy8qv6q52CwwLbnYsdWjuzEttPK/qiovCgkJdW5zaWduZWQgaW50IHR5cGU7Cn0ga3dhdGNoX2F1dG9fcG93ZXJvbmZmX2luZm87CgovKraoyrG/qrnYu/rJ6NbD0MXPoqOs08PT2sno1sO2qMqxv6q52Lv6Ki8KdHlwZWRlZiBzdHJ1Y3QKewogICAga3dhdGNoX3RpbWUgdGltZTsJLyrKsbzkKi8KICAgIHVuc2lnbmVkIGludCBvbm9mZjsvKr+qudgsMC252LHVo7sxLbTyv6oqLwogICAgdW5zaWduZWQgaW50IGZyZXE7LyrGtcLKKi8KICAgIHVuc2lnbmVkIGludCBkYXlzOyAvKtfUtqjS5SovCiAgICB1bnNpZ25lZCBpbnQgc3BvZjsgLyowzqq/qrv6IDHOqrnYu/oqLwp9IGt3YXRjaF9zcG9mX2luZm87CgoKCgoKLyq157uwsb7J6NbD0MXPoqOs08PT2sno1sPW1bbLtee7sLG+LMO/tM7X7rbgyejWwzW49iovCnR5cGVkZWYgc3RydWN0IHsKICAgIGludCBpbmRleDsKICAgIHN0cnVjdCB7CiAgICAgICAgY2hhciBudW1iZXJbNDhdOy8qtee7sLrFwusqLwogICAgICAgIGNoYXIgbmFtZVsxMjhdOy8q0NXD+yovCiAgICB9IGNvbnRhY3RbNV07Cn0ga3dhdGNoX3BoYl9pbmZvOwoKLyq21L2yyv2+3dDFz6IqLwp0eXBlZGVmIHN0cnVjdCB7CgljaGFyIGNvbnRhY3RfbnVtWzIwXTsgLypBUFDBqs+1yMu6xcLrKi8KCXVuc2lnbmVkIGludCB4X3R5cGU7Lyqyzsr9eM6qMLT6se21pcHEICB4zqoxtPqx7ci6wcTP+8+iIHjOqjK0+rHtusPT0c/7z6IqLwogICAgdW5zaWduZWQgaW50IHR5cGU7LyrS9Ma1yv2+3bjxyr2jrDAtse3KvkFNUqO7xuTL/LT9wKnVuSAgMHhmZjqx7cq+zqrOxNfW0MXPoiovCiAgICB1bnNpZ25lZCBpbnQgZGF0YWxlbjsvKtL0xrXK/b7ds6S2yCovCiAgICBjaGFyIGZwYXRoWzI1Nl07ICAgICAvKtL0xrXK/b7dzsS8/sK3vrYqLwp9IGt3YXRjaF90a19pbmZvOwoKCi8qILWlz/Lx9sz9tcTH68fzyv2+3SAqLwp0eXBlZGVmIHN0cnVjdCB7CiAgICBjaGFyIG51bWJlcls0OF07Lyq1pc/y8fbM/brFwusqLwp9IGt3YXRjaF9vd2xfaW5mbzsKCi8qvMayvdDFz6Is08PT2rvYuLTJz7LjsunRr7K9yv22r9f3Ki8KdHlwZWRlZiBzdHJ1Y3QgewogICAgbG9uZyBzdGVwczsgICAvKrK9yv3Qxc+iKi8KICAgIGNoYXIgaXNvcGVuOyAvKjCx7cq+udix1SAxse3KvrTyv6oqLwp9IGt3YXRjaF9wZWRvbWV0ZXJfaW5mbzsKCnR5cGVkZWYgc3RydWN0IHsKICAgIGludCAgbnVtY250OyAgICAgICAgICAgICAgLyogytW3orrFwuu49sr9o6y3osvNzqogMX41oaO908rVucy2qM6qMSAqLwogICAgY2hhciBudW1iZXJbNSo0MCArIDFdOyAgICAvKiDK1beiusXC66OsyLq3orbguPa6xcLrvOTS1CcsJ9f3zqq31rj0o6y908rVucy2qM6qMbj2usXC6yAqLwogICAgdW5zaWduZWQgY2hhciBkYXRhWzEwKjE1MyoyICsgMV07LyogytW3orbM0MXE2sjdo6y3osvN1+6089ans9YxNzajrL3TytXX7rTz1qez1iAxNTMwo6xHQksgseDC6yAqLwp9IGt3YXRjaF9zbmRfc21zX2luZm87Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBpbnQgIGNhbGxfdHlwZTsgLyogserKtrKmtPLA4NDNo6wwzqrG1c2otee7sKOsuvPQ+NDox/Ox5Lj8v8nAqbPkICovCiAgICBjaGFyIG51bWJlcls0OF07Lyog1f2zo7KmtPK1xLrFwusgKi8KfSBrd2F0Y2hfY2FsbF9pbmZvOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgaW50IHdlYXRoZXJfdHlwZTsgICAgLyogzOzG+MDg0M2jrMjn0+qhotGpoaLH57XIICAqLwogICAgaW50IGN1cl90ZW1wZXJhdHVyZTsgLyogtbHHsM7CtsggKi8KICAgIGludCBtaW5fdGVtcGVyYXR1cmU7IC8qtc3OwiovCiAgICBpbnQgbWF4X3RlbXBlcmF0dXJlOyAvKrjfzsIqLwogICAgY2hhciB6b25lWzY0XTsgICAgICAgLyq12Mf4s8fK0MP7s8YqLwoJY2hhciBkYXRlWzIwXTsgLyrI1cbaKi8KCWNoYXIgdGltZVsyMF07IC8qyrG85CovCn0ga3dhdGNoX3dlYXRoZXJfaW5mbzsKCnR5cGVkZWYgc3RydWN0IHsKICAgIGludCB0eXBlOyAvKiAxLL27xfPT0dOm08PG9Lavo6wwo6y9u8Xz09HTptPDveHK+CAgKi8KfSBrd2F0Y2hfbWFrZV9mcmllbmRzX2luZm87Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBpbnQgY291bnRzOyAvKiCwrtDEyv3BvyAgKi8KfSBrd2F0Y2hfcmVkX2hlYXJ0X2luZm87Cgp0eXBlZGVmIHN0cnVjdHsKCiBpbnQgdHlwZTsgIC8qMS7P7MHlvLDV8LavICAyLr32z+zB5SAzLr321fC2ryA0Lr6y0vQqLwoKfWt3YXRjaF9wcm9maWxlX2luZm87CgoKLyogytax7cnosbi72Li016XFxNDFz6IgKi8KdHlwZWRlZiBzdHJ1Y3R7CiAgICAvKiDWtNDQveG5+yAqLwogICAga3dhdGNoX2NvbW1vbl9yZXN1bHQgcmVzdWx0OwogICAgLyog16XFxLXEzbzGrMP7s8bCt762ICovCiAgICBjaGFyIGZpbGVfbmFtZVsyNTZdOwp9a3dhdGNoX3NuYXBfaW5mbzsKCi8qIMrWse3J6LG4z/J3YXRjaF9zdnK3osvNt9bP7c/gxqzP+8+iICovCnR5cGVkZWYgc3RydWN0ewogICAgLyogt9bP7bXEzbzGrMP7s8bCt762ICovCiAgICBjaGFyIGZpbGVfbmFtZVsyNTZdOwp9a3dhdGNoX3NoYXJlX3Bob3Rvc19pbmZvOwoKLyogd2F0Y2hfc3Zyz/LK1rHtyeixuLe1u9hHLXNlbnNvcrLiytS94bn70MXPoiAqLwp0eXBlZGVmIHN0cnVjdHsKICAgIC8qINa00NC94bn7ICovCiAgICBrd2F0Y2hfY29tbW9uX3Jlc3VsdCByZXN1bHQ7CiAgICAvKiBHLVNlbnNvcrLiytS94bn70MXPoqOsyOfI/dbhyv2+3bXIICovCiAgICBjaGFyIGdzZW5zb3JfaW5mb1syNTZdOwp9a3dhdGNoX2dzZW5zb3JfdGVzdF9pbmZvOwoKLyogd2F0Y2hfc3Zyz/LK1rHtyeixuLe1u9hHUFOy4srUveG5+9DFz6IgKi8KdHlwZWRlZiBzdHJ1Y3R7CiAgICAvKiDWtNDQveG5+yAqLwogICAga3dhdGNoX2NvbW1vbl9yZXN1bHQgcmVzdWx0OwogICAgLyogR1BTsuLK1L3hufvQxc+io6zI587A0MfK/cG/oaLQxbrFx7+2yLXIICovCiAgICBjaGFyIGdwc19pbmZvWzI1Nl07Cn1rd2F0Y2hfZ3BzX3Rlc3RfaW5mbzsKCi8qIHdhdGNoX3N2cs/yytax7cnosbi3tbvYV2ktRmmy4srUveG5+9DFz6IgKi8KdHlwZWRlZiBzdHJ1Y3R7CiAgICAvKiDWtNDQveG5+yAqLwogICAga3dhdGNoX2NvbW1vbl9yZXN1bHQgcmVzdWx0OwogICAgLyogV2ktRmmy4srUveG5+9DFz6KjrMjnyMi148P7s8ahotDFusXHv7bItcggKi8KICAgIGNoYXIgd2lmaV9pbmZvWzI1Nl07Cn1rd2F0Y2hfd2lmaV90ZXN0X2luZm87CgojZGVmaW5lIFdPUktfVElNRV9UT1RBTCAgIDM2CiNkZWZpbmUgR1BTX1dPUktfVElNRV9TVEFSVCAwCiNkZWZpbmUgU0xFRVBfVElNRV9TVEFSVCAgICAxMgojZGVmaW5lIFdBTEtfVElNRV9TVEFSVCAgICAyMAojZGVmaW5lIFNJTEVOQ0VfVElNRV9TVEFSVCAyOAoKdHlwZWRlZiBzdHJ1Y3QKewoJdW5zaWduZWQgaW50IHN0YXJ0X3RpbWVbV09SS19USU1FX1RPVEFMXTsKCXVuc2lnbmVkIGludCBlbmRfdGltZVtXT1JLX1RJTUVfVE9UQUxdOwp9d29ya190aW1lX3N0cnVjdDsKCgovKk1NSbeiy83N+MLnx9C7uyovCnR5cGVkZWYgc3RydWN0ewkKCWludCByZXN1bHQ7LyoxLLyku+47MCzIpbyku+4qLwp9a3dhdGNoX3BkcF9zdGF0dXNfaW5mbzsKCi8qIE1vZGVtz/J3YXRjaF9zdnLXqreitcRMQlPQxc+iICovCnR5cGVkZWYgc3RydWN0ewogICAgLyog1rTQ0L3hufsgKi8KICAgIGt3YXRjaF9jb21tb25fcmVzdWx0IHJlc3VsdDsKICAgIC8qIE1vZGVtz/J3YXRjaF9zdnLXqreitcRMQlPQxc+iICovCiAgICBjaGFyIGxic19pbmZvWzEyODBdOyAvKiBMQlMgQVS3tbvYtcTK/b7dsaO05tTauMOzydSxseTBv9bQICovCn1rd2F0Y2hfbGJzX2luZm87CgoKLyp3YXRjaF9zdnK3osvNsqa6xcXMv6q52Mfrx/MqLwp0eXBlZGVmIHN0cnVjdHsKICAgIC8qINa00NC94bn7ICovCiAgICB1bnNpZ25lZCBpbnQgb25vZmY7ICAvKjA6vfvWubKmusXFzCAgMTq/qsb0sqa6xcXMKi8KfWt3YXRjaF9kaWFsZXJfaW5mbzsKCnR5cGVkZWYgc3RydWN0ewogICAgLyog1rTQ0L3hufsgKi8KICAgIGt3YXRjaF9jb21tb25fcmVzdWx0IHJlc3VsdDsKCS8qIHR5cGUmMHgxID09IDEgOsrHttRLV0FUQ0hfTVNHX0JBVFRFUllfSU5GT19SRVHP+8+itcTP7NOmt7W72Mr9vt07IHZvbHRhZ2UscGVyY2VudGFnZdPQ0KcgKi8KICAgIC8qIHR5cGUmMHgyID09IDEgOrT6se2z5LXnxvey5cjroaKwzrP2oaK157Pk0tHC+sqx1ve2r8/yd2F0Y2hfc3Zyt6LLzbXEzajWqjsgYmF0dGVyeV9mdWxsLCBjaGFyZ2VyX3BsdWdpbtPQ0KcgKi8KICAgIGludCB0eXBlOyAKICAgIGludCB2b2x0YWdlOyAvKiC157PYtefRuaOstaXOu7rBt/wgKi8KICAgIGludCBwZXJjZW50YWdlOyAvKiC158G/sNm31rHIICovCiAgICBpbnQgYmF0dGVyeV9mdWxsOyAvKiC157PY0tGz5ML6zqoxo6zOtLPkwvrOqjAgKi8KICAgIGludCBjaGFyZ2VyX3BsdWdpbjsgLyogzt7Qp9a1zqotMSwgsuXI61VTQta1zqoxLCCyprP2VVNC1rXOqjAgKi8KfWt3YXRjaF9iYXR0ZXJ5X2luZm87CgoKCi8qTU1Jz/J3YXRjaF9zdnK3osvNvbvT0cfrx/MqLwp0eXBlZGVmIHN0cnVjdHsKICAgIC8qINa00NC94bn7ICovCiAgICB1bnNpZ25lZCBpbnQgb25vZmY7ICAvKjA6vbvT0b+qxvQgIDE6vbvT0bnYsdUqLwp9a3dhdGNoX3BwX3JlcV9pbmZvOwoKLypBUFDBqs+1yMvQxc+iKi8KdHlwZWRlZiBzdHJ1Y3R7CglpbnQgbmV3X21zZzsgICAvKjAg0tG2wSAgMTrOtLbBKi8KCWNoYXIgZnJpZW5kX2RpZFsyMF07IC8qQVBQwarPtcjLusXC6yovCgljaGFyIGZyaWVuZF9uYW1lWzMwXTsvKkFQUMGqz7XIy9DVw/sqLwoJY2hhciBmcmllbmRfbnVtWzIwXTsgLypBUFDBqs+1yMu6xcLrKi8KfWt3YXRjaF9wcF9pbmZvOwoKLyp3YXRjaF9zdnLP8k1NSbeiy829u9PRveG5+yovCnR5cGVkZWYgc3RydWN0ewogICAgLyog1rTQ0L3hufsgKi8KICAgIHVuc2lnbmVkIGludCByc3Q7ICAvKjA6vbvT0bPJuaYgIDE6vbvT0cqnsNwgIDI6usPT0dbYuLQgIDM6yb6z/brD09EqLwoJY2hhciBmcmllbmRfZGlkWzIwXTsgLyq6w9PRyeixuElEKi8KCWNoYXIgZnJpZW5kX251bVsyMF07IC8qQVBQwarPtcjLusXC6yovCgljaGFyIGZyaWVuZF9uYW1lWzMwXTsvKkFQUMGqz7XIy9DVw/sqLwp9a3dhdGNoX3BwX3JzcF9pbmZvOwoKLyq6w9PRttS9ssr9vt3Qxc+iKi8KdHlwZWRlZiBzdHJ1Y3QgewoJY2hhciBkaWRbMjBdOyAgICAgICAgLyq6w9PRSUQqLwogICAgdW5zaWduZWQgaW50IHR5cGU7LyrS9Ma1yv2+3bjxyr2jrDAtse3KvkFNUqO7xuTL/LT9wKnVuSovCiAgICB1bnNpZ25lZCBpbnQgZGF0YWxlbjsvKtL0xrXK/b7ds6S2yCovCiAgICBjaGFyIGZwYXRoWzI1Nl07ICAgICAvKtL0xrXK/b7dzsS8/sK3vrYqLwp9IGt3YXRjaF9mcmllbmRfdGtfaW5mbzsKCi8qusPT0cm+s/0qLwp0eXBlZGVmIHN0cnVjdHsKICAgIC8qINa00NC94bn7ICovCiAgICB1bnNpZ25lZCBpbnQgcnN0OyAgLyrTw9PausPT0cm+s/272Li0IDA6yb6z/bPJuaYgIDE6yb6z/cqnsNwgIDI6zai5/WJibGlzdNCt0unJvrP9usPT0SovCgljaGFyIGZyaWVuZF9kaWRbMjBdOyAvKrrD09HJ6LG4SUQqLwoJY2hhciBmcmllbmRfbnVtWzIwXTsgLypBUFDBqs+1yMu6xcLrKi8KfWt3YXRjaF9wcF9kZWxfaW5mbzsKCi8qQVBQwarPtcjL0MXPoiovCnR5cGVkZWYgc3RydWN0ewoJaW50IG5ld19tc2c7ICAgLyowINLRtsEgIDE6zrS2wSovCgljaGFyIGNvbnRhY3RfbnVtWzIwXTsgLypBUFDBqs+1yMu6xcLrKi8KCWNoYXIgY29udGFjdF9uYW1lWzMwXTsvKkFQUMGqz7XIy9DVw/sqLwp9YXBwY29udGFjdF9pbmZvOwoKLyrQxMLK0arRuSovCnR5cGVkZWYgc3RydWN0ewoJaW50IHJzdDsgICAvKjAg1f2zo7Liwb8gIC0xOs3RwOsgIC0yOsbky/zKp7DcKi8KCXVuc2lnbmVkIGludCBoZWFydHJhdGU7Cgl1bnNpZ25lZCBpbnQgYmxvb2RwcmVzc3VyZV9sb3c7Cgl1bnNpZ25lZCBpbnQgYmxvb2RwcmVzc3VyZV9oaWdoOwp9a3dhdGNoX2hlYXJ0cmF0ZV9pbmZvOwoKdHlwZWRlZiBzdHJ1Y3R7Cgl1bnNpZ25lZCBpbnQgZW5hYmxlOyAgLyoxtPK/qrLiwb8gIDC52LHVsuLBvyovCn1rd2F0Y2hfaGVhcnRyYXRlX21lYXN1cmVfcmVxOwoKdHlwZWRlZiBzdHJ1Y3R7Cgl1bnNpZ25lZCBpbnQgZW5hYmxlOyAgLyoxvfjI68qhtefEo8q9ICAwzcuz9sqhtefEo8q9Ki8KfWt3YXRjaF9wb3dlcl9zYXZlX3JlcTsKCi8qd2F0Y2hfc3ZyyNrUxsrTxrXNqLuwKi8KLy9hcHC3osbwytPGtcHEzOwKLy9LV0FUQ0hfUFJZVkNBTExfUkVRCnR5cGVkZWYgc3RydWN0ewogICAgdW5zaWduZWQgaW50IHR5cGU7ICAvKjA6taXBxCAgMTrIusHEKi8KCWNoYXIgbnVtWzMwXTsgLyq3osbwwcTM7NPDu6e6xcLrKi8KCWNoYXIgcm9vbV9udW1bMzBdOyAvKreixvDIusHEt7+85LrFKi8KfWt3YXRjaF9wcnl2Y2FsbF9pbmZvOwovL2FwcLeixvDK08a1wcTM7CDK1rHtu9i4tNe0zKwKLy9LV0FUQ0hfUFJZVkNBTExfUlNQCnR5cGVkZWYgc3RydWN0ewogICAgdW5zaWduZWQgaW50IHN0YXR1czsgIC8qMCAg1qez1rWxx7DNqLuwx+vH8yAgIDEgINX91NrNqLuw1tCjrLK71qez1rWxx7DNqLuwx+vH8yovCn1rd2F0Y2hfcHJ5dmNhbGxfcmVxOwoKLy/K1rHtt6LG8MrTxrXBxMzsCi8vS1dBVENIX1dSWVZDQUxMX1JTUAp0eXBlZGVmIHN0cnVjdHsKICAgIHVuc2lnbmVkIGludCB0eXBlOyAgLyowOrWlwcQgIDE6yLrBxCovCgljaGFyIG51bVszMF07IC8qt6LG8MHEzOzTw7unusXC6yovCgljaGFyIHJvb21fbnVtWzMwXTsgLyq3osbwwcTM7Le/vOS6xSovCn1rd2F0Y2hfd3J5dmNhbGxfaW5mbzsKLy/K1rHtt6LG8MrTxrXBxMzsIGFwcLbLu9i4tNe0zKwKLy9LV0FUQ0hfV1JZVkNBTExfUkVRCnR5cGVkZWYgc3RydWN0ewogICAgdW5zaWduZWQgaW50IHN0YXR1czsgIC8qMCAgyqew3CAgMSAgs8m5piAqLwp9a3dhdGNoX3dyeXZjYWxsX3JlcTsKCi8vytax7b34s/a3v7zkyc+xqGFwcLbLCi8vS1dBVENIX1VQUllST09NQ09VTlRfUlNQCnR5cGVkZWYgc3RydWN0ewogICAgdW5zaWduZWQgaW50IHR5cGU7ICAvKjA6taXBxCAgMTrIusHEKi8KCXVuc2lnbmVkIGludCBjb3VudDsgLyq3v7zkyMvK/SovCgljaGFyIHJvb21fbnVtWzMwXTsgLyq3osbwwcTM7Le/vOS6xSovCn1rd2F0Y2hfdXByeXJvb21jb3VudF9pbmZvOwoKLy/K1rHtL2FwcL7cvdMKLy9LV0FUQ0hfUllWQ0FMTFJFRlVTRV9SU1AKdHlwZWRlZiBzdHJ1Y3R7CiAgICB1bnNpZ25lZCBpbnQgdHlwZTsgIC8qMDq1pcHEICAxOsi6wcQqLwoJY2hhciBudW1bMzBdOyAvKreixvDBxMzs08O7p7rFwusqLwoJY2hhciByb29tX251bVszMF07IC8qt6LG8MHEzOy3v7zkusUqLwp9a3dhdGNoX3J5dmNhbGxyZWZ1c2VfaW5mbzsKCi8vIGxvZyDF5NbDCi8vS1dBVENIX1JZQ09ORklHX1JFUQp0eXBlZGVmIHN0cnVjdHsKCWNoYXIgY29uZmlnWzMwXTsgLyrA/aO6UllDT05GSUcgPSAwLTEtMCDI1da+v6q52KO6MKO6udggIDG/qiAgxKzIz7+qIMjV1r7OxLz+tPPQoaO6taXOu6O6TSAgxKzIzzFNICDI1da+yc+xqLHqyrajujCjurK7yc+xqCAgMcnPsaggIMSsyM+yu8nPsagqLwp9a3dhdGNoX3J5Y29uZmlnX2luZm87CgpzdHJ1Y3QgcmVzcF9oZWFkZXIvL7Gjs9bP4NOmzbfQxc+iCnsKICAgIGludCBzdGF0dXNfY29kZTsvL0hUVFAvMS4xICcyMDAnIE9LCiAgICBjaGFyIGNvbnRlbnRfdHlwZVsxMjhdOy8vQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9nemlwCiAgICBsb25nIGNvbnRlbnRfbGVuZ3RoOy8vQ29udGVudC1MZW5ndGg6IDExNjgzMDc5CiAgICBjaGFyIGZpbGVfbmFtZVsyNTZdOwp9OwoKdHlwZWRlZiBzdHJ1Y3R7CgljaGFyIG5hbWVbMjBdOwogICAgaW50IG1vbnRoOyAgICAgICAgIC8vMDF+MTIKICAgIGludCBkYXk7ICAgICAgICAgICAvLzAxfjMxIAogICAgaW50IGRheWZsb3c7CglpbnQgZGF5Zmxvd19hbHJlYWR5OyAKCWludCBkYXlmbG93X29uOyAgCglpbnQgbW9udGhmbG93OyAKCWludCBtb250aGZsb3dfYWxyZWFkeTsKCWludCBtb250aGZsb3dfb247CglpbnQgbW9udGhjb3VudDsKCWludCBjb3VudGZsb3c7Cn1ud2Zsb3dfaW5mbzsKCnR5cGVkZWYgc3RydWN0ewogICAgaW50IHllYXI7ICAgICAgICAKICAgIGludCBtb250aDsgICAgICAgICAvLzAxfjEyCiAgICBpbnQgZGF5OyAgICAgICAgICAgLy8wMX4zMSAKICAgIGludCBob3VyOyAgICAgICAgIAogICAgaW50IG1pbnV0ZTsgICAgICAgICAKICAgIGludCBzZWNvbmQ7ICAgICAgICAgICAKfW53cHdydGltZV9pbmZvOwoKCnR5cGVkZWYgZW51bSB7CglTSlRDX1RJTUVSX0lEXzA9MCwgIC8qxKPKvdK7tqjKscnPsagqLwoJU0pUQ19USU1FUl9JRF8xLCAgICAvKrK7tPhHUFO2qMqxyc+xqCovCglTSlRDX1RJTUVSX0lEXzIsICAgIC8qbGuzrMqxvOyy4iovCglTSlRDX1RJTUVSX0lEXzMsICAgIC8qzfjC58GsvdO87LLiKi8KCVNKVENfVElNRVJfSURfNCwgICAgLyrM7Mb4uPzQwiovCglTSlRDX1RJTUVSX0lEXzUsICAgIC8qTEu12tK7tM7R08qxt6LLzSovCglTSlRDX1RJTUVSX0lEXzYsICAgIC8qyrG85Lf+zvHG9834wue87LLiKi8KCVNKVENfVElNRVJfSURfNywgICAgLyrR07PZt6LLzdPv0vQqLwoJU0pUQ19USU1FUl9JRF84LCAgICAvKruwt9Gy6dGvKi8KCVNKVENfVElNRVJfSURfOSwgICAvKkNS1rjB7rOsyrEqLwoJU0pUQ19USU1FUl9JRF8xMCwgIC8qVEtRKi8KCVNKVENfVElNRVJfSURfMTEsICAvKsr9vt3Jz7SrKi8KCVNKVENfVElNRVJfSURfMTIsICAvKsXk1sPJz7GoKi8KCVNKVENfVElNRVJfSURfMTMsICAvKrXNteexqL6vKi8KCVNKVENfVElNRVJfSURfMTQsICAvKsX2xfa6w9PRx+vH8yovCglTSlRDX1RJTUVSX0lEXzE1LCAgLypMS7zkuPS0psDtKi8gCglTSlRDX1RJTUVSX0lEXzE2LCAgLyq808PcKi8KCVNKVENfVElNRVJfSURfMTcsICAvKtHTyrG52Lv6Ki8KCVNKVENfVElNRVJfSURfMTgsICAvKkFHUFMqLwoJU0pUQ19USU1FUl9JRF8xOSwgIC8qvNPD3LP2tO20psDtKi8KCVNKVENfVElNRVJfSURfMjAsICAvKrbM0MXXqreiKi8KCVNKVENfVElNRVJfSURfMjEsICAvKsSsyM+2qMqxv6q52Lv6Ki8KCVNKVENfVElNRVJfSURfMjIsICAvKrvxyKHQxMLKyv2+3SovCglTSlRDX1RJTUVSX0lEXzIzLCAgLyq7u7+oveKw87OsyrEqLwoJU0pUQ19USU1FUl9JRF8yNCwgIC8qV0lGScvRy/cqLwoJU0pUQ19USU1FUl9JRF8yNSwgIC8qc2VuZCBBR1BTKi8KCVNKVENfVElNRVJfSURfMjYsCglTSlRDX1RJTUVSX0lEXzI3LAoJU0pUQ19USU1FUl9JRF8yOCwKCVNKVENfVElNRVJfSURfMjksCglTSlRDX1RJTUVSX0lEXzMwLAp9dGltZXJfaWQ7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgICAgICAgICAgICAgR2xvYmFsIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCgojZW5kaWYgLypfS1dBVENIX01TR19IKi8KCg==