LyoKICogSGVscCBWaWV3ZXIKICoKICogQ29weXJpZ2h0IDE5OTYgVWxyaWNoIFNjaG1pZAogKiBTd2VkaXNoIGxhbmd1YWdlIGJ5IEthcmwgQmFja3N0cvZtIDxrYXJsX2JAZ2VvY2l0aWVzLmNvbT4KICogQ29weXJpZ2h0IDIwMDIgU3lsdmFpbiBQZXRyZW9sbGUgPHNwZXRyZW9sbGVAeWFob28uZnI+CiAqIENvcHlyaWdodCAyMDA3LCAyMDA4IERhbmllbCBOeWxhbmRlciA8cG9AZGFuaWVsbnlsYW5kZXIuc2U+CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCi8qIE1lbnUgKi8KCk1BSU5fTUVOVSBNRU5VIExBTkdVQUdFIExBTkdfU1dFRElTSCwgU1VCTEFOR19ORVVUUkFMCnsKIFBPUFVQICImQXJraXYiIHsKICBNRU5VSVRFTSAiJtZwcG5hIiwgTU5JRF9GSUxFX09QRU4KICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJlNrcml2IHV0IiwgTU5JRF9GSUxFX1BSSU5UCiAgTUVOVUlURU0gIlNrcml2YXIma29uZmlndXJhdGlvbi4uLiIsIE1OSURfRklMRV9TRVRVUAogICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiQSZ2c2x1dGEiLCBNTklEX0ZJTEVfRVhJVAogfQogUE9QVVAgIlImZWRpZ2VyYSIgewogICBNRU5VSVRFTSAiJktvcGllcmEuLi4iLCBNTklEX0VESVRfQ09QWURMRwogICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgTUVOVUlURU0gIiZLb21tZW50ZXJhLi4uIiwgTU5JRF9FRElUX0FOTk9UQVRFCiB9CiBQT1BVUCAiJkJva23kcmtlIiB7CiAgIE1FTlVJVEVNICImRGVmaW5pZXJhLi4uIiwgTU5JRF9CS01LX0RFRklORQogfQogUE9QVVAgIkEmbHRlcm5hdGl2IiB7CiAgIFBPUFVQCSJIauRscGVuIGFsbHRpZCBzeW5saWciCiAgIEJFR0lOCiAgICAgTUVOVUlURU0gIlN0YW5kYXJkIiwJTU5JRF9PUFRTX0hFTFBfREVGQVVMVAogICAgIE1FTlVJVEVNICJTeW5saWciLAlNTklEX09QVFNfSEVMUF9WSVNJQkxFCiAgICAgTUVOVUlURU0gIkludGUgc3lubGlnIiwJTU5JRF9PUFRTX0hFTFBfTk9OVklTSUJMRQogIEVORAogIE1FTlVJVEVNICJIaXN0b3JpayIsCQlNTklEX09QVFNfSElTVE9SWQogIFBPUFVQICAgICJUeXBzbml0dCIKICBCRUdJTgogICAgTUVOVUlURU0gIkxpdGVuIiwJCU1OSURfT1BUU19GT05UU19TTUFMTAogICAgTUVOVUlURU0gIk5vcm1hbCIsICAgIAlNTklEX09QVFNfRk9OVFNfTk9STUFMCiAgICBNRU5VSVRFTSAiU3RvciIsICAgICAJTU5JRF9PUFRTX0ZPTlRTX0xBUkdFCiAgRU5ECiAgTUVOVUlURU0gIkFuduRuZCBzeXN0ZW1m5HJnZXIiLAlNTklEX09QVFNfU1lTVEVNX0NPTE9SUwogfQogUE9QVVAgIiZIauRscCIgewogICBNRU5VSVRFTSAiSGrkbHAgJmb2ciBoauRscCIsIE1OSURfSEVMUF9IRUxQT04KICAgTUVOVUlURU0gIkFsbHRpZCAm9nZlcnN0IiwgTU5JRF9IRUxQX0hFTFBUT1AKICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgIE1FTlVJVEVNICImSW5mby4uLiIsIE1OSURfSEVMUF9BQk9VVAojaWZkZWYgV0lORUxJQgogICBNRU5VSVRFTSAiJk9tIFdpbmUiLCBNTklEX0hFTFBfV0lORQojZW5kaWYKIH0KfQoKLyogU3RyaW5ncyAqLwpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRSBMQU5HVUFHRSBMQU5HX1NXRURJU0gsIFNVQkxBTkdfTkVVVFJBTAp7ClNUSURfV0lORV9IRUxQLCAJIldJTkUgSGrkbHAiClNUSURfV0hFUlJPUiwgCQkiRkVMIgpTVElEX1dBUk5JTkcsICAJCSJWQVJOSU5HIgpTVElEX0lORk8sICAJCSJJbmZvcm1hdGlvbiIKU1RJRF9OT1RfSU1QTEVNRU5URUQsIAkiSW50ZSBpbXBsZW1lbnRlcmF0IgpTVElEX0hMUEZJTEVfRVJST1JfcywgCSJGZWwgdmlkIGzkc25pbmcgYXYgaGrkbHBmaWxlbiBgJXMnIgpTVElEX0lOREVYLCAJCSImSW5uZWjlbGwiClNUSURfQ09OVEVOVFMsCQkiU2FtbWFuZHJhZyIKU1RJRF9CQUNLLCAJCSImQmFr5XQiClNUSURfQUxMX0ZJTEVTLCAJIkFsbGEgZmlsZXIgKCouKikiClNUSURfSEVMUF9GSUxFU19ITFAsIAkiSGrkbHBmaWxlciAoKi5obHApIgpTVElEX0ZJTEVfTk9UX0ZPVU5EX3MJIkthbiBpbnRlIGhpdHRhICclcycuIFZpbGwgZHUgc/ZrYSBlZnRlciBkZW5uYSBmaWw/IgpTVElEX05PX1JJQ0hFRElUCSJLYW4gaW50ZSBoaXR0YSBlbiBpbXBsZW1lbnRhdGlvbiBhdiByaWNoZWRpdC4uLiBBdnNsdXRhciIKU1RJRF9QU0hfSU5ERVgsCQkiSGrkbHBydWJyaWtlcjogIgp9Cg==