LyoKICogTG9jYWxlIGRlZmluaXRpb25zIGZvciBIZWJyZXcKICoKICogQ29weXJpZ2h0IDIwMDIgQWxleGFuZHJlIEp1bGxpYXJkIGZvciBDb2RlV2VhdmVycwogKiBDb3B5cmlnaHQgMjAwMyBTaGFjaGFyIFNoZW1lc2gKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKI3ByYWdtYSBjb2RlX3BhZ2UoMTI1NSkKClNUUklOR1RBQkxFIExBTkdVQUdFIExBTkdfSEVCUkVXLCBTVUJMQU5HX0RFRkFVTFQKewogIExPQ0FMRV9GT05UU0lHTkFUVVJFIEwiXHgxOGFiXHg4MDAwXHgzOGNiXHgxMDAwXHgwMDAwXHgwMDAwXHgwMDAwXHgwODAwXHgwMDIwXHgwMDAwXHgwMDAwXHgwMDIwXHgwMDIwXHgwMDAwXHgwMDAwXHgwMDIwIgogIExPQ0FMRV9JQ0FMRU5EQVJUWVBFICIxIgogIExPQ0FMRV9JQ0VOVFVSWSAiMSIKICBMT0NBTEVfSUNPVU5UUlkgIjk3MiIKICBMT0NBTEVfSUNVUlJESUdJVFMgIjIiCiAgTE9DQUxFX0lDVVJSRU5DWSAiMiIKICBMT0NBTEVfSURBVEUgIjEiCiAgTE9DQUxFX0lEQVlMWkVSTyAiMSIKICBMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UgIjEyNTUiCiAgTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UgIjg2MiIKICBMT0NBTEVfSURFRkFVTFRDT1VOVFJZICI5NzIiCiAgTE9DQUxFX0lERUZBVUxURUJDRElDQ09ERVBBR0UgIjUwMCIKICBMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSAiMDQwZCIKICBMT0NBTEVfSURFRkFVTFRNQUNDT0RFUEFHRSAiMTAwMDUiCiAgTE9DQUxFX0lERUZBVUxUVU5JWENPREVQQUdFICIyODU5OCIKICBMT0NBTEVfSURJR0lUUyAiMiIKICBMT0NBTEVfSURJR0lUU1VCU1RJVFVUSU9OICIxIgogIExPQ0FMRV9JRklSU1REQVlPRldFRUsgIjYiCiAgTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIgIjAiCiAgTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUyAiMiIKICBMT0NBTEVfSUxBTkdVQUdFICIwNDBkIgogIExPQ0FMRV9JTERBVEUgIjEiCiAgTE9DQUxFX0lMWkVSTyAiMCIKICBMT0NBTEVfSU1FQVNVUkUgIjAiCiAgTE9DQUxFX0lNT05MWkVSTyAiMSIKICBMT0NBTEVfSU5FR0NVUlIgIjIiCiAgTE9DQUxFX0lORUdOVU1CRVIgIjEiCiAgTE9DQUxFX0lORUdTRVBCWVNQQUNFICIwIgogIExPQ0FMRV9JTkVHU0lHTlBPU04gIjQiCiAgTE9DQUxFX0lORUdTWU1QUkVDRURFUyAiMSIKICBMT0NBTEVfSU5FVVRSQUwgIjAiCiAgTE9DQUxFX0lPUFRJT05BTENBTEVOREFSICI4IgogIExPQ0FMRV9JUEFQRVJTSVpFICI5IgogIExPQ0FMRV9JUE9TU0VQQllTUEFDRSAiMSIKICBMT0NBTEVfSVBPU1NJR05QT1NOICI0IgogIExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMgIjEiCiAgTE9DQUxFX0lSRUFESU5HTEFZT1VUICIxIgogIExPQ0FMRV9JVElNRSAiMSIKICBMT0NBTEVfSVRJTUVNQVJLUE9TTiAiMCIKICBMT0NBTEVfSVRMWkVSTyAiMSIKICBMT0NBTEVfUzExNTkgIkFNIgogIExPQ0FMRV9TMjM1OSAiUE0iCiAgTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSAiSVNSIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTEgIuEiCiAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiAi4iIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUUzICLjIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTQgIuQiCiAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSAi5SIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUU2ICL5IgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTcgIuAiCiAgTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSAiSEVCIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSAi6fDl4PgiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyICL04fjl4PgiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzICLu+PUiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0ICLg9Pjp7CIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUgIu7g6SIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYgIunl8OkiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3ICLp5ezpIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCAi4OXi5fHoIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSAi8fTo7uH4IgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAgIuDl9+jl4fgiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSAi8OXh7uH4IgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIgIuP27uH4IgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMgIiIKICBMT0NBTEVfU0NPVU5UUlkgIklzcmFlbCIKICBMT0NBTEVfU0NVUlJFTkNZICKkIgogIExPQ0FMRV9TREFURSAiLyIKICBMT0NBTEVfU0RBWU5BTUUxICLp5e2g+fDpIgogIExPQ0FMRV9TREFZTkFNRTIgIunl7aD57On56SIKICBMT0NBTEVfU0RBWU5BTUUzICLp5e2g+OHp8ukiCiAgTE9DQUxFX1NEQVlOQU1FNCAi6eXtoOfu6fnpIgogIExPQ0FMRV9TREFZTkFNRTUgIunl7aD56fnpIgogIExPQ0FMRV9TREFZTkFNRTYgIvnh+iIKICBMT0NBTEVfU0RBWU5BTUU3ICLp5e2g+OD55e8iCiAgTE9DQUxFX1NERUNJTUFMICIuIgogIExPQ0FMRV9TRU5HQ09VTlRSWSAiSXNyYWVsIgogIExPQ0FMRV9TRU5HQ1VSUk5BTUUgIklzcmFlbGkgTmV3IFNoZWtlbCIKICBMT0NBTEVfU0VOR0xBTkdVQUdFICJIZWJyZXciCiAgTE9DQUxFX1NHUk9VUElORyAiMzswIgogIExPQ0FMRV9TSU5UTFNZTUJPTCAiSUxTIgogIExPQ0FMRV9TSVNPMzE2NkNUUllOQU1FICJJTCIKICBMT0NBTEVfU0lTTzYzOUxBTkdOQU1FICJoZSIKICBMT0NBTEVfU0xBTkdVQUdFICJIZWJyZXciCiAgTE9DQUxFX1NMSVNUICIsIgogIExPQ0FMRV9TTE9OR0RBVEUgImRkZGQg5M5kZCDhTU1NTSB5eXl5IgogIExPQ0FMRV9TTU9OREVDSU1BTFNFUCAiLiIKICBMT0NBTEVfU01PTkdST1VQSU5HICIzOzAiCiAgTE9DQUxFX1NNT05USE5BTUUxICLp8OXg+CIKICBMT0NBTEVfU01PTlRITkFNRTIgIvTh+OXg+CIKICBMT0NBTEVfU01PTlRITkFNRTMgIu749SIKICBMT0NBTEVfU01PTlRITkFNRTQgIuD0+OnsIgogIExPQ0FMRV9TTU9OVEhOQU1FNSAi7uDpIgogIExPQ0FMRV9TTU9OVEhOQU1FNiAi6eXw6SIKICBMT0NBTEVfU01PTlRITkFNRTcgIunl7OkiCiAgTE9DQUxFX1NNT05USE5BTUU4ICLg5eLl8egiCiAgTE9DQUxFX1NNT05USE5BTUU5ICLx9Oju4fgiCiAgTE9DQUxFX1NNT05USE5BTUUxMCAi4OX36OXh+CIKICBMT0NBTEVfU01PTlRITkFNRTExICLw5eHu4fgiCiAgTE9DQUxFX1NNT05USE5BTUUxMiAi4/bu4fgiCiAgTE9DQUxFX1NNT05USE5BTUUxMyAiIgogIExPQ0FMRV9TTU9OVEhPVVNBTkRTRVAgIiwiCiAgTE9DQUxFX1NOQU1FICJoZS1JTCIKICBMT0NBTEVfU05BVElWRUNUUllOQU1FICLp+fjg7CIKICBMT0NBTEVfU05BVElWRUNVUlJOQU1FICL59+wg5+P5IgogIExPQ0FMRV9TTkFUSVZFRElHSVRTICIwMTIzNDU2Nzg5IgogIExPQ0FMRV9TTkFUSVZFRElTUExBWU5BTUUgIvLh+On6ICjp+fjg7CkiCiAgTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSAi8uH46foiCiAgTE9DQUxFX1NORUdBVElWRVNJR04gIi0iCiAgTE9DQUxFX1NQT1NJVElWRVNJR04gIiIKICBMT0NBTEVfU1NDUklQVFMgIkhlYnI7IgogIExPQ0FMRV9TU0hPUlREQVRFICJkZC9NTS95eXl5IgogIExPQ0FMRV9TU09SVE5BTUUgIkRlZmF1bHQiCiAgTE9DQUxFX1NUSE9VU0FORCAiLCIKICBMT0NBTEVfU1RJTUUgIjoiCiAgTE9DQUxFX1NUSU1FRk9STUFUICJISDptbTpzcyIKICBMT0NBTEVfU1lFQVJNT05USCAiTU1NTSB5eXl5IgoKICBMR1JQSURfV0VTVEVSTl9FVVJPUEUrTEdSUElEX1JFU19CQVNFICLu8vjhIODp+OX04Okg5eD49uX6IOTh+On6IgogIExHUlBJRF9DRU5UUkFMX0VVUk9QRStMR1JQSURfUkVTX0JBU0UgIu746+Yg4On45fTg6SIKICBMR1JQSURfQkFMVElDK0xHUlBJRF9SRVNfQkFTRSAi4ezo6SIKICBMR1JQSURfR1JFRUsrTEdSUElEX1JFU19CQVNFICLp5eXw6SIKICBMR1JQSURfQ1lSSUxMSUMrTEdSUElEX1JFU19CQVNFICL36fjp7OkiCiAgTEdSUElEX1RVUktJU0grTEdSUElEX1JFU19CQVNFICLo5fj36SIKICBMR1JQSURfSkFQQU5FU0UrTEdSUElEX1JFU19CQVNFICLp9PDpIgogIExHUlBJRF9LT1JFQU4rTEdSUElEX1JFU19CQVNFICL35fjp4PDpIgogIExHUlBJRF9UUkFESVRJT05BTF9DSElORVNFK0xHUlBJRF9SRVNfQkFTRSAi8enw6SDu8eX4+ukiCiAgTEdSUElEX1NJTVBMSUZJRURfQ0hJTkVTRStMR1JQSURfUkVTX0JBU0UgIvHp8Okg7vTl+egiCiAgTEdSUElEX1RIQUkrTEdSUElEX1JFU19CQVNFICL64Ons8OPpIgogIExHUlBJRF9IRUJSRVcrTEdSUElEX1JFU19CQVNFICLy4fjpIgogIExHUlBJRF9BUkFCSUMrTEdSUElEX1JFU19CQVNFICLy+OHpIgogIExHUlBJRF9WSUVUTkFNRVNFK0xHUlBJRF9SRVNfQkFTRSAi5enp6PDu6SIKICBMR1JQSURfSU5ESUMrTEdSUElEX1JFU19CQVNFICLk6fDj6SIKICBMR1JQSURfR0VPUkdJQU4rTEdSUElEX1JFU19CQVNFICLi4OX44ukiCiAgTEdSUElEX0FSTUVOSUFOK0xHUlBJRF9SRVNfQkFTRSAi4Pju8OkiCn0K