LyoKICogTG9jYWxlIGRlZmluaXRpb25zIGZvciBLYXpha2gKICoKICogQ29weXJpZ2h0IDIwMDIgQWxleGFuZHJlIEp1bGxpYXJkIGZvciBDb2RlV2VhdmVycwogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojcHJhZ21hIGNvZGVfcGFnZSgxMjUxKQoKU1RSSU5HVEFCTEUgTEFOR1VBR0UgTEFOR19LQVpBSywgU1VCTEFOR19ERUZBVUxUCnsKICBMT0NBTEVfRk9OVFNJR05BVFVSRSBMIlx4MDIwM1x4ODAwMFx4Mzg0OFx4MDAwMFx4MDAwMFx4MDAwMFx4MDAwMFx4MDAwMFx4MDAwNFx4MDAwMFx4MDAwMFx4MDAwMlx4MDAwNFx4MDAwMFx4MDAwMFx4MDIwMiIKICBMT0NBTEVfSUNBTEVOREFSVFlQRSAiMSIKICBMT0NBTEVfSUNFTlRVUlkgIjEiCiAgTE9DQUxFX0lDT1VOVFJZICI3IgogIExPQ0FMRV9JQ1VSUkRJR0lUUyAiMiIKICBMT0NBTEVfSUNVUlJFTkNZICIwIgogIExPQ0FMRV9JREFURSAiMSIKICBMT0NBTEVfSURBWUxaRVJPICIxIgogIExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSAiMTI1MSIKICBMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSAiODY2IgogIExPQ0FMRV9JREVGQVVMVENPVU5UUlkgIjciCiAgTE9DQUxFX0lERUZBVUxURUJDRElDQ09ERVBBR0UgIjIwODgwIgogIExPQ0FMRV9JREVGQVVMVExBTkdVQUdFICIwNDNmIgogIExPQ0FMRV9JREVGQVVMVE1BQ0NPREVQQUdFICIxMDAwNyIKICBMT0NBTEVfSURFRkFVTFRVTklYQ09ERVBBR0UgIjI4NTk1IgogIExPQ0FMRV9JRElHSVRTICIyIgogIExPQ0FMRV9JRElHSVRTVUJTVElUVVRJT04gIjEiCiAgTE9DQUxFX0lGSVJTVERBWU9GV0VFSyAiMCIKICBMT0NBTEVfSUZJUlNUV0VFS09GWUVBUiAiMCIKICBMT0NBTEVfSUlOVExDVVJSRElHSVRTICIyIgogIExPQ0FMRV9JTEFOR1VBR0UgIjA0M2YiCiAgTE9DQUxFX0lMREFURSAiMSIKICBMT0NBTEVfSUxaRVJPICIxIgogIExPQ0FMRV9JTUVBU1VSRSAiMCIKICBMT0NBTEVfSU1PTkxaRVJPICIxIgogIExPQ0FMRV9JTkVHQ1VSUiAiMSIKICBMT0NBTEVfSU5FR05VTUJFUiAiMSIKICBMT0NBTEVfSU5FR1NFUEJZU1BBQ0UgIjAiCiAgTE9DQUxFX0lORUdTSUdOUE9TTiAiMyIKICBMT0NBTEVfSU5FR1NZTVBSRUNFREVTICIxIgogIExPQ0FMRV9JTkVVVFJBTCAiMCIKICBMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIgIjAiCiAgTE9DQUxFX0lQQVBFUlNJWkUgIjkiCiAgTE9DQUxFX0lQT1NTRVBCWVNQQUNFICIwIgogIExPQ0FMRV9JUE9TU0lHTlBPU04gIjMiCiAgTE9DQUxFX0lQT1NTWU1QUkVDRURFUyAiMSIKICBMT0NBTEVfSVJFQURJTkdMQVlPVVQgIjAiCiAgTE9DQUxFX0lUSU1FICIxIgogIExPQ0FMRV9JVElNRU1BUktQT1NOICIwIgogIExPQ0FMRV9JVExaRVJPICIwIgogIExPQ0FMRV9TMTE1OSAiIgogIExPQ0FMRV9TMjM1OSAiIgogIExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUgIktBWiIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUUxICLE8SIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUUyICLR8SIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUUzICLR8CIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUU0ICLB8SIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUU1ICLG7CIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUU2ICLR7SIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUU3ICLG6iIKICBMT0NBTEVfU0FCQlJFVkxBTkdOQU1FICJLS1oiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxIEwiXHgwNDlhXHgwNDMwXHgwNGEzIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiBMIlx4MDQxMFx4MDQ5Ylx4MDQzZiIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMgIs3g8yIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQgTCJceDA0MjFceDA0ZDlceDA0NDMiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1ICLM4OwiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2ICLM4PMiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3ICLYs+siCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4ICLS4OwiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5IEwiXHgwNDlhXHgwNDRiXHgwNDQwIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAgTCJceDA0OWFceDA0MzBceDA0MzciCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSBMIlx4MDQ5YVx4MDQzMFx4MDQ0MCIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyICLG5esiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMyAiIgogIExPQ0FMRV9TQ09VTlRSWSAiS2F6YWtoc3RhbiIKICBMT0NBTEVfU0NVUlJFTkNZICLSIgogIExPQ0FMRV9TREFURSAiLiIKICBMT0NBTEVfU0RBWU5BTUUxIEwiXHgwNDE0XHgwNGFmXHgwNDM5XHgwNDQxXHgwNDM1XHgwNDNkXHgwNDMxXHgwNDU2IgogIExPQ0FMRV9TREFZTkFNRTIgItHl6fHl7eGzIgogIExPQ0FMRV9TREFZTkFNRTMgTCJceDA0MjFceDA0ZDlceDA0NDBceDA0NDFceDA0MzVceDA0M2RceDA0MzFceDA0NTYiCiAgTE9DQUxFX1NEQVlOQU1FNCAiweXp8eXt4bMiCiAgTE9DQUxFX1NEQVlOQU1FNSBMIlx4MDQxNlx4MDRiMVx4MDQzY1x4MDQzMCIKICBMT0NBTEVfU0RBWU5BTUU2ICLR5e3hsyIKICBMT0NBTEVfU0RBWU5BTUU3ICLG5erx5e3hsyIKICBMT0NBTEVfU0RFQ0lNQUwgIiwiCiAgTE9DQUxFX1NFTkdDT1VOVFJZICJLYXpha2hzdGFuIgogIExPQ0FMRV9TRU5HQ1VSUk5BTUUgIlRlbmdlIgogIExPQ0FMRV9TRU5HTEFOR1VBR0UgIkthemFraCIKICBMT0NBTEVfU0dST1VQSU5HICIzOzAiCiAgTE9DQUxFX1NJTlRMU1lNQk9MICJLWlQiCiAgTE9DQUxFX1NJU08zMTY2Q1RSWU5BTUUgIktaIgogIExPQ0FMRV9TSVNPNjM5TEFOR05BTUUgImtrIgogIExPQ0FMRV9TTEFOR1VBR0UgIkthemFraCIKICBMT0NBTEVfU0xJU1QgIjsiCiAgTE9DQUxFX1NMT05HREFURSAiZCBNTU1NIHl5eXkgJ+YuJyIKICBMT0NBTEVfU01PTkRFQ0lNQUxTRVAgIi0iCiAgTE9DQUxFX1NNT05HUk9VUElORyAiMzswIgogIExPQ0FMRV9TTU9OVEhOQU1FMSBMIlx4MDQ5Ylx4MDQzMFx4MDRhM1x4MDQ0Mlx4MDQzMFx4MDQ0MCIKICBMT0NBTEVfU01PTlRITkFNRTIgTCJceDA0MzBceDA0OWJceDA0M2ZceDA0MzBceDA0M2QiCiAgTE9DQUxFX1NNT05USE5BTUUzICLt4PPw++ciCiAgTE9DQUxFX1NNT05USE5BTUU0IEwiXHgwNDQxXHgwNGQ5XHgwNDQzXHgwNDU2XHgwNDQwIgogIExPQ0FMRV9TTU9OVEhOQU1FNSAi7ODs+/AiCiAgTE9DQUxFX1NNT05USE5BTUU2ICLs4PPx++wiCiAgTE9DQUxFX1NNT05USE5BTUU3ICL4s+vk5SIKICBMT0NBTEVfU01PTlRITkFNRTggIvLg7PvnIgogIExPQ0FMRV9TTU9OVEhOQU1FOSBMIlx4MDQ5Ylx4MDQ0Ylx4MDQ0MFx4MDQzYVx4MDRhZlx4MDQzOVx4MDQzNVx4MDQzYSIKICBMT0NBTEVfU01PTlRITkFNRTEwIEwiXHgwNDliXHgwNDMwXHgwNDM3XHgwNDMwXHgwNDNkIgogIExPQ0FMRV9TTU9OVEhOQU1FMTEgTCJceDA0OWJceDA0MzBceDA0NDBceDA0MzBceDA0NDhceDA0MzAiCiAgTE9DQUxFX1NNT05USE5BTUUxMiBMIlx4MDQzNlx4MDQzNVx4MDQzYlx4MDQ0Mlx4MDQzZVx4MDQ5Ylx4MDQ0MVx4MDQzMFx4MDQzZCIKICBMT0NBTEVfU01PTlRITkFNRTEzICIiCiAgTE9DQUxFX1NNT05USE9VU0FORFNFUCAioCIKICBMT0NBTEVfU05BTUUgImtrLUtaIgogIExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUgTCJceDA0OWFceDA0MzBceDA0MzdceDA0MzBceDA0OWJceDA0NDFceDA0NDJceDA0MzBceDA0M2QiCiAgTE9DQUxFX1NOQVRJVkVDVVJSTkFNRSAi0iIKICBMT0NBTEVfU05BVElWRURJR0lUUyAiMDEyMzQ1Njc4OSIKICBMT0NBTEVfU05BVElWRURJU1BMQVlOQU1FICIiCiAgTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSBMIlx4MDQ5YVx4MDQzMFx4MDQzN1x4MDQzMFx4MDQ5YiIKICBMT0NBTEVfU05FR0FUSVZFU0lHTiAiLSIKICBMT0NBTEVfU1BPU0lUSVZFU0lHTiAiIgogIExPQ0FMRV9TU0NSSVBUUyAiQ3lybDsiCiAgTE9DQUxFX1NTSE9SVERBVEUgImRkLk1NLnl5eXkiCiAgTE9DQUxFX1NTT1JUTkFNRSAiRGVmYXVsdCIKICBMT0NBTEVfU1RIT1VTQU5EICKgIgogIExPQ0FMRV9TVElNRSAiOiIKICBMT0NBTEVfU1RJTUVGT1JNQVQgIkg6bW06c3MiCiAgTE9DQUxFX1NZRUFSTU9OVEggIk1NTU0geXl5eSIKCiAgTEdSUElEX1dFU1RFUk5fRVVST1BFK0xHUlBJRF9SRVNfQkFTRSAiV2VzdGVybiBFdXJvcGUgYW5kIFVuaXRlZCBTdGF0ZXMiCiAgTEdSUElEX0NFTlRSQUxfRVVST1BFK0xHUlBJRF9SRVNfQkFTRSAiQ2VudHJhbCBFdXJvcGUiCiAgTEdSUElEX0JBTFRJQytMR1JQSURfUkVTX0JBU0UgIkJhbHRpYyIKICBMR1JQSURfR1JFRUsrTEdSUElEX1JFU19CQVNFICJHcmVlayIKICBMR1JQSURfQ1lSSUxMSUMrTEdSUElEX1JFU19CQVNFICJDeXJpbGxpYyIKICBMR1JQSURfVFVSS0lTSCtMR1JQSURfUkVTX0JBU0UgIlR1cmtpYyIKICBMR1JQSURfSkFQQU5FU0UrTEdSUElEX1JFU19CQVNFICJKYXBhbmVzZSIKICBMR1JQSURfS09SRUFOK0xHUlBJRF9SRVNfQkFTRSAiS29yZWFuIgogIExHUlBJRF9UUkFESVRJT05BTF9DSElORVNFK0xHUlBJRF9SRVNfQkFTRSAiVHJhZGl0aW9uYWwgQ2hpbmVzZSIKICBMR1JQSURfU0lNUExJRklFRF9DSElORVNFK0xHUlBJRF9SRVNfQkFTRSAiU2ltcGxpZmllZCBDaGluZXNlIgogIExHUlBJRF9USEFJK0xHUlBJRF9SRVNfQkFTRSAiVGhhaSIKICBMR1JQSURfSEVCUkVXK0xHUlBJRF9SRVNfQkFTRSAiSGVicmV3IgogIExHUlBJRF9BUkFCSUMrTEdSUElEX1JFU19CQVNFICJBcmFiaWMiIAogIExHUlBJRF9WSUVUTkFNRVNFK0xHUlBJRF9SRVNfQkFTRSAiVmlldG5hbWVzZSIKICBMR1JQSURfSU5ESUMrTEdSUElEX1JFU19CQVNFICJJbmRpYyIKICBMR1JQSURfR0VPUkdJQU4rTEdSUElEX1JFU19CQVNFICJHZW9yZ2lhbiIKICBMR1JQSURfQVJNRU5JQU4rTEdSUElEX1JFU19CQVNFICJBcm1lbmlhbiIKfQo=