LyoKICogVHVya2lzaCBSZXNvdXJjZXMgZm9yIEhlbHAgVmlld2VyCiAqCiAqIENvcHlyaWdodCAyMDA2IEZhdGloIEH+/WP9IDxmYXNpY2lAbGludXgtc2V2ZW5sZXIub3JnPgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojaW5jbHVkZSAid2luaGVscF9yZXMuaCIKCi8qIE1lbnUgKi8KCk1BSU5fTUVOVSBNRU5VIExBTkdVQUdFIExBTkdfVFVSS0lTSCwgU1VCTEFOR19ERUZBVUxUCnsKIFBPUFVQICImRG9zeWEiIHsKICBNRU5VSVRFTSAiJkHnIiwgTU5JRF9GSUxFX09QRU4KICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiWWEmemT9ciIsIE1OSURfRklMRV9QUklOVAogIE1FTlVJVEVNICImWWF6/WP9IGF5YXJsYXL9Li4uIiwgTU5JRF9GSUxFX1NFVFVQCiAgIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImx/1r/f4iLCBNTklEX0ZJTEVfRVhJVAogfQogUE9QVVAgIkT8JnplbiIgewogICBNRU5VSVRFTSAiSyZvcHlhbGEuLi4iLCBNTklEX0VESVRfQ09QWURMRwogICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgTUVOVUlURU0gIiZBbm5vdGF0ZS4uLiIsIE1OSURfRURJVF9BTk5PVEFURQogfQogUE9QVVAgIlllciDdJm1sZXJpIiB7CiAgIE1FTlVJVEVNICImVGFu/W1sYS4uLiIsIE1OSURfQktNS19ERUZJTkUKIH0KIFBPUFVQICImT3B0aW9ucyIgewogICBQT1BVUAkiSGVscCBhbHdheXMgdmlzaWJsZSIKICAgQkVHSU4KICAgICBNRU5VSVRFTSAiRGVmYXVsdCIsCU1OSURfT1BUU19IRUxQX0RFRkFVTFQKICAgICBNRU5VSVRFTSAiVmlzaWJsZSIsCU1OSURfT1BUU19IRUxQX1ZJU0lCTEUKICAgICBNRU5VSVRFTSAiTm9uIHZpc2libGUiLAlNTklEX09QVFNfSEVMUF9OT05WSVNJQkxFCiAgRU5ECiAgTUVOVUlURU0gIkhpc3RvcnkiLAkJTU5JRF9PUFRTX0hJU1RPUlkKICBQT1BVUCAgICAiRm9udHMiCiAgQkVHSU4KICAgIE1FTlVJVEVNICJTbWFsbCIsCQlNTklEX09QVFNfRk9OVFNfU01BTEwKICAgIE1FTlVJVEVNICJOb3JtYWwiLCAgICAJTU5JRF9PUFRTX0ZPTlRTX05PUk1BTAogICAgTUVOVUlURU0gIkxhcmdlIiwgICAgIAlNTklEX09QVFNfRk9OVFNfTEFSR0UKICBFTkQKICBNRU5VSVRFTSAiVXNlIHN5c3RlbSBjb2xvcnMiLAlNTklEX09QVFNfU1lTVEVNX0NPTE9SUwogfQogUE9QVVAgIiZZYXJk/W0iIHsKICAgTUVOVUlURU0gIiZZYXJk/W0gS3VsbGFu/W39IiwgTU5JRF9IRUxQX0hFTFBPTgogICBNRU5VSVRFTSAiJkhlciBaYW1hbiDcc3R0ZSIsIE1OSURfSEVMUF9IRUxQVE9QCiAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICBNRU5VSVRFTSAiJkJpbGdpLi4uIiwgTU5JRF9IRUxQX0FCT1VUCiNpZmRlZiBXSU5FTElCCiAgIE1FTlVJVEVNICJXSU5FICZIYWtr/W5kYSIsIE1OSURfSEVMUF9XSU5FCiNlbmRpZgogfQp9CgovKiBTdHJpbmdzICovClNUUklOR1RBQkxFIERJU0NBUkRBQkxFIExBTkdVQUdFIExBTkdfVFVSS0lTSCwgU1VCTEFOR19ERUZBVUxUCnsKU1RJRF9XSU5FX0hFTFAsIAkiV0lORSBZYXJk/W0iClNUSURfV0hFUlJPUiwgCQkiSEFUQSIKU1RJRF9XQVJOSU5HLCAgCQkiVVlBUkkiClNUSURfSU5GTywgIAkJIkJpbGdpIgpTVElEX05PVF9JTVBMRU1FTlRFRCwgCSJIZW78eiB0YW1hbWxhbm1hZP0iClNUSURfSExQRklMRV9FUlJPUl9zLCAJIiclcycgeWFyZP1tIGRvc3lhc/0gYef9bP1ya2VuIGhhdGEiClNUSURfSU5ERVgsIAkJIibd52luZGVraWxlciIKU1RJRF9DT05URU5UUywJCSJTdW1tYXJ5IgpTVElEX0JBQ0ssIAkJIiZHZXJpIgpTVElEX0FMTF9GSUxFUywgCSJU/G0gZG9zeWFsYXIgKCouKikiClNUSURfSEVMUF9GSUxFU19ITFAsIAkiWWFyZP1tIGRvc3lhbGFy/SAoKi5obHApIgpTVElEX0ZJTEVfTk9UX0ZPVU5EX3MJIkNhbm5vdCBmaW5kICclcycuIERvIHlvdSB3YW50IHRvIGZpbmQgdGhpcyBmaWxlIHlvdXJzZWxmPyIKU1RJRF9OT19SSUNIRURJVAkiQ2Fubm90IGZpbmQgYSByaWNoZWRpdCBpbXBsZW1lbnRhdGlvbi4uLiBBYm9ydGluZyIKU1RJRF9QU0hfSU5ERVgsCQkiSGVscCB0b3BpY3M6ICIKfQo=