LyoKICogIE5vdGVwYWQgKEdlcm1hbiByZXNvdXJjZXMpCiAqCiAqICBDb3B5cmlnaHQgMTk5Nyw5OCBNYXJjZWwgQmF1ciA8bWJhdXJAZzI2LmV0aHouY2g+CiAqICBDb3B5cmlnaHQgMjAwMiBTeWx2YWluIFBldHJlb2xsZSA8c3BldHJlb2xsZUB5YWhvby5mcj4KICoKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKI2luY2x1ZGUgIm5vdGVwYWRfcmVzLmgiCgpMQU5HVUFHRSBMQU5HX0dFUk1BTiwgU1VCTEFOR19ORVVUUkFMCgpNQUlOX01FTlUgTUVOVQp7CiBQT1BVUCAiJkRhdGVpIiB7CiAgTUVOVUlURU0gIiZOZXVcdFN0cmcrTiIsICAgICAgICAgICBDTURfTkVXCiAgTUVOVUlURU0gItYmZmZuZW4uLi5cdFN0cmcrTyIsICAgICAgICBDTURfT1BFTgogIE1FTlVJVEVNICImU3BlaWNoZXJuXHRTdHJnK1MiLCAgICAgICAgQ01EX1NBVkUKICBNRU5VSVRFTSAiU3BlaWNoZXJuICZ1bnRlci4uLiIsICAgICAgIENNRF9TQVZFX0FTCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZEcnVja2VuLi4uXHRTdHJnK1AiLCAgICAgICAgICBDTURfUFJJTlQKICBNRU5VSVRFTSAiU2VpdGUgZWluJnJpY2h0ZW4uLi4iLCAgICAgIENNRF9QQUdFX1NFVFVQCiAgTUVOVUlURU0gIkRydWNrZXImZWlucmljaHR1bmcuLi4iLCAgICBDTURfUFJJTlRFUl9TRVRVUAogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImQmVlbmRlbiIsICAgICAgICAgIENNRF9FWElUCiB9ClBPUFVQICImQmVhcmJlaXRlbiIgewogIE1FTlVJVEVNICImUvxja2fkbmdpZ1x0U3RyZytaIiwgICAgICAgQ01EX1VORE8KICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJkF1c3NjaG5laWRlblx0U3RyZytYIiwgICAgIENNRF9DVVQKICBNRU5VSVRFTSAiJktvcGllcmVuXHRTdHJnK0MiLCAgICAgICAgIENNRF9DT1BZCiAgTUVOVUlURU0gIiZFaW5m/Gdlblx0U3RyZytWIiwgICAgICAgICBDTURfUEFTVEUKICBNRU5VSVRFTSAiJkz2c2NoZW5cdEVudGYiLCAgICBDTURfREVMRVRFCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIkFsbGVzICZtYXJraWVyZW5cdFN0cmcrQSIsICBDTURfU0VMRUNUX0FMTAogIE1FTlVJVEVNICImVWhyemVpdC9EYXR1bVx0RjUiLCAgICAgICAgQ01EX1RJTUVfREFURQogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImWmVpbGVudW1icnVjaCIsICAgIENNRF9XUkFQCiAgTUVOVUlURU0gIiZTY2hyaWZ0YXJ0ZW4uLi4iLAlDTURfRk9OVAogfQpQT1BVUCAiJlN1Y2hlbiIgewogIE1FTlVJVEVNICJTdWNoZW4uLi5cdFN0cmcrRiIsIENNRF9TRUFSQ0gKICBNRU5VSVRFTSAiJldlaXRlcnN1Y2hlblx0RjMiLCBDTURfU0VBUkNIX05FWFQKICBNRU5VSVRFTSAiJkVyc2V0emVuLi4uXHRTdHJnK0giLCBDTURfUkVQTEFDRQogfQpQT1BVUCAiJkhpbGZlIiB7CiAgTUVOVUlURU0gIiZJbmhhbHQiLCAgICAgICAgICAgQ01EX0hFTFBfQ09OVEVOVFMKICBNRU5VSVRFTSAiJlN1Y2hlbi4uLiIsICAgICAgICBDTURfSEVMUF9TRUFSQ0gKICBNRU5VSVRFTSAiJkhpbGZlIGJlbnV0emVuIiwgICBDTURfSEVMUF9PTl9IRUxQCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gItwmYmVyIE5vdGVwYWQiLCBDTURfSEVMUF9BQk9VVF9OT1RFUEFECiB9Cn0KCi8qIERpYWxvZyBgUGFnZSBzZXR1cCcgKi8KCkRJQUxPR19QQUdFU0VUVVAgRElBTE9HIDAsIDAsIDIyNSwgOTUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQ0FQVElPTiAiU2VpdGUgZWlucmljaHRlbiIKewpMVEVYVCAgICAiJktvcGZ6ZWlsZToiLCAgMHgxNDAsICAgMTAsIDA3LCA0MCwgMTUKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9IRUFERVJWQUxVRSwgICA2MCwgMDUsMTEwLCAxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJkZ133plaWxlOiIsICAweDE0MiwgICAxMCwgMjQsIDQwLCAxNQpFRElUVEVYVCBJRENfUEFHRVNFVFVQX0ZPT1RFUlZBTFVFLCAgIDYwLCAyMiwxMTAsIDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QCgpHUk9VUEJPWCAiUuRuZGVyIChNaWxsaW1ldGVyKSIsICAweDE0NCwgIDEwLCA0MywxNjAsIDQ1CkxURVhUICAgICImTGlua3M6IiwgICAgICAgIDB4MTQ1LCAgIDIwLCA1NSwgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCBJRENfUEFHRVNFVFVQX0xFRlRWQUxVRSwgICAgIDUwLCA1NSwgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZPYmVuOiIsICAgICAgICAgMHgxNDgsICAgIDIwLCA3MywgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCBJRENfUEFHRVNFVFVQX1RPUFZBTFVFLCAgICAgIDUwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZSZWNodHM6IiwgICAgICAgMHgxNEIsIDEwMCwgNTUsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9SSUdIVFZBTFVFLCAgIDEzMCwgNTUsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImVW50ZW46IiwgICAgICAweDE0RSwxMDAsIDczLCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIElEQ19QQUdFU0VUVVBfQk9UVE9NVkFMVUUsICAxMzAsIDczLCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUAoKREVGUFVTSEJVVFRPTiAiT0siLCAgICAgICAgIElET0ssICAgICAgICAgICAgICAgICAgIDE4MCwgIDMsIDQwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICJBYmJyZWNoZW4iLCAgICAgSURDQU5DRUwsICAgICAgICAgICAgICAgMTgwLCAyMSwgNDAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIiZIaWxmZSIsICAgICAgIElESEVMUCwgICAgICAgICAgICAgICAgMTgwLCAzOSwgNDAsIDE1LCBXU19UQUJTVE9QCn0KCklERF9PRk5fVEVNUExBVEUgIERJQUxPRyAgRElTQ0FSREFCTEUgNTAsNTAsMzAwLDE1ClNUWUxFIERTXzNETE9PSyB8IERTX0NPTlRST0wgfCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19DTElQU0lCTElOR1MgfCBXU19CT1JERVIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpCRUdJTgogIExURVhUICJLb2RpZXJ1bmc6IiwgLTEsIDUsMCwgNTAsMTIKICBDT01CT0JPWCBJRENfT0ZOX0VOQ0NPTUJPLCA1MywwLCAxNTYsNDgsIFdTX0NISUxEIHwgV1NfVlNDUk9MTCB8IENCU19EUk9QRE9XTkxJU1QKRU5ECgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7ClNUUklOR19QQUdFU0VUVVBfSEVBREVSVkFMVUUsICAgIiZmIgpTVFJJTkdfUEFHRVNFVFVQX0ZPT1RFUlZBTFVFLCAgICJTZWl0ZSAmcCIKClNUUklOR19OT1RFUEFELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFZGl0b3IiClNUUklOR19FUlJPUiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGZWhsZXIiClNUUklOR19XQVJOSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBY2h0dW5nIgpTVFJJTkdfSU5GTywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5mb3JtYXRpb24iCgpTVFJJTkdfVU5USVRMRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKHVuYmVuYW5udCkiCgpTVFJJTkdfQUxMX0ZJTEVTLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSBEYXRlaWVuICgqLiopIgpTVFJJTkdfVEVYVF9GSUxFU19UWFQsICAgICAgICAgICAgICAgICAgIlRleHRkYXRlaWVuICgqLnR4dCkiCgpTVFJJTkdfVE9PTEFSR0UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGllIERhdGVpICclcycgaXN0IHp1IGdyb98gZvxyIGRlbiBFZGl0b3JcbiBcCkJlbnV0emVuIFNpZSBiaXR0ZSBlaW5lbiBhbmRlcmVuIEVkaXRvciwgdW0gZGllc2UgRGF0ZWkgenUgYmVhcmJlaXRlbi4iClNUUklOR19OT1RFWFQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTaWUgaGFiZW4ga2VpbmVuIFRleHQgZWluZ2VnZWJlbiwgZGVyIFwKZ2VzcGVpY2hlcnRcbiB3ZXJkZW4ga/ZubnRlLiBHZWJlbiBTaWUgVGV4dCBlaW4sIHVuZCB2ZXJzdWNoZW4gU2llIGVzIFwKXG5lcm5ldXQuIgpTVFJJTkdfRE9FU05PVEVYSVNULCAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGllIERhdGVpICclcydcbmV4aXN0aWVydCBuaWNodC5cblxuIFwKTfZjaHRlbiBTaWUgZWluZSBuZXVlIERhdGVpIGVyc3RlbGxlbiA/IgpTVFJJTkdfTk9UU0FWRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGF0ZWkgJXNcbiB3dXJkZSBnZeRuZGVydC5cblxuIFwKTfZjaHRlbiBTaWUgZGllIMRuZGVydW5nZW4gc3BlaWNoZXJuID8iClNUUklOR19OT1RGT1VORCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiclcycga2FubiBuaWNodCBnZWZ1bmRlbiB3ZXJkZW4uIgpTVFJJTkdfT1VUX09GX01FTU9SWSwgICAgICAgICAgICAgICAgICAgIk5pY2h0IGdlbvxnZW5kIEFyYmVpdHNzcGVpY2hlciwgXAp1bSBkaWVzZSBGdW5rdGlvblxuYWJ6dXNjaGxpZd9lbi4gQmVlbmRlbiBTaWUgZWluZSBvZGVyIG1laHJlcmUgXApcbkFud2VuZHVuZ2VuLCB1bSBkZW4gdmVyZvxnYmFyZW4gQXJiZWl0c3NwZWljaGVyIHp1XG5lcmj2aGVuLiIKClNUUklOR19VTklDT0RFX0xFLCAgICAgIlVuaWNvZGUgKFVURi0xNikiClNUUklOR19VTklDT0RFX0JFLCAgICAgIlVuaWNvZGUgKFVURi0xNiBCaWctRW5kaWFuKSIKClNUUklOR19MT1NTX09GX1VOSUNPREVfQ0hBUkFDVEVSUywgICAgICAgICAiJXNcblwKRGllc2UgRGF0ZWkgZW50aORsdCBVbmljb2RlLVplaWNoZW4sIGRpZSB2ZXJsb3JlbiBnZWhlbiwgd2VubiBcblwKU2llIGRpZSBEYXRlaSBtaXQgJXMtWmVpY2hlbmtvZGllcnVuZyBzcGVpY2hlcm4uIFxuXApVbSBkaWUgWmVpY2hlbiBiZWl6dWJlaGFsdGVuLCBrbGlja2VuIFNpZSBBYmJyZWNoZW4gdW5kIHfkaGxlbiBcblwKU2llIGVpbmUgZGVyIFVuaWNvZGUtT3B0aW9uZW4gaW4gZGVyIExpc3RlLiBcblwKTfZjaHRlbiBTaWUgZm9ydGZhaHJlbj8iCn0K